From ef33e8d3c4757f37ac4da74568c747bd45bfbff5 Mon Sep 17 00:00:00 2001 From: afc163 Date: Mon, 14 Jul 2025 03:29:54 +0000 Subject: [PATCH] deploy: c6973db913d66410c0d0e2cb87f0ea020e5891a9 --- account/center/index.html | 4 ++-- account/index.html | 4 ++-- account/settings/index.html | 4 ++-- dashboard/analysis/index.html | 4 ++-- dashboard/index.html | 4 ++-- dashboard/monitor/index.html | 4 ++-- dashboard/workplace/index.html | 4 ++-- exception/403/index.html | 4 ++-- exception/404/index.html | 4 ++-- exception/500/index.html | 4 ++-- exception/index.html | 4 ++-- form/advanced-form/index.html | 4 ++-- form/basic-form/index.html | 4 ++-- form/index.html | 4 ++-- form/step-form/index.html | 4 ++-- index.html | 4 ++-- list/basic-list/index.html | 4 ++-- list/card-list/index.html | 4 ++-- list/index.html | 4 ++-- list/search/applications/index.html | 4 ++-- list/search/articles/index.html | 4 ++-- list/search/index.html | 4 ++-- list/search/projects/index.html | 4 ++-- list/table-list/index.html | 4 ++-- preload_helper.90bc74cb.js => preload_helper.71166f16.js | 2 +- profile/advanced/index.html | 4 ++-- profile/basic/index.html | 4 ++-- profile/index.html | 4 ++-- result/fail/index.html | 4 ++-- result/index.html | 4 ++-- result/success/index.html | 4 ++-- umi.0bc66f47.js => umi.cc6a6985.js | 4 ++-- umi.0bc66f47.js.map => umi.cc6a6985.js.map | 0 user/index.html | 4 ++-- user/login/index.html | 4 ++-- user/register-result/index.html | 4 ++-- user/register/index.html | 4 ++-- vendors_0-async.7e409de9.js => vendors_0-async.88a28419.js | 4 ++-- ...0-async.7e409de9.js.map => vendors_0-async.88a28419.js.map | 2 +- 39 files changed, 74 insertions(+), 74 deletions(-) rename preload_helper.90bc74cb.js => preload_helper.71166f16.js (97%) rename umi.0bc66f47.js => umi.cc6a6985.js (99%) rename umi.0bc66f47.js.map => umi.cc6a6985.js.map (100%) rename vendors_0-async.7e409de9.js => vendors_0-async.88a28419.js (99%) rename vendors_0-async.7e409de9.js.map => vendors_0-async.88a28419.js.map (62%) diff --git a/account/center/index.html b/account/center/index.html index a855c55c..517609d8 100644 --- a/account/center/index.html +++ b/account/center/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/account/index.html b/account/index.html index a855c55c..517609d8 100644 --- a/account/index.html +++ b/account/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/account/settings/index.html b/account/settings/index.html index a855c55c..517609d8 100644 --- a/account/settings/index.html +++ b/account/settings/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/dashboard/analysis/index.html b/dashboard/analysis/index.html index a855c55c..517609d8 100644 --- a/dashboard/analysis/index.html +++ b/dashboard/analysis/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/dashboard/index.html b/dashboard/index.html index a855c55c..517609d8 100644 --- a/dashboard/index.html +++ b/dashboard/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/dashboard/monitor/index.html b/dashboard/monitor/index.html index a855c55c..517609d8 100644 --- a/dashboard/monitor/index.html +++ b/dashboard/monitor/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/dashboard/workplace/index.html b/dashboard/workplace/index.html index a855c55c..517609d8 100644 --- a/dashboard/workplace/index.html +++ b/dashboard/workplace/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/exception/403/index.html b/exception/403/index.html index a855c55c..517609d8 100644 --- a/exception/403/index.html +++ b/exception/403/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/exception/404/index.html b/exception/404/index.html index a855c55c..517609d8 100644 --- a/exception/404/index.html +++ b/exception/404/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/exception/500/index.html b/exception/500/index.html index a855c55c..517609d8 100644 --- a/exception/500/index.html +++ b/exception/500/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/exception/index.html b/exception/index.html index a855c55c..517609d8 100644 --- a/exception/index.html +++ b/exception/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/form/advanced-form/index.html b/form/advanced-form/index.html index a855c55c..517609d8 100644 --- a/form/advanced-form/index.html +++ b/form/advanced-form/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/form/basic-form/index.html b/form/basic-form/index.html index a855c55c..517609d8 100644 --- a/form/basic-form/index.html +++ b/form/basic-form/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/form/index.html b/form/index.html index a855c55c..517609d8 100644 --- a/form/index.html +++ b/form/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/form/step-form/index.html b/form/step-form/index.html index a855c55c..517609d8 100644 --- a/form/step-form/index.html +++ b/form/step-form/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/index.html b/index.html index a855c55c..517609d8 100644 --- a/index.html +++ b/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/list/basic-list/index.html b/list/basic-list/index.html index a855c55c..517609d8 100644 --- a/list/basic-list/index.html +++ b/list/basic-list/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/list/card-list/index.html b/list/card-list/index.html index a855c55c..517609d8 100644 --- a/list/card-list/index.html +++ b/list/card-list/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/list/index.html b/list/index.html index a855c55c..517609d8 100644 --- a/list/index.html +++ b/list/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/list/search/applications/index.html b/list/search/applications/index.html index a855c55c..517609d8 100644 --- a/list/search/applications/index.html +++ b/list/search/applications/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/list/search/articles/index.html b/list/search/articles/index.html index a855c55c..517609d8 100644 --- a/list/search/articles/index.html +++ b/list/search/articles/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/list/search/index.html b/list/search/index.html index a855c55c..517609d8 100644 --- a/list/search/index.html +++ b/list/search/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/list/search/projects/index.html b/list/search/projects/index.html index a855c55c..517609d8 100644 --- a/list/search/projects/index.html +++ b/list/search/projects/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/list/table-list/index.html b/list/table-list/index.html index a855c55c..517609d8 100644 --- a/list/table-list/index.html +++ b/list/table-list/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/preload_helper.90bc74cb.js b/preload_helper.71166f16.js similarity index 97% rename from preload_helper.90bc74cb.js rename to preload_helper.71166f16.js index 616f3574..5815b9f4 100644 --- a/preload_helper.90bc74cb.js +++ b/preload_helper.71166f16.js @@ -1 +1 @@ -!function(){"use strict";var t="/".replace(/([^/])$/,"$1/"),e=location.pathname,n=e.startsWith(t)&&decodeURI("/".concat(e.slice(t.length)));if(n){var a=document,c=a.head,r=a.createElement.bind(a),i=function(t,e,n){var a,c=e.r[t]||(null===(a=Object.entries(e.r).find((function(e){var n=e[0];return new RegExp("^".concat(n.replace(/\/:[^/]+/g,"/[^/]+").replace("/*","/.+"),"$")).test(t)})))||void 0===a?void 0:a[1]);return null==c?void 0:c.map((function(t){var a=e.f[t][1],c=e.f[t][0];return{type:c.split(".").pop(),url:"".concat(n.publicPath).concat(c),attrs:[["data-".concat(e.b),"".concat(e.p,":").concat(a)]]}}))}(n,{"p":"ant-design-pro","b":"mako","f":[["59cf2cec-async.c485c64f.js","59cf2cec"],["59cf2cec-async.d6d2c094.css","59cf2cec"],["dfb5f1e2-async.5b877eaf.js","dfb5f1e2"],["047aaf9a-async.462a4597.js","047aaf9a"],["5d7b1db7-async.3c76de97.js","5d7b1db7"],["047382c4-async.7159200c.js","047382c4"],["c93b0638-async.a317e1ae.js","c93b0638"],["795b86d4-async.ed2a9b6e.js","795b86d4"],["0db515fe-async.370239b6.js","0db515fe"],["f9d5225c-async.1164e335.js","f9d5225c"],["90b49754-async.1a2c41ba.js","90b49754"],["eac606f7-async.54dcb311.js","eac606f7"],["974ebe7b-async.c3ee51ec.js","974ebe7b"],["090afd1b-async.76c533f3.js","090afd1b"],["9f6a1ecf-async.5109d996.js","9f6a1ecf"],["157e9faf-async.95e9b9bb.js","157e9faf"],["98b0a28d-async.9c86e095.js","98b0a28d"],["6a91e4b2-async.dd04556d.js","6a91e4b2"],["8a4700ed-async.ff3f02d9.js","8a4700ed"],["870a7d20-async.f259bf21.js","870a7d20"],["62b7ffdd-async.8cfb083b.js","62b7ffdd"],["5e10c4d2-async.d9993b4a.js","5e10c4d2"],["147a5caf-async.09870843.js","147a5caf"],["dbd20fbd-async.7d22b22a.js","dbd20fbd"],["8aa2681b-async.807001f2.js","8aa2681b"],["8b39a838-async.2665ecc8.js","8b39a838"],["e682ca8f-async.04b17364.js","e682ca8f"],["2e181c77-async.cb1f3aa9.js","2e181c77"],["05793652-async.168fb1a9.js","05793652"],["vendors_1-async.7472648b.js","vendors_1"],["common-async.9a632192.js","common"],["vendors_0-async.7e409de9.js","vendors_0"]],"r":{"/":[0,1,29,31],"/user/*":[2,29,31],"/./*":[2,29,31,0,1],"/user/login":[28,29,31],"/user/register-result":[27,29],"/user/register":[26,29,31],"/dashboard/analysis":[25,29,31,0,1],"/dashboard/monitor":[24,29,31,0,1],"/dashboard/workplace":[23,29,31,0,1],"/form/basic-form":[22,29,31,0,1],"/form/step-form":[21,29,31,0,1],"/form/advanced-form":[20,29,31,0,1],"/list/search":[19,29,31,0,1],"/list/table-list":[15,29,31,0,1],"/list/basic-list":[14,29,31,0,1],"/list/card-list":[13,29,31,0,1],"/profile/basic":[12,29,31,0,1],"/profile/advanced":[11,29,31,0,1],"/result/success":[10,29,31,0,1],"/result/fail":[9,29,31,0,1],"/exception/403":[8,29,31,0,1],"/exception/404":[7,29,31,0,1],"/exception/500":[6,29,31,0,1],"/account/center":[5,29,31,0,1],"/account/settings":[4,29,31,0,1],"/list/search/articles":[18,29,30,31,19,0,1],"/list/search/projects":[17,29,30,31,19,0,1],"/list/search/applications":[16,29,30,31,19,0,1]}},{publicPath:"/"});null==i||i.forEach((function(t){var e,n=t.type,a=t.url;if("js"===n)(e=r("script")).src=a,e.async=!0;else{if("css"!==n)return;(e=r("link")).href=a,e.rel="preload",e.as="style"}t.attrs.forEach((function(t){e.setAttribute(t[0],t[1]||"")})),c.appendChild(e)}))}}(); \ No newline at end of file +!function(){"use strict";var t="/".replace(/([^/])$/,"$1/"),e=location.pathname,n=e.startsWith(t)&&decodeURI("/".concat(e.slice(t.length)));if(n){var a=document,c=a.head,r=a.createElement.bind(a),i=function(t,e,n){var a,c=e.r[t]||(null===(a=Object.entries(e.r).find((function(e){var n=e[0];return new RegExp("^".concat(n.replace(/\/:[^/]+/g,"/[^/]+").replace("/*","/.+"),"$")).test(t)})))||void 0===a?void 0:a[1]);return null==c?void 0:c.map((function(t){var a=e.f[t][1],c=e.f[t][0];return{type:c.split(".").pop(),url:"".concat(n.publicPath).concat(c),attrs:[["data-".concat(e.b),"".concat(e.p,":").concat(a)]]}}))}(n,{"p":"ant-design-pro","b":"mako","f":[["59cf2cec-async.c485c64f.js","59cf2cec"],["59cf2cec-async.d6d2c094.css","59cf2cec"],["dfb5f1e2-async.5b877eaf.js","dfb5f1e2"],["047aaf9a-async.462a4597.js","047aaf9a"],["5d7b1db7-async.3c76de97.js","5d7b1db7"],["047382c4-async.7159200c.js","047382c4"],["c93b0638-async.a317e1ae.js","c93b0638"],["795b86d4-async.ed2a9b6e.js","795b86d4"],["0db515fe-async.370239b6.js","0db515fe"],["f9d5225c-async.1164e335.js","f9d5225c"],["90b49754-async.1a2c41ba.js","90b49754"],["eac606f7-async.54dcb311.js","eac606f7"],["974ebe7b-async.c3ee51ec.js","974ebe7b"],["090afd1b-async.76c533f3.js","090afd1b"],["9f6a1ecf-async.5109d996.js","9f6a1ecf"],["157e9faf-async.95e9b9bb.js","157e9faf"],["98b0a28d-async.9c86e095.js","98b0a28d"],["6a91e4b2-async.dd04556d.js","6a91e4b2"],["8a4700ed-async.ff3f02d9.js","8a4700ed"],["870a7d20-async.f259bf21.js","870a7d20"],["62b7ffdd-async.8cfb083b.js","62b7ffdd"],["5e10c4d2-async.d9993b4a.js","5e10c4d2"],["147a5caf-async.09870843.js","147a5caf"],["dbd20fbd-async.7d22b22a.js","dbd20fbd"],["8aa2681b-async.807001f2.js","8aa2681b"],["8b39a838-async.2665ecc8.js","8b39a838"],["e682ca8f-async.04b17364.js","e682ca8f"],["2e181c77-async.cb1f3aa9.js","2e181c77"],["05793652-async.168fb1a9.js","05793652"],["vendors_1-async.7472648b.js","vendors_1"],["common-async.9a632192.js","common"],["vendors_0-async.88a28419.js","vendors_0"]],"r":{"/":[0,1,29,31],"/user/*":[2,29,31],"/./*":[2,29,31,0,1],"/user/login":[28,29,31],"/user/register-result":[27,29],"/user/register":[26,29,31],"/dashboard/analysis":[25,29,31,0,1],"/dashboard/monitor":[24,29,31,0,1],"/dashboard/workplace":[23,29,31,0,1],"/form/basic-form":[22,29,31,0,1],"/form/step-form":[21,29,31,0,1],"/form/advanced-form":[20,29,31,0,1],"/list/search":[19,29,31,0,1],"/list/table-list":[15,29,31,0,1],"/list/basic-list":[14,29,31,0,1],"/list/card-list":[13,29,31,0,1],"/profile/basic":[12,29,31,0,1],"/profile/advanced":[11,29,31,0,1],"/result/success":[10,29,31,0,1],"/result/fail":[9,29,31,0,1],"/exception/403":[8,29,31,0,1],"/exception/404":[7,29,31,0,1],"/exception/500":[6,29,31,0,1],"/account/center":[5,29,31,0,1],"/account/settings":[4,29,31,0,1],"/list/search/articles":[18,29,30,31,19,0,1],"/list/search/projects":[17,29,30,31,19,0,1],"/list/search/applications":[16,29,30,31,19,0,1]}},{publicPath:"/"});null==i||i.forEach((function(t){var e,n=t.type,a=t.url;if("js"===n)(e=r("script")).src=a,e.async=!0;else{if("css"!==n)return;(e=r("link")).href=a,e.rel="preload",e.as="style"}t.attrs.forEach((function(t){e.setAttribute(t[0],t[1]||"")})),c.appendChild(e)}))}}(); \ No newline at end of file diff --git a/profile/advanced/index.html b/profile/advanced/index.html index a855c55c..517609d8 100644 --- a/profile/advanced/index.html +++ b/profile/advanced/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/profile/basic/index.html b/profile/basic/index.html index a855c55c..517609d8 100644 --- a/profile/basic/index.html +++ b/profile/basic/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/profile/index.html b/profile/index.html index a855c55c..517609d8 100644 --- a/profile/index.html +++ b/profile/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/result/fail/index.html b/result/fail/index.html index a855c55c..517609d8 100644 --- a/result/fail/index.html +++ b/result/fail/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/result/index.html b/result/index.html index a855c55c..517609d8 100644 --- a/result/index.html +++ b/result/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/result/success/index.html b/result/success/index.html index a855c55c..517609d8 100644 --- a/result/success/index.html +++ b/result/success/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/umi.0bc66f47.js b/umi.cc6a6985.js similarity index 99% rename from umi.0bc66f47.js rename to umi.cc6a6985.js index abe1870b..58c11237 100644 --- a/umi.0bc66f47.js +++ b/umi.cc6a6985.js @@ -1,4 +1,4 @@ -!function(){var e={"047382c4":"047382c4-async.7159200c.js","047aaf9a":"047aaf9a-async.462a4597.js","05793652":"05793652-async.168fb1a9.js","090afd1b":"090afd1b-async.76c533f3.js","0db515fe":"0db515fe-async.370239b6.js","147a5caf":"147a5caf-async.09870843.js","157e9faf":"157e9faf-async.95e9b9bb.js","2e181c77":"2e181c77-async.cb1f3aa9.js","59cf2cec":"59cf2cec-async.c485c64f.js","5d7b1db7":"5d7b1db7-async.3c76de97.js","5e10c4d2":"5e10c4d2-async.d9993b4a.js","62b7ffdd":"62b7ffdd-async.8cfb083b.js","6a91e4b2":"6a91e4b2-async.dd04556d.js","795b86d4":"795b86d4-async.ed2a9b6e.js","870a7d20":"870a7d20-async.f259bf21.js","8a4700ed":"8a4700ed-async.ff3f02d9.js","8aa2681b":"8aa2681b-async.807001f2.js","8b39a838":"8b39a838-async.2665ecc8.js","90b49754":"90b49754-async.1a2c41ba.js","974ebe7b":"974ebe7b-async.c3ee51ec.js","98b0a28d":"98b0a28d-async.9c86e095.js","9f6a1ecf":"9f6a1ecf-async.5109d996.js",c93b0638:"c93b0638-async.a317e1ae.js",common:"common-async.9a632192.js",dbd20fbd:"dbd20fbd-async.7d22b22a.js",dfb5f1e2:"dfb5f1e2-async.5b877eaf.js",e682ca8f:"e682ca8f-async.04b17364.js",eac606f7:"eac606f7-async.54dcb311.js",f9d5225c:"f9d5225c-async.1164e335.js",vendors_0:"vendors_0-async.7e409de9.js",vendors_1:"vendors_1-async.7472648b.js"},t={"59cf2cec":"59cf2cec-async.d6d2c094.css",a2d4bfbe:"umi.0da0e9b5.css"},n={a2d4bfbe:0},r="undefined"!=typeof globalThis?globalThis:self,a=function(r,a,o){var i,l,s,u={};function c(e){var t=u[e];if(void 0!==t)return t.exports;var n={id:e,exports:{}};u[e]=n;var a={id:e,module:n,factory:r[e],require:c};return c.requireInterceptors.forEach(function(e){e(a);}),a.factory.call(a.module.exports,a.module,a.module.exports,a.require),n.exports;}c.requireInterceptors=[],c.e=function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]});},c.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},c.m=r,c.c=u,c.es=function(e,t){Object.keys(t).forEach(function(n){"default"===n||c.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:t[n]});});},c.d=Object.defineProperty.bind(Object),c.dr=function(e,t){return function(){var n=t();return n&&("object"==typeof n||"function"==typeof n)&&"function"==typeof n.then?n.then(function(t){return e(t);}):e(n);};},c.chunkEnsures={},c.ensure=function(e){return Promise.all(Object.keys(c.chunkEnsures).reduce(function(t,n){return c.chunkEnsures[n](e,t),t;},[]));},c.jsonpInstalled={},i=c.jsonpInstalled,c.chunkEnsures.jsonp=function(t,n){var r=i[t];if(0!==r){if(r)n.push(r[2]);else{var a=new Promise(function(e,n){r=i[t]=[e,n];});n.push(r[2]=a);var o=c.publicPath+e[t],l=Error();return c.loadScript(o,function(e){if(0!==(r=i[t])&&(i[t]=void 0),r){var n=e&&e.type,a=e&&e.target&&e.target.src;l.message="Loading chunk "+t+" failed. ("+n+" : "+a+")",l.name="ChunkLoadError",l.type=n,r[1](l);}},"chunk-"+t),a;}}},c.cssInstalled=n,c.findStylesheet=function(e){try{l||(l=new URL(c.publicPath.replace(/^(\/\/)/,"https:$1")).pathname);}catch(e){}return Array.from(document.querySelectorAll("link[href][rel=stylesheet]")).find(function(t){var n=t.getAttribute("href").split("?")[0];return n===e||n===c.publicPath+e||l&&n===l+e;});},c.createStylesheet=function(e,t,r,a,o){var i=document.createElement("link");return i.rel="stylesheet",i.type="text/css",i.href=t,i.onerror=i.onload=function(t){if(i.onerror=i.onload=null,"load"===t.type)n[e]=0,a();else{delete n[e];var r=t&&t.type,l=t&&t.target&&t.target.href,s=Error("Loading CSS chunk "+e+" failed.\n("+l+")");s.code="CSS_CHUNK_LOAD_FAILED",s.type=r,s.request=l,i.parentNode.removeChild(i),o(s);}},r?r.parentNode.insertBefore(i,r.nextSibling):document.head.appendChild(i),i;},c.chunkEnsures.css=function(e,r){if(n[e])r.push(n[e]);else if(0!==n[e]&&t[e])return n[e]=new Promise(function(n,r){var a=t[e],o=c.publicPath+a;c.findStylesheet(a)?n():c.createStylesheet(e,o,null,n,r);}),r.push(n[e]),r;},s={},c.loadScript=function(e,t,n){if(!self.document)return importScripts(e),t();if(s[e])return s[e].push(t);var r=document.querySelector('script[src="'+e+'"], script[data-mako="ant-design-pro:'+n+'"]');r||((r=document.createElement("script")).timeout=120,r.src=e),s[e]=[t];var a=function(t,n){clearTimeout(o);var a=s[e];if(delete s[e],r.parentNode&&r.parentNode.removeChild(r),a&&a.forEach(function(e){return e(n);}),t)return t(n);},o=setTimeout(a.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=a.bind(null,r.onerror),r.onload=a.bind(null,r.onload),document.head.appendChild(r);};var f=function(e){for(var t in e)r[t]=e[t];},d=function(e){var t=c.jsonpInstalled,n=e[0],r=e[1];n.some(function(e){return 0!==t[e];})&&f(r);for(var a=0;a25){var o=a(this).startOf(t).add(1,t).date(r),i=a(this).endOf(e);if(o.isBefore(i))return 1;}var l=a(this).startOf(t).date(r).startOf(e).subtract(1,"millisecond"),s=this.diff(l,e,!0);return s<0?a(this).startOf("week").week():Math.ceil(s);},o.weeks=function(e){return void 0===e&&(e=null),this.week(e);};};},"object"==typeof t&&void 0!==e?e.exports=a():"function"==typeof define&&define.amd?define(a):(r="undefined"!=typeof globalThis?globalThis:r||self).dayjs_plugin_weekOfYear=a();},"002639b3":function(e,t,n){"use strict";n.d(t,"__esModule",{value:!0}),n.e(t,{composeRef:function(){return f;},fillRef:function(){return c;},getNodeRef:function(){return h;},supportNodeRef:function(){return g;},supportRef:function(){return p;},useComposeRef:function(){return d;}});var r=n("777fffbe"),a=r._(n("99c0cd4c")),o=n("609f48be"),i=n("09fa7de7"),l=r._(n("1cf256f2")),s=r._(n("17ff5ee6")),u=Number(o.version.split(".")[0]),c=function(e,t){"function"==typeof e?e(t):"object"===(0,a.default)(e)&&e&&"current"in e&&(e.current=t);},f=function(){for(var e=arguments.length,t=Array(e),n=0;n=19)return!0;var t,n,r=(0,i.isMemo)(e)?e.type.type:e.type;return("function"!=typeof r||null!==(t=r.prototype)&&void 0!==t&&!!t.render||r.$$typeof===i.ForwardRef)&&("function"!=typeof e||null!==(n=e.prototype)&&void 0!==n&&!!n.render||e.$$typeof===i.ForwardRef);};function m(e){return(0,o.isValidElement)(e)&&!(0,s.default)(e);}var g=function(e){return m(e)&&p(e);},h=function(e){return e&&m(e)?e.props.propertyIsEnumerable("ref")?e.props.ref:e.ref:null;};},"01b099d1":function(e,t,n){"use strict";var r=n("f005dafe"),a=n("9f4ccb01"),o=n("58d603f1"),i=n("612e0fec"),l=a("".charCodeAt);r({target:"String",proto:!0},{isWellFormed:function(){for(var e=i(o(this)),t=e.length,n=0;n=56320||++n>=t||(64512&l(e,n))!=56320))return!1;}return!0;}});},"01be0067":function(e,t,n){"use strict";var r=n("f005dafe"),a=n("64ab11b8"),o=n("9f4ccb01"),i=n("2133c992"),l=a.Uint8Array,s=o(1..toString);l&&r({target:"Uint8Array",proto:!0,forced:!0},{toHex:function(){i(this);for(var e="",t=0,n=this.length;t1?arguments[1]:void 0;return a(this,e,t);}}),o("group");},"034cd552":function(e,t,n){n.d(t,"__esModule",{value:!0}),n.e(t,{Routes:function(){return z;},renderClient:function(){return U;}});var r=n("777fffbe"),a=n("852bbaa9"),o=n("78caf995"),i=r._(o),l=n("6a4db265"),s=r._(l),u=n("9ebaafa8"),c=r._(u),f=n("609f48be"),d=a._(f),p=n("6b27451a"),m=r._(p),g=n("c0e8a74c"),h=n("424649e6"),b=n("f979c155"),v=n("24415c1a"),y=r._(v),x=n("d61b8f3f"),w=r._(x),S=n("50eabb48"),k=r._(S),C=["content"],_=["content"],E=/^(http:|https:)?\/\//;function $(e){return E.test(e)||e.startsWith("/")&&!e.startsWith("/*")||e.startsWith("./")||e.startsWith("../");}var O=function(){return d.default.createElement("noscript",{dangerouslySetInnerHTML:{__html:"Enable JavaScript to run this app."}});},T=function(e){var t,n=e.loaderData,r=e.htmlPageOpts,a=e.manifest,o=(null==a||null===(t=a.assets)||void 0===t?void 0:t["umi.css"])||"";return d.default.createElement("script",{suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:"window.__UMI_LOADER_DATA__ = ".concat(JSON.stringify(n||{}),"; window.__UMI_METADATA_LOADER_DATA__ = ").concat(JSON.stringify(r||{}),"; window.__UMI_BUILD_ClIENT_CSS__ = '").concat(o,"'")}});};function M(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("string"==typeof e)return $(e)?(0,s.default)({src:e},t):{content:e};if("object"===(0,k.default)(e))return(0,s.default)((0,s.default)({},e),t);throw Error("Invalid script type: ".concat((0,k.default)(e)));}var P=function(e){var t,n,r,a,o,i,l=e.htmlPageOpts;return d.default.createElement(d.default.Fragment,null,(null==l?void 0:l.title)&&d.default.createElement("title",null,l.title),null==l||null===(t=l.favicons)||void 0===t?void 0:t.map(function(e,t){return d.default.createElement("link",{key:t,rel:"shortcut icon",href:e});}),(null==l?void 0:l.description)&&d.default.createElement("meta",{name:"description",content:l.description}),(null==l||null===(n=l.keywords)||void 0===n?void 0:n.length)&&d.default.createElement("meta",{name:"keywords",content:l.keywords.join(",")}),null==l||null===(r=l.metas)||void 0===r?void 0:r.map(function(e){return d.default.createElement("meta",{key:e.name,name:e.name,content:e.content});}),null==l||null===(a=l.links)||void 0===a?void 0:a.map(function(e,t){return d.default.createElement("link",(0,w.default)({key:t},e));}),null==l||null===(o=l.styles)||void 0===o?void 0:o.map(function(e,t){var n=$(e)?{type:"link",href:e}:{type:"style",content:e},r=n.type,a=n.href,o=n.content;return"link"===r?d.default.createElement("link",{key:t,rel:"stylesheet",href:a}):"style"===r?d.default.createElement("style",{key:t},o):void 0;}),null==l||null===(i=l.headScripts)||void 0===i?void 0:i.map(function(e,t){var n=M(e),r=n.content,a=(0,y.default)(n,C);return d.default.createElement("script",(0,w.default)({dangerouslySetInnerHTML:{__html:r},key:t},a));}));};function j(e){var t,n=e.children,r=e.loaderData,a=e.manifest,o=e.htmlPageOpts,i=e.__INTERNAL_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,l=e.mountElementId;if(null!=i&&i.pureHtml)return d.default.createElement("html",null,d.default.createElement("head",null),d.default.createElement("body",null,d.default.createElement(O,null),d.default.createElement("div",{id:l},n),d.default.createElement(T,{manifest:a,loaderData:r,htmlPageOpts:o})));if(null!=i&&i.pureApp)return d.default.createElement(d.default.Fragment,null,n);var s="undefined"==typeof window?null==a?void 0:a.assets["umi.css"]:window.__UMI_BUILD_ClIENT_CSS__;return d.default.createElement("html",{suppressHydrationWarning:!0,lang:(null==o?void 0:o.lang)||"en"},d.default.createElement("head",null,d.default.createElement("meta",{charSet:"utf-8"}),d.default.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1"}),s&&d.default.createElement("link",{suppressHydrationWarning:!0,rel:"stylesheet",href:s}),d.default.createElement(P,{htmlPageOpts:o})),d.default.createElement("body",null,d.default.createElement(O,null),d.default.createElement("div",{id:l},n),d.default.createElement(T,{manifest:a,loaderData:r,htmlPageOpts:o}),null==o||null===(t=o.scripts)||void 0===t?void 0:t.map(function(e,t){var n=M(e),r=n.content,a=(0,y.default)(n,_);return d.default.createElement("script",(0,w.default)({dangerouslySetInnerHTML:{__html:r},key:t},a));})));}var A=n("d49b8c42"),I=["redirect"];function R(e){var t=(0,g.useParams)(),n=(0,g.generatePath)(e.to,t),r=(0,h.useRouteProps)(),a=(0,g.useLocation)();null!=r&&r.keepQuery&&(n+=a.search+a.hash);var o=(0,s.default)((0,s.default)({},e),{},{to:n});return d.default.createElement(g.Navigate,(0,w.default)({replace:!0},o));}function N(){return d.default.createElement("div",null);}function L(e){var t=(0,A.useRouteData)().route,n=(0,h.useAppData)(),r=n.history,a=n.clientRoutes,o=(0,g.useParams)(),i={params:o,isExact:!0,path:t.path,url:r.location.pathname},l=e.loader,s={location:r.location,match:i,history:r,params:o,route:t,routes:a};return e.useStream?d.default.createElement(d.default.Suspense,{fallback:d.default.createElement(e.loadingComponent,null)},d.default.createElement(l,s,e.hasChildren&&d.default.createElement(g.Outlet,null))):d.default.createElement(l,s,e.hasChildren&&d.default.createElement(g.Outlet,null));}function F(e){var t=e.loader;return e.useStream?d.default.createElement(d.default.Suspense,{fallback:d.default.createElement(e.loadingComponent,null)},d.default.createElement(t,null)):d.default.createElement(t,null);}function D(e){var t=e.history,n=d.default.useState({action:t.action,location:t.location}),r=(0,c.default)(n,2),a=r[0],o=r[1];return(0,d.useLayoutEffect)(function(){return t.listen(o);},[t]),(0,d.useLayoutEffect)(function(){function n(t){e.pluginManager.applyPlugins({key:"onRouteChange",type:"event",args:{routes:e.routes,clientRoutes:e.clientRoutes,location:t.location,action:t.action,basename:e.basename,isFirst:!!t.isFirst}});}return n({location:a.location,action:a.action,isFirst:!0}),t.listen(n);},[t,e.routes,e.clientRoutes]),d.default.createElement(g.Router,{navigator:t,location:a.location,basename:e.basename},e.children);}function z(){var e=(0,h.useAppData)().clientRoutes;return(0,g.useRoutes)(e);}var B=["innerProvider","i18nProvider","accessProvider","dataflowProvider","outerProvider","rootContainer"],H=function(e,t){var n=e.basename||"/",r=function e(t){var n=t.routesById,r=t.parentId,a=t.routeComponents,o=t.useStream,i=void 0===o||o;return Object.keys(n).filter(function(e){return n[e].parentId===r;}).map(function(r){var o,l,u,c,f,p,m=(l=(o=(0,s.default)((0,s.default)({route:n[r],routeComponent:a[r],loadingComponent:t.loadingComponent,reactRouter5Compat:t.reactRouter5Compat},t.reactRouter5Compat&&{hasChildren:Object.keys(n).filter(function(e){return n[e].parentId===r;}).length>0}),{},{useStream:i})).route,u=o.useStream,c=l.redirect,f=(0,y.default)(l,I),p=o.reactRouter5Compat?L:F,(0,s.default)({element:c?d.default.createElement(R,{to:c}):d.default.createElement(A.RouteContext.Provider,{value:{route:o.route}},d.default.createElement(p,{loader:d.default.memo(o.routeComponent),loadingComponent:o.loadingComponent||N,hasChildren:o.hasChildren,useStream:void 0===u||u}))},f)),g=e({routesById:n,routeComponents:a,parentId:m.id,loadingComponent:t.loadingComponent,reactRouter5Compat:t.reactRouter5Compat,useStream:i});return g.length>0&&(m.children=g,m.routes=g),m;});}({routesById:e.routes,routeComponents:e.routeComponents,loadingComponent:e.loadingComponent,reactRouter5Compat:e.reactRouter5Compat,useStream:e.useStream});e.pluginManager.applyPlugins({key:"patchClientRoutes",type:"event",args:{routes:r}});for(var a=d.default.createElement(D,{basename:n,pluginManager:e.pluginManager,routes:e.routes,clientRoutes:r,history:e.history},t),o=0;o1?arguments[1]:void 0),r=new s;return l(t,function(e){n(e,e,t)&&u(r,e);}),r;}});},"043c4456":function(e,t,n){"use strict";function r(e,t){return void 0!==t?t:null!==e;}n.d(t,"__esModule",{value:!0}),n.d(t,"default",{enumerable:!0,get:function(){return r;}});},"044bdec0":function(e,t,n){"use strict";n.d(t,"__esModule",{value:!0}),n.d(t,"default",{enumerable:!0,get:function(){return i;}});var r=n("777fffbe"),a=r._(n("99c0cd4c")),o=r._(n("a275200c")),i=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=new Set;return function e(t,i){var l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,s=r.has(t);if((0,o.default)(!s,"Warning: There may be circular references"),s)return!1;if(t===i)return!0;if(n&&l>1)return!1;r.add(t);var u=l+1;if(Array.isArray(t)){if(!Array.isArray(i)||t.length!==i.length)return!1;for(var c=0;ct.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,r=Object.getOwnPropertySymbols(e);at.indexOf(r[a])&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]]);return n;};let E=e=>{let{prefixCls:t,className:n,dashed:r}=e,a=_(e,["prefixCls","className","dashed"]),{getPrefixCls:o}=i.useContext(w.ConfigContext),l=o("menu",t),u=(0,p.default)({[`${l}-item-divider-dashed`]:!!r},n);return i.createElement(s.Divider,Object.assign({className:u},a));};var $=n("f3efd1e9"),O=r._($),T=n("7376d2b3"),M=r._(T);let P=e=>{var t;let{className:n,children:r,icon:a,title:o,danger:l,extra:c}=e,{prefixCls:f,firstLevel:d,direction:m,disableMenuItemTitleTooltip:g,inlineCollapsed:h}=i.useContext(C),{siderCollapsed:v}=i.useContext(u.SiderContext),y=o;void 0===o?y=d?r:"":!1===o&&(y="");let w={title:y};v||h||(w.title=null,w.open=!1);let S=(0,O.default)(r).length,k=i.createElement(s.Item,Object.assign({},(0,b.default)(e,["title","icon","danger"]),{className:(0,p.default)({[`${f}-item-danger`]:l,[`${f}-item-only-child`]:(a?S+1:S)===1},n),title:"string"==typeof o?o:void 0}),(0,x.cloneElement)(a,{className:(0,p.default)(i.isValidElement(a)?null===(t=a.props)||void 0===t?void 0:t.className:void 0,`${f}-item-icon`)}),(e=>{let t=null==r?void 0:r[0],n=i.createElement("span",{className:(0,p.default)(`${f}-title-content`,{[`${f}-title-content-with-extra`]:!!c||0===c})},r);return(!a||i.isValidElement(r)&&"span"===r.type)&&r&&e&&d&&"string"==typeof t?i.createElement("div",{className:`${f}-inline-collapsed-noicon`},t.charAt(0)):n;})(h));return g||(k=i.createElement(M.default,Object.assign({},w,{placement:"rtl"===m?"left":"right",classNames:{root:`${f}-inline-collapsed-tooltip`}}),k)),k;};var j=n("eef3cb53"),A=r._(j),I=n("398ab4d8"),R=n("769846ac"),N=n("1b591c39");n("1a8ba7b5"),n("e0c932ec");var L=n("b8f7138b"),F=n("bc0474ca"),D=n("f2ad6117");let z=e=>{let{componentCls:t,motionDurationSlow:n,horizontalLineHeight:r,colorSplit:a,lineWidth:o,lineType:i,itemPaddingInline:l}=e;return{[`${t}-horizontal`]:{lineHeight:r,border:0,borderBottom:`${(0,I.unit)(o)} ${i} ${a}`,boxShadow:"none","&::after":{display:"block",clear:"both",height:0,content:'"\\20"'},[`${t}-item, ${t}-submenu`]:{position:"relative",display:"inline-block",verticalAlign:"bottom",paddingInline:l},[`> ${t}-item:hover, +!function(){var e={"047382c4":"047382c4-async.7159200c.js","047aaf9a":"047aaf9a-async.462a4597.js","05793652":"05793652-async.168fb1a9.js","090afd1b":"090afd1b-async.76c533f3.js","0db515fe":"0db515fe-async.370239b6.js","147a5caf":"147a5caf-async.09870843.js","157e9faf":"157e9faf-async.95e9b9bb.js","2e181c77":"2e181c77-async.cb1f3aa9.js","59cf2cec":"59cf2cec-async.c485c64f.js","5d7b1db7":"5d7b1db7-async.3c76de97.js","5e10c4d2":"5e10c4d2-async.d9993b4a.js","62b7ffdd":"62b7ffdd-async.8cfb083b.js","6a91e4b2":"6a91e4b2-async.dd04556d.js","795b86d4":"795b86d4-async.ed2a9b6e.js","870a7d20":"870a7d20-async.f259bf21.js","8a4700ed":"8a4700ed-async.ff3f02d9.js","8aa2681b":"8aa2681b-async.807001f2.js","8b39a838":"8b39a838-async.2665ecc8.js","90b49754":"90b49754-async.1a2c41ba.js","974ebe7b":"974ebe7b-async.c3ee51ec.js","98b0a28d":"98b0a28d-async.9c86e095.js","9f6a1ecf":"9f6a1ecf-async.5109d996.js",c93b0638:"c93b0638-async.a317e1ae.js",common:"common-async.9a632192.js",dbd20fbd:"dbd20fbd-async.7d22b22a.js",dfb5f1e2:"dfb5f1e2-async.5b877eaf.js",e682ca8f:"e682ca8f-async.04b17364.js",eac606f7:"eac606f7-async.54dcb311.js",f9d5225c:"f9d5225c-async.1164e335.js",vendors_0:"vendors_0-async.88a28419.js",vendors_1:"vendors_1-async.7472648b.js"},t={"59cf2cec":"59cf2cec-async.d6d2c094.css",a2d4bfbe:"umi.0da0e9b5.css"},n={a2d4bfbe:0},r="undefined"!=typeof globalThis?globalThis:self,a=function(r,a,o){var i,l,s,u={};function c(e){var t=u[e];if(void 0!==t)return t.exports;var n={id:e,exports:{}};u[e]=n;var a={id:e,module:n,factory:r[e],require:c};return c.requireInterceptors.forEach(function(e){e(a);}),a.factory.call(a.module.exports,a.module,a.module.exports,a.require),n.exports;}c.requireInterceptors=[],c.e=function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]});},c.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},c.m=r,c.c=u,c.es=function(e,t){Object.keys(t).forEach(function(n){"default"===n||c.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:t[n]});});},c.d=Object.defineProperty.bind(Object),c.dr=function(e,t){return function(){var n=t();return n&&("object"==typeof n||"function"==typeof n)&&"function"==typeof n.then?n.then(function(t){return e(t);}):e(n);};},c.chunkEnsures={},c.ensure=function(e){return Promise.all(Object.keys(c.chunkEnsures).reduce(function(t,n){return c.chunkEnsures[n](e,t),t;},[]));},c.jsonpInstalled={},i=c.jsonpInstalled,c.chunkEnsures.jsonp=function(t,n){var r=i[t];if(0!==r){if(r)n.push(r[2]);else{var a=new Promise(function(e,n){r=i[t]=[e,n];});n.push(r[2]=a);var o=c.publicPath+e[t],l=Error();return c.loadScript(o,function(e){if(0!==(r=i[t])&&(i[t]=void 0),r){var n=e&&e.type,a=e&&e.target&&e.target.src;l.message="Loading chunk "+t+" failed. ("+n+" : "+a+")",l.name="ChunkLoadError",l.type=n,r[1](l);}},"chunk-"+t),a;}}},c.cssInstalled=n,c.findStylesheet=function(e){try{l||(l=new URL(c.publicPath.replace(/^(\/\/)/,"https:$1")).pathname);}catch(e){}return Array.from(document.querySelectorAll("link[href][rel=stylesheet]")).find(function(t){var n=t.getAttribute("href").split("?")[0];return n===e||n===c.publicPath+e||l&&n===l+e;});},c.createStylesheet=function(e,t,r,a,o){var i=document.createElement("link");return i.rel="stylesheet",i.type="text/css",i.href=t,i.onerror=i.onload=function(t){if(i.onerror=i.onload=null,"load"===t.type)n[e]=0,a();else{delete n[e];var r=t&&t.type,l=t&&t.target&&t.target.href,s=Error("Loading CSS chunk "+e+" failed.\n("+l+")");s.code="CSS_CHUNK_LOAD_FAILED",s.type=r,s.request=l,i.parentNode.removeChild(i),o(s);}},r?r.parentNode.insertBefore(i,r.nextSibling):document.head.appendChild(i),i;},c.chunkEnsures.css=function(e,r){if(n[e])r.push(n[e]);else if(0!==n[e]&&t[e])return n[e]=new Promise(function(n,r){var a=t[e],o=c.publicPath+a;c.findStylesheet(a)?n():c.createStylesheet(e,o,null,n,r);}),r.push(n[e]),r;},s={},c.loadScript=function(e,t,n){if(!self.document)return importScripts(e),t();if(s[e])return s[e].push(t);var r=document.querySelector('script[src="'+e+'"], script[data-mako="ant-design-pro:'+n+'"]');r||((r=document.createElement("script")).timeout=120,r.src=e),s[e]=[t];var a=function(t,n){clearTimeout(o);var a=s[e];if(delete s[e],r.parentNode&&r.parentNode.removeChild(r),a&&a.forEach(function(e){return e(n);}),t)return t(n);},o=setTimeout(a.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=a.bind(null,r.onerror),r.onload=a.bind(null,r.onload),document.head.appendChild(r);};var f=function(e){for(var t in e)r[t]=e[t];},d=function(e){var t=c.jsonpInstalled,n=e[0],r=e[1];n.some(function(e){return 0!==t[e];})&&f(r);for(var a=0;a25){var o=a(this).startOf(t).add(1,t).date(r),i=a(this).endOf(e);if(o.isBefore(i))return 1;}var l=a(this).startOf(t).date(r).startOf(e).subtract(1,"millisecond"),s=this.diff(l,e,!0);return s<0?a(this).startOf("week").week():Math.ceil(s);},o.weeks=function(e){return void 0===e&&(e=null),this.week(e);};};},"object"==typeof t&&void 0!==e?e.exports=a():"function"==typeof define&&define.amd?define(a):(r="undefined"!=typeof globalThis?globalThis:r||self).dayjs_plugin_weekOfYear=a();},"002639b3":function(e,t,n){"use strict";n.d(t,"__esModule",{value:!0}),n.e(t,{composeRef:function(){return f;},fillRef:function(){return c;},getNodeRef:function(){return h;},supportNodeRef:function(){return g;},supportRef:function(){return p;},useComposeRef:function(){return d;}});var r=n("777fffbe"),a=r._(n("99c0cd4c")),o=n("609f48be"),i=n("09fa7de7"),l=r._(n("1cf256f2")),s=r._(n("17ff5ee6")),u=Number(o.version.split(".")[0]),c=function(e,t){"function"==typeof e?e(t):"object"===(0,a.default)(e)&&e&&"current"in e&&(e.current=t);},f=function(){for(var e=arguments.length,t=Array(e),n=0;n=19)return!0;var t,n,r=(0,i.isMemo)(e)?e.type.type:e.type;return("function"!=typeof r||null!==(t=r.prototype)&&void 0!==t&&!!t.render||r.$$typeof===i.ForwardRef)&&("function"!=typeof e||null!==(n=e.prototype)&&void 0!==n&&!!n.render||e.$$typeof===i.ForwardRef);};function m(e){return(0,o.isValidElement)(e)&&!(0,s.default)(e);}var g=function(e){return m(e)&&p(e);},h=function(e){return e&&m(e)?e.props.propertyIsEnumerable("ref")?e.props.ref:e.ref:null;};},"01b099d1":function(e,t,n){"use strict";var r=n("f005dafe"),a=n("9f4ccb01"),o=n("58d603f1"),i=n("612e0fec"),l=a("".charCodeAt);r({target:"String",proto:!0},{isWellFormed:function(){for(var e=i(o(this)),t=e.length,n=0;n=56320||++n>=t||(64512&l(e,n))!=56320))return!1;}return!0;}});},"01be0067":function(e,t,n){"use strict";var r=n("f005dafe"),a=n("64ab11b8"),o=n("9f4ccb01"),i=n("2133c992"),l=a.Uint8Array,s=o(1..toString);l&&r({target:"Uint8Array",proto:!0,forced:!0},{toHex:function(){i(this);for(var e="",t=0,n=this.length;t1?arguments[1]:void 0;return a(this,e,t);}}),o("group");},"034cd552":function(e,t,n){n.d(t,"__esModule",{value:!0}),n.e(t,{Routes:function(){return z;},renderClient:function(){return U;}});var r=n("777fffbe"),a=n("852bbaa9"),o=n("78caf995"),i=r._(o),l=n("6a4db265"),s=r._(l),u=n("9ebaafa8"),c=r._(u),f=n("609f48be"),d=a._(f),p=n("6b27451a"),m=r._(p),g=n("c0e8a74c"),h=n("424649e6"),b=n("f979c155"),v=n("24415c1a"),y=r._(v),x=n("d61b8f3f"),w=r._(x),S=n("50eabb48"),k=r._(S),C=["content"],_=["content"],E=/^(http:|https:)?\/\//;function $(e){return E.test(e)||e.startsWith("/")&&!e.startsWith("/*")||e.startsWith("./")||e.startsWith("../");}var O=function(){return d.default.createElement("noscript",{dangerouslySetInnerHTML:{__html:"Enable JavaScript to run this app."}});},T=function(e){var t,n=e.loaderData,r=e.htmlPageOpts,a=e.manifest,o=(null==a||null===(t=a.assets)||void 0===t?void 0:t["umi.css"])||"";return d.default.createElement("script",{suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:"window.__UMI_LOADER_DATA__ = ".concat(JSON.stringify(n||{}),"; window.__UMI_METADATA_LOADER_DATA__ = ").concat(JSON.stringify(r||{}),"; window.__UMI_BUILD_ClIENT_CSS__ = '").concat(o,"'")}});};function M(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("string"==typeof e)return $(e)?(0,s.default)({src:e},t):{content:e};if("object"===(0,k.default)(e))return(0,s.default)((0,s.default)({},e),t);throw Error("Invalid script type: ".concat((0,k.default)(e)));}var P=function(e){var t,n,r,a,o,i,l=e.htmlPageOpts;return d.default.createElement(d.default.Fragment,null,(null==l?void 0:l.title)&&d.default.createElement("title",null,l.title),null==l||null===(t=l.favicons)||void 0===t?void 0:t.map(function(e,t){return d.default.createElement("link",{key:t,rel:"shortcut icon",href:e});}),(null==l?void 0:l.description)&&d.default.createElement("meta",{name:"description",content:l.description}),(null==l||null===(n=l.keywords)||void 0===n?void 0:n.length)&&d.default.createElement("meta",{name:"keywords",content:l.keywords.join(",")}),null==l||null===(r=l.metas)||void 0===r?void 0:r.map(function(e){return d.default.createElement("meta",{key:e.name,name:e.name,content:e.content});}),null==l||null===(a=l.links)||void 0===a?void 0:a.map(function(e,t){return d.default.createElement("link",(0,w.default)({key:t},e));}),null==l||null===(o=l.styles)||void 0===o?void 0:o.map(function(e,t){var n=$(e)?{type:"link",href:e}:{type:"style",content:e},r=n.type,a=n.href,o=n.content;return"link"===r?d.default.createElement("link",{key:t,rel:"stylesheet",href:a}):"style"===r?d.default.createElement("style",{key:t},o):void 0;}),null==l||null===(i=l.headScripts)||void 0===i?void 0:i.map(function(e,t){var n=M(e),r=n.content,a=(0,y.default)(n,C);return d.default.createElement("script",(0,w.default)({dangerouslySetInnerHTML:{__html:r},key:t},a));}));};function j(e){var t,n=e.children,r=e.loaderData,a=e.manifest,o=e.htmlPageOpts,i=e.__INTERNAL_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,l=e.mountElementId;if(null!=i&&i.pureHtml)return d.default.createElement("html",null,d.default.createElement("head",null),d.default.createElement("body",null,d.default.createElement(O,null),d.default.createElement("div",{id:l},n),d.default.createElement(T,{manifest:a,loaderData:r,htmlPageOpts:o})));if(null!=i&&i.pureApp)return d.default.createElement(d.default.Fragment,null,n);var s="undefined"==typeof window?null==a?void 0:a.assets["umi.css"]:window.__UMI_BUILD_ClIENT_CSS__;return d.default.createElement("html",{suppressHydrationWarning:!0,lang:(null==o?void 0:o.lang)||"en"},d.default.createElement("head",null,d.default.createElement("meta",{charSet:"utf-8"}),d.default.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1"}),s&&d.default.createElement("link",{suppressHydrationWarning:!0,rel:"stylesheet",href:s}),d.default.createElement(P,{htmlPageOpts:o})),d.default.createElement("body",null,d.default.createElement(O,null),d.default.createElement("div",{id:l},n),d.default.createElement(T,{manifest:a,loaderData:r,htmlPageOpts:o}),null==o||null===(t=o.scripts)||void 0===t?void 0:t.map(function(e,t){var n=M(e),r=n.content,a=(0,y.default)(n,_);return d.default.createElement("script",(0,w.default)({dangerouslySetInnerHTML:{__html:r},key:t},a));})));}var A=n("d49b8c42"),I=["redirect"];function R(e){var t=(0,g.useParams)(),n=(0,g.generatePath)(e.to,t),r=(0,h.useRouteProps)(),a=(0,g.useLocation)();null!=r&&r.keepQuery&&(n+=a.search+a.hash);var o=(0,s.default)((0,s.default)({},e),{},{to:n});return d.default.createElement(g.Navigate,(0,w.default)({replace:!0},o));}function N(){return d.default.createElement("div",null);}function L(e){var t=(0,A.useRouteData)().route,n=(0,h.useAppData)(),r=n.history,a=n.clientRoutes,o=(0,g.useParams)(),i={params:o,isExact:!0,path:t.path,url:r.location.pathname},l=e.loader,s={location:r.location,match:i,history:r,params:o,route:t,routes:a};return e.useStream?d.default.createElement(d.default.Suspense,{fallback:d.default.createElement(e.loadingComponent,null)},d.default.createElement(l,s,e.hasChildren&&d.default.createElement(g.Outlet,null))):d.default.createElement(l,s,e.hasChildren&&d.default.createElement(g.Outlet,null));}function F(e){var t=e.loader;return e.useStream?d.default.createElement(d.default.Suspense,{fallback:d.default.createElement(e.loadingComponent,null)},d.default.createElement(t,null)):d.default.createElement(t,null);}function D(e){var t=e.history,n=d.default.useState({action:t.action,location:t.location}),r=(0,c.default)(n,2),a=r[0],o=r[1];return(0,d.useLayoutEffect)(function(){return t.listen(o);},[t]),(0,d.useLayoutEffect)(function(){function n(t){e.pluginManager.applyPlugins({key:"onRouteChange",type:"event",args:{routes:e.routes,clientRoutes:e.clientRoutes,location:t.location,action:t.action,basename:e.basename,isFirst:!!t.isFirst}});}return n({location:a.location,action:a.action,isFirst:!0}),t.listen(n);},[t,e.routes,e.clientRoutes]),d.default.createElement(g.Router,{navigator:t,location:a.location,basename:e.basename},e.children);}function z(){var e=(0,h.useAppData)().clientRoutes;return(0,g.useRoutes)(e);}var B=["innerProvider","i18nProvider","accessProvider","dataflowProvider","outerProvider","rootContainer"],H=function(e,t){var n=e.basename||"/",r=function e(t){var n=t.routesById,r=t.parentId,a=t.routeComponents,o=t.useStream,i=void 0===o||o;return Object.keys(n).filter(function(e){return n[e].parentId===r;}).map(function(r){var o,l,u,c,f,p,m=(l=(o=(0,s.default)((0,s.default)({route:n[r],routeComponent:a[r],loadingComponent:t.loadingComponent,reactRouter5Compat:t.reactRouter5Compat},t.reactRouter5Compat&&{hasChildren:Object.keys(n).filter(function(e){return n[e].parentId===r;}).length>0}),{},{useStream:i})).route,u=o.useStream,c=l.redirect,f=(0,y.default)(l,I),p=o.reactRouter5Compat?L:F,(0,s.default)({element:c?d.default.createElement(R,{to:c}):d.default.createElement(A.RouteContext.Provider,{value:{route:o.route}},d.default.createElement(p,{loader:d.default.memo(o.routeComponent),loadingComponent:o.loadingComponent||N,hasChildren:o.hasChildren,useStream:void 0===u||u}))},f)),g=e({routesById:n,routeComponents:a,parentId:m.id,loadingComponent:t.loadingComponent,reactRouter5Compat:t.reactRouter5Compat,useStream:i});return g.length>0&&(m.children=g,m.routes=g),m;});}({routesById:e.routes,routeComponents:e.routeComponents,loadingComponent:e.loadingComponent,reactRouter5Compat:e.reactRouter5Compat,useStream:e.useStream});e.pluginManager.applyPlugins({key:"patchClientRoutes",type:"event",args:{routes:r}});for(var a=d.default.createElement(D,{basename:n,pluginManager:e.pluginManager,routes:e.routes,clientRoutes:r,history:e.history},t),o=0;o1?arguments[1]:void 0),r=new s;return l(t,function(e){n(e,e,t)&&u(r,e);}),r;}});},"043c4456":function(e,t,n){"use strict";function r(e,t){return void 0!==t?t:null!==e;}n.d(t,"__esModule",{value:!0}),n.d(t,"default",{enumerable:!0,get:function(){return r;}});},"044bdec0":function(e,t,n){"use strict";n.d(t,"__esModule",{value:!0}),n.d(t,"default",{enumerable:!0,get:function(){return i;}});var r=n("777fffbe"),a=r._(n("99c0cd4c")),o=r._(n("a275200c")),i=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=new Set;return function e(t,i){var l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,s=r.has(t);if((0,o.default)(!s,"Warning: There may be circular references"),s)return!1;if(t===i)return!0;if(n&&l>1)return!1;r.add(t);var u=l+1;if(Array.isArray(t)){if(!Array.isArray(i)||t.length!==i.length)return!1;for(var c=0;ct.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,r=Object.getOwnPropertySymbols(e);at.indexOf(r[a])&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]]);return n;};let E=e=>{let{prefixCls:t,className:n,dashed:r}=e,a=_(e,["prefixCls","className","dashed"]),{getPrefixCls:o}=i.useContext(w.ConfigContext),l=o("menu",t),u=(0,p.default)({[`${l}-item-divider-dashed`]:!!r},n);return i.createElement(s.Divider,Object.assign({className:u},a));};var $=n("f3efd1e9"),O=r._($),T=n("7376d2b3"),M=r._(T);let P=e=>{var t;let{className:n,children:r,icon:a,title:o,danger:l,extra:c}=e,{prefixCls:f,firstLevel:d,direction:m,disableMenuItemTitleTooltip:g,inlineCollapsed:h}=i.useContext(C),{siderCollapsed:v}=i.useContext(u.SiderContext),y=o;void 0===o?y=d?r:"":!1===o&&(y="");let w={title:y};v||h||(w.title=null,w.open=!1);let S=(0,O.default)(r).length,k=i.createElement(s.Item,Object.assign({},(0,b.default)(e,["title","icon","danger"]),{className:(0,p.default)({[`${f}-item-danger`]:l,[`${f}-item-only-child`]:(a?S+1:S)===1},n),title:"string"==typeof o?o:void 0}),(0,x.cloneElement)(a,{className:(0,p.default)(i.isValidElement(a)?null===(t=a.props)||void 0===t?void 0:t.className:void 0,`${f}-item-icon`)}),(e=>{let t=null==r?void 0:r[0],n=i.createElement("span",{className:(0,p.default)(`${f}-title-content`,{[`${f}-title-content-with-extra`]:!!c||0===c})},r);return(!a||i.isValidElement(r)&&"span"===r.type)&&r&&e&&d&&"string"==typeof t?i.createElement("div",{className:`${f}-inline-collapsed-noicon`},t.charAt(0)):n;})(h));return g||(k=i.createElement(M.default,Object.assign({},w,{placement:"rtl"===m?"left":"right",classNames:{root:`${f}-inline-collapsed-tooltip`}}),k)),k;};var j=n("eef3cb53"),A=r._(j),I=n("398ab4d8"),R=n("769846ac"),N=n("1b591c39");n("1a8ba7b5"),n("e0c932ec");var L=n("b8f7138b"),F=n("bc0474ca"),D=n("f2ad6117");let z=e=>{let{componentCls:t,motionDurationSlow:n,horizontalLineHeight:r,colorSplit:a,lineWidth:o,lineType:i,itemPaddingInline:l}=e;return{[`${t}-horizontal`]:{lineHeight:r,border:0,borderBottom:`${(0,I.unit)(o)} ${i} ${a}`,boxShadow:"none","&::after":{display:"block",clear:"both",height:0,content:'"\\20"'},[`${t}-item, ${t}-submenu`]:{position:"relative",display:"inline-block",verticalAlign:"bottom",paddingInline:l},[`> ${t}-item:hover, > ${t}-item-active, > ${t}-submenu ${t}-submenu-title:hover`]:{backgroundColor:"transparent"},[`${t}-item, ${t}-submenu-title`]:{transition:`border-color ${n},background ${n}`},[`${t}-submenu-arrow`]:{display:"none"}}};},B=({componentCls:e,menuArrowOffset:t,calc:n})=>({[`${e}-rtl`]:{direction:"rtl"},[`${e}-submenu-rtl`]:{transformOrigin:"100% 0"},[`${e}-rtl${e}-vertical, ${e}-submenu-rtl ${e}-vertical`]:{[`${e}-submenu-arrow`]:{"&::before":{transform:`rotate(-45deg) translateY(${(0,I.unit)(n(t).mul(-1).equal())})`},"&::after":{transform:`rotate(45deg) translateY(${(0,I.unit)(t)})`}}}}),H=e=>Object.assign({},(0,N.genFocusOutline)(e)),U=(e,t)=>{let{componentCls:n,itemColor:r,itemSelectedColor:a,subMenuItemSelectedColor:o,groupTitleColor:i,itemBg:l,subMenuItemBg:s,itemSelectedBg:u,activeBarHeight:c,activeBarWidth:f,activeBarBorderWidth:d,motionDurationSlow:p,motionEaseInOut:m,motionEaseOut:g,itemPaddingInline:h,motionDurationMid:b,itemHoverColor:v,lineType:y,colorSplit:x,itemDisabledColor:w,dangerItemColor:S,dangerItemHoverColor:k,dangerItemSelectedColor:C,dangerItemActiveBg:_,dangerItemSelectedBg:E,popupBg:$,itemHoverBg:O,itemActiveBg:T,menuSubMenuBg:M,horizontalItemSelectedColor:P,horizontalItemSelectedBg:j,horizontalItemBorderRadius:A,horizontalItemHoverBg:R}=e;return{[`${n}-${t}, ${n}-${t} > ${n}`]:{color:r,background:l,[`&${n}-root:focus-visible`]:Object.assign({},H(e)),[`${n}-item`]:{"&-group-title, &-extra":{color:i}},[`${n}-submenu-selected > ${n}-submenu-title`]:{color:o},[`${n}-item, ${n}-submenu-title`]:{color:r,[`&:not(${n}-item-disabled):focus-visible`]:Object.assign({},H(e))},[`${n}-item-disabled, ${n}-submenu-disabled`]:{color:`${w} !important`},[`${n}-item:not(${n}-item-selected):not(${n}-submenu-selected)`]:{[`&:hover, > ${n}-submenu-title:hover`]:{color:v}},[`&:not(${n}-horizontal)`]:{[`${n}-item:not(${n}-item-selected)`]:{"&:hover":{backgroundColor:O},"&:active":{backgroundColor:T}},[`${n}-submenu-title`]:{"&:hover":{backgroundColor:O},"&:active":{backgroundColor:T}}},[`${n}-item-danger`]:{color:S,[`&${n}-item:hover`]:{[`&:not(${n}-item-selected):not(${n}-submenu-selected)`]:{color:k}},[`&${n}-item:active`]:{background:_}},[`${n}-item a`]:{"&, &:hover":{color:"inherit"}},[`${n}-item-selected`]:{color:a,[`&${n}-item-danger`]:{color:C},"a, a:hover":{color:"inherit"}},[`& ${n}-item-selected`]:{backgroundColor:u,[`&${n}-item-danger`]:{backgroundColor:E}},[`&${n}-submenu > ${n}`]:{backgroundColor:M},[`&${n}-popup > ${n}`]:{backgroundColor:$},[`&${n}-submenu-popup > ${n}`]:{backgroundColor:$},[`&${n}-horizontal`]:Object.assign(Object.assign({},"dark"===t?{borderBottom:0}:{}),{[`> ${n}-item, > ${n}-submenu`]:{top:d,marginTop:e.calc(d).mul(-1).equal(),marginBottom:0,borderRadius:A,"&::after":{position:"absolute",insetInline:h,bottom:0,borderBottom:`${(0,I.unit)(c)} solid transparent`,transition:`border-color ${p} ${m}`,content:'""'},"&:hover, &-active, &-open":{background:R,"&::after":{borderBottomWidth:c,borderBottomColor:P}},"&-selected":{color:P,backgroundColor:j,"&:hover":{backgroundColor:j},"&::after":{borderBottomWidth:c,borderBottomColor:P}}}}),[`&${n}-root`]:{[`&${n}-inline, &${n}-vertical`]:{borderInlineEnd:`${(0,I.unit)(d)} ${y} ${x}`}},[`&${n}-inline`]:{[`${n}-sub${n}-inline`]:{background:s},[`${n}-item`]:{position:"relative","&::after":{position:"absolute",insetBlock:0,insetInlineEnd:0,borderInlineEnd:`${(0,I.unit)(f)} solid ${a}`,transform:"scaleY(0.0001)",opacity:0,transition:`transform ${b} ${g},opacity ${b} ${g}`,content:'""'},[`&${n}-item-danger`]:{"&::after":{borderInlineEndColor:C}}},[`${n}-selected, ${n}-item-selected`]:{"&::after":{transform:"scaleY(1)",opacity:1,transition:`transform ${b} ${m},opacity ${b} ${m}`}}}}};},W=e=>{let{componentCls:t,itemHeight:n,itemMarginInline:r,padding:a,menuArrowSize:o,marginXS:i,itemMarginBlock:l,itemWidth:s,itemPaddingInline:u}=e,c=e.calc(o).add(a).add(i).equal();return{[`${t}-item`]:{position:"relative",overflow:"hidden"},[`${t}-item, ${t}-submenu-title`]:{height:n,lineHeight:(0,I.unit)(n),paddingInline:u,overflow:"hidden",textOverflow:"ellipsis",marginInline:r,marginBlock:l,width:s},[`> ${t}-item, @@ -208,4 +208,4 @@ ${t.stack}`:"";return`[React Intl] ${e}${n}`;}function m(e){}let g={formats:{},m & > ${n}-cascader-picker-focused:last-child ${t}`]:{borderInlineEndWidth:e.lineWidth,borderStartEndRadius:e.borderRadius,borderEndEndRadius:e.borderRadius},[`& > ${n}-select-auto-complete ${t}`]:{verticalAlign:"top"},[`${t}-group-wrapper + ${t}-group-wrapper`]:{marginInlineStart:e.calc(e.lineWidth).mul(-1).equal(),[`${t}-affix-wrapper`]:{borderRadius:0}},[`${t}-group-wrapper:not(:last-child)`]:{[`&${t}-search > ${t}-group`]:{[`& > ${t}-group-addon > ${t}-search-button`]:{borderRadius:0},[`& > ${t}`]:{borderStartStartRadius:e.borderRadius,borderStartEndRadius:0,borderEndEndRadius:0,borderEndStartRadius:e.borderRadius}}}})};},g=e=>{let{componentCls:t,controlHeightSM:n,lineWidth:r,calc:o}=e,i=o(n).sub(o(r).mul(2)).sub(16).div(2).equal();return{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(0,a.resetComponent)(e)),p(e)),(0,u.genOutlinedStyle)(e)),(0,u.genFilledStyle)(e)),(0,u.genBorderlessStyle)(e)),(0,u.genUnderlinedStyle)(e)),{'&[type="color"]':{height:e.controlHeight,[`&${t}-lg`]:{height:e.controlHeightLG},[`&${t}-sm`]:{height:n,paddingTop:i,paddingBottom:i}},'&[type="search"]::-webkit-search-cancel-button, &[type="search"]::-webkit-search-decoration':{appearance:"none"}})};},h=e=>{let{componentCls:t}=e;return{[`${t}-clear-icon`]:{margin:0,padding:0,lineHeight:0,color:e.colorTextQuaternary,fontSize:e.fontSizeIcon,verticalAlign:-1,cursor:"pointer",transition:`color ${e.motionDurationSlow}`,border:"none",outline:"none",backgroundColor:"transparent","&:hover":{color:e.colorIcon},"&:active":{color:e.colorText},"&-hidden":{visibility:"hidden"},"&-has-suffix":{margin:`0 ${(0,r.unit)(e.inputAffixPadding)}`}}};},b=e=>{let{componentCls:t,inputAffixPadding:n,colorTextDescription:r,motionDurationSlow:a,colorIcon:o,colorIconHover:i,iconCls:l}=e,s=`${t}-affix-wrapper`,u=`${t}-affix-wrapper-disabled`;return{[s]:Object.assign(Object.assign(Object.assign(Object.assign({},p(e)),{display:"inline-flex",[`&:not(${t}-disabled):hover`]:{zIndex:1,[`${t}-search-with-button &`]:{zIndex:0}},"&-focused, &:focus":{zIndex:1},[`> input${t}`]:{padding:0},[`> input${t}, > textarea${t}`]:{fontSize:"inherit",border:"none",borderRadius:0,outline:"none",background:"transparent",color:"inherit","&::-ms-reveal":{display:"none"},"&:focus":{boxShadow:"none !important"}},"&::before":{display:"inline-block",width:0,visibility:"hidden",content:'"\\a0"'},[t]:{"&-prefix, &-suffix":{display:"flex",flex:"none",alignItems:"center","> *:not(:last-child)":{marginInlineEnd:e.paddingXS}},"&-show-count-suffix":{color:r,direction:"ltr"},"&-show-count-has-suffix":{marginInlineEnd:e.paddingXXS},"&-prefix":{marginInlineEnd:n},"&-suffix":{marginInlineStart:n}}}),h(e)),{[`${l}${t}-password-icon`]:{color:o,cursor:"pointer",transition:`all ${a}`,"&:hover":{color:i}}}),[`${t}-underlined`]:{borderRadius:0},[u]:{[`${l}${t}-password-icon`]:{color:o,cursor:"not-allowed","&:hover":{color:o}}}};},v=e=>{let{componentCls:t,borderRadiusLG:n,borderRadiusSM:r}=e;return{[`${t}-group`]:Object.assign(Object.assign(Object.assign({},(0,a.resetComponent)(e)),m(e)),{"&-rtl":{direction:"rtl"},"&-wrapper":Object.assign(Object.assign(Object.assign({display:"inline-block",width:"100%",textAlign:"start",verticalAlign:"top","&-rtl":{direction:"rtl"},"&-lg":{[`${t}-group-addon`]:{borderRadius:n,fontSize:e.inputFontSizeLG}},"&-sm":{[`${t}-group-addon`]:{borderRadius:r}}},(0,u.genOutlinedGroupStyle)(e)),(0,u.genFilledGroupStyle)(e)),{[`&:not(${t}-compact-first-item):not(${t}-compact-last-item)${t}-compact-item`]:{[`${t}, ${t}-group-addon`]:{borderRadius:0}},[`&:not(${t}-compact-last-item)${t}-compact-first-item`]:{[`${t}, ${t}-group-addon`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`&:not(${t}-compact-first-item)${t}-compact-last-item`]:{[`${t}, ${t}-group-addon`]:{borderStartStartRadius:0,borderEndStartRadius:0}},[`&:not(${t}-compact-last-item)${t}-compact-item`]:{[`${t}-affix-wrapper`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`&:not(${t}-compact-first-item)${t}-compact-item`]:{[`${t}-affix-wrapper`]:{borderStartStartRadius:0,borderEndStartRadius:0}}})})};},y=e=>{let{componentCls:t,antCls:n}=e,r=`${t}-search`;return{[r]:{[t]:{"&:hover, &:focus":{[`+ ${t}-group-addon ${r}-button:not(${n}-btn-color-primary):not(${n}-btn-variant-text)`]:{borderInlineStartColor:e.colorPrimaryHover}}},[`${t}-affix-wrapper`]:{height:e.controlHeight,borderRadius:0},[`${t}-lg`]:{lineHeight:e.calc(e.lineHeightLG).sub(2e-4).equal()},[`> ${t}-group`]:{[`> ${t}-group-addon:last-child`]:{insetInlineStart:-1,padding:0,border:0,[`${r}-button`]:{marginInlineEnd:-1,borderStartStartRadius:0,borderEndStartRadius:0,boxShadow:"none"},[`${r}-button:not(${n}-btn-color-primary)`]:{color:e.colorTextDescription,"&:hover":{color:e.colorPrimaryHover},"&:active":{color:e.colorPrimaryActive},[`&${n}-btn-loading::before`]:{inset:0}}}},[`${r}-button`]:{height:e.controlHeight,"&:hover, &:focus":{zIndex:1}},"&-large":{[`${t}-affix-wrapper, ${r}-button`]:{height:e.controlHeightLG}},"&-small":{[`${t}-affix-wrapper, ${r}-button`]:{height:e.controlHeightSM}},"&-rtl":{direction:"rtl"},[`&${t}-compact-item`]:{[`&:not(${t}-compact-last-item)`]:{[`${t}-group-addon`]:{[`${t}-search-button`]:{marginInlineEnd:e.calc(e.lineWidth).mul(-1).equal(),borderRadius:0}}},[`&:not(${t}-compact-first-item)`]:{[`${t},${t}-affix-wrapper`]:{borderRadius:0}},[`> ${t}-group-addon ${t}-search-button, > ${t}, ${t}-affix-wrapper`]:{"&:hover, &:focus, &:active":{zIndex:2}},[`> ${t}-affix-wrapper-focused`]:{zIndex:2}}}};},x=e=>{let{componentCls:t}=e;return{[`${t}-out-of-range`]:{[`&, & input, & textarea, ${t}-show-count-suffix, ${t}-data-count`]:{color:e.colorError}}};},w=(0,i.genStyleHooks)(["Input","Shared"],e=>{let t=(0,l.mergeToken)(e,(0,s.initInputToken)(e));return[g(t),b(t)];},s.initComponentToken,{resetFont:!1});var S=(0,i.genStyleHooks)(["Input","Component"],e=>{let t=(0,l.mergeToken)(e,(0,s.initInputToken)(e));return[v(t),y(t),x(t),(0,o.genCompactItemStyle)(t)];},s.initComponentToken,{resetFont:!1});},f8e399cd:function(e,t,n){var r=n("34feb2e7");e.exports=function(e,t,n){var a=e.length;return n=void 0===n?a:n,!t&&n>=a?e:r(e,t,n);};},f8eff17c:function(e,t,n){"use strict";var r=n("f005dafe"),a=n("8c378636"),o=n("0d8dc673"),i=n("cd42513d"),l=TypeError;r({target:"Set",proto:!0,real:!0,forced:!0},{reduce:function(e){var t=o(this),n=arguments.length<2,r=n?void 0:arguments[1];if(a(e),i(t,function(a){n?(n=!1,r=a):r=e(r,a,a,t);}),n)throw new l("Reduce of empty set with no initial value");return r;}});},f9335f9a:function(e,t,n){"use strict";var r=n("f005dafe"),a=n("27291311"),o=n("8c378636"),i=n("445e2046"),l=n("6acd904b");r({target:"Iterator",proto:!0,real:!0},{find:function(e){i(this),o(e);var t=l(this),n=0;return a(t,function(t,r){if(e(t,n++))return r(t);},{IS_RECORD:!0,INTERRUPTED:!0}).result;}});},f93ef3e9:function(e,t,n){"use strict";var r=n("a3ea8356"),a=n("bf55b6aa"),o=n("4a47bcf0"),i=n("b0f01ae1"),l=r("Set");e.exports=function(e){return i(e)&&"number"==typeof e.size&&a(e.has)&&a(e.keys)?e:o(e)?new l(e):e;};},f9408d8e:function(e,t,n){"use strict";var r=n("f005dafe"),a=n("a5c3bfb4"),o=n("acd7dc0d"),i=Array;r({target:"Array",proto:!0},{with:function(e,t){return a(o(this),i,e,t);}});},f979c155:function(e,t,n){"use strict";function r(e){var t=e.id,n=e.basename,r=e.cb,a=new URLSearchParams({route:t,url:window.location.href}).toString();fetch("".concat(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e.endsWith("/")?e:"".concat(e,"/");}(window.umiServerLoaderPath||n),"__serverLoader?").concat(a),{credentials:"include"}).then(function(e){return e.json();}).then(r).catch(console.error);}n.d(t,"__esModule",{value:!0}),n.d(t,"fetchServerLoader",{enumerable:!0,get:function(){return r;}});},f9ba56b6:function(e,t,n){"use strict";var r=n("3e4ce28c");e.exports=function(e){if(!r(e))throw TypeError("Cannot use null or undefined");return e;};},fa11041c:function(e,t,n){"use strict";var r="function"==typeof Symbol&&Symbol.for,a=r?Symbol.for("react.element"):60103,o=r?Symbol.for("react.portal"):60106,i=r?Symbol.for("react.fragment"):60107,l=r?Symbol.for("react.strict_mode"):60108,s=r?Symbol.for("react.profiler"):60114,u=r?Symbol.for("react.provider"):60109,c=r?Symbol.for("react.context"):60110,f=r?Symbol.for("react.async_mode"):60111,d=r?Symbol.for("react.concurrent_mode"):60111,p=r?Symbol.for("react.forward_ref"):60112,m=r?Symbol.for("react.suspense"):60113,g=r?Symbol.for("react.suspense_list"):60120,h=r?Symbol.for("react.memo"):60115,b=r?Symbol.for("react.lazy"):60116,v=r?Symbol.for("react.block"):60121,y=r?Symbol.for("react.fundamental"):60117,x=r?Symbol.for("react.responder"):60118,w=r?Symbol.for("react.scope"):60119;function S(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case a:switch(e=e.type){case f:case d:case i:case s:case l:case m:return e;default:switch(e=e&&e.$$typeof){case c:case p:case b:case h:case u:return e;default:return t;}}case o:return t;}}}function k(e){return S(e)===d;}t.AsyncMode=f,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=u,t.Element=a,t.ForwardRef=p,t.Fragment=i,t.Lazy=b,t.Memo=h,t.Portal=o,t.Profiler=s,t.StrictMode=l,t.Suspense=m,t.isAsyncMode=function(e){return k(e)||S(e)===f;},t.isConcurrentMode=k,t.isContextConsumer=function(e){return S(e)===c;},t.isContextProvider=function(e){return S(e)===u;},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===a;},t.isForwardRef=function(e){return S(e)===p;},t.isFragment=function(e){return S(e)===i;},t.isLazy=function(e){return S(e)===b;},t.isMemo=function(e){return S(e)===h;},t.isPortal=function(e){return S(e)===o;},t.isProfiler=function(e){return S(e)===s;},t.isStrictMode=function(e){return S(e)===l;},t.isSuspense=function(e){return S(e)===m;},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===i||e===d||e===s||e===l||e===m||e===g||"object"==typeof e&&null!==e&&(e.$$typeof===b||e.$$typeof===h||e.$$typeof===u||e.$$typeof===c||e.$$typeof===p||e.$$typeof===y||e.$$typeof===x||e.$$typeof===w||e.$$typeof===v);},t.typeOf=S;},fb01be85:function(e,t,n){"use strict";var r=n("f005dafe"),a=n("bedc4fa1"),o=n("999880cd");r({target:"Array",proto:!0,forced:n("ebfe32fd")},{groupToMap:o}),a("groupToMap");},fb7f58fe:function(e,t,n){"use strict";n.d(t,"__esModule",{value:!0}),n.e(t,{ColorPickerPrefixCls:function(){return o;},calcOffset:function(){return u;},calculateColor:function(){return s;},defaultColor:function(){return l;},generateColor:function(){return i;}});var r=n("777fffbe")._(n("e4870cf0")),a=n("4c33f204"),o="rc-color-picker",i=function(e){return e instanceof a.Color?e:new a.Color(e);},l=i("#1677ff"),s=function(e){var t=e.offset,n=e.targetRef,a=e.containerRef,o=e.color,l=e.type,s=a.current.getBoundingClientRect(),u=s.width,c=s.height,f=n.current.getBoundingClientRect(),d=f.width,p=f.height,m=d/2,g=(t.x+m)/u,h=1-(t.y+p/2)/c,b=o.toHsb(),v=(t.x+m)/u*360;if(l)switch(l){case"hue":return i((0,r.default)((0,r.default)({},b),{},{h:v<=0?0:v}));case"alpha":return i((0,r.default)((0,r.default)({},b),{},{a:g<=0?0:g}));}return i({h:b.h,s:g<=0?0:g,b:h>=1?1:h,a:b.a});},u=function(e,t){var n=e.toHsb();switch(t){case"hue":return{x:n.h/360*100,y:50};case"alpha":return{x:100*e.a,y:50};default:return{x:100*n.s,y:(1-n.b)*100};}};},fbe36db6:function(e,t,n){"use strict";n.d(t,"__esModule",{value:!0}),n.d(t,"default",{enumerable:!0,get:function(){return a;}});var r=n("777fffbe")._(n("a23b77ad"));function a(e,t){if("function"!=typeof t&&null!==t)throw TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&(0,r.default)(e,t);}},fbec28b8:function(e,t,n){"use strict";var r=n("f005dafe"),a=n("27291311"),o=n("8c378636"),i=n("445e2046"),l=n("6acd904b");r({target:"Iterator",proto:!0,real:!0},{some:function(e){i(this),o(e);var t=l(this),n=0;return a(t,function(t,r){if(e(t,n++))return r();},{IS_RECORD:!0,INTERRUPTED:!0}).stopped;}});},fc42dd4b:function(e,t,n){"use strict";n("115687d1"),n("499e7765"),n("91241bdb");},fc89f2b1:function(e,t,n){"use strict";var r=n("5d813023"),a=Math.min;e.exports=function(e){return e>0?a(r(e),9007199254740991):0;};},fcf7f4fc:function(e,t,n){"use strict";var r=n("638edfca"),a=n("bc44b2e9").concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,a);};},fd64c32b:function(e,t,n){"use strict";var r=n("f005dafe"),a=n("17b50140"),o=n("445e2046"),i=n("6acd904b"),l=n("1532275c"),s=n("65ac4550"),u=n("2f2b2bfc"),c=n("34542ddb"),f=n("ebfe32fd"),d=u(function(e){var t,n=this,r=n.iterator;if(!n.remaining--){var i=c(void 0,!0);return(n.done=!0,void 0!==(t=r.return))?e.resolve(a(t,r,void 0)).then(function(){return i;}):i;}return e.resolve(a(n.next,r)).then(function(e){return o(e).done?(n.done=!0,c(void 0,!0)):c(e.value,!1);}).then(null,function(e){throw n.done=!0,e;});});r({target:"AsyncIterator",proto:!0,real:!0,forced:f},{take:function(e){o(this);var t=s(l(+e));return new d(i(this),{remaining:t});}});},fd7886bf:function(e,t,n){"use strict";var r=n("6019fc6f").f;e.exports=function(e,t,n){n in e||r(e,n,{configurable:!0,get:function(){return t[n];},set:function(e){t[n]=e;}});};},fde05346:function(e,t,n){"use strict";n.d(t,"__esModule",{value:!0}),n.e(t,{Context:function(){return u;},Provider:function(){return s;}});var r=n("852bbaa9"),a=r._(n("609f48be"));r._(n("cdb3b33b")).default;let o=a.createContext(null),{Consumer:i,Provider:l}=o,s=l,u=o;},fe1d9fad:function(e,t,n){"use strict";var r=n("94e80995"),a=n("9de9e5f1"),o=r.aTypedArrayConstructor,i=r.getTypedArrayConstructor;e.exports=function(e){return o(a(e,i(e)));};},fe1e68bb:function(e,t,n){"use strict";n.d(t,"__esModule",{value:!0}),n.d(t,"default",{enumerable:!0,get:function(){return i;}});var r=n("852bbaa9")._(n("609f48be")),a=n("2221581e"),o=n("0ec3aff9"),i=(e,t,n)=>{var i,l;let s;let{variant:u,[e]:c}=r.useContext(o.ConfigContext),f=r.useContext(a.VariantContext),d=null==c?void 0:c.variant;s=void 0!==t?t:!1===n?"borderless":null!==(l=null!==(i=null!=f?f:d)&&void 0!==i?i:u)&&void 0!==l?l:"outlined";let p=o.Variants.includes(s);return[s,p];};},fe25a1a9:function(e,t,n){"use strict";e.exports=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e);};},fe7ad741:function(e,t,n){"use strict";e.exports="function"==typeof Bun&&Bun&&"string"==typeof Bun.version;},fe8d45be:function(e,t,n){var r=n("13850e1a"),a=n("6cf62d49"),o=n("6299d2d5"),i=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return o(e);var t=a(e),n=[];for(var l in e)"constructor"==l&&(t||!i.call(e,l))||n.push(l);return n;};},fea169f3:function(e,t,n){"use strict";var r=n("f656c089").has;e.exports=function(e){return r(e),e;};},ff3276ad:function(e,t,n){"use strict";var r,a,o,i=n("43e04e66"),l=n("bf55b6aa"),s=n("b0f01ae1"),u=n("8d740fc6"),c=n("f4debf3c"),f=n("609d6d19"),d=n("e2d720a7"),p=n("ebfe32fd"),m=d("iterator"),g=!1;[].keys&&("next"in(o=[].keys())?(a=c(c(o)))!==Object.prototype&&(r=a):g=!0),!s(r)||i(function(){var e={};return r[m].call(e)!==e;})?r={}:p&&(r=u(r)),l(r[m])||f(r,m,function(){return this;}),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:g};},ff9a3a1f:function(e,t,n){"use strict";var r=n("f005dafe"),a=n("17b50140"),o=n("8c378636"),i=n("445e2046"),l=n("b0f01ae1"),s=n("6acd904b"),u=n("2f2b2bfc"),c=n("34542ddb"),f=n("428e35c7"),d=n("ebfe32fd"),p=u(function(e){var t=this,n=t.iterator,r=t.predicate;return new e(function(o,s){var u=function(e){t.done=!0,s(e);},d=function(e){f(n,u,e,u);},p=function(){try{e.resolve(i(a(t.next,n))).then(function(n){try{if(i(n).done)t.done=!0,o(c(void 0,!0));else{var a=n.value;try{var s=r(a,t.counter++),f=function(e){e?o(c(a,!1)):p();};l(s)?e.resolve(s).then(f,d):f(s);}catch(e){d(e);}}}catch(e){u(e);}},u);}catch(e){u(e);}};p();});});r({target:"AsyncIterator",proto:!0,real:!0,forced:d},{filter:function(e){return i(this),o(e),new p(s(this),{predicate:e});}});},ffa379e3:function(e,t,n){"use strict";n.d(t,"__esModule",{value:!0}),n.d(t,"default",{enumerable:!0,get:function(){return r;}});var r=e=>{let{controlHeight:t}=e;return{controlHeightSM:.75*t,controlHeightXS:.5*t,controlHeightLG:1.25*t};};},ffe34c80:function(e,t,n){var r=n("2e039b56"),a=n("137e7cc0"),o=n("bb289a91"),i=n("13850e1a");e.exports=function(e,t,n){if(!i(n))return!1;var l=typeof t;return("number"==l?!!(a(n)&&o(t,n.length)):"string"==l&&t in n)&&r(n[t],e);};},fff897fd:function(e,t,n){"use strict";var r=n("f005dafe"),a=n("2b517cb7"),o=n("4da7a8e2"),i=n("53d09e4e"),l=n("498140bd"),s=i.Map,u=i.set;r({target:"Map",proto:!0,real:!0,forced:!0},{mapValues:function(e){var t=o(this),n=a(e,arguments.length>1?arguments[1]:void 0),r=new s;return l(t,function(e,a){u(r,a,n(e,a,t));}),r;}});}},"a2d4bfbe",r);r.jsonpCallback=a._jsonpCallback;}(); -//# sourceMappingURL=umi.0bc66f47.js.map \ No newline at end of file +//# sourceMappingURL=umi.cc6a6985.js.map \ No newline at end of file diff --git a/umi.0bc66f47.js.map b/umi.cc6a6985.js.map similarity index 100% rename from umi.0bc66f47.js.map rename to umi.cc6a6985.js.map diff --git a/user/index.html b/user/index.html index a855c55c..517609d8 100644 --- a/user/index.html +++ b/user/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/user/login/index.html b/user/login/index.html index a855c55c..517609d8 100644 --- a/user/login/index.html +++ b/user/login/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/user/register-result/index.html b/user/register-result/index.html index a855c55c..517609d8 100644 --- a/user/register-result/index.html +++ b/user/register-result/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/user/register/index.html b/user/register/index.html index a855c55c..517609d8 100644 --- a/user/register/index.html +++ b/user/register/index.html @@ -7,10 +7,10 @@ Ant Design Pro - +
- + \ No newline at end of file diff --git a/vendors_0-async.7e409de9.js b/vendors_0-async.88a28419.js similarity index 99% rename from vendors_0-async.7e409de9.js rename to vendors_0-async.88a28419.js index 3aac279e..848b5430 100644 --- a/vendors_0-async.7e409de9.js +++ b/vendors_0-async.88a28419.js @@ -1,4 +1,4 @@ -(("undefined"!=typeof globalThis?globalThis:self)["makoChunk_ant-design-pro"]=("undefined"!=typeof globalThis?globalThis:self)["makoChunk_ant-design-pro"]||[]).push([["vendors_0"],{"000ce906":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{createContext:function(){return y;},createImmutable:function(){return w;},useContext:function(){return _;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("ee64167d"),l=a._(s),u=i("8a826376"),c=a._(u),f=i("4b97d3c2"),d=a._(f),h=i("044bdec0"),p=a._(h),m=i("609f48be"),g=o._(m),v=i("792e90bc");function y(n){var r=g.createContext(void 0);return{Context:r,Provider:function(n){var i=n.value,a=n.children,o=g.useRef(i);o.current=i;var s=g.useState(function(){return{getValue:function(){return o.current;},listeners:new Set};}),u=(0,l.default)(s,1)[0];return(0,d.default)(function(){(0,v.unstable_batchedUpdates)(function(){u.listeners.forEach(function(n){n(i);});});},[i]),g.createElement(r.Provider,{value:u},a);},defaultValue:n};}function _(n,r){var i=(0,c.default)("function"==typeof r?r:function(n){if(void 0===r)return n;if(!Array.isArray(r))return n[r];var i={};return r.forEach(function(r){i[r]=n[r];}),i;}),a=g.useContext(null==n?void 0:n.Context),o=a||{},s=o.listeners,u=o.getValue,f=g.useRef();f.current=i(a?u():null==n?void 0:n.defaultValue);var h=g.useState({}),m=(0,l.default)(h,2)[1];return(0,d.default)(function(){if(a)return s.add(n),function(){s.delete(n);};function n(n){var r=i(n);(0,p.default)(f.current,r,!0)||m({});}},[a]),f.current;}var b=i("7cfeda15"),x=a._(b),E=i("002639b3");function w(){var n=g.createContext(null);function r(){return g.useContext(n);}return{makeImmutable:function(i,a){var o=(0,E.supportRef)(i),s=function(s,l){var u=o?{ref:l}:{},c=g.useRef(0),f=g.useRef(s);return null!==r()?g.createElement(i,(0,x.default)({},s,u)):((!a||a(f.current,s))&&(c.current+=1),f.current=s,g.createElement(n.Provider,{value:c.current},g.createElement(i,(0,x.default)({},s,u))));};return o?g.forwardRef(s):s;},responseImmutable:function(n,i){var a=(0,E.supportRef)(n),o=function(i,o){return r(),g.createElement(n,(0,x.default)({},i,a?{ref:o}:{}));};return a?g.memo(g.forwardRef(o),i):g.memo(o,i);},useImmutableMark:r};}var S=w();S.makeImmutable,S.responseImmutable,S.useImmutableMark;},"001de73b":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return d;}});var a=i("777fffbe"),o=a._(i("9b84be4b")),s=a._(i("e4870cf0")),l=a._(i("a854094b")),u=i("553ee311"),c=a._(i("6654a076")),f=i("8970bd89");class d extends c.default{constructor(...n){super(...n),(0,l.default)(this,"texture",void 0),(0,l.default)(this,"updateTexture",()=>{let{createTexture2D:n}=this.rendererService;if(this.texture){this.texture.update({data:this.iconService.getCanvas(),mag:"linear",min:"linear mipmap nearest",mipmap:!0}),setTimeout(()=>{this.layerService.throttleRenderLayers();});return;}this.texture=n({data:this.iconService.getCanvas(),mag:u.gl.LINEAR,min:u.gl.LINEAR_MIPMAP_LINEAR,premultiplyAlpha:!1,width:1024,height:this.iconService.canvasHeight||128,mipmap:!0});});}get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,SIZE:9,UV:10});}getUninforms(){if(this.rendererService.getDirty()){var n;null===(n=this.texture)||void 0===n||n.bind();}let r=this.getCommonUniformsInfo(),i=this.getUniformsBufferInfo(this.getStyleAttribute());return this.updateStyleUnifoms(),(0,s.default)((0,s.default)({},r.uniformsOption),i.uniformsOption);}getCommonUniformsInfo(){let{raisingHeight:n=0,heightfixed:r=!1}=this.layer.getLayerConfig(),i={u_textSize:[1024,this.iconService.canvasHeight||128],u_raisingHeight:Number(n),u_heightfixed:Number(r),u_texture:this.texture};return this.textures=[this.texture],this.getUniformsBufferInfo(i);}initModels(){var n=this;return(0,o.default)(function*(){return n.iconService.on("imageUpdate",n.updateTexture),n.updateTexture(),n.buildModels();})();}clearModels(){var n;null===(n=this.texture)||void 0===n||n.destroy(),this.iconService.off("imageUpdate",this.updateTexture);}buildModels(){var n=this;return(0,o.default)(function*(){return n.initUniformsBuffer(),[(yield n.layer.buildLayerModel({moduleName:"pointImage",vertexShader:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_Uv;\n\nlayout(std140) uniform commonUniforms {\n vec2 u_textSize;\n float u_raisingHeight;\n float u_heightfixed;\n};\n\nout vec4 v_color;\nout vec2 v_uv;\nout float v_opacity;\n\n#pragma include "projection"\n#pragma include "picking"\n\nvoid main() {\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n v_color = a_Color;\n v_opacity = opacity;\n v_uv = a_Uv;\n vec4 project_pos = project_position(vec4(a_Position, 1.0), a_Position64Low);\n\n vec2 offset = project_pixel(offsets);\n\n float raisingHeight = u_raisingHeight;\n if (u_heightfixed < 1.0) {\n // false\n raisingHeight = project_pixel(u_raisingHeight);\n } else {\n if (\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\n ) {\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\n raisingHeight = u_raisingHeight * mapboxZoomScale;\n }\n }\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, raisingHeight, 1.0));\n\n gl_PointSize = a_Size * 2.0 * u_DevicePixelRatio;\n setPickingColor(a_PickingColor);\n}\n',fragmentShader:'layout(std140) uniform commonUniforms {\n vec2 u_textSize;\n float u_raisingHeight;\n float u_heightfixed;\n};\n\nuniform sampler2D u_texture;\n\nin vec4 v_color;\nin vec2 v_uv;\nin float v_opacity;\n\n#pragma include "picking"\n\nout vec4 outputColor;\n\nvoid main(){\n vec2 pos = v_uv / u_textSize + gl_PointCoord / u_textSize * 64.;\n vec4 textureColor;\n\n // Y = 0.299R + 0.587G + 0.114B // \u4EAE\u5EA6\u63D0\u53D6\n \n textureColor = texture(SAMPLER_2D(u_texture), pos);\n\n // Tip: \u53BB\u9664\u8FB9\u7F18\u90E8\u5206 mipmap \u5BFC\u81F4\u7684\u6DF7\u5408\u53D8\u6697\n float fragmengTocenter = distance(vec2(0.5), gl_PointCoord);\n if(fragmengTocenter >= 0.5) {\n float luma = 0.299 * textureColor.r + 0.587 * textureColor.g + 0.114 * textureColor.b;\n textureColor.a *= luma;\n }\n \n if(all(lessThan(v_color, vec4(1.0+0.00001))) && all(greaterThan(v_color, vec4(1.0-0.00001))) || v_color==vec4(1.0)){\n outputColor= textureColor;\n }else {\n outputColor= step(0.01, textureColor.z) * v_color;\n }\n outputColor.a *= v_opacity;\n if (outputColor.a < 0.01) {\n discard;\n }\n outputColor = filterColor(outputColor);\n}\n',triangulation:f.PointImageTriangulation,defines:n.getDefines(),inject:n.getInject(),depth:{enable:!1},primitive:u.gl.POINTS}))];})();}registerBuiltinAttributes(){this.registerPosition64LowAttribute(),this.styleAttributeService.registerStyleAttribute({name:"size",type:u.AttributeType.Attribute,descriptor:{name:"a_Size",shaderLocation:this.attributeLocation.SIZE,buffer:{usage:u.gl.DYNAMIC_DRAW,data:[],type:u.gl.FLOAT},size:1,update:n=>{let{size:r=5}=n;return Array.isArray(r)?[r[0]]:[r];}}}),this.styleAttributeService.registerStyleAttribute({name:"uv",type:u.AttributeType.Attribute,descriptor:{name:"a_Uv",shaderLocation:this.attributeLocation.UV,buffer:{usage:u.gl.DYNAMIC_DRAW,data:[],type:u.gl.FLOAT},size:2,update:n=>{let r=this.iconService.getIconMap(),{shape:i}=n,{x:a,y:o}=r[i]||{x:-64,y:-64};return[a,o];}}});}}},"0047230b":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),r.default=function(){return!!("undefined"!=typeof window&&window.document&&window.document.createElement);};},"007fa019":function(n,r,i){var a=i("ca53fc7e"),o=i("4a936d43"),s=i("22702128"),l=i("07ba0bdb"),u=i("7dd83cf2"),c=i("e4cbb1a3"),f=i("743ea378");n.exports=function(n,r){return l(n)&&u(r)?c(f(n),r):function(i){var l=o(i,n);return void 0===l&&l===r?s(i,n):a(r,l,3);};};},"00ab32b8":function(n,r,i){var a,o;a=this,o=function(){"use strict";function n(n,i,a,o){r(n,a,o),r(i,2*a,2*o),r(i,2*a+1,2*o+1);}function r(n,r,i){var a=n[r];n[r]=n[i],n[i]=a;}function i(n,r,i,a){var o=n-i,s=r-a;return o*o+s*s;}var a,o=function(n){return n[0];},s=function(n){return n[1];},l=function(r,i,a,l,u){void 0===i&&(i=o),void 0===a&&(a=s),void 0===l&&(l=64),void 0===u&&(u=Float64Array),this.nodeSize=l,this.points=r;for(var c=r.length<65536?Uint16Array:Uint32Array,f=this.ids=new c(r.length),d=this.coords=new u(2*r.length),h=0;h>1;(function r(i,a,o,s,l,u){for(;l>s;){if(l-s>600){var c=l-s+1,f=o-s+1,d=Math.log(c),h=.5*Math.exp(2*d/3),p=.5*Math.sqrt(d*h*(c-h)/c)*(f-c/2<0?-1:1),m=Math.max(s,Math.floor(o-f*h/c+p)),g=Math.min(l,Math.floor(o+(c-f)*h/c+p));r(i,a,o,m,g,u);}var v=a[2*o+u],y=s,_=l;for(n(i,a,s,o),a[2*l+u]>v&&n(i,a,s,l);y<_;){for(n(i,a,y,_),y++,_--;a[2*y+u]v;)_--;}a[2*s+u]===v?n(i,a,s,_):n(i,a,++_,l),_<=o&&(s=_+1),o<=_&&(l=_-1);}})(i,a,c,s,l,u%2),r(i,a,o,s,c-1,u+1),r(i,a,o,c+1,l,u+1);}}(f,d,l,0,f.length-1,0);};l.prototype.range=function(n,r,i,a){return function(n,r,i,a,o,s,l){for(var u,c,f=[0,n.length-1,0],d=[];f.length;){var h=f.pop(),p=f.pop(),m=f.pop();if(p-m<=l){for(var g=m;g<=p;g++)u=r[2*g],c=r[2*g+1],u>=i&&u<=o&&c>=a&&c<=s&&d.push(n[g]);continue;}var v=Math.floor((m+p)/2);u=r[2*v],c=r[2*v+1],u>=i&&u<=o&&c>=a&&c<=s&&d.push(n[v]);var y=(h+1)%2;(0===h?i<=u:a<=c)&&(f.push(m),f.push(v-1),f.push(y)),(0===h?o>=u:s>=c)&&(f.push(v+1),f.push(p),f.push(y));}return d;}(this.ids,this.coords,n,r,i,a,this.nodeSize);},l.prototype.within=function(n,r,a){return function(n,r,a,o,s,l){for(var u=[0,n.length-1,0],c=[],f=s*s;u.length;){var d=u.pop(),h=u.pop(),p=u.pop();if(h-p<=l){for(var m=p;m<=h;m++)i(r[2*m],r[2*m+1],a,o)<=f&&c.push(n[m]);continue;}var g=Math.floor((p+h)/2),v=r[2*g],y=r[2*g+1];i(v,y,a,o)<=f&&c.push(n[g]);var _=(d+1)%2;(0===d?a-s<=v:o-s<=y)&&(u.push(p),u.push(g-1),u.push(_)),(0===d?a+s>=v:o+s>=y)&&(u.push(g+1),u.push(h),u.push(_));}return c;}(this.ids,this.coords,n,r,a,this.nodeSize);};var u={minZoom:0,maxZoom:16,minPoints:2,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:function(n){return n;}},c=Math.fround||(a=new Float32Array(1),function(n){return a[0]=+n,a[0];}),f=function(n){this.options=g(Object.create(u),n),this.trees=Array(this.options.maxZoom+1);};function d(n){return{type:"Feature",id:n.id,properties:h(n),geometry:{type:"Point",coordinates:[(n.x-.5)*360,360*Math.atan(Math.exp((180-360*n.y)*Math.PI/180))/Math.PI-90]}};}function h(n){var r=n.numPoints,i=r>=1e4?Math.round(r/1e3)+"k":r>=1e3?Math.round(r/100)/10+"k":r;return g(g({},n.properties),{cluster:!0,cluster_id:n.id,point_count:r,point_count_abbreviated:i});}function p(n){return n/360+.5;}function m(n){var r=Math.sin(n*Math.PI/180),i=.5-.25*Math.log((1+r)/(1-r))/Math.PI;return i<0?0:i>1?1:i;}function g(n,r){for(var i in r)n[i]=r[i];return n;}function v(n){return n.x;}function y(n){return n.y;}return f.prototype.load=function(n){var r=this.options,i=r.log,a=r.minZoom,o=r.maxZoom,s=r.nodeSize;i&&console.time("total time");var u="prepare "+n.length+" points";i&&console.time(u),this.points=n;for(var f=[],d=0;d=a;h--){var g=+Date.now();f=this._cluster(f,h),this.trees[h]=new l(f,v,y,s,Float32Array),i&&console.log("z%d: %d clusters in %dms",h,f.length,+Date.now()-g);}return i&&console.timeEnd("total time"),this;},f.prototype.getClusters=function(n,r){var i=((n[0]+180)%360+360)%360-180,a=Math.max(-90,Math.min(90,n[1])),o=180===n[2]?180:((n[2]+180)%360+360)%360-180,s=Math.max(-90,Math.min(90,n[3]));if(n[2]-n[0]>=360)i=-180,o=180;else if(i>o){var l=this.getClusters([i,a,180,s],r),u=this.getClusters([-180,a,o,s],r);return l.concat(u);}for(var c=this.trees[this._limitZoom(r)],f=c.range(p(i),m(s),p(o),m(a)),h=[],g=0;gr&&(v+=b.numPoints||1);}if(v>g&&v>=u){for(var x,E,w,S,T=h.x*g,A=h.y*g,C=l&&g>1?this._map(h,!0):null,O=(d<<5)+(r+1)+this.points.length,M=0;M1)for(var I=0;I>5;},f.prototype._getOriginZoom=function(n){return(n-this.points.length)%32;},f.prototype._map=function(n,r){if(n.numPoints)return r?g({},n.properties):n.properties;var i=this.points[n.index].properties,a=this.options.map(i);return r&&a===i?g({},a):a;},f;},"object"==typeof r&&void 0!==n?n.exports=o():(a="undefined"!=typeof globalThis?globalThis:a||self).Supercluster=o();},"013645fb":function(n,r,i){"use strict";n.exports=function(n){var r=n.stateHandler.getState;return{isDetectable:function(n){var i=r(n);return i&&!!i.isDetectable;},markAsDetectable:function(n){r(n).isDetectable=!0;},isBusy:function(n){return!!r(n).busy;},markBusy:function(n,i){r(n).busy=!!i;}};};},"016e8963":function(n,r,i){"use strict";function a(n,r){this.x=n,this.y=r;}n.exports=a,a.prototype={clone:function(){return new a(this.x,this.y);},add:function(n){return this.clone()._add(n);},sub:function(n){return this.clone()._sub(n);},multByPoint:function(n){return this.clone()._multByPoint(n);},divByPoint:function(n){return this.clone()._divByPoint(n);},mult:function(n){return this.clone()._mult(n);},div:function(n){return this.clone()._div(n);},rotate:function(n){return this.clone()._rotate(n);},rotateAround:function(n,r){return this.clone()._rotateAround(n,r);},matMult:function(n){return this.clone()._matMult(n);},unit:function(){return this.clone()._unit();},perp:function(){return this.clone()._perp();},round:function(){return this.clone()._round();},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y);},equals:function(n){return this.x===n.x&&this.y===n.y;},dist:function(n){return Math.sqrt(this.distSqr(n));},distSqr:function(n){var r=n.x-this.x,i=n.y-this.y;return r*r+i*i;},angle:function(){return Math.atan2(this.y,this.x);},angleTo:function(n){return Math.atan2(this.y-n.y,this.x-n.x);},angleWith:function(n){return this.angleWithSep(n.x,n.y);},angleWithSep:function(n,r){return Math.atan2(this.x*r-this.y*n,this.x*n+this.y*r);},_matMult:function(n){var r=n[0]*this.x+n[1]*this.y,i=n[2]*this.x+n[3]*this.y;return this.x=r,this.y=i,this;},_add:function(n){return this.x+=n.x,this.y+=n.y,this;},_sub:function(n){return this.x-=n.x,this.y-=n.y,this;},_mult:function(n){return this.x*=n,this.y*=n,this;},_div:function(n){return this.x/=n,this.y/=n,this;},_multByPoint:function(n){return this.x*=n.x,this.y*=n.y,this;},_divByPoint:function(n){return this.x/=n.x,this.y/=n.y,this;},_unit:function(){return this._div(this.mag()),this;},_perp:function(){var n=this.y;return this.y=this.x,this.x=-n,this;},_rotate:function(n){var r=Math.cos(n),i=Math.sin(n),a=r*this.x-i*this.y,o=i*this.x+r*this.y;return this.x=a,this.y=o,this;},_rotateAround:function(n,r){var i=Math.cos(n),a=Math.sin(n),o=r.x+i*(this.x-r.x)-a*(this.y-r.y),s=r.y+a*(this.x-r.x)+i*(this.y-r.y);return this.x=o,this.y=s,this;},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this;}},a.convert=function(n){return n instanceof a?n:Array.isArray(n)?new a(n[0],n[1]):n;};},"01746c28":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{genColumnKey:function(){return m;},isBordered:function(){return h;},isMergeCell:function(){return p;},mergePagination:function(){return c;},parseDefaultColumnConfig:function(){return g;},postDataPipeline:function(){return d;},useActionType:function(){return f;}});var a=i("777fffbe"),o=a._(i("23934e00")),s=a._(i("9b84be4b")),l=a._(i("e4870cf0")),u=a._(i("99c0cd4c"));function c(n,r,i){if(!1===n)return!1;var a,o,s=r.total,c=r.current,f=r.pageSize,d=r.setPageInfo,h="object"===(0,u.default)(n)?n:{};return(0,l.default)((0,l.default)({showTotal:function(n,r){return"".concat(i.getMessage("pagination.total.range","\u7B2C")," ").concat(r[0],"-").concat(r[1]," ").concat(i.getMessage("pagination.total.total","\u6761/\u603B\u5171")," ").concat(n," ").concat(i.getMessage("pagination.total.item","\u6761"));},total:s},h),{},{current:!0!==n&&n&&null!==(a=n.current)&&void 0!==a?a:c,pageSize:!0!==n&&n&&null!==(o=n.pageSize)&&void 0!==o?o:f,onChange:function(r,i){var a=n.onChange;null==a||a(r,i||20),(i!==f||c!==r)&&d({pageSize:i,current:r});}});}function f(n,r,i){var a,u,c,f=(0,l.default)((0,l.default)({},i.editableUtils),{},{pageInfo:r.pageInfo,reload:(a=(0,s.default)((0,o.default)().mark(function n(i){return(0,o.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(!i){n.next=3;break;}return n.next=3,r.setPageInfo({current:1});case 3:return n.next=5,null==r?void 0:r.reload();case 5:case"end":return n.stop();}},n);})),function(n){return a.apply(this,arguments);}),reloadAndRest:(u=(0,s.default)((0,o.default)().mark(function n(){return(0,o.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return i.onCleanSelected(),n.next=3,r.setPageInfo({current:1});case 3:return n.next=5,null==r?void 0:r.reload();case 5:case"end":return n.stop();}},n);})),function(){return u.apply(this,arguments);}),reset:(c=(0,s.default)((0,o.default)().mark(function n(){var a;return(0,o.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,i.resetAll();case 2:return n.next=4,null==r||null===(a=r.reset)||void 0===a?void 0:a.call(r);case 4:return n.next=6,null==r?void 0:r.reload();case 6:case"end":return n.stop();}},n);})),function(){return c.apply(this,arguments);}),fullScreen:function(){return i.fullScreen();},clearSelected:function(){return i.onCleanSelected();},setPageInfo:function(n){return r.setPageInfo(n);}});n.current=f;}function d(n,r){return r.filter(function(n){return n;}).length<1?n:r.reduce(function(n,r){return r(n);},n);}var h=function(n,r){return void 0!==r&&("boolean"==typeof r?r:r[n]);},p=function(n){var r;return n&&"object"===(0,u.default)(n)&&(null==n||null===(r=n.props)||void 0===r?void 0:r.colSpan);},m=function(n,r){return n?Array.isArray(n)?n.join("-"):n.toString():"".concat(r);};function g(n){var r={},i={};return n.forEach(function(n){var a,o=Array.isArray(a=n.dataIndex)?a.join(","):null==a?void 0:a.toString();o&&(n.filters&&(void 0===n.defaultFilteredValue?r[o]=null:r[o]=n.defaultFilteredValue),n.sorter&&n.defaultSortOrder&&(i[o]=n.defaultSortOrder));}),{sort:i,filter:r};}},"018c5f61":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),r.mergeClasses=void 0;var a=l(i("7d370577")),o=l(i("9e002045")),s=Object.assign||function(n){for(var r=1;r1&&void 0!==arguments[1]?arguments[1]:[],i=n.default&&(0,o.default)(n.default)||{};return r.map(function(r){var o=n[r];return o&&(0,a.default)(o,function(n,r){i[r]||(i[r]={}),i[r]=s({},i[r],o[r]);}),r;}),i;};r.default=u;},"01b2eefa":function(n,r,i){"use strict";function a(n,r){r||(r=[]);var i,a=n?Math.min(r.length,n.length):0,o=r.slice();return function(s){for(i=0;i=0&&i.splice(a,1),i;}function f(n,r){var i=(n||[]).slice();return -1===i.indexOf(r)&&i.push(r),i;}function d(n){return n.split("-");}function h(n,r){var i=[];return!function n(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];r.forEach(function(r){var a=r.key,o=r.children;i.push(a),n(o);});}((0,u.default)(r,n).children),i;}function p(n){if(n.parent){var r=d(n.pos);return Number(r[r.length-1])===n.parent.children.length-1;}return!1;}function m(n){var r=d(n.pos);return 0===Number(r[r.length-1]);}function g(n,r,i,a,o,s,l,c,f,d){var h,g=n.clientX,v=n.clientY,y=n.target.getBoundingClientRect(),_=y.top,b=y.height,x=(("rtl"===d?-1:1)*(((null==o?void 0:o.x)||0)-g)-12)/a,E=f.filter(function(n){var r;return null===(r=c[n])||void 0===r||null===(r=r.children)||void 0===r?void 0:r.length;}),w=(0,u.default)(c,i.eventKey);if(v<_+b/2){var S=l.findIndex(function(n){return n.key===w.key;}),T=l[S<=0?0:S-1].key;w=(0,u.default)(c,T);}var A=w.key,C=w,O=w.key,M=0,R=0;if(!E.includes(A))for(var P=0;P-1.5?s({dragNode:k,dropNode:I,dropPosition:1})?M=1:L=!1:s({dragNode:k,dropNode:I,dropPosition:0})?M=0:s({dragNode:k,dropNode:I,dropPosition:1})?M=1:L=!1:s({dragNode:k,dropNode:I,dropPosition:1})?M=1:L=!1,{dropPosition:M,dropLevelOffset:R,dropTargetKey:w.key,dropTargetPos:w.pos,dragOverNodeKey:O,dropContainerKey:0===M?null:(null===(h=w.parent)||void 0===h?void 0:h.key)||null,dropAllowed:L};}function v(n,r){if(n)return r.multiple?n.slice():n.length?[n[0]]:n;}function y(n){var r;if(!n)return null;if(Array.isArray(n))r={checkedKeys:n,halfCheckedKeys:void 0};else{if("object"!==(0,s.default)(n))return(0,l.default)(!1,"`checkedKeys` is not an array or an object"),null;r={checkedKeys:n.checked||void 0,halfCheckedKeys:n.halfChecked||void 0};}return r;}function _(n,r){var i=new Set;return(n||[]).forEach(function(n){!function n(a){if(!i.has(a)){var o=(0,u.default)(r,a);if(o){i.add(a);var s=o.parent;!o.node.disabled&&s&&n(s.key);}}}(n);}),(0,o.default)(i);}i("d105a374");},"0272f1d7":function(n,r,i){n.exports=function(n){return this.__data__.set(n,"__lodash_hash_undefined__"),this;};},"02a23b09":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{GridContext:function(){return m;},gridHelpers:function(){return g;},useGridHelpers:function(){return v;}});var a=i("777fffbe"),o=a._(i("99c0cd4c")),s=a._(i("e4870cf0")),l=a._(i("613f75ca")),u=a._(i("78a22024")),c=a._(i("adf76174")),f=i("609f48be"),d=i("dac8af92"),h=["children","Wrapper"],p=["children","Wrapper"],m=(0,f.createContext)({grid:!1,colProps:void 0,rowProps:void 0}),g=function(n){var r=n.grid,i=n.rowProps,a=n.colProps;return{grid:!!r,RowWrapper:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=n.children,o=n.Wrapper,u=(0,l.default)(n,h);return r?(0,d.jsx)(c.default,(0,s.default)((0,s.default)((0,s.default)({gutter:8},i),u),{},{children:a})):o?(0,d.jsx)(o,{children:a}):a;},ColWrapper:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=n.children,o=n.Wrapper,c=(0,l.default)(n,p),h=(0,f.useMemo)(function(){var n=(0,s.default)((0,s.default)({},a),c);return void 0===n.span&&void 0===n.xs&&(n.xs=24),n;},[c]);return r?(0,d.jsx)(u.default,(0,s.default)((0,s.default)({},h),{},{children:i})):o?(0,d.jsx)(o,{children:i}):i;}};},v=function(n){var r=(0,f.useMemo)(function(){return"object"===(0,o.default)(n)?n:{grid:n};},[n]),i=(0,f.useContext)(m),a=i.grid,s=i.colProps;return(0,f.useMemo)(function(){return g({grid:!!(a||r.grid),rowProps:null==r?void 0:r.rowProps,colProps:(null==r?void 0:r.colProps)||s,Wrapper:null==r?void 0:r.Wrapper});},[null==r?void 0:r.Wrapper,r.grid,a,JSON.stringify([s,null==r?void 0:r.colProps,null==r?void 0:r.rowProps])]);};},"02f16af6":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return l;}});var a=i("777fffbe")._(i("4017e4bc")),o=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,s=RegExp(o.source,"g");function l(n,r){var i,l,u,c,f,d=o.lastIndex=s.lastIndex=0,h=-1,p=[],m=[];for(n+="",r+="";(u=o.exec(n))&&(c=s.exec(r));)(f=c.index)>d&&(f=r.slice(d,f),p[h]?p[h]+=f:p[++h]=f),(u=u[0])===(c=c[0])?p[h]?p[h]+=c:p[++h]=c:(p[++h]=null,m.push({i:h,x:(0,a.default)(u,c)})),d=s.lastIndex;return d{var r,i;let a=Object.assign(Object.assign({},{startAngle:-Math.PI/2,endAngle:3*Math.PI/2,innerRadius:0,outerRadius:1}),n);return Object.assign(Object.assign({},a),(r=a.startAngle,i=a.endAngle,r%=2*Math.PI,i%=2*Math.PI,r<0&&(r=2*Math.PI+r),i<0&&(i=2*Math.PI+i),r>=i&&(i+=2*Math.PI),{startAngle:r,endAngle:i}));},o=n=>{let{startAngle:r,endAngle:i,innerRadius:o,outerRadius:s}=a(n);return[["translate",0,.5],["reflect.y"],["translate",0,-.5],["polar",r,i,o,s]];};o.props={};},"0381584d":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{Marker:function(){return v;}});var a=i("777fffbe"),o=i("3862611d"),s=i("da5c7e2c"),l=a._(s),u=i("47a6bde3"),c=i("a602d54e"),f=i("b0ea517f"),d=i("14887fae"),h=i("428badac"),p=a._(h),m=i("d0572d97"),g=a._(m),v=function(n){function r(){return null!==n&&n.apply(this,arguments)||this;}return(0,o.__extends)(r,n),r.prototype.render=function(n,i){var a,s=n.x,u=void 0===s?0:s,d=n.y,h=void 0===d?0:d,m=this.getSubShapeStyle(n),v=m.symbol,y=m.size,_=void 0===y?16:y,b=(0,o.__rest)(m,["symbol","size"]),x=["base64","url","image"].includes(a=function(n){var r="default";if((0,p.default)(n)&&n instanceof Image)r="image";else if((0,l.default)(n))r="symbol";else if((0,g.default)(n)){var i=RegExp("data:(image|text)");r=n.match(i)?"base64":/^(https?:\/\/(([a-zA-Z0-9]+-?)+[a-zA-Z0-9]+\.)+[a-zA-Z]+)(:\d+)?(\/.*)?(\?.*)?(#.*)?$/.test(n)?"url":"symbol";}return r;}(v))?"image":v&&"symbol"===a?"path":null;(0,c.ifShow)(!!x,(0,f.select)(i),function(n){n.maybeAppendByClassName("marker",x).attr("className","marker ".concat(x,"-marker")).call(function(n){if("image"===x){var i=2*_;n.styles({img:v,width:i,height:i,x:u-_,y:h-_});}else{var i=_/2,a=(0,l.default)(v)?v:r.getSymbol(v);n.styles((0,o.__assign)({d:null==a?void 0:a(u,h,i)},b));}});});},r.MARKER_SYMBOL_MAP=new Map,r.registerSymbol=function(n,i){r.MARKER_SYMBOL_MAP.set(n,i);},r.getSymbol=function(n){return r.MARKER_SYMBOL_MAP.get(n);},r.getSymbols=function(){return Array.from(r.MARKER_SYMBOL_MAP.keys());},r;}(u.Component);v.registerSymbol("cross",d.cross),v.registerSymbol("hyphen",d.hyphen),v.registerSymbol("line",d.line),v.registerSymbol("plus",d.plus),v.registerSymbol("tick",d.tick),v.registerSymbol("circle",d.circle),v.registerSymbol("point",d.point),v.registerSymbol("bowtie",d.bowtie),v.registerSymbol("hexagon",d.hexagon),v.registerSymbol("square",d.square),v.registerSymbol("diamond",d.diamond),v.registerSymbol("triangle",d.triangle),v.registerSymbol("triangle-down",d.triangleDown),v.registerSymbol("line",d.line),v.registerSymbol("dot",d.dot),v.registerSymbol("dash",d.dash),v.registerSymbol("smooth",d.smooth),v.registerSymbol("hv",d.hv),v.registerSymbol("vh",d.vh),v.registerSymbol("hvh",d.hvh),v.registerSymbol("vhv",d.vhv);},"041c1263":function(n,r,i){n.exports=function(n,r){for(var i=-1,a=null==n?0:n.length;++i1)return 1;for(var i=n,a=0;a<8;a++){var o=this.sampleCurveX(i)-n;if(Math.abs(o)Math.abs(s))break;i-=o/s;}var l=0,u=1;for(a=0,i=n;a<20&&!(Math.abs((o=this.sampleCurveX(i))-n)o?l=i:u=i,i=(u-l)*.5+l;return i;},solve:function(n,r){return this.sampleCurveY(this.solveCurveX(n,r));}};},"04ecc0fa":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return v;}});var a=i("777fffbe"),o=a._(i("23934e00")),s=a._(i("9b84be4b")),l=a._(i("613f75ca")),u=a._(i("e4870cf0")),c=a._(i("ddaa0afd")),f=i("a275200c"),d=i("609f48be"),h=i("cd1e34ba"),p=i("efd8a033"),m=i("dac8af92"),g=["onFinish","step","formRef","title","stepProps"],v=function(n){var r,i=(0,d.useRef)(),a=(0,d.useContext)(p.StepsFormProvide),v=(0,d.useContext)(p.StepFormProvide),y=(0,u.default)((0,u.default)({},n),v),_=y.onFinish,b=y.step,x=y.formRef,E=(y.title,y.stepProps,(0,l.default)(y,g));return(0,f.noteOnce)(!E.submitter,"StepForm \u4E0D\u5305\u542B\u63D0\u4EA4\u6309\u94AE\uFF0C\u8BF7\u5728 StepsForm \u4E0A"),(0,d.useImperativeHandle)(x,function(){return i.current;},[null==x?void 0:x.current]),(0,d.useEffect)(function(){if(y.name||y.step){var n=(y.name||y.step).toString();return null==a||a.regForm(n,y),function(){null==a||a.unRegForm(n);};}},[]),a&&null!=a&&a.formArrayRef&&(a.formArrayRef.current[b||0]=i),(0,m.jsx)(h.BaseForm,(0,u.default)({formRef:i,onFinish:(r=(0,s.default)((0,o.default)().mark(function n(r){return(0,o.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(E.name&&(null==a||a.onFormFinish(E.name,r)),!_){n.next=9;break;}return null==a||a.setLoading(!0),n.next=5,null==_?void 0:_(r);case 5:return n.sent&&(null==a||a.next()),null==a||a.setLoading(!1),n.abrupt("return");case 9:null!=a&&a.lastStep||null==a||a.next();case 10:case"end":return n.stop();}},n);})),function(n){return r.apply(this,arguments);}),onInit:function(n,r){var o;i.current=r,a&&null!=a&&a.formArrayRef&&(a.formArrayRef.current[b||0]=i),null==E||null===(o=E.onInit)||void 0===o||o.call(E,n,r);},layout:"vertical"},(0,c.default)(E,["layoutType","columns"])));};},"04fd6645":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return B;}});var a=i("777fffbe"),o=i("9b84be4b"),s=a._(o),l=i("a854094b"),u=a._(l),c=i("e333157c"),f=a._(c),d=i("824b66b4"),h=a._(d),p=i("991309e4"),m=a._(p),g=i("c0d77826"),v=a._(g),y=i("001de73b"),_=a._(y),b=i("9063dcee"),x=a._(b),E=i("21da3e32"),w=a._(E),S=i("e4870cf0"),T=a._(S),A=i("553ee311"),C=i("9479dab9"),O=i("6654a076"),M=a._(O),R=i("8970bd89");function P(){return(P=(0,s.default)(function*(n){if(window.createImageBitmap){let r=yield fetch(n);return yield createImageBitmap((yield r.blob()));}{let r=new window.Image;return new Promise(i=>{r.onload=()=>i(r),r.src=n,r.crossOrigin="Anonymous";});}})).apply(this,arguments);}class k extends M.default{constructor(...n){super(...n),(0,u.default)(this,"texture",void 0);}get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,SIZE:9,NORMAL:10,UV:11});}getUninforms(){let n=this.getCommonUniformsInfo(),r=this.getUniformsBufferInfo(this.getStyleAttribute());return this.updateStyleUnifoms(),(0,T.default)((0,T.default)({},n.uniformsOption),r.uniformsOption);}getCommonUniformsInfo(){let{mapTexture:n,heightfixed:r=!1,raisingHeight:i=0,topsurface:a=!0,sidesurface:o=!0,sourceColor:s,targetColor:l}=this.layer.getLayerConfig(),u=0,c=[1,1,1,1],f=[1,1,1,1];s&&l&&(c=(0,C.rgb2arr)(s),f=(0,C.rgb2arr)(l),u=1);let d={u_sourceColor:c,u_targetColor:f,u_linearColor:u,u_topsurface:Number(a),u_sidesurface:Number(o),u_heightfixed:Number(r),u_raisingHeight:Number(i)};return n&&this.texture&&(d.u_texture=this.texture,this.textures=[this.texture]),this.getUniformsBufferInfo(d);}initModels(){var n=this;return(0,s.default)(function*(){return yield n.loadTexture(),n.buildModels();})();}buildModels(){var n=this;return(0,s.default)(function*(){let{frag:r,vert:i,type:a}=n.getShaders();return n.initUniformsBuffer(),[(yield n.layer.buildLayerModel({moduleName:a,vertexShader:i,fragmentShader:r,depth:{enable:!0},defines:n.getDefines(),inject:n.getInject(),triangulation:R.PolygonExtrudeTriangulation}))];})();}getShaders(){let{pickLight:n,mapTexture:r}=this.layer.getLayerConfig();return r?{frag:'uniform sampler2D u_texture;\n\nlayout(std140) uniform commonUniforms {\n vec4 u_sourceColor;\n vec4 u_targetColor;\n float u_linearColor;\n float u_topsurface;\n float u_sidesurface;\n float u_heightfixed; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\n float u_raisingHeight;\n};\n\nin vec4 v_Color;\nin vec3 v_uvs;\nin vec2 v_texture_data;\n\n#pragma include "scene_uniforms"\n#pragma include "picking"\n\nout vec4 outputColor;\n\nvoid main() {\n float opacity = u_opacity;\n float isSide = v_texture_data.x;\n float lightWeight = v_texture_data.y;\n float topU = v_uvs[0];\n float topV = 1.0 - v_uvs[1];\n float sidey = v_uvs[2];\n\n outputColor = texture(SAMPLER_2D(u_texture), vec2(topU, topV));\n // Tip: \u90E8\u5206\u673A\u578B GPU \u8BA1\u7B97\u7CBE\u5EA6\u517C\u5BB9\n if (isSide < 0.999) {// \u662F\u5426\u662F\u8FB9\u7F18\n // side face\n if (u_sidesurface < 1.0) {\n discard;\n }\n\n if (u_linearColor == 1.0) {\n vec4 linearColor = mix(u_targetColor, u_sourceColor, sidey);\n linearColor.rgb *= lightWeight;\n outputColor = linearColor;\n } else {\n outputColor = v_Color;\n }\n } else {\n // top face\n if (u_topsurface < 1.0) {\n discard;\n }\n }\n \n outputColor.a *= opacity;\n outputColor = filterColor(outputColor);\n}\n',vert:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec3 a_uvs;\n\nlayout(std140) uniform commonUniforms {\n vec4 u_sourceColor;\n vec4 u_targetColor;\n float u_linearColor;\n float u_topsurface;\n float u_sidesurface;\n float u_heightfixed; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\n float u_raisingHeight;\n};\n\nout vec4 v_Color;\nout vec3 v_uvs;\nout vec2 v_texture_data;\n\n#pragma include "projection"\n#pragma include "light"\n#pragma include "picking"\n\nvoid main() {\n vec4 pos = vec4(a_Position.xy, a_Position.z * a_Size, 1.0);\n vec4 project_pos = project_position(pos, a_Position64Low);\n float lightWeight = calc_lighting(project_pos);\n v_uvs = a_uvs;\n v_Color = a_Color;\n v_Color.a *= opacity;\n\n v_texture_data = vec2(a_Position.z, lightWeight);\n\n if (u_heightfixed > 0.0) {\n // \u5224\u65AD\u51E0\u4F55\u4F53\u662F\u5426\u56FA\u5B9A\u9AD8\u5EA6\n project_pos.z = a_Position.z * a_Size;\n project_pos.z += u_raisingHeight;\n\n if (\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\n ) {\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\n project_pos.z *= mapboxZoomScale;\n project_pos.z += u_raisingHeight * mapboxZoomScale;\n }\n }\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n',type:"polygonExtrudeTexture"}:n?{frag:'\nlayout(std140) uniform commonUniforms {\n vec4 u_sourceColor;\n vec4 u_targetColor;\n float u_linearColor;\n float u_topsurface;\n float u_sidesurface;\n float u_heightfixed; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\n float u_raisingHeight;\n};\n\nin vec4 v_Color;\nin vec3 v_uvs;\nin vec2 v_texture_data;\nout vec4 outputColor;\n\n#pragma include "scene_uniforms"\n#pragma include "picking"\n\nvoid main() {\n float isSide = v_texture_data.x;\n float sidey = v_uvs[2];\n float lightWeight = v_texture_data.y;\n\n // Tip: \u90E8\u5206\u673A\u578B GPU \u8BA1\u7B97\u7CBE\u5EA6\u517C\u5BB9\n if(isSide < 0.999) {\n // side face\n if(u_sidesurface < 1.0) {\n discard;\n }\n \n if( u_linearColor == 1.0) {\n // side use linear\n vec4 linearColor = mix(u_targetColor, u_sourceColor, sidey);\n linearColor.rgb *= lightWeight;\n outputColor = linearColor;\n } else {\n // side notuse linear\n outputColor = v_Color;\n }\n } else {\n // top face\n if(u_topsurface < 1.0) {\n discard;\n }\n outputColor = v_Color;\n }\n\n outputColor = filterColorAlpha(outputColor, lightWeight);\n}\n',vert:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec3 a_uvs;\n\nlayout(std140) uniform commonUniforms {\n vec4 u_sourceColor;\n vec4 u_targetColor;\n float u_linearColor;\n float u_topsurface;\n float u_sidesurface;\n float u_heightfixed; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\n float u_raisingHeight;\n};\n\nout vec4 v_Color;\nout vec3 v_uvs;\nout vec2 v_texture_data;\n\n#pragma include "projection"\n#pragma include "light"\n#pragma include "picking"\n\nvoid main() {\n v_uvs = a_uvs;\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n vec4 pos = vec4(a_Position.xy, a_Position.z * a_Size, 1.0);\n vec4 project_pos = project_position(pos, a_Position64Low);\n\n if (u_heightfixed > 0.0) {\n // \u5224\u65AD\u51E0\u4F55\u4F53\u662F\u5426\u56FA\u5B9A\u9AD8\u5EA6\n project_pos.z = a_Position.z * a_Size;\n project_pos.z += u_raisingHeight;\n if (\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\n ) {\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\n project_pos.z *= mapboxZoomScale;\n project_pos.z += u_raisingHeight * mapboxZoomScale;\n }\n }\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\n float lightWeight = calc_lighting(project_pos);\n v_texture_data = vec2(a_Position.z, lightWeight);\n\n v_Color = vec4(a_Color.rgb * lightWeight, a_Color.w * opacity);\n\n setPickingColor(a_PickingColor);\n}\n',type:"polygonExtrudePickLight"}:{frag:'layout(std140) uniform commonUniforms {\n vec4 u_sourceColor;\n vec4 u_targetColor;\n float u_linearColor;\n float u_topsurface;\n float u_sidesurface;\n float u_heightfixed; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\n float u_raisingHeight;\n};\n\nin vec4 v_Color;\n#pragma include "scene_uniforms"\n#pragma include "picking"\nout vec4 outputColor;\nvoid main() {\n\n // top face\n if(u_topsurface < 1.0) {\n discard;\n }\n\n outputColor = v_Color;\n \n outputColor = filterColor(outputColor);\n}\n',vert:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec3 a_uvs;\n\nlayout(std140) uniform commonUniforms {\n vec4 u_sourceColor;\n vec4 u_targetColor;\n float u_linearColor;\n float u_topsurface;\n float u_sidesurface;\n float u_heightfixed; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\n float u_raisingHeight;\n};\n\nout vec4 v_Color;\n\n#pragma include "projection"\n#pragma include "light"\n#pragma include "picking"\n\nvoid main() {\n float isSide = a_Position.z;\n float topU = a_uvs[0];\n float topV = 1.0 - a_uvs[1];\n float sidey = a_uvs[2];\n\n vec4 pos = vec4(a_Position.xy, a_Position.z * a_Size, 1.0);\n\n vec4 project_pos = project_position(pos, a_Position64Low);\n float lightWeight = calc_lighting(project_pos);\n\n if (u_heightfixed > 0.0) {\n // \u5224\u65AD\u51E0\u4F55\u4F53\u662F\u5426\u56FA\u5B9A\u9AD8\u5EA6\n project_pos.z = a_Position.z * a_Size;\n project_pos.z += u_raisingHeight;\n\n if (\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\n ) {\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\n project_pos.z *= mapboxZoomScale;\n project_pos.z += u_raisingHeight * mapboxZoomScale;\n }\n }\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\n\n // Tip: \u90E8\u5206\u673A\u578B GPU \u8BA1\u7B97\u7CBE\u5EA6\u517C\u5BB9\n if (isSide < 0.999) {\n // side face\n // if(u_sidesurface < 1.0) {\n // discard;\n // }\n\n if (u_linearColor == 1.0) {\n vec4 linearColor = mix(u_targetColor, u_sourceColor, sidey);\n linearColor.rgb *= lightWeight;\n v_Color = linearColor;\n } else {\n v_Color = a_Color;\n }\n\n } else {\n v_Color = a_Color;\n }\n\n v_Color = vec4(v_Color.rgb * lightWeight, v_Color.w * opacity);\n\n setPickingColor(a_PickingColor);\n}\n',type:"polygonExtrude"};}clearModels(){var n;null===(n=this.texture)||void 0===n||n.destroy(),this.textures=[];}registerBuiltinAttributes(){let n=this.layer.getSource().extent,r=n[2]-n[0],i=n[3]-n[1];this.registerPosition64LowAttribute(),this.styleAttributeService.registerStyleAttribute({name:"uvs",type:A.AttributeType.Attribute,descriptor:{name:"a_uvs",shaderLocation:this.attributeLocation.UV,buffer:{usage:A.gl.STATIC_DRAW,data:[],type:A.gl.FLOAT},size:3,update:(a,o,s)=>{let l=s[0],u=s[1];return[(l-n[0])/r,(u-n[1])/i,s[4]];}}}),this.styleAttributeService.registerStyleAttribute({name:"normal",type:A.AttributeType.Attribute,descriptor:{name:"a_Normal",shaderLocation:this.attributeLocation.NORMAL,buffer:{usage:A.gl.STATIC_DRAW,data:[],type:A.gl.FLOAT},size:3,update:(n,r,i,a,o)=>o}}),this.styleAttributeService.registerStyleAttribute({name:"size",type:A.AttributeType.Attribute,descriptor:{name:"a_Size",shaderLocation:this.attributeLocation.SIZE,buffer:{usage:A.gl.DYNAMIC_DRAW,data:[],type:A.gl.FLOAT},size:1,update:n=>{let{size:r=10}=n;return Array.isArray(r)?[r[0]]:[r];}}});}loadTexture(){var n=this;return(0,s.default)(function*(){let{mapTexture:r}=n.layer.getLayerConfig(),{createTexture2D:i}=n.rendererService;if(n.texture=i({height:1,width:1}),r){let a=yield function(n){return P.apply(this,arguments);}(r);n.texture=i({data:a,width:a.width,height:a.height,wrapS:A.gl.CLAMP_TO_EDGE,wrapT:A.gl.CLAMP_TO_EDGE,min:A.gl.LINEAR,mag:A.gl.LINEAR});}})();}}class I extends M.default{constructor(...n){super(...n),(0,u.default)(this,"texture",void 0);}get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,SIZE:9,NORMAL:10,EXTRUSION_BASE:11});}getUninforms(){let n=this.getCommonUniformsInfo(),r=this.getUniformsBufferInfo(this.getStyleAttribute());return this.updateStyleUnifoms(),(0,T.default)((0,T.default)({},n.uniformsOption),r.uniformsOption);}getCommonUniformsInfo(){return this.getUniformsBufferInfo({});}initModels(){var n=this;return(0,s.default)(function*(){return n.buildModels();})();}buildModels(){var n=this;return(0,s.default)(function*(){let{frag:r,vert:i,type:a}=n.getShaders();return n.initUniformsBuffer(),[(yield n.layer.buildLayerModel({moduleName:a,vertexShader:i,fragmentShader:r,defines:n.getDefines(),inject:n.getInject(),triangulation:R.PolygonExtrudeTriangulation,depth:{enable:!0}}))];})();}getShaders(){return{frag:'\nin vec4 v_Color;\n#pragma include "scene_uniforms"\n#pragma include "picking"\nout vec4 outputColor;\nvoid main() {\n\n outputColor = v_Color;\n outputColor = filterColor(outputColor);\n}\n',vert:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\n\nout vec4 v_Color;\n\n#pragma include "projection"\n#pragma include "light"\n#pragma include "picking"\n\nvoid main() {\n vec4 pos = vec4(a_Position.xy, a_Position.z * a_Size + (1.0 - a_Position.z) * extrusionBase, 1.0);\n\n vec4 project_pos = project_position(pos, a_Position64Low);\n float lightWeight = calc_lighting(project_pos);\n v_Color = a_Color;\n v_Color = vec4(v_Color.rgb * lightWeight, v_Color.w * opacity);\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n',type:"polygonExtrude"};}clearModels(){var n;null===(n=this.texture)||void 0===n||n.destroy();}registerBuiltinAttributes(){this.registerPosition64LowAttribute(),this.styleAttributeService.registerStyleAttribute({name:"normal",type:A.AttributeType.Attribute,descriptor:{name:"a_Normal",shaderLocation:this.attributeLocation.NORMAL,buffer:{usage:A.gl.STATIC_DRAW,data:[],type:A.gl.FLOAT},size:3,update:(n,r,i,a,o)=>o}}),this.styleAttributeService.registerStyleAttribute({name:"size",type:A.AttributeType.Attribute,descriptor:{name:"a_Size",shaderLocation:this.attributeLocation.SIZE,buffer:{usage:A.gl.DYNAMIC_DRAW,data:[],type:A.gl.FLOAT},size:1,update:n=>{let{size:r=10}=n;return Array.isArray(r)?[r[0]]:[r];}}}),this.styleAttributeService.registerStyleAttribute({name:"extrusionBase",type:A.AttributeType.Attribute,descriptor:{name:"a_ExtrusionBase",shaderLocation:this.attributeLocation.EXTRUSION_BASE,buffer:{usage:A.gl.STATIC_DRAW,data:[],type:A.gl.FLOAT},size:1,update:n=>{let{extrusionBase:r=0}=n;return[r];}}});}}class L extends M.default{get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,LINEAR:9});}getUninforms(){let n=this.getCommonUniformsInfo(),r=this.getUniformsBufferInfo(this.getStyleAttribute());return this.updateStyleUnifoms(),(0,T.default)((0,T.default)({},n.uniformsOption),r.uniformsOption);}getCommonUniformsInfo(){let{raisingHeight:n=0,opacityLinear:r={enable:!1,dir:"in"}}=this.layer.getLayerConfig(),i={u_raisingHeight:Number(n),u_opacitylinear:Number(r.enable),u_dir:"in"===r.dir?1:0};return this.getUniformsBufferInfo(i);}initModels(){var n=this;return(0,s.default)(function*(){return n.buildModels();})();}buildModels(){var n=this;return(0,s.default)(function*(){let{frag:r,vert:i,triangulation:a,type:o}=n.getModelParams();return n.initUniformsBuffer(),n.layer.triangulation=a,[(yield n.layer.buildLayerModel({moduleName:o,vertexShader:i,fragmentShader:r,defines:n.getDefines(),inject:n.getInject(),triangulation:a,primitive:A.gl.TRIANGLES,depth:{enable:!1}}))];})();}registerBuiltinAttributes(){this.registerPosition64LowAttribute();let{opacityLinear:n={enable:!1,dir:"in"}}=this.layer.getLayerConfig();n.enable&&this.styleAttributeService.registerStyleAttribute({name:"linear",type:A.AttributeType.Attribute,descriptor:{name:"a_linear",shaderLocation:this.attributeLocation.LINEAR,buffer:{usage:A.gl.STATIC_DRAW,data:[],type:A.gl.FLOAT},size:3,update:(n,r,i)=>[i[3],i[4],i[5]]}});}getModelParams(){let{opacityLinear:n={enable:!1}}=this.layer.getLayerConfig();return n.enable?{frag:'\nlayout(std140) uniform commonUniforms {\n float u_raisingHeight;\n float u_opacitylinear;\n float u_dir;\n};\n\nin vec4 v_color;\nin vec3 v_linear;\nin vec2 v_pos;\nout vec4 outputColor;\n#pragma include "scene_uniforms"\n#pragma include "picking"\n\nvoid main() {\n outputColor = v_color;\n if (u_opacitylinear > 0.0) {\n outputColor.a *= u_dir == 1.0 ? 1.0 - length(v_pos - v_linear.xy)/v_linear.z : length(v_pos - v_linear.xy)/v_linear.z;\n }\n outputColor = filterColor(outputColor);\n}\n',vert:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_LINEAR) in vec3 a_linear;\n\nlayout(std140) uniform commonUniforms {\n float u_raisingHeight;\n float u_opacitylinear;\n float u_dir;\n};\n\nout vec4 v_color;\nout vec3 v_linear;\nout vec2 v_pos;\n\n#pragma include "projection"\n#pragma include "picking"\n\nvoid main() {\n if (u_opacitylinear > 0.0) {\n v_linear = a_linear;\n v_pos = a_Position.xy;\n }\n v_color = vec4(a_Color.xyz, a_Color.w * opacity);\n vec4 project_pos = project_position(vec4(a_Position, 1.0), a_Position64Low);\n project_pos.z += u_raisingHeight;\n\n if (u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n float mapboxZoomScale = 4.0/pow(2.0, 21.0 - u_Zoom);\n project_pos.z *= mapboxZoomScale;\n project_pos.z += u_raisingHeight * mapboxZoomScale;\n }\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\n setPickingColor(a_PickingColor);\n}\n',type:"polygonLinear",triangulation:R.polygonTriangulationWithCenter}:{frag:'in vec4 v_color;\n#pragma include "scene_uniforms"\n#pragma include "picking"\nout vec4 outputColor;\nvoid main() {\n outputColor = v_color;\n outputColor = filterColor(outputColor);\n}\n',vert:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\n\nlayout(std140) uniform commonUniforms {\n float u_raisingHeight;\n};\n\nout vec4 v_color;\n\n#pragma include "projection"\n#pragma include "picking"\n\nvoid main() {\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n\n v_color = vec4(a_Color.xyz, a_Color.w * opacity);\n vec4 project_pos = project_position(vec4(a_Position, 1.0), a_Position64Low);\n\n project_pos.z += u_raisingHeight;\n\n if (\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\n ) {\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\n project_pos.z *= mapboxZoomScale;\n project_pos.z += u_raisingHeight * mapboxZoomScale;\n }\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n\n',type:"polygonFill",triangulation:R.polygonTriangulation};}}class N extends M.default{constructor(...n){super(...n),(0,u.default)(this,"texture1",void 0),(0,u.default)(this,"texture2",void 0),(0,u.default)(this,"texture3",void 0);}get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,UV:9});}getUninforms(){let n=this.getCommonUniformsInfo(),r=this.getUniformsBufferInfo(this.getStyleAttribute());return this.updateStyleUnifoms(),(0,T.default)((0,T.default)({},n.uniformsOption),r.uniformsOption);}getCommonUniformsInfo(){let{watercolor:n="#6D99A8",watercolor2:r="#0F121C"}=this.layer.getLayerConfig(),i={u_watercolor:(0,C.rgb2arr)(n),u_watercolor2:(0,C.rgb2arr)(r),u_time:this.layer.getLayerAnimateTime(),u_texture1:this.texture1,u_texture2:this.texture2,u_texture3:this.texture3};return this.textures=[this.texture1,this.texture2,this.texture3],this.getUniformsBufferInfo(i);}getAnimateUniforms(){return{u_time:this.layer.getLayerAnimateTime()};}initModels(){var n=this;return(0,s.default)(function*(){return n.loadTexture(),n.buildModels();})();}buildModels(){var n=this;return(0,s.default)(function*(){return n.initUniformsBuffer(),[(yield n.layer.buildLayerModel({moduleName:"polygonOcean",vertexShader:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_uv;\n\nlayout(std140) uniform commonUniforms {\n vec4 u_watercolor;\n vec4 u_watercolor2;\n float u_time;\n};\n\nout vec2 v_uv;\nout float v_opacity;\n\n#pragma include "projection"\n\nvoid main() {\n v_uv = a_uv;\n v_opacity = opacity;\n vec4 project_pos = project_position(vec4(a_Position, 1.0));\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\n}\n\n',fragmentShader:"\nlayout(std140) uniform commonUniforms {\n vec4 u_watercolor;\n vec4 u_watercolor2;\n float u_time;\n};\n\nin vec2 v_uv;\nin float v_opacity;\nout vec4 outputColor;\n\nfloat coast2water_fadedepth = 0.10;\nfloat large_waveheight = .750; // change to adjust the \"heavy\" waves\nfloat large_wavesize = 3.4; // factor to adjust the large wave size\nfloat small_waveheight = 0.6; // change to adjust the small random waves\nfloat small_wavesize = 0.5; // factor to ajust the small wave size\nfloat water_softlight_fact = 15.; // range [1..200] (should be << smaller than glossy-fact)\nfloat water_glossylight_fact= 120.; // range [1..200]\nfloat particle_amount = 70.;\n\nvec3 water_specularcolor = vec3(1.3, 1.3, 0.9); // specular Color (RGB) of the water-highlights\n#define light vec3(-0., sin(u_time*0.5)*.5 + .35, 2.8) // position of the sun\n\nuniform sampler2D u_texture1;\nuniform sampler2D u_texture2;\nuniform sampler2D u_texture3;\n\n \n\nfloat hash( float n ) {\n return fract(sin(n)*43758.5453123);\n}\n\n// 2d noise function\nfloat noise1( in vec2 x ) {\n vec2 p = floor(x);\n vec2 f = smoothstep(0.0, 1.0, fract(x));\n float n = p.x + p.y*57.0;\n return mix(mix( hash(n+ 0.0), hash(n+ 1.0),f.x),\n mix( hash(n+ 57.0), hash(n+ 58.0),f.x),f.y);\n}\n\nfloat noise(vec2 p) {\n return texture(SAMPLER_2D(u_texture2),p*vec2(1./256.)).x;\n}\n\nvec4 highness(vec2 p) {\n vec4 t = texture(SAMPLER_2D(u_texture1),fract(p));\n float clipped = -2.0-smoothstep(3.,10.,t.a)*6.9-smoothstep(10.,100.,t.a)*89.9-smoothstep(0.,10000.,t.a)*10000.0;\n return clamp(t, 0.0,3.0)+clamp(t/3.0-1.0, 0.0,1.0)+clamp(t/16.0-1.0, 0.0,1.0);\n}\n\nfloat height_map( vec2 p ) {\n vec4 height=highness(p);\n /*\n height = -0.5+\n 0.5*smoothstep(-100.,0.,-height)+\n 2.75*smoothstep(0.,2.,height)+\n 1.75*smoothstep(2.,4.,height)+\n 2.75*smoothstep(4.,16.,height)+\n 1.5*smoothstep(16.,1000.,height);\n */\n\n mat2 m = mat2( 0.9563*1.4, -0.2924*1.4, 0.2924*1.4, 0.9563*1.4 );\n //p = p*6.;\n float f = 0.6000*noise1( p ); p = m*p*1.1*6.;\n f += 0.2500*noise( p ); p = m*p*1.32;\n f += 0.1666*noise( p ); p = m*p*1.11;\n f += 0.0834*noise( p ); p = m*p*1.12;\n f += 0.0634*noise( p ); p = m*p*1.13;\n f += 0.0444*noise( p ); p = m*p*1.14;\n f += 0.0274*noise( p ); p = m*p*1.15;\n f += 0.0134*noise( p ); p = m*p*1.16;\n f += 0.0104*noise( p ); p = m*p*1.17;\n f += 0.0084*noise( p );\n f = .25*f+dot(height,vec4(-.03125,-.125,.25,.25))*.5;\n const float FLAT_LEVEL = 0.92525;\n //f = f*0.25+height*0.75;\n if (f level)\n {\n col = CalcTerrain(uv, height);\n }\n if (height <= level)\n {\n vec2 dif = vec2(.0, .01);\n vec2 pos = uv*15. + vec2(u_time*.01);\n float h1 = water_map(pos-dif,waveheight);\n float h2 = water_map(pos+dif,waveheight);\n float h3 = water_map(pos-dif.yx,waveheight);\n float h4 = water_map(pos+dif.yx,waveheight);\n vec3 normwater = normalize(vec3(h3-h4, h1-h2, .125)); // norm-vector of the 'bumpy' water-plane\n uv += normwater.xy*.002*(level-height);\n \n col = CalcTerrain(uv, height);\n\n float coastfade = clamp((level-height)/coast2water_fadedepth, 0., 1.);\n float coastfade2= clamp((level-height)/deepwater_fadedepth, 0., 1.);\n float intensity = col.r*.2126+col.g*.7152+col.b*.0722;\n watercolor = mix(watercolor*intensity, watercolor2, smoothstep(0., 1., coastfade2));\n\n vec3 r0 = vec3(uv, WATER_LEVEL);\n vec3 rd = normalize( light - r0 ); // ray-direction to the light from water-position\n float grad = dot(normwater, rd); // dot-product of norm-vector and light-direction\n float specular = pow(grad, water_softlight_fact); // used for soft highlights \n float specular2= pow(grad, water_glossylight_fact); // used for glossy highlights\n float gradpos = dot(vec3(0., 0., 1.), rd);\n float specular1= smoothstep(0., 1., pow(gradpos, 5.)); // used for diffusity (some darker corona around light's specular reflections...) \n float watershade = test_shadow( uv, level );\n watercolor *= 2.2+watershade;\n watercolor += (.2+.8*watershade) * ((grad-1.0)*.5+specular) * .25;\n watercolor /= (1.+specular1*1.25);\n watercolor += watershade*specular2*water_specularcolor;\n watercolor += watershade*coastfade*(1.-coastfade2)*(vec3(.5, .6, .7)*nautic(uv)+vec3(1., 1., 1.)*particles(uv));\n \n col = mix(col, watercolor, coastfade);\n }\n \n outputColor = vec4(col, v_opacity); \n}\n",defines:n.getDefines(),inject:n.getInject(),triangulation:R.polygonTriangulation,primitive:A.gl.TRIANGLES,depth:{enable:!1}}))];})();}clearModels(){var n,r,i;null===(n=this.texture1)||void 0===n||n.destroy(),null===(r=this.texture2)||void 0===r||r.destroy(),null===(i=this.texture3)||void 0===i||i.destroy();}registerBuiltinAttributes(){let[n,r,i,a]=this.layer.getSource().extent,o=i-n,s=a-r;this.styleAttributeService.registerStyleAttribute({name:"oceanUv",type:A.AttributeType.Attribute,descriptor:{name:"a_uv",shaderLocation:this.attributeLocation.UV,buffer:{usage:A.gl.STATIC_DRAW,data:[],type:A.gl.FLOAT},size:2,update:(i,a,l)=>{let[u,c]=l;return[(u-n)/o,(c-r)/s];}}});}loadTexture(){let{createTexture2D:n}=this.rendererService,r={height:0,width:0};function i(r){return n({data:r,width:r.width,height:r.height,wrapS:A.gl.MIRRORED_REPEAT,wrapT:A.gl.MIRRORED_REPEAT,min:A.gl.LINEAR,mag:A.gl.LINEAR});}this.texture1=n(r),this.texture2=n(r),this.texture3=n(r),function(n){let r=0,i=[];["https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*EojwT4VzSiYAAAAAAAAAAAAAARQnAQ","https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*MJ22QbpuCzIAAAAAAAAAAAAAARQnAQ","https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*-z2HSIVDsHIAAAAAAAAAAAAAARQnAQ"].map(a=>{let o=new Image;o.crossOrigin="",o.src=a,i.push(o),o.onload=()=>{3==++r&&n(i);};});}(n=>{this.texture1=i(n[0]),this.texture2=i(n[1]),this.texture3=i(n[2]),this.layerService.reRender();});}}class D extends M.default{constructor(...n){super(...n),(0,u.default)(this,"texture",void 0);}get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,UV:9});}getUninforms(){let n=this.getCommonUniformsInfo(),r=this.getUniformsBufferInfo(this.getStyleAttribute());return this.updateStyleUnifoms(),(0,T.default)((0,T.default)({},n.uniformsOption),r.uniformsOption);}getCommonUniformsInfo(){let{speed:n=.5}=this.layer.getLayerConfig(),r={u_speed:n,u_time:this.layer.getLayerAnimateTime(),u_texture:this.texture};return this.textures=[this.texture],this.getUniformsBufferInfo(r);}getAnimateUniforms(){return{u_time:this.layer.getLayerAnimateTime()};}initModels(){var n=this;return(0,s.default)(function*(){return n.loadTexture(),n.buildModels();})();}buildModels(){var n=this;return(0,s.default)(function*(){return n.initUniformsBuffer(),[(yield n.layer.buildLayerModel({moduleName:"polygonWater",vertexShader:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_uv;\n\nlayout(std140) uniform commonUniforms {\n float u_speed;\n float u_time;\n};\nout vec4 v_Color;\nout vec2 v_uv;\n\n#pragma include "projection"\n\nvoid main() {\n v_uv = a_uv;\n v_Color = a_Color;\n v_Color.a *= opacity;\n vec4 project_pos = project_position(vec4(a_Position, 1.0));\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\n}\n\n',fragmentShader:"uniform sampler2D u_texture;\nlayout(std140) uniform commonUniforms {\n float u_speed;\n float u_time;\n};\n\nout vec4 outputColor;\n\n\nin vec4 v_Color;\nin vec2 v_uv;\n\nfloat rand(vec2 n) { return 0.5 + 0.5 * fract(sin(dot(n.xy, vec2(12.9898, 78.233)))* 43758.5453); }\n\nfloat water(vec3 p) {\n float t = u_time * u_speed;\n p.z += t * 2.; p.x += t * 2.;\n vec3 c1 = texture(SAMPLER_2D(u_texture), p.xz / 30.).xyz;\n p.z += t * 3.; p.x += t * 0.52;\n vec3 c2 = texture(SAMPLER_2D(u_texture), p.xz / 30.).xyz;\n p.z += t * 4.; p.x += t * 0.8;\n vec3 c3 = texture(SAMPLER_2D(u_texture), p.xz / 30.).xyz;\n c1 += c2 - c3;\n float z = (c1.x + c1.y + c1.z) / 3.;\n return p.y + z / 4.;\n}\n\nfloat map(vec3 p) {\n float d = 100.0;\n d = water(p);\n return d;\n}\n\nfloat intersect(vec3 ro, vec3 rd) {\n float d = 0.0;\n for (int i = 0; i <= 100; i++) {\n float h = map(ro + rd * d);\n if (h < 0.1) return d;\n d += h;\n }\n return 0.0;\n}\n\nvec3 norm(vec3 p) {\n float eps = .1;\n return normalize(vec3(\n map(p + vec3(eps, 0, 0)) - map(p + vec3(-eps, 0, 0)),\n map(p + vec3(0, eps, 0)) - map(p + vec3(0, -eps, 0)),\n map(p + vec3(0, 0, eps)) - map(p + vec3(0, 0, -eps))\n ));\n} \n\nfloat calSpc() {\n vec3 l1 = normalize(vec3(1, 1, 1));\n vec3 ro = vec3(-3, 20, -8);\n vec3 rc = vec3(0, 0, 0);\n vec3 ww = normalize(rc - ro);\n vec3 uu = normalize(cross(vec3(0,1,0), ww));\n vec3 vv = normalize(cross(rc - ro, uu));\n vec3 rd = normalize(uu * v_uv.x + vv * v_uv.y + ww);\n float d = intersect(ro, rd);\n vec3 p = ro + rd * d;\n vec3 n = norm(p);\n float spc = pow(max(0.0, dot(reflect(l1, n), rd)), 30.0);\n return spc;\n}\n\nvoid main() {\n\n outputColor = v_Color;\n float spc = calSpc();\n outputColor += spc * 0.4;\n}\n",triangulation:R.polygonTriangulation,defines:n.getDefines(),inject:n.getInject(),primitive:A.gl.TRIANGLES,depth:{enable:!1},pickingEnabled:!1,diagnosticDerivativeUniformityEnabled:!1}))];})();}clearModels(){var n;null===(n=this.texture)||void 0===n||n.destroy();}registerBuiltinAttributes(){let[n,r,i,a]=this.layer.getSource().extent,o=i-n,s=a-r;this.styleAttributeService.registerStyleAttribute({name:"waterUv",type:A.AttributeType.Attribute,descriptor:{name:"a_uv",shaderLocation:this.attributeLocation.UV,buffer:{usage:A.gl.STATIC_DRAW,data:[],type:A.gl.FLOAT},size:2,update:(i,a,l)=>{let[u,c]=l;return[(u-n)/o,(c-r)/s];}}});}loadTexture(){let{waterTexture:n}=this.layer.getLayerConfig(),{createTexture2D:r}=this.rendererService;this.texture=r({height:1,width:1});let i=new Image;i.crossOrigin="",n?(console.warn("L7 recommend\uFF1Ahttps://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*EojwT4VzSiYAAAAAAAAAAAAAARQnAQ"),i.src=n):i.src="https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*EojwT4VzSiYAAAAAAAAAAAAAARQnAQ",i.onload=()=>{this.texture=r({data:i,width:i.width,height:i.height,wrapS:A.gl.MIRRORED_REPEAT,wrapT:A.gl.MIRRORED_REPEAT,min:A.gl.LINEAR,mag:A.gl.LINEAR}),this.layerService.reRender();};}}let F={fill:L,line:h.default,extrude:k,text:w.default,point_fill:v.default,point_image:_.default,point_normal:x.default,point_extrude:m.default,water:D,ocean:N,extrusion:I};class B extends f.default{constructor(...n){super(...n),(0,u.default)(this,"type","PolygonLayer"),(0,u.default)(this,"enableShaderEncodeStyles",["opacity","extrusionBase","rotation","offsets","stroke"]);}buildModels(){var n=this;return(0,s.default)(function*(){let r=n.getModelType();n.layerModel=new F[r](n),yield n.initLayerModels();})();}getModelType(){var n;let r=this.styleAttributeService.getLayerStyleAttribute("shape"),i=null==r||null===(n=r.scale)||void 0===n?void 0:n.field;return"fill"!==i&&i?"extrude"===i?"extrude":"extrusion"===i?"extrusion":"water"===i?"water":"ocean"===i?"ocean":"line"===i?"line":this.getPointModelType():"fill";}getPointModelType(){let n=this.getEncodedData(),{shape2d:r,shape3d:i}=this.getLayerConfig(),a=this.iconService.getIconMap(),o=n.find(n=>n.hasOwnProperty("shape"));if(!o)return"fill";{let n=o.shape;return"dot"===n?"point_normal":(null==r?void 0:r.indexOf(n))!==-1?"point_fill":(null==i?void 0:i.indexOf(n))!==-1?"point_extrude":a.hasOwnProperty(n)?"point_image":"text";}}}},"05378a0d":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return s;}});var a=i("777fffbe")._(i("42520f5c"));function o(n){this._context=n;}function s(n){return new o(n);}o.prototype={areaStart:a.default,areaEnd:a.default,lineStart:function(){this._point=0;},lineEnd:function(){this._point&&this._context.closePath();},point:function(n,r){n=+n,r=+r,this._point?this._context.lineTo(n,r):(this._point=1,this._context.moveTo(n,r));}};},"05da3880":function(n,r,i){"use strict";n.exports=o;var a=i("a7af6284");function o(n){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(n)?n:new Uint8Array(n||0),this.pos=0,this.type=0,this.length=this.buf.length;}o.Varint=0,o.Fixed64=1,o.Bytes=2,o.Fixed32=5;var s="undefined"==typeof TextDecoder?null:new TextDecoder("utf-8");function l(n){return n.type===o.Bytes?n.readVarint()+n.pos:n.pos+1;}function u(n,r,i){var a=r<=16383?1:r<=2097151?2:r<=268435455?3:Math.floor(Math.log(r)/(7*Math.LN2));i.realloc(a);for(var o=i.pos-1;o>=n;o--)i.buf[o+a]=i.buf[o];}function c(n,r){for(var i=0;i>>8,n[i+2]=r>>>16,n[i+3]=r>>>24;}function x(n,r){return(n[r]|n[r+1]<<8|n[r+2]<<16)+(n[r+3]<<24);}o.prototype={destroy:function(){this.buf=null;},readFields:function(n,r,i){for(i=i||this.length;this.pos>3,s=this.pos;this.type=7&a,n(o,r,this),this.pos===s&&this.skip(a);}return r;},readMessage:function(n,r){return this.readFields(n,r,this.readVarint()+this.pos);},readFixed32:function(){var n=_(this.buf,this.pos);return this.pos+=4,n;},readSFixed32:function(){var n=x(this.buf,this.pos);return this.pos+=4,n;},readFixed64:function(){var n=_(this.buf,this.pos)+4294967296*_(this.buf,this.pos+4);return this.pos+=8,n;},readSFixed64:function(){var n=_(this.buf,this.pos)+4294967296*x(this.buf,this.pos+4);return this.pos+=8,n;},readFloat:function(){var n=a.read(this.buf,this.pos,!0,23,4);return this.pos+=4,n;},readDouble:function(){var n=a.read(this.buf,this.pos,!0,52,8);return this.pos+=8,n;},readVarint:function(n){var r,i,a=this.buf;return(r=127&(i=a[this.pos++]),i<128)?r:(r|=(127&(i=a[this.pos++]))<<7,i<128)?r:(r|=(127&(i=a[this.pos++]))<<14,i<128)?r:(r|=(127&(i=a[this.pos++]))<<21,i<128)?r:function(n,r,i){var a,o,s,l,u=i.buf;if(s=(112&(l=u[i.pos++]))>>4,l<128||(s|=(127&(l=u[i.pos++]))<<3,l<128)||(s|=(127&(l=u[i.pos++]))<<10,l<128)||(s|=(127&(l=u[i.pos++]))<<17,l<128)||(s|=(127&(l=u[i.pos++]))<<24,l<128)||(s|=(1&(l=u[i.pos++]))<<31,l<128)){return a=n,o=s,r?4294967296*o+(a>>>0):(o>>>0)*4294967296+(a>>>0);}throw Error("Expected varint not more than 10 bytes");}(r|=(15&(i=a[this.pos]))<<28,n,this);},readVarint64:function(){return this.readVarint(!0);},readSVarint:function(){var n=this.readVarint();return n%2==1?-((n+1)/2):n/2;},readBoolean:function(){return!!this.readVarint();},readString:function(){var n,r=this.readVarint()+this.pos,i=this.pos;return(this.pos=r,r-i>=12&&s)?(n=this.buf,s.decode(n.subarray(i,r))):function(n,r,i){for(var a="",o=r;o239?4:c>223?3:c>191?2:1;if(o+d>i)break;1===d?c<128&&(f=c):2===d?(192&(s=n[o+1]))==128&&(f=(31&c)<<6|63&s)<=127&&(f=null):3===d?(s=n[o+1],l=n[o+2],(192&s)==128&&(192&l)==128&&((f=(15&c)<<12|(63&s)<<6|63&l)<=2047||f>=55296&&f<=57343)&&(f=null)):4===d&&(s=n[o+1],l=n[o+2],u=n[o+3],(192&s)==128&&(192&l)==128&&(192&u)==128&&((f=(15&c)<<18|(63&s)<<12|(63&l)<<6|63&u)<=65535||f>=1114112)&&(f=null)),null===f?(f=65533,d=1):f>65535&&(f-=65536,a+=String.fromCharCode(f>>>10&1023|55296),f=56320|1023&f),a+=String.fromCharCode(f),o+=d;}return a;}(this.buf,i,r);},readBytes:function(){var n=this.readVarint()+this.pos,r=this.buf.subarray(this.pos,n);return this.pos=n,r;},readPackedVarint:function(n,r){if(this.type!==o.Bytes)return n.push(this.readVarint(r));var i=l(this);for(n=n||[];this.pos127;);else if(r===o.Bytes)this.pos=this.readVarint()+this.pos;else if(r===o.Fixed32)this.pos+=4;else if(r===o.Fixed64)this.pos+=8;else throw Error("Unimplemented type: "+r);},writeTag:function(n,r){this.writeVarint(n<<3|r);},realloc:function(n){for(var r=this.length||16;r268435455||n<0){!function(n,r){var i,a,o,s,l,u;if(n>=0?(i=n%4294967296|0,a=n/4294967296|0):(i=~(-n%4294967296),a=~(-n/4294967296),4294967295^i?i=i+1|0:(i=0,a=a+1|0)),n>=18446744073709552e3||n<-18446744073709552e3)throw Error("Given varint doesn't fit into 10 bytes");r.realloc(10),o=i,r.buf[r.pos++]=127&o|128,o>>>=7,r.buf[r.pos++]=127&o|128,o>>>=7,r.buf[r.pos++]=127&o|128,o>>>=7,r.buf[r.pos++]=127&o|128,o>>>=7,r.buf[r.pos]=127&o,s=a,l=r,u=(7&s)<<4,l.buf[l.pos++]|=u|((s>>>=3)?128:0),!s||(l.buf[l.pos++]=127&s|((s>>>=7)?128:0),!s)||(l.buf[l.pos++]=127&s|((s>>>=7)?128:0),!s)||(l.buf[l.pos++]=127&s|((s>>>=7)?128:0),s&&(l.buf[l.pos++]=127&s|((s>>>=7)?128:0),s&&(l.buf[l.pos++]=127&s)));}(n,this);return;}this.realloc(4),this.buf[this.pos++]=127&n|(n>127?128:0),!(n<=127)&&(this.buf[this.pos++]=127&(n>>>=7)|(n>127?128:0),!(n<=127)&&(this.buf[this.pos++]=127&(n>>>=7)|(n>127?128:0),n<=127||(this.buf[this.pos++]=n>>>7&127)));},writeSVarint:function(n){this.writeVarint(n<0?-(2*n)-1:2*n);},writeBoolean:function(n){this.writeVarint(!!n);},writeString:function(n){n=String(n),this.realloc(4*n.length),this.pos++;var r=this.pos;this.pos=function(n,r,i){for(var a,o,s=0;s55295&&a<57344){if(o){if(a<56320){n[i++]=239,n[i++]=191,n[i++]=189,o=a;continue;}a=o-55296<<10|a-56320|65536,o=null;}else{a>56319||s+1===r.length?(n[i++]=239,n[i++]=191,n[i++]=189):o=a;continue;}}else o&&(n[i++]=239,n[i++]=191,n[i++]=189,o=null);a<128?n[i++]=a:(a<2048?n[i++]=a>>6|192:(a<65536?n[i++]=a>>12|224:(n[i++]=a>>18|240,n[i++]=a>>12&63|128),n[i++]=a>>6&63|128),n[i++]=63&a|128);}return i;}(this.buf,n,this.pos);var i=this.pos-r;i>=128&&u(r,i,this),this.pos=r-1,this.writeVarint(i),this.pos+=i;},writeFloat:function(n){this.realloc(4),a.write(this.buf,n,this.pos,!0,23,4),this.pos+=4;},writeDouble:function(n){this.realloc(8),a.write(this.buf,n,this.pos,!0,52,8),this.pos+=8;},writeBytes:function(n){var r=n.length;this.writeVarint(r),this.realloc(r);for(var i=0;i=128&&u(i,a,this),this.pos=i-1,this.writeVarint(a),this.pos+=a;},writeMessage:function(n,r,i){this.writeTag(n,o.Bytes),this.writeRawMessage(r,i);},writePackedVarint:function(n,r){r.length&&this.writeMessage(n,c,r);},writePackedSVarint:function(n,r){r.length&&this.writeMessage(n,f,r);},writePackedBoolean:function(n,r){r.length&&this.writeMessage(n,p,r);},writePackedFloat:function(n,r){r.length&&this.writeMessage(n,d,r);},writePackedDouble:function(n,r){r.length&&this.writeMessage(n,h,r);},writePackedFixed32:function(n,r){r.length&&this.writeMessage(n,m,r);},writePackedSFixed32:function(n,r){r.length&&this.writeMessage(n,g,r);},writePackedFixed64:function(n,r){r.length&&this.writeMessage(n,v,r);},writePackedSFixed64:function(n,r){r.length&&this.writeMessage(n,y,r);},writeBytesField:function(n,r){this.writeTag(n,o.Bytes),this.writeBytes(r);},writeFixed32Field:function(n,r){this.writeTag(n,o.Fixed32),this.writeFixed32(r);},writeSFixed32Field:function(n,r){this.writeTag(n,o.Fixed32),this.writeSFixed32(r);},writeFixed64Field:function(n,r){this.writeTag(n,o.Fixed64),this.writeFixed64(r);},writeSFixed64Field:function(n,r){this.writeTag(n,o.Fixed64),this.writeSFixed64(r);},writeVarintField:function(n,r){this.writeTag(n,o.Varint),this.writeVarint(r);},writeSVarintField:function(n,r){this.writeTag(n,o.Varint),this.writeSVarint(r);},writeStringField:function(n,r){this.writeTag(n,o.Bytes),this.writeString(r);},writeFloatField:function(n,r){this.writeTag(n,o.Fixed32),this.writeFloat(r);},writeDoubleField:function(n,r){this.writeTag(n,o.Fixed64),this.writeDouble(r);},writeBooleanField:function(n,r){this.writeVarintField(n,!!r);}};},"06753dad":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return l;}});var a=i("777fffbe"),o=a._(i("bf98e12a")),s=a._(i("2cc7f81c")),l=(0,o.default)(s.default,"Map");},"06c64a8e":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return o;}});var a={}.toString,o=function(n,r){return a.call(n)==="[object "+r+"]";};},"06ecdd39":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return p;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("7cfeda15"),l=a._(s),u=i("609f48be"),c=o._(u),f={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z"}},{tag:"path",attrs:{d:"M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8z"}}]},name:"plus",theme:"outlined"},d=i("887aaf6c"),h=a._(d),p=c.forwardRef(function(n,r){return c.createElement(h.default,(0,l.default)({},n,{ref:r,icon:f}));});},"0705d96b":function(n,r,i){n.exports=function(n,r,i){for(var a=-1,o=null==n?0:n.length;++as.solve(n);}let p=h(.25,.1,.25,1),m={};function g(n){m[n]||("undefined"!=typeof console&&console.warn(n),m[n]=!0);}function v(n){return n*Math.PI/180;}},"07aa9410":function(n,r,i){"use strict";function a(n,r){return n[r];}i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});},"07ba0bdb":function(n,r,i){var a=i("bbc15be8"),o=i("7bcda897"),s=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,l=/^\w*$/;n.exports=function(n,r){if(a(n))return!1;var i=typeof n;return!!("number"==i||"symbol"==i||"boolean"==i||null==n||o(n))||l.test(n)||!s.test(n)||null!=r&&n in Object(r);};},"07cf43fc":function(n,r,i){"use strict";var a,o,s,l,u;i.d(r,"__esModule",{value:!0}),i.e(r,{CanvasUpdateType:function(){return p;},LinearDir:function(){return f;},SizeUnitType:function(){return h;},TextureBlend:function(){return d;},lineStyleType:function(){return c;}});let c=((a={})[a.solid=0]="solid",a[a.dash=1]="dash",a),f=((o={}).VERTICAL="vertical",o.HORIZONTAL="horizontal",o),d=((s={}).NORMAL="normal",s.REPLACE="replace",s),h=((l={})[l.pixel=0]="pixel",l[l.meter=1]="meter",l),p=((u={}).ALWAYS="always",u.DRAGEND="dragend",u);},"08dda30e":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return p;}});var a=i("777fffbe"),o=i("852bbaa9"),s=a._(i("ee64167d")),l=a._(i("8bbe4f57")),u=a._(i("85158032")),c=i("78ba7479"),f=i("5dd400a3"),d=o._(i("da755037")),h=(0,c.createMat4)(),p=function(){function n(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=r.width,a=r.height,o=r.viewMatrix,s=void 0===o?h:o,u=r.projectionMatrix,f=void 0===u?h:u;(0,l.default)(this,n),this.width=i||1,this.height=a||1,this.scale=1,this.pixelsPerMeter=1,this.viewMatrix=s,this.projectionMatrix=f;var p=(0,c.createMat4)();d.multiply(p,p,this.projectionMatrix),d.multiply(p,p,this.viewMatrix),this.viewProjectionMatrix=p;var m=(0,c.createMat4)();d.scale(m,m,[this.width/2,-this.height/2,1]),d.translate(m,m,[1,-1,0]),d.multiply(m,m,this.viewProjectionMatrix);var g=d.invert((0,c.createMat4)(),m);if(!g)throw Error("Pixel project matrix not invertible");this.pixelProjectionMatrix=m,this.pixelUnprojectionMatrix=g,this.equals=this.equals.bind(this),this.project=this.project.bind(this),this.unproject=this.unproject.bind(this),this.projectPosition=this.projectPosition.bind(this),this.unprojectPosition=this.unprojectPosition.bind(this),this.projectFlat=this.projectFlat.bind(this),this.unprojectFlat=this.unprojectFlat.bind(this);}return(0,u.default)(n,[{key:"equals",value:function(r){return r instanceof n&&r.width===this.width&&r.height===this.height&&d.equals(r.projectionMatrix,this.projectionMatrix)&&d.equals(r.viewMatrix,this.viewMatrix);}},{key:"project",value:function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=r.topLeft,a=this.projectPosition(n),o=(0,f.worldToPixels)(a,this.pixelProjectionMatrix),l=(0,s.default)(o,2),u=l[0],c=l[1],d=void 0===i||i?c:this.height-c;return 2===n.length?[u,d]:[u,d,o[2]];}},{key:"unproject",value:function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=r.topLeft,a=r.targetZ,o=(0,s.default)(n,3),l=o[0],u=o[1],c=o[2],d=void 0===i||i?u:this.height-u,h=a&&a*this.pixelsPerMeter,p=(0,f.pixelsToWorld)([l,d,c],this.pixelUnprojectionMatrix,h),m=this.unprojectPosition(p),g=(0,s.default)(m,3),v=g[0],y=g[1],_=g[2];return Number.isFinite(c)?[v,y,_]:Number.isFinite(a)?[v,y,a]:[v,y];}},{key:"projectPosition",value:function(n){var r=this.projectFlat(n),i=(0,s.default)(r,2);return[i[0],i[1],(n[2]||0)*this.pixelsPerMeter];}},{key:"unprojectPosition",value:function(n){var r=this.unprojectFlat(n),i=(0,s.default)(r,2);return[i[0],i[1],(n[2]||0)/this.pixelsPerMeter];}},{key:"projectFlat",value:function(n){return arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.scale,n;}},{key:"unprojectFlat",value:function(n){return arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.scale,n;}}]),n;}();},"08eace5d":function(n,r,i){window._iconfont_svg_string_3580659='',function(n){try{var r=(r=document.getElementsByTagName("script"))[r.length-1],i=r.getAttribute("data-injectcss"),r=r.getAttribute("data-disable-injectsvg");if(!r){var a,o,s,l,u,c=function(n,r){r.parentNode.insertBefore(n,r);};if(i&&!n.__iconfont__svg__cssinject__){n.__iconfont__svg__cssinject__=!0;try{document.write("");}catch(n){console&&console.log(n);}}a=function(){var r,i=document.createElement("div");i.innerHTML=n._iconfont_svg_string_3580659,(i=i.getElementsByTagName("svg")[0])&&(i.setAttribute("aria-hidden","true"),i.style.position="absolute",i.style.width=0,i.style.height=0,i.style.overflow="hidden",(r=document.body).firstChild?c(i,r.firstChild):r.appendChild(i));},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(a,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),a();},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(s=a,l=n.document,u=!1,function n(){try{l.documentElement.doScroll("left");}catch(r){return void setTimeout(n,50);}f();}(),l.onreadystatechange=function(){"complete"==l.readyState&&(l.onreadystatechange=null,f());});}function f(){u||(u=!0,s());}}catch(n){}}(window);},"08f49370":function(n,r,i){var a=i("2d19bd14"),o=i("a2950f5c"),s=i("bbc15be8"),l=i("bb289a91"),u=i("45451182"),c=i("743ea378");n.exports=function(n,r,i){r=a(r,n);for(var f=-1,d=r.length,h=!1;++f\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=r.console&&(r.console.warn||r.console.log);return s&&s.call(r.console,o,a),n.apply(this,arguments);};}s="function"!=typeof Object.assign?function(n){if(null==n)throw TypeError("Cannot convert undefined or null to object");for(var r=Object(n),i=1;i-1;}function A(n){return n.trim().split(/\s+/g);}function C(n,r,i){if(n.indexOf&&!i)return n.indexOf(r);for(var a=0;aC(o,l)&&a.push(n[s]),o[s]=l,s++;}return i&&(a=r?a.sort(function(n,i){return n[r]>i[r];}):a.sort()),a;}function R(n,r){for(var i,a,s=r[0].toUpperCase()+r.slice(1),u=0;u1&&!a.firstMultiple?a.firstMultiple=V(i):1===l&&(a.firstMultiple=!1),u=a.firstInput,h=(c=a.firstMultiple)?c.center:u.center,p=i.center=G(s),i.timeStamp=d(),i.deltaTime=i.timeStamp-u.timeStamp,i.angle=q(h,p),i.distance=X(h,p),m=i.center,g=a.offsetDelta||{},v=a.prevDelta||{},y=a.prevInput||{},(1===i.eventType||4===y.eventType)&&(v=a.prevDelta={x:y.deltaX||0,y:y.deltaY||0},g=a.offsetDelta={x:m.x,y:m.y}),i.deltaX=v.x+(m.x-g.x),i.deltaY=v.y+(m.y-g.y),i.offsetDirection=W(i.deltaX,i.deltaY),_=H(i.deltaTime,i.deltaX,i.deltaY),i.overallVelocityX=_.x,i.overallVelocityY=_.y,i.overallVelocity=f(_.x)>f(_.y)?_.x:_.y,i.scale=c?(b=c.pointers,X(s[0],s[1],j)/X(b[0],b[1],j)):1,i.rotation=c?(x=c.pointers,q(s[1],s[0],j)+q(x[1],x[0],j)):0,i.maxPointers=a.prevInput?i.pointers.length>a.prevInput.maxPointers?i.pointers.length:a.prevInput.maxPointers:i.pointers.length,function(n,r){var i,a,s,l,u=n.lastInterval||r,c=r.timeStamp-u.timeStamp;if(8!=r.eventType&&(c>25||u.velocity===o)){var d=r.deltaX-u.deltaX,h=r.deltaY-u.deltaY,p=H(c,d,h);a=p.x,s=p.y,i=f(p.x)>f(p.y)?p.x:p.y,l=W(d,h),n.lastInterval=r;}else i=u.velocity,a=u.velocityX,s=u.velocityY,l=u.direction;r.velocity=i,r.velocityX=a,r.velocityY=s,r.direction=l;}(a,i),E=n.element,S(i.srcEvent.target,E)&&(E=i.srcEvent.target),i.target=E,n.emit("hammer.input",i),n.recognize(i),n.session.prevInput=i;}function V(n){for(var r=[],i=0;i=f(r)?n<0?2:4:r<0?8:16;}function X(n,r,i){i||(i=B);var a=r[i[0]]-n[i[0]],o=r[i[1]]-n[i[1]];return Math.sqrt(a*a+o*o);}function q(n,r,i){i||(i=B);var a=r[i[0]]-n[i[0]];return 180*Math.atan2(r[i[1]]-n[i[1]],a)/Math.PI;}z.prototype={handler:function(){},init:function(){this.evEl&&E(this.element,this.evEl,this.domHandler),this.evTarget&&E(this.target,this.evTarget,this.domHandler),this.evWin&&E(k(this.element),this.evWin,this.domHandler);},destroy:function(){this.evEl&&w(this.element,this.evEl,this.domHandler),this.evTarget&&w(this.target,this.evTarget,this.domHandler),this.evWin&&w(k(this.element),this.evWin,this.domHandler);}};var $={mousedown:1,mousemove:2,mouseup:4};function Y(){this.evEl="mousedown",this.evWin="mousemove mouseup",this.pressed=!1,z.apply(this,arguments);}_(Y,z,{handler:function(n){var r=$[n.type];1&r&&0===n.button&&(this.pressed=!0),2&r&&1!==n.which&&(r=4),this.pressed&&(4&r&&(this.pressed=!1),this.callback(this.manager,r,{pointers:[n],changedPointers:[n],pointerType:F,srcEvent:n}));}});var Z={pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},K={2:D,3:"pen",4:F,5:"kinect"},Q="pointerdown",J="pointermove pointerup pointercancel";function ee(){this.evEl=Q,this.evWin=J,z.apply(this,arguments),this.store=this.manager.session.pointerEvents=[];}r.MSPointerEvent&&!r.PointerEvent&&(Q="MSPointerDown",J="MSPointerMove MSPointerUp MSPointerCancel"),_(ee,z,{handler:function(n){var r=this.store,i=!1,a=Z[n.type.toLowerCase().replace("ms","")],o=K[n.pointerType]||n.pointerType,s=o==D,l=C(r,n.pointerId,"pointerId");1&a&&(0===n.button||s)?l<0&&(r.push(n),l=r.length-1):12&a&&(i=!0),!(l<0)&&(r[l]=n,this.callback(this.manager,a,{pointers:r,changedPointers:[n],pointerType:o,srcEvent:n}),i&&r.splice(l,1));}});var et={touchstart:1,touchmove:2,touchend:4,touchcancel:8};function en(){this.evTarget="touchstart",this.evWin="touchstart touchmove touchend touchcancel",this.started=!1,z.apply(this,arguments);}function er(n,r){var i=O(n.touches),a=O(n.changedTouches);return 12&r&&(i=M(i.concat(a),"identifier",!0)),[i,a];}_(en,z,{handler:function(n){var r=et[n.type];if(1===r&&(this.started=!0),this.started){var i=er.call(this,n,r);12&r&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,r,{pointers:i[0],changedPointers:i[1],pointerType:D,srcEvent:n});}}});var ei={touchstart:1,touchmove:2,touchend:4,touchcancel:8};function ea(){this.evTarget="touchstart touchmove touchend touchcancel",this.targetIds={},z.apply(this,arguments);}function eo(n,r){var i=O(n.touches),a=this.targetIds;if(3&r&&1===i.length)return a[i[0].identifier]=!0,[i,i];var o,s,l=O(n.changedTouches),u=[],c=this.target;if(s=i.filter(function(n){return S(n.target,c);}),1===r)for(o=0;o-1&&a.splice(n,1);},2500);}}function ec(n){for(var r=n.srcEvent.clientX,i=n.srcEvent.clientY,a=0;a-1&&this.requireFail.splice(r,1),this;},hasRequireFailures:function(){return this.requireFail.length>0;},canRecognizeWith:function(n){return!!this.simultaneous[n.id];},emit:function(n){var r=this,i=this.state;function a(i){r.manager.emit(i,n);}i<8&&a(r.options.event+eE(i)),a(r.options.event),n.additionalEvent&&a(n.additionalEvent),i>=8&&a(r.options.event+eE(i));},tryEmit:function(n){if(this.canEmit())return this.emit(n);this.state=32;},canEmit:function(){for(var n=0;nr.threshold&&o&r.direction;},attrTest:function(n){return eT.prototype.attrTest.call(this,n)&&(2&this.state||!(2&this.state)&&this.directionTest(n));},emit:function(n){this.pX=n.deltaX,this.pY=n.deltaY;var r=ew(n.direction);r&&(n.additionalEvent=this.options.event+r),this._super.emit.call(this,n);}}),_(eC,eT,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[eg];},attrTest:function(n){return this._super.attrTest.call(this,n)&&(Math.abs(n.scale-1)>this.options.threshold||2&this.state);},emit:function(n){if(1!==n.scale){var r=n.scale<1?"in":"out";n.additionalEvent=this.options.event+r;}this._super.emit.call(this,n);}}),_(eO,ex,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[ep];},process:function(n){var r=this.options,i=n.pointers.length===r.pointers,a=n.distancer.time;if(this._input=n,a&&i&&(!(12&n.eventType)||o)){if(1&n.eventType)this.reset(),this._timer=h(function(){this.state=8,this.tryEmit();},r.time,this);else if(4&n.eventType)return 8;}else this.reset();return 32;},reset:function(){clearTimeout(this._timer);},emit:function(n){8===this.state&&(n&&4&n.eventType?this.manager.emit(this.options.event+"up",n):(this._input.timeStamp=d(),this.manager.emit(this.options.event,this._input)));}}),_(eM,eT,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[eg];},attrTest:function(n){return this._super.attrTest.call(this,n)&&(Math.abs(n.rotation)>this.options.threshold||2&this.state);}}),_(eR,eT,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:30,pointers:1},getTouchAction:function(){return eA.prototype.getTouchAction.call(this);},attrTest:function(n){var r,i=this.options.direction;return 30&i?r=n.overallVelocity:6&i?r=n.overallVelocityX:24&i&&(r=n.overallVelocityY),this._super.attrTest.call(this,n)&&i&n.offsetDirection&&n.distance>this.options.threshold&&n.maxPointers==this.options.pointers&&f(r)>this.options.velocity&&4&n.eventType;},emit:function(n){var r=ew(n.offsetDirection);r&&this.manager.emit(this.options.event+r,n),this.manager.emit(this.options.event,n);}}),_(eP,ex,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[em];},process:function(n){var r=this.options,i=n.pointers.length===r.pointers,a=n.distancer?1:n>=r?0:NaN;},o=function(n){var r;return 1===n.length&&(r=n,n=function(n,i){return a(r(n),i);}),{left:function(r,i,a,o){for(null==a&&(a=0),null==o&&(o=r.length);a>>1;0>n(r[s],i)?a=s+1:o=s;}return a;},right:function(r,i,a,o){for(null==a&&(a=0),null==o&&(o=r.length);a>>1;n(r[s],i)>0?o=s:a=s+1;}return a;}};},s=o(a),l=s.right;s.left;var u=Array.prototype;u.slice,u.map;var c=Math.sqrt(50),f=Math.sqrt(10),d=Math.sqrt(2),h=function(n,r,i){var a,o,s,l,u=-1;if(i=+i,(n=+n)==(r=+r)&&i>0)return[n];if((a=r0)for(n=Math.ceil(n/l),s=Array(o=Math.ceil((r=Math.floor(r/l))-n+1));++u=0?(s>=c?10:s>=f?5:s>=d?2:1)*Math.pow(10,o):-Math.pow(10,-o)/(s>=c?10:s>=f?5:s>=d?2:1);}function m(n,r,i){var a=Math.abs(r-n)/Math.max(0,i),o=Math.pow(10,Math.floor(Math.log(a)/Math.LN10)),s=a/o;return s>=c?o*=10:s>=f?o*=5:s>=d&&(o*=2),r=1)return+i(n[a-1],a-1,n);var a,o=(a-1)*r,s=Math.floor(o),l=+i(n[s],s,n);return l+(+i(n[s+1],s+1,n)-l)*(o-s);}};},"0ac9c851":function(n,r,i){"use strict";n.exports=function(n){var r={};function i(i){var a=n.get(i);return void 0===a?[]:r[a]||[];}return{get:i,add:function(i,a){var o=n.get(i);r[o]||(r[o]=[]),r[o].push(a);},removeListener:function(n,r){for(var a=i(n),o=0,s=a.length;o1&&void 0!==arguments[1]?arguments[1]:{},i=g(n,r);i&&h(r).removeChild(i);},r.updateCSS=function(n,r){var i,a,s,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},c=h(u),v=p(c),y=(0,o.default)((0,o.default)({},u),{},{styles:v});!function(n,r){var i=f.get(n);if(!i||!(0,l.default)(document,i)){var a=m("",r),o=a.parentNode;f.set(n,o),n.removeChild(a);}}(c,y);var _=g(r,y);if(_)return null!==(i=y.csp)&&void 0!==i&&i.nonce&&_.nonce!==(null===(a=y.csp)||void 0===a?void 0:a.nonce)&&(_.nonce=null===(s=y.csp)||void 0===s?void 0:s.nonce),_.innerHTML!==n&&(_.innerHTML=n),_;var b=m(n,y);return b.setAttribute(d(y),r),b;};var o=a(i("3bbc6f6c")),s=a(i("0047230b")),l=a(i("1536f4d4")),u="data-rc-order",c="data-rc-priority",f=new Map;function d(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.mark;return r?r.startsWith("data-")?r:"data-".concat(r):"rc-util-key";}function h(n){return n.attachTo?n.attachTo:document.querySelector("head")||document.body;}function p(n){return Array.from((f.get(n)||n).children).filter(function(n){return"STYLE"===n.tagName;});}function m(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,s.default)())return null;var i=r.csp,a=r.prepend,o=r.priority,l=void 0===o?0:o,f="queue"===a?"prependQueue":a?"prepend":"append",d="prependQueue"===f,m=document.createElement("style");m.setAttribute(u,f),d&&l&&m.setAttribute(c,"".concat(l)),null!=i&&i.nonce&&(m.nonce=null==i?void 0:i.nonce),m.innerHTML=n;var g=h(r),v=g.firstChild;if(a){if(d){var y=(r.styles||p(g)).filter(function(n){return!!["prepend","prependQueue"].includes(n.getAttribute(u))&&l>=Number(n.getAttribute(c)||0);});if(y.length)return g.insertBefore(m,y[y.length-1].nextSibling),m;}g.insertBefore(m,v);}else g.appendChild(m);return m;}function g(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=h(r);return(r.styles||p(i)).find(function(i){return i.getAttribute(d(r))===n;});}},"0c4be061":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});var a=i("852bbaa9")._(i("609f48be")).createContext({renderWithProps:!1});},"0cf4df74":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{createOffscreenGroup:function(){return c;},isInOffscreenGroup:function(){return f;}});var a=i("3862611d"),o=i("5e195043"),s=i("5e195043"),l=i("f1d8aa22"),u=function(n){function r(){for(var r=[],i=0;i1?0:n<-1?h:Math.acos(n);}function v(n){return n>=1?p:n<=-1?-p:Math.asin(n);}},"0dcab6c6":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{SEARCH_MARK:function(){return f;},default:function(){return p;}});var a=i("777fffbe"),o=i("852bbaa9"),s=a._(i("a854094b")),l=a._(i("e4870cf0")),u=a._(i("f1020fa4")),c=o._(i("609f48be")),f="__rc_cascader_search_mark__",d=function(n,r,i){var a=i.label,o=void 0===a?"":a;return r.some(function(r){return String(r[o]).toLowerCase().includes(n.toLowerCase());});},h=function(n,r,i,a){return r.map(function(n){return n[a.label];}).join(" / ");},p=function(n,r,i,a,o,p){var m=o.filter,g=void 0===m?d:m,v=o.render,y=void 0===v?h:v,_=o.limit,b=void 0===_?50:_,x=o.sort;return c.useMemo(function(){var o=[];return n?(!function r(c,d){var h=arguments.length>2&&void 0!==arguments[2]&&arguments[2];c.forEach(function(c){if(x||!1===b||!(b>0)||!(o.length>=b)){var m,v=[].concat((0,u.default)(d),[c]),_=c[i.children],E=h||c.disabled;(!_||0===_.length||p)&&g(n,v,{label:i.label})&&o.push((0,l.default)((0,l.default)({},c),{},(m={disabled:E},(0,s.default)(m,i.label,y(n,v,a,i)),(0,s.default)(m,f,v),(0,s.default)(m,i.children,void 0),m))),_&&r(c[i.children],v,E);}});}(r,[]),x&&o.sort(function(r,a){return x(r[f],a[f],n,i);}),!1!==b&&b>0?o.slice(0,b):o):[];},[n,r,i,a,y,p,g,x,b]);};},"0e2cd74b":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return p;}});var a=i("777fffbe"),o=i("480dd2d5"),s=a._(o),l=i("6f0d7bd0"),u=a._(l);function c(n){return(0,u.default)(n)&&"[object Arguments]"==(0,s.default)(n);}var f=Object.prototype,d=f.hasOwnProperty,h=f.propertyIsEnumerable,p=c(function(){return arguments;}())?c:function(n){return(0,u.default)(n)&&d.call(n,"callee")&&!h.call(n,"callee");};},"0fbce506":function(n,r,i){"use strict";(n.exports={}).getOption=function(n,r,i){var a=n[r];return null==a&&void 0!==i?i:a;};},10039389:function(n,r,i){"use strict";n.exports=function(n){function r(){}var i={log:r,warn:r,error:r};if(!n&&window.console){var a=function(n,r){n[r]=function(){var n=console[r];if(n.apply)n.apply(console,arguments);else for(var i=0;i3&&void 0!==arguments[3]&&arguments[3];if(""===r)return"";var s=p(r),l=s.negativeStr,u=s.integerStr,c=s.decimalStr,f="".concat(i).concat(c),d="".concat(l).concat(u);if(a>=0){var h=Number(c[a]);return h>=5&&!o?n(x(r).add("".concat(l,"0.").concat("0".repeat(a)).concat(10-h)).toString(),i,a,o):0===a?d:"".concat(d).concat(i).concat(c.padEnd(a,"0").slice(0,a));}return".0"===f?d:"".concat(d).concat(f);};},trimNumber:function(){return p;},validateNumber:function(){return y;}});var a=i("777fffbe"),o=i("8bbe4f57"),s=a._(o),l=i("85158032"),u=a._(l),c=i("a854094b"),f=a._(c);function d(){return"function"==typeof BigInt;}function h(n){return!n&&0!==n&&!Number.isNaN(n)||!String(n).trim();}function p(n){var r=n.trim(),i=r.startsWith("-");i&&(r=r.slice(1)),(r=r.replace(/(\.\d*[^0])0*$/,"$1").replace(/\.0*$/,"").replace(/^0+/,"")).startsWith(".")&&(r="0".concat(r));var a=r||"0",o=a.split("."),s=o[0]||"0",l=o[1]||"0";"0"===s&&"0"===l&&(i=!1);var u=i?"-":"";return{negative:i,negativeStr:u,trimStr:a,integerStr:s,decimalStr:l,fullStr:"".concat(u).concat(a)};}function m(n){var r=String(n);return!Number.isNaN(Number(r))&&r.includes("e");}function g(n){var r=String(n);if(m(n)){var i=Number(r.slice(r.indexOf("e-")+2)),a=r.match(/\.(\d+)/);return null!=a&&a[1]&&(i+=a[1].length),i;}return r.includes(".")&&y(r)?r.length-r.indexOf(".")-1:0;}function v(n){var r=String(n);if(m(n)){if(n>Number.MAX_SAFE_INTEGER)return String(d()?BigInt(n).toString():Number.MAX_SAFE_INTEGER);if(n=this.add(n.negate().toString()).toNumber();}},{key:"toNumber",value:function(){return this.isNaN()?NaN:Number(this.toString());}},{key:"toString",value:function(){var n=!(arguments.length>0)||void 0===arguments[0]||arguments[0];return n?this.isInvalidate()?"":p("".concat(this.getMark()).concat(this.getIntegerStr(),".").concat(this.getDecimalStr())).fullStr:this.origin;}}]),n;}(),b=function(){function n(r){if((0,s.default)(this,n),(0,f.default)(this,"origin",""),(0,f.default)(this,"number",void 0),(0,f.default)(this,"empty",void 0),h(r)){this.empty=!0;return;}this.origin=String(r),this.number=Number(r);}return(0,u.default)(n,[{key:"negate",value:function(){return new n(-this.toNumber());}},{key:"add",value:function(r){if(this.isInvalidate())return new n(r);var i=Number(r);if(Number.isNaN(i))return this;var a=this.number+i;if(a>Number.MAX_SAFE_INTEGER)return new n(Number.MAX_SAFE_INTEGER);if(aNumber.MAX_SAFE_INTEGER)return new n(Number.MAX_SAFE_INTEGER);if(a=this.add(n.negate().toString()).toNumber();}},{key:"toNumber",value:function(){return this.number;}},{key:"toString",value:function(){var n=!(arguments.length>0)||void 0===arguments[0]||arguments[0];return n?this.isInvalidate()?"":v(this.number):this.origin;}}]),n;}();function x(n){return d()?new _(n):new b(n);}},"11bba482":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{FormListContext:function(){return T;},ProFormList:function(){return A;}});var a=i("777fffbe"),o=i("852bbaa9"),s=a._(i("f1020fa4")),l=a._(i("e4870cf0")),u=a._(i("613f75ca")),c=a._(i("a774639c")),f=a._(i("a788b59c")),d=i("64681837"),h=i("4701d2de"),p=a._(i("a5a99096")),m=a._(i("f34e933b")),g=a._(i("064ecd09")),v=i("a275200c"),y=o._(i("609f48be")),_=a._(i("2faf3d77")),b=i("02a23b09"),x=i("8fe0a95a"),E=i("4783ed5c"),w=i("dac8af92"),S=["transform","actionRender","creatorButtonProps","label","alwaysShowItemLabel","tooltip","creatorRecord","itemRender","rules","itemContainerRender","fieldExtraRender","copyIconProps","children","deleteIconProps","actionRef","style","prefixCls","actionGuard","min","max","colProps","wrapperCol","rowProps","onAfterAdd","onAfterRemove","isValidateList","emptyListMessage","className","containerClassName","containerStyle","readonly"],T=y.default.createContext({});function A(n){var r=(0,y.useRef)(),i=(0,y.useContext)(p.default.ConfigContext),a=(0,y.useContext)(T),o=i.getPrefixCls("pro-form-list"),A=(0,d.useIntl)(),C=y.default.useContext(_.default).setFieldValueType,O=n.transform,M=n.actionRender,R=n.creatorButtonProps,P=n.label,k=n.alwaysShowItemLabel,I=n.tooltip,L=n.creatorRecord,N=n.itemRender,D=n.rules,F=n.itemContainerRender,B=n.fieldExtraRender,j=n.copyIconProps,z=void 0===j?{Icon:c.default,tooltipText:A.getMessage("copyThisLine","\u590D\u5236\u6B64\u9879")}:j,U=n.children,V=n.deleteIconProps,G=void 0===V?{Icon:f.default,tooltipText:A.getMessage("deleteThisLine","\u5220\u9664\u6B64\u9879")}:V,H=n.actionRef,W=n.style,X=n.prefixCls,q=n.actionGuard,$=n.min,Y=n.max,Z=n.colProps,K=n.wrapperCol,Q=n.rowProps,J=n.onAfterAdd,ee=n.onAfterRemove,et=n.isValidateList,en=void 0!==et&&et,er=n.emptyListMessage,ei=void 0===er?"\u5217\u8868\u4E0D\u80FD\u4E3A\u7A7A":er,ea=n.className,eo=n.containerClassName,es=n.containerStyle,el=n.readonly,eu=(0,u.default)(n,S),ec=(0,b.useGridHelpers)({colProps:Z,rowProps:Q}),ef=ec.ColWrapper,ed=ec.RowWrapper,eh=(0,y.useContext)(h.ProFormContext),ep=(0,y.useMemo)(function(){return void 0===a.name?[eu.name].flat(1):[a.name,eu.name].flat(1);},[a.name,eu.name]);(0,y.useImperativeHandle)(H,function(){return(0,l.default)((0,l.default)({},r.current),{},{get:function(n){return eh.formRef.current.getFieldValue([].concat((0,s.default)(ep),[n]));},getList:function(){return eh.formRef.current.getFieldValue((0,s.default)(ep));}});},[ep,eh.formRef]),(0,y.useEffect)(function(){(0,v.noteOnce)(!!eh.formRef,"ProFormList \u5FC5\u987B\u8981\u653E\u5230 ProForm \u4E2D,\u5426\u5219\u4F1A\u9020\u6210\u884C\u4E3A\u5F02\u5E38\u3002"),(0,v.noteOnce)(!!eh.formRef,"Proformlist must be placed in ProForm, otherwise it will cause abnormal behavior.");},[eh.formRef]),(0,y.useEffect)(function(){C&&n.name&&C([n.name].flat(1).filter(function(n){return void 0!==n;}),{valueType:"formList",transform:O});},[n.name,C,O]);var em=(0,E.useStyle)(o),eg=em.wrapSSR,ev=em.hashId;return eh.formRef?eg((0,w.jsx)(ef,{children:(0,w.jsx)("div",{className:(0,g.default)(o,ev),style:W,children:(0,w.jsx)(m.default.Item,(0,l.default)((0,l.default)({label:P,prefixCls:X,tooltip:I,style:W,required:null==D?void 0:D.some(function(n){return n.required;}),wrapperCol:K,className:ea},eu),{},{name:en?ep:void 0,rules:en?[{validator:function(n,r){return r&&0!==r.length?Promise.resolve():Promise.reject(Error(ei));},required:!0}]:void 0,children:(0,w.jsx)(m.default.List,(0,l.default)((0,l.default)({rules:D},eu),{},{name:ep,children:function(n,i,a){return r.current=i,(0,w.jsxs)(ed,{children:[(0,w.jsx)(x.ProFormListContainer,{name:ep,readonly:!!el,originName:eu.name,copyIconProps:z,deleteIconProps:G,formInstance:eh.formRef.current,prefixCls:o,meta:a,fields:n,itemContainerRender:F,itemRender:N,fieldExtraRender:B,creatorButtonProps:R,creatorRecord:L,actionRender:M,action:i,actionGuard:q,alwaysShowItemLabel:k,min:$,max:Y,count:n.length,onAfterAdd:function(n,r,i){en&&eh.formRef.current.validateFields([ep]),null==J||J(n,r,i);},onAfterRemove:function(n,r){en&&0===r&&eh.formRef.current.validateFields([ep]),null==ee||ee(n,r);},containerClassName:eo,containerStyle:es,children:U}),(0,w.jsx)(m.default.ErrorList,{errors:a.errors})]});}}))}))})})):null;}},"12787c53":function(n,r,i){var a=i("7505d865"),o=i("bbc15be8");n.exports=function(n,r,i){var s=r(n);return o(n)?s:a(s,i(n));};},"12a871f9":function(n,r,i){var a=i("f53c9952"),o=i("88ddf3cf");n.exports=function(n,r){return n&&a(r,o(r),n);};},"148614a5":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{coordOf:function(){return c;},coordinate2Transform:function(){return u;},createCoordinate:function(){return l;},isHelix:function(){return d;},isParallel:function(){return p;},isPolar:function(){return f;},isRadar:function(){return y;},isRadial:function(){return v;},isReflect:function(){return g;},isReflectY:function(){return _;},isTheta:function(){return m;},isTranspose:function(){return h;}});var a=i("19d769ab"),o=i("c4368857"),s=this&&this.__rest||function(n,r){var i={};for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&0>r.indexOf(a)&&(i[a]=n[a]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,a=Object.getOwnPropertySymbols(n);or.indexOf(a[o])&&Object.prototype.propertyIsEnumerable.call(n,a[o])&&(i[a[o]]=n[a[o]]);return i;};function l(n,r,i){let[s]=(0,o.useLibrary)("coordinate",i),{innerHeight:l,innerWidth:u,insetLeft:c,insetTop:f,insetRight:d,insetBottom:h}=n,{coordinates:p=[]}=r,m=p.find(n=>"cartesian"===n.type||"cartesian3D"===n.type)?p:[...p,{type:"cartesian"}],g="cartesian3D"===m[0].type,v=Object.assign(Object.assign({},n),{x:c,y:f,width:u-c-d,height:l-h-f,transformations:m.flatMap(s)});return g?new a.Coordinate3D(v):new a.Coordinate(v);}function u(n,r){let{coordinate:i={},coordinates:a}=n,l=s(n,["coordinate","coordinates"]);if(a)return n;let{type:u,transform:c=[]}=i,f=s(i,["type","transform"]);if(!u)return Object.assign(Object.assign({},l),{coordinates:c});let[,d]=(0,o.useLibrary)("coordinate",r),{transform:h=!1}=d(u).props||{};if(h)throw Error(`Unknown coordinate: ${u}.`);return Object.assign(Object.assign({},l),{coordinates:[Object.assign({type:u},f),...c]});}function c(n,r){return n.filter(n=>n.type===r);}function f(n){return c(n,"polar").length>0;}function d(n){return c(n,"helix").length>0;}function h(n){return c(n,"transpose").length%2==1;}function p(n){return c(n,"parallel").length>0;}function m(n){return c(n,"theta").length>0;}function g(n){return c(n,"reflect").length>0;}function v(n){return c(n,"radial").length>0;}function y(n){return c(n,"radar").length>0;}function _(n){return c(n,"reflectY").length>0;}},"14887fae":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{bowtie:function(){return d;},button:function(){return T;},circle:function(){return a;},cross:function(){return p;},dash:function(){return _;},diamond:function(){return l;},dot:function(){return y;},hexagon:function(){return f;},hv:function(){return x;},hvh:function(){return w;},hyphen:function(){return v;},line:function(){return h;},plus:function(){return g;},point:function(){return o;},smooth:function(){return b;},square:function(){return s;},tick:function(){return m;},triangle:function(){return u;},triangleDown:function(){return c;},vh:function(){return E;},vhv:function(){return S;}});var a=function(n,r,i){return[["M",n-i,r],["A",i,i,0,1,0,n+i,r],["A",i,i,0,1,0,n-i,r],["Z"]];},o=a,s=function(n,r,i){return[["M",n-i,r-i],["L",n+i,r-i],["L",n+i,r+i],["L",n-i,r+i],["Z"]];},l=function(n,r,i){return[["M",n-i,r],["L",n,r-i],["L",n+i,r],["L",n,r+i],["Z"]];},u=function(n,r,i){var a=i*Math.sin(1/3*Math.PI);return[["M",n-i,r+a],["L",n,r-a],["L",n+i,r+a],["Z"]];},c=function(n,r,i){var a=i*Math.sin(1/3*Math.PI);return[["M",n-i,r-a],["L",n+i,r-a],["L",n,r+a],["Z"]];},f=function(n,r,i){var a=i/2*Math.sqrt(3);return[["M",n,r-i],["L",n+a,r-i/2],["L",n+a,r+i/2],["L",n,r+i],["L",n-a,r+i/2],["L",n-a,r-i/2],["Z"]];},d=function(n,r,i){var a=i-1.5;return[["M",n-i,r-a],["L",n+i,r+a],["L",n+i,r-a],["L",n-i,r+a],["Z"]];},h=function(n,r,i){return[["M",n,r+i],["L",n,r-i]];},p=function(n,r,i){return[["M",n-i,r-i],["L",n+i,r+i],["M",n+i,r-i],["L",n-i,r+i]];},m=function(n,r,i){return[["M",n-i/2,r-i],["L",n+i/2,r-i],["M",n,r-i],["L",n,r+i],["M",n-i/2,r+i],["L",n+i/2,r+i]];},g=function(n,r,i){return[["M",n-i,r],["L",n+i,r],["M",n,r-i],["L",n,r+i]];},v=function(n,r,i){return[["M",n-i,r],["L",n+i,r]];},y=function(n,r,i){return[["M",n-i,r],["L",n+i,r]];},_=y,b=function(n,r,i){return[["M",n-i,r],["A",i/2,i/2,0,1,1,n,r],["A",i/2,i/2,0,1,0,n+i,r]];},x=function(n,r,i){return[["M",n-i-1,r-2.5],["L",n,r-2.5],["L",n,r+2.5],["L",n+i+1,r+2.5]];},E=function(n,r,i){return[["M",n-i-1,r+2.5],["L",n,r+2.5],["L",n,r-2.5],["L",n+i+1,r-2.5]];},w=function(n,r,i){return[["M",n-(i+1),r+2.5],["L",n-i/2,r+2.5],["L",n-i/2,r-2.5],["L",n+i/2,r-2.5],["L",n+i/2,r+2.5],["L",n+i+1,r+2.5]];};function S(n,r){return[["M",n-5,r+2.5],["L",n-5,r],["L",n,r],["L",n,r-3],["L",n,r+3],["L",n+6.5,r+3]];}var T=function(n,r,i){return[["M",n-i,r-i],["L",n+i,r],["L",n-i,r+i],["Z"]];};},"149f2852":function(n,r,i){"use strict";function a(n,r){return n=+n,r=+r,function(i){return Math.round(n*(1-i)+r*i);};}i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});},"1536f4d4":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),r.default=function(n,r){if(!n)return!1;if(n.contains)return n.contains(r);for(var i=r;i;){if(i===n)return!0;i=i.parentNode;}return!1;};},"1552e56f":function(n,r,i){var a=i("74fc3704");n.exports=function(n,r){return n&&n.length&&r&&r.length?a(n,r):n;};},"156120ad":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return d;}});var a=i("777fffbe"),o=a._(i("e4870cf0")),s=a._(i("613f75ca")),l=a._(i("609f48be")),u=a._(i("551ddf56")),c=i("dac8af92"),f=["fieldProps","min","proFieldProps","max"],d=l.default.forwardRef(function(n,r){var i=n.fieldProps,a=n.min,l=n.proFieldProps,d=n.max,h=(0,s.default)(n,f);return(0,c.jsx)(u.default,(0,o.default)({valueType:"digit",fieldProps:(0,o.default)({min:a,max:d},i),ref:r,filedConfig:{defaultProps:{width:"100%"}},proFieldProps:l},h));});},"15fcf050":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return m;}});var a=i("777fffbe"),o=i("852bbaa9"),s=a._(i("e4870cf0")),l=a._(i("613f75ca")),u=o._(i("609f48be")),c=a._(i("2faf3d77")),f=a._(i("551ddf56")),d=i("dac8af92"),h=["fieldProps","proFieldProps"],p="dateTime",m=u.default.forwardRef(function(n,r){var i=n.fieldProps,a=n.proFieldProps,o=(0,l.default)(n,h),m=(0,u.useContext)(c.default);return(0,d.jsx)(f.default,(0,s.default)({ref:r,fieldProps:(0,s.default)({getPopupContainer:m.getPopupContainer},i),valueType:p,proFieldProps:a,filedConfig:{valueType:p,customLightMode:!0}},o));});},"16d095ff":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"Handle",{enumerable:!0,get:function(){return p;}});var a=i("3862611d"),o=i("47a6bde3"),s=i("fc81244b"),l=i("a602d54e"),u=i("b0ea517f"),c=i("a63b8d99"),f=i("e77a4c2e"),d=(0,s.classNames)({labelGroup:"label-group",label:"label",iconGroup:"icon-group",icon:"icon",iconRect:"icon-rect",iconLine:"icon-line"},"handle"),h=function(n){function r(){return null!==n&&n.apply(this,arguments)||this;}return(0,a.__extends)(r,n),r.prototype.render=function(n,r){var i=n.x,o=n.y,s=n.size,l=void 0===s?10:s,c=n.radius,f=n.orientation,h=(0,a.__rest)(n,["x","y","size","radius","orientation"]),p=2.4*l,m=(0,u.select)(r).maybeAppendByClassName(d.iconRect,"rect").styles((0,a.__assign)((0,a.__assign)({},h),{width:l,height:p,radius:void 0===c?l/4:c,x:i-l/2,y:o-p/2,transformOrigin:"center"})),g=i+1/3*l-l/2,v=i+2/3*l-l/2,y=o+1/4*p-p/2,_=o+3/4*p-p/2;m.maybeAppendByClassName("".concat(d.iconLine,"-1"),"line").styles((0,a.__assign)({x1:g,x2:g,y1:y,y2:_},h)),m.maybeAppendByClassName("".concat(d.iconLine,"-2"),"line").styles((0,a.__assign)({x1:v,x2:v,y1:y,y2:_},h)),"vertical"===f&&(m.node().style.transform="rotate(90)");},r;}(o.Component),p=function(n){function r(r){return n.call(this,r,f.HANDLE_DEFAULT_CFG)||this;}return(0,a.__extends)(r,n),r.prototype.renderLabel=function(n){var r=this,i=this.attributes,o=i.x,s=i.y,h=i.showLabel,p=(0,c.subStyleProps)(this.attributes,"label"),m=p.x,g=void 0===m?0:m,v=p.y,y=void 0===v?0:v,_=p.transform,b=p.transformOrigin,x=(0,a.__rest)(p,["x","y","transform","transformOrigin"]),E=(0,a.__read)((0,c.splitStyle)(x,[]),2),w=E[0],S=E[1],T=(0,u.select)(n).maybeAppendByClassName(d.labelGroup,"g").styles(S),A=(0,a.__assign)((0,a.__assign)({},f.HANDLE_LABEL_DEFAULT_CFG),w),C=A.text,O=(0,a.__rest)(A,["text"]);(0,l.ifShow)(!!h,T,function(n){r.label=n.maybeAppendByClassName(d.label,"text").styles((0,a.__assign)((0,a.__assign)({},O),{x:o+g,y:s+y,transform:_,transformOrigin:b,text:"".concat(C)})),r.label.on("mousedown",function(n){n.stopPropagation();}),r.label.on("touchstart",function(n){n.stopPropagation();});});},r.prototype.renderIcon=function(n){var r=this.attributes,i=r.x,o=r.y,s=r.orientation,l=r.type,p=(0,a.__assign)((0,a.__assign)({x:i,y:o,orientation:s},f.HANDLE_ICON_DEFAULT_CFG),(0,c.subStyleProps)(this.attributes,"icon")),m=this.attributes.iconShape,g=void 0===m?function(){return new h({style:p});}:m;(0,u.select)(n).maybeAppendByClassName(d.iconGroup,"g").selectAll(d.icon.class).data([g]).join(function(n){return n.append("string"==typeof g?g:function(){return g(l);}).attr("className",d.icon.name);},function(n){return n.update(p);},function(n){return n.remove();});},r.prototype.render=function(n,r){this.renderIcon(r),this.renderLabel(r);},r;}(o.Component);},"176581f8":function(n,r,i){n.exports=function(n){var r=-1,i=Array(n.size);return n.forEach(function(n){i[++r]=n;}),i;};},"1915def0":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"parseSeriesAttr",{enumerable:!0,get:function(){return l;}});var a=i("777fffbe"),o=a._(i("1f338b89")),s=a._(i("1daaa764"));function l(n){if((0,o.default)(n))return[n,n,n,n];if((0,s.default)(n)){var r=n.length;if(1===r)return[n[0],n[0],n[0],n[0]];if(2===r)return[n[0],n[1],n[0],n[1]];if(3===r)return[n[0],n[1],n[2],n[1]];if(4===r)return n;}return[0,0,0,0];}},"191f48a8":function(n,r,i){var a=i("9cbba6e7");n.exports=function(n){return"function"==typeof n?n:a;};},19503730:function(n,r,i){"use strict";function a(n){return function(r){var i=new o;for(var a in n)i[a]=n[a];return i.stream=r,i;};}function o(){}i.d(r,"__esModule",{value:!0}),i.d(r,"transformer",{enumerable:!0,get:function(){return a;}}),o.prototype={constructor:o,point:function(n,r){this.stream.point(n,r);},sphere:function(){this.stream.sphere();},lineStart:function(){this.stream.lineStart();},lineEnd:function(){this.stream.lineEnd();},polygonStart:function(){this.stream.polygonStart();},polygonEnd:function(){this.stream.polygonEnd();}};},"19d769ab":function(n,r,i){var a,o;a=this,o=function(n){"use strict";function r(n){var r="function"==typeof Symbol&&Symbol.iterator,i=r&&n[r],a=0;if(i)return i.call(n);if(n&&"number"==typeof n.length)return{next:function(){return{value:(n=n&&a>=n.length?void 0:n)&&n[a++],done:!n};}};throw TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.");}function i(n,r){var i="function"==typeof Symbol&&n[Symbol.iterator];if(!i)return n;var a,o,s=i.call(n),l=[];try{for(;(void 0===r||0i=>n(r(i)),n);}function A(n,r){return r-n?i=>(i-n)/(r-n):n=>.5;}N=new g(3),g!=Float32Array&&(N[0]=0,N[1]=0,N[2]=0),N=new g(4),g!=Float32Array&&(N[0]=0,N[1]=0,N[2]=0,N[3]=0);let C=Math.sqrt(50),O=Math.sqrt(10),M=Math.sqrt(2);function R(n,r,i){return n=Math.floor(Math.log(r=(r-n)/Math.max(0,i))/Math.LN10),i=r/10**n,0<=n?(i>=C?10:i>=O?5:i>=M?2:1)*10**n:-(10**-n)/(i>=C?10:i>=O?5:i>=M?2:1);}let P=(n,r,i=5)=>{let a=0,o=(n=[n,r]).length-1,s=n[a],l=n[o],u;return l{i.prototype.rescale=function(){this.initRange(),this.nice();var[n]=this.chooseTransforms();this.composeOutput(n,this.chooseClamp(n));},i.prototype.initRange=function(){var r=this.options.interpolator;this.options.range=n(r);},i.prototype.composeOutput=function(n,i){var{domain:a,interpolator:o,round:s}=this.getOptions(),a=r(a.map(n)),s=s?n=>u(n=o(n),"Number")?Math.round(n):n:o;this.output=T(s,a,i,n);},i.prototype.invert=void 0;};}var L,N={exports:{}},D={exports:{}},F=Array.prototype.concat,B=Array.prototype.slice,j=D.exports=function(n){for(var r=[],i=0,a=n.length;ii=>n*(1-i)+r*i,K=(n,r)=>{if("number"==typeof n&&"number"==typeof r)return Z(n,r);if("string"!=typeof n||"string"!=typeof r)return()=>n;{let i=Y(n),a=Y(r);return null===i||null===a?i?()=>n:()=>r:n=>{var r=[,,,,];for(let l=0;l<4;l+=1){var o=i[l],s=a[l];r[l]=o*(1-n)+s*n;}var[l,u,c,f]=r;return`rgba(${Math.round(l)}, ${Math.round(u)}, ${Math.round(c)}, ${f})`;};}},Q=(n,r)=>{let i=Z(n,r);return n=>Math.round(i(n));};function J({map:n,initKey:r},i){return r=r(i),n.has(r)?n.get(r):i;}function ee(n){return"object"==typeof n?n.valueOf():n;}class et extends Map{constructor(n){if(super(),this.map=new Map,this.initKey=ee,null!==n)for(var[r,i]of n)this.set(r,i);}get(n){return super.get(J({map:this.map,initKey:this.initKey},n));}has(n){return super.has(J({map:this.map,initKey:this.initKey},n));}set(n,r){var i,a;return super.set(([{map:n,initKey:i},a]=[{map:this.map,initKey:this.initKey},n],i=i(a),n.has(i)?n.get(i):(n.set(i,a),a)),r);}delete(n){var r,i;return super.delete(([{map:n,initKey:r},i]=[{map:this.map,initKey:this.initKey},n],r=r(i),n.has(r)&&(i=n.get(r),n.delete(r)),i));}}class en{constructor(n){this.options=h({},this.getDefaultOptions()),this.update(n);}getOptions(){return this.options;}update(n={}){this.options=h({},this.options,n),this.rescale(n);}rescale(n){}}let er=Symbol("defaultUnknown");function ei(n,r,i){for(let a=0;a""+n:"object"==typeof n?n=>JSON.stringify(n):n=>n;}class es extends en{getDefaultOptions(){return{domain:[],range:[],unknown:er};}constructor(n){super(n);}map(n){return 0===this.domainIndexMap.size&&ei(this.domainIndexMap,this.getDomain(),this.domainKey),ea({value:this.domainKey(n),mapper:this.domainIndexMap,from:this.getDomain(),to:this.getRange(),notFoundReturn:this.options.unknown});}invert(n){return 0===this.rangeIndexMap.size&&ei(this.rangeIndexMap,this.getRange(),this.rangeKey),ea({value:this.rangeKey(n),mapper:this.rangeIndexMap,from:this.getRange(),to:this.getDomain(),notFoundReturn:this.options.unknown});}rescale(n){var[r]=this.options.domain,[i]=this.options.range;this.domainKey=eo(r),this.rangeKey=eo(i),this.rangeIndexMap?(n&&!n.range||this.rangeIndexMap.clear(),(!n||n.domain||n.compare)&&(this.domainIndexMap.clear(),this.sortedDomain=void 0)):(this.rangeIndexMap=new Map,this.domainIndexMap=new Map);}clone(){return new es(this.options);}getRange(){return this.options.range;}getDomain(){var n,r;return this.sortedDomain||({domain:n,compare:r}=this.options,this.sortedDomain=r?[...n].sort(r):n),this.sortedDomain;}}class el extends es{getDefaultOptions(){return{domain:[],range:[0,1],align:.5,round:!1,paddingInner:0,paddingOuter:0,padding:0,unknown:er,flex:[]};}constructor(n){super(n);}clone(){return new el(this.options);}getStep(n){return void 0===this.valueStep?1:"number"==typeof this.valueStep?this.valueStep:void 0===n?Array.from(this.valueStep.values())[0]:this.valueStep.get(n);}getBandWidth(n){return void 0===this.valueBandWidth?1:"number"==typeof this.valueBandWidth?this.valueBandWidth:void 0===n?Array.from(this.valueBandWidth.values())[0]:this.valueBandWidth.get(n);}getRange(){return this.adjustedRange;}getPaddingInner(){var{padding:n,paddingInner:r}=this.options;return 0n/r);}(f),g=h/m.reduce((n,r)=>n+r);var f=new et(r.map((n,r)=>(r=m[r]*g,[n,l?Math.floor(r):r]))),v=new et(r.map((n,r)=>(r=m[r]*g+p,[n,l?Math.floor(r):r]))),h=Array.from(v.values()).reduce((n,r)=>n+r),n=n+(d-(h-h/c*o))*u;let y=l?Math.round(n):n;var _=Array(c);for(let n=0;nc+r*l),{valueStep:l,valueBandWidth:u,adjustedRange:n};}({align:n,range:i,round:a,flex:o,paddingInner:this.getPaddingInner(),paddingOuter:this.getPaddingOuter(),domain:r});this.valueStep=a,this.valueBandWidth=i,this.adjustedRange=n;}}let eu=(n,r,i)=>{let a,o,s=n,l=r;if(s===l&&0{let a;var[n,o]=n,[r,s]=r;return T(n{let a=Math.min(n.length,r.length)-1,o=Array(a),s=Array(a);var l=n[0]>n[a],u=l?[...n].reverse():n,c=l?[...r].reverse():r;for(let n=0;n{var i=function(n,r,i,a,o){let s=1,l=a||n.length;for(var u=n=>n;sr?l=c:s=c+1;}return s;}(n,r,0,a)-1,l=o[i];return T(s[i],l)(r);};},ed=(n,r,i,a)=>(2Math.min(Math.max(a,n),o);}return p;}composeOutput(n,r){var{domain:i,range:a,round:o,interpolate:s}=this.options,i=ed(i.map(n),a,s,o);this.output=T(i,r,n);}composeInput(n,r,i){var{domain:a,range:o}=this.options,o=ed(o,a.map(n),Z);this.input=T(r,i,o);}}class ep extends eh{getDefaultOptions(){return{domain:[0,1],range:[0,1],unknown:void 0,nice:!1,clamp:!1,round:!1,interpolate:K,tickMethod:eu,tickCount:5};}chooseTransforms(){return[p,p];}clone(){return new ep(this.options);}}class em extends el{getDefaultOptions(){return{domain:[],range:[0,1],align:.5,round:!1,padding:0,unknown:er,paddingInner:1,paddingOuter:0};}constructor(n){super(n);}getPaddingInner(){return 1;}clone(){return new em(this.options);}update(n){super.update(n);}getPaddingOuter(){return this.options.padding;}}function eg(n,r){for(var i=[],a=0,o=n.length;a{var[n,r]=n;return T(Z(0,1),A(n,r));})],e_);let eb=s=class extends ep{getDefaultOptions(){return{domain:[0,.5,1],unknown:void 0,nice:!1,clamp:!1,round:!1,interpolator:p,tickMethod:eu,tickCount:5};}constructor(n){super(n);}clone(){return new s(this.options);}};function ex(n,r,a,o,s){var l=new ep({range:[r,r+o]}),u=new ep({range:[a,a+s]});return{transform:function(n){var n=i(n,2),r=n[0],n=n[1];return[l.map(r),u.map(n)];},untransform:function(n){var n=i(n,2),r=n[0],n=n[1];return[l.invert(r),u.invert(n)];}};}function eE(n,r,a,o,s){return(0,i(n,1)[0])(r,a,o,s);}function ew(n,r,a,o,s){return i(n,1)[0];}function eS(n,r,a,o,s){var l=(n=i(n,4))[0],u=n[1],c=n[2],n=n[3],f=new ep({range:[c,n]}),d=new ep({range:[l,u]}),h=1<(c=s/o)?1:c,p=1{let[r,i,a]=n,o=T(Z(0,.5),A(r,i)),s=T(Z(.5,1),A(i,a));return n=>(r>a?n=r&&(i=a=r):(i>r&&(i=r),a=s&&(i=a=s):(i>s&&(i=s),a 0.01\n float blurWidth = (1.0 - v_blur)/2.0;\n vec4 stroke = vec4(u_stroke_color.rgb, u_stroke_opacity);\n if(fragmengTocenter > v_innerRadius + blurWidth) {\n outputColor = stroke;\n } else if(fragmengTocenter > v_innerRadius - blurWidth){\n float mixR = (fragmengTocenter - (v_innerRadius - blurWidth)) / (blurWidth * 2.0);\n outputColor = mix(v_color, stroke, mixR);\n } else {\n outputColor = v_color;\n }\n } else {\n // \u5F53\u4E0D\u5B58\u5728 stroke \u6216 stroke <= 0.01\n outputColor = v_color;\n }\n\n outputColor = filterColor(outputColor);\n \n if(u_additive > 0.0) {\n outputColor *= circleClipOpacity;\n } else {\n outputColor.a *= circleClipOpacity;\n }\n\n}\n',defines:n.getDefines(),inject:n.getInject(),triangulation:v,depth:{enable:!1},primitive:h.gl.POINTS}))];})();}registerBuiltinAttributes(){this.registerPosition64LowAttribute(),this.styleAttributeService.registerStyleAttribute({name:"size",type:h.AttributeType.Attribute,descriptor:{name:"a_Size",shaderLocation:this.attributeLocation.SIZE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:1,update:n=>{let{size:r=1}=n;return Array.isArray(r)?[r[0]]:[r];}}});}}var _=i("8970bd89"),b=i("9400daad");let{isNumber:x}=g.lodashUtil;class E extends m.default{constructor(...n){super(...n),(0,c.default)(this,"raiseCount",0),(0,c.default)(this,"raiseRepeat",0);}get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,SIZE:9,POS:10,NORMAL:11});}getCommonUniformsInfo(){let{animateOption:n={enable:!1,speed:.01,repeat:!1},opacity:r=1,sourceColor:i,targetColor:a,pickLight:o=!1,heightfixed:s=!0,opacityLinear:l={enable:!1,dir:"up"},lightEnable:u=!0}=this.layer.getLayerConfig(),c=0,f=[0,0,0,0],d=[0,0,0,0];if(i&&a&&(f=(0,g.rgb2arr)(i),d=(0,g.rgb2arr)(a),c=1),this.raiseCount<1&&this.raiseRepeat>0&&n.enable){let{speed:r=.01}=n;this.raiseCount+=r,this.raiseCount>=1&&(this.raiseRepeat>1?(this.raiseCount=0,this.raiseRepeat--):this.raiseCount=1);}let h={u_sourceColor:f,u_targetColor:d,u_linearColor:c,u_pickLight:Number(o),u_heightfixed:Number(s),u_r:n.enable&&this.raiseRepeat>0?this.raiseCount:1,u_opacity:x(r)?r:1,u_opacitylinear:Number(l.enable),u_opacitylinear_dir:"up"===l.dir?1:0,u_lightEnable:Number(u)};return this.getUniformsBufferInfo(h);}initModels(){var n=this;return(0,l.default)(function*(){return n.initUniformsBuffer(),n.buildModels();})();}buildModels(){var n=this;return(0,l.default)(function*(){let{animateOption:{repeat:r=1}}=n.layer.getLayerConfig();return n.raiseRepeat=r,[(yield n.layer.buildLayerModel({moduleName:"pointEarthExtrude",vertexShader:'precision highp float;\n\n#define pi 3.1415926535\n#define ambientRatio 0.5\n#define diffuseRatio 0.3\n#define specularRatio 0.2\n\nlayout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in vec3 a_Size;\nlayout(location = ATTRIBUTE_LOCATION_POS) in vec3 a_Pos;\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\n\nlayout(std140) uniform commonUniform {\n vec4 u_sourceColor;\n vec4 u_targetColor;\n float u_linearColor: 0;\n float u_heightfixed: 0.0; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\n float u_globel;\n float u_r;\n float u_pickLight: 0.0;\n float u_opacitylinear: 0.0;\n float u_opacitylinear_dir: 1.0;\n float u_lightEnable: 1.0;\n};\n\nout vec4 v_color;\nout float v_lightWeight;\nout float v_barLinearZ;\n// \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\n\n#pragma include "projection"\n#pragma include "light"\n#pragma include "picking"\n\nfloat getYRadian(float x, float z) {\n if(x > 0.0 && z > 0.0) {\n return atan(x/z);\n } else if(x > 0.0 && z <= 0.0){\n return atan(-z/x) + pi/2.0;\n } else if(x <= 0.0 && z <= 0.0) {\n return pi + atan(x/z); //atan(x/z) +\n } else {\n return atan(z/-x) + pi*3.0/2.0;\n }\n}\n\nfloat getXRadian(float y, float r) {\n return atan(y/r);\n}\n\nvoid main() {\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n vec3 size = a_Size * a_Position;\n\n // a_Position.z \u662F\u5728\u6784\u5EFA\u7F51\u683C\u7684\u65F6\u5019\u4F20\u5165\u7684\u6807\u51C6\u503C 0 - 1\uFF0C\u5728\u63D2\u503C\u5668\u63D2\u503C\u53EF\u4EE5\u83B7\u53D6 0\uFF5E1 \u7EBF\u6027\u6E10\u53D8\u7684\u503C\n v_barLinearZ = a_Position.z;\n\n vec3 offset = size; // \u63A7\u5236\u5706\u67F1\u4F53\u7684\u5927\u5C0F - \u4ECE\u6807\u51C6\u5355\u4F4D\u5706\u67F1\u4F53\u8FDB\u884C\u504F\u79FB\n if(u_heightfixed < 1.0) { // \u5706\u67F1\u4F53\u4E0D\u56FA\u5B9A\u9AD8\u5EA6\n //\n } else {// \u5706\u67F1\u4F53\u56FA\u5B9A\u9AD8\u5EA6 \uFF08 \u5904\u7406 mapbox \uFF09\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n offset *= 4.0/pow(2.0, 21.0 - u_Zoom);\n }\n }\n\n\n vec4 project_pos = project_position(vec4(a_Pos.xy, 0., 1.0));\n\n // u_r \u63A7\u5236\u5706\u67F1\u7684\u751F\u957F\n vec4 pos = vec4(project_pos.xy + offset.xy, offset.z * u_r, 1.0);\n\n // \u5706\u67F1\u5149\u7167\u6548\u679C\n float lightWeight = 1.0;\n if(u_lightEnable > 0.0) { // \u53D6\u6D88\u4E09\u5143\u8868\u8FBE\u5F0F\uFF0C\u589E\u5F3A\u5065\u58EE\u6027\n lightWeight = calc_lighting(pos);\n }\n v_lightWeight = lightWeight;\n // \u8BBE\u7F6E\u5706\u67F1\u7684\u5E95\u8272\n if(u_linearColor == 1.0) { // \u4F7F\u7528\u6E10\u53D8\u989C\u8272\n v_color = mix(u_sourceColor, u_targetColor, v_barLinearZ);\n v_color.rgb *= lightWeight;\n } else { // \u4F7F\u7528 color \u65B9\u6CD5\u4F20\u5165\u7684\u989C\u8272\n v_color = a_Color;\n }\n v_color.a *= u_opacity;\n\n\n // \u5728\u5730\u7403\u6A21\u5F0F\u4E0B\uFF0C\u5C06\u539F\u672C\u5782\u76F4\u4E8E xy \u5E73\u9762\u7684\u5706\u67F1\u8C03\u6574\u59FF\u6001\u5230\u9002\u5E94\u5706\u7684\u89D2\u5EA6\n //\u65CB\u8F6C\u77E9\u9635mx\uFF0C\u521B\u5EFA\u7ED5x\u8F74\u65CB\u8F6C\u77E9\u9635\n float r = sqrt(a_Pos.z*a_Pos.z + a_Pos.x*a_Pos.x);\n float xRadian = getXRadian(a_Pos.y, r);\n float xcos = cos(xRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u4F59\u5F26\u503C\n float xsin = sin(xRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u6B63\u5F26\u503C\n mat4 mx = mat4(\n 1,0,0,0,\n 0,xcos,-xsin,0,\n 0,xsin,xcos,0,\n 0,0,0,1);\n\n //\u65CB\u8F6C\u77E9\u9635my\uFF0C\u521B\u5EFA\u7ED5y\u8F74\u65CB\u8F6C\u77E9\u9635\n float yRadian = getYRadian(a_Pos.x, a_Pos.z);\n float ycos = cos(yRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u4F59\u5F26\u503C\n float ysin = sin(yRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u6B63\u5F26\u503C\n mat4 my = mat4(\n ycos,0,-ysin,0,\n 0,1,0,0,\n ysin,0,ycos,0,\n 0,0,0,1);\n\n gl_Position = u_ViewProjectionMatrix * vec4(( my * mx * vec4(a_Position * a_Size, 1.0)).xyz + a_Pos, 1.0);\n\n\n setPickingColor(a_PickingColor);\n}\n',fragmentShader:'precision highp float;\nin vec4 v_color;\n\n#pragma include "picking"\n\nlayout(std140) uniform commonUniform {\n vec4 u_sourceColor;\n vec4 u_targetColor;\n float u_linearColor: 0;\n float u_heightfixed: 0.0; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\n float u_globel;\n float u_r;\n float u_pickLight: 0.0;\n float u_opacitylinear: 0.0;\n float u_opacitylinear_dir: 1.0;\n float u_lightEnable: 1.0;\n};\nin float v_lightWeight;\nin float v_barLinearZ;\nout vec4 outputColor;\nvoid main() {\n\n outputColor = v_color;\n\n // \u5F00\u542F\u900F\u660E\u5EA6\u6E10\u53D8\n if(u_opacitylinear > 0.0) {\n outputColor.a *= u_opacitylinear_dir > 0.0 ? (1.0 - v_barLinearZ): v_barLinearZ;\n }\n\n // picking\n if(u_pickLight > 0.0) {\n outputColor = filterColorAlpha(outputColor, v_lightWeight);\n } else {\n outputColor = filterColor(outputColor);\n }\n}\n',triangulation:_.PointExtrudeTriangulation,depth:{enable:!0},defines:n.getDefines(),inject:n.getInject(),cull:{enable:!0,face:h.gl.FRONT},blend:n.getBlend()}))];})();}registerBuiltinAttributes(){this.styleAttributeService.registerStyleAttribute({name:"size",type:h.AttributeType.Attribute,descriptor:{name:"a_Size",shaderLocation:this.attributeLocation.SIZE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:3,update:n=>{let{size:r}=n;if(!r)return[2,2,2];{let n=[];return Array.isArray(r)&&(n=2===r.length?[r[0],r[0],r[1]]:r),Array.isArray(r)||(n=[r,r,r]),n;}}}}),this.styleAttributeService.registerStyleAttribute({name:"normal",type:h.AttributeType.Attribute,descriptor:{name:"a_Normal",shaderLocation:this.attributeLocation.NORMAL,buffer:{usage:h.gl.STATIC_DRAW,data:[],type:h.gl.FLOAT},size:3,update:(n,r,i,a,o)=>o}}),this.styleAttributeService.registerStyleAttribute({name:"pos",type:h.AttributeType.Attribute,descriptor:{name:"a_Pos",shaderLocation:this.attributeLocation.POS,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:3,update:n=>{let r=(0,g.calculateCentroid)(n.coordinates);return(0,b.lglt2xyz)([r[0],r[1]]);}}});}}var w=i("da755037"),S=o._(w),T=i("377bcc16"),A=o._(T);class C extends m.default{get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,SIZE:9,SHAPE:10,EXTRUDE:11});}getCommonUniformsInfo(){let{strokeOpacity:n=1,strokeWidth:r=0,blend:i,blur:a=0}=this.layer.getLayerConfig();return this.layer.getLayerConfig(),this.getUniformsBufferInfo({u_additive:"additive"===i?1:0,u_stroke_opacity:n,u_stroke_width:r,u_blur:a});}initModels(){var n=this;return(0,l.default)(function*(){return n.initUniformsBuffer(),n.buildModels();})();}buildModels(){var n=this;return(0,l.default)(function*(){return n.layer.triangulation=_.GlobelPointFillTriangulation,[(yield n.layer.buildLayerModel({moduleName:"pointEarthFill",vertexShader:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\nlayout(location = ATTRIBUTE_LOCATION_SHAPE) in float a_Shape;\nlayout(location = ATTRIBUTE_LOCATION_EXTRUDE) in vec3 a_Extrude;\n\nlayout(std140) uniform commonUniform {\n float u_additive;\n float u_stroke_opacity : 1;\n float u_stroke_width : 2;\n float u_blur : 0.0;\n};\nout vec4 v_data;\nout vec4 v_color;\nout float v_radius;\n\n#pragma include "projection"\n#pragma include "picking"\n\n\nvoid main() {\n vec3 extrude = a_Extrude;\n float shape_type = a_Shape;\n /*\n * setPickingSize \u8BBE\u7F6E\u62FE\u53D6\u5927\u5C0F\n */\n float newSize = setPickingSize(a_Size);\n // float newSize = setPickingSize(a_Size) * 0.00001038445708445579;\n\n // unpack color(vec2)\n v_color = a_Color;\n\n // radius(16-bit)\n v_radius = newSize;\n\n // anti-alias\n // float antialiased_blur = -max(u_blur, antialiasblur);\n float antialiasblur = -max(2.0 / u_DevicePixelRatio / newSize, u_blur);\n\n // TODP: /abs(extrude.x) \u662F\u4E3A\u4E86\u517C\u5BB9\u5730\u7403\u6A21\u5F0F\n v_data = vec4(extrude.x/abs(extrude.x), extrude.y/abs(extrude.y), antialiasblur,shape_type);\n\n gl_Position = u_ViewProjectionMatrix * vec4(a_Position + extrude * newSize * 0.1 + vec3(u_offsets,0.0), 1.0);\n\n setPickingColor(a_PickingColor);\n}\n',fragmentShader:"in vec4 v_data;\nin vec4 v_color;\nin float v_radius;\n\nlayout(std140) uniform commonUniform {\n float u_additive;\n float u_stroke_opacity : 1;\n float u_stroke_width : 2;\n float u_blur : 0.0;\n};\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\n\nout vec4 outputColor;\n\nvoid main() {\n int shape = int(floor(v_data.w + 0.5));\n\n vec4 strokeColor = u_stroke == vec4(0.0) ? v_color : u_stroke;\n\n lowp float antialiasblur = v_data.z;\n float r = v_radius / (v_radius + u_stroke_width);\n\n float outer_df;\n float inner_df;\n // 'circle', 'triangle', 'square', 'pentagon', 'hexagon', 'octogon', 'hexagram', 'rhombus', 'vesica'\n if (shape == 0) {\n outer_df = sdCircle(v_data.xy, 1.0);\n inner_df = sdCircle(v_data.xy, r);\n } else if (shape == 1) {\n outer_df = sdEquilateralTriangle(1.1 * v_data.xy);\n inner_df = sdEquilateralTriangle(1.1 / r * v_data.xy);\n } else if (shape == 2) {\n outer_df = sdBox(v_data.xy, vec2(1.));\n inner_df = sdBox(v_data.xy, vec2(r));\n } else if (shape == 3) {\n outer_df = sdPentagon(v_data.xy, 0.8);\n inner_df = sdPentagon(v_data.xy, r * 0.8);\n } else if (shape == 4) {\n outer_df = sdHexagon(v_data.xy, 0.8);\n inner_df = sdHexagon(v_data.xy, r * 0.8);\n } else if (shape == 5) {\n outer_df = sdOctogon(v_data.xy, 1.0);\n inner_df = sdOctogon(v_data.xy, r);\n } else if (shape == 6) {\n outer_df = sdHexagram(v_data.xy, 0.52);\n inner_df = sdHexagram(v_data.xy, r * 0.52);\n } else if (shape == 7) {\n outer_df = sdRhombus(v_data.xy, vec2(1.0));\n inner_df = sdRhombus(v_data.xy, vec2(r));\n } else if (shape == 8) {\n outer_df = sdVesica(v_data.xy, 1.1, 0.8);\n inner_df = sdVesica(v_data.xy, r * 1.1, r * 0.8);\n }\n\n if(outer_df > antialiasblur + 0.018) discard;\n\n float opacity_t = smoothstep(0.0, antialiasblur, outer_df);\n\n float color_t = u_stroke_width < 0.01 ? 0.0 : smoothstep(\n antialiasblur,\n 0.0,\n inner_df\n );\n\n if(u_stroke_width < 0.01) {\n outputColor = vec4(v_color.rgb, v_color.a * u_opacity);\n } else {\n outputColor = mix(vec4(v_color.rgb, v_color.a * u_opacity), strokeColor * u_stroke_opacity, color_t);\n }\n\n if(u_additive > 0.0) {\n outputColor *= opacity_t;\n outputColor = filterColorAlpha(outputColor, outputColor.a);\n } else {\n outputColor.a *= opacity_t;\n outputColor = filterColor(outputColor);\n }\n}\n",triangulation:_.GlobelPointFillTriangulation,defines:n.getDefines(),inject:n.getInject(),depth:{enable:!0},blend:n.getBlend()}))];})();}animateOption2Array(n){return[n.enable?0:1,n.speed||1,n.rings||3,0];}registerBuiltinAttributes(){this.styleAttributeService.registerStyleAttribute({name:"extrude",type:h.AttributeType.Attribute,descriptor:{name:"a_Extrude",shaderLocation:this.attributeLocation.EXTRUDE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:3,update:(n,r,i,a)=>{let[o,s,l]=i,u=A.fromValues(0,0,1),c=A.fromValues(o,0,l),f=o>=0?A.angle(u,c):2*Math.PI-A.angle(u,c),d=2*Math.PI-Math.asin(s/100),h=S.create();S.rotateY(h,h,f),S.rotateX(h,h,d);let p=A.fromValues(1,1,0);A.transformMat4(p,p,h),A.normalize(p,p);let m=A.fromValues(-1,1,0);A.transformMat4(m,m,h),A.normalize(m,m);let g=A.fromValues(-1,-1,0);A.transformMat4(g,g,h),A.normalize(g,g);let v=A.fromValues(1,-1,0);A.transformMat4(v,v,h),A.normalize(v,v);let y=[...p,...m,...g,...v],_=a%4*3;return[y[_],y[_+1],y[_+2]];}}}),this.styleAttributeService.registerStyleAttribute({name:"size",type:h.AttributeType.Attribute,descriptor:{name:"a_Size",shaderLocation:this.attributeLocation.SIZE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:1,update:n=>{let{size:r=5}=n;return Array.isArray(r)?[r[0]]:[r];}}}),this.styleAttributeService.registerStyleAttribute({name:"shape",type:h.AttributeType.Attribute,descriptor:{name:"a_Shape",shaderLocation:this.attributeLocation.SHAPE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:1,update:n=>{let{shape:r=2}=n;return[this.layer.getLayerConfig().shape2d.indexOf(r)];}}});}}var O=i("991309e4"),M=a._(O),R=i("c0d77826"),P=a._(R),k=i("07cf43fc");class I extends m.default{constructor(...n){super(...n),(0,c.default)(this,"meter2coord",1),(0,c.default)(this,"texture",void 0),(0,c.default)(this,"isMeter",!1),(0,c.default)(this,"radian",0),(0,c.default)(this,"updateTexture",()=>{let{createTexture2D:n}=this.rendererService;if(this.texture){this.texture.update({data:this.iconService.getCanvas(),mag:"linear",min:"linear mipmap nearest",mipmap:!0}),this.layerService.throttleRenderLayers();return;}this.texture=n({data:this.iconService.getCanvas(),mag:h.gl.LINEAR,min:h.gl.LINEAR_MIPMAP_LINEAR,premultiplyAlpha:!1,width:1024,height:this.iconService.canvasHeight||128,mipmap:!0}),this.textures=[this.texture];});}get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,SIZE:9,EXTRUDE:10,UV:11});}getCommonUniformsInfo(){let{raisingHeight:n=0,heightfixed:r=!1,unit:i="pixel"}=this.layer.getLayerConfig();if(this.rendererService.getDirty()){var a;null===(a=this.texture)||void 0===a||a.bind();}let o={u_textSize:[1024,this.iconService.canvasHeight||128],u_heightfixed:Number(r),u_raisingHeight:Number(n),u_size_unit:k.SizeUnitType[i]};return this.getUniformsBufferInfo(o);}getAttribute(){return this.styleAttributeService.createAttributesAndIndices(this.layer.getEncodedData(),_.PointFillTriangulation);}initModels(){var n=this;return(0,l.default)(function*(){return n.iconService.on("imageUpdate",n.updateTexture),n.updateTexture(),n.buildModels();})();}buildModels(){var n=this;return(0,l.default)(function*(){return n.initUniformsBuffer(),[(yield n.layer.buildLayerModel({moduleName:"pointFillImage",vertexShader:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\nlayout(location = ATTRIBUTE_LOCATION_EXTRUDE) in vec3 a_Extrude;\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_Uv;\n\nlayout(std140) uniform commonUniform {\n vec2 u_textSize;\n float u_heightfixed;\n float u_raisingHeight;\n float u_size_unit;\n};\n\nout vec2 v_uv;\nout vec2 v_Iconuv;\nout float v_opacity;\n\n#pragma include "projection"\n#pragma include "picking"\n#pragma include "rotation_2d"\n\nvoid main() {\n vec3 extrude = a_Extrude;\n v_uv = (a_Extrude.xy + 1.0) / 2.0;\n v_uv.y = 1.0 - v_uv.y;\n v_Iconuv = a_Uv;\n v_opacity = opacity;\n float newSize = a_Size;\n if (u_size_unit == 1.0) {\n newSize = newSize * u_PixelsPerMeter.z;\n }\n\n // vec2 offset = (u_RotateMatrix * extrude.xy * (a_Size) + textrueOffsets);\n vec2 offset = extrude.xy * newSize + offsets;\n\n offset = rotate_matrix(offset, rotation);\n\n offset = project_pixel(offset);\n\n vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0), a_Position64Low);\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n',fragmentShader:'in vec2 v_uv;// \u672C\u8EAB\u7684 uv \u5750\u6807\nin vec2 v_Iconuv;\nin float v_opacity;\nout vec4 outputColor;\n\nuniform sampler2D u_texture;\nlayout(std140) uniform commonUniform {\n vec2 u_textSize;\n float u_heightfixed: 0.0;\n float u_raisingHeight: 0.0;\n float u_size_unit;\n};\n\n#pragma include "scene_uniforms"\n#pragma include "sdf_2d"\n#pragma include "picking"\n\nvoid main() {\n vec2 pos = v_Iconuv / u_textSize + v_uv / u_textSize * 64.;\n outputColor = texture(SAMPLER_2D(u_texture), pos);\n outputColor.a *= v_opacity;\n outputColor = filterColor(outputColor);\n}\n',triangulation:_.PointFillTriangulation,depth:{enable:!1},defines:n.getDefines(),inject:n.getInject(),cull:{enable:!0,face:h.gl.FRONT}}))];})();}clearModels(){var n;this.iconService.off("imageUpdate",this.updateTexture),null===(n=this.texture)||void 0===n||n.destroy();}registerBuiltinAttributes(){this.registerPosition64LowAttribute(),this.styleAttributeService.registerStyleAttribute({name:"uv",type:h.AttributeType.Attribute,descriptor:{name:"a_Uv",shaderLocation:this.attributeLocation.UV,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:2,update:n=>{let r=this.iconService.getIconMap(),{shape:i}=n,{x:a,y:o}=r[i]||{x:-64,y:-64};return[a,o];}}}),this.styleAttributeService.registerStyleAttribute({name:"extrude",type:h.AttributeType.Attribute,descriptor:{name:"a_Extrude",shaderLocation:this.attributeLocation.EXTRUDE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:3,update:(n,r,i,a)=>{let o=[1,1,0,-1,1,0,-1,-1,0,1,-1,0],s=a%4*3;return[o[s],o[s+1],o[s+2]];}}}),this.styleAttributeService.registerStyleAttribute({name:"size",type:h.AttributeType.Attribute,descriptor:{name:"a_Size",shaderLocation:this.attributeLocation.SIZE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:1,update:n=>{let{size:r=5}=n;return Array.isArray(r)?[r[0]]:[r];}}});}}var L=i("001de73b"),N=a._(L),D=i("9063dcee"),F=a._(D);class B extends m.default{get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,SIZE:9,EXTRUDE:10});}getCommonUniformsInfo(){let{blend:n,speed:r=1,unit:i="pixel"}=this.layer.getLayerConfig(),a={u_additive:"additive"===n?1:0,u_size_unit:k.SizeUnitType[i],u_speed:r,u_time:this.layer.getLayerAnimateTime()};return this.getUniformsBufferInfo(a);}getAnimateUniforms(){return{};}getAttribute(){return this.styleAttributeService.createAttributesAndIndices(this.layer.getEncodedData(),_.PointFillTriangulation);}initModels(){var n=this;return(0,l.default)(function*(){return n.buildModels();})();}buildModels(){var n=this;return(0,l.default)(function*(){return n.initUniformsBuffer(),[(yield n.layer.buildLayerModel({moduleName:"pointRadar",vertexShader:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\nlayout(location = ATTRIBUTE_LOCATION_EXTRUDE) in vec3 a_Extrude;\n\nlayout(std140) uniform commonUniorm {\n float u_additive;\n float u_size_unit;\n float u_speed: 1.0;\n float u_time;\n};\n\nout vec4 v_data;\nout vec4 v_color;\nout float v_radius;\nout vec2 v_extrude;\n\n#pragma include "projection"\n#pragma include "picking"\n\nvoid main() {\n float newSize = setPickingSize(a_Size);\n\n float time = u_time * u_speed;\n mat2 rotateMatrix = mat2(\n cos(time), sin(time),\n -sin(time), cos(time)\n );\n v_extrude = rotateMatrix * a_Extrude.xy;\n\n v_color = a_Color;\n v_color.a *= opacity;\n\n float blur = 0.0;\n float antialiasblur = -max(2.0 / u_DevicePixelRatio / a_Size, blur);\n\n if(u_size_unit == 1.) {\n newSize = newSize * u_PixelsPerMeter.z;\n }\n v_radius = newSize;\n\n vec2 offset = (a_Extrude.xy * (newSize));\n\n offset = project_pixel(offset);\n\n v_data = vec4(a_Extrude.x, a_Extrude.y, antialiasblur, -1.0);\n\n vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0), a_Position64Low);\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n\n setPickingColor(a_PickingColor);\n}\n',fragmentShader:'\nlayout(std140) uniform commonUniorm{\n float u_additive;\n float u_size_unit;\n float u_speed: 1.0;\n float u_time;\n};\nin vec4 v_data;\nin vec4 v_color;\nin float v_radius;\nin vec2 v_extrude;\n#pragma include "sdf_2d"\n#pragma include "picking"\n\nout vec4 outputColor;\n\nvoid main() {\n\n lowp float antialiasblur = v_data.z;\n float r = v_radius / (v_radius);\n\n float outer_df = sdCircle(v_data.xy, 1.0);\n float inner_df = sdCircle(v_data.xy, r);\n\n float opacity_t = smoothstep(0.0, antialiasblur, outer_df);\n\n outputColor = vec4(v_color.rgb, v_color.a);\n\n if(u_additive > 0.0) {\n outputColor *= opacity_t;\n } else {\n outputColor.a *= opacity_t;\n }\n\n if(outputColor.a > 0.0) {\n outputColor = filterColor(outputColor);\n }\n\n vec2 extrude = v_extrude;\n vec2 dir = normalize(extrude);\n vec2 baseDir = vec2(1.0, 0.0);\n float pi = 3.14159265359;\n float flag = sign(dir.y);\n float rades = dot(dir, baseDir);\n float radar_v = (flag - 1.0) * -0.5 * acos(rades)/pi;\n // simple AA\n if(radar_v > 0.99) {\n radar_v = 1.0 - (radar_v - 0.99)/0.01;\n }\n\n outputColor.a *= radar_v;\n}\n',triangulation:_.PointFillTriangulation,defines:n.getDefines(),inject:n.getInject(),depth:{enable:!1}}))];})();}animateOption2Array(n){return[n.enable?0:1,n.speed||1,n.rings||3,0];}registerBuiltinAttributes(){this.registerPosition64LowAttribute(),this.styleAttributeService.registerStyleAttribute({name:"extrude",type:h.AttributeType.Attribute,descriptor:{name:"a_Extrude",shaderLocation:this.attributeLocation.EXTRUDE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:3,update:(n,r,i,a)=>{let o=[1,1,0,-1,1,0,-1,-1,0,1,-1,0],s=a%4*3;return[o[s],o[s+1],o[s+2]];}}}),this.styleAttributeService.registerStyleAttribute({name:"size",type:h.AttributeType.Attribute,descriptor:{shaderLocation:this.attributeLocation.SIZE,name:"a_Size",buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:1,update:n=>{let{size:r=5}=n;return Array.isArray(r)?[r[0]]:[r];}}});}}var j=i("21da3e32"),z=a._(j);let U={fillImage:I,fill:P.default,radar:B,image:N.default,normal:F.default,simplePoint:y,extrude:M.default,text:z.default,earthFill:C,earthExtrude:E};class V extends d.default{constructor(...n){super(...n),(0,c.default)(this,"type","PointLayer"),(0,c.default)(this,"enableShaderEncodeStyles",["stroke","offsets","opacity","rotation"]),(0,c.default)(this,"enableDataEncodeStyles",["textOffset","textAnchor"]),(0,c.default)(this,"defaultSourceConfig",{data:[],options:{parser:{type:"json",x:"lng",y:"lat"}}});}buildModels(){var n=this;return(0,l.default)(function*(){let r=n.getModelType();n.layerModel&&n.layerModel.clearModels(),n.layerModel=new U[r](n),yield n.initLayerModels();})();}rebuildModels(){var n=this;return(0,l.default)(function*(){yield n.buildModels();})();}getModelTypeWillEmptyData(){if(this.shapeOption){let{field:n,values:r}=this.shapeOption,{shape2d:i}=this.getLayerConfig(),a=this.iconService.getIconMap();if(n&&(null==i?void 0:i.indexOf(n))!==-1)return"fill";if("text"===r)return"text";if(r&&r instanceof Array){for(let n of r)if("string"==typeof n&&a.hasOwnProperty(n))return"image";}}return"normal";}getDefaultConfig(){return({fillImage:{},normal:{blend:"additive"},radar:{},simplePoint:{},fill:{blend:"normal"},extrude:{},image:{},text:{blend:"normal"},tile:{},tileText:{},earthFill:{},earthExtrude:{}})[this.getModelType()];}getModelType(){let n=this.getEncodedData(),{shape2d:r,shape3d:i,billboard:a=!0}=this.getLayerConfig(),o=this.iconService.getIconMap(),s=n.find(n=>n.hasOwnProperty("shape"));if(!s)return this.getModelTypeWillEmptyData();{let n=s.shape;return"dot"===n?"normal":"simple"===n?"simplePoint":"radar"===n?"radar":"fillImage"===this.layerType||!1===a?"fillImage":(null==r?void 0:r.indexOf(n))!==-1?"GLOBEL"===this.mapService.version?"earthFill":"fill":(null==i?void 0:i.indexOf(n))!==-1?"GLOBEL"===this.mapService.version?"earthExtrude":"extrude":o.hasOwnProperty(n)?"image":"text";}}}},"1c5a6150":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"treeDataTransform",{enumerable:!0,get:function(){return y;}});var a=i("777fffbe"),o=a._(i("1daaa764")),s=a._(i("da8e1cea")),l=a._(i("4c1ff8e6")),u=a._(i("7b8bcee7")),c=a._(i("48fdc2f5")),f=a._(i("1df9042c")),d=a._(i("a96a4c71")),h=a._(i("01c1137e")),p=a._(i("42fc1f40")),m=a._(i("3efd64b7")),g=a._(i("f0a50269")),v=i("cbed5754");function y(n,r,i){var a;let{value:y}=i,_=function(n,r){let i={treemapBinary:f.default,treemapDice:d.default,treemapSlice:h.default,treemapSliceDice:p.default,treemapSquarify:m.default,treemapResquarify:g.default},a="treemapSquarify"===n?i[n].ratio(r):i[n];if(!a)throw TypeError("Invalid tile method!");return a;}(r.tile,r.ratio),b=(a=r.path,Array.isArray(n)?"function"==typeof a?(0,l.default)().path(a)(n):(0,l.default)()(n):(0,u.default)(n));(0,o.default)(n)?function n(r){let i=(0,s.default)(r,["data","name"]);i.replaceAll&&(r.path=i.replaceAll(".","/").split("/")),r.children&&r.children.forEach(r=>{n(r);});}(b):function n(r,i=[r.data.name]){r.id=r.id||r.data.name,r.path=i,r.children&&r.children.forEach(a=>{a.id=`${r.id}/${a.data.name}`,a.path=[...i,a.data.name],n(a,a.path);});}(b),y?b.sum(n=>r.ignoreParentValue&&n.children?0:(0,v.field)(y)(n)).sort(r.sort):b.count(),(0,c.default)().tile(_).size(r.size).round(r.round).paddingInner(r.paddingInner).paddingOuter(r.paddingOuter).paddingTop(r.paddingTop).paddingRight(r.paddingRight).paddingBottom(r.paddingBottom).paddingLeft(r.paddingLeft)(b);let x=b.descendants().map(n=>Object.assign(n,{id:n.id.replace(/^\//,""),x:[n.x0,n.x1],y:[n.y0,n.y1]}));return[x.filter("function"==typeof r.layer?r.layer:n=>n.height===r.layer),x];}},"1cf5f081":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{ARRAY_TYPE:function(){return o;},EPSILON:function(){return a;}});var a=1e-6,o="undefined"!=typeof Float32Array?Float32Array:Array;Math.hypot||(Math.hypot=function(){for(var n=0,r=arguments.length;r--;)n+=arguments[r]*arguments[r];return Math.sqrt(n);});},"1d1b11bd":function(n,r,i){"use strict";function a(n){return null==n?null:o(n);}function o(n){if("function"!=typeof n)throw Error();return n;}i.d(r,"__esModule",{value:!0}),i.e(r,{optional:function(){return a;},required:function(){return o;}});},"1d3bdddd":function(n,r,i){n.exports=function(n,r){for(var i=-1,a=null==n?0:n.length,o=0,s=[];++i=i-1){var d=u[r];d.x0=o,d.y0=s,d.x1=l,d.y1=c;return;}for(var h=f[r],p=a/2+h,m=r+1,g=i-1;m>>1;f[v]c-s){var b=a?(o*_+l*y)/a:l;n(r,m,y,o,s,b,c),n(m,i,_,b,s,l,c);}else{var x=a?(s*_+c*y)/a:c;n(r,m,y,o,s,l,x),n(m,i,_,o,x,l,c);}}(0,c,n.value,r,i,a,o);}i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});},"1e224d4e":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"ModalForm",{enumerable:!0,get:function(){return w;}});var a=i("777fffbe"),o=i("852bbaa9"),s=a._(i("23934e00")),l=a._(i("9b84be4b")),u=a._(i("e4870cf0")),c=a._(i("ee64167d")),f=a._(i("613f75ca")),d=i("4175825c"),h=a._(i("a5a99096")),p=a._(i("be348412")),m=a._(i("ce03fd86")),g=i("dd8ccb36"),v=i("a275200c"),y=o._(i("609f48be")),_=i("792e90bc"),b=i("cd1e34ba"),x=i("dac8af92"),E=["children","trigger","onVisibleChange","onOpenChange","modalProps","onFinish","submitTimeout","title","width","visible","open"];function w(n){var r,i,a,o,w=n.children,S=n.trigger,T=n.onVisibleChange,A=n.onOpenChange,C=n.modalProps,O=n.onFinish,M=n.submitTimeout,R=n.title,P=n.width,k=n.visible,I=n.open,L=(0,f.default)(n,E);(0,v.noteOnce)(!L.footer||!(null!=C&&C.footer),"ModalForm \u662F\u4E00\u4E2A ProForm \u7684\u7279\u6B8A\u5E03\u5C40\uFF0C\u5982\u679C\u60F3\u81EA\u5B9A\u4E49\u6309\u94AE\uFF0C\u8BF7\u4F7F\u7528 submit.render \u81EA\u5B9A\u4E49\u3002");var N=(0,y.useContext)(h.default.ConfigContext),D=(0,y.useState)([]),F=(0,c.default)(D,2)[1],B=(0,y.useState)(!1),j=(0,c.default)(B,2),z=j[0],U=j[1],V=(0,m.default)(!!k,{value:I||k,onChange:A||T}),G=(0,c.default)(V,2),H=G[0],W=G[1],X=(0,y.useRef)(null),q=(0,y.useCallback)(function(n){null===X.current&&n&&F([]),X.current=n;},[]),$=(0,y.useRef)(),Y=(0,y.useCallback)(function(){var n,r,i,a=null!==(n=null!==(r=L.form)&&void 0!==r?r:null===(i=L.formRef)||void 0===i?void 0:i.current)&&void 0!==n?n:$.current;a&&null!=C&&C.destroyOnClose&&a.resetFields();},[null==C?void 0:C.destroyOnClose,L.form,L.formRef]);(0,y.useImperativeHandle)(L.formRef,function(){return $.current;},[$.current]),(0,y.useEffect)(function(){(I||k)&&(null==A||A(!0),null==T||T(!0));},[k,I]);var Z=(0,y.useMemo)(function(){var n;return S?y.default.cloneElement(S,(0,u.default)((0,u.default)({key:"trigger"},S.props),{},{onClick:(n=(0,l.default)((0,s.default)().mark(function n(r){var i,a;return(0,s.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:W(!H),null===(i=S.props)||void 0===i||null===(a=i.onClick)||void 0===a||a.call(i,r);case 2:case"end":return n.stop();}},n);})),function(r){return n.apply(this,arguments);})})):null;},[W,S,H]),K=(0,y.useMemo)(function(){var n,r,i,a,o,s,l;return!1!==L.submitter&&(0,g.merge)({searchConfig:{submitText:null!==(n=null!==(r=null==C?void 0:C.okText)&&void 0!==r?r:null===(i=N.locale)||void 0===i||null===(i=i.Modal)||void 0===i?void 0:i.okText)&&void 0!==n?n:"\u786E\u8BA4",resetText:null!==(a=null!==(o=null==C?void 0:C.cancelText)&&void 0!==o?o:null===(s=N.locale)||void 0===s||null===(s=s.Modal)||void 0===s?void 0:s.cancelText)&&void 0!==a?a:"\u53D6\u6D88"},resetButtonProps:{preventDefault:!0,disabled:M?z:void 0,onClick:function(n){var r;W(!1),null==C||null===(r=C.onCancel)||void 0===r||r.call(C,n);}}},null!==(l=L.submitter)&&void 0!==l?l:{});},[null===(a=N.locale)||void 0===a||null===(a=a.Modal)||void 0===a?void 0:a.cancelText,null===(o=N.locale)||void 0===o||null===(o=o.Modal)||void 0===o?void 0:o.okText,C,L.submitter,W,z,M]),Q=(0,y.useCallback)(function(n,r){return(0,x.jsxs)(x.Fragment,{children:[n,X.current&&r?(0,x.jsx)(y.default.Fragment,{children:(0,_.createPortal)(r,X.current)},"submitter"):r]});},[]),J=(0,y.useCallback)((r=(0,l.default)((0,s.default)().mark(function n(r){var i,a,o;return(0,s.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return i=null==O?void 0:O(r),M&&i instanceof Promise&&(U(!0),a=setTimeout(function(){return U(!1);},M),i.finally(function(){clearTimeout(a),U(!1);})),n.next=4,i;case 4:return(o=n.sent)&&W(!1),n.abrupt("return",o);case 7:case"end":return n.stop();}},n);})),function(n){return r.apply(this,arguments);}),[O,W,M]),ee=(0,d.openVisibleCompatible)(H);return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(p.default,(0,u.default)((0,u.default)((0,u.default)({title:R,width:P||800},C),ee),{},{onCancel:function(n){var r;M&&z||(W(!1),null==C||null===(r=C.onCancel)||void 0===r||r.call(C,n));},afterClose:function(){var n;Y(),H&&W(!1),null==C||null===(n=C.afterClose)||void 0===n||n.call(C);},footer:!1!==L.submitter?(0,x.jsx)("div",{ref:q,style:{display:"flex",justifyContent:"flex-end"}}):null,children:(0,x.jsx)(b.BaseForm,(0,u.default)((0,u.default)({formComponentType:"ModalForm",layout:"vertical"},L),{},{onInit:function(n,r){var i;L.formRef&&(L.formRef.current=r),null==L||null===(i=L.onInit)||void 0===i||i.call(L,n,r),$.current=r;},formRef:$,submitter:K,onFinish:(i=(0,l.default)((0,s.default)().mark(function n(r){var i;return(0,s.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,J(r);case 2:return i=n.sent,n.abrupt("return",i);case 4:case"end":return n.stop();}},n);})),function(n){return i.apply(this,arguments);}),contentRender:Q,children:w}))})),Z]});}},"1e27b7a9":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return p;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("7cfeda15"),l=a._(s),u=i("609f48be"),c=o._(u),f={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M942.2 486.2Q889.47 375.11 816.7 305l-50.88 50.88C807.31 395.53 843.45 447.4 874.7 512 791.5 684.2 673.4 766 512 766q-72.67 0-133.87-22.38L323 798.75Q408 838 512 838q288.3 0 430.2-300.3a60.29 60.29 0 000-51.5zm-63.57-320.64L836 122.88a8 8 0 00-11.32 0L715.31 232.2Q624.86 186 512 186q-288.3 0-430.2 300.3a60.3 60.3 0 000 51.5q56.69 119.4 136.5 191.41L112.48 835a8 8 0 000 11.31L155.17 889a8 8 0 0011.31 0l712.15-712.12a8 8 0 000-11.32zM149.3 512C232.6 339.8 350.7 258 512 258c54.54 0 104.13 9.36 149.12 28.39l-70.3 70.3a176 176 0 00-238.13 238.13l-83.42 83.42C223.1 637.49 183.3 582.28 149.3 512zm246.7 0a112.11 112.11 0 01146.2-106.69L401.31 546.2A112 112 0 01396 512z"}},{tag:"path",attrs:{d:"M508 624c-3.46 0-6.87-.16-10.25-.47l-52.82 52.82a176.09 176.09 0 00227.42-227.42l-52.82 52.82c.31 3.38.47 6.79.47 10.25a111.94 111.94 0 01-112 112z"}}]},name:"eye-invisible",theme:"outlined"},d=i("887aaf6c"),h=a._(d),p=c.forwardRef(function(n,r){return c.createElement(h.default,(0,l.default)({},n,{ref:r,icon:f}));});},"1e27b829":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{createColumnOf:function(){return d;},initializeMark:function(){return f;}});var a=i("1f4e7f4b"),o=i("f5373dff"),s=i("c4368857"),l=i("7d5002fc"),u=this&&this.__awaiter||function(n,r,i,a){return new(i||(i=Promise))(function(o,s){function l(n){try{c(a.next(n));}catch(n){s(n);}}function u(n){try{c(a.throw(n));}catch(n){s(n);}}function c(n){var r;n.done?o(n.value):((r=n.value)instanceof i?r:new i(function(n){n(r);})).then(l,u);}c((a=a.apply(n,r||[])).next());});},c=this&&this.__rest||function(n,r){var i={};for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&0>r.indexOf(a)&&(i[a]=n[a]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,a=Object.getOwnPropertySymbols(n);or.indexOf(a[o])&&Object.prototype.propertyIsEnumerable.call(n,a[o])&&(i[a[o]]=n[a[o]]);return i;};function f(n,r,i){return u(this,void 0,void 0,function*(){let[f,d]=yield function(n,r,i){return u(this,void 0,void 0,function*(){let{library:a}=i,[o]=(0,s.useLibrary)("transform",a),{preInference:u=[],postInference:c=[]}=r,{transform:f=[]}=n,d=[l.applyDefaults,l.applyDataTransform,l.flatEncode,l.inferChannelsType,l.maybeVisualChannel,l.extractColumns,l.maybeArrayField,l.maybeNonAnimate,l.addGuideToScale,l.normalizeTooltip,...u.map(o),...f.map(o),...c.map(o),l.extractTooltip],h=[],p=n;for(let n of d)[h,p]=yield n(h,p,i);return[h,p];});}(n,r,i),{encode:h,scale:p,data:m,tooltip:g}=d;if(!1===Array.isArray(m))return null;let{channels:v}=r,y=(0,a.rollups)(Object.entries(h).filter(([,n])=>(0,o.defined)(n)),n=>n.map(([n,r])=>Object.assign({name:n},r)),([n])=>{var r;let i=null===(r=/([^\d]+)\d*$/.exec(n))||void 0===r?void 0:r[1],a=v.find(n=>n.name===i);return(null==a?void 0:a.independent)?n:i;}),_=v.filter(n=>{let{name:r,required:i}=n;if(y.find(([n])=>n===r))return!0;if(i)throw Error(`Missing encoding for channel: ${r}.`);return!1;}).flatMap(n=>{let{name:r,scale:i,scaleKey:a,range:o,quantitative:s,ordinal:l}=n;return y.filter(([n])=>n.startsWith(r)).map(([n,r],u)=>{let f=r.some(n=>n.visual),d=r.some(n=>n.constant),h=p[n]||{},{independent:m=!1,key:g=a||n,type:v=d?"constant":f?"identity":i}=h,y=c(h,["independent","key","type"]),_="constant"===v;return{name:n,values:r,scaleKey:m||_?Symbol("independent"):g,scale:Object.assign(Object.assign({type:v,range:_?void 0:o},y),{quantitative:s,ordinal:l})};});});return[d,Object.assign(Object.assign({},r),{index:f,channels:_,tooltip:g})];});}function d(n){let[r]=(0,s.useLibrary)("encode",n);return(n,i)=>void 0===i||void 0===n?null:Object.assign(Object.assign({},i),{type:"column",value:r(i)(n),field:function(n){let{type:r,value:i}=n;return"field"===r&&"string"==typeof i?i:null;}(i)});}},"1f338b89":function(n,r,i){"use strict";function a(n){return"number"==typeof n;}i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});},"1f4e7f4b":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return f;},groups:function(){return d;},rollup:function(){return h;},rollups:function(){return p;}});var a=i("777fffbe");class o extends Map{constructor(n,r=l){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),null!=n)for(let[r,i]of n)this.set(r,i);}get(n){return super.get(s(this,n));}has(n){return super.has(s(this,n));}set(n,r){return super.set(function({_intern:n,_key:r},i){let a=r(i);return n.has(a)?n.get(a):(n.set(a,i),i);}(this,n),r);}delete(n){return super.delete(function({_intern:n,_key:r},i){let a=r(i);return n.has(a)&&(i=n.get(a),n.delete(a)),i;}(this,n));}}function s({_intern:n,_key:r},i){let a=r(i);return n.has(a)?n.get(a):i;}function l(n){return null!==n&&"object"==typeof n?n.valueOf():n;}var u=i("496cbcb8"),c=a._(u);function f(n,...r){return m(n,c.default,c.default,r);}function d(n,...r){return m(n,Array.from,c.default,r);}function h(n,r,...i){return m(n,c.default,r,i);}function p(n,r,...i){return m(n,Array.from,r,i);}function m(n,r,i,a){return function n(s,l){if(l>=a.length)return i(s);let u=new o,c=a[l++],f=-1;for(let n of s){let r=c(n,++f,s),i=u.get(r);i?i.push(n):u.set(r,[n]);}for(let[r,i]of u)u.set(r,n(i,l));return r(u);}(n,0);}},"1f547793":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return o;}});var a=Object.prototype,o=function(n){var r=n&&n.constructor;return n===("function"==typeof r&&r.prototype||a);};},"1f9d5621":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return l;}});var a=i("777fffbe"),o=a._(i("83684c30")),s=a._(i("62a7c4f2"));function l(n){return(0,o.default)(n)?0:(0,s.default)(n)?n.length:Object.keys(n).length;}},"1fe7fa71":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{BaseInput:function(){return b;},default:function(){return L;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("e4870cf0"),l=a._(s),u=i("7cfeda15"),c=a._(u),f=i("a854094b"),d=a._(f),h=i("99c0cd4c"),p=a._(h),m=i("064ecd09"),g=a._(m),v=i("609f48be"),y=o._(v),_=i("8ccd78b4"),b=y.default.forwardRef(function(n,r){var i,a,o,s=n.inputElement,u=n.children,f=n.prefixCls,h=n.prefix,m=n.suffix,v=n.addonBefore,b=n.addonAfter,x=n.className,E=n.style,w=n.disabled,S=n.readOnly,T=n.focused,A=n.triggerFocus,C=n.allowClear,O=n.value,M=n.handleReset,R=n.hidden,P=n.classes,k=n.classNames,I=n.dataAttrs,L=n.styles,N=n.components,D=n.onClear,F=null!=u?u:s,B=(null==N?void 0:N.affixWrapper)||"span",j=(null==N?void 0:N.groupWrapper)||"span",z=(null==N?void 0:N.wrapper)||"span",U=(null==N?void 0:N.groupAddon)||"span",V=(0,y.useRef)(null),G=(0,_.hasPrefixSuffix)(n),H=(0,y.cloneElement)(F,{value:O,className:(0,g.default)(null===(i=F.props)||void 0===i?void 0:i.className,!G&&(null==k?void 0:k.variant))||null}),W=(0,y.useRef)(null);if(y.default.useImperativeHandle(r,function(){return{nativeElement:W.current||V.current};}),G){var X=null;if(C){var q=!w&&!S&&O,$="".concat(f,"-clear-icon"),Y="object"===(0,p.default)(C)&&null!=C&&C.clearIcon?C.clearIcon:"\u2716";X=y.default.createElement("button",{type:"button",tabIndex:-1,onClick:function(n){null==M||M(n),null==D||D();},onMouseDown:function(n){return n.preventDefault();},className:(0,g.default)($,(0,d.default)((0,d.default)({},"".concat($,"-hidden"),!q),"".concat($,"-has-suffix"),!!m))},Y);}var Z="".concat(f,"-affix-wrapper"),K=(0,g.default)(Z,(0,d.default)((0,d.default)((0,d.default)((0,d.default)((0,d.default)({},"".concat(f,"-disabled"),w),"".concat(Z,"-disabled"),w),"".concat(Z,"-focused"),T),"".concat(Z,"-readonly"),S),"".concat(Z,"-input-with-clear-btn"),m&&C&&O),null==P?void 0:P.affixWrapper,null==k?void 0:k.affixWrapper,null==k?void 0:k.variant),Q=(m||C)&&y.default.createElement("span",{className:(0,g.default)("".concat(f,"-suffix"),null==k?void 0:k.suffix),style:null==L?void 0:L.suffix},X,m);H=y.default.createElement(B,(0,c.default)({className:K,style:null==L?void 0:L.affixWrapper,onClick:function(n){var r;null!==(r=V.current)&&void 0!==r&&r.contains(n.target)&&(null==A||A());}},null==I?void 0:I.affixWrapper,{ref:V}),h&&y.default.createElement("span",{className:(0,g.default)("".concat(f,"-prefix"),null==k?void 0:k.prefix),style:null==L?void 0:L.prefix},h),H,Q);}if((0,_.hasAddon)(n)){var J="".concat(f,"-group"),ee="".concat(J,"-addon"),et="".concat(J,"-wrapper"),en=(0,g.default)("".concat(f,"-wrapper"),J,null==P?void 0:P.wrapper,null==k?void 0:k.wrapper),er=(0,g.default)(et,(0,d.default)({},"".concat(et,"-disabled"),w),null==P?void 0:P.group,null==k?void 0:k.groupWrapper);H=y.default.createElement(j,{className:er,ref:W},y.default.createElement(z,{className:en},v&&y.default.createElement(U,{className:ee},v),H,b&&y.default.createElement(U,{className:ee},b)));}return y.default.cloneElement(H,{className:(0,g.default)(null===(a=H.props)||void 0===a?void 0:a.className,x)||null,style:(0,l.default)((0,l.default)({},null===(o=H.props)||void 0===o?void 0:o.style),E),hidden:R});}),x=i("f1020fa4"),E=a._(x),w=i("ee64167d"),S=a._(w),T=i("613f75ca"),A=a._(T),C=i("ce03fd86"),O=a._(C),M=i("ddaa0afd"),R=a._(M),P=i("3cf89988"),k=a._(P),I=["autoComplete","onChange","onFocus","onBlur","onPressEnter","onKeyDown","onKeyUp","prefixCls","disabled","htmlSize","className","maxLength","suffix","showCount","count","type","classes","classNames","styles","onCompositionStart","onCompositionEnd"],L=(0,y.forwardRef)(function(n,r){var i,a=n.autoComplete,o=n.onChange,s=n.onFocus,u=n.onBlur,f=n.onPressEnter,h=n.onKeyDown,p=n.onKeyUp,m=n.prefixCls,v=void 0===m?"rc-input":m,x=n.disabled,w=n.htmlSize,T=n.className,C=n.maxLength,M=n.suffix,P=n.showCount,L=n.count,N=n.type,D=n.classes,F=n.classNames,B=n.styles,j=n.onCompositionStart,z=n.onCompositionEnd,U=(0,A.default)(n,I),V=(0,y.useState)(!1),G=(0,S.default)(V,2),H=G[0],W=G[1],X=(0,y.useRef)(!1),q=(0,y.useRef)(!1),$=(0,y.useRef)(null),Y=(0,y.useRef)(null),Z=function(n){$.current&&(0,_.triggerFocus)($.current,n);},K=(0,O.default)(n.defaultValue,{value:n.value}),Q=(0,S.default)(K,2),J=Q[0],ee=Q[1],et=null==J?"":String(J),en=(0,y.useState)(null),er=(0,S.default)(en,2),ei=er[0],ea=er[1],eo=(0,k.default)(L,P),es=eo.max||C,el=eo.strategy(et),eu=!!es&&el>es;(0,y.useImperativeHandle)(r,function(){var n;return{focus:Z,blur:function(){var n;null===(n=$.current)||void 0===n||n.blur();},setSelectionRange:function(n,r,i){var a;null===(a=$.current)||void 0===a||a.setSelectionRange(n,r,i);},select:function(){var n;null===(n=$.current)||void 0===n||n.select();},input:$.current,nativeElement:(null===(n=Y.current)||void 0===n?void 0:n.nativeElement)||$.current};}),(0,y.useEffect)(function(){q.current&&(q.current=!1),W(function(n){return(!n||!x)&&n;});},[x]);var ec=function(n,r,i){var a,s,l=r;if(!X.current&&eo.exceedFormatter&&eo.max&&eo.strategy(r)>eo.max)l=eo.exceedFormatter(r,{max:eo.max}),r!==l&&ea([(null===(a=$.current)||void 0===a?void 0:a.selectionStart)||0,(null===(s=$.current)||void 0===s?void 0:s.selectionEnd)||0]);else if("compositionEnd"===i.source)return;ee(l),$.current&&(0,_.resolveOnChange)($.current,n,o,l);};(0,y.useEffect)(function(){if(ei){var n;null===(n=$.current)||void 0===n||n.setSelectionRange.apply(n,(0,E.default)(ei));}},[ei]);var ef=eu&&"".concat(v,"-out-of-range");return y.default.createElement(b,(0,c.default)({},U,{prefixCls:v,className:(0,g.default)(T,ef),handleReset:function(n){ee(""),Z(),$.current&&(0,_.resolveOnChange)($.current,n,o);},value:et,focused:H,triggerFocus:Z,suffix:function(){var n=Number(es)>0;if(M||eo.show){var r=eo.showFormatter?eo.showFormatter({value:et,count:el,maxLength:es}):"".concat(el).concat(n?" / ".concat(es):"");return y.default.createElement(y.default.Fragment,null,eo.show&&y.default.createElement("span",{className:(0,g.default)("".concat(v,"-show-count-suffix"),(0,d.default)({},"".concat(v,"-show-count-has-suffix"),!!M),null==F?void 0:F.count),style:(0,l.default)({},null==B?void 0:B.count)},r),M);}return null;}(),disabled:x,classes:D,classNames:F,styles:B,ref:Y}),(i=(0,R.default)(n,["prefixCls","onPressEnter","addonBefore","addonAfter","prefix","suffix","allowClear","defaultValue","showCount","count","classes","htmlSize","styles","classNames","onClear"]),y.default.createElement("input",(0,c.default)({autoComplete:a},i,{onChange:function(n){ec(n,n.target.value,{source:"change"});},onFocus:function(n){W(!0),null==s||s(n);},onBlur:function(n){q.current&&(q.current=!1),W(!1),null==u||u(n);},onKeyDown:function(n){f&&"Enter"===n.key&&!q.current&&(q.current=!0,f(n)),null==h||h(n);},onKeyUp:function(n){"Enter"===n.key&&(q.current=!1),null==p||p(n);},className:(0,g.default)(v,(0,d.default)({},"".concat(v,"-disabled"),x),null==F?void 0:F.input),style:null==B?void 0:B.input,ref:$,size:w,type:void 0===N?"text":N,onCompositionStart:function(n){X.current=!0,null==j||j(n);},onCompositionEnd:function(n){X.current=!1,ec(n,n.currentTarget.value,{source:"compositionEnd"}),null==z||z(n);}}))));});},"202d5e21":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return P;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("7cfeda15"),l=a._(s),u=i("a854094b"),c=a._(u),f=i("e4870cf0"),d=a._(f),h=i("ee64167d"),p=a._(h),m=i("613f75ca"),g=a._(m),v=i("609f48be"),y=o._(v),_=i("064ecd09"),b=a._(_),x=i("ae8eb856"),E=a._(x),w=i("b7c8f320"),S=y.memo(function(n){for(var r=n.prefixCls,i=n.level,a=n.isStart,o=n.isEnd,s="".concat(r,"-indent-unit"),l=[],u=0;u0&&"read"!==K?(0,A.jsx)("div",{className:(0,_.default)("".concat(P,"-action"),(0,s.default)({},"".concat(P,"-action-small"),"small"===$),q),children:ed}):null,ep={name:X.name,field:F,index:B,record:null==j||null===(i=j.getFieldValue)||void 0===i?void 0:i.call(j,[Y.listName,z,F.name].filter(function(n){return void 0!==n;}).flat(1)),fields:N,operation:k,meta:D},em=(0,T.useGridHelpers)().grid,eg=(null==O?void 0:O(el,ep))||el,ev=(null==M?void 0:M({listDom:(0,A.jsx)("div",{className:(0,_.default)("".concat(P,"-container"),U,q),style:(0,c.default)({width:em?"100%":void 0},V),children:eg}),action:eh},ep))||(0,A.jsxs)("div",{className:(0,_.default)("".concat(P,"-item"),q,(0,s.default)((0,s.default)({},"".concat(P,"-item-default"),void 0===R),"".concat(P,"-item-show-label"),R)),style:{display:"flex",alignItems:"flex-end"},children:[(0,A.jsx)("div",{className:(0,_.default)("".concat(P,"-container"),U,q),style:(0,c.default)({width:em?"100%":void 0},V),children:eg}),eh]});return(0,A.jsx)(w.FormListContext.Provider,{value:(0,c.default)((0,c.default)({},F),{},{listName:[Y.listName,z,F.name].filter(function(n){return void 0!==n;}).flat(1)}),children:ev});};},"20e31a38":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return E;},quantileIndex:function(){return w;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("63aba70a"),l=a._(s),u=i("cf1ac170"),c=a._(u),f=i("d8cea4a1"),d=a._(f),h=i("7b424aab"),p=a._(h),m=i("944abdfb");function g(n,r,i=0,a=1/0,o){if(r=Math.floor(r),i=Math.floor(Math.max(0,i)),a=Math.floor(Math.min(n.length-1,a)),!(i<=r&&r<=a))return n;for(o=void 0===o?m.ascendingDefined:(0,m.compareDefined)(o);a>i;){if(a-i>600){let s=a-i+1,l=r-i+1,u=Math.log(s),c=.5*Math.exp(2*u/3),f=.5*Math.sqrt(u*c*(s-c)/s)*(l-s/2<0?-1:1),d=Math.max(i,Math.floor(r-l*c/s+f)),h=Math.min(a,Math.floor(r+(s-l)*c/s+f));g(n,r,d,h,o);}let s=n[r],l=i,u=a;for(v(n,i,r),o(n[a],s)>0&&v(n,i,a);lo(n[l],s);)++l;for(;o(n[u],s)>0;)--u;}0===o(n[i],s)?v(n,i,u):v(n,++u,a),u<=r&&(i=u+1),r<=u&&(a=u-1);}return n;}function v(n,r,i){let a=n[r];n[r]=n[i],n[i]=a;}var y=i("5007e869"),_=o._(y),b=i("4f81a096"),x=a._(b);function E(n,r,i){if(!(!(a=(n=Float64Array.from((0,_.numbers)(n,i))).length)||isNaN(r=+r))){if(r<=0||a<2)return(0,d.default)(n);if(r>=1)return(0,l.default)(n);var a,o=(a-1)*r,s=Math.floor(o),u=(0,l.default)(g(n,s).subarray(0,s+1));return u+((0,d.default)(n.subarray(s+1))-u)*(o-s);}}function w(n,r,i=_.default){if(!isNaN(r=+r)){if(a=Float64Array.from(n,(r,a)=>(0,_.default)(i(n[a],a,n))),r<=0)return(0,p.default)(a);if(r>=1)return(0,c.default)(a);var a,o=Uint32Array.from(n,(n,r)=>r),s=a.length-1,l=Math.floor(s*r);return g(o,l,0,s,(n,r)=>(0,m.ascendingDefined)(a[n],a[r])),(l=function(n,r=x.default){let i;let a=!1;if(1===r.length){let o;for(let s of n){let n=r(s);(a?(0,x.default)(n,o)>0:0===(0,x.default)(n,n))&&(i=s,o=n,a=!0);}}else for(let o of n)(a?r(o,i)>0:0===r(o,o))&&(i=o,a=!0);return i;}(o.subarray(0,l+1),n=>a[n]))>=0?l:-1;}}},"21da3e32":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{TextTrianglation:function(){return M;},default:function(){return R;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("e4870cf0"),l=a._(s),u=i("9b84be4b"),c=a._(u),f=i("a854094b"),d=a._(f),h=i("553ee311"),p=i("9479dab9"),m=i("6654a076"),g=a._(m),v=i("da755037"),y=o._(v),_=i("26429605"),b=o._(_);class x{constructor(n,r,i){(0,d.default)(this,"boxCells",[]),(0,d.default)(this,"xCellCount",void 0),(0,d.default)(this,"yCellCount",void 0),(0,d.default)(this,"boxKeys",void 0),(0,d.default)(this,"bboxes",void 0),(0,d.default)(this,"width",void 0),(0,d.default)(this,"height",void 0),(0,d.default)(this,"xScale",void 0),(0,d.default)(this,"yScale",void 0),(0,d.default)(this,"boxUid",void 0);let a=this.boxCells;this.xCellCount=Math.ceil(n/i),this.yCellCount=Math.ceil(r/i);for(let n=0;nthis.width||a<0||r>this.height)return!o&&[];let l=[];if(n<=0&&r<=0&&this.width<=i&&this.height<=a){if(o)return!0;for(let n=0;n0:l;}queryCell(n,r,i,a,o,s,l,u){let c=l.seenUids,f=this.boxCells[o];if(null!==f){let o=this.bboxes;for(let d of f)if(!c.box[d]){c.box[d]=!0;let f=4*d;if(n<=o[f+2]&&r<=o[f+3]&&i>=o[f+0]&&a>=o[f+1]&&(!u||u(this.boxKeys[d]))){if(l.hitTest)return s.push(!0),!0;s.push({key:this.boxKeys[d],x1:o[f],y1:o[f+1],x2:o[f+2],y2:o[f+3]});}}}return!1;}forEachCell(n,r,i,a,o,s,l,u){let c=this.convertToXCellCoord(n),f=this.convertToYCellCoord(r),d=this.convertToXCellCoord(i),h=this.convertToYCellCoord(a);for(let p=c;p<=d;p++)for(let c=f;c<=h;c++){let f=this.xCellCount*c+p;if(o.call(this,n,r,i,a,f,s,l,u))return;}}convertToXCellCoord(n){return Math.max(0,Math.min(this.xCellCount-1,Math.floor(n*this.xScale)));}convertToYCellCoord(n){return Math.max(0,Math.min(this.yCellCount-1,Math.floor(n*this.yScale)));}}class E{constructor(n,r){(0,d.default)(this,"width",void 0),(0,d.default)(this,"height",void 0),(0,d.default)(this,"grid",void 0),(0,d.default)(this,"viewportPadding",100),(0,d.default)(this,"screenRightBoundary",void 0),(0,d.default)(this,"screenBottomBoundary",void 0),(0,d.default)(this,"gridRightBoundary",void 0),(0,d.default)(this,"gridBottomBoundary",void 0),this.width=n,this.height=r,this.viewportPadding=Math.max(n,r),this.grid=new x(n+this.viewportPadding,r+this.viewportPadding,25),this.screenRightBoundary=n+this.viewportPadding,this.screenBottomBoundary=r+this.viewportPadding,this.gridRightBoundary=n+2*this.viewportPadding,this.gridBottomBoundary=r+2*this.viewportPadding;}placeCollisionBox(n){let r=n.x1+n.anchorPointX+this.viewportPadding,i=n.y1+n.anchorPointY+this.viewportPadding,a=n.x2+n.anchorPointX+this.viewportPadding,o=n.y2+n.anchorPointY+this.viewportPadding;return!this.isInsideGrid(r,i,a,o)||this.grid.hitTest(r,i,a,o)?{box:[]}:{box:[r,i,a,o]};}insertCollisionBox(n,r){this.grid.insert({featureIndex:r},n[0],n[1],n[2],n[3]);}project(n,r,i){let a=b.fromValues(r,i,0,1),o=b.create(),s=y.fromValues(...n);return b.transformMat4(o,a,s),{x:(o[0]/o[3]+1)/2*this.width+this.viewportPadding,y:(-o[1]/o[3]+1)/2*this.height+this.viewportPadding};}isInsideGrid(n,r,i,a){return i>=0&&n=0&&r{i.push(...s,n.tex.x,n.tex.y+n.tex.height,n.tl.x,n.tl.y,...s,n.tex.x+n.tex.width,n.tex.y+n.tex.height,n.tr.x,n.tr.y,...s,n.tex.x+n.tex.width,n.tex.y,n.br.x,n.br.y,...s,n.tex.x,n.tex.y,n.bl.x,n.bl.y),a.push(0+4*r,1+4*r,2+4*r,2+4*r,3+4*r,0+4*r);}),{vertices:i,indices:a,size:7};}class R extends g.default{constructor(...n){var r;super(...n),r=this,(0,d.default)(this,"glyphInfo",void 0),(0,d.default)(this,"glyphInfoMap",{}),(0,d.default)(this,"rawEncodeData",void 0),(0,d.default)(this,"texture",void 0),(0,d.default)(this,"currentZoom",-1),(0,d.default)(this,"extent",void 0),(0,d.default)(this,"textureHeight",0),(0,d.default)(this,"textCount",0),(0,d.default)(this,"preTextStyle",{}),(0,d.default)(this,"mapping",(0,c.default)(function*(){r.initGlyph(),r.updateTexture(),yield r.reBuildModel();}));}get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,SIZE:9,TEXT_OFFSETS:10,UV:11});}getUninforms(){let n=this.getCommonUniformsInfo(),r=this.getUniformsBufferInfo(this.getStyleAttribute());return this.updateStyleUnifoms(),(0,l.default)((0,l.default)((0,l.default)({},n.uniformsOption),r.uniformsOption),{u_sdf_map:this.textures[0]});}getCommonUniformsInfo(){let{stroke:n="#fff",strokeWidth:r=0,halo:i=.5,gamma:a=2,raisingHeight:o=0}=this.layer.getLayerConfig(),s=this.getFontServiceMapping(),l=this.getFontServiceCanvas();s&&Object.keys(s).length!==this.textCount&&l&&(this.updateTexture(),this.textCount=Object.keys(s).length),this.preTextStyle=this.getTextStyle();let u={u_stroke_color:(0,p.rgb2arr)(n),u_sdf_map_size:[(null==l?void 0:l.width)||1,(null==l?void 0:l.height)||1],u_raisingHeight:Number(o),u_stroke_width:r,u_gamma_scale:a,u_halo_blur:i};return this.getUniformsBufferInfo(u);}initModels(){var n=this;return(0,c.default)(function*(){return n.bindEvent(),n.extent=n.textExtent(),n.rawEncodeData=n.layer.getEncodedData(),n.preTextStyle=n.getTextStyle(),n.initUniformsBuffer(),n.buildModels();})();}buildModels(){var n=this;return(0,c.default)(function*(){let{textAllowOverlap:r=!1}=n.layer.getLayerConfig();return n.initGlyph(),n.updateTexture(),r||n.filterGlyphs(),[(yield n.layer.buildLayerModel({moduleName:"pointText",vertexShader:C,fragmentShader:A,defines:n.getDefines(),inject:n.getInject(),triangulation:M.bind(n),depth:{enable:!1}}))];})();}needUpdate(){var n=this;return(0,c.default)(function*(){let{textAllowOverlap:r=!1,textAnchor:i="center",textOffset:a,padding:o,fontFamily:s,fontWeight:l}=n.getTextStyle();if(!O(o,n.preTextStyle.padding)||!O(a,n.preTextStyle.textOffset)||!O(i,n.preTextStyle.textAnchor)||!O(s,n.preTextStyle.fontFamily)||!O(l,n.preTextStyle.fontWeight))return yield n.mapping(),!0;if(r)return!1;let u=n.mapService.getZoom(),c=n.mapService.getBounds(),f=(0,p.boundsContains)(n.extent,c);return(Math.abs(n.currentZoom-u)>.5||!f||r!==n.preTextStyle.textAllowOverlap)&&(yield n.reBuildModel(),!0);})();}clearModels(){var n;null===(n=this.texture)||void 0===n||n.destroy(),this.layer.off("remapping",this.mapping);}registerBuiltinAttributes(){this.registerPosition64LowAttribute(),this.styleAttributeService.registerStyleAttribute({name:"textOffsets",type:h.AttributeType.Attribute,descriptor:{shaderLocation:this.attributeLocation.TEXT_OFFSETS,name:"a_textOffsets",buffer:{usage:h.gl.STATIC_DRAW,data:[],type:h.gl.FLOAT},size:2,update:(n,r,i)=>[i[5],i[6]]}}),this.styleAttributeService.registerStyleAttribute({name:"textUv",type:h.AttributeType.Attribute,descriptor:{name:"a_tex",shaderLocation:this.attributeLocation.UV,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:2,update:(n,r,i)=>[i[3],i[4]]}}),this.styleAttributeService.registerStyleAttribute({name:"size",type:h.AttributeType.Attribute,descriptor:{name:"a_Size",shaderLocation:this.attributeLocation.SIZE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:1,update:n=>{let{size:r=12}=n;return Array.isArray(r)?[r[0]]:[r];}}});}bindEvent(){this.layer.isTileLayer||this.layer.on("remapping",this.mapping);}textExtent(){let n=this.mapService.getBounds();return(0,p.padBounds)(n,.5);}initTextFont(){let{fontWeight:n,fontFamily:r}=this.getTextStyle(),i=this.rawEncodeData,a=[];i.forEach(n=>{let{shape:r=""}=n;for(let n of r=r.toString())-1===a.indexOf(n)&&a.push(n);}),this.fontService.setFontOptions({characterSet:a,fontWeight:n,fontFamily:r,iconfont:!1});}initIconFontTex(){let{fontWeight:n,fontFamily:r}=this.getTextStyle(),i=this.rawEncodeData,a=[];i.forEach(n=>{let{shape:r=""}=n;r=`${r}`,-1===a.indexOf(r)&&a.push(r);}),this.fontService.setFontOptions({characterSet:a,fontWeight:n,fontFamily:r,iconfont:!0});}getTextStyle(){let{fontWeight:n="400",fontFamily:r="sans-serif",textAllowOverlap:i=!1,padding:a=[0,0],textAnchor:o="center",textOffset:s=[0,0],opacity:l=1,strokeOpacity:u=1,strokeWidth:c=0,stroke:f="#000"}=this.layer.getLayerConfig();return{fontWeight:n,fontFamily:r,textAllowOverlap:i,padding:a,textAnchor:o,textOffset:s,opacity:l,strokeOpacity:u,strokeWidth:c,stroke:f};}generateGlyphLayout(n){let r=this.getFontServiceMapping(),{spacing:i=2,textAnchor:a="center",textOffset:o}=this.layer.getLayerConfig(),s=this.rawEncodeData;this.glyphInfo=s.map(s=>{let{shape:l="",id:u,size:c=1}=s,f=s.textOffset?s.textOffset:o||[0,0],d=s.textAnchor?s.textAnchor:a||"center",h=function(n,r,i,a,o,s,l=[0,0],u){let c=n.split("\n"),f=[],d={positionedGlyphs:f,top:l[1],bottom:l[1],left:l[0],right:l[0],lineCount:c.length,text:n};return u?function(n,r,i,a,o,s,l){let u=0,c=-8,f=0,d=n.positionedGlyphs,h="right"===s?1:"left"===s?0:.5,p=d.length;i.forEach(n=>{let i=r[n];i&&(d.push({glyph:n,x:i.advance/2,y:c+0,vertical:!1,scale:1,metrics:i}),u+=i.advance+l),d.length!==p&&(f=Math.max(u-l,f),S(d,r,p,d.length-1,h)),u=0,c-=a+5;});let{horizontalAlign:m,verticalAlign:g}=w(o);T(d,h,m,g,f,a,i.length);let v=c- -8;n.top+=-g*v,n.bottom=n.top-v,n.left+=-m*f,n.right=n.left+f;}(d,r,c,i,a,o,s):function(n,r,i,a,o,s,l){let u=0,c=-8,f=0,d=n.positionedGlyphs,h="right"===s?1:"left"===s?0:.5,p=d.length;i.forEach(n=>{n.split("").forEach(n=>{let i=r[n];i&&(d.push({glyph:n,x:u,y:c+0,vertical:!1,scale:1,metrics:i}),u+=i.advance+l);}),d.length!==p&&(f=Math.max(u-l,f),S(d,r,p,d.length-1,h)),u=0,c-=a+5;});let{horizontalAlign:m,verticalAlign:g}=w(o);T(d,h,m,g,f,a,i.length);let v=c- -8;n.top+=-g*v,n.bottom=n.top-v,n.left+=-m*f,n.right=n.left+f;}(d,r,c,i,a,o,s),!!f.length&&d;}(l.toString(),r,c,d,"left",i,f,n),m=function(n,r=[0,0],i){let{positionedGlyphs:a=[]}=n,o=[];for(let n of a){let a=n.metrics,s=a.advance*n.scale/2,l=i?[n.x+s,n.y]:[0,0],u=i?[0,0]:[n.x+s+r[0],n.y+r[1]],c=-4*n.scale-s+u[0],f=-4*n.scale+u[1],d=c+a.width*n.scale,h=f+a.height*n.scale,p={x:c,y:f},m={x:d,y:f},g={x:c,y:h},v={x:d,y:h};o.push({tl:p,tr:m,bl:g,br:v,tex:a,glyphOffset:l});}return o;}(h,f,!1);return s.shaping=h,s.glyphQuads=m,s.centroid=(0,p.calculateCentroid)(s.coordinates),this.glyphInfoMap[u]={shaping:h,glyphQuads:m,centroid:(0,p.calculateCentroid)(s.coordinates)},s;});}getFontServiceMapping(){let{fontWeight:n="400",fontFamily:r="sans-serif"}=this.layer.getLayerConfig();return this.fontService.getMappingByKey(`${r}_${n}`);}getFontServiceCanvas(){let{fontWeight:n="400",fontFamily:r="sans-serif"}=this.layer.getLayerConfig();return this.fontService.getCanvasByKey(`${r}_${n}`);}filterGlyphs(){let{padding:n=[0,0],textAllowOverlap:r=!1}=this.layer.getLayerConfig();if(r)return;this.glyphInfoMap={},this.currentZoom=this.mapService.getZoom(),this.extent=this.textExtent();let{width:i,height:a}=this.rendererService.getViewportSize(),o=new E(i,a);this.glyphInfo.filter(r=>{let{shaping:i,id:a=0}=r,s=r.centroid,l=r.size/16,u=this.mapService.lngLatToContainer(s),{box:c}=o.placeCollisionBox({x1:i.left*l-n[0],x2:i.right*l+n[0],y1:i.top*l-n[1],y2:i.bottom*l+n[1],anchorPointX:u.x,anchorPointY:u.y});return!!c&&!!c.length&&(o.insertCollisionBox(c,a),!0);}).forEach(n=>{this.glyphInfoMap[n.id]=n;});}initGlyph(){let{iconfont:n=!1}=this.layer.getLayerConfig();n?this.initIconFontTex():this.initTextFont(),this.generateGlyphLayout(n);}updateTexture(){let{createTexture2D:n}=this.rendererService,r=this.getFontServiceCanvas();this.textureHeight=r.height,this.texture&&this.texture.destroy(),this.texture=n({data:r,mag:h.gl.LINEAR,min:h.gl.LINEAR,width:r.width,height:r.height}),this.textures=[this.texture];}reBuildModel(){var n=this;return(0,c.default)(function*(){n.filterGlyphs();let r=yield n.layer.buildLayerModel({moduleName:"pointText",vertexShader:C,fragmentShader:A,triangulation:M.bind(n),defines:n.getDefines(),inject:n.getInject(),depth:{enable:!1}});n.layer.models=[r];})();}}},"2247dc85":function(n,r,i){"use strict";var a=i("f5a08f97").default,o=i("89a0cb41").default;Object.defineProperty(r,"__esModule",{value:!0}),r.generate=function n(r,i,a){return a?h.default.createElement(r.tag,(0,s.default)((0,s.default)({key:i},m(r.attrs)),a),(r.children||[]).map(function(a,o){return n(a,"".concat(i,"-").concat(r.tag,"-").concat(o));})):h.default.createElement(r.tag,(0,s.default)({key:i},m(r.attrs)),(r.children||[]).map(function(a,o){return n(a,"".concat(i,"-").concat(r.tag,"-").concat(o));}));},r.getSecondaryColor=function(n){return(0,u.generate)(n)[0];},r.iconStyles=void 0,r.isIconDefinition=function(n){return"object"===(0,l.default)(n)&&"string"==typeof n.name&&"string"==typeof n.theme&&("object"===(0,l.default)(n.icon)||"function"==typeof n.icon);},r.normalizeAttrs=m,r.normalizeTwoToneColors=function(n){return n?Array.isArray(n)?n:[n]:[];},r.useInsertStyles=r.svgBaseProps=void 0,r.warning=function(n,r){(0,d.default)(n,"[@ant-design/icons] ".concat(r));};var s=o(i("3bbc6f6c")),l=o(i("d03c096f")),u=i("0d7b2f56"),c=i("0c2b9405"),f=i("a2d16fe8"),d=o(i("80a41602")),h=a(i("609f48be")),p=o(i("7c9399ac"));function m(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(n).reduce(function(r,i){var a=n[i];return"class"===i?(r.className=a,delete r.class):(delete r[i],r[i.replace(/-(.)/g,function(n,r){return r.toUpperCase();})]=a),r;},{});}r.svgBaseProps={width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true",focusable:"false"};var g=r.iconStyles="\n.anticon {\n display: inline-flex;\n align-items: center;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.anticon > * {\n line-height: 1;\n}\n\n.anticon svg {\n display: inline-block;\n}\n\n.anticon::before {\n display: none;\n}\n\n.anticon .anticon-icon {\n display: block;\n}\n\n.anticon[tabindex] {\n cursor: pointer;\n}\n\n.anticon-spin::before,\n.anticon-spin {\n display: inline-block;\n -webkit-animation: loadingCircle 1s infinite linear;\n animation: loadingCircle 1s infinite linear;\n}\n\n@-webkit-keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n";r.useInsertStyles=function(n){var r=(0,h.useContext)(p.default),i=r.csp,a=r.prefixCls,o=r.layer,s=g;a&&(s=s.replace(/anticon/g,a)),o&&(s="@layer ".concat(o," {\n").concat(s,"\n}")),(0,h.useEffect)(function(){var r=n.current,a=(0,f.getShadowRoot)(r);(0,c.updateCSS)(s,"@ant-design-icons",{prepend:!o,csp:i,attachTo:a});},[]);};},22702128:function(n,r,i){var a=i("c565fed6"),o=i("08f49370");n.exports=function(n,r){return null!=n&&o(n,r,a);};},"22aea40b":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{computedExpandedClassName:function(){return d;},findAllChildrenKeys:function(){return f;},renderExpandIcon:function(){return c;}});var a=i("777fffbe"),o=i("852bbaa9"),s=a._(i("a854094b")),l=o._(i("609f48be")),u=a._(i("064ecd09"));function c(n){var r=n.prefixCls,i=n.record,a=n.onExpand,o=n.expanded,c=n.expandable,f="".concat(r,"-row-expand-icon");return c?l.createElement("span",{className:(0,u.default)(f,(0,s.default)((0,s.default)({},"".concat(r,"-row-expanded"),o),"".concat(r,"-row-collapsed"),!o)),onClick:function(n){a(i,n),n.stopPropagation();}}):l.createElement("span",{className:(0,u.default)(f,"".concat(r,"-row-spaced"))});}function f(n,r,i){var a=[];return!function n(o){(o||[]).forEach(function(o,s){a.push(r(o,s)),n(o[i]);});}(n),a;}function d(n,r,i,a){return"string"==typeof n?n:"function"==typeof n?n(r,i,a):"";}},"22e5bac1":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return h;}});var a=i("777fffbe"),o=a._(i("e4870cf0"));i("a3273044");var s=i("64681837"),l=a._(i("38ab0c18")),u=a._(i("f34e933b")),c=a._(i("ddaa0afd")),f=i("609f48be"),d=i("dac8af92"),h=function(n){var r=(0,s.useIntl)(),i=u.default.useFormInstance();if(!1===n.render)return null;var a=n.onSubmit,h=n.render,p=n.onReset,m=n.searchConfig,g=void 0===m?{}:m,v=n.submitButtonProps,y=n.resetButtonProps,_=s.proTheme.useToken().token,b=function(){i.submit(),null==a||a();},x=function(){i.resetFields(),null==p||p();},E=g.submitText,w=void 0===E?r.getMessage("tableForm.submit","\u63D0\u4EA4"):E,S=g.resetText,T=void 0===S?r.getMessage("tableForm.reset","\u91CD\u7F6E"):S,A=[];!1!==y&&A.push((0,f.createElement)(l.default,(0,o.default)((0,o.default)({},(0,c.default)(null!=y?y:{},["preventDefault"])),{},{key:"rest",onClick:function(n){var r;null!=y&&y.preventDefault||x(),null==y||null===(r=y.onClick)||void 0===r||r.call(y,n);}}),T)),!1!==v&&A.push((0,f.createElement)(l.default,(0,o.default)((0,o.default)({type:"primary"},(0,c.default)(v||{},["preventDefault"])),{},{key:"submit",onClick:function(n){var r;null!=v&&v.preventDefault||b(),null==v||null===(r=v.onClick)||void 0===r||r.call(v,n);}}),w));var C=h?h((0,o.default)((0,o.default)({},n),{},{form:i,submit:b,reset:x}),A):A;return C?Array.isArray(C)?(null==C?void 0:C.length)<1?null:(null==C?void 0:C.length)===1?C[0]:(0,d.jsx)("div",{style:{display:"flex",gap:_.marginXS,alignItems:"center"},children:C}):C:null;};},"23b4cb91":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{getTileFactory:function(){return z;}});var a=i("777fffbe"),o=i("553ee311"),s=i("9b84be4b"),l=a._(s),u=i("6f3d386c"),c=a._(u),f=i("1c0d7fd1"),d=a._(f),h=i("e4870cf0"),p=a._(h),m=i("a854094b"),g=a._(m),v=i("cf4f8679"),y=i("04fd6645"),_=a._(y);class b extends v.EventEmitter{constructor(n,r){super(),(0,g.default)(this,"x",void 0),(0,g.default)(this,"y",void 0),(0,g.default)(this,"z",void 0),(0,g.default)(this,"key",void 0),(0,g.default)(this,"parent",void 0),(0,g.default)(this,"sourceTile",void 0),(0,g.default)(this,"visible",!0),(0,g.default)(this,"layers",[]),(0,g.default)(this,"isLoaded",!1),(0,g.default)(this,"tileMaskLayers",[]),(0,g.default)(this,"tileMask",void 0),this.parent=r,this.sourceTile=n,this.x=n.x,this.y=n.y,this.z=n.z,this.key=`${this.x}_${this.y}_${this.z}`;}getLayers(){return this.layers;}styleUpdate(...n){}lnglatInBounds(n){let[r,i,a,o]=this.sourceTile.bounds,{lng:s,lat:l}=n;return s>=r&&s<=a&&l>=i&&l<=o;}getLayerOptions(){var n;let r=this.parent.getLayerConfig();return(0,p.default)((0,p.default)({},r),{},{textAllowOverlap:!0,autoFit:!1,maskLayers:this.getMaskLayer(),tileMask:-1!==["PolygonLayer","LineLayer"].indexOf(this.parent.type),mask:r.mask||(null===(n=r.maskLayers)||void 0===n?void 0:n.length)!==0&&r.enableMask});}getMaskLayer(){let{maskLayers:n}=this.parent.getLayerConfig(),r=[];return null==n||n.forEach(n=>{if(!n.tileLayer)return r.push(n),n;let i=n.tileLayer.getTile(this.sourceTile.key),a=null==i?void 0:i.getLayers()[0];a&&r.push(a);}),r;}addTileMask(){var n=this;return(0,l.default)(function*(){let r=new _.default({name:"mask",visible:!0,enablePicking:!1}).source({type:"FeatureCollection",features:[n.sourceTile.bboxPolygon]},{parser:{type:"geojson",featureId:"id"}}).shape("fill").color("#0f0").style({opacity:.5}),i=(0,o.createLayerContainer)(n.parent.container);r.setContainer(i),yield r.init(),n.tileMask=r;let a=n.getMainLayer();return void 0!==a&&(a.tileMask=r),r;})();}addMask(n,r){var i=this;return(0,l.default)(function*(){let a=(0,o.createLayerContainer)(i.parent.container);r.setContainer(a),yield r.init(),n.addMask(r),i.tileMaskLayers.push(r);})();}addLayer(n){var r=this;return(0,l.default)(function*(){n.isTileLayer=!0;let i=(0,o.createLayerContainer)(r.parent.container);n.setContainer(i),r.layers.push(n),yield n.init();})();}updateVisible(n){this.visible=n,this.updateOptions("visible",n);}updateOptions(n,r){this.layers.forEach(i=>{i.updateLayerConfig({[n]:r});});}getMainLayer(){return this.layers[0];}getFeatures(n){return[];}getFeatureById(n){return[];}destroy(){var n;null===(n=this.tileMask)||void 0===n||n.destroy(),this.layers.forEach(n=>n.destroy());}}class x extends b{initTileLayer(){var n=this;return(0,l.default)(function*(){let r=n.getSourceOption(),i=r.data.features[0].properties,a=new c.default().source(r.data,r.options).size(1).shape("line").color("red"),o=new d.default({minZoom:n.z-1,maxZoom:n.z+1,textAllowOverlap:!0}).source([i],{parser:{type:"json",x:"x",y:"y"}}).size(20).color("red").shape(n.key).style({stroke:"#fff",strokeWidth:2});yield n.addLayer(a),yield n.addLayer(o),n.isLoaded=!0;})();}getSourceOption(){let n=this.parent.getSource();return{data:{type:"FeatureCollection",features:this.sourceTile.data.layers.testTile.features},options:{parser:{type:"geojson"},transforms:n.transforms}};}}var E=i("f653f760"),w=a._(E);class S extends b{initTileLayer(){var n=this;return(0,l.default)(function*(){let r=n.parent.getLayerAttributeConfig(),i=n.getLayerOptions(),a=n.getSourceOption(),o=new w.default((0,p.default)({},i)).source(a.data,a.options);r&&Object.keys(r).forEach(n=>{var i,a;o[n](null===(i=r[n])||void 0===i?void 0:i.field,null===(a=r[n])||void 0===a?void 0:a.values);}),yield n.addLayer(o),n.isLoaded=!0;})();}getSourceOption(){let n=this.parent.getSource();return{data:this.sourceTile.data,options:{parser:{type:"image",extent:this.sourceTile.bounds},transforms:n.transforms}};}}var T=i("7d31d91a"),A=a._(T);class C extends b{initTileLayer(){var n=this;return(0,l.default)(function*(){let r=n.parent.getLayerAttributeConfig(),i=n.getLayerOptions(),a=n.getSourceOption(),o=new A.default((0,p.default)({},i)).source(a.data,a.options);r&&Object.keys(r).forEach(n=>{var i,a;o[n](null===(i=r[n])||void 0===i?void 0:i.field,null===(a=r[n])||void 0===a?void 0:a.values);}),yield n.addLayer(o),n.isLoaded=!0;})();}getFeatures(n){return n?this.sourceTile.data.getTileData(n):[];}getSourceOption(){let n=this.parent.getSource(),{sourceLayer:r,featureId:i}=this.parent.getLayerConfig();return{data:{type:"FeatureCollection",features:this.getFeatures(r)},options:{parser:{type:"geojson",featureId:i},transforms:n.transforms}};}}var O=i("613f75ca"),M=a._(O),R=i("d105ec89"),P=a._(R);let k=["rasterData"];class I extends b{initTileLayer(){var n=this;return(0,l.default)(function*(){let r=n.parent.getLayerAttributeConfig(),i=n.getLayerOptions(),a=n.getSourceOption(),o=new P.default((0,p.default)({},i)).source(a.data,a.options);r&&Object.keys(r).forEach(n=>{var i,a;o[n](null===(i=r[n])||void 0===i?void 0:i.field,null===(a=r[n])||void 0===a?void 0:a.values);}),yield n.addLayer(o),n.isLoaded=!0;})();}getSourceOption(){let n=this.parent.getSource(),r=this.sourceTile.data.data,{rasterData:i}=r,a=(0,M.default)(r,k);return{data:i,options:{parser:(0,p.default)({type:"rasterRgb",extent:this.sourceTile.bounds},a),transforms:n.transforms}};}}class L extends b{initTileLayer(){var n=this;return(0,l.default)(function*(){let r=n.parent.getLayerAttributeConfig(),i=n.getLayerOptions(),a=n.getSourceOption(),o=new P.default((0,p.default)({},i)).source(a.data,a.options);r&&Object.keys(r).forEach(n=>{var i,a;o[n](null===(i=r[n])||void 0===i?void 0:i.field,null===(a=r[n])||void 0===a?void 0:a.values);}),yield n.addLayer(o),n.isLoaded=!0;})();}getSourceOption(){let n=this.parent.getSource();return{data:this.sourceTile.data,options:{parser:{type:"image",extent:this.sourceTile.bounds},transforms:n.transforms}};}}var N=i("9479dab9");let D=["rasterData"],F={positions:[0,1],colors:["#000","#fff"]};class B extends b{constructor(...n){super(...n),(0,g.default)(this,"colorTexture",void 0);}initTileLayer(){var n=this;return(0,l.default)(function*(){let r=n.parent.getLayerAttributeConfig(),i=n.getLayerOptions(),a=n.getSourceOption(),{rampColors:o,domain:s}=n.getLayerOptions();n.colorTexture=n.parent.textureService.getColorTexture(o,s);let l=new P.default((0,p.default)((0,p.default)({},i),{},{colorTexture:n.colorTexture})).source(a.data,a.options);r&&Object.keys(r).forEach(n=>{var i,a;l[n](null===(i=r[n])||void 0===i?void 0:i.field,null===(a=r[n])||void 0===a?void 0:a.values);}),yield n.addLayer(l),n.isLoaded=!0;})();}getSourceOption(){let n=this.parent.getSource(),r=this.sourceTile.data.data,{rasterData:i}=r,a=(0,M.default)(r,D);return{data:i,options:{parser:(0,p.default)({type:"raster",extent:this.sourceTile.bounds},a),transforms:n.transforms}};}styleUpdate(...n){let{rampColors:r=F,domain:i}=n;this.colorTexture=this.parent.textureService.getColorTexture(r,i||(0,N.getDefaultDomain)(r)),this.layers.forEach(n=>n.style({colorTexture:this.colorTexture}));}destroy(){this.layers.forEach(n=>n.destroy());}}class j extends b{initTileLayer(){var n=this;return(0,l.default)(function*(){var r;let i=n.parent.getLayerAttributeConfig(),a=n.getLayerOptions(),o="PolygonLayer"===(r=n.parent.type)?_.default:"LineLayer"===r?c.default:d.default,s=n.getSourceOption();if(!s){n.isLoaded=!0,n.emit("loaded");return;}let l=new o((0,p.default)({},a)).source(s.data,s.options);Object.keys(i).forEach(n=>{var r,a;l[n](null===(r=i[n])||void 0===r?void 0:r.field,null===(a=i[n])||void 0===a?void 0:a.values);}),yield n.addLayer(l),a.tileMask&&(yield n.addTileMask()),n.setLayerMinMaxZoom(l),n.isLoaded=!0,n.emit("loaded");})();}getSourceOption(){let n=this.parent.getSource(),{sourceLayer:r="defaultLayer",featureId:i="id"}=this.parent.getLayerConfig();return{data:{type:"FeatureCollection",features:this.getFeatures(r)},options:{parser:{type:"geojson",featureId:i},transforms:n.transforms}};}setLayerMinMaxZoom(n){"text"===n.getModelType()&&n.updateLayerConfig({maxZoom:this.z+1,minZoom:this.z-1});}getFeatures(n){return this.sourceTile.data.getTileData(n);}getFeatureById(n){let r=this.getMainLayer();return r?r.getSource().data.dataArray.filter(r=>r._id===n):[];}}function z(n){switch(n.type){case"PolygonLayer":case"LineLayer":case"PointLayer":return j;case"TileDebugLayer":return x;case"MaskLayer":return C;case"RasterLayer":let{dataType:r}=n.getSource().parser;switch(r){case o.RasterTileType.RGB:case o.RasterTileType.CUSTOMRGB:return I;case o.RasterTileType.ARRAYBUFFER:case o.RasterTileType.CUSTOMARRAYBUFFER:return B;case o.RasterTileType.TERRAINRGB:case o.RasterTileType.CUSTOMTERRAINRGB:return L;default:return S;}default:return j;}}},"23ec6b43":function(n,r,i){var a=i("ca53fc7e");n.exports=function(n,r){return a(n,r);};},"2483f485":function(n,r,i){var a=i("f5e08e2b"),o=i("72a58360"),s=Object.hasOwnProperty,l=Object.create(null);for(var u in a)s.call(a,u)&&(l[a[u]]=u);var c=n.exports={to:{},get:{}};function f(n,r,i){return Math.min(Math.max(r,n),i);}function d(n){var r=Math.round(n).toString(16).toUpperCase();return r.length<2?"0"+r:r;}c.get=function(n){var r,i;switch(n.substring(0,3).toLowerCase()){case"hsl":r=c.get.hsl(n),i="hsl";break;case"hwb":r=c.get.hwb(n),i="hwb";break;default:r=c.get.rgb(n),i="rgb";}return r?{model:i,value:r}:null;},c.get.rgb=function(n){if(!n)return null;var r,i,o,l=[0,0,0,1];if(r=n.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(i=0,o=r[2],r=r[1];i<3;i++){var u=2*i;l[i]=parseInt(r.slice(u,u+2),16);}o&&(l[3]=parseInt(o,16)/255);}else if(r=n.match(/^#([a-f0-9]{3,4})$/i)){for(i=0,o=(r=r[1])[3];i<3;i++)l[i]=parseInt(r[i]+r[i],16);o&&(l[3]=parseInt(o+o,16)/255);}else if(r=n.match(/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)){for(i=0;i<3;i++)l[i]=parseInt(r[i+1],0);r[4]&&(r[5]?l[3]=.01*parseFloat(r[4]):l[3]=parseFloat(r[4]));}else if(r=n.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)){for(i=0;i<3;i++)l[i]=Math.round(2.55*parseFloat(r[i+1]));r[4]&&(r[5]?l[3]=.01*parseFloat(r[4]):l[3]=parseFloat(r[4]));}else if(!(r=n.match(/^(\w+)$/)))return null;else return"transparent"===r[1]?[0,0,0,0]:s.call(a,r[1])?((l=a[r[1]])[3]=1,l):null;for(i=0;i<3;i++)l[i]=f(l[i],0,255);return l[3]=f(l[3],0,1),l;},c.get.hsl=function(n){if(!n)return null;var r=n.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(r){var i=parseFloat(r[4]);return[(parseFloat(r[1])%360+360)%360,f(parseFloat(r[2]),0,100),f(parseFloat(r[3]),0,100),f(isNaN(i)?1:i,0,1)];}return null;},c.get.hwb=function(n){if(!n)return null;var r=n.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(r){var i=parseFloat(r[4]);return[(parseFloat(r[1])%360+360)%360,f(parseFloat(r[2]),0,100),f(parseFloat(r[3]),0,100),f(isNaN(i)?1:i,0,1)];}return null;},c.to.hex=function(){var n=o(arguments);return"#"+d(n[0])+d(n[1])+d(n[2])+(n[3]<1?d(Math.round(255*n[3])):"");},c.to.rgb=function(){var n=o(arguments);return n.length<4||1===n[3]?"rgb("+Math.round(n[0])+", "+Math.round(n[1])+", "+Math.round(n[2])+")":"rgba("+Math.round(n[0])+", "+Math.round(n[1])+", "+Math.round(n[2])+", "+n[3]+")";},c.to.rgb.percent=function(){var n=o(arguments),r=Math.round(n[0]/255*100),i=Math.round(n[1]/255*100),a=Math.round(n[2]/255*100);return n.length<4||1===n[3]?"rgb("+r+"%, "+i+"%, "+a+"%)":"rgba("+r+"%, "+i+"%, "+a+"%, "+n[3]+")";},c.to.hsl=function(){var n=o(arguments);return n.length<4||1===n[3]?"hsl("+n[0]+", "+n[1]+"%, "+n[2]+"%)":"hsla("+n[0]+", "+n[1]+"%, "+n[2]+"%, "+n[3]+")";},c.to.hwb=function(){var n=o(arguments),r="";return n.length>=4&&1!==n[3]&&(r=", "+n[3]),"hwb("+n[0]+", "+n[1]+"%, "+n[2]+"%"+r+")";},c.to.keyword=function(n){return l[n.slice(0,3)];};},"254c8ced":function(n,r,i){"use strict";var a;i.d(r,"__esModule",{value:!0}),i.d(r,"InteractionEvent",{enumerable:!0,get:function(){return o;}});let o=((a={}).Hover="hover",a.Click="click",a.Select="select",a.Active="active",a.Drag="drag",a);},"2569b57a":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{AsyncSeriesBailHook:function(){return en;},AsyncSeriesHook:function(){return et;},AsyncWaterfallHook:function(){return er;},SyncBailHook:function(){return ee;},SyncHook:function(){return $;}});let a=i("1054d627");function o(n,r,i,a){return new(i||(i=Promise))(function(o,s){function l(n){try{c(a.next(n));}catch(n){s(n);}}function u(n){try{c(a.throw(n));}catch(n){s(n);}}function c(n){var r;n.done?o(n.value):((r=n.value)instanceof i?r:new i(function(n){n(r);})).then(l,u);}c((a=a.apply(n,r||[])).next());});}function s(n,r){var i,a,o,s,l={label:0,sent:function(){if(1&o[0])throw o[1];return o[1];},trys:[],ops:[]};return s={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this;}),s;function u(s){return function(u){return function(s){if(i)throw TypeError("Generator is already executing.");for(;l;)try{if(i=1,a&&(o=2&s[0]?a.return:s[0]?a.throw||((o=a.return)&&o.call(a),0):a.next)&&!(o=o.call(a,s[1])).done)return o;switch(a=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return l.label++,{value:s[1],done:!1};case 5:l.label++,a=s[1],s=[0];continue;case 7:s=l.ops.pop(),l.trys.pop();continue;default:if(!(o=(o=l.trys).length>0&&o[o.length-1])&&(6===s[0]||2===s[0])){l=0;continue;}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]0)&&!(a=s.next()).done;)l.push(a.value);}catch(n){o={error:n};}finally{try{a&&!a.done&&(i=s.return)&&i.call(s);}finally{if(o)throw o.error;}}return l;}function u(n,r,i){if(i||2==arguments.length)for(var a,o=0,s=r.length;o=0&&n.length%1==0;},T.exports=h.default;var A={},C={exports:{}},O={exports:{}};Object.defineProperty(p=O.exports,"__esModule",{value:!0}),p.default=function(n){return function(){for(var r=[],i=arguments.length;i--;)r[i]=arguments[i];var a=r.pop();return n.call(this,r,a);};},O.exports=p.default;var M={};Object.defineProperty(M,"__esModule",{value:!0}),M.fallback=I,M.wrap=L;var R=M.hasQueueMicrotask="function"==typeof queueMicrotask&&queueMicrotask,P=M.hasSetImmediate="function"==typeof setImmediate&&setImmediate,k=M.hasNextTick="object"==typeof a&&"function"==typeof a.nextTick;function I(n){setTimeout(n,0);}function L(n){return function(r){for(var i=[],a=arguments.length-1;a-- >0;)i[a]=arguments[a+1];return n(function(){return r.apply(void 0,i);});};}E=R?queueMicrotask:P?setImmediate:k?a.nextTick:I,M.default=L(E),function(n,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=function(n){return(0,A.isAsync)(n)?function(){for(var r=[],i=arguments.length;i--;)r[i]=arguments[i];var a=r.pop();return s(n.apply(this,r),a);}:(0,i.default)(function(r,i){var a;try{a=n.apply(this,r);}catch(n){return i(n);}if(a&&"function"==typeof a.then)return s(a,i);i(null,a);});};var i=o(O.exports),a=o(M);function o(n){return n&&n.__esModule?n:{default:n};}function s(n,r){return n.then(function(n){l(r,null,n);},function(n){l(r,n&&n.message?n:Error(n));});}function l(n,r,i){try{n(r,i);}catch(n){(0,a.default)(function(n){throw n;},n);}}n.exports=r.default;}(C,C.exports),Object.defineProperty(A,"__esModule",{value:!0}),A.isAsyncIterable=A.isAsyncGenerator=A.isAsync=void 0;var N=(f=C.exports)&&f.__esModule?f:{default:f};function D(n){return"AsyncFunction"===n[Symbol.toStringTag];}A.default=function(n){if("function"!=typeof n)throw Error("expected a function");return D(n)?(0,N.default)(n):n;},A.isAsync=D,A.isAsyncGenerator=function(n){return"AsyncGenerator"===n[Symbol.toStringTag];},A.isAsyncIterable=function(n){return"function"==typeof n[Symbol.asyncIterator];};var F={exports:{}};Object.defineProperty(m=F.exports,"__esModule",{value:!0}),m.default=function(n,r){if(void 0===r&&(r=n.length),!r)throw Error("arity is undefined");return function(){for(var i=this,a=[],o=arguments.length;o--;)a[o]=arguments[o];return"function"==typeof a[r-1]?n.apply(this,a):new Promise(function(o,s){a[r-1]=function(n){for(var r=[],i=arguments.length-1;i-- >0;)r[i]=arguments[i+1];if(n)return s(n);o(r.length>1?r:r[0]);},n.apply(i,a);});};},F.exports=m.default,function(n,r){Object.defineProperty(r,"__esModule",{value:!0});var i=s(T.exports),a=s(A),o=s(F.exports);function s(n){return n&&n.__esModule?n:{default:n};}r.default=(0,o.default)(function(n,r,o){var s=(0,i.default)(r)?[]:{};n(r,function(n,r,i){(0,a.default)(n)(function(n){for(var a=[],o=arguments.length-1;o-- >0;)a[o]=arguments[o+1];a.length<2&&(a=a[0]),s[r]=a,i(n);});},function(n){return o(n,s);});},3),n.exports=r.default;}(S,S.exports);var B={exports:{}},j={exports:{}},z={exports:{}},U={exports:{}};Object.defineProperty(g=U.exports,"__esModule",{value:!0}),g.default=function(n){function r(){for(var r=[],i=arguments.length;i--;)r[i]=arguments[i];if(null!==n){var a=n;n=null,a.apply(this,r);}}return Object.assign(r,n),r;},U.exports=g.default;var V={exports:{}},G={exports:{}};Object.defineProperty(v=G.exports,"__esModule",{value:!0}),v.default=function(n){return n[Symbol.iterator]&&n[Symbol.iterator]();},G.exports=v.default,function(n,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=function(n){if((0,i.default)(n))return r=-1,o=n.length,function(){return++r=r||l||o||(l=!0,n.next().then(function(n){var r=n.value,h=n.done;if(!s&&!o){if(l=!1,h){o=!0,u<=0&&a(null);return;}u++,i(r,c,d),c++,f();}}).catch(h));}function d(n,r){if(u-=1,!s){if(n)return h(n);if(!1===n){o=!0,s=!0;return;}if(r===x.default||o&&u<=0)return o=!0,a(null);f();}}function h(n){s||(l=!1,o=!0,a(n));}f();},x=(d=X.exports)&&d.__esModule?d:{default:d},W.exports=b.default,function(n,r){Object.defineProperty(r,"__esModule",{value:!0});var i=u(U.exports),a=u(V.exports),o=u(H.exports),s=u(W.exports),l=u(X.exports);function u(n){return n&&n.__esModule?n:{default:n};}r.default=function(n){return function(r,u,c){if(c=(0,i.default)(c),n<=0)throw RangeError("concurrency limit cannot be less than 1");if(!r)return c(null);if((0,A.isAsyncGenerator)(r))return(0,s.default)(r,n,u,c);if((0,A.isAsyncIterable)(r))return(0,s.default)(r[Symbol.asyncIterator](),n,u,c);var f=(0,a.default)(r),d=!1,h=!1,p=0,m=!1;function g(n,r){if(!h){if(p-=1,n)d=!0,c(n);else if(!1===n)d=!0,h=!0;else{if(r===l.default||d&&p<=0)return d=!0,c(null);m||v();}}}function v(){for(m=!0;p0;)a[o]=arguments[o+1];if(!1!==i){if(i||s===n.length)return r.apply(void 0,[i].concat(a));l(a);}}l([]);}),n.exports=r.default;}(Q,Q.exports);var J=c(Q.exports);!function(){function n(){this.tasks=[];}n.prototype.call=function(){return J(this.tasks);},n.prototype.tap=function(n,r){0===this.tasks.length?this.tasks.push(function(n){var i=r();n(!!i&&null,i);}):this.tasks.push(function(i,a){a(!!r.apply(void 0,u([],l(i),!1))&&null,n);});};}();var ee=function(){function n(){this.tasks=[];}return n.prototype.call=function(){return q(this.tasks);},n.prototype.tap=function(n,r){this.tasks.push(function(i){i(r(),n);});},n;}(),et=function(){function n(){this.args=[],this.tasks=[];}return n.prototype.promise=function(){for(var n=arguments,r=[],i=0;i0&&(l=1/Math.sqrt(l)),n[0]=i*l,n[1]=a*l,n[2]=o*l,n[3]=s*l,n;}function v(n,r){return n[0]*r[0]+n[1]*r[1]+n[2]*r[2]+n[3]*r[3];}function y(n,r,i,a){var o=r[0],s=r[1],l=r[2],u=r[3];return n[0]=o+a*(i[0]-o),n[1]=s+a*(i[1]-s),n[2]=l+a*(i[2]-l),n[3]=u+a*(i[3]-u),n;}function _(n,r,i){var a=r[0],o=r[1],s=r[2],l=r[3];return n[0]=i[0]*a+i[4]*o+i[8]*s+i[12]*l,n[1]=i[1]*a+i[5]*o+i[9]*s+i[13]*l,n[2]=i[2]*a+i[6]*o+i[10]*s+i[14]*l,n[3]=i[3]*a+i[7]*o+i[11]*s+i[15]*l,n;}function b(n,r){return n[0]===r[0]&&n[1]===r[1]&&n[2]===r[2]&&n[3]===r[3];}function x(n,r){var i=n[0],a=n[1],s=n[2],l=n[3],u=r[0],c=r[1],f=r[2],d=r[3];return Math.abs(i-u)<=o.EPSILON*Math.max(1,Math.abs(i),Math.abs(u))&&Math.abs(a-c)<=o.EPSILON*Math.max(1,Math.abs(a),Math.abs(c))&&Math.abs(s-f)<=o.EPSILON*Math.max(1,Math.abs(s),Math.abs(f))&&Math.abs(l-d)<=o.EPSILON*Math.max(1,Math.abs(l),Math.abs(d));}var E=(a=s(),function(n,r,i,o,s,l){var u,c;for(r||(r=4),i||(i=0),c=o?Math.min(o*r+i,n.length):n.length,u=i;u0?1:n<0?-1:0;},w=Math.sqrt,S=Math.tan;function T(n){return n>1?0:n<-1?s:Math.acos(n);}function A(n){return n>1?l:n<-1?-l:Math.asin(n);}},"2843bd80":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"createElement",{enumerable:!0,get:function(){return o;}});var a=i("5e195043");function o(n){let r="function"==typeof n?n:n.render;return class extends a.CustomElement{connectedCallback(){this.draw();}attributeChangedCallback(){this.draw();}draw(){r(this);}};}},29196330:function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return o;}});var a=i("852bbaa9")._(i("609f48be"));function o(n,r,i,o){return a.useMemo(function(){if(null!=i&&i.size){for(var a=[],s=0;s<(null==n?void 0:n.length);s+=1)!function n(r,i,a,o,s,l,u){var c=l(i,u);r.push({record:i,indent:a,index:u,rowKey:c});var f=null==s?void 0:s.has(c);if(i&&Array.isArray(i[o])&&f)for(var d=0;d0&&O[1]>0);var M=O[0]/C[0],R=O[1]/C[1],P=(h.right-h.left)/2/M,k=(h.bottom-h.top)/2/R,I=[(A[0]+T[0])/2+P,(A[1]+T[1])/2+k],L=S.unproject(I),N=S.zoom+Math.log2(Math.abs(Math.min(M,R)));return{longitude:L[0],latitude:L[1],zoom:Math.min(N,void 0===f?24:f)};}},"2a0a75c8":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"BlendTypes",{enumerable:!0,get:function(){return o;}});var a=i("553ee311");let o={[a.BlendType.additive]:{enable:!0,func:{srcRGB:a.gl.ONE,dstRGB:a.gl.ONE,srcAlpha:1,dstAlpha:1}},[a.BlendType.none]:{enable:!1},[a.BlendType.normal]:{enable:!0,func:{srcRGB:a.gl.SRC_ALPHA,dstRGB:a.gl.ONE_MINUS_SRC_ALPHA,srcAlpha:1,dstAlpha:1}},[a.BlendType.subtractive]:{enable:!0,func:{srcRGB:a.gl.ONE,dstRGB:a.gl.ONE,srcAlpha:a.gl.ZERO,dstAlpha:a.gl.ONE_MINUS_SRC_COLOR},equation:{rgb:a.gl.FUNC_SUBTRACT,alpha:a.gl.FUNC_SUBTRACT}},[a.BlendType.max]:{enable:!0,func:{srcRGB:a.gl.ONE,dstRGB:a.gl.ONE},equation:{rgb:a.gl.MAX_EXT}},[a.BlendType.min]:{enable:!0,func:{srcRGB:a.gl.ONE,dstRGB:a.gl.ONE},equation:{rgb:a.gl.MIN_EXT}}};},"2abeadd7":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return p;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("7cfeda15"),l=a._(s),u=i("609f48be"),c=o._(u),f={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm0 76c-205.4 0-372 166.6-372 372s166.6 372 372 372 372-166.6 372-372-166.6-372-372-372zm128.01 198.83c.03 0 .05.01.09.06l45.02 45.01a.2.2 0 01.05.09.12.12 0 010 .07c0 .02-.01.04-.05.08L557.25 512l127.87 127.86a.27.27 0 01.05.06v.02a.12.12 0 010 .07c0 .03-.01.05-.05.09l-45.02 45.02a.2.2 0 01-.09.05.12.12 0 01-.07 0c-.02 0-.04-.01-.08-.05L512 557.25 384.14 685.12c-.04.04-.06.05-.08.05a.12.12 0 01-.07 0c-.03 0-.05-.01-.09-.05l-45.02-45.02a.2.2 0 01-.05-.09.12.12 0 010-.07c0-.02.01-.04.06-.08L466.75 512 338.88 384.14a.27.27 0 01-.05-.06l-.01-.02a.12.12 0 010-.07c0-.03.01-.05.05-.09l45.02-45.02a.2.2 0 01.09-.05.12.12 0 01.07 0c.02 0 .04.01.08.06L512 466.75l127.86-127.86c.04-.05.06-.06.08-.06a.12.12 0 01.07 0z"}}]},name:"close-circle",theme:"outlined"},d=i("887aaf6c"),h=a._(d),p=c.forwardRef(function(n,r){return c.createElement(h.default,(0,l.default)({},n,{ref:r,icon:f}));});},"2ae24c78":function(n,r,i){n.exports=function(n){var r=-1,i=Array(n.size);return n.forEach(function(n,a){i[++r]=[a,n];}),i;};},"2c0045d4":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{CATEGORY_DEFAULT_OPTIONS:function(){return c;},CLASS_NAMES:function(){return h;},CONTINUOUS_DEFAULT_OPTIONS:function(){return f;},LEGEND_BASE_DEFAULT_OPTIONS:function(){return u;},STEP_RATIO:function(){return d;}});var a=i("fc81244b"),o=i("ca2da9d1"),s=i("a63b8d99"),l=i("572a6e2f"),u={showTitle:!0,padding:0,orientation:"horizontal",backgroundFill:"transparent",titleText:"",titleSpacing:4,titlePosition:"top-left",titleFill:"#2C3542",titleFontWeight:"bold",titleFontFamily:"sans-serif",titleFontSize:12},c=(0,o.deepAssign)({},u,{}),f=(0,o.deepAssign)({},u,(0,s.superStyleProps)(l.DEFAULT_HANDLE_CFG,"handle"),{color:["#d0e3fa","#acc7f6","#8daaf2","#6d8eea","#4d73cd","#325bb1","#5a3e75","#8c3c79","#e23455","#e7655b"],indicatorBackgroundFill:"#262626",indicatorLabelFill:"white",indicatorLabelFontSize:12,indicatorVisibility:"hidden",labelAlign:"value",labelDirection:"positive",labelSpacing:5,showHandle:!0,showIndicator:!0,showLabel:!0,slidable:!0,titleText:"",type:"continuous"}),d=.01,h=(0,a.classNames)({title:"title",titleGroup:"title-group",items:"items",itemsGroup:"items-group",contentGroup:"content-group",ribbonGroup:"ribbon-group",ribbon:"ribbon",handlesGroup:"handles-group",handle:"handle",startHandle:"start-handle",endHandle:"end-handle",labelGroup:"label-group",label:"label",indicator:"indicator"},"legend");},"2cb3cf04":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{ANNOTATION_LIST:function(){return v;},CHART_OPTIONS:function(){return l;},CONFIG_SHAPE:function(){return m;},SKIP_DEL_CUSTOM_SIGN:function(){return f;},SPECIAL_OPTIONS:function(){return g;},TRANSFORM_OPTION_KEY:function(){return h;},TRANSFORM_SIGN:function(){return c;},VIEW_OPTIONS:function(){return u;}});var a=i("d8554caa"),o=this&&this.__assign||function(){return(o=Object.assign||function(n){for(var r,i=1,a=arguments.length;ir.indexOf(a)&&(i[a]=n[a]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,a=Object.getOwnPropertySymbols(n);or.indexOf(a[o])&&Object.prototype.propertyIsEnumerable.call(n,a[o])&&(i[a[o]]=n[a[o]]);return i;},l=["renderer"],u=["width","height","autoFit","theme","inset","insetLeft","insetRight","insetTop","insetBottom","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","margin","marginTop","marginRight","marginBottom","marginLeft","depth","title","clip","children","type","data","direction"],c="__transform__",f="__skipDelCustomKeys__",d=function(n,r){return(0,a.isBoolean)(r)?{type:n,available:r}:o({type:n},r);},h={xField:"encode.x",yField:"encode.y",colorField:"encode.color",angleField:"encode.y",keyField:"encode.key",y1Field:"encode.y1",sizeField:"encode.size",setsField:"encode.sets",shapeField:"encode.shape",seriesField:"encode.series",positionField:"encode.position",textField:"encode.text",valueField:"encode.value",binField:"encode.x",srcField:"encode.src",linkColorField:"encode.linkColor",fontSizeField:"encode.fontSize",coordinateType:"coordinate.type",radius:"coordinate.outerRadius",innerRadius:"coordinate.innerRadius",startAngle:"coordinate.startAngle",endAngle:"coordinate.endAngle",focusX:"coordinate.focusX",focusY:"coordinate.focusY",distortionX:"coordinate.distortionX",distortionY:"coordinate.distortionY",visual:"coordinate.visual",stack:{target:"transform",value:function(n){return d("stackY",n);}},normalize:{target:"transform",value:function(n){return d("normalizeY",n);}},percent:{target:"transform",value:function(n){return d("normalizeY",n);}},group:{target:"transform",value:function(n){return d("dodgeX",n);}},sort:{target:"transform",value:function(n){return d("sortX",n);}},symmetry:{target:"transform",value:function(n){return d("symmetryY",n);}},diff:{target:"transform",value:function(n){return d("diffY",n);}},meta:{target:"scale",value:function(n){return n;}},label:{target:"labels",value:function(n){return n;}},shape:"style.shape",connectNulls:{target:"style",value:function(n){return(0,a.isBoolean)(n)?{connect:n}:n;}},transpose:{target:"transpose",value:function(n){return d("transpose",n);}}},p=["xField","yField","seriesField","colorField","shapeField","keyField","positionField","meta","tooltip","animate","stack","normalize","percent","group","sort","symmetry","diff"],m=[{key:"annotations",extendedProperties:[]},{key:"line",type:"line",extendedProperties:p},{key:"connector",type:"connector",extendedProperties:[]},{key:"point",type:"point",extendedProperties:p,defaultShapeConfig:{shapeField:"circle"}},{key:"area",type:"area",extendedProperties:p}],g=[{key:"transform",callback:function(n,r,i){n[r]=n[r]||[];var a,l=i.available,u=s(i,["available"]);if(void 0===l||l)n[r].push(o(((a={})[c]=!0,a),u));else{var f=n[r].indexOf(function(n){return n.type===i.type;});-1!==f&&n[r].splice(f,1);}}},{key:"labels",callback:function(n,r,i){var s;if(!i||(0,a.isArray)(i)){n[r]=i||[];return;}i.text||(i.text=n.yField),n[r]=n[r]||[],n[r].push(o(((s={})[c]=!0,s),i));}},{key:"transpose",callback:function(n,r,i){var a;i.available?n.coordinate={transform:[o(((a={})[c]=!0,a),i)]}:n.coordinate={};}}],v=[{key:"conversionTag",shape:"ConversionTag"},{key:"axisText",shape:"BidirectionalBarAxisText"}];},"2cc7f81c":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return s;}});var a=i("777fffbe")._(i("6a859b73")),o="object"==typeof self&&self&&self.Object===Object&&self,s=a.default||o||Function("return this")();},"2d19bd14":function(n,r,i){var a=i("bbc15be8"),o=i("07ba0bdb"),s=i("7700f5ce"),l=i("cd32a75b");n.exports=function(n,r){return a(n)?n:o(n,r)?[n]:s(l(n));};},"2de3468c":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{LegendContinuous:function(){return J;}});var a=i("777fffbe"),o=i("5e195043"),s=i("3862611d"),l=i("c2287686"),u=i("3715e357"),c=a._(u),f=i("6aaf503e"),d=a._(f),h=i("47a6bde3"),p=i("920dd2bf"),m=i("ca2da9d1"),g=i("f65342ee"),v=i("f1d8aa22"),y=i("a602d54e"),_=i("b0ea517f"),b=i("a63b8d99"),x=i("880f07e8"),E=i("750ce7b9"),w=i("a46fcb64"),S=i("fc81244b"),T=i("a125f0ec"),A=i("1915def0"),C=i("611ea1fe"),O={backgroundFill:"#262626",backgroundLineCap:"round",backgroundLineWidth:1,backgroundStroke:"#333",backgroundZIndex:-1,formatter:function(n){return n.toString();},labelFill:"#fff",labelFontSize:12,labelTextBaseline:"middle",padding:[2,4],position:"right",radius:0,zIndex:999},M=(0,S.classNames)({background:"background",labelGroup:"label-group",label:"label"},"indicator"),R=function(n){function r(r){var i=n.call(this,r,O)||this;return i.point=[0,0],i.group=i.appendChild(new o.Group({})),i.isMutationObserved=!0,i;}return(0,s.__extends)(r,n),r.prototype.renderBackground=function(){if(this.label){var n=this.attributes,r=n.position,i=n.padding,a=(0,s.__read)((0,A.parseSeriesAttr)(i),4),o=a[0],l=a[1],u=a[2],c=a[3],f=this.label.node().getLocalBounds(),d=f.min,h=f.max,m=new p.BBox(d[0]-c,d[1]-o,h[0]+l-d[0]+c,h[1]+u-d[1]+o),g=this.getPath(r,m),v=(0,b.subStyleProps)(this.attributes,"background");this.background=(0,_.select)(this.group).maybeAppendByClassName(M.background,"path").styles((0,s.__assign)((0,s.__assign)({},v),{d:g})),this.group.appendChild(this.label.node());}},r.prototype.renderLabel=function(){var n=this.attributes,r=n.formatter,i=n.labelText,a=(0,b.subStyleProps)(this.attributes,"label"),o=(0,s.__read)((0,b.splitStyle)(a),2),l=o[0],u=o[1],c=(l.text,(0,s.__rest)(l,["text"]));this.label=(0,_.select)(this.group).maybeAppendByClassName(M.labelGroup,"g").styles(u),i&&this.label.maybeAppendByClassName(M.label,function(){return(0,C.renderExtDo)(r(i));}).style("text",r(i).toString()).selectAll("text").styles(c);},r.prototype.adjustLayout=function(){var n=(0,s.__read)(this.point,2),r=n[0],i=n[1],a=this.attributes,o=a.x,l=a.y;this.group.attr("transform","translate(".concat(o-r,", ").concat(l-i,")"));},r.prototype.getPath=function(n,r){var i=this.attributes.radius,a=r.x,o=r.y,l=r.width,u=r.height,c=[["M",a+i,o],["L",a+l-i,o],["A",i,i,0,0,1,a+l,o+i],["L",a+l,o+u-i],["A",i,i,0,0,1,a+l-i,o+u],["L",a+i,o+u],["A",i,i,0,0,1,a,o+u-i],["L",a,o+i],["A",i,i,0,0,1,a+i,o],["Z"]],f={top:4,right:6,bottom:0,left:2}[n],d=this.createCorner([c[f].slice(-2),c[f+1].slice(-2)]);return c.splice.apply(c,(0,s.__spreadArray)([f+1,1],(0,s.__read)(d),!1)),c[0][0]="M",c;},r.prototype.createCorner=function(n,r){void 0===r&&(r=10);var i=T.isHorizontal.apply(void 0,(0,s.__spreadArray)([],(0,s.__read)(n),!1)),a=(0,s.__read)(n,2),o=(0,s.__read)(a[0],2),l=o[0],u=o[1],c=(0,s.__read)(a[1],2),f=c[0],d=c[1],h=(0,s.__read)(i?[f-l,[l,f]]:[d-u,[u,d]],2),p=h[0],m=(0,s.__read)(h[1],2),g=m[0],v=m[1],y=p/2,_=p/Math.abs(p)*r,b=_/2,x=_*Math.sqrt(3)/2*.8,E=(0,s.__read)([g,g+y-b,g+y,g+y+b,v],5),w=E[0],S=E[1],A=E[2],C=E[3],O=E[4];return i?(this.point=[A,u-x],[["L",w,u],["L",S,u],["L",A,u-x],["L",C,u],["L",O,u]]):(this.point=[l+x,A],[["L",l,w],["L",l,S],["L",l+x,A],["L",l,C],["L",l,O]]);},r.prototype.applyVisibility=function(){"hidden"===this.attributes.visibility?(0,v.hide)(this):(0,v.show)(this);},r.prototype.bindEvents=function(){this.label.on(o.ElementEvent.BOUNDS_CHANGED,this.renderBackground);},r.prototype.render=function(){this.renderLabel(),this.renderBackground(),this.adjustLayout(),this.applyVisibility();},r;}(h.Component),P=i("16d095ff"),k=i("b7c9e889"),I=i("2c0045d4"),L=i("572a6e2f"),N=i("da5c7e2c"),D=a._(N),F=i("ceab2f6b");function B(n,r){var i=(0,s.__read)(function(n,r){for(var i=1;i=a&&r<=o)return[a,o];}return[r,r];}(n,r),2),a=i[0],o=i[1];return{tick:r>(a+o)/2?o:a,range:[a,o]};}var j=(0,S.classNames)({trackGroup:"background-group",track:"background",selectionGroup:"ribbon-group",selection:"ribbon",clipPath:"clip-path"},"ribbon");function z(n){var r=n.orientation,i=n.size,a=n.length;return(0,F.ifHorizontal)(r,[a,i],[i,a]);}function U(n){var r=n.type,i=(0,s.__read)(z(n),2),a=i[0],o=i[1];return"size"===r?[["M",0,o],["L",0+a,0],["L",0+a,o],["Z"]]:[["M",0,o],["L",0,0],["L",0+a,0],["L",0+a,o],["Z"]];}var V=function(n){function r(r){return n.call(this,r,{type:"color",orientation:"horizontal",size:30,range:[0,1],length:200,block:!1,partition:[],color:["#fff","#000"],trackFill:"#e5e5e5"})||this;}return(0,s.__extends)(r,n),r.prototype.render=function(n,r){var i,a,l,u,c,f,d,h,p,m,g,v,y,x,E;(function(n,r){var i=(0,b.subStyleProps)(r,"track");n.maybeAppendByClassName(j.track,"path").styles((0,s.__assign)({d:U(r)},i));})((0,_.select)(r).maybeAppendByClassName(j.trackGroup,"g"),n),i=(0,_.select)(r).maybeAppendByClassName(j.selectionGroup,"g"),a=(0,b.subStyleProps)(n,"selection"),m=(f=n).orientation,g=f.color,v=f.block,y=f.partition,x=(p=(0,D.default)(g)?Array(20).fill(0).map(function(n,r,i){return g(r/(i.length-1));}):g).length,E=p.map(function(n){return(0,o.parseColor)(n).toString();}),l=x?1===x?E[0]:v?(d=Array.from(E),Array(h=y.length).fill(0).reduce(function(n,r,i){var a=d[i%d.length];return n+" ".concat(y[i],":").concat(a).concat(iv?Math.max(h-c,0):Math.max((h-c-v)/_,0));var E=Math.max(y,f),w=m-E,S=(0,s.__read)(this.ifHorizontal([w,b],[b,w]),2),T=S[0],A=S[1],C=["top","left"].includes(x)?c:0,O=(0,s.__read)(this.ifHorizontal([E/2,C],[C,E/2]),2),M=O[0],R=O[1];return new p.BBox(M,R,T,A);},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"ribbonShape",{get:function(){var n=this.ribbonBBox,r=n.width,i=n.height;return this.ifHorizontal({size:i,length:r},{size:r,length:i});},enumerable:!1,configurable:!0}),r.prototype.renderRibbon=function(n){var r=this.attributes,i=r.data,a=r.type,o=r.orientation,s=r.color,l=r.block,u=(0,b.subStyleProps)(this.attributes,"ribbon"),c=this.range,f=c.min,d=c.max,h=this.ribbonBBox,p=h.x,g=h.y,v=this.ribbonShape,y=v.length,_=v.size,x=(0,m.deepAssign)({transform:"translate(".concat(p,", ").concat(g,")"),length:y,size:_,type:a,orientation:o,color:s,block:l,partition:i.map(function(n){return(n.value-f)/(d-f);}),range:this.ribbonRange},u);this.ribbon=n.maybeAppendByClassName(I.CLASS_NAMES.ribbon,function(){return new V({style:x});}).update(x);},r.prototype.getHandleClassName=function(n){return"".concat(I.CLASS_NAMES.prefix("".concat(n,"-handle")));},r.prototype.renderHandles=function(){var n=this.attributes,r=n.showHandle,i=n.orientation,a=(0,b.subStyleProps)(this.attributes,"handle"),o=(0,s.__read)(this.selection,2),l=o[0],u=o[1],c=(0,s.__assign)((0,s.__assign)({},a),{orientation:i}),f=a.shape,d="basic"===(void 0===f?"slider":f)?L.Handle:P.Handle,h=this;this.handlesGroup.selectAll(I.CLASS_NAMES.handle.class).data(r?[{value:l,type:"start"},{value:u,type:"end"}]:[],function(n){return n.type;}).join(function(n){return n.append(function(){return new d({style:c});}).attr("className",function(n){var r=n.type;return"".concat(I.CLASS_NAMES.handle," ").concat(h.getHandleClassName(r));}).each(function(n){var r=n.type,i=n.value;this.update({labelText:i}),h["".concat(r,"Handle")]=this,this.addEventListener("pointerdown",h.onDragStart(r));});},function(n){return n.update(c).each(function(n){var r=n.value;this.update({labelText:r});});},function(n){return n.each(function(n){var r=n.type;h["".concat(r,"Handle")]=void 0;}).remove();});},r.prototype.adjustHandles=function(){var n=(0,s.__read)(this.selection,2),r=n[0],i=n[1];this.setHandlePosition("start",r),this.setHandlePosition("end",i);},Object.defineProperty(r.prototype,"handleBBox",{get:function(){if(this.cacheHandleBBox)return this.cacheHandleBBox;if(!this.attributes.showHandle)return new p.BBox(0,0,0,0);var n=this.startHandle.getBBox(),r=n.width,i=n.height,a=this.endHandle.getBBox(),o=a.width,l=a.height,u=(0,s.__read)([Math.max(r,o),Math.max(i,l)],2),c=u[0],f=u[1];return this.cacheHandleBBox=new p.BBox(0,0,c,f),this.cacheHandleBBox;},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"handleShape",{get:function(){var n=this.handleBBox,r=n.width,i=n.height,a=(0,s.__read)(this.ifHorizontal([i,r],[r,i]),2);return{width:r,height:i,size:a[0],length:a[1]};},enumerable:!1,configurable:!0}),r.prototype.setHandlePosition=function(n,r){var i=this.attributes.handleFormatter,a=this.ribbonBBox,o=a.x,l=a.y,u=this.ribbonShape.size,c=this.getOffset(r),f=(0,s.__read)(this.ifHorizontal([o+c,l+u*this.handleOffsetRatio],[o+u*this.handleOffsetRatio,l+c]),2),d=f[0],h=f[1],p=this.handlesGroup.select(".".concat(this.getHandleClassName(n))).node();null==p||p.update({transform:"translate(".concat(d,", ").concat(h,")"),formatter:i});},r.prototype.renderIndicator=function(n){var r=(0,b.subStyleProps)(this.attributes,"indicator");this.indicator=n.maybeAppendByClassName(I.CLASS_NAMES.indicator,function(){return new R({});}).update(r);},Object.defineProperty(r.prototype,"labelData",{get:function(){var n=this;return this.attributes.data.reduce(function(r,i,a,o){var l,u,c=null!==(l=null==i?void 0:i.id)&&void 0!==l?l:a.toString();if(r.push((0,s.__assign)((0,s.__assign)({},i),{id:c,index:a,type:"value",label:null!==(u=null==i?void 0:i.label)&&void 0!==u?u:i.value.toString(),value:n.ribbonScale.map(i.value)})),ar.indexOf(a)&&(i[a]=n[a]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,a=Object.getOwnPropertySymbols(n);or.indexOf(a[o])&&Object.prototype.propertyIsEnumerable.call(n,a[o])&&(i[a[o]]=n[a[o]]);return i;};function Q(n){let{domain:r}=n.getOptions(),[i,a]=[r[0],(0,Y.lastOf)(r)];return[i,a];}let J=n=>{let{labelFormatter:r,layout:i,order:a,orientation:s,position:l,size:u,title:c,style:f,crossPadding:d,padding:h}=n,p=K(n,["labelFormatter","layout","order","orientation","position","size","title","style","crossPadding","padding"]);return({scales:a,value:s,theme:u,scale:d})=>{let{bbox:h}=s,{x:m,y:g,width:v,height:y}=h,_=(0,Z.inferComponentLayout)(l,i),{legendContinuous:b={}}=u,x=(0,Z.adaptor)(Object.assign({},b,Object.assign(Object.assign({titleText:(0,Z.titleContent)(c),labelAlign:"value",labelFormatter:"string"==typeof r?n=>(0,$.format)(r)(n.label):r},function(n,r,i,a,s,l){let u=(0,Z.scaleOf)(n,"color"),c=function(n,r,i){var a;let{size:o}=r,s=(0,Z.inferComponentShape)(n,r,i);return a=s.orientation,s.size=o,(0,Z.isHorizontal)(a)?s.height=o:s.width=o,s;}(i,a,s);if(u instanceof q.Threshold){let{range:n}=u.getOptions(),[r,i]=Q(u);return u instanceof X.Quantize||u instanceof W.Quantile?function(n,r,i,a,o){let s=r.thresholds;return Object.assign(Object.assign({},n),{color:o,data:[i,...s,a].map(n=>({value:n/a,label:String(n)}))});}(c,u,r,i,n):function(n,r,i){let a=[-1/0,...r.thresholds,1/0].map((n,r)=>({value:r,label:n}));return Object.assign(Object.assign({},n),{data:a,color:i,labelFilter:(n,r)=>r>0&&rvoid 0!==n).find(n=>!(n instanceof H.Constant)));return Object.assign(Object.assign({},n),{domain:[m,g],data:d.getTicks().map(n=>({value:n})),color:Array(Math.floor(u)).fill(0).map((n,r)=>{let i=(p-h)/(u-1)*r+h,o=d.map(i)||f,s=a?a.map(i):1;return o.replace(/rgb[a]*\(([\d]{1,3}) *, *([\d]{1,3}) *, *([\d]{1,3})[\S\s]*\)/,(n,r,i,a)=>`rgba(${r}, ${i}, ${a}, ${s})`);})});}(c,u,(0,Z.scaleOf)(n,"size"),(0,Z.scaleOf)(n,"opacity"),r,l);}(a,d,s,n,J,u)),f),p)),E=new Z.G2Layout({style:Object.assign(Object.assign({x:m,y:g,width:v,height:y},_),{subOptions:x})});return E.appendChild(new G({className:"legend-continuous",style:x})),E;};};J.props={defaultPosition:"top",defaultOrientation:"vertical",defaultOrder:1,defaultSize:60,defaultLength:200,defaultLegendSize:60,defaultPadding:[20,10],defaultCrossPadding:[12,12]};},"2e660475":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"ProForm",{enumerable:!0,get:function(){return h;}});var a=i("777fffbe"),o=a._(i("e4870cf0")),s=a._(i("f34e933b")),l=i("cd1e34ba"),u=i("a6284f72"),c=a._(i("da74b122")),f=a._(i("ef77f514")),d=i("dac8af92");function h(n){return(0,d.jsx)(l.BaseForm,(0,o.default)({layout:"vertical",contentRender:function(n,r){return(0,d.jsxs)(d.Fragment,{children:[n,r]});}},n));}h.Group=c.default,h.useForm=s.default.useForm,h.Item=f.default,h.useWatch=s.default.useWatch,h.ErrorList=s.default.ErrorList,h.Provider=s.default.Provider,h.useFormInstance=s.default.useFormInstance,h.EditOrReadOnlyContext=u.EditOrReadOnlyContext;},"2eaee10a":function(n,r,i){n.exports=function(n,r){if(null==n)return{};var i={};for(var a in n)if(({}).hasOwnProperty.call(n,a)){if(-1!==r.indexOf(a))continue;i[a]=n[a];}return i;},n.exports.__esModule=!0,n.exports.default=n.exports;},"2ef2ced3":function(n,r,i){function a(n){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n;}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n;})(n);}function o(n,r){void 0===r&&(r={});for(var i=function(n){for(var r=[],i=0;i=48&&l<=57||l>=65&&l<=90||l>=97&&l<=122||95===l){o+=n[s++];continue;}break;}if(!o)throw TypeError("Missing parameter name at "+i);r.push({type:"NAME",index:i,value:o}),i=s;continue;}if("("===a){var u=1,c="",s=i+1;if("?"===n[s])throw TypeError('Pattern cannot start with "?" at '+s);for(;s-1:void 0===x;o||(m+="(?:"+p+"(?="+h+"))?"),E||(m+="(?="+p+"|"+h+")");}return new RegExp(m,c(i));}function d(n,r,i){return n instanceof RegExp?function(n,r){if(!r)return n;var i=n.source.match(/\((?!\?)/g);if(i)for(var a=0;a{var a;return"g"!==n.tagName&&(null===(a=n.style)||void 0===a?void 0:a[r])!==void 0&&(i=n.style[r],!0);}),null!=i?i:o[r];}function l(n,r,i,a){n.style[r]=i,a&&n.children.forEach(n=>l(n,r,i,a));}function u(n){l(n,"visibility","hidden",!0);}function c(n){l(n,"visibility","visible",!0);}},"2f051558":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{mark:function(){return u;}});var a=i("d8554caa"),o=i("2cb3cf04"),s=this&&this.__assign||function(){return(s=Object.assign||function(n){for(var r,i=1,a=arguments.length;i()=>n;function o(n,r){var i=r-n;return i?function(r){return n+r*i;}:a(isNaN(n)?r:n);}},"30e56a71":function(n,r,i){var a=i("12787c53"),o=i("459d5e7d"),s=i("21446f8a");n.exports=function(n){return a(n,s,o);};},"30f8b1e3":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return u;}});var a=i("777fffbe"),o=a._(i("5ca9cae9")),s=a._(i("1daaa764")),l=a._(i("e9b37d7e")),u=function(n,r,i){if(!(0,s.default)(n)&&!(0,l.default)(n))return n;var a=i;return(0,o.default)(n,function(n,i){a=r(a,n,i);}),a;};},"31280e27":function(n,r,i){"use strict";var a=i("0fbce506");function o(){var n={},r=0,i=0,a=0;return{add:function(o,s){s||(s=o,o=0),o>i?i=o:o{let{lat:r,lng:i}=this.map.getCenter();this.emit("mapchange"),this.viewport.syncWithMapCamera({bearing:this.map.getBearing(),center:[i,r],viewportHeight:this.map.transform.height,pitch:this.map.getPitch(),viewportWidth:this.map.transform.width,zoom:this.map.getZoom(),cameraHeight:0}),this.updateCoordinateSystemService(),this.cameraChangedCallback(this.viewport);}),this.config=n.mapConfig,this.configService=n.globalConfigService,this.coordinateSystemService=n.coordinateSystemService,this.eventEmitter=new c.EventEmitter;}setBgColor(n){this.bgColor=n;}addMarkerContainer(){let n=this.map.getCanvasContainer();this.markerContainer=u.DOM.create("div","l7-marker-container",n),this.markerContainer.setAttribute("tabindex","-1");}getMarkerContainer(){return this.markerContainer;}getOverlayContainer(){}getCanvasOverlays(){}on(n,r){-1!==l.MapServiceEvent.indexOf(n)?this.eventEmitter.on(n,r):this.map.on(h[n]||n,r);}off(n,r){this.map.off(h[n]||n,r),this.eventEmitter.off(n,r);}getContainer(){return this.map.getContainer();}getMapCanvasContainer(){return this.map.getCanvasContainer();}getSize(){if("SIMPLE"===this.version)return this.simpleMapCoord.getSize();let n=this.map.transform;return[n.width,n.height];}getType(){return"default";}getZoom(){return this.map.getZoom();}setZoom(n){return this.map.setZoom(n);}getCenter(){return this.map.getCenter();}setCenter(n){this.map.setCenter(n);}getPitch(){return this.map.getPitch();}getRotation(){return this.map.getBearing();}getBounds(){return this.map.getBounds().toArray();}getMinZoom(){return this.map.getMinZoom();}getMaxZoom(){return this.map.getMaxZoom();}setRotation(n){this.map.setBearing(n);}zoomIn(n,r){this.map.zoomIn(n,r);}zoomOut(n,r){this.map.zoomOut(n,r);}setPitch(n){return this.map.setPitch(n);}panTo(n){this.map.panTo(n);}panBy(n=0,r=0){this.map.panBy([n,r]);}fitBounds(n,r){this.map.fitBounds(n,r);}setMaxZoom(n){this.map.setMaxZoom(n);}setMinZoom(n){this.map.setMinZoom(n);}setMapStatus(n){!0===n.doubleClickZoom&&this.map.doubleClickZoom.enable(),!1===n.doubleClickZoom&&this.map.doubleClickZoom.disable(),!1===n.dragEnable&&this.map.dragPan.disable(),!0===n.dragEnable&&this.map.dragPan.enable(),!1===n.rotateEnable&&this.map.dragRotate.disable(),!0===n.dragEnable&&this.map.dragRotate.enable(),!1===n.keyboardEnable&&this.map.keyboard.disable(),!0===n.keyboardEnable&&this.map.keyboard.enable(),!1===n.zoomEnable&&this.map.scrollZoom.disable(),!0===n.zoomEnable&&this.map.scrollZoom.enable();}setZoomAndCenter(n,r){this.map.flyTo({zoom:n,center:r});}setMapStyle(n){var r;null===(r=this.map)||void 0===r||r.setStyle(this.getMapStyleValue(n));}meterToCoord(n,r){return 1;}pixelToLngLat(n){return this.map.unproject(n);}lngLatToPixel(n){return this.map.project(n);}containerToLngLat(n){return this.map.unproject(n);}lngLatToContainer(n){return this.map.project(n);}getMapStyle(){try{var n;let r=null!==(n=this.map.getStyle().sprite)&&void 0!==n?n:"";if(/^mapbox:\/\/sprites\/zcxduo\/\w+\/\w+$/.test(r))return null==r?void 0:r.replace(/\/\w+$/,"").replace(/sprites/,"styles");return r;}catch(n){return"";}}getMapStyleConfig(){return d;}getMapStyleValue(n){var r;return null!==(r=this.getMapStyleConfig()[n])&&void 0!==r?r:n;}destroy(){this.eventEmitter.removeAllListeners(),this.map&&(this.map.remove(),this.$mapContainer=null);}emit(n,...r){this.eventEmitter.emit(n,...r);}once(n,...r){this.eventEmitter.once(n,...r);}getMapContainer(){return this.$mapContainer;}exportMap(n){var r;let i=null===(r=this.map)||void 0===r?void 0:r.getCanvas();return"jpg"===n?null==i?void 0:i.toDataURL("image/jpeg"):null==i?void 0:i.toDataURL("image/png");}onCameraChanged(n){this.cameraChangedCallback=n;}creatMapContainer(n){let r=n;return"string"==typeof n&&(r=document.getElementById(n)),r;}updateView(n){this.emit("mapchange"),this.viewport.syncWithMapCamera({bearing:n.bearing,center:n.center,viewportHeight:n.viewportHeight,pitch:n.pitch,viewportWidth:n.viewportWidth,zoom:n.zoom,cameraHeight:0}),this.updateCoordinateSystemService(),this.cameraChangedCallback(this.viewport);}updateCoordinateSystemService(){let{offsetCoordinate:n=!0}=this.config;this.viewport.getZoom()>12&&n?this.coordinateSystemService.setCoordinateSystem(l.CoordinateSystem.LNGLAT_OFFSET):this.coordinateSystemService.setCoordinateSystem(l.CoordinateSystem.LNGLAT);}}},"32f028e7":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{Continuous:function(){return y;}});var a=i("777fffbe"),o=i("8704c632"),s=a._(o),l=i("75aabd79"),u=i("8c0d48bf"),c=i("792e6f22"),f=i("bbb27eba"),d=i("65a1f2fd"),h=i("73ee4a11"),p=i("d2953067");let m=(n,r,i)=>{let a,o;let[s,l]=n,[u,f]=r;return s{let a=Math.min(n.length,r.length)-1,o=Array(a),s=Array(a),l=n[0]>n[a],u=l?[...n].reverse():n,h=l?[...r].reverse():r;for(let n=0;n{let i=(0,f.bisect)(n,r,1,a)-1,l=o[i],u=s[i];return(0,d.compose)(u,l)(r);};},v=(n,r,i,a)=>(Math.min(n.length,r.length)>2?g:m)(n,r,a?u.createInterpolateRound:i);class y extends l.Base{getDefaultOptions(){return{domain:[0,1],range:[0,1],nice:!1,clamp:!1,round:!1,interpolate:u.createInterpolateNumber,tickCount:5};}map(n){return(0,p.isValid)(n)?this.output(n):this.options.unknown;}invert(n){return(0,p.isValid)(n)?this.input(n):this.options.unknown;}nice(){if(!this.options.nice)return;let[n,r,i,...a]=this.getTickMethodOptions();this.options.domain=this.chooseNice()(n,r,i,...a);}getTicks(){let{tickMethod:n}=this.options,[r,i,a,...o]=this.getTickMethodOptions();return n(r,i,a,...o);}getTickMethodOptions(){let{domain:n,tickCount:r}=this.options;return[n[0],n[n.length-1],r];}chooseNice(){return h.d3LinearNice;}rescale(){this.nice();let[n,r]=this.chooseTransforms();this.composeOutput(n,this.chooseClamp(n)),this.composeInput(n,r,this.chooseClamp(r));}chooseClamp(n){let{clamp:r,range:i}=this.options,a=this.options.domain.map(n),o=Math.min(a.length,i.length);return r?function(n,r){let i=rr?n:r;return n=>Math.min(Math.max(i,n),a);}(a[0],a[o-1]):s.default;}composeOutput(n,r){let{domain:i,range:a,round:o,interpolate:s}=this.options,l=v(i.map(n),a,s,o);this.output=(0,d.compose)(l,r,n);}composeInput(n,r,i){let{domain:a,range:o}=this.options,s=v(o,a.map(n),u.createInterpolateNumber);this.input=(0,d.compose)(r,i,s);}}},"3301e887":function(n,r,i){var a=i("d91aaf3b"),o=i("bbc15be8"),s=i("3cd6a52e");n.exports=function(n){return"string"==typeof n||!o(n)&&s(n)&&"[object String]"==a(n);};},"3316fbe3":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"packEncloseRandom",{enumerable:!0,get:function(){return o;}});var a=i("858d251b");function o(n,r){for(var i,o,d=0,h=(n=(0,a.shuffle)(Array.from(n),r)).length,p=[];d0&&i*i>a*a+o*o;}function u(n,r){for(var i=0;i1e-6?(M+Math.sqrt(M*M-4*O*R))/(2*O):R/M);return{x:a+S+T*P,y:o+A+C*P,r:P};}},"33a06475":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),r.TokenData=void 0,r.parse=h,r.compile=function(n,r={}){let{encode:i=encodeURIComponent,delimiter:o="/"}=r,s=function n(r,i,o){let s=r.map(r=>(function(r,i,o){if("text"===r.type)return()=>[r.value];if("group"===r.type){let a=n(r.tokens,i,o);return n=>{let[r,...i]=a(n);return i.length?[""]:[r];};}let s=o||a;return"wildcard"===r.type&&!1!==o?n=>{let a=n[r.name];if(null==a)return["",r.name];if(!Array.isArray(a)||0===a.length)throw TypeError(`Expected "${r.name}" to be a non-empty array`);return[a.map((n,i)=>{if("string"!=typeof n)throw TypeError(`Expected "${r.name}/${i}" to be a string`);return s(n);}).join(i)];}:n=>{let i=n[r.name];if(null==i)return["",r.name];if("string"!=typeof i)throw TypeError(`Expected "${r.name}" to be a string`);return[s(i)];};})(r,i,o));return n=>{let r=[""];for(let i of s){let[a,...o]=i(n);r[0]+=a,r.push(...o);}return r;};}((n instanceof d?n:h(n,r)).tokens,o,i);return function(n={}){let[r,...i]=s(n);if(i.length)throw TypeError(`Missing parameters: ${i.join(", ")}`);return r;};},r.match=function(n,r={}){let{decode:i=decodeURIComponent,delimiter:o="/"}=r,{regexp:s,keys:l}=p(n,r),u=l.map(n=>!1===i?a:"param"===n.type?i:n=>n.split(o).map(i));return function(n){let r=s.exec(n);if(!r)return!1;let i=r[0],a=Object.create(null);for(let n=1;ns.test(n));}(r.name)&&((null==(l=a[i+1])?void 0:l.type)!=="text"||!s.test(l.value[0]))?r.name:JSON.stringify(r.name);if("param"===r.type)return`:${u}`;if("wildcard"===r.type)return`*${u}`;throw TypeError(`Unexpected token: ${r}`);}).join("");};let a=n=>n,o=/^[$_\p{ID_Start}]$/u,s=/^[$\u200c\u200d\p{ID_Continue}]$/u,l="https://git.new/pathToRegexpError",u={"{":"{","}":"}","(":"(",")":")","[":"[","]":"]","+":"+","?":"?","!":"!"};function c(n){return n.replace(/[.+*?^${}()[\]|/\\]/g,"\\$&");}class f{constructor(n){this.tokens=n;}peek(){if(!this._peek){let n=this.tokens.next();this._peek=n.value;}return this._peek;}tryConsume(n){let r=this.peek();if(r.type===n)return this._peek=void 0,r.value;}consume(n){let r=this.tryConsume(n);if(void 0!==r)return r;let{type:i,index:a}=this.peek();throw TypeError(`Unexpected ${i} at ${a}, expected ${n}: ${l}`);}text(){let n,r="";for(;n=this.tryConsume("CHAR")||this.tryConsume("ESCAPED");)r+=n;return r;}}class d{constructor(n){this.tokens=n;}}function h(n,r={}){let{encodePath:i=a}=r,c=new f(function*(n){let r=[...n],i=0;function a(){let n="";if(o.test(r[++i]))for(n+=r[i];s.test(r[++i]);)n+=r[i];else if('"'===r[i]){let a=i;for(;in instanceof d?n:h(n,r)))for(let n of function* n(r,i,a){if(i===r.length)return yield a;let o=r[i];if("group"===o.type){let s=a.slice();for(let a of n(o.tokens,0,s))yield*n(r,i+1,a);}else a.push(o);yield*n(r,i+1,a);}(a,0,[])){let r=function(n,r,i){let a="",o="",s=!0;for(let f=0;fa){if(r>0)return(0,d.default)({},n,s);if(r<0&&oa)return(0,d.default)({},n,r<0?s:-s);return{};}function W(n,r,i,a){var o=(0,x.getClientSize)(),s=o.width,l=o.height,u=null;return n<=s&&r<=l?u={x:0,y:0}:(n>s||r>l)&&(u=(0,c.default)((0,c.default)({},H("x",i,n,s)),H("y",a,r,l))),u;}function X(n){var r=n.src,i=n.isCustomPlaceholder,a=n.fallback,o=(0,T.useState)(i?"loading":"normal"),s=(0,p.default)(o,2),l=s[0],u=s[1],c=(0,T.useRef)(!1),f="error"===l;(0,T.useEffect)(function(){var n=!0;return new Promise(function(n){if(!r){n(!1);return;}var i=document.createElement("img");i.onerror=function(){return n(!1);},i.onload=function(){return n(!0);},i.src=r;}).then(function(r){!r&&n&&u("error");}),function(){n=!1;};},[r]),(0,T.useEffect)(function(){i&&!c.current?u("loading"):f&&u("normal");},[r]);var d=function(){u("normal");};return[function(n){c.current=!1,"loading"===l&&null!=n&&n.complete&&(n.naturalWidth||n.naturalHeight)&&(c.current=!0,d());},f&&a?{src:a}:{onLoad:d,src:r},l];}function q(n,r){return Math.hypot(n.x-r.x,n.y-r.y);}var $=["fallback","src","imgRef"],Y=["prefixCls","src","alt","imageInfo","fallback","movable","onClose","visible","icons","rootClassName","closeIcon","getContainer","current","count","countRender","scaleStep","minScale","maxScale","transitionName","maskTransitionName","imageRender","imgCommonProps","toolbarRender","onTransform","onChange"],Z=function(n){var r=n.fallback,i=n.src,a=n.imgRef,o=(0,y.default)(n,$),s=X({src:i,fallback:r}),u=(0,p.default)(s,2),c=u[0],f=u[1];return T.default.createElement("img",(0,l.default)({ref:function(n){a.current=n,c(n);}},o,f));},K=function(n){var r,i,a,o,s,u,f,h,m,g,v,_,E,w,S,A,O,R,k,I,L,N,B,z,H,X,$,K,Q=n.prefixCls,J=n.src,ee=n.alt,et=n.imageInfo,en=n.fallback,er=n.movable,ei=void 0===er||er,ea=n.onClose,eo=n.visible,es=n.icons,el=n.rootClassName,eu=n.closeIcon,ec=n.getContainer,ef=n.current,ed=void 0===ef?0:ef,eh=n.count,ep=void 0===eh?1:eh,em=n.countRender,eg=n.scaleStep,ev=void 0===eg?.5:eg,ey=n.minScale,e_=void 0===ey?1:ey,eb=n.maxScale,ex=void 0===eb?50:eb,eE=n.transitionName,ew=n.maskTransitionName,eS=void 0===ew?"fade":ew,eT=n.imageRender,eA=n.imgCommonProps,eC=n.toolbarRender,eO=n.onTransform,eM=n.onChange,eR=(0,y.default)(n,Y),eP=(0,T.useRef)(),ek=(0,T.useContext)(D),eI=ek&&ep>1,eL=ek&&ep>=1,eN=(0,T.useState)(!0),eD=(0,p.default)(eN,2),eF=eD[0],eB=eD[1],ej=(r=(0,T.useRef)(null),i=(0,T.useRef)([]),a=(0,T.useState)(V),s=(o=(0,p.default)(a,2))[0],u=o[1],f=function(n,a){null===r.current&&(i.current=[],r.current=(0,U.default)(function(){u(function(n){var o=n;return i.current.forEach(function(n){o=(0,c.default)((0,c.default)({},o),n);}),r.current=null,null==eO||eO({transform:o,action:a}),o;});})),i.current.push((0,c.default)((0,c.default)({},s),n));},{transform:s,resetTransform:function(n){u(V),(0,j.default)(V,s)||null==eO||eO({transform:V,action:n});},updateTransform:f,dispatchZoomChange:function(n,r,i,a,o){var l=eP.current,u=l.width,c=l.height,d=l.offsetWidth,h=l.offsetHeight,p=l.offsetLeft,m=l.offsetTop,g=n,v=s.scale*n;v>ex?(v=ex,g=ex/s.scale):v0&&(r=1/r),eG(r,"wheel",n.clientX,n.clientY);}}}),eW=eH.isMoving,eX=eH.onMouseDown,eq=eH.onWheel,e$=(k=ez.rotate,I=ez.scale,L=ez.x,N=ez.y,B=(0,T.useState)(!1),H=(z=(0,p.default)(B,2))[0],X=z[1],$=(0,T.useRef)({point1:{x:0,y:0},point2:{x:0,y:0},eventType:"none"}),K=function(n){$.current=(0,c.default)((0,c.default)({},$.current),n);},(0,T.useEffect)(function(){var n;return eo&&ei&&(n=(0,M.default)(window,"touchmove",function(n){return n.preventDefault();},{passive:!1})),function(){var r;null===(r=n)||void 0===r||r.remove();};},[eo,ei]),{isTouching:H,onTouchStart:function(n){if(ei){n.stopPropagation(),X(!0);var r=n.touches,i=void 0===r?[]:r;i.length>1?K({point1:{x:i[0].clientX,y:i[0].clientY},point2:{x:i[1].clientX,y:i[1].clientY},eventType:"touchZoom"}):K({point1:{x:i[0].clientX-L,y:i[0].clientY-N},eventType:"move"});}},onTouchMove:function(n){var r=n.touches,i=void 0===r?[]:r,a=$.current,o=a.point1,s=a.point2,l=a.eventType;if(i.length>1&&"touchZoom"===l){var u={x:i[0].clientX,y:i[0].clientY},c={x:i[1].clientX,y:i[1].clientY},f=function(n,r,i,a){var o=q(n,i),s=q(r,a);if(0===o&&0===s)return[n.x,n.y];var l=o/(o+s);return[n.x+l*(r.x-n.x),n.y+l*(r.y-n.y)];}(o,s,u,c),d=(0,p.default)(f,2),h=d[0],m=d[1];eG(q(u,c)/q(o,s),"touchZoom",h,m,!0),K({point1:u,point2:c,eventType:"touchZoom"});}else"move"===l&&(eV({x:i[0].clientX-o.x,y:i[0].clientY-o.y},"move"),K({eventType:"move"}));},onTouchEnd:function(){if(eo){if(H&&X(!1),K({eventType:"none"}),e_>I)return eV({x:0,y:0,scale:e_},"touchZoom");var n=eP.current.offsetWidth*I,r=eP.current.offsetHeight*I,i=eP.current.getBoundingClientRect(),a=i.left,o=i.top,s=k%180!=0,l=W(s?r:n,s?n:r,a,o);l&&eV((0,c.default)({},l),"dragRebound");}}}),eY=e$.isTouching,eZ=e$.onTouchStart,eK=e$.onTouchMove,eQ=e$.onTouchEnd,eJ=ez.rotate,e0=ez.scale,e1=(0,b.default)((0,d.default)({},"".concat(Q,"-moving"),eW));(0,T.useEffect)(function(){eF||eB(!0);},[eF]);var e2=function(n){var r=ed+n;!Number.isInteger(r)||r<0||r>ep-1||(eB(!1),eU(n<0?"prev":"next"),null==eM||eM(r,ed));},e3=function(n){eo&&eI&&(n.keyCode===P.default.LEFT?e2(-1):n.keyCode===P.default.RIGHT&&e2(1));};(0,T.useEffect)(function(){var n=(0,M.default)(window,"keydown",e3,!1);return function(){n.remove();};},[eo,eI,ed]);var e4=T.default.createElement(Z,(0,l.default)({},eA,{width:n.width,height:n.height,imgRef:eP,className:"".concat(Q,"-img"),alt:ee,style:{transform:"translate3d(".concat(ez.x,"px, ").concat(ez.y,"px, 0) scale3d(").concat(ez.flipX?"-":"").concat(e0,", ").concat(ez.flipY?"-":"").concat(e0,", 1) rotate(").concat(eJ,"deg)"),transitionDuration:(!eF||eY)&&"0s"},fallback:en,src:J,onWheel:eq,onMouseDown:eX,onDoubleClick:function(n){eo&&(1!==e0?eV({x:0,y:0,scale:1},"doubleClick"):eG(1+ev,"doubleClick",n.clientX,n.clientY));},onTouchStart:eZ,onTouchMove:eK,onTouchEnd:eQ,onTouchCancel:eQ})),e5=(0,c.default)({url:J,alt:ee},et);return T.default.createElement(T.default.Fragment,null,T.default.createElement(C.default,(0,l.default)({transitionName:void 0===eE?"zoom":eE,maskTransitionName:eS,closable:!1,keyboard:!0,prefixCls:Q,onClose:ea,visible:eo,classNames:{wrapper:e1},rootClassName:el,getContainer:ec},eR,{afterClose:function(){eU("close");}}),T.default.createElement("div",{className:"".concat(Q,"-img-wrapper")},eT?eT(e4,(0,c.default)({transform:ez,image:e5},ek?{current:ed}:{})):e4)),T.default.createElement(F,{visible:eo,transform:ez,maskTransitionName:eS,closeIcon:eu,getContainer:ec,prefixCls:Q,rootClassName:el,icons:void 0===es?{}:es,countRender:em,showSwitch:eI,showProgress:eL,current:ed,count:ep,scale:e0,minScale:e_,maxScale:ex,toolbarRender:eC,onActive:e2,onZoomIn:function(){eG(1+ev,"zoomIn");},onZoomOut:function(){eG(1/(1+ev),"zoomOut");},onRotateRight:function(){eV({rotate:eJ+90},"rotateRight");},onRotateLeft:function(){eV({rotate:eJ-90},"rotateLeft");},onFlipX:function(){eV({flipX:!ez.flipX},"flipX");},onFlipY:function(){eV({flipY:!ez.flipY},"flipY");},onClose:ea,onReset:function(){eU("reset");},zIndex:void 0!==eR.zIndex?eR.zIndex+1:void 0,image:e5}));},Q=i("f1020fa4"),J=a._(Q),ee=["crossOrigin","decoding","draggable","loading","referrerPolicy","sizes","srcSet","useMap","alt"],et=["visible","onVisibleChange","getContainer","current","movable","minScale","maxScale","countRender","closeIcon","onChange","onTransform","toolbarRender","imageRender"],en=["src"],er=0,ei=["src","alt","onPreviewClose","prefixCls","previewPrefixCls","placeholder","fallback","width","height","style","preview","className","onClick","onError","wrapperClassName","wrapperStyle","rootClassName"],ea=["src","visible","onVisibleChange","getContainer","mask","maskClassName","movable","icons","scaleStep","minScale","maxScale","imageRender","toolbarRender"],eo=function(n){var r,i,a,o,s=n.src,u=n.alt,f=n.onPreviewClose,h=n.prefixCls,m=void 0===h?"rc-image":h,v=n.previewPrefixCls,_=void 0===v?"".concat(m,"-preview"):v,E=n.placeholder,S=n.fallback,A=n.width,C=n.height,O=n.style,M=n.preview,R=void 0===M||M,P=n.className,k=n.onClick,I=n.onError,L=n.wrapperClassName,N=n.wrapperStyle,F=n.rootClassName,B=(0,y.default)(n,ei),j="object"===(0,g.default)(R)?R:{},z=j.src,U=j.visible,V=void 0===U?void 0:U,G=j.onVisibleChange,H=j.getContainer,W=j.mask,q=j.maskClassName,$=j.movable,Y=j.icons,Z=j.scaleStep,Q=j.minScale,J=j.maxScale,et=j.imageRender,en=j.toolbarRender,eo=(0,y.default)(j,ea),es=null!=z?z:s,el=(0,w.default)(!!V,{value:V,onChange:void 0===G?f:G}),eu=(0,p.default)(el,2),ec=eu[0],ef=eu[1],ed=X({src:s,isCustomPlaceholder:E&&!0!==E,fallback:S}),eh=(0,p.default)(ed,3),ep=eh[0],em=eh[1],eg=eh[2],ev=(0,T.useState)(null),ey=(0,p.default)(ev,2),e_=ey[0],eb=ey[1],ex=(0,T.useContext)(D),eE=!!R,ew=(0,b.default)(m,L,F,(0,d.default)({},"".concat(m,"-error"),"error"===eg)),eS=(0,T.useMemo)(function(){var r={};return ee.forEach(function(i){void 0!==n[i]&&(r[i]=n[i]);}),r;},ee.map(function(r){return n[r];})),eT=(0,T.useMemo)(function(){return(0,c.default)((0,c.default)({},eS),{},{src:es});},[es,eS]),eA=(r=T.useState(function(){return String(er+=1);}),i=(0,p.default)(r,1)[0],a=T.useContext(D),o={data:eT,canPreview:eE},T.useEffect(function(){if(a)return a.register(i,o);},[]),T.useEffect(function(){a&&a.register(i,o);},[eE,eT]),i);return T.createElement(T.Fragment,null,T.createElement("div",(0,l.default)({},B,{className:ew,onClick:eE?function(n){var r=(0,x.getOffset)(n.target),i=r.left,a=r.top;ex?ex.onPreview(eA,es,i,a):(eb({x:i,y:a}),ef(!0)),null==k||k(n);}:k,style:(0,c.default)({width:A,height:C},N)}),T.createElement("img",(0,l.default)({},eS,{className:(0,b.default)("".concat(m,"-img"),(0,d.default)({},"".concat(m,"-img-placeholder"),!0===E),P),style:(0,c.default)({height:C},O),ref:ep},em,{width:A,height:C,onError:I})),"loading"===eg&&T.createElement("div",{"aria-hidden":"true",className:"".concat(m,"-placeholder")},E),W&&eE&&T.createElement("div",{className:(0,b.default)("".concat(m,"-mask"),q),style:{display:(null==O?void 0:O.display)==="none"?"none":void 0}},W)),!ex&&eE&&T.createElement(K,(0,l.default)({"aria-hidden":!ec,visible:ec,prefixCls:_,onClose:function(){ef(!1),eb(null);},mousePosition:e_,src:es,alt:u,imageInfo:{width:A,height:C},fallback:S,getContainer:void 0===H?void 0:H,icons:Y,movable:$,scaleStep:Z,minScale:Q,maxScale:J,rootClassName:F,imageRender:et,imgCommonProps:eS,toolbarRender:en},eo)));};eo.PreviewGroup=function(n){var r,i,a,o,s,u,f=n.previewPrefixCls,h=n.children,m=n.icons,v=n.items,_=n.preview,b=n.fallback,x="object"===(0,g.default)(_)?_:{},E=x.visible,S=x.onVisibleChange,A=x.getContainer,C=x.current,O=x.movable,M=x.minScale,R=x.maxScale,P=x.countRender,k=x.closeIcon,I=x.onChange,L=x.onTransform,N=x.toolbarRender,F=x.imageRender,B=(0,y.default)(x,et),j=(r=T.useState({}),a=(i=(0,p.default)(r,2))[0],o=i[1],s=T.useCallback(function(n,r){return o(function(i){return(0,c.default)((0,c.default)({},i),{},(0,d.default)({},n,r));}),function(){o(function(r){var i=(0,c.default)({},r);return delete i[n],i;});};},[]),[T.useMemo(function(){return v?v.map(function(n){if("string"==typeof n)return{data:{src:n}};var r={};return Object.keys(n).forEach(function(i){["src"].concat((0,J.default)(ee)).includes(i)&&(r[i]=n[i]);}),{data:r};}):Object.keys(a).reduce(function(n,r){var i=a[r],o=i.canPreview,s=i.data;return o&&n.push({data:s,id:r}),n;},[]);},[v,a]),s,!!v]),z=(0,p.default)(j,3),U=z[0],V=z[1],G=z[2],H=(0,w.default)(0,{value:C}),W=(0,p.default)(H,2),X=W[0],q=W[1],$=(0,T.useState)(!1),Y=(0,p.default)($,2),Z=Y[0],Q=Y[1],er=(null===(u=U[X])||void 0===u?void 0:u.data)||{},ei=er.src,ea=(0,y.default)(er,en),eo=(0,w.default)(!!E,{value:E,onChange:function(n,r){null==S||S(n,r,X);}}),es=(0,p.default)(eo,2),el=es[0],eu=es[1],ec=(0,T.useState)(null),ef=(0,p.default)(ec,2),ed=ef[0],eh=ef[1],ep=T.useCallback(function(n,r,i,a){var o=G?U.findIndex(function(n){return n.data.src===r;}):U.findIndex(function(r){return r.id===n;});q(o<0?0:o),eu(!0),eh({x:i,y:a}),Q(!0);},[U,G]);T.useEffect(function(){el?Z||q(0):Q(!1);},[el]);var em=T.useMemo(function(){return{register:V,onPreview:ep};},[V,ep]);return T.createElement(D.Provider,{value:em},h,T.createElement(K,(0,l.default)({"aria-hidden":!el,movable:O,visible:el,prefixCls:void 0===f?"rc-image-preview":f,closeIcon:k,onClose:function(){eu(!1),eh(null);},mousePosition:ed,imgCommonProps:ea,src:ei,fallback:b,icons:void 0===m?{}:m,minScale:M,maxScale:R,getContainer:A,current:X,count:U.length,countRender:P,onTransform:L,toolbarRender:N,imageRender:F,onChange:function(n,r){q(n),null==I||I(n,r);}},B)));};},"3656debc":function(n,r,i){"use strict";var a=i("4d6ab2e4"),o={"text/plain":"Text","text/html":"Url",default:"Text"};n.exports=function(n,r){var i,s,l,u,c,f,d,h,p=!1;r||(r={}),l=r.debug||!1;try{if(c=a(),f=document.createRange(),d=document.getSelection(),(h=document.createElement("span")).textContent=n,h.ariaHidden="true",h.style.all="unset",h.style.position="fixed",h.style.top=0,h.style.clip="rect(0, 0, 0, 0)",h.style.whiteSpace="pre",h.style.webkitUserSelect="text",h.style.MozUserSelect="text",h.style.msUserSelect="text",h.style.userSelect="text",h.addEventListener("copy",function(i){if(i.stopPropagation(),r.format){if(i.preventDefault(),void 0===i.clipboardData){l&&console.warn("unable to use e.clipboardData"),l&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var a=o[r.format]||o.default;window.clipboardData.setData(a,n);}else i.clipboardData.clearData(),i.clipboardData.setData(r.format,n);}r.onCopy&&(i.preventDefault(),r.onCopy(i.clipboardData));}),document.body.appendChild(h),f.selectNodeContents(h),d.addRange(f),!document.execCommand("copy"))throw Error("copy command was unsuccessful");p=!0;}catch(a){l&&console.error("unable to copy using execCommand: ",a),l&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(r.format||"text",n),r.onCopy&&r.onCopy(window.clipboardData),p=!0;}catch(a){l&&console.error("unable to copy using clipboardData: ",a),l&&console.error("falling back to prompt"),i="message"in r?r.message:"Copy to clipboard: #{key}, Enter",s=(/mac os x/i.test(navigator.userAgent)?"\u2318":"Ctrl")+"+C",u=i.replace(/#{\s*key\s*}/g,s),window.prompt(u,n);}}finally{d&&("function"==typeof d.removeRange?d.removeRange(f):d.removeAllRanges()),h&&document.body.removeChild(h),c();}return p;};},"3715e357":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});var a=function(n,r,i){return ni?i:n;};},"3776434f":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{applyScale:function(){return x;},assignScale:function(){return T;},collectScales:function(){return w;},groupTransform:function(){return E;},inferScale:function(){return b;},isPosition:function(){return B;},isValidScale:function(){return j;},syncFacetsScales:function(){return C;},useRelation:function(){return S;},useRelationScale:function(){return A;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("c2287686"),l=i("8c0d48bf"),u=a._(i("19faa3be")),c=a._(i("63aba70a")),f=i("1f4e7f4b"),d=o._(i("ed031284")),h=a._(i("d7948920")),p=a._(i("f515d959")),m=a._(i("7cf6ebc4")),g=i("cfce14bf"),v=i("f5373dff"),y=i("148614a5"),_=i("c4368857");function b(n,r,i,a,o,u){let{guide:c={}}=i,f=function(n,r,i){let{type:a,domain:o,range:s,quantitative:l,ordinal:u}=i;return void 0!==a?a:F(r,v.isStrictObject)?"identity":"string"==typeof s?"linear":(o||s||[]).length>2?k(n,u):void 0!==o?N([o])?k(n,u):D(r)?"time":I(n,s,l):N(r)?k(n,u):D(r)?"time":I(n,s,l);}(n,r,i);if("string"!=typeof f)return i;let h=function(n,r,i,a){let{domain:o}=a;if(void 0!==o)return o;switch(n){case"linear":case"time":case"log":case"pow":case"sqrt":case"quantize":case"threshold":return L(function(n,r){let{zero:i=!1}=r,a=1/0,o=-1/0;for(let r of n)for(let n of r)(0,v.defined)(n)&&(a=Math.min(a,+n),o=Math.max(o,+n));return a===1/0?[]:i?[Math.min(0,a),o]:[a,o];}(i,a),a);case"band":case"ordinal":case"point":return Array.from(new Set(i.flat()));case"quantile":return i.flat().sort();case"sequential":return L(function(n){let r=1/0,i=-1/0;for(let a of n)for(let n of a)(0,v.defined)(n)&&(r=Math.min(r,+n),i=Math.max(i,+n));return r===1/0?[]:[r<0?-i:r,i];}(i),a);default:return[];}}(f,0,r,i),p=function(n,r,i){let{ratio:a}=i;return null==a?r:M({type:n})?function(n,r,i){let a=n.map(Number),o=new s.Linear({domain:a,range:[a[0],a[0]+(a[a.length-1]-a[0])*r]});return"time"===i?n.map(n=>new Date(o.map(n))):n.map(n=>o.map(n));}(r,a,n):R({type:n})?function(n,r){let i=Math.round(n.length*r);return n.slice(0,i);}(r,a):r;}(f,h,i);return Object.assign(Object.assign(Object.assign({},i),function(n,r,i,a,o){switch(n){case"linear":case"time":case"log":case"pow":case"sqrt":return function(n,r){let{interpolate:i=l.createInterpolateValue,nice:a=!1,tickCount:o=5}=r;return Object.assign(Object.assign({},r),{interpolate:i,nice:a,tickCount:o});}(0,a);case"band":case"point":return function(n,r,i,a){if(void 0!==a.padding||void 0!==a.paddingInner||void 0!==a.paddingOuter)return Object.assign(Object.assign({},a),{unknown:NaN});let o="enterDelay"===r||"enterDuration"===r||"size"===r?0:"band"===n?(0,y.isTheta)(i)?0:.1:"point"===n?.5:0,{paddingInner:s=o,paddingOuter:l=o}=a;return Object.assign(Object.assign({},a),{paddingInner:s,paddingOuter:l,padding:o,unknown:NaN});}(n,r,o,a);case"sequential":return function(n){let{palette:r="ylGnBu",offset:i}=n,a=(0,m.default)(r),o=d[`interpolate${a}`];if(!o)throw Error(`Unknown palette: ${a}`);return{interpolator:i?n=>o(i(n)):o};}(a);default:return a;}}(f,n,0,i,a)),{domain:p,range:function(n,r,i,a,o,s,l){let{range:u}=a;if("string"==typeof u)return u.split("-");if(void 0!==u)return u;let{rangeMin:c,rangeMax:f}=a;switch(n){case"linear":case"time":case"log":case"pow":case"sqrt":{var d;let[n,u]=(d=P(i,a,o,s,l),"enterDelay"===r?[0,1e3]:"enterDuration"==r?[300,1e3]:r.startsWith("y")||r.startsWith("position")?[1,0]:"color"===r?[(0,g.firstOf)(d),(0,g.lastOf)(d)]:"opacity"===r?[0,1]:"size"===r?[1,10]:[0,1]);return[null!=c?c:n,null!=f?f:u];}case"band":case"point":{let n="size"===r?5:0,i="size"===r?10:1;return[null!=c?c:n,null!=f?f:i];}case"ordinal":return P(i,a,o,s,l);case"sequential":return;case"constant":return[i[0][0]];default:return[];}}(f,n,r,i,p,o,u),expectedDomain:h,guide:c,name:n,type:f});}function x(n,r){let i={};for(let a of n){let{values:n,name:o}=a,s=r[o];for(let r of n){let{name:n,value:a}=r;i[n]=a.map(n=>s.map(n));}}return i;}function E(n,r){let i=Array.from(n.values()).flatMap(n=>n.channels);(0,f.rollups)(i,n=>n.map(n=>r.get(n.scale.uid)),n=>n.name).filter(([,n])=>n.some(n=>"function"==typeof n.getOptions().groupTransform)&&n.every(n=>n.getTicks)).map(n=>n[1]).forEach(n=>{(0,n.map(n=>n.getOptions().groupTransform)[0])(n);});}function w(n,r){var i;let{components:a=[]}=r,o=["scale","encode","axis","legend","data","transform"],s=Array.from(new Set(n.flatMap(n=>n.channels.map(n=>n.scale)))),l=new Map(s.map(n=>[n.name,n]));for(let n of a)for(let r of function(n){let{channels:r=[],type:i,scale:a={}}=n,o=["shape","color","opacity","size"];return 0!==r.length?r:"axisX"===i?["x"]:"axisY"===i?["y"]:"legends"===i?Object.keys(a).filter(n=>o.includes(n)):[];}(n)){let a=l.get(r),u=(null===(i=n.scale)||void 0===i?void 0:i[r])||{},{independent:c=!1}=u;if(a&&!c){let{guide:r}=a,i="boolean"==typeof r?{}:r;a.guide=(0,h.default)({},i,n),Object.assign(a,u);}else{let i=Object.assign(Object.assign({},u),{expectedDomain:u.domain,name:r,guide:(0,p.default)(n,o)});s.push(i);}}return s;}function S(n){let r,i;return n&&Array.isArray(n)?[a=>{var o;r=a.map.bind(a),i=null===(o=a.invert)||void 0===o?void 0:o.bind(a);let s=n.filter(([n])=>"function"==typeof n),l=n.filter(([n])=>"function"!=typeof n),u=new Map(l);if(a.map=n=>{for(let[r,i]of s)if(r(n))return i;return u.has(n)?u.get(n):r(n);},!i)return a;let c=new Map(l.map(([n,r])=>[r,n])),f=new Map(s.map(([n,r])=>[r,n]));return a.invert=n=>f.has(n)?n:c.has(n)?c.get(n):i(n),a;},n=>(null!==r&&(n.map=r),null!==i&&(n.invert=i),n)]:[v.identity,v.identity];}function T(n,r){let i=Object.keys(n);for(let a of Object.values(r)){let{name:r}=a.getOptions();if(r in n){let o=i.filter(n=>n.startsWith(r)).map(n=>+(n.replace(r,"")||0)),s=(0,c.default)(o)+1,l=`${r}${s}`;n[l]=a,a.getOptions().key=l;}else n[r]=a;}return n;}function A(n,r){let[i]=(0,_.useLibrary)("scale",r),{relations:a}=n,[o]=S(a);return o(i(n));}function C(n){let r=n.flatMap(n=>Array.from(n.values())).flatMap(n=>n.channels.map(n=>n.scale));O(r,"x"),O(r,"y");}function O(n,r){let i=n.filter(({name:n,facet:i=!0})=>i&&n===r),a=i.flatMap(n=>n.domain),o=i.every(M)?(0,u.default)(a):i.every(R)?Array.from(new Set(a)):null;if(null!==o)for(let n of i)n.domain=o;}function M(n){let{type:r}=n;return"string"==typeof r&&["linear","log","pow","time"].includes(r);}function R(n){let{type:r}=n;return"string"==typeof r&&["band","point","ordinal"].includes(r);}function P(n,r,i,a,o){let[s]=(0,_.useLibrary)("palette",o),{category10:l,category20:u}=a,c=(0,g.unique)(i).length<=l.length?l:u,{palette:f=c,offset:h}=r;if(Array.isArray(f))return f;try{return s({type:f});}catch(r){let n=function(n,r,i=n=>n){if(!n)return null;let a=(0,m.default)(n),o=d[`scheme${a}`],s=d[`interpolate${a}`];if(!o&&!s)return null;if(o){if(!o.some(Array.isArray))return o;let n=o[r.length];if(n)return n;}return r.map((n,a)=>s(i(a/r.length)));}(f,i,h);if(n)return n;throw Error(`Unknown Component: ${f} `);}}function k(n,r){return r||(n.startsWith("x")||n.startsWith("y")||n.startsWith("position")||n.startsWith("size")?"point":"ordinal");}function I(n,r,i){return i||("color"!==n?"linear":r?"linear":"sequential");}function L(n,r){if(0===n.length)return n;let{domainMin:i,domainMax:a}=r,[o,s]=n;return[null!=i?i:o,null!=a?a:s];}function N(n){return F(n,n=>{let r=typeof n;return"string"===r||"boolean"===r;});}function D(n){return F(n,n=>n instanceof Date);}function F(n,r){for(let i of n)if(i.some(r))return!0;return!1;}function B(n){return n.startsWith("x")||n.startsWith("y")||n.startsWith("position")||"enterDelay"===n||"enterDuration"===n||"updateDelay"===n||"updateDuration"===n||"exitDelay"===n||"exitDuration"===n;}function j(n){if(!n||!n.type)return!1;if("function"==typeof n.type)return!0;let{type:r,domain:i,range:a,interpolator:o}=n,s=i&&i.length>0,l=a&&a.length>0;return!!(["linear","sqrt","log","time","pow","threshold","quantize","quantile","ordinal","band","point"].includes(r)&&s&&l||["sequential"].includes(r)&&s&&(l||o)||["constant","identity"].includes(r)&&l);}},"377bcc16":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{add:function(){return h;},angle:function(){return O;},clone:function(){return l;},copy:function(){return f;},create:function(){return s;},cross:function(){return w;},dist:function(){return P;},distance:function(){return _;},dot:function(){return E;},equals:function(){return M;},forEach:function(){return I;},fromValues:function(){return c;},len:function(){return k;},length:function(){return u;},lerp:function(){return S;},max:function(){return v;},min:function(){return g;},multiply:function(){return m;},negate:function(){return b;},normalize:function(){return x;},scale:function(){return y;},set:function(){return d;},sub:function(){return R;},subtract:function(){return p;},transformMat3:function(){return A;},transformMat4:function(){return T;},transformQuat:function(){return C;}});var a,o=i("852bbaa9")._(i("1cf5f081"));function s(){var n=new o.ARRAY_TYPE(3);return o.ARRAY_TYPE!=Float32Array&&(n[0]=0,n[1]=0,n[2]=0),n;}function l(n){var r=new o.ARRAY_TYPE(3);return r[0]=n[0],r[1]=n[1],r[2]=n[2],r;}function u(n){return Math.hypot(n[0],n[1],n[2]);}function c(n,r,i){var a=new o.ARRAY_TYPE(3);return a[0]=n,a[1]=r,a[2]=i,a;}function f(n,r){return n[0]=r[0],n[1]=r[1],n[2]=r[2],n;}function d(n,r,i,a){return n[0]=r,n[1]=i,n[2]=a,n;}function h(n,r,i){return n[0]=r[0]+i[0],n[1]=r[1]+i[1],n[2]=r[2]+i[2],n;}function p(n,r,i){return n[0]=r[0]-i[0],n[1]=r[1]-i[1],n[2]=r[2]-i[2],n;}function m(n,r,i){return n[0]=r[0]*i[0],n[1]=r[1]*i[1],n[2]=r[2]*i[2],n;}function g(n,r,i){return n[0]=Math.min(r[0],i[0]),n[1]=Math.min(r[1],i[1]),n[2]=Math.min(r[2],i[2]),n;}function v(n,r,i){return n[0]=Math.max(r[0],i[0]),n[1]=Math.max(r[1],i[1]),n[2]=Math.max(r[2],i[2]),n;}function y(n,r,i){return n[0]=r[0]*i,n[1]=r[1]*i,n[2]=r[2]*i,n;}function _(n,r){return Math.hypot(r[0]-n[0],r[1]-n[1],r[2]-n[2]);}function b(n,r){return n[0]=-r[0],n[1]=-r[1],n[2]=-r[2],n;}function x(n,r){var i=r[0],a=r[1],o=r[2],s=i*i+a*a+o*o;return s>0&&(s=1/Math.sqrt(s)),n[0]=r[0]*s,n[1]=r[1]*s,n[2]=r[2]*s,n;}function E(n,r){return n[0]*r[0]+n[1]*r[1]+n[2]*r[2];}function w(n,r,i){var a=r[0],o=r[1],s=r[2],l=i[0],u=i[1],c=i[2];return n[0]=o*c-s*u,n[1]=s*l-a*c,n[2]=a*u-o*l,n;}function S(n,r,i,a){var o=r[0],s=r[1],l=r[2];return n[0]=o+a*(i[0]-o),n[1]=s+a*(i[1]-s),n[2]=l+a*(i[2]-l),n;}function T(n,r,i){var a=r[0],o=r[1],s=r[2],l=i[3]*a+i[7]*o+i[11]*s+i[15];return l=l||1,n[0]=(i[0]*a+i[4]*o+i[8]*s+i[12])/l,n[1]=(i[1]*a+i[5]*o+i[9]*s+i[13])/l,n[2]=(i[2]*a+i[6]*o+i[10]*s+i[14])/l,n;}function A(n,r,i){var a=r[0],o=r[1],s=r[2];return n[0]=a*i[0]+o*i[3]+s*i[6],n[1]=a*i[1]+o*i[4]+s*i[7],n[2]=a*i[2]+o*i[5]+s*i[8],n;}function C(n,r,i){var a=i[0],o=i[1],s=i[2],l=i[3],u=r[0],c=r[1],f=r[2],d=o*f-s*c,h=s*u-a*f,p=a*c-o*u,m=o*p-s*h,g=s*d-a*p,v=a*h-o*d,y=2*l;return d*=y,h*=y,p*=y,m*=2,g*=2,v*=2,n[0]=u+d+m,n[1]=c+h+g,n[2]=f+p+v,n;}function O(n,r){var i=n[0],a=n[1],o=n[2],s=r[0],l=r[1],u=r[2],c=Math.sqrt(i*i+a*a+o*o)*Math.sqrt(s*s+l*l+u*u);return Math.acos(Math.min(Math.max(c&&E(n,r)/c,-1),1));}function M(n,r){var i=n[0],a=n[1],s=n[2],l=r[0],u=r[1],c=r[2];return Math.abs(i-l)<=o.EPSILON*Math.max(1,Math.abs(i),Math.abs(l))&&Math.abs(a-u)<=o.EPSILON*Math.max(1,Math.abs(a),Math.abs(u))&&Math.abs(s-c)<=o.EPSILON*Math.max(1,Math.abs(s),Math.abs(c));}var R=p,P=_,k=u,I=(a=s(),function(n,r,i,o,s,l){var u,c;for(r||(r=3),i||(i=0),c=o?Math.min(o*r+i,n.length):n.length,u=i;ur.indexOf(a)&&(i[a]=n[a]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,a=Object.getOwnPropertySymbols(n);or.indexOf(a[o])&&Object.prototype.propertyIsEnumerable.call(n,a[o])&&(i[a[o]]=n[a[o]]);return i;}function u(n,r,i,a){return new(i||(i=Promise))(function(o,s){function l(n){try{c(a.next(n));}catch(n){s(n);}}function u(n){try{c(a.throw(n));}catch(n){s(n);}}function c(n){var r;n.done?o(n.value):((r=n.value)instanceof i?r:new i(function(n){n(r);})).then(l,u);}c((a=a.apply(n,r||[])).next());});}function c(n,r){var i,a,o,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1];},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return l.next=u(0),l.throw=u(1),l.return=u(2),"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this;}),l;function u(u){return function(c){return function(u){if(i)throw TypeError("Generator is already executing.");for(;l&&(l=0,u[0]&&(s=0)),s;)try{if(i=1,a&&(o=2&u[0]?a.return:u[0]?a.throw||((o=a.return)&&o.call(a),0):a.next)&&!(o=o.call(a,u[1])).done)return o;switch(a=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return s.label++,{value:u[1],done:!1};case 5:s.label++,a=u[1],u=[0];continue;case 7:u=s.ops.pop(),s.trys.pop();continue;default:if(!(o=(o=s.trys).length>0&&o[o.length-1])&&(6===u[0]||2===u[0])){s=0;continue;}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]=n.length&&(n=void 0),{value:n&&n[a++],done:!n};}};throw TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.");}function h(n,r){var i="function"==typeof Symbol&&n[Symbol.iterator];if(!i)return n;var a,o,s=i.call(n),l=[];try{for(;(void 0===r||r-- >0)&&!(a=s.next()).done;)l.push(a.value);}catch(n){o={error:n};}finally{try{a&&!a.done&&(i=s.return)&&i.call(s);}finally{if(o)throw o.error;}}return l;}function p(n,r,i){if(i||2==arguments.length)for(var a,o=0,s=r.length;or.indexOf(a)&&(i[a]=n[a]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,a=Object.getOwnPropertySymbols(n);or.indexOf(a[o])&&Object.prototype.propertyIsEnumerable.call(n,a[o])&&(i[a[o]]=n[a[o]]);return i;};function y(n,r){let{eulerAngles:i,origin:a}=r;a&&n.setOrigin(a),i&&n.rotate(i[0],i[1],i[2]);}function _(n){let{innerWidth:r,innerHeight:i,depth:a}=n.getOptions();return[r,i,a];}function b(n,r,i,a,o,l,u,c){var d;(void 0!==i||void 0!==l)&&n.update(Object.assign(Object.assign({},i&&{tickCount:i}),l&&{tickMethod:l}));let m=function(n,r,i){if(n.getTicks)return n.getTicks();if(!i)return r;let[a,o]=(0,f.default)(r,n=>+n),{tickCount:s}=n.getOptions();return i(a,o,s);}(n,r,l),g=o?m.filter(o):m,v=n=>n instanceof Date?String(n):"object"==typeof n&&n?n:String(n),y=a||(null===(d=n.getFormatter)||void 0===d?void 0:d.call(n))||v,_=function(n,r){if((0,h.isPolar)(r))return n=>n;let{innerWidth:i,innerHeight:a,insetTop:o,insetBottom:l,insetLeft:u,insetRight:c}=r.getOptions(),[f,d,p]="left"===n||"right"===n?[o,l,a]:[u,c,i],m=new s.Linear({domain:[0,1],range:[f/p,1-d/p]});return n=>m.map(n);}(u,c),b=function(n,r){let{width:i,height:a}=r.getOptions();return o=>{if(!(0,h.isFisheye)(r))return o;let l=r.map("bottom"===n?[o,1]:[0,o]);if("bottom"===n){let n=l[0];return new s.Linear({domain:[0,i],range:[0,1]}).map(n);}if("left"===n){let n=l[1];return new s.Linear({domain:[0,a],range:[0,1]}).map(n);}return o;};}(u,c),x=n=>["top","bottom","center","outer"].includes(n),E=n=>["left","right"].includes(n);return(0,h.isPolar)(c)||(0,h.isTranspose)(c)?g.map((r,i,a)=>{var o,s;let l=(null===(o=n.getBandWidth)||void 0===o?void 0:o.call(n,r))/2||0,f=_(n.map(r)+l);return{value:(0,h.isRadial)(c)&&"center"===u||(0,h.isTranspose)(c)&&(null===(s=n.getTicks)||void 0===s?void 0:s.call(n))&&x(u)||(0,h.isTranspose)(c)&&E(u)?1-f:f,label:v(y((0,p.prettyNumber)(r),i,a)),id:String(i)};}):g.map((r,i,a)=>{var o;let s=(null===(o=n.getBandWidth)||void 0===o?void 0:o.call(n,r))/2||0,l=b(_(n.map(r)+s));return{value:E(u)?1-l:l,label:v(y((0,p.prettyNumber)(r),i,a)),id:String(i)};});}let x=n=>r=>{let{labelFormatter:i,labelFilter:a=()=>!0}=r;return o=>{var s;let{scales:[l]}=o,u=(null===(s=l.getTicks)||void 0===s?void 0:s.call(l))||l.getOptions().domain,c="string"==typeof i?(0,d.format)(i):i;return n(Object.assign(Object.assign({},r),{labelFormatter:c,labelFilter:(n,r,i)=>a(u[r],r,u),scale:l}))(o);};},E=x(n=>{let{direction:r="left",important:i={},labelFormatter:a,order:s,orientation:l,actualPosition:u,position:f,size:d,style:p={},title:y,tickCount:x,tickFilter:E,tickMethod:w,transform:S,indexBBox:T}=n,A=v(n,["direction","important","labelFormatter","order","orientation","actualPosition","position","size","style","title","tickCount","tickFilter","tickMethod","transform","indexBBox"]);return({scales:s,value:v,coordinate:C,theme:O})=>{var M;let{bbox:R}=v,[P]=s,{domain:k,xScale:I}=P.getOptions(),L=Object.assign(Object.assign(Object.assign({},function(n,r,i,a,o,s){let l=function(n,r,i,a,o,s){let l=i.axis,u=["top","right","bottom","left"].includes(o)?i[`axis${(0,m.capitalizeFirst)(o)}`]:i.axisLinear,f=n.getOptions().name;return Object.assign({},l,u,i[`axis${(0,c.default)(f)}`]||{});}(n,0,i,0,o,0);return"center"===o?Object.assign(Object.assign(Object.assign(Object.assign({},l),{labelDirection:"right"===a?"negative":"positive"}),"center"===a?{labelTransform:"translate(50%,0)"}:null),{tickDirection:"right"===a?"negative":"positive",labelSpacing:"center"===a?0:4,titleSpacing:(0,g.isVertical)(s)?10:0,tick:"center"!==a&&void 0}):l;}(P,0,O,r,f,l)),p),A),N=function(n,r,i="xy"){let[a,o,s]=_(r);return"xy"===i?n.includes("bottom")||n.includes("top")?o:a:"xz"===i?n.includes("bottom")||n.includes("top")?s:a:n.includes("bottom")||n.includes("top")?o:s;}(u||f,C,n.plane),D=function(n,r,i,a,o){let{x:s,y:l,width:u,height:c}=i;if("bottom"===n)return{startPos:[s,l],endPos:[s+u,l]};if("left"===n)return{startPos:[s+u,l+c],endPos:[s+u,l]};if("right"===n)return{startPos:[s,l+c],endPos:[s,l]};if("top"===n)return{startPos:[s,l+c],endPos:[s+u,l+c]};if("center"===n){if("vertical"===r)return{startPos:[s,l],endPos:[s,l+c]};if("horizontal"===r)return{startPos:[s,l],endPos:[s+u,l]};if("number"==typeof r){let[n,i]=a.getCenter(),[f,d]=(0,h.radiusOf)(a),[p,m]=(0,h.angleOf)(a),g=Math.min(u,c)/2,{insetLeft:v,insetTop:y}=a.getOptions(),_=f*g,b=d*g,[x,E]=[n+s-v,i+l-y],[w,S]=[Math.cos(r),Math.sin(r)],T=(0,h.isPolar)(a)&&o?(()=>{let{domain:n}=o.getOptions();return n.length;})():3;return{startPos:[x+b*w,E+b*S],endPos:[x+_*w,E+_*S],gridClosed:1e-6>Math.abs(m-p-360),gridCenter:[x,E],gridControlAngles:Array(T).fill(0).map((n,r,i)=>(m-p)/T*r)};}}return{};}(f,l,R,C,I),F=function(n){let{depth:r}=n.getOptions();return r?{tickIsBillboard:!0,lineIsBillboard:!0,labelIsBillboard:!0,titleIsBillboard:!0,gridIsBillboard:!0}:{};}(C),B=b(P,k,x,a,E,w,f,C),j=T?B.map((n,r)=>{let i=T.get(r);return i&&i[0]===n.label?Object.assign(Object.assign({},n),{bbox:i[1]}):n;}):B,z=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},L),{type:"linear",data:j,crossSize:d,titleText:(0,g.titleContent)(y),labelOverlap:function(n=[],r){if(n.length>0)return n;let{labelAutoRotate:i,labelAutoHide:a,labelAutoEllipsis:o,labelAutoWrap:s}=r,l=[],u=(n,r)=>{r&&l.push(Object.assign(Object.assign({},n),r));};return u({type:"rotate",optionalAngles:[0,15,30,45,60,90]},i),u({type:"ellipsis",minLength:20},o),u({type:"hide"},a),u({type:"wrap",wordWrapWidth:100,maxLines:3,recoveryWhenFail:!0},s),l;}(S,L),grid:(M=L.grid,!((0,h.isTheta)(C)||(0,h.isParallel)(C))&&(void 0===M?!!P.getTicks:M)),gridLength:N,line:!0,indexBBox:T}),L.line?null:{lineOpacity:0}),D),F),i);return z.labelOverlap.find(n=>"hide"===n.type)&&(z.crossSize=!1),new o.Axis({className:"axis",style:(0,g.adaptor)(z)});};}),w=x(n=>{let{order:r,size:i,position:a,orientation:s,labelFormatter:c,tickFilter:f,tickCount:d,tickMethod:p,important:m={},style:y={},indexBBox:x,title:E,grid:w=!1}=n,S=v(n,["order","size","position","orientation","labelFormatter","tickFilter","tickCount","tickMethod","important","style","indexBBox","title","grid"]);return({scales:[n],value:r,coordinate:i,theme:s})=>{let{bbox:v}=r,{domain:y}=n.getOptions(),T=b(n,y,d,c,f,p,a,i),A=x?T.map((n,r)=>{let i=x.get(r);return i&&i[0]===n.label?Object.assign(Object.assign({},n),{bbox:i[1]}):n;}):T,[C,O]=(0,h.radiusOf)(i),M=function(n,r,i,a,o){let{x:s,y:l,width:u,height:c}=r,f=[s+u/2,l+c/2],d=Math.min(u,c)/2,[p,m]=(0,h.angleOf)(o),[g,v]=_(o),y={center:f,radius:d,startAngle:p,endAngle:m,gridLength:Math.min(g,v)/2*(a-i)};if("inner"===n){let{insetLeft:n,insetTop:r}=o.getOptions();return Object.assign(Object.assign({},y),{center:[f[0]-n,f[1]-r],labelAlign:"perpendicular",labelDirection:"positive",tickDirection:"positive",gridDirection:"negative"});}return Object.assign(Object.assign({},y),{labelAlign:"parallel",labelDirection:"negative",tickDirection:"negative",gridDirection:"positive"});}(a,v,C,O,i),{axis:R,axisArc:P={}}=s,k=(0,g.adaptor)((0,l.default)({},R,P,M,Object.assign(Object.assign({type:"arc",data:A,titleText:(0,g.titleContent)(E),grid:w},S),m)));return new o.Axis({style:(0,u.default)(k,["transform"])});};});E.props={defaultPosition:"center",defaultSize:45,defaultOrder:0,defaultCrossPadding:[12,12],defaultPadding:[12,12]},w.props={defaultPosition:"outer",defaultOrientation:"vertical",defaultSize:45,defaultOrder:0,defaultCrossPadding:[12,12],defaultPadding:[12,12]};},"3bb506d6":function(n,r,i){n.exports=function(n,r,i){for(var a=i-1,o=n.length;++a ".concat(r),{"&-header":{paddingInlineEnd:0,paddingBlockEnd:n.padding,paddingInlineStart:0},"&-body":{paddingBlock:0,paddingInline:0,backgroundColor:"transparent"}}),"&&-split > &-body":{paddingBlock:0,paddingInline:0},"&&-contain-card > &-body":{display:"flex"}},"".concat(r,"-body-direction-column"),{flexDirection:"column"}),"".concat(r,"-body-wrap"),{flexWrap:"wrap"}),"&&-collapse",(0,o.default)({},"> ".concat(r),{"&-header":{paddingBlockEnd:n.padding,borderBlockEnd:0},"&-body":{display:"none"}})),"".concat(r,"-header"),{display:"flex",alignItems:"center",justifyContent:"space-between",paddingInline:n.paddingLG,paddingBlock:n.padding,paddingBlockEnd:0,"&-border":{"&":{paddingBlockEnd:n.padding},borderBlockEnd:"".concat(n.lineWidth,"px ").concat(n.lineType," ").concat(n.colorSplit)},"&-collapsible":{cursor:"pointer"}}),"".concat(r,"-title"),{color:n.colorText,fontWeight:500,fontSize:n.fontSizeLG,lineHeight:n.lineHeight}),"".concat(r,"-extra"),{color:n.colorText}),"".concat(r,"-type-inner"),(0,o.default)({},"".concat(r,"-header"),{backgroundColor:n.colorFillAlter})),"".concat(r,"-collapsible-icon"),{marginInlineEnd:n.marginXS,color:n.colorIconHover,":hover":{color:n.colorPrimaryHover},"& svg":{transition:"transform ".concat(n.motionDurationMid)}}),"".concat(r,"-body"),{display:"block",boxSizing:"border-box",height:"100%",paddingInline:n.paddingLG,paddingBlock:n.padding,"&-center":{display:"flex",alignItems:"center",justifyContent:"center"}}),"&&-size-small",(0,o.default)((0,o.default)({},r,{"&-header":{paddingInline:n.paddingSM,paddingBlock:n.paddingXS,paddingBlockEnd:0,"&-border":{paddingBlockEnd:n.paddingXS}},"&-title":{fontSize:n.fontSize},"&-body":{paddingInline:n.paddingSM,paddingBlock:n.paddingSM}}),"".concat(r,"-header").concat(r,"-header-collapsible"),{paddingBlock:n.paddingXS})))),"".concat(r,"-col"),(0,o.default)((0,o.default)({},"&".concat(r,"-split-vertical"),{borderInlineEnd:"".concat(n.lineWidth,"px ").concat(n.lineType," ").concat(n.colorSplit)}),"&".concat(r,"-split-horizontal"),{borderBlockEnd:"".concat(n.lineWidth,"px ").concat(n.lineType," ").concat(n.colorSplit)})),"".concat(r,"-tabs"),(0,o.default)((0,o.default)((0,o.default)((0,o.default)((0,o.default)((0,o.default)({},"".concat(n.antCls,"-tabs-top > ").concat(n.antCls,"-tabs-nav"),(0,o.default)({marginBlockEnd:0},"".concat(n.antCls,"-tabs-nav-list"),{marginBlockStart:n.marginXS,paddingInlineStart:n.padding})),"".concat(n.antCls,"-tabs-bottom > ").concat(n.antCls,"-tabs-nav"),(0,o.default)({marginBlockEnd:0},"".concat(n.antCls,"-tabs-nav-list"),{paddingInlineStart:n.padding})),"".concat(n.antCls,"-tabs-left"),(0,o.default)({},"".concat(n.antCls,"-tabs-content-holder"),(0,o.default)({},"".concat(n.antCls,"-tabs-content"),(0,o.default)({},"".concat(n.antCls,"-tabs-tabpane"),{paddingInlineStart:0})))),"".concat(n.antCls,"-tabs-left > ").concat(n.antCls,"-tabs-nav"),(0,o.default)({marginInlineEnd:0},"".concat(n.antCls,"-tabs-nav-list"),{paddingBlockStart:n.padding})),"".concat(n.antCls,"-tabs-right"),(0,o.default)({},"".concat(n.antCls,"-tabs-content-holder"),(0,o.default)({},"".concat(n.antCls,"-tabs-content"),(0,o.default)({},"".concat(n.antCls,"-tabs-tabpane"),{paddingInlineStart:0})))),"".concat(n.antCls,"-tabs-right > ").concat(n.antCls,"-tabs-nav"),(0,o.default)({},"".concat(n.antCls,"-tabs-nav-list"),{paddingBlockStart:n.padding})));},f=function(n,r){var i=r.componentCls;return 0===n?(0,o.default)({},"".concat(i,"-col-0"),{display:"none"}):(0,o.default)({},"".concat(i,"-col-").concat(n),{flexShrink:0,width:"".concat(n/24*100,"%")});};function d(n){return(0,l.useStyle)("ProCard",function(r){var i=(0,s.default)((0,s.default)({},r),{},{componentCls:".".concat(n)});return[c(i),Array(25).fill(1).map(function(n,r){return f(r,i);})];});}},"3efd64b7":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return c;},phi:function(){return l;},squarifyRatio:function(){return u;}});var a=i("777fffbe"),o=a._(i("a96a4c71")),s=a._(i("01c1137e")),l=(1+Math.sqrt(5))/2;function u(n,r,i,a,l,u){for(var c,f,d,h,p,m,g,v,y,_,b,x=[],E=r.children,w=0,S=0,T=E.length,A=r.value;wg&&(g=f),(v=Math.max(g/(b=p*p*_),b/m))>y){p-=f;break;}y=v;}x.push(c={value:p,dice:d1?r:1);},i;}(l);},"3f3add3b":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return l;}});var a=i("777fffbe"),o=a._(i("480dd2d5")),s=a._(i("b42f1d64")),l=function(n){if(!(0,s.default)(n))return!1;var r=(0,o.default)(n);return"[object Function]"==r||"[object GeneratorFunction]"==r||"[object AsyncFunction]"==r||"[object Proxy]"==r;};},"3f775776":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});var a=i("777fffbe")._(i("2cc7f81c")).default.Symbol;},"3f92e064":function(n,r,i){"use strict";function a(n,r){return Math.sqrt((n[0]-r[0])*(n[0]-r[0])+(n[1]-r[1])*(n[1]-r[1]));}i.d(r,"__esModule",{value:!0}),i.d(r,"distanceSquareRoot",{enumerable:!0,get:function(){return a;}});},"4017e4bc":function(n,r,i){"use strict";function a(n,r){return n=+n,r=+r,function(i){return n*(1-i)+r*i;};}i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});},"40c8a0ce":function(n,r,i){var a=i("1c9de5a5"),o=i("426615a4"),s=i("27063286"),l=i("20367225"),u=i("469db534"),c=i("bbc15be8"),f=i("a76367d1"),d=i("a59b28c4"),h="[object Arguments]",p="[object Array]",m="[object Object]",g=Object.prototype.hasOwnProperty;n.exports=function(n,r,i,v,y,_){var b=c(n),x=c(r),E=b?p:u(n),w=x?p:u(r);E=E==h?m:E,w=w==h?m:w;var S=E==m,T=w==m,A=E==w;if(A&&f(n)){if(!f(r))return!1;b=!0,S=!1;}if(A&&!S)return _||(_=new a),b||d(n)?o(n,r,i,v,y,_):s(n,r,E,i,v,y,_);if(!(1&i)){var C=S&&g.call(n,"__wrapped__"),O=T&&g.call(r,"__wrapped__");if(C||O){var M=C?n.value():n,R=O?r.value():r;return _||(_=new a),y(M,R,i,v,_);}}return!!A&&(_||(_=new a),l(n,r,i,v,y,_));};},"410a4659":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"Vector",{enumerable:!0,get:function(){return u;}});var a=i("af0c43b0"),o=i("45669125"),s=i("7d4c6398"),l=this&&this.__rest||function(n,r){var i={};for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&0>r.indexOf(a)&&(i[a]=n[a]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,a=Object.getOwnPropertySymbols(n);or.indexOf(a[o])&&Object.prototype.propertyIsEnumerable.call(n,a[o])&&(i[a[o]]=n[a[o]]);return i;};let u=(n,r)=>{let{arrow:i=!0,arrowSize:u="40%"}=n,c=l(n,["arrow","arrowSize"]),{document:f}=r;return(n,r,d)=>{let{defaultColor:h}=d,p=l(d,["defaultColor"]),{color:m=h,transform:g}=r,[v,y]=n,_=(0,a.path)();if(_.moveTo(...v),_.lineTo(...y),i){let[n,r]=(0,o.arrowPoints)(v,y,{arrowSize:u});_.moveTo(...n),_.lineTo(...y),_.lineTo(...r);}return(0,s.select)(f.createElement("path",{})).call(o.applyStyle,p).style("d",_.toString()).style("stroke",m).style("transform",g).call(o.applyStyle,c).node();};};u.props={defaultMarker:"line",defaultEnterAnimation:"fadeIn",defaultUpdateAnimation:"morphing",defaultExitAnimation:"fadeOut"};},"41a7442f":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return _;}});var a=i("777fffbe"),o=i("78a22024"),s=a._(o),l=i("adf76174"),u=a._(l),c=i("609f48be");a._(c);var f=i("e4870cf0"),d=a._(f),h=i("a854094b"),p=a._(h),m=i("398ab4d8"),g=i("a3273044"),v=new m.Keyframes("card-loading",{"0%":{backgroundPosition:"0 50%"},"50%":{backgroundPosition:"100% 50%"},"100%":{backgroundPosition:"0 50%"}}),y=i("dac8af92"),_=function(n){var r,i=n.style,a=n.prefix;return(0,(r=a||"ant-pro-card",(0,g.useStyle)("ProCardLoading",function(n){var i;return[(i=(0,d.default)((0,d.default)({},n),{},{componentCls:".".concat(r)}),(0,p.default)({},i.componentCls,(0,p.default)((0,p.default)({"&-loading":{overflow:"hidden"},"&-loading &-body":{userSelect:"none"}},"".concat(i.componentCls,"-loading-content"),{width:"100%",p:{marginBlock:0,marginInline:0}}),"".concat(i.componentCls,"-loading-block"),{height:"14px",marginBlock:"4px",background:"linear-gradient(90deg, rgba(54, 61, 64, 0.2), rgba(54, 61, 64, 0.4), rgba(54, 61, 64, 0.2))",backgroundSize:"600% 600%",borderRadius:i.borderRadius,animationName:v,animationDuration:"1.4s",animationTimingFunction:"ease",animationIterationCount:"infinite"})))];})).wrapSSR)((0,y.jsxs)("div",{className:"".concat(a,"-loading-content"),style:i,children:[(0,y.jsx)(u.default,{gutter:8,children:(0,y.jsx)(s.default,{span:22,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})})}),(0,y.jsxs)(u.default,{gutter:8,children:[(0,y.jsx)(s.default,{span:8,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})}),(0,y.jsx)(s.default,{span:15,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})})]}),(0,y.jsxs)(u.default,{gutter:8,children:[(0,y.jsx)(s.default,{span:6,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})}),(0,y.jsx)(s.default,{span:18,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})})]}),(0,y.jsxs)(u.default,{gutter:8,children:[(0,y.jsx)(s.default,{span:13,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})}),(0,y.jsx)(s.default,{span:9,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})})]}),(0,y.jsxs)(u.default,{gutter:8,children:[(0,y.jsx)(s.default,{span:4,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})}),(0,y.jsx)(s.default,{span:3,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})}),(0,y.jsx)(s.default,{span:16,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})})]})]}));};},"42520f5c":function(n,r,i){"use strict";function a(){}i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});},"426615a4":function(n,r,i){var a=i("6c4af3b3"),o=i("a3307b57"),s=i("831aa241");n.exports=function(n,r,i,l,u,c){var f=1&i,d=n.length,h=r.length;if(d!=h&&!(f&&h>d))return!1;var p=c.get(n),m=c.get(r);if(p&&m)return p==r&&m==n;var g=-1,v=!0,y=2&i?new a:void 0;for(c.set(n,r),c.set(r,n);++gI*I+L*L&&(C=M,O=R),{cx:C,cy:O,x01:-h,y01:-p,x11:C*(s/S-1),y11:O*(s/S-1)};}function p(){var n=l,r=u,i=(0,a.default)(0),p=null,m=c,g=f,v=d,y=null,_=(0,s.withPath)(b);function b(){var a,s,l=+n.apply(this,arguments),u=+r.apply(this,arguments),c=m.apply(this,arguments)-o.halfPi,f=g.apply(this,arguments)-o.halfPi,d=(0,o.abs)(f-c),b=f>c;if(y||(y=a=_()),uo.epsilon){if(d>o.tau-o.epsilon)y.moveTo(u*(0,o.cos)(c),u*(0,o.sin)(c)),y.arc(0,0,u,c,f,!b),l>o.epsilon&&(y.moveTo(l*(0,o.cos)(f),l*(0,o.sin)(f)),y.arc(0,0,l,f,c,b));else{var x,E,w=c,S=f,T=c,A=f,C=d,O=d,M=v.apply(this,arguments)/2,R=M>o.epsilon&&(p?+p.apply(this,arguments):(0,o.sqrt)(l*l+u*u)),P=(0,o.min)((0,o.abs)(u-l)/2,+i.apply(this,arguments)),k=P,I=P;if(R>o.epsilon){var L=(0,o.asin)(R/l*(0,o.sin)(M)),N=(0,o.asin)(R/u*(0,o.sin)(M));(C-=2*L)>o.epsilon?(L*=b?1:-1,T+=L,A-=L):(C=0,T=A=(c+f)/2),(O-=2*N)>o.epsilon?(N*=b?1:-1,w+=N,S-=N):(O=0,w=S=(c+f)/2);}var D=u*(0,o.cos)(w),F=u*(0,o.sin)(w),B=l*(0,o.cos)(A),j=l*(0,o.sin)(A);if(P>o.epsilon){var z,U=u*(0,o.cos)(S),V=u*(0,o.sin)(S),G=l*(0,o.cos)(T),H=l*(0,o.sin)(T);if(do.epsilon?I>o.epsilon?(x=h(G,H,D,F,u,I,b),E=h(U,V,B,j,u,I,b),y.moveTo(x.cx+x.x01,x.cy+x.y01),Io.epsilon&&C>o.epsilon?k>o.epsilon?(x=h(B,j,U,V,l,-k,b),E=h(D,F,G,H,l,-k,b),y.lineTo(x.cx+x.x01,x.cy+x.y01),kn).filter(n=>"transpose"===n).length%2!=0;}function o(n){let{transformations:r}=n.getOptions();return r.some(([n])=>"polar"===n);}function s(n){let{transformations:r}=n.getOptions();return r.some(([n])=>"reflect"===n)&&r.some(([n])=>n.startsWith("transpose"));}function l(n){let{transformations:r}=n.getOptions();return r.some(([n])=>"helix"===n);}function u(n){let{transformations:r}=n.getOptions();return r.some(([n])=>"parallel"===n);}function c(n){let{transformations:r}=n.getOptions();return r.some(([n])=>"fisheye"===n);}function f(n){return u(n)&&o(n);}function d(n){return l(n)||o(n);}function h(n){return o(n)&&a(n);}function p(n){if(d(n)){let[r,i]=n.getSize(),a=n.getOptions().transformations.find(n=>"polar"===n[0]);if(a)return Math.max(r,i)/2*a[4];}return 0;}function m(n){let{transformations:r}=n.getOptions(),[,,,i,a]=r.find(n=>"polar"===n[0]);return[+i,+a];}function g(n,r=!0){let{transformations:i}=n.getOptions(),[,a,o]=i.find(n=>"polar"===n[0]);return r?[180*+a/Math.PI,180*+o/Math.PI]:[a,o];}function v(n,r){let{transformations:i}=n.getOptions(),[,...a]=i.find(n=>n[0]===r);return a;}i.d(r,"__esModule",{value:!0}),i.e(r,{angleOf:function(){return g;},getRadius:function(){return p;},getTransformOptions:function(){return v;},isCircular:function(){return d;},isFisheye:function(){return c;},isHelix:function(){return l;},isParallel:function(){return u;},isPolar:function(){return o;},isRadar:function(){return f;},isRadial:function(){return s;},isTheta:function(){return h;},isTranspose:function(){return a;},radiusOf:function(){return m;}});},"42fc1f40":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return l;}});var a=i("777fffbe"),o=a._(i("a96a4c71")),s=a._(i("01c1137e"));function l(n,r,i,a,l){(1&n.depth?s.default:o.default)(n,r,i,a,l);}},"43f60061":function(n,r,i){var a=i("99045891");n.exports=function(n){return function(r){return a(r,n);};};},"449c5245":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),r.hover=void 0;var a,o=Object.assign||function(n){for(var r=1;r1&&void 0!==arguments[1]?arguments[1]:"span";return function(i){function a(){!function(n,r){if(!(n instanceof r))throw TypeError("Cannot call a class as a function");}(this,a);for(var i,u,c,f=arguments.length,d=Array(f),h=0;h0===i?n.moveTo(r[0],r[1]):n.lineTo(r[0],r[1])),n.closePath(),n;}function p(n,r,i){let{arrowSize:a}=i,o="string"==typeof a?+parseFloat(a)/100*(0,f.dist)(n,r):a,s=Math.PI/6,l=Math.atan2(r[1]-n[1],r[0]-n[0]),u=Math.PI/2-l-s,c=[r[0]-o*Math.sin(u),r[1]-o*Math.cos(u)],d=l-s;return[c,[r[0]-o*Math.cos(d),r[1]-o*Math.sin(d)]];}function m(n,r,i,a,o){let s=(0,f.angle)((0,f.sub)(a,r))+Math.PI,l=(0,f.angle)((0,f.sub)(a,i))+Math.PI;return n.arc(a[0],a[1],o,s,l,l-s<0),n;}function g(n,r,i,a="y",c="between",f=!1){let d="y"===a||!0===a?i:r,h=(0,u.indexOf)(d),[p,m]=(0,l.default)(h,n=>d[n]),v=new o.Linear({domain:[p,m],range:[0,100]}),y=n=>(0,s.default)(d[n])&&!Number.isNaN(d[n])?v.map(d[n]):0,_={between:r=>`${n[r]} ${y(r)}%`,start:r=>0===r?`${n[r]} ${y(r)}%`:`${n[r-1]} ${y(r)}%, ${n[r]} ${y(r)}%`,end:r=>r===n.length-1?`${n[r]} ${y(r)}%`:`${n[r]} ${y(r)}%, ${n[r+1]} ${y(r)}%`},b=h.sort((n,r)=>y(n)-y(r)).map(_[c]||_.between).join(",");return`linear-gradient(${"y"===a||!0===a?f?180:90:f?90:0}deg, ${b})`;}function v(n){let[r,i,a,o]=n;return[o,r,i,a];}function y(n,r,i){let[a,o,,s]=(0,c.isTranspose)(n)?v(r):r,[l,u]=i,d=n.getCenter(),h=(0,f.angleWithQuadrant)((0,f.sub)(a,d)),p=(0,f.angleWithQuadrant)((0,f.sub)(o,d)),m=p===h&&l!==u?p+2*Math.PI:p;return{startAngle:h,endAngle:m-h>=0?m:2*Math.PI+m,innerRadius:(0,f.dist)(s,d),outerRadius:(0,f.dist)(a,d)};}function _(n){let{colorAttribute:r,opacityAttribute:i=r}=n;return`${i}Opacity`;}function b(n,r){if(!(0,c.isPolar)(n))return"";let i=n.getCenter(),{transform:a}=r;return`translate(${i[0]}, ${i[1]}) ${a||""}`;}function x(n){if(1===n.length)return n[0];let[[r,i,a=0],[o,s,l=0]]=n;return[(r+o)/2,(i+s)/2,(a+l)/2];}},"459d5e7d":function(n,r,i){var a=i("7505d865"),o=i("39c5fc9e"),s=i("78ccff10"),l=i("aef7be7a"),u=Object.getOwnPropertySymbols?function(n){for(var r=[];n;)a(r,s(n)),n=o(n);return r;}:l;n.exports=u;},"45d14b4e":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"Text",{enumerable:!0,get:function(){return l;}});var a=i("3862611d"),o=i("5e195043"),s=i("0cf4df74"),l=function(n){function r(r){void 0===r&&(r={});var i=r.style,o=(0,a.__rest)(r,["style"]);return n.call(this,(0,a.__assign)({style:(0,a.__assign)({text:"",fill:"black",fontFamily:"sans-serif",fontSize:16,fontStyle:"normal",fontVariant:"normal",fontWeight:"normal",lineWidth:1,textAlign:"start",textBaseline:"middle"},i)},o))||this;}return(0,a.__extends)(r,n),Object.defineProperty(r.prototype,"offscreenGroup",{get:function(){return this._offscreen||(this._offscreen=(0,s.createOffscreenGroup)(this)),this._offscreen;},enumerable:!1,configurable:!0}),r.prototype.disconnectedCallback=function(){var n;null===(n=this._offscreen)||void 0===n||n.destroy();},r;}(o.Text);},"4600e9c8":function(n,r,i){var a=i("a4c5f883"),o=i("aea2ff65"),s=i("3bb506d6");n.exports=function(n,r,i){return r==r?s(n,r,i):a(n,o,i);};},"469db534":function(n,r,i){var a=i("90fd84e0"),o=i("1cb05aa4"),s=i("42885e34"),l=i("863198de"),u=i("b5f7c477"),c=i("d91aaf3b"),f=i("c6018141"),d="[object Map]",h="[object Promise]",p="[object Set]",m="[object WeakMap]",g="[object DataView]",v=f(a),y=f(o),_=f(s),b=f(l),x=f(u),E=c;(a&&E(new a(new ArrayBuffer(1)))!=g||o&&E(new o)!=d||s&&E(s.resolve())!=h||l&&E(new l)!=p||u&&E(new u)!=m)&&(E=function(n){var r=c(n),i="[object Object]"==r?n.constructor:void 0,a=i?f(i):"";if(a)switch(a){case v:return g;case y:return d;case _:return h;case b:return p;case x:return m;}return r;}),n.exports=E;},"46f5c5e9":function(n,r,i){"use strict";var a=Math.log(2),o=n.exports,s=i("c97a579d");function l(n){return 1-Math.abs(n);}n.exports.getUnifiedMinMax=function(n,r){return o.getUnifiedMinMaxMulti([n],r);},n.exports.getUnifiedMinMaxMulti=function(n,r){r=r||{};var i=!1,a=!1,o=s.isNumber(r.width)?r.width:2,l=s.isNumber(r.size)?r.size:50,u=s.isNumber(r.min)?r.min:(i=!0,s.findMinMulti(n)),c=s.isNumber(r.max)?r.max:(a=!0,s.findMaxMulti(n)),f=(c-u)/(l-1);return i&&(u-=2*o*f),a&&(c+=2*o*f),{min:u,max:c};},n.exports.create=function(n,r){if(r=r||{},!n||0===n.length)return[];var i=s.isNumber(r.size)?r.size:50,a=s.isNumber(r.width)?r.width:2,u=o.getUnifiedMinMax(n,{size:i,width:a,min:r.min,max:r.max}),c=u.min,f=u.max-c,d=f/(i-1);if(0===f)return[{x:c,y:1}];for(var h=[],p=0;p=h.length)){var i=Math.max(r-a,0),o=Math.min(r+a,h.length-1),l=i-(r-a),u=r+a-o,f=g/(g-(m[-a-1+l]||0)-(m[-a-1+u]||0));l>0&&(y+=f*(l-1)*v);var p=Math.max(0,r-a+1);s.inside(0,h.length-1,p)&&(h[p].y+=1*f*v),s.inside(0,h.length-1,r+1)&&(h[r+1].y-=2*f*v),s.inside(0,h.length-1,o+1)&&(h[o+1].y+=1*f*v);}});var _=y,b=0,x=0;return h.forEach(function(n){b+=n.y,_+=b,n.y=_,x+=_;}),x>0&&h.forEach(function(n){n.y/=x;}),h;},n.exports.getExpectedValueFromPdf=function(n){if(n&&0!==n.length){var r=0;return n.forEach(function(n){r+=n.x*n.y;}),r;}},n.exports.getXWithLeftTailArea=function(n,r){if(n&&0!==n.length){for(var i=0,a=0,o=0;o=r));o++);return n[a].x;}},n.exports.getPerplexity=function(n){if(n&&0!==n.length){var r=0;return n.forEach(function(n){var i=Math.log(n.y);isFinite(i)&&(r+=n.y*i);}),Math.pow(2,r=-r/a);}};},"47334cff":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return o;}});var a=i("777fffbe")._(i("e93984e8")),o=function(n,r,i){"__proto__"==r&&a.default?(0,a.default)(n,r,{configurable:!0,enumerable:!0,value:i,writable:!0}):n[r]=i;};},"4749c5b7":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{aProjectFlat:function(){return h;},amap2Project:function(){return p;},bBoxToBounds:function(){return v;},boundsContains:function(){return g;},calculateCentroid:function(){return _;},calculatePointsCenterAndRadius:function(){return b;},extent:function(){return f;},getBBoxFromPoints:function(){return x;},lngLatInExtent:function(){return c;},lngLatToMeters:function(){return d;},normalize:function(){return y;},padBounds:function(){return m;}});var a=i("ca69744f");function o(n){var r=[1/0,1/0,-1/0,-1/0];return(0,a.coordEach)(n,function(n){r[0]>n[0]&&(r[0]=n[0]),r[1]>n[1]&&(r[1]=n[1]),r[2]i&&n.lng<=o&&n.lat>a&&n.lat<=s;}function f(n){let r=[1/0,1/0,-1/0,-1/0];return n.forEach(n=>{let{coordinates:i}=n;(function n(r,i){return Array.isArray(i[0])?i.forEach(i=>{n(r,i);}):(r[0]>i[0]&&(r[0]=i[0]),r[1]>i[1]&&(r[1]=i[1]),r[2]180||n<-180)&&((n%=360)>180&&(n=-360+n),n<-180&&(n=360+n),0===n&&(n=0)),n;}(n[0]),a=function(n){if(null==n)throw Error("lat is required");return(n>90||n<-90)&&((n%=180)>90&&(n=-180+n),n<-90&&(n=180+n),0===n&&(n=0)),n;}(n[1]);return a>85&&(a=85),a<-85&&(a=-85),3===n.length?[i,a,n[2]]:[i,a];}(n,r))[0],o=n[1],s=a*u/180,l=Math.log(Math.tan((90+o)*Math.PI/360))/(Math.PI/180);return l=l*u/180,i.enable&&(s=Number(s.toFixed(i.decimal)),l=Number(l.toFixed(i.decimal))),3===n.length?[s,l,n[2]]:[s,l];}function h(n){let r=Math.max(Math.min(85.0511287798,n[1]),-85.0511287798),i=Math.PI/180,a=n[0]*i,o=r*i;o=Math.log(Math.tan(Math.PI/4+o/2));let s=-.5/Math.PI;return i=.5,[Math.floor(a=268435456*(.5/Math.PI*a+.5)),Math.floor(o=268435456*(s*o+i))];}function p(n,r){let i=Math.PI/180;return r=Math.max(Math.min(85.0511287798,r),-85.0511287798),n*=i,r*=i,[6378137*n,6378137*(r=Math.log(Math.tan(Math.PI/4+r/2)))];}function m(n,r){let i=Math.abs(n[1][1]-n[0][1])*r,a=Math.abs(n[1][0]-n[0][0])*r;return[[n[0][0]-a,n[0][1]-i],[n[1][0]+a,n[1][1]+i]];}function g(n,r){return n[0][0]<=r[0][0]&&n[0][1]<=r[0][1]&&n[1][0]>=r[1][0]&&n[1][1]>=r[1][1];}function v(n){return[[n[0],n[1]],[n[2],n[3]]];}function y(n){var r;let i=(r=[0,0],Math.sqrt(Math.pow(n[0]-r[0],2)+Math.pow(n[1]-r[1],2)));return[n[0]/i,n[1]/i];}function _(n){if((0,l.isNumber)(n[0]))return n;if((0,l.isNumber)(n[0][0]))throw Error("\u5F53\u524D\u6570\u636E\u4E0D\u652F\u6301\u6807\u6CE8");if((0,l.isNumber)(n[0][0][0])){let r=0,i=0,a=0;return n.forEach(n=>{n.forEach(n=>{r+=n[0],i+=n[1],a++;});}),[r/a,i/a,0];}throw Error("\u5F53\u524D\u6570\u636E\u4E0D\u652F\u6301\u6807\u6CE8");}function b(n){let r=n[0],i=n[1],a=n[0],o=n[1],s=0,l=0,u=0;for(let c=0;cn;},"4bb2c4c7":function(n,r,i){var a=i("eecc512b")(i("1552e56f"));n.exports=a;},"4c05700a":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return g;}});var a=i("777fffbe"),o=i("852bbaa9"),s=a._(i("e4870cf0")),l=a._(i("613f75ca")),u=i("2a7c9880"),c=o._(i("609f48be")),f=a._(i("2faf3d77")),d=a._(i("551ddf56")),h=i("dac8af92"),p=["fieldProps","proFieldProps"],m="dateRange",g=c.default.forwardRef(function(n,r){var i=n.fieldProps,a=n.proFieldProps,o=(0,l.default)(n,p),g=(0,c.useContext)(f.default);return(0,h.jsx)(d.default,(0,s.default)({ref:r,fieldProps:(0,s.default)({getPopupContainer:g.getPopupContainer},i),valueType:m,proFieldProps:a,filedConfig:{valueType:m,customLightMode:!0,lightFilterLabelFormatter:function(n){return(0,u.dateArrayFormatter)(n,(null==i?void 0:i.format)||"YYYY-MM-DD");}}},o));});},"4c1ff8e6":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return d;}});var a=i("1d1b11bd"),o=i("7b8bcee7"),s={depth:-1},l={},u={};function c(n){return n.id;}function f(n){return n.parentId;}function d(){var n,r=c,i=f;function d(a){var c,f,d,m,g,v,y,_,b=Array.from(a),x=r,E=i,w=new Map;if(null!=n){let r=b.map((r,i)=>{var o;let s;return o=n(r,i,a),s=(o=`${o}`).length,p(o,s-1)&&!p(o,s-2)&&(o=o.slice(0,-1)),"/"===o[0]?o:`/${o}`;}),i=r.map(h),o=new Set(r).add("");for(let n of i)o.has(n)||(o.add(n),r.push(n),i.push(h(n)),b.push(u));x=(n,i)=>r[i],E=(n,r)=>i[r];}for(d=0,c=b.length;d=0&&(v=b[n]).data===u;--n)v.data=null;}if(m.parent=s,m.eachBefore(function(n){n.depth=n.parent.depth+1,--c;}).eachBefore(o.computeHeight),m.parent=null,c>0)throw Error("cycle");return m;}return d.id=function(n){return arguments.length?(r=(0,a.optional)(n),d):r;},d.parentId=function(n){return arguments.length?(i=(0,a.optional)(n),d):i;},d.path=function(r){return arguments.length?(n=(0,a.optional)(r),d):n;},d;}function h(n){let r=n.length;if(r<2)return"";for(;--r>1&&!p(n,r););return n.slice(0,r);}function p(n,r){if("/"===n[r]){let i=0;for(;r>0&&"\\"===n[--r];)++i;if((1&i)==0)return!0;}return!1;}},"4c221234":function(n,r,i){var a=i("d03c096f").default,o=i("df50a282");n.exports=function(n){var r=o(n,"string");return"symbol"==a(r)?r:r+"";},n.exports.__esModule=!0,n.exports.default=n.exports;},"4d6ab2e4":function(n,r,i){n.exports=function(){var n=document.getSelection();if(!n.rangeCount)return function(){};for(var r=document.activeElement,i=[],a=0;a2&&void 0!==arguments[2]?arguments[2]:"0",a=String(n);a.lengthr?1:n>=r?0:NaN;}i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});},"4fb4672f":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return o;}});var a=i("d4c76e17");function o(n){var r=n.length;return function(i){var o=Math.floor(((i%=1)<0?++i:i)*r),s=n[(o+r-1)%r],l=n[o%r],u=n[(o+1)%r],c=n[(o+2)%r];return(0,a.basis)((i-o/r)*r,s,l,u,c);};}},"5007e869":function(n,r,i){"use strict";function a(n){return null===n?NaN:+n;}function*o(n,r){if(void 0===r)for(let r of n)null!=r&&(r=+r)>=r&&(yield r);else{let i=-1;for(let a of n)null!=(a=r(a,++i,n))&&(a=+a)>=a&&(yield a);}}i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return a;},numbers:function(){return o;}});},"5120ac0c":function(n,r,i){"use strict";function a(n,r,i){return Math.max(r,Math.min(n,i));}function o(n,r=10){return"number"!=typeof n?n:1e-15>Math.abs(n)?n:parseFloat(n.toFixed(r));}i.d(r,"__esModule",{value:!0}),i.e(r,{clamp:function(){return a;},prettyNumber:function(){return o;}});},"515e037d":function(n,r,i){var a=/\w*$/;n.exports=function(n){var r=new n.constructor(n.source,a.exec(n));return r.lastIndex=n.lastIndex,r;};},"51882ede":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return p;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("7cfeda15"),l=a._(s),u=i("609f48be"),c=o._(u),f={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M257.7 752c2 0 4-.2 6-.5L431.9 722c2-.4 3.9-1.3 5.3-2.8l423.9-423.9a9.96 9.96 0 000-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2a33.5 33.5 0 009.4 29.8c6.6 6.4 14.9 9.9 23.8 9.9zm67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z"}}]},name:"edit",theme:"outlined"},d=i("887aaf6c"),h=a._(d),p=c.forwardRef(function(n,r){return c.createElement(h.default,(0,l.default)({},n,{ref:r,icon:f}));});},"53930c34":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});var a=function(){function n(){this._events={};}return n.prototype.on=function(n,r,i){return this._events[n]||(this._events[n]=[]),this._events[n].push({callback:r,once:!!i}),this;},n.prototype.once=function(n,r){return this.on(n,r,!0);},n.prototype.emit=function(n){for(var r=this,i=[],a=1;a{this.iconFontGlyphs[n.name]=n.unicode;});}addIconFont(n,r){this.iconFontMap.set(n,r);}getIconFontKey(n){return this.iconFontMap.get(n)||n;}getGlyph(n){return this.iconFontGlyphs[n]?String.fromCharCode(parseInt(this.iconFontGlyphs[n],16)):"";}setFontOptions(n){this.fontOptions=(0,M.default)((0,M.default)({},this.fontOptions),n),this.key=this.getKey();let r=this.getNewChars(this.key,this.fontOptions.characterSet),i=this.cache.get(this.key);if(i&&0===r.length)return;let a=this.generateFontAtlas(this.key,r,i);this.fontAtlas=a,this.cache.set(this.key,a);}addFontFace(n,r){let i=document.createElement("style");i.type="text/css",i.innerText=` +(("undefined"!=typeof globalThis?globalThis:self)["makoChunk_ant-design-pro"]=("undefined"!=typeof globalThis?globalThis:self)["makoChunk_ant-design-pro"]||[]).push([["vendors_0"],{"000ce906":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{createContext:function(){return y;},createImmutable:function(){return w;},useContext:function(){return _;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("ee64167d"),l=a._(s),u=i("8a826376"),c=a._(u),f=i("4b97d3c2"),d=a._(f),h=i("044bdec0"),p=a._(h),m=i("609f48be"),g=o._(m),v=i("792e90bc");function y(n){var r=g.createContext(void 0);return{Context:r,Provider:function(n){var i=n.value,a=n.children,o=g.useRef(i);o.current=i;var s=g.useState(function(){return{getValue:function(){return o.current;},listeners:new Set};}),u=(0,l.default)(s,1)[0];return(0,d.default)(function(){(0,v.unstable_batchedUpdates)(function(){u.listeners.forEach(function(n){n(i);});});},[i]),g.createElement(r.Provider,{value:u},a);},defaultValue:n};}function _(n,r){var i=(0,c.default)("function"==typeof r?r:function(n){if(void 0===r)return n;if(!Array.isArray(r))return n[r];var i={};return r.forEach(function(r){i[r]=n[r];}),i;}),a=g.useContext(null==n?void 0:n.Context),o=a||{},s=o.listeners,u=o.getValue,f=g.useRef();f.current=i(a?u():null==n?void 0:n.defaultValue);var h=g.useState({}),m=(0,l.default)(h,2)[1];return(0,d.default)(function(){if(a)return s.add(n),function(){s.delete(n);};function n(n){var r=i(n);(0,p.default)(f.current,r,!0)||m({});}},[a]),f.current;}var b=i("7cfeda15"),x=a._(b),E=i("002639b3");function w(){var n=g.createContext(null);function r(){return g.useContext(n);}return{makeImmutable:function(i,a){var o=(0,E.supportRef)(i),s=function(s,l){var u=o?{ref:l}:{},c=g.useRef(0),f=g.useRef(s);return null!==r()?g.createElement(i,(0,x.default)({},s,u)):((!a||a(f.current,s))&&(c.current+=1),f.current=s,g.createElement(n.Provider,{value:c.current},g.createElement(i,(0,x.default)({},s,u))));};return o?g.forwardRef(s):s;},responseImmutable:function(n,i){var a=(0,E.supportRef)(n),o=function(i,o){return r(),g.createElement(n,(0,x.default)({},i,a?{ref:o}:{}));};return a?g.memo(g.forwardRef(o),i):g.memo(o,i);},useImmutableMark:r};}var S=w();S.makeImmutable,S.responseImmutable,S.useImmutableMark;},"001de73b":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return d;}});var a=i("777fffbe"),o=a._(i("9b84be4b")),s=a._(i("e4870cf0")),l=a._(i("a854094b")),u=i("553ee311"),c=a._(i("6654a076")),f=i("8970bd89");class d extends c.default{constructor(...n){super(...n),(0,l.default)(this,"texture",void 0),(0,l.default)(this,"updateTexture",()=>{let{createTexture2D:n}=this.rendererService;if(this.texture){this.texture.update({data:this.iconService.getCanvas(),mag:"linear",min:"linear mipmap nearest",mipmap:!0}),setTimeout(()=>{this.layerService.throttleRenderLayers();});return;}this.texture=n({data:this.iconService.getCanvas(),mag:u.gl.LINEAR,min:u.gl.LINEAR_MIPMAP_LINEAR,premultiplyAlpha:!1,width:1024,height:this.iconService.canvasHeight||128,mipmap:!0});});}get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,SIZE:9,UV:10});}getUninforms(){if(this.rendererService.getDirty()){var n;null===(n=this.texture)||void 0===n||n.bind();}let r=this.getCommonUniformsInfo(),i=this.getUniformsBufferInfo(this.getStyleAttribute());return this.updateStyleUnifoms(),(0,s.default)((0,s.default)({},r.uniformsOption),i.uniformsOption);}getCommonUniformsInfo(){let{raisingHeight:n=0,heightfixed:r=!1}=this.layer.getLayerConfig(),i={u_textSize:[1024,this.iconService.canvasHeight||128],u_raisingHeight:Number(n),u_heightfixed:Number(r),u_texture:this.texture};return this.textures=[this.texture],this.getUniformsBufferInfo(i);}initModels(){var n=this;return(0,o.default)(function*(){return n.iconService.on("imageUpdate",n.updateTexture),n.updateTexture(),n.buildModels();})();}clearModels(){var n;null===(n=this.texture)||void 0===n||n.destroy(),this.iconService.off("imageUpdate",this.updateTexture);}buildModels(){var n=this;return(0,o.default)(function*(){return n.initUniformsBuffer(),[(yield n.layer.buildLayerModel({moduleName:"pointImage",vertexShader:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_Uv;\n\nlayout(std140) uniform commonUniforms {\n vec2 u_textSize;\n float u_raisingHeight;\n float u_heightfixed;\n};\n\nout vec4 v_color;\nout vec2 v_uv;\nout float v_opacity;\n\n#pragma include "projection"\n#pragma include "picking"\n\nvoid main() {\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n v_color = a_Color;\n v_opacity = opacity;\n v_uv = a_Uv;\n vec4 project_pos = project_position(vec4(a_Position, 1.0), a_Position64Low);\n\n vec2 offset = project_pixel(offsets);\n\n float raisingHeight = u_raisingHeight;\n if (u_heightfixed < 1.0) {\n // false\n raisingHeight = project_pixel(u_raisingHeight);\n } else {\n if (\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\n ) {\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\n raisingHeight = u_raisingHeight * mapboxZoomScale;\n }\n }\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, raisingHeight, 1.0));\n\n gl_PointSize = a_Size * 2.0 * u_DevicePixelRatio;\n setPickingColor(a_PickingColor);\n}\n',fragmentShader:'layout(std140) uniform commonUniforms {\n vec2 u_textSize;\n float u_raisingHeight;\n float u_heightfixed;\n};\n\nuniform sampler2D u_texture;\n\nin vec4 v_color;\nin vec2 v_uv;\nin float v_opacity;\n\n#pragma include "picking"\n\nout vec4 outputColor;\n\nvoid main(){\n vec2 pos = v_uv / u_textSize + gl_PointCoord / u_textSize * 64.;\n vec4 textureColor;\n\n // Y = 0.299R + 0.587G + 0.114B // \u4EAE\u5EA6\u63D0\u53D6\n \n textureColor = texture(SAMPLER_2D(u_texture), pos);\n\n // Tip: \u53BB\u9664\u8FB9\u7F18\u90E8\u5206 mipmap \u5BFC\u81F4\u7684\u6DF7\u5408\u53D8\u6697\n float fragmengTocenter = distance(vec2(0.5), gl_PointCoord);\n if(fragmengTocenter >= 0.5) {\n float luma = 0.299 * textureColor.r + 0.587 * textureColor.g + 0.114 * textureColor.b;\n textureColor.a *= luma;\n }\n \n if(all(lessThan(v_color, vec4(1.0+0.00001))) && all(greaterThan(v_color, vec4(1.0-0.00001))) || v_color==vec4(1.0)){\n outputColor= textureColor;\n }else {\n outputColor= step(0.01, textureColor.z) * v_color;\n }\n outputColor.a *= v_opacity;\n if (outputColor.a < 0.01) {\n discard;\n }\n outputColor = filterColor(outputColor);\n}\n',triangulation:f.PointImageTriangulation,defines:n.getDefines(),inject:n.getInject(),depth:{enable:!1},primitive:u.gl.POINTS}))];})();}registerBuiltinAttributes(){this.registerPosition64LowAttribute(),this.styleAttributeService.registerStyleAttribute({name:"size",type:u.AttributeType.Attribute,descriptor:{name:"a_Size",shaderLocation:this.attributeLocation.SIZE,buffer:{usage:u.gl.DYNAMIC_DRAW,data:[],type:u.gl.FLOAT},size:1,update:n=>{let{size:r=5}=n;return Array.isArray(r)?[r[0]]:[r];}}}),this.styleAttributeService.registerStyleAttribute({name:"uv",type:u.AttributeType.Attribute,descriptor:{name:"a_Uv",shaderLocation:this.attributeLocation.UV,buffer:{usage:u.gl.DYNAMIC_DRAW,data:[],type:u.gl.FLOAT},size:2,update:n=>{let r=this.iconService.getIconMap(),{shape:i}=n,{x:a,y:o}=r[i]||{x:-64,y:-64};return[a,o];}}});}}},"0047230b":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),r.default=function(){return!!("undefined"!=typeof window&&window.document&&window.document.createElement);};},"007fa019":function(n,r,i){var a=i("ca53fc7e"),o=i("4a936d43"),s=i("22702128"),l=i("07ba0bdb"),u=i("7dd83cf2"),c=i("e4cbb1a3"),f=i("743ea378");n.exports=function(n,r){return l(n)&&u(r)?c(f(n),r):function(i){var l=o(i,n);return void 0===l&&l===r?s(i,n):a(r,l,3);};};},"00ab32b8":function(n,r,i){var a,o;a=this,o=function(){"use strict";function n(n,i,a,o){r(n,a,o),r(i,2*a,2*o),r(i,2*a+1,2*o+1);}function r(n,r,i){var a=n[r];n[r]=n[i],n[i]=a;}function i(n,r,i,a){var o=n-i,s=r-a;return o*o+s*s;}var a,o=function(n){return n[0];},s=function(n){return n[1];},l=function(r,i,a,l,u){void 0===i&&(i=o),void 0===a&&(a=s),void 0===l&&(l=64),void 0===u&&(u=Float64Array),this.nodeSize=l,this.points=r;for(var c=r.length<65536?Uint16Array:Uint32Array,f=this.ids=new c(r.length),d=this.coords=new u(2*r.length),h=0;h>1;(function r(i,a,o,s,l,u){for(;l>s;){if(l-s>600){var c=l-s+1,f=o-s+1,d=Math.log(c),h=.5*Math.exp(2*d/3),p=.5*Math.sqrt(d*h*(c-h)/c)*(f-c/2<0?-1:1),m=Math.max(s,Math.floor(o-f*h/c+p)),g=Math.min(l,Math.floor(o+(c-f)*h/c+p));r(i,a,o,m,g,u);}var v=a[2*o+u],y=s,_=l;for(n(i,a,s,o),a[2*l+u]>v&&n(i,a,s,l);y<_;){for(n(i,a,y,_),y++,_--;a[2*y+u]v;)_--;}a[2*s+u]===v?n(i,a,s,_):n(i,a,++_,l),_<=o&&(s=_+1),o<=_&&(l=_-1);}})(i,a,c,s,l,u%2),r(i,a,o,s,c-1,u+1),r(i,a,o,c+1,l,u+1);}}(f,d,l,0,f.length-1,0);};l.prototype.range=function(n,r,i,a){return function(n,r,i,a,o,s,l){for(var u,c,f=[0,n.length-1,0],d=[];f.length;){var h=f.pop(),p=f.pop(),m=f.pop();if(p-m<=l){for(var g=m;g<=p;g++)u=r[2*g],c=r[2*g+1],u>=i&&u<=o&&c>=a&&c<=s&&d.push(n[g]);continue;}var v=Math.floor((m+p)/2);u=r[2*v],c=r[2*v+1],u>=i&&u<=o&&c>=a&&c<=s&&d.push(n[v]);var y=(h+1)%2;(0===h?i<=u:a<=c)&&(f.push(m),f.push(v-1),f.push(y)),(0===h?o>=u:s>=c)&&(f.push(v+1),f.push(p),f.push(y));}return d;}(this.ids,this.coords,n,r,i,a,this.nodeSize);},l.prototype.within=function(n,r,a){return function(n,r,a,o,s,l){for(var u=[0,n.length-1,0],c=[],f=s*s;u.length;){var d=u.pop(),h=u.pop(),p=u.pop();if(h-p<=l){for(var m=p;m<=h;m++)i(r[2*m],r[2*m+1],a,o)<=f&&c.push(n[m]);continue;}var g=Math.floor((p+h)/2),v=r[2*g],y=r[2*g+1];i(v,y,a,o)<=f&&c.push(n[g]);var _=(d+1)%2;(0===d?a-s<=v:o-s<=y)&&(u.push(p),u.push(g-1),u.push(_)),(0===d?a+s>=v:o+s>=y)&&(u.push(g+1),u.push(h),u.push(_));}return c;}(this.ids,this.coords,n,r,a,this.nodeSize);};var u={minZoom:0,maxZoom:16,minPoints:2,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:function(n){return n;}},c=Math.fround||(a=new Float32Array(1),function(n){return a[0]=+n,a[0];}),f=function(n){this.options=g(Object.create(u),n),this.trees=Array(this.options.maxZoom+1);};function d(n){return{type:"Feature",id:n.id,properties:h(n),geometry:{type:"Point",coordinates:[(n.x-.5)*360,360*Math.atan(Math.exp((180-360*n.y)*Math.PI/180))/Math.PI-90]}};}function h(n){var r=n.numPoints,i=r>=1e4?Math.round(r/1e3)+"k":r>=1e3?Math.round(r/100)/10+"k":r;return g(g({},n.properties),{cluster:!0,cluster_id:n.id,point_count:r,point_count_abbreviated:i});}function p(n){return n/360+.5;}function m(n){var r=Math.sin(n*Math.PI/180),i=.5-.25*Math.log((1+r)/(1-r))/Math.PI;return i<0?0:i>1?1:i;}function g(n,r){for(var i in r)n[i]=r[i];return n;}function v(n){return n.x;}function y(n){return n.y;}return f.prototype.load=function(n){var r=this.options,i=r.log,a=r.minZoom,o=r.maxZoom,s=r.nodeSize;i&&console.time("total time");var u="prepare "+n.length+" points";i&&console.time(u),this.points=n;for(var f=[],d=0;d=a;h--){var g=+Date.now();f=this._cluster(f,h),this.trees[h]=new l(f,v,y,s,Float32Array),i&&console.log("z%d: %d clusters in %dms",h,f.length,+Date.now()-g);}return i&&console.timeEnd("total time"),this;},f.prototype.getClusters=function(n,r){var i=((n[0]+180)%360+360)%360-180,a=Math.max(-90,Math.min(90,n[1])),o=180===n[2]?180:((n[2]+180)%360+360)%360-180,s=Math.max(-90,Math.min(90,n[3]));if(n[2]-n[0]>=360)i=-180,o=180;else if(i>o){var l=this.getClusters([i,a,180,s],r),u=this.getClusters([-180,a,o,s],r);return l.concat(u);}for(var c=this.trees[this._limitZoom(r)],f=c.range(p(i),m(s),p(o),m(a)),h=[],g=0;gr&&(v+=b.numPoints||1);}if(v>g&&v>=u){for(var x,E,w,S,T=h.x*g,A=h.y*g,C=l&&g>1?this._map(h,!0):null,O=(d<<5)+(r+1)+this.points.length,M=0;M1)for(var I=0;I>5;},f.prototype._getOriginZoom=function(n){return(n-this.points.length)%32;},f.prototype._map=function(n,r){if(n.numPoints)return r?g({},n.properties):n.properties;var i=this.points[n.index].properties,a=this.options.map(i);return r&&a===i?g({},a):a;},f;},"object"==typeof r&&void 0!==n?n.exports=o():(a="undefined"!=typeof globalThis?globalThis:a||self).Supercluster=o();},"013645fb":function(n,r,i){"use strict";n.exports=function(n){var r=n.stateHandler.getState;return{isDetectable:function(n){var i=r(n);return i&&!!i.isDetectable;},markAsDetectable:function(n){r(n).isDetectable=!0;},isBusy:function(n){return!!r(n).busy;},markBusy:function(n,i){r(n).busy=!!i;}};};},"016e8963":function(n,r,i){"use strict";function a(n,r){this.x=n,this.y=r;}n.exports=a,a.prototype={clone:function(){return new a(this.x,this.y);},add:function(n){return this.clone()._add(n);},sub:function(n){return this.clone()._sub(n);},multByPoint:function(n){return this.clone()._multByPoint(n);},divByPoint:function(n){return this.clone()._divByPoint(n);},mult:function(n){return this.clone()._mult(n);},div:function(n){return this.clone()._div(n);},rotate:function(n){return this.clone()._rotate(n);},rotateAround:function(n,r){return this.clone()._rotateAround(n,r);},matMult:function(n){return this.clone()._matMult(n);},unit:function(){return this.clone()._unit();},perp:function(){return this.clone()._perp();},round:function(){return this.clone()._round();},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y);},equals:function(n){return this.x===n.x&&this.y===n.y;},dist:function(n){return Math.sqrt(this.distSqr(n));},distSqr:function(n){var r=n.x-this.x,i=n.y-this.y;return r*r+i*i;},angle:function(){return Math.atan2(this.y,this.x);},angleTo:function(n){return Math.atan2(this.y-n.y,this.x-n.x);},angleWith:function(n){return this.angleWithSep(n.x,n.y);},angleWithSep:function(n,r){return Math.atan2(this.x*r-this.y*n,this.x*n+this.y*r);},_matMult:function(n){var r=n[0]*this.x+n[1]*this.y,i=n[2]*this.x+n[3]*this.y;return this.x=r,this.y=i,this;},_add:function(n){return this.x+=n.x,this.y+=n.y,this;},_sub:function(n){return this.x-=n.x,this.y-=n.y,this;},_mult:function(n){return this.x*=n,this.y*=n,this;},_div:function(n){return this.x/=n,this.y/=n,this;},_multByPoint:function(n){return this.x*=n.x,this.y*=n.y,this;},_divByPoint:function(n){return this.x/=n.x,this.y/=n.y,this;},_unit:function(){return this._div(this.mag()),this;},_perp:function(){var n=this.y;return this.y=this.x,this.x=-n,this;},_rotate:function(n){var r=Math.cos(n),i=Math.sin(n),a=r*this.x-i*this.y,o=i*this.x+r*this.y;return this.x=a,this.y=o,this;},_rotateAround:function(n,r){var i=Math.cos(n),a=Math.sin(n),o=r.x+i*(this.x-r.x)-a*(this.y-r.y),s=r.y+a*(this.x-r.x)+i*(this.y-r.y);return this.x=o,this.y=s,this;},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this;}},a.convert=function(n){return n instanceof a?n:Array.isArray(n)?new a(n[0],n[1]):n;};},"01746c28":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{genColumnKey:function(){return m;},isBordered:function(){return h;},isMergeCell:function(){return p;},mergePagination:function(){return c;},parseDefaultColumnConfig:function(){return g;},postDataPipeline:function(){return d;},useActionType:function(){return f;}});var a=i("777fffbe"),o=a._(i("23934e00")),s=a._(i("9b84be4b")),l=a._(i("e4870cf0")),u=a._(i("99c0cd4c"));function c(n,r,i){if(!1===n)return!1;var a,o,s=r.total,c=r.current,f=r.pageSize,d=r.setPageInfo,h="object"===(0,u.default)(n)?n:{};return(0,l.default)((0,l.default)({showTotal:function(n,r){return"".concat(i.getMessage("pagination.total.range","\u7B2C")," ").concat(r[0],"-").concat(r[1]," ").concat(i.getMessage("pagination.total.total","\u6761/\u603B\u5171")," ").concat(n," ").concat(i.getMessage("pagination.total.item","\u6761"));},total:s},h),{},{current:!0!==n&&n&&null!==(a=n.current)&&void 0!==a?a:c,pageSize:!0!==n&&n&&null!==(o=n.pageSize)&&void 0!==o?o:f,onChange:function(r,i){var a=n.onChange;null==a||a(r,i||20),(i!==f||c!==r)&&d({pageSize:i,current:r});}});}function f(n,r,i){var a,u,c,f=(0,l.default)((0,l.default)({},i.editableUtils),{},{pageInfo:r.pageInfo,reload:(a=(0,s.default)((0,o.default)().mark(function n(i){return(0,o.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(!i){n.next=3;break;}return n.next=3,r.setPageInfo({current:1});case 3:return n.next=5,null==r?void 0:r.reload();case 5:case"end":return n.stop();}},n);})),function(n){return a.apply(this,arguments);}),reloadAndRest:(u=(0,s.default)((0,o.default)().mark(function n(){return(0,o.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return i.onCleanSelected(),n.next=3,r.setPageInfo({current:1});case 3:return n.next=5,null==r?void 0:r.reload();case 5:case"end":return n.stop();}},n);})),function(){return u.apply(this,arguments);}),reset:(c=(0,s.default)((0,o.default)().mark(function n(){var a;return(0,o.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,i.resetAll();case 2:return n.next=4,null==r||null===(a=r.reset)||void 0===a?void 0:a.call(r);case 4:return n.next=6,null==r?void 0:r.reload();case 6:case"end":return n.stop();}},n);})),function(){return c.apply(this,arguments);}),fullScreen:function(){return i.fullScreen();},clearSelected:function(){return i.onCleanSelected();},setPageInfo:function(n){return r.setPageInfo(n);}});n.current=f;}function d(n,r){return r.filter(function(n){return n;}).length<1?n:r.reduce(function(n,r){return r(n);},n);}var h=function(n,r){return void 0!==r&&("boolean"==typeof r?r:r[n]);},p=function(n){var r;return n&&"object"===(0,u.default)(n)&&(null==n||null===(r=n.props)||void 0===r?void 0:r.colSpan);},m=function(n,r){return n?Array.isArray(n)?n.join("-"):n.toString():"".concat(r);};function g(n){var r={},i={};return n.forEach(function(n){var a,o=Array.isArray(a=n.dataIndex)?a.join(","):null==a?void 0:a.toString();o&&(n.filters&&(void 0===n.defaultFilteredValue?r[o]=null:r[o]=n.defaultFilteredValue),n.sorter&&n.defaultSortOrder&&(i[o]=n.defaultSortOrder));}),{sort:i,filter:r};}},"018c5f61":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),r.mergeClasses=void 0;var a=l(i("7d370577")),o=l(i("9e002045")),s=Object.assign||function(n){for(var r=1;r1&&void 0!==arguments[1]?arguments[1]:[],i=n.default&&(0,o.default)(n.default)||{};return r.map(function(r){var o=n[r];return o&&(0,a.default)(o,function(n,r){i[r]||(i[r]={}),i[r]=s({},i[r],o[r]);}),r;}),i;};r.default=u;},"01b2eefa":function(n,r,i){"use strict";function a(n,r){r||(r=[]);var i,a=n?Math.min(r.length,n.length):0,o=r.slice();return function(s){for(i=0;i=0&&i.splice(a,1),i;}function f(n,r){var i=(n||[]).slice();return -1===i.indexOf(r)&&i.push(r),i;}function d(n){return n.split("-");}function h(n,r){var i=[];return!function n(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];r.forEach(function(r){var a=r.key,o=r.children;i.push(a),n(o);});}((0,u.default)(r,n).children),i;}function p(n){if(n.parent){var r=d(n.pos);return Number(r[r.length-1])===n.parent.children.length-1;}return!1;}function m(n){var r=d(n.pos);return 0===Number(r[r.length-1]);}function g(n,r,i,a,o,s,l,c,f,d){var h,g=n.clientX,v=n.clientY,y=n.target.getBoundingClientRect(),_=y.top,b=y.height,x=(("rtl"===d?-1:1)*(((null==o?void 0:o.x)||0)-g)-12)/a,E=f.filter(function(n){var r;return null===(r=c[n])||void 0===r||null===(r=r.children)||void 0===r?void 0:r.length;}),w=(0,u.default)(c,i.eventKey);if(v<_+b/2){var S=l.findIndex(function(n){return n.key===w.key;}),T=l[S<=0?0:S-1].key;w=(0,u.default)(c,T);}var A=w.key,C=w,O=w.key,M=0,R=0;if(!E.includes(A))for(var P=0;P-1.5?s({dragNode:k,dropNode:I,dropPosition:1})?M=1:L=!1:s({dragNode:k,dropNode:I,dropPosition:0})?M=0:s({dragNode:k,dropNode:I,dropPosition:1})?M=1:L=!1:s({dragNode:k,dropNode:I,dropPosition:1})?M=1:L=!1,{dropPosition:M,dropLevelOffset:R,dropTargetKey:w.key,dropTargetPos:w.pos,dragOverNodeKey:O,dropContainerKey:0===M?null:(null===(h=w.parent)||void 0===h?void 0:h.key)||null,dropAllowed:L};}function v(n,r){if(n)return r.multiple?n.slice():n.length?[n[0]]:n;}function y(n){var r;if(!n)return null;if(Array.isArray(n))r={checkedKeys:n,halfCheckedKeys:void 0};else{if("object"!==(0,s.default)(n))return(0,l.default)(!1,"`checkedKeys` is not an array or an object"),null;r={checkedKeys:n.checked||void 0,halfCheckedKeys:n.halfChecked||void 0};}return r;}function _(n,r){var i=new Set;return(n||[]).forEach(function(n){!function n(a){if(!i.has(a)){var o=(0,u.default)(r,a);if(o){i.add(a);var s=o.parent;!o.node.disabled&&s&&n(s.key);}}}(n);}),(0,o.default)(i);}i("d105a374");},"0272f1d7":function(n,r,i){n.exports=function(n){return this.__data__.set(n,"__lodash_hash_undefined__"),this;};},"02a23b09":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{GridContext:function(){return m;},gridHelpers:function(){return g;},useGridHelpers:function(){return v;}});var a=i("777fffbe"),o=a._(i("99c0cd4c")),s=a._(i("e4870cf0")),l=a._(i("613f75ca")),u=a._(i("78a22024")),c=a._(i("adf76174")),f=i("609f48be"),d=i("dac8af92"),h=["children","Wrapper"],p=["children","Wrapper"],m=(0,f.createContext)({grid:!1,colProps:void 0,rowProps:void 0}),g=function(n){var r=n.grid,i=n.rowProps,a=n.colProps;return{grid:!!r,RowWrapper:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=n.children,o=n.Wrapper,u=(0,l.default)(n,h);return r?(0,d.jsx)(c.default,(0,s.default)((0,s.default)((0,s.default)({gutter:8},i),u),{},{children:a})):o?(0,d.jsx)(o,{children:a}):a;},ColWrapper:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=n.children,o=n.Wrapper,c=(0,l.default)(n,p),h=(0,f.useMemo)(function(){var n=(0,s.default)((0,s.default)({},a),c);return void 0===n.span&&void 0===n.xs&&(n.xs=24),n;},[c]);return r?(0,d.jsx)(u.default,(0,s.default)((0,s.default)({},h),{},{children:i})):o?(0,d.jsx)(o,{children:i}):i;}};},v=function(n){var r=(0,f.useMemo)(function(){return"object"===(0,o.default)(n)?n:{grid:n};},[n]),i=(0,f.useContext)(m),a=i.grid,s=i.colProps;return(0,f.useMemo)(function(){return g({grid:!!(a||r.grid),rowProps:null==r?void 0:r.rowProps,colProps:(null==r?void 0:r.colProps)||s,Wrapper:null==r?void 0:r.Wrapper});},[null==r?void 0:r.Wrapper,r.grid,a,JSON.stringify([s,null==r?void 0:r.colProps,null==r?void 0:r.rowProps])]);};},"02f16af6":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return l;}});var a=i("777fffbe")._(i("4017e4bc")),o=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,s=RegExp(o.source,"g");function l(n,r){var i,l,u,c,f,d=o.lastIndex=s.lastIndex=0,h=-1,p=[],m=[];for(n+="",r+="";(u=o.exec(n))&&(c=s.exec(r));)(f=c.index)>d&&(f=r.slice(d,f),p[h]?p[h]+=f:p[++h]=f),(u=u[0])===(c=c[0])?p[h]?p[h]+=c:p[++h]=c:(p[++h]=null,m.push({i:h,x:(0,a.default)(u,c)})),d=s.lastIndex;return d{var r,i;let a=Object.assign(Object.assign({},{startAngle:-Math.PI/2,endAngle:3*Math.PI/2,innerRadius:0,outerRadius:1}),n);return Object.assign(Object.assign({},a),(r=a.startAngle,i=a.endAngle,r%=2*Math.PI,i%=2*Math.PI,r<0&&(r=2*Math.PI+r),i<0&&(i=2*Math.PI+i),r>=i&&(i+=2*Math.PI),{startAngle:r,endAngle:i}));},o=n=>{let{startAngle:r,endAngle:i,innerRadius:o,outerRadius:s}=a(n);return[["translate",0,.5],["reflect.y"],["translate",0,-.5],["polar",r,i,o,s]];};o.props={};},"0381584d":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{Marker:function(){return v;}});var a=i("777fffbe"),o=i("3862611d"),s=i("da5c7e2c"),l=a._(s),u=i("47a6bde3"),c=i("a602d54e"),f=i("b0ea517f"),d=i("14887fae"),h=i("428badac"),p=a._(h),m=i("d0572d97"),g=a._(m),v=function(n){function r(){return null!==n&&n.apply(this,arguments)||this;}return(0,o.__extends)(r,n),r.prototype.render=function(n,i){var a,s=n.x,u=void 0===s?0:s,d=n.y,h=void 0===d?0:d,m=this.getSubShapeStyle(n),v=m.symbol,y=m.size,_=void 0===y?16:y,b=(0,o.__rest)(m,["symbol","size"]),x=["base64","url","image"].includes(a=function(n){var r="default";if((0,p.default)(n)&&n instanceof Image)r="image";else if((0,l.default)(n))r="symbol";else if((0,g.default)(n)){var i=RegExp("data:(image|text)");r=n.match(i)?"base64":/^(https?:\/\/(([a-zA-Z0-9]+-?)+[a-zA-Z0-9]+\.)+[a-zA-Z]+)(:\d+)?(\/.*)?(\?.*)?(#.*)?$/.test(n)?"url":"symbol";}return r;}(v))?"image":v&&"symbol"===a?"path":null;(0,c.ifShow)(!!x,(0,f.select)(i),function(n){n.maybeAppendByClassName("marker",x).attr("className","marker ".concat(x,"-marker")).call(function(n){if("image"===x){var i=2*_;n.styles({img:v,width:i,height:i,x:u-_,y:h-_});}else{var i=_/2,a=(0,l.default)(v)?v:r.getSymbol(v);n.styles((0,o.__assign)({d:null==a?void 0:a(u,h,i)},b));}});});},r.MARKER_SYMBOL_MAP=new Map,r.registerSymbol=function(n,i){r.MARKER_SYMBOL_MAP.set(n,i);},r.getSymbol=function(n){return r.MARKER_SYMBOL_MAP.get(n);},r.getSymbols=function(){return Array.from(r.MARKER_SYMBOL_MAP.keys());},r;}(u.Component);v.registerSymbol("cross",d.cross),v.registerSymbol("hyphen",d.hyphen),v.registerSymbol("line",d.line),v.registerSymbol("plus",d.plus),v.registerSymbol("tick",d.tick),v.registerSymbol("circle",d.circle),v.registerSymbol("point",d.point),v.registerSymbol("bowtie",d.bowtie),v.registerSymbol("hexagon",d.hexagon),v.registerSymbol("square",d.square),v.registerSymbol("diamond",d.diamond),v.registerSymbol("triangle",d.triangle),v.registerSymbol("triangle-down",d.triangleDown),v.registerSymbol("line",d.line),v.registerSymbol("dot",d.dot),v.registerSymbol("dash",d.dash),v.registerSymbol("smooth",d.smooth),v.registerSymbol("hv",d.hv),v.registerSymbol("vh",d.vh),v.registerSymbol("hvh",d.hvh),v.registerSymbol("vhv",d.vhv);},"041c1263":function(n,r,i){n.exports=function(n,r){for(var i=-1,a=null==n?0:n.length;++i1)return 1;for(var i=n,a=0;a<8;a++){var o=this.sampleCurveX(i)-n;if(Math.abs(o)Math.abs(s))break;i-=o/s;}var l=0,u=1;for(a=0,i=n;a<20&&!(Math.abs((o=this.sampleCurveX(i))-n)o?l=i:u=i,i=(u-l)*.5+l;return i;},solve:function(n,r){return this.sampleCurveY(this.solveCurveX(n,r));}};},"04ecc0fa":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return v;}});var a=i("777fffbe"),o=a._(i("23934e00")),s=a._(i("9b84be4b")),l=a._(i("613f75ca")),u=a._(i("e4870cf0")),c=a._(i("ddaa0afd")),f=i("a275200c"),d=i("609f48be"),h=i("cd1e34ba"),p=i("efd8a033"),m=i("dac8af92"),g=["onFinish","step","formRef","title","stepProps"],v=function(n){var r,i=(0,d.useRef)(),a=(0,d.useContext)(p.StepsFormProvide),v=(0,d.useContext)(p.StepFormProvide),y=(0,u.default)((0,u.default)({},n),v),_=y.onFinish,b=y.step,x=y.formRef,E=(y.title,y.stepProps,(0,l.default)(y,g));return(0,f.noteOnce)(!E.submitter,"StepForm \u4E0D\u5305\u542B\u63D0\u4EA4\u6309\u94AE\uFF0C\u8BF7\u5728 StepsForm \u4E0A"),(0,d.useImperativeHandle)(x,function(){return i.current;},[null==x?void 0:x.current]),(0,d.useEffect)(function(){if(y.name||y.step){var n=(y.name||y.step).toString();return null==a||a.regForm(n,y),function(){null==a||a.unRegForm(n);};}},[]),a&&null!=a&&a.formArrayRef&&(a.formArrayRef.current[b||0]=i),(0,m.jsx)(h.BaseForm,(0,u.default)({formRef:i,onFinish:(r=(0,s.default)((0,o.default)().mark(function n(r){return(0,o.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(E.name&&(null==a||a.onFormFinish(E.name,r)),!_){n.next=9;break;}return null==a||a.setLoading(!0),n.next=5,null==_?void 0:_(r);case 5:return n.sent&&(null==a||a.next()),null==a||a.setLoading(!1),n.abrupt("return");case 9:null!=a&&a.lastStep||null==a||a.next();case 10:case"end":return n.stop();}},n);})),function(n){return r.apply(this,arguments);}),onInit:function(n,r){var o;i.current=r,a&&null!=a&&a.formArrayRef&&(a.formArrayRef.current[b||0]=i),null==E||null===(o=E.onInit)||void 0===o||o.call(E,n,r);},layout:"vertical"},(0,c.default)(E,["layoutType","columns"])));};},"04fd6645":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return B;}});var a=i("777fffbe"),o=i("9b84be4b"),s=a._(o),l=i("a854094b"),u=a._(l),c=i("e333157c"),f=a._(c),d=i("824b66b4"),h=a._(d),p=i("991309e4"),m=a._(p),g=i("c0d77826"),v=a._(g),y=i("001de73b"),_=a._(y),b=i("9063dcee"),x=a._(b),E=i("21da3e32"),w=a._(E),S=i("e4870cf0"),T=a._(S),A=i("553ee311"),C=i("9479dab9"),O=i("6654a076"),M=a._(O),R=i("8970bd89");function P(){return(P=(0,s.default)(function*(n){if(window.createImageBitmap){let r=yield fetch(n);return yield createImageBitmap((yield r.blob()));}{let r=new window.Image;return new Promise(i=>{r.onload=()=>i(r),r.src=n,r.crossOrigin="Anonymous";});}})).apply(this,arguments);}class k extends M.default{constructor(...n){super(...n),(0,u.default)(this,"texture",void 0);}get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,SIZE:9,NORMAL:10,UV:11});}getUninforms(){let n=this.getCommonUniformsInfo(),r=this.getUniformsBufferInfo(this.getStyleAttribute());return this.updateStyleUnifoms(),(0,T.default)((0,T.default)({},n.uniformsOption),r.uniformsOption);}getCommonUniformsInfo(){let{mapTexture:n,heightfixed:r=!1,raisingHeight:i=0,topsurface:a=!0,sidesurface:o=!0,sourceColor:s,targetColor:l}=this.layer.getLayerConfig(),u=0,c=[1,1,1,1],f=[1,1,1,1];s&&l&&(c=(0,C.rgb2arr)(s),f=(0,C.rgb2arr)(l),u=1);let d={u_sourceColor:c,u_targetColor:f,u_linearColor:u,u_topsurface:Number(a),u_sidesurface:Number(o),u_heightfixed:Number(r),u_raisingHeight:Number(i)};return n&&this.texture&&(d.u_texture=this.texture,this.textures=[this.texture]),this.getUniformsBufferInfo(d);}initModels(){var n=this;return(0,s.default)(function*(){return yield n.loadTexture(),n.buildModels();})();}buildModels(){var n=this;return(0,s.default)(function*(){let{frag:r,vert:i,type:a}=n.getShaders();return n.initUniformsBuffer(),[(yield n.layer.buildLayerModel({moduleName:a,vertexShader:i,fragmentShader:r,depth:{enable:!0},defines:n.getDefines(),inject:n.getInject(),triangulation:R.PolygonExtrudeTriangulation}))];})();}getShaders(){let{pickLight:n,mapTexture:r}=this.layer.getLayerConfig();return r?{frag:'uniform sampler2D u_texture;\n\nlayout(std140) uniform commonUniforms {\n vec4 u_sourceColor;\n vec4 u_targetColor;\n float u_linearColor;\n float u_topsurface;\n float u_sidesurface;\n float u_heightfixed; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\n float u_raisingHeight;\n};\n\nin vec4 v_Color;\nin vec3 v_uvs;\nin vec2 v_texture_data;\n\n#pragma include "scene_uniforms"\n#pragma include "picking"\n\nout vec4 outputColor;\n\nvoid main() {\n float opacity = u_opacity;\n float isSide = v_texture_data.x;\n float lightWeight = v_texture_data.y;\n float topU = v_uvs[0];\n float topV = 1.0 - v_uvs[1];\n float sidey = v_uvs[2];\n\n outputColor = texture(SAMPLER_2D(u_texture), vec2(topU, topV));\n // Tip: \u90E8\u5206\u673A\u578B GPU \u8BA1\u7B97\u7CBE\u5EA6\u517C\u5BB9\n if (isSide < 0.999) {// \u662F\u5426\u662F\u8FB9\u7F18\n // side face\n if (u_sidesurface < 1.0) {\n discard;\n }\n\n if (u_linearColor == 1.0) {\n vec4 linearColor = mix(u_targetColor, u_sourceColor, sidey);\n linearColor.rgb *= lightWeight;\n outputColor = linearColor;\n } else {\n outputColor = v_Color;\n }\n } else {\n // top face\n if (u_topsurface < 1.0) {\n discard;\n }\n }\n \n outputColor.a *= opacity;\n outputColor = filterColor(outputColor);\n}\n',vert:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec3 a_uvs;\n\nlayout(std140) uniform commonUniforms {\n vec4 u_sourceColor;\n vec4 u_targetColor;\n float u_linearColor;\n float u_topsurface;\n float u_sidesurface;\n float u_heightfixed; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\n float u_raisingHeight;\n};\n\nout vec4 v_Color;\nout vec3 v_uvs;\nout vec2 v_texture_data;\n\n#pragma include "projection"\n#pragma include "light"\n#pragma include "picking"\n\nvoid main() {\n vec4 pos = vec4(a_Position.xy, a_Position.z * a_Size, 1.0);\n vec4 project_pos = project_position(pos, a_Position64Low);\n float lightWeight = calc_lighting(project_pos);\n v_uvs = a_uvs;\n v_Color = a_Color;\n v_Color.a *= opacity;\n\n v_texture_data = vec2(a_Position.z, lightWeight);\n\n if (u_heightfixed > 0.0) {\n // \u5224\u65AD\u51E0\u4F55\u4F53\u662F\u5426\u56FA\u5B9A\u9AD8\u5EA6\n project_pos.z = a_Position.z * a_Size;\n project_pos.z += u_raisingHeight;\n\n if (\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\n ) {\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\n project_pos.z *= mapboxZoomScale;\n project_pos.z += u_raisingHeight * mapboxZoomScale;\n }\n }\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n',type:"polygonExtrudeTexture"}:n?{frag:'\nlayout(std140) uniform commonUniforms {\n vec4 u_sourceColor;\n vec4 u_targetColor;\n float u_linearColor;\n float u_topsurface;\n float u_sidesurface;\n float u_heightfixed; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\n float u_raisingHeight;\n};\n\nin vec4 v_Color;\nin vec3 v_uvs;\nin vec2 v_texture_data;\nout vec4 outputColor;\n\n#pragma include "scene_uniforms"\n#pragma include "picking"\n\nvoid main() {\n float isSide = v_texture_data.x;\n float sidey = v_uvs[2];\n float lightWeight = v_texture_data.y;\n\n // Tip: \u90E8\u5206\u673A\u578B GPU \u8BA1\u7B97\u7CBE\u5EA6\u517C\u5BB9\n if(isSide < 0.999) {\n // side face\n if(u_sidesurface < 1.0) {\n discard;\n }\n \n if( u_linearColor == 1.0) {\n // side use linear\n vec4 linearColor = mix(u_targetColor, u_sourceColor, sidey);\n linearColor.rgb *= lightWeight;\n outputColor = linearColor;\n } else {\n // side notuse linear\n outputColor = v_Color;\n }\n } else {\n // top face\n if(u_topsurface < 1.0) {\n discard;\n }\n outputColor = v_Color;\n }\n\n outputColor = filterColorAlpha(outputColor, lightWeight);\n}\n',vert:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec3 a_uvs;\n\nlayout(std140) uniform commonUniforms {\n vec4 u_sourceColor;\n vec4 u_targetColor;\n float u_linearColor;\n float u_topsurface;\n float u_sidesurface;\n float u_heightfixed; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\n float u_raisingHeight;\n};\n\nout vec4 v_Color;\nout vec3 v_uvs;\nout vec2 v_texture_data;\n\n#pragma include "projection"\n#pragma include "light"\n#pragma include "picking"\n\nvoid main() {\n v_uvs = a_uvs;\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n vec4 pos = vec4(a_Position.xy, a_Position.z * a_Size, 1.0);\n vec4 project_pos = project_position(pos, a_Position64Low);\n\n if (u_heightfixed > 0.0) {\n // \u5224\u65AD\u51E0\u4F55\u4F53\u662F\u5426\u56FA\u5B9A\u9AD8\u5EA6\n project_pos.z = a_Position.z * a_Size;\n project_pos.z += u_raisingHeight;\n if (\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\n ) {\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\n project_pos.z *= mapboxZoomScale;\n project_pos.z += u_raisingHeight * mapboxZoomScale;\n }\n }\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\n float lightWeight = calc_lighting(project_pos);\n v_texture_data = vec2(a_Position.z, lightWeight);\n\n v_Color = vec4(a_Color.rgb * lightWeight, a_Color.w * opacity);\n\n setPickingColor(a_PickingColor);\n}\n',type:"polygonExtrudePickLight"}:{frag:'layout(std140) uniform commonUniforms {\n vec4 u_sourceColor;\n vec4 u_targetColor;\n float u_linearColor;\n float u_topsurface;\n float u_sidesurface;\n float u_heightfixed; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\n float u_raisingHeight;\n};\n\nin vec4 v_Color;\n#pragma include "scene_uniforms"\n#pragma include "picking"\nout vec4 outputColor;\nvoid main() {\n\n // top face\n if(u_topsurface < 1.0) {\n discard;\n }\n\n outputColor = v_Color;\n \n outputColor = filterColor(outputColor);\n}\n',vert:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec3 a_uvs;\n\nlayout(std140) uniform commonUniforms {\n vec4 u_sourceColor;\n vec4 u_targetColor;\n float u_linearColor;\n float u_topsurface;\n float u_sidesurface;\n float u_heightfixed; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\n float u_raisingHeight;\n};\n\nout vec4 v_Color;\n\n#pragma include "projection"\n#pragma include "light"\n#pragma include "picking"\n\nvoid main() {\n float isSide = a_Position.z;\n float topU = a_uvs[0];\n float topV = 1.0 - a_uvs[1];\n float sidey = a_uvs[2];\n\n vec4 pos = vec4(a_Position.xy, a_Position.z * a_Size, 1.0);\n\n vec4 project_pos = project_position(pos, a_Position64Low);\n float lightWeight = calc_lighting(project_pos);\n\n if (u_heightfixed > 0.0) {\n // \u5224\u65AD\u51E0\u4F55\u4F53\u662F\u5426\u56FA\u5B9A\u9AD8\u5EA6\n project_pos.z = a_Position.z * a_Size;\n project_pos.z += u_raisingHeight;\n\n if (\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\n ) {\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\n project_pos.z *= mapboxZoomScale;\n project_pos.z += u_raisingHeight * mapboxZoomScale;\n }\n }\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\n\n // Tip: \u90E8\u5206\u673A\u578B GPU \u8BA1\u7B97\u7CBE\u5EA6\u517C\u5BB9\n if (isSide < 0.999) {\n // side face\n // if(u_sidesurface < 1.0) {\n // discard;\n // }\n\n if (u_linearColor == 1.0) {\n vec4 linearColor = mix(u_targetColor, u_sourceColor, sidey);\n linearColor.rgb *= lightWeight;\n v_Color = linearColor;\n } else {\n v_Color = a_Color;\n }\n\n } else {\n v_Color = a_Color;\n }\n\n v_Color = vec4(v_Color.rgb * lightWeight, v_Color.w * opacity);\n\n setPickingColor(a_PickingColor);\n}\n',type:"polygonExtrude"};}clearModels(){var n;null===(n=this.texture)||void 0===n||n.destroy(),this.textures=[];}registerBuiltinAttributes(){let n=this.layer.getSource().extent,r=n[2]-n[0],i=n[3]-n[1];this.registerPosition64LowAttribute(),this.styleAttributeService.registerStyleAttribute({name:"uvs",type:A.AttributeType.Attribute,descriptor:{name:"a_uvs",shaderLocation:this.attributeLocation.UV,buffer:{usage:A.gl.STATIC_DRAW,data:[],type:A.gl.FLOAT},size:3,update:(a,o,s)=>{let l=s[0],u=s[1];return[(l-n[0])/r,(u-n[1])/i,s[4]];}}}),this.styleAttributeService.registerStyleAttribute({name:"normal",type:A.AttributeType.Attribute,descriptor:{name:"a_Normal",shaderLocation:this.attributeLocation.NORMAL,buffer:{usage:A.gl.STATIC_DRAW,data:[],type:A.gl.FLOAT},size:3,update:(n,r,i,a,o)=>o}}),this.styleAttributeService.registerStyleAttribute({name:"size",type:A.AttributeType.Attribute,descriptor:{name:"a_Size",shaderLocation:this.attributeLocation.SIZE,buffer:{usage:A.gl.DYNAMIC_DRAW,data:[],type:A.gl.FLOAT},size:1,update:n=>{let{size:r=10}=n;return Array.isArray(r)?[r[0]]:[r];}}});}loadTexture(){var n=this;return(0,s.default)(function*(){let{mapTexture:r}=n.layer.getLayerConfig(),{createTexture2D:i}=n.rendererService;if(n.texture=i({height:1,width:1}),r){let a=yield function(n){return P.apply(this,arguments);}(r);n.texture=i({data:a,width:a.width,height:a.height,wrapS:A.gl.CLAMP_TO_EDGE,wrapT:A.gl.CLAMP_TO_EDGE,min:A.gl.LINEAR,mag:A.gl.LINEAR});}})();}}class I extends M.default{constructor(...n){super(...n),(0,u.default)(this,"texture",void 0);}get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,SIZE:9,NORMAL:10,EXTRUSION_BASE:11});}getUninforms(){let n=this.getCommonUniformsInfo(),r=this.getUniformsBufferInfo(this.getStyleAttribute());return this.updateStyleUnifoms(),(0,T.default)((0,T.default)({},n.uniformsOption),r.uniformsOption);}getCommonUniformsInfo(){return this.getUniformsBufferInfo({});}initModels(){var n=this;return(0,s.default)(function*(){return n.buildModels();})();}buildModels(){var n=this;return(0,s.default)(function*(){let{frag:r,vert:i,type:a}=n.getShaders();return n.initUniformsBuffer(),[(yield n.layer.buildLayerModel({moduleName:a,vertexShader:i,fragmentShader:r,defines:n.getDefines(),inject:n.getInject(),triangulation:R.PolygonExtrudeTriangulation,depth:{enable:!0}}))];})();}getShaders(){return{frag:'\nin vec4 v_Color;\n#pragma include "scene_uniforms"\n#pragma include "picking"\nout vec4 outputColor;\nvoid main() {\n\n outputColor = v_Color;\n outputColor = filterColor(outputColor);\n}\n',vert:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\n\nout vec4 v_Color;\n\n#pragma include "projection"\n#pragma include "light"\n#pragma include "picking"\n\nvoid main() {\n vec4 pos = vec4(a_Position.xy, a_Position.z * a_Size + (1.0 - a_Position.z) * extrusionBase, 1.0);\n\n vec4 project_pos = project_position(pos, a_Position64Low);\n float lightWeight = calc_lighting(project_pos);\n v_Color = a_Color;\n v_Color = vec4(v_Color.rgb * lightWeight, v_Color.w * opacity);\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n',type:"polygonExtrude"};}clearModels(){var n;null===(n=this.texture)||void 0===n||n.destroy();}registerBuiltinAttributes(){this.registerPosition64LowAttribute(),this.styleAttributeService.registerStyleAttribute({name:"normal",type:A.AttributeType.Attribute,descriptor:{name:"a_Normal",shaderLocation:this.attributeLocation.NORMAL,buffer:{usage:A.gl.STATIC_DRAW,data:[],type:A.gl.FLOAT},size:3,update:(n,r,i,a,o)=>o}}),this.styleAttributeService.registerStyleAttribute({name:"size",type:A.AttributeType.Attribute,descriptor:{name:"a_Size",shaderLocation:this.attributeLocation.SIZE,buffer:{usage:A.gl.DYNAMIC_DRAW,data:[],type:A.gl.FLOAT},size:1,update:n=>{let{size:r=10}=n;return Array.isArray(r)?[r[0]]:[r];}}}),this.styleAttributeService.registerStyleAttribute({name:"extrusionBase",type:A.AttributeType.Attribute,descriptor:{name:"a_ExtrusionBase",shaderLocation:this.attributeLocation.EXTRUSION_BASE,buffer:{usage:A.gl.STATIC_DRAW,data:[],type:A.gl.FLOAT},size:1,update:n=>{let{extrusionBase:r=0}=n;return[r];}}});}}class L extends M.default{get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,LINEAR:9});}getUninforms(){let n=this.getCommonUniformsInfo(),r=this.getUniformsBufferInfo(this.getStyleAttribute());return this.updateStyleUnifoms(),(0,T.default)((0,T.default)({},n.uniformsOption),r.uniformsOption);}getCommonUniformsInfo(){let{raisingHeight:n=0,opacityLinear:r={enable:!1,dir:"in"}}=this.layer.getLayerConfig(),i={u_raisingHeight:Number(n),u_opacitylinear:Number(r.enable),u_dir:"in"===r.dir?1:0};return this.getUniformsBufferInfo(i);}initModels(){var n=this;return(0,s.default)(function*(){return n.buildModels();})();}buildModels(){var n=this;return(0,s.default)(function*(){let{frag:r,vert:i,triangulation:a,type:o}=n.getModelParams();return n.initUniformsBuffer(),n.layer.triangulation=a,[(yield n.layer.buildLayerModel({moduleName:o,vertexShader:i,fragmentShader:r,defines:n.getDefines(),inject:n.getInject(),triangulation:a,primitive:A.gl.TRIANGLES,depth:{enable:!1}}))];})();}registerBuiltinAttributes(){this.registerPosition64LowAttribute();let{opacityLinear:n={enable:!1,dir:"in"}}=this.layer.getLayerConfig();n.enable&&this.styleAttributeService.registerStyleAttribute({name:"linear",type:A.AttributeType.Attribute,descriptor:{name:"a_linear",shaderLocation:this.attributeLocation.LINEAR,buffer:{usage:A.gl.STATIC_DRAW,data:[],type:A.gl.FLOAT},size:3,update:(n,r,i)=>[i[3],i[4],i[5]]}});}getModelParams(){let{opacityLinear:n={enable:!1}}=this.layer.getLayerConfig();return n.enable?{frag:'\nlayout(std140) uniform commonUniforms {\n float u_raisingHeight;\n float u_opacitylinear;\n float u_dir;\n};\n\nin vec4 v_color;\nin vec3 v_linear;\nin vec2 v_pos;\nout vec4 outputColor;\n#pragma include "scene_uniforms"\n#pragma include "picking"\n\nvoid main() {\n outputColor = v_color;\n if (u_opacitylinear > 0.0) {\n outputColor.a *= u_dir == 1.0 ? 1.0 - length(v_pos - v_linear.xy)/v_linear.z : length(v_pos - v_linear.xy)/v_linear.z;\n }\n outputColor = filterColor(outputColor);\n}\n',vert:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_LINEAR) in vec3 a_linear;\n\nlayout(std140) uniform commonUniforms {\n float u_raisingHeight;\n float u_opacitylinear;\n float u_dir;\n};\n\nout vec4 v_color;\nout vec3 v_linear;\nout vec2 v_pos;\n\n#pragma include "projection"\n#pragma include "picking"\n\nvoid main() {\n if (u_opacitylinear > 0.0) {\n v_linear = a_linear;\n v_pos = a_Position.xy;\n }\n v_color = vec4(a_Color.xyz, a_Color.w * opacity);\n vec4 project_pos = project_position(vec4(a_Position, 1.0), a_Position64Low);\n project_pos.z += u_raisingHeight;\n\n if (u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n float mapboxZoomScale = 4.0/pow(2.0, 21.0 - u_Zoom);\n project_pos.z *= mapboxZoomScale;\n project_pos.z += u_raisingHeight * mapboxZoomScale;\n }\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\n setPickingColor(a_PickingColor);\n}\n',type:"polygonLinear",triangulation:R.polygonTriangulationWithCenter}:{frag:'in vec4 v_color;\n#pragma include "scene_uniforms"\n#pragma include "picking"\nout vec4 outputColor;\nvoid main() {\n outputColor = v_color;\n outputColor = filterColor(outputColor);\n}\n',vert:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\n\nlayout(std140) uniform commonUniforms {\n float u_raisingHeight;\n};\n\nout vec4 v_color;\n\n#pragma include "projection"\n#pragma include "picking"\n\nvoid main() {\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n\n v_color = vec4(a_Color.xyz, a_Color.w * opacity);\n vec4 project_pos = project_position(vec4(a_Position, 1.0), a_Position64Low);\n\n project_pos.z += u_raisingHeight;\n\n if (\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\n ) {\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\n project_pos.z *= mapboxZoomScale;\n project_pos.z += u_raisingHeight * mapboxZoomScale;\n }\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n\n',type:"polygonFill",triangulation:R.polygonTriangulation};}}class N extends M.default{constructor(...n){super(...n),(0,u.default)(this,"texture1",void 0),(0,u.default)(this,"texture2",void 0),(0,u.default)(this,"texture3",void 0);}get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,UV:9});}getUninforms(){let n=this.getCommonUniformsInfo(),r=this.getUniformsBufferInfo(this.getStyleAttribute());return this.updateStyleUnifoms(),(0,T.default)((0,T.default)({},n.uniformsOption),r.uniformsOption);}getCommonUniformsInfo(){let{watercolor:n="#6D99A8",watercolor2:r="#0F121C"}=this.layer.getLayerConfig(),i={u_watercolor:(0,C.rgb2arr)(n),u_watercolor2:(0,C.rgb2arr)(r),u_time:this.layer.getLayerAnimateTime(),u_texture1:this.texture1,u_texture2:this.texture2,u_texture3:this.texture3};return this.textures=[this.texture1,this.texture2,this.texture3],this.getUniformsBufferInfo(i);}getAnimateUniforms(){return{u_time:this.layer.getLayerAnimateTime()};}initModels(){var n=this;return(0,s.default)(function*(){return n.loadTexture(),n.buildModels();})();}buildModels(){var n=this;return(0,s.default)(function*(){return n.initUniformsBuffer(),[(yield n.layer.buildLayerModel({moduleName:"polygonOcean",vertexShader:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_uv;\n\nlayout(std140) uniform commonUniforms {\n vec4 u_watercolor;\n vec4 u_watercolor2;\n float u_time;\n};\n\nout vec2 v_uv;\nout float v_opacity;\n\n#pragma include "projection"\n\nvoid main() {\n v_uv = a_uv;\n v_opacity = opacity;\n vec4 project_pos = project_position(vec4(a_Position, 1.0));\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\n}\n\n',fragmentShader:"\nlayout(std140) uniform commonUniforms {\n vec4 u_watercolor;\n vec4 u_watercolor2;\n float u_time;\n};\n\nin vec2 v_uv;\nin float v_opacity;\nout vec4 outputColor;\n\nfloat coast2water_fadedepth = 0.10;\nfloat large_waveheight = .750; // change to adjust the \"heavy\" waves\nfloat large_wavesize = 3.4; // factor to adjust the large wave size\nfloat small_waveheight = 0.6; // change to adjust the small random waves\nfloat small_wavesize = 0.5; // factor to ajust the small wave size\nfloat water_softlight_fact = 15.; // range [1..200] (should be << smaller than glossy-fact)\nfloat water_glossylight_fact= 120.; // range [1..200]\nfloat particle_amount = 70.;\n\nvec3 water_specularcolor = vec3(1.3, 1.3, 0.9); // specular Color (RGB) of the water-highlights\n#define light vec3(-0., sin(u_time*0.5)*.5 + .35, 2.8) // position of the sun\n\nuniform sampler2D u_texture1;\nuniform sampler2D u_texture2;\nuniform sampler2D u_texture3;\n\n \n\nfloat hash( float n ) {\n return fract(sin(n)*43758.5453123);\n}\n\n// 2d noise function\nfloat noise1( in vec2 x ) {\n vec2 p = floor(x);\n vec2 f = smoothstep(0.0, 1.0, fract(x));\n float n = p.x + p.y*57.0;\n return mix(mix( hash(n+ 0.0), hash(n+ 1.0),f.x),\n mix( hash(n+ 57.0), hash(n+ 58.0),f.x),f.y);\n}\n\nfloat noise(vec2 p) {\n return texture(SAMPLER_2D(u_texture2),p*vec2(1./256.)).x;\n}\n\nvec4 highness(vec2 p) {\n vec4 t = texture(SAMPLER_2D(u_texture1),fract(p));\n float clipped = -2.0-smoothstep(3.,10.,t.a)*6.9-smoothstep(10.,100.,t.a)*89.9-smoothstep(0.,10000.,t.a)*10000.0;\n return clamp(t, 0.0,3.0)+clamp(t/3.0-1.0, 0.0,1.0)+clamp(t/16.0-1.0, 0.0,1.0);\n}\n\nfloat height_map( vec2 p ) {\n vec4 height=highness(p);\n /*\n height = -0.5+\n 0.5*smoothstep(-100.,0.,-height)+\n 2.75*smoothstep(0.,2.,height)+\n 1.75*smoothstep(2.,4.,height)+\n 2.75*smoothstep(4.,16.,height)+\n 1.5*smoothstep(16.,1000.,height);\n */\n\n mat2 m = mat2( 0.9563*1.4, -0.2924*1.4, 0.2924*1.4, 0.9563*1.4 );\n //p = p*6.;\n float f = 0.6000*noise1( p ); p = m*p*1.1*6.;\n f += 0.2500*noise( p ); p = m*p*1.32;\n f += 0.1666*noise( p ); p = m*p*1.11;\n f += 0.0834*noise( p ); p = m*p*1.12;\n f += 0.0634*noise( p ); p = m*p*1.13;\n f += 0.0444*noise( p ); p = m*p*1.14;\n f += 0.0274*noise( p ); p = m*p*1.15;\n f += 0.0134*noise( p ); p = m*p*1.16;\n f += 0.0104*noise( p ); p = m*p*1.17;\n f += 0.0084*noise( p );\n f = .25*f+dot(height,vec4(-.03125,-.125,.25,.25))*.5;\n const float FLAT_LEVEL = 0.92525;\n //f = f*0.25+height*0.75;\n if (f level)\n {\n col = CalcTerrain(uv, height);\n }\n if (height <= level)\n {\n vec2 dif = vec2(.0, .01);\n vec2 pos = uv*15. + vec2(u_time*.01);\n float h1 = water_map(pos-dif,waveheight);\n float h2 = water_map(pos+dif,waveheight);\n float h3 = water_map(pos-dif.yx,waveheight);\n float h4 = water_map(pos+dif.yx,waveheight);\n vec3 normwater = normalize(vec3(h3-h4, h1-h2, .125)); // norm-vector of the 'bumpy' water-plane\n uv += normwater.xy*.002*(level-height);\n \n col = CalcTerrain(uv, height);\n\n float coastfade = clamp((level-height)/coast2water_fadedepth, 0., 1.);\n float coastfade2= clamp((level-height)/deepwater_fadedepth, 0., 1.);\n float intensity = col.r*.2126+col.g*.7152+col.b*.0722;\n watercolor = mix(watercolor*intensity, watercolor2, smoothstep(0., 1., coastfade2));\n\n vec3 r0 = vec3(uv, WATER_LEVEL);\n vec3 rd = normalize( light - r0 ); // ray-direction to the light from water-position\n float grad = dot(normwater, rd); // dot-product of norm-vector and light-direction\n float specular = pow(grad, water_softlight_fact); // used for soft highlights \n float specular2= pow(grad, water_glossylight_fact); // used for glossy highlights\n float gradpos = dot(vec3(0., 0., 1.), rd);\n float specular1= smoothstep(0., 1., pow(gradpos, 5.)); // used for diffusity (some darker corona around light's specular reflections...) \n float watershade = test_shadow( uv, level );\n watercolor *= 2.2+watershade;\n watercolor += (.2+.8*watershade) * ((grad-1.0)*.5+specular) * .25;\n watercolor /= (1.+specular1*1.25);\n watercolor += watershade*specular2*water_specularcolor;\n watercolor += watershade*coastfade*(1.-coastfade2)*(vec3(.5, .6, .7)*nautic(uv)+vec3(1., 1., 1.)*particles(uv));\n \n col = mix(col, watercolor, coastfade);\n }\n \n outputColor = vec4(col, v_opacity); \n}\n",defines:n.getDefines(),inject:n.getInject(),triangulation:R.polygonTriangulation,primitive:A.gl.TRIANGLES,depth:{enable:!1}}))];})();}clearModels(){var n,r,i;null===(n=this.texture1)||void 0===n||n.destroy(),null===(r=this.texture2)||void 0===r||r.destroy(),null===(i=this.texture3)||void 0===i||i.destroy();}registerBuiltinAttributes(){let[n,r,i,a]=this.layer.getSource().extent,o=i-n,s=a-r;this.styleAttributeService.registerStyleAttribute({name:"oceanUv",type:A.AttributeType.Attribute,descriptor:{name:"a_uv",shaderLocation:this.attributeLocation.UV,buffer:{usage:A.gl.STATIC_DRAW,data:[],type:A.gl.FLOAT},size:2,update:(i,a,l)=>{let[u,c]=l;return[(u-n)/o,(c-r)/s];}}});}loadTexture(){let{createTexture2D:n}=this.rendererService,r={height:0,width:0};function i(r){return n({data:r,width:r.width,height:r.height,wrapS:A.gl.MIRRORED_REPEAT,wrapT:A.gl.MIRRORED_REPEAT,min:A.gl.LINEAR,mag:A.gl.LINEAR});}this.texture1=n(r),this.texture2=n(r),this.texture3=n(r),function(n){let r=0,i=[];["https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*EojwT4VzSiYAAAAAAAAAAAAAARQnAQ","https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*MJ22QbpuCzIAAAAAAAAAAAAAARQnAQ","https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*-z2HSIVDsHIAAAAAAAAAAAAAARQnAQ"].map(a=>{let o=new Image;o.crossOrigin="",o.src=a,i.push(o),o.onload=()=>{3==++r&&n(i);};});}(n=>{this.texture1=i(n[0]),this.texture2=i(n[1]),this.texture3=i(n[2]),this.layerService.reRender();});}}class D extends M.default{constructor(...n){super(...n),(0,u.default)(this,"texture",void 0);}get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,UV:9});}getUninforms(){let n=this.getCommonUniformsInfo(),r=this.getUniformsBufferInfo(this.getStyleAttribute());return this.updateStyleUnifoms(),(0,T.default)((0,T.default)({},n.uniformsOption),r.uniformsOption);}getCommonUniformsInfo(){let{speed:n=.5}=this.layer.getLayerConfig(),r={u_speed:n,u_time:this.layer.getLayerAnimateTime(),u_texture:this.texture};return this.textures=[this.texture],this.getUniformsBufferInfo(r);}getAnimateUniforms(){return{u_time:this.layer.getLayerAnimateTime()};}initModels(){var n=this;return(0,s.default)(function*(){return n.loadTexture(),n.buildModels();})();}buildModels(){var n=this;return(0,s.default)(function*(){return n.initUniformsBuffer(),[(yield n.layer.buildLayerModel({moduleName:"polygonWater",vertexShader:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_uv;\n\nlayout(std140) uniform commonUniforms {\n float u_speed;\n float u_time;\n};\nout vec4 v_Color;\nout vec2 v_uv;\n\n#pragma include "projection"\n\nvoid main() {\n v_uv = a_uv;\n v_Color = a_Color;\n v_Color.a *= opacity;\n vec4 project_pos = project_position(vec4(a_Position, 1.0));\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\n}\n\n',fragmentShader:"uniform sampler2D u_texture;\nlayout(std140) uniform commonUniforms {\n float u_speed;\n float u_time;\n};\n\nout vec4 outputColor;\n\n\nin vec4 v_Color;\nin vec2 v_uv;\n\nfloat rand(vec2 n) { return 0.5 + 0.5 * fract(sin(dot(n.xy, vec2(12.9898, 78.233)))* 43758.5453); }\n\nfloat water(vec3 p) {\n float t = u_time * u_speed;\n p.z += t * 2.; p.x += t * 2.;\n vec3 c1 = texture(SAMPLER_2D(u_texture), p.xz / 30.).xyz;\n p.z += t * 3.; p.x += t * 0.52;\n vec3 c2 = texture(SAMPLER_2D(u_texture), p.xz / 30.).xyz;\n p.z += t * 4.; p.x += t * 0.8;\n vec3 c3 = texture(SAMPLER_2D(u_texture), p.xz / 30.).xyz;\n c1 += c2 - c3;\n float z = (c1.x + c1.y + c1.z) / 3.;\n return p.y + z / 4.;\n}\n\nfloat map(vec3 p) {\n float d = 100.0;\n d = water(p);\n return d;\n}\n\nfloat intersect(vec3 ro, vec3 rd) {\n float d = 0.0;\n for (int i = 0; i <= 100; i++) {\n float h = map(ro + rd * d);\n if (h < 0.1) return d;\n d += h;\n }\n return 0.0;\n}\n\nvec3 norm(vec3 p) {\n float eps = .1;\n return normalize(vec3(\n map(p + vec3(eps, 0, 0)) - map(p + vec3(-eps, 0, 0)),\n map(p + vec3(0, eps, 0)) - map(p + vec3(0, -eps, 0)),\n map(p + vec3(0, 0, eps)) - map(p + vec3(0, 0, -eps))\n ));\n} \n\nfloat calSpc() {\n vec3 l1 = normalize(vec3(1, 1, 1));\n vec3 ro = vec3(-3, 20, -8);\n vec3 rc = vec3(0, 0, 0);\n vec3 ww = normalize(rc - ro);\n vec3 uu = normalize(cross(vec3(0,1,0), ww));\n vec3 vv = normalize(cross(rc - ro, uu));\n vec3 rd = normalize(uu * v_uv.x + vv * v_uv.y + ww);\n float d = intersect(ro, rd);\n vec3 p = ro + rd * d;\n vec3 n = norm(p);\n float spc = pow(max(0.0, dot(reflect(l1, n), rd)), 30.0);\n return spc;\n}\n\nvoid main() {\n\n outputColor = v_Color;\n float spc = calSpc();\n outputColor += spc * 0.4;\n}\n",triangulation:R.polygonTriangulation,defines:n.getDefines(),inject:n.getInject(),primitive:A.gl.TRIANGLES,depth:{enable:!1},pickingEnabled:!1,diagnosticDerivativeUniformityEnabled:!1}))];})();}clearModels(){var n;null===(n=this.texture)||void 0===n||n.destroy();}registerBuiltinAttributes(){let[n,r,i,a]=this.layer.getSource().extent,o=i-n,s=a-r;this.styleAttributeService.registerStyleAttribute({name:"waterUv",type:A.AttributeType.Attribute,descriptor:{name:"a_uv",shaderLocation:this.attributeLocation.UV,buffer:{usage:A.gl.STATIC_DRAW,data:[],type:A.gl.FLOAT},size:2,update:(i,a,l)=>{let[u,c]=l;return[(u-n)/o,(c-r)/s];}}});}loadTexture(){let{waterTexture:n}=this.layer.getLayerConfig(),{createTexture2D:r}=this.rendererService;this.texture=r({height:1,width:1});let i=new Image;i.crossOrigin="",n?(console.warn("L7 recommend\uFF1Ahttps://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*EojwT4VzSiYAAAAAAAAAAAAAARQnAQ"),i.src=n):i.src="https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*EojwT4VzSiYAAAAAAAAAAAAAARQnAQ",i.onload=()=>{this.texture=r({data:i,width:i.width,height:i.height,wrapS:A.gl.MIRRORED_REPEAT,wrapT:A.gl.MIRRORED_REPEAT,min:A.gl.LINEAR,mag:A.gl.LINEAR}),this.layerService.reRender();};}}let F={fill:L,line:h.default,extrude:k,text:w.default,point_fill:v.default,point_image:_.default,point_normal:x.default,point_extrude:m.default,water:D,ocean:N,extrusion:I};class B extends f.default{constructor(...n){super(...n),(0,u.default)(this,"type","PolygonLayer"),(0,u.default)(this,"enableShaderEncodeStyles",["opacity","extrusionBase","rotation","offsets","stroke"]);}buildModels(){var n=this;return(0,s.default)(function*(){let r=n.getModelType();n.layerModel=new F[r](n),yield n.initLayerModels();})();}getModelType(){var n;let r=this.styleAttributeService.getLayerStyleAttribute("shape"),i=null==r||null===(n=r.scale)||void 0===n?void 0:n.field;return"fill"!==i&&i?"extrude"===i?"extrude":"extrusion"===i?"extrusion":"water"===i?"water":"ocean"===i?"ocean":"line"===i?"line":this.getPointModelType():"fill";}getPointModelType(){let n=this.getEncodedData(),{shape2d:r,shape3d:i}=this.getLayerConfig(),a=this.iconService.getIconMap(),o=n.find(n=>n.hasOwnProperty("shape"));if(!o)return"fill";{let n=o.shape;return"dot"===n?"point_normal":(null==r?void 0:r.indexOf(n))!==-1?"point_fill":(null==i?void 0:i.indexOf(n))!==-1?"point_extrude":a.hasOwnProperty(n)?"point_image":"text";}}}},"05378a0d":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return s;}});var a=i("777fffbe")._(i("42520f5c"));function o(n){this._context=n;}function s(n){return new o(n);}o.prototype={areaStart:a.default,areaEnd:a.default,lineStart:function(){this._point=0;},lineEnd:function(){this._point&&this._context.closePath();},point:function(n,r){n=+n,r=+r,this._point?this._context.lineTo(n,r):(this._point=1,this._context.moveTo(n,r));}};},"05da3880":function(n,r,i){"use strict";n.exports=o;var a=i("a7af6284");function o(n){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(n)?n:new Uint8Array(n||0),this.pos=0,this.type=0,this.length=this.buf.length;}o.Varint=0,o.Fixed64=1,o.Bytes=2,o.Fixed32=5;var s="undefined"==typeof TextDecoder?null:new TextDecoder("utf-8");function l(n){return n.type===o.Bytes?n.readVarint()+n.pos:n.pos+1;}function u(n,r,i){var a=r<=16383?1:r<=2097151?2:r<=268435455?3:Math.floor(Math.log(r)/(7*Math.LN2));i.realloc(a);for(var o=i.pos-1;o>=n;o--)i.buf[o+a]=i.buf[o];}function c(n,r){for(var i=0;i>>8,n[i+2]=r>>>16,n[i+3]=r>>>24;}function x(n,r){return(n[r]|n[r+1]<<8|n[r+2]<<16)+(n[r+3]<<24);}o.prototype={destroy:function(){this.buf=null;},readFields:function(n,r,i){for(i=i||this.length;this.pos>3,s=this.pos;this.type=7&a,n(o,r,this),this.pos===s&&this.skip(a);}return r;},readMessage:function(n,r){return this.readFields(n,r,this.readVarint()+this.pos);},readFixed32:function(){var n=_(this.buf,this.pos);return this.pos+=4,n;},readSFixed32:function(){var n=x(this.buf,this.pos);return this.pos+=4,n;},readFixed64:function(){var n=_(this.buf,this.pos)+4294967296*_(this.buf,this.pos+4);return this.pos+=8,n;},readSFixed64:function(){var n=_(this.buf,this.pos)+4294967296*x(this.buf,this.pos+4);return this.pos+=8,n;},readFloat:function(){var n=a.read(this.buf,this.pos,!0,23,4);return this.pos+=4,n;},readDouble:function(){var n=a.read(this.buf,this.pos,!0,52,8);return this.pos+=8,n;},readVarint:function(n){var r,i,a=this.buf;return(r=127&(i=a[this.pos++]),i<128)?r:(r|=(127&(i=a[this.pos++]))<<7,i<128)?r:(r|=(127&(i=a[this.pos++]))<<14,i<128)?r:(r|=(127&(i=a[this.pos++]))<<21,i<128)?r:function(n,r,i){var a,o,s,l,u=i.buf;if(s=(112&(l=u[i.pos++]))>>4,l<128||(s|=(127&(l=u[i.pos++]))<<3,l<128)||(s|=(127&(l=u[i.pos++]))<<10,l<128)||(s|=(127&(l=u[i.pos++]))<<17,l<128)||(s|=(127&(l=u[i.pos++]))<<24,l<128)||(s|=(1&(l=u[i.pos++]))<<31,l<128)){return a=n,o=s,r?4294967296*o+(a>>>0):(o>>>0)*4294967296+(a>>>0);}throw Error("Expected varint not more than 10 bytes");}(r|=(15&(i=a[this.pos]))<<28,n,this);},readVarint64:function(){return this.readVarint(!0);},readSVarint:function(){var n=this.readVarint();return n%2==1?-((n+1)/2):n/2;},readBoolean:function(){return!!this.readVarint();},readString:function(){var n,r=this.readVarint()+this.pos,i=this.pos;return(this.pos=r,r-i>=12&&s)?(n=this.buf,s.decode(n.subarray(i,r))):function(n,r,i){for(var a="",o=r;o239?4:c>223?3:c>191?2:1;if(o+d>i)break;1===d?c<128&&(f=c):2===d?(192&(s=n[o+1]))==128&&(f=(31&c)<<6|63&s)<=127&&(f=null):3===d?(s=n[o+1],l=n[o+2],(192&s)==128&&(192&l)==128&&((f=(15&c)<<12|(63&s)<<6|63&l)<=2047||f>=55296&&f<=57343)&&(f=null)):4===d&&(s=n[o+1],l=n[o+2],u=n[o+3],(192&s)==128&&(192&l)==128&&(192&u)==128&&((f=(15&c)<<18|(63&s)<<12|(63&l)<<6|63&u)<=65535||f>=1114112)&&(f=null)),null===f?(f=65533,d=1):f>65535&&(f-=65536,a+=String.fromCharCode(f>>>10&1023|55296),f=56320|1023&f),a+=String.fromCharCode(f),o+=d;}return a;}(this.buf,i,r);},readBytes:function(){var n=this.readVarint()+this.pos,r=this.buf.subarray(this.pos,n);return this.pos=n,r;},readPackedVarint:function(n,r){if(this.type!==o.Bytes)return n.push(this.readVarint(r));var i=l(this);for(n=n||[];this.pos127;);else if(r===o.Bytes)this.pos=this.readVarint()+this.pos;else if(r===o.Fixed32)this.pos+=4;else if(r===o.Fixed64)this.pos+=8;else throw Error("Unimplemented type: "+r);},writeTag:function(n,r){this.writeVarint(n<<3|r);},realloc:function(n){for(var r=this.length||16;r268435455||n<0){!function(n,r){var i,a,o,s,l,u;if(n>=0?(i=n%4294967296|0,a=n/4294967296|0):(i=~(-n%4294967296),a=~(-n/4294967296),4294967295^i?i=i+1|0:(i=0,a=a+1|0)),n>=18446744073709552e3||n<-18446744073709552e3)throw Error("Given varint doesn't fit into 10 bytes");r.realloc(10),o=i,r.buf[r.pos++]=127&o|128,o>>>=7,r.buf[r.pos++]=127&o|128,o>>>=7,r.buf[r.pos++]=127&o|128,o>>>=7,r.buf[r.pos++]=127&o|128,o>>>=7,r.buf[r.pos]=127&o,s=a,l=r,u=(7&s)<<4,l.buf[l.pos++]|=u|((s>>>=3)?128:0),!s||(l.buf[l.pos++]=127&s|((s>>>=7)?128:0),!s)||(l.buf[l.pos++]=127&s|((s>>>=7)?128:0),!s)||(l.buf[l.pos++]=127&s|((s>>>=7)?128:0),s&&(l.buf[l.pos++]=127&s|((s>>>=7)?128:0),s&&(l.buf[l.pos++]=127&s)));}(n,this);return;}this.realloc(4),this.buf[this.pos++]=127&n|(n>127?128:0),!(n<=127)&&(this.buf[this.pos++]=127&(n>>>=7)|(n>127?128:0),!(n<=127)&&(this.buf[this.pos++]=127&(n>>>=7)|(n>127?128:0),n<=127||(this.buf[this.pos++]=n>>>7&127)));},writeSVarint:function(n){this.writeVarint(n<0?-(2*n)-1:2*n);},writeBoolean:function(n){this.writeVarint(!!n);},writeString:function(n){n=String(n),this.realloc(4*n.length),this.pos++;var r=this.pos;this.pos=function(n,r,i){for(var a,o,s=0;s55295&&a<57344){if(o){if(a<56320){n[i++]=239,n[i++]=191,n[i++]=189,o=a;continue;}a=o-55296<<10|a-56320|65536,o=null;}else{a>56319||s+1===r.length?(n[i++]=239,n[i++]=191,n[i++]=189):o=a;continue;}}else o&&(n[i++]=239,n[i++]=191,n[i++]=189,o=null);a<128?n[i++]=a:(a<2048?n[i++]=a>>6|192:(a<65536?n[i++]=a>>12|224:(n[i++]=a>>18|240,n[i++]=a>>12&63|128),n[i++]=a>>6&63|128),n[i++]=63&a|128);}return i;}(this.buf,n,this.pos);var i=this.pos-r;i>=128&&u(r,i,this),this.pos=r-1,this.writeVarint(i),this.pos+=i;},writeFloat:function(n){this.realloc(4),a.write(this.buf,n,this.pos,!0,23,4),this.pos+=4;},writeDouble:function(n){this.realloc(8),a.write(this.buf,n,this.pos,!0,52,8),this.pos+=8;},writeBytes:function(n){var r=n.length;this.writeVarint(r),this.realloc(r);for(var i=0;i=128&&u(i,a,this),this.pos=i-1,this.writeVarint(a),this.pos+=a;},writeMessage:function(n,r,i){this.writeTag(n,o.Bytes),this.writeRawMessage(r,i);},writePackedVarint:function(n,r){r.length&&this.writeMessage(n,c,r);},writePackedSVarint:function(n,r){r.length&&this.writeMessage(n,f,r);},writePackedBoolean:function(n,r){r.length&&this.writeMessage(n,p,r);},writePackedFloat:function(n,r){r.length&&this.writeMessage(n,d,r);},writePackedDouble:function(n,r){r.length&&this.writeMessage(n,h,r);},writePackedFixed32:function(n,r){r.length&&this.writeMessage(n,m,r);},writePackedSFixed32:function(n,r){r.length&&this.writeMessage(n,g,r);},writePackedFixed64:function(n,r){r.length&&this.writeMessage(n,v,r);},writePackedSFixed64:function(n,r){r.length&&this.writeMessage(n,y,r);},writeBytesField:function(n,r){this.writeTag(n,o.Bytes),this.writeBytes(r);},writeFixed32Field:function(n,r){this.writeTag(n,o.Fixed32),this.writeFixed32(r);},writeSFixed32Field:function(n,r){this.writeTag(n,o.Fixed32),this.writeSFixed32(r);},writeFixed64Field:function(n,r){this.writeTag(n,o.Fixed64),this.writeFixed64(r);},writeSFixed64Field:function(n,r){this.writeTag(n,o.Fixed64),this.writeSFixed64(r);},writeVarintField:function(n,r){this.writeTag(n,o.Varint),this.writeVarint(r);},writeSVarintField:function(n,r){this.writeTag(n,o.Varint),this.writeSVarint(r);},writeStringField:function(n,r){this.writeTag(n,o.Bytes),this.writeString(r);},writeFloatField:function(n,r){this.writeTag(n,o.Fixed32),this.writeFloat(r);},writeDoubleField:function(n,r){this.writeTag(n,o.Fixed64),this.writeDouble(r);},writeBooleanField:function(n,r){this.writeVarintField(n,!!r);}};},"06753dad":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return l;}});var a=i("777fffbe"),o=a._(i("bf98e12a")),s=a._(i("2cc7f81c")),l=(0,o.default)(s.default,"Map");},"06c64a8e":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return o;}});var a={}.toString,o=function(n,r){return a.call(n)==="[object "+r+"]";};},"06ecdd39":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return p;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("7cfeda15"),l=a._(s),u=i("609f48be"),c=o._(u),f={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z"}},{tag:"path",attrs:{d:"M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8z"}}]},name:"plus",theme:"outlined"},d=i("887aaf6c"),h=a._(d),p=c.forwardRef(function(n,r){return c.createElement(h.default,(0,l.default)({},n,{ref:r,icon:f}));});},"0705d96b":function(n,r,i){n.exports=function(n,r,i){for(var a=-1,o=null==n?0:n.length;++as.solve(n);}let p=h(.25,.1,.25,1),m={};function g(n){m[n]||("undefined"!=typeof console&&console.warn(n),m[n]=!0);}function v(n){return n*Math.PI/180;}},"07aa9410":function(n,r,i){"use strict";function a(n,r){return n[r];}i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});},"07ba0bdb":function(n,r,i){var a=i("bbc15be8"),o=i("7bcda897"),s=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,l=/^\w*$/;n.exports=function(n,r){if(a(n))return!1;var i=typeof n;return!!("number"==i||"symbol"==i||"boolean"==i||null==n||o(n))||l.test(n)||!s.test(n)||null!=r&&n in Object(r);};},"07cf43fc":function(n,r,i){"use strict";var a,o,s,l,u;i.d(r,"__esModule",{value:!0}),i.e(r,{CanvasUpdateType:function(){return p;},LinearDir:function(){return f;},SizeUnitType:function(){return h;},TextureBlend:function(){return d;},lineStyleType:function(){return c;}});let c=((a={})[a.solid=0]="solid",a[a.dash=1]="dash",a),f=((o={}).VERTICAL="vertical",o.HORIZONTAL="horizontal",o),d=((s={}).NORMAL="normal",s.REPLACE="replace",s),h=((l={})[l.pixel=0]="pixel",l[l.meter=1]="meter",l),p=((u={}).ALWAYS="always",u.DRAGEND="dragend",u);},"08dda30e":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return p;}});var a=i("777fffbe"),o=i("852bbaa9"),s=a._(i("ee64167d")),l=a._(i("8bbe4f57")),u=a._(i("85158032")),c=i("78ba7479"),f=i("5dd400a3"),d=o._(i("da755037")),h=(0,c.createMat4)(),p=function(){function n(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=r.width,a=r.height,o=r.viewMatrix,s=void 0===o?h:o,u=r.projectionMatrix,f=void 0===u?h:u;(0,l.default)(this,n),this.width=i||1,this.height=a||1,this.scale=1,this.pixelsPerMeter=1,this.viewMatrix=s,this.projectionMatrix=f;var p=(0,c.createMat4)();d.multiply(p,p,this.projectionMatrix),d.multiply(p,p,this.viewMatrix),this.viewProjectionMatrix=p;var m=(0,c.createMat4)();d.scale(m,m,[this.width/2,-this.height/2,1]),d.translate(m,m,[1,-1,0]),d.multiply(m,m,this.viewProjectionMatrix);var g=d.invert((0,c.createMat4)(),m);if(!g)throw Error("Pixel project matrix not invertible");this.pixelProjectionMatrix=m,this.pixelUnprojectionMatrix=g,this.equals=this.equals.bind(this),this.project=this.project.bind(this),this.unproject=this.unproject.bind(this),this.projectPosition=this.projectPosition.bind(this),this.unprojectPosition=this.unprojectPosition.bind(this),this.projectFlat=this.projectFlat.bind(this),this.unprojectFlat=this.unprojectFlat.bind(this);}return(0,u.default)(n,[{key:"equals",value:function(r){return r instanceof n&&r.width===this.width&&r.height===this.height&&d.equals(r.projectionMatrix,this.projectionMatrix)&&d.equals(r.viewMatrix,this.viewMatrix);}},{key:"project",value:function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=r.topLeft,a=this.projectPosition(n),o=(0,f.worldToPixels)(a,this.pixelProjectionMatrix),l=(0,s.default)(o,2),u=l[0],c=l[1],d=void 0===i||i?c:this.height-c;return 2===n.length?[u,d]:[u,d,o[2]];}},{key:"unproject",value:function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=r.topLeft,a=r.targetZ,o=(0,s.default)(n,3),l=o[0],u=o[1],c=o[2],d=void 0===i||i?u:this.height-u,h=a&&a*this.pixelsPerMeter,p=(0,f.pixelsToWorld)([l,d,c],this.pixelUnprojectionMatrix,h),m=this.unprojectPosition(p),g=(0,s.default)(m,3),v=g[0],y=g[1],_=g[2];return Number.isFinite(c)?[v,y,_]:Number.isFinite(a)?[v,y,a]:[v,y];}},{key:"projectPosition",value:function(n){var r=this.projectFlat(n),i=(0,s.default)(r,2);return[i[0],i[1],(n[2]||0)*this.pixelsPerMeter];}},{key:"unprojectPosition",value:function(n){var r=this.unprojectFlat(n),i=(0,s.default)(r,2);return[i[0],i[1],(n[2]||0)/this.pixelsPerMeter];}},{key:"projectFlat",value:function(n){return arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.scale,n;}},{key:"unprojectFlat",value:function(n){return arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.scale,n;}}]),n;}();},"08eace5d":function(n,r,i){window._iconfont_svg_string_3580659='',function(n){try{var r=(r=document.getElementsByTagName("script"))[r.length-1],i=r.getAttribute("data-injectcss"),r=r.getAttribute("data-disable-injectsvg");if(!r){var a,o,s,l,u,c=function(n,r){r.parentNode.insertBefore(n,r);};if(i&&!n.__iconfont__svg__cssinject__){n.__iconfont__svg__cssinject__=!0;try{document.write("");}catch(n){console&&console.log(n);}}a=function(){var r,i=document.createElement("div");i.innerHTML=n._iconfont_svg_string_3580659,(i=i.getElementsByTagName("svg")[0])&&(i.setAttribute("aria-hidden","true"),i.style.position="absolute",i.style.width=0,i.style.height=0,i.style.overflow="hidden",(r=document.body).firstChild?c(i,r.firstChild):r.appendChild(i));},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(a,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),a();},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(s=a,l=n.document,u=!1,function n(){try{l.documentElement.doScroll("left");}catch(r){return void setTimeout(n,50);}f();}(),l.onreadystatechange=function(){"complete"==l.readyState&&(l.onreadystatechange=null,f());});}function f(){u||(u=!0,s());}}catch(n){}}(window);},"08f49370":function(n,r,i){var a=i("2d19bd14"),o=i("a2950f5c"),s=i("bbc15be8"),l=i("bb289a91"),u=i("45451182"),c=i("743ea378");n.exports=function(n,r,i){r=a(r,n);for(var f=-1,d=r.length,h=!1;++f\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=r.console&&(r.console.warn||r.console.log);return s&&s.call(r.console,o,a),n.apply(this,arguments);};}s="function"!=typeof Object.assign?function(n){if(null==n)throw TypeError("Cannot convert undefined or null to object");for(var r=Object(n),i=1;i-1;}function A(n){return n.trim().split(/\s+/g);}function C(n,r,i){if(n.indexOf&&!i)return n.indexOf(r);for(var a=0;aC(o,l)&&a.push(n[s]),o[s]=l,s++;}return i&&(a=r?a.sort(function(n,i){return n[r]>i[r];}):a.sort()),a;}function R(n,r){for(var i,a,s=r[0].toUpperCase()+r.slice(1),u=0;u1&&!a.firstMultiple?a.firstMultiple=V(i):1===l&&(a.firstMultiple=!1),u=a.firstInput,h=(c=a.firstMultiple)?c.center:u.center,p=i.center=G(s),i.timeStamp=d(),i.deltaTime=i.timeStamp-u.timeStamp,i.angle=q(h,p),i.distance=X(h,p),m=i.center,g=a.offsetDelta||{},v=a.prevDelta||{},y=a.prevInput||{},(1===i.eventType||4===y.eventType)&&(v=a.prevDelta={x:y.deltaX||0,y:y.deltaY||0},g=a.offsetDelta={x:m.x,y:m.y}),i.deltaX=v.x+(m.x-g.x),i.deltaY=v.y+(m.y-g.y),i.offsetDirection=W(i.deltaX,i.deltaY),_=H(i.deltaTime,i.deltaX,i.deltaY),i.overallVelocityX=_.x,i.overallVelocityY=_.y,i.overallVelocity=f(_.x)>f(_.y)?_.x:_.y,i.scale=c?(b=c.pointers,X(s[0],s[1],j)/X(b[0],b[1],j)):1,i.rotation=c?(x=c.pointers,q(s[1],s[0],j)+q(x[1],x[0],j)):0,i.maxPointers=a.prevInput?i.pointers.length>a.prevInput.maxPointers?i.pointers.length:a.prevInput.maxPointers:i.pointers.length,function(n,r){var i,a,s,l,u=n.lastInterval||r,c=r.timeStamp-u.timeStamp;if(8!=r.eventType&&(c>25||u.velocity===o)){var d=r.deltaX-u.deltaX,h=r.deltaY-u.deltaY,p=H(c,d,h);a=p.x,s=p.y,i=f(p.x)>f(p.y)?p.x:p.y,l=W(d,h),n.lastInterval=r;}else i=u.velocity,a=u.velocityX,s=u.velocityY,l=u.direction;r.velocity=i,r.velocityX=a,r.velocityY=s,r.direction=l;}(a,i),E=n.element,S(i.srcEvent.target,E)&&(E=i.srcEvent.target),i.target=E,n.emit("hammer.input",i),n.recognize(i),n.session.prevInput=i;}function V(n){for(var r=[],i=0;i=f(r)?n<0?2:4:r<0?8:16;}function X(n,r,i){i||(i=B);var a=r[i[0]]-n[i[0]],o=r[i[1]]-n[i[1]];return Math.sqrt(a*a+o*o);}function q(n,r,i){i||(i=B);var a=r[i[0]]-n[i[0]];return 180*Math.atan2(r[i[1]]-n[i[1]],a)/Math.PI;}z.prototype={handler:function(){},init:function(){this.evEl&&E(this.element,this.evEl,this.domHandler),this.evTarget&&E(this.target,this.evTarget,this.domHandler),this.evWin&&E(k(this.element),this.evWin,this.domHandler);},destroy:function(){this.evEl&&w(this.element,this.evEl,this.domHandler),this.evTarget&&w(this.target,this.evTarget,this.domHandler),this.evWin&&w(k(this.element),this.evWin,this.domHandler);}};var $={mousedown:1,mousemove:2,mouseup:4};function Y(){this.evEl="mousedown",this.evWin="mousemove mouseup",this.pressed=!1,z.apply(this,arguments);}_(Y,z,{handler:function(n){var r=$[n.type];1&r&&0===n.button&&(this.pressed=!0),2&r&&1!==n.which&&(r=4),this.pressed&&(4&r&&(this.pressed=!1),this.callback(this.manager,r,{pointers:[n],changedPointers:[n],pointerType:F,srcEvent:n}));}});var Z={pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},K={2:D,3:"pen",4:F,5:"kinect"},Q="pointerdown",J="pointermove pointerup pointercancel";function ee(){this.evEl=Q,this.evWin=J,z.apply(this,arguments),this.store=this.manager.session.pointerEvents=[];}r.MSPointerEvent&&!r.PointerEvent&&(Q="MSPointerDown",J="MSPointerMove MSPointerUp MSPointerCancel"),_(ee,z,{handler:function(n){var r=this.store,i=!1,a=Z[n.type.toLowerCase().replace("ms","")],o=K[n.pointerType]||n.pointerType,s=o==D,l=C(r,n.pointerId,"pointerId");1&a&&(0===n.button||s)?l<0&&(r.push(n),l=r.length-1):12&a&&(i=!0),!(l<0)&&(r[l]=n,this.callback(this.manager,a,{pointers:r,changedPointers:[n],pointerType:o,srcEvent:n}),i&&r.splice(l,1));}});var et={touchstart:1,touchmove:2,touchend:4,touchcancel:8};function en(){this.evTarget="touchstart",this.evWin="touchstart touchmove touchend touchcancel",this.started=!1,z.apply(this,arguments);}function er(n,r){var i=O(n.touches),a=O(n.changedTouches);return 12&r&&(i=M(i.concat(a),"identifier",!0)),[i,a];}_(en,z,{handler:function(n){var r=et[n.type];if(1===r&&(this.started=!0),this.started){var i=er.call(this,n,r);12&r&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,r,{pointers:i[0],changedPointers:i[1],pointerType:D,srcEvent:n});}}});var ei={touchstart:1,touchmove:2,touchend:4,touchcancel:8};function ea(){this.evTarget="touchstart touchmove touchend touchcancel",this.targetIds={},z.apply(this,arguments);}function eo(n,r){var i=O(n.touches),a=this.targetIds;if(3&r&&1===i.length)return a[i[0].identifier]=!0,[i,i];var o,s,l=O(n.changedTouches),u=[],c=this.target;if(s=i.filter(function(n){return S(n.target,c);}),1===r)for(o=0;o-1&&a.splice(n,1);},2500);}}function ec(n){for(var r=n.srcEvent.clientX,i=n.srcEvent.clientY,a=0;a-1&&this.requireFail.splice(r,1),this;},hasRequireFailures:function(){return this.requireFail.length>0;},canRecognizeWith:function(n){return!!this.simultaneous[n.id];},emit:function(n){var r=this,i=this.state;function a(i){r.manager.emit(i,n);}i<8&&a(r.options.event+eE(i)),a(r.options.event),n.additionalEvent&&a(n.additionalEvent),i>=8&&a(r.options.event+eE(i));},tryEmit:function(n){if(this.canEmit())return this.emit(n);this.state=32;},canEmit:function(){for(var n=0;nr.threshold&&o&r.direction;},attrTest:function(n){return eT.prototype.attrTest.call(this,n)&&(2&this.state||!(2&this.state)&&this.directionTest(n));},emit:function(n){this.pX=n.deltaX,this.pY=n.deltaY;var r=ew(n.direction);r&&(n.additionalEvent=this.options.event+r),this._super.emit.call(this,n);}}),_(eC,eT,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[eg];},attrTest:function(n){return this._super.attrTest.call(this,n)&&(Math.abs(n.scale-1)>this.options.threshold||2&this.state);},emit:function(n){if(1!==n.scale){var r=n.scale<1?"in":"out";n.additionalEvent=this.options.event+r;}this._super.emit.call(this,n);}}),_(eO,ex,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[ep];},process:function(n){var r=this.options,i=n.pointers.length===r.pointers,a=n.distancer.time;if(this._input=n,a&&i&&(!(12&n.eventType)||o)){if(1&n.eventType)this.reset(),this._timer=h(function(){this.state=8,this.tryEmit();},r.time,this);else if(4&n.eventType)return 8;}else this.reset();return 32;},reset:function(){clearTimeout(this._timer);},emit:function(n){8===this.state&&(n&&4&n.eventType?this.manager.emit(this.options.event+"up",n):(this._input.timeStamp=d(),this.manager.emit(this.options.event,this._input)));}}),_(eM,eT,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[eg];},attrTest:function(n){return this._super.attrTest.call(this,n)&&(Math.abs(n.rotation)>this.options.threshold||2&this.state);}}),_(eR,eT,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:30,pointers:1},getTouchAction:function(){return eA.prototype.getTouchAction.call(this);},attrTest:function(n){var r,i=this.options.direction;return 30&i?r=n.overallVelocity:6&i?r=n.overallVelocityX:24&i&&(r=n.overallVelocityY),this._super.attrTest.call(this,n)&&i&n.offsetDirection&&n.distance>this.options.threshold&&n.maxPointers==this.options.pointers&&f(r)>this.options.velocity&&4&n.eventType;},emit:function(n){var r=ew(n.offsetDirection);r&&this.manager.emit(this.options.event+r,n),this.manager.emit(this.options.event,n);}}),_(eP,ex,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[em];},process:function(n){var r=this.options,i=n.pointers.length===r.pointers,a=n.distancer?1:n>=r?0:NaN;},o=function(n){var r;return 1===n.length&&(r=n,n=function(n,i){return a(r(n),i);}),{left:function(r,i,a,o){for(null==a&&(a=0),null==o&&(o=r.length);a>>1;0>n(r[s],i)?a=s+1:o=s;}return a;},right:function(r,i,a,o){for(null==a&&(a=0),null==o&&(o=r.length);a>>1;n(r[s],i)>0?o=s:a=s+1;}return a;}};},s=o(a),l=s.right;s.left;var u=Array.prototype;u.slice,u.map;var c=Math.sqrt(50),f=Math.sqrt(10),d=Math.sqrt(2),h=function(n,r,i){var a,o,s,l,u=-1;if(i=+i,(n=+n)==(r=+r)&&i>0)return[n];if((a=r0)for(n=Math.ceil(n/l),s=Array(o=Math.ceil((r=Math.floor(r/l))-n+1));++u=0?(s>=c?10:s>=f?5:s>=d?2:1)*Math.pow(10,o):-Math.pow(10,-o)/(s>=c?10:s>=f?5:s>=d?2:1);}function m(n,r,i){var a=Math.abs(r-n)/Math.max(0,i),o=Math.pow(10,Math.floor(Math.log(a)/Math.LN10)),s=a/o;return s>=c?o*=10:s>=f?o*=5:s>=d&&(o*=2),r=1)return+i(n[a-1],a-1,n);var a,o=(a-1)*r,s=Math.floor(o),l=+i(n[s],s,n);return l+(+i(n[s+1],s+1,n)-l)*(o-s);}};},"0ac9c851":function(n,r,i){"use strict";n.exports=function(n){var r={};function i(i){var a=n.get(i);return void 0===a?[]:r[a]||[];}return{get:i,add:function(i,a){var o=n.get(i);r[o]||(r[o]=[]),r[o].push(a);},removeListener:function(n,r){for(var a=i(n),o=0,s=a.length;o1&&void 0!==arguments[1]?arguments[1]:{},i=g(n,r);i&&h(r).removeChild(i);},r.updateCSS=function(n,r){var i,a,s,u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},c=h(u),v=p(c),y=(0,o.default)((0,o.default)({},u),{},{styles:v});!function(n,r){var i=f.get(n);if(!i||!(0,l.default)(document,i)){var a=m("",r),o=a.parentNode;f.set(n,o),n.removeChild(a);}}(c,y);var _=g(r,y);if(_)return null!==(i=y.csp)&&void 0!==i&&i.nonce&&_.nonce!==(null===(a=y.csp)||void 0===a?void 0:a.nonce)&&(_.nonce=null===(s=y.csp)||void 0===s?void 0:s.nonce),_.innerHTML!==n&&(_.innerHTML=n),_;var b=m(n,y);return b.setAttribute(d(y),r),b;};var o=a(i("3bbc6f6c")),s=a(i("0047230b")),l=a(i("1536f4d4")),u="data-rc-order",c="data-rc-priority",f=new Map;function d(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.mark;return r?r.startsWith("data-")?r:"data-".concat(r):"rc-util-key";}function h(n){return n.attachTo?n.attachTo:document.querySelector("head")||document.body;}function p(n){return Array.from((f.get(n)||n).children).filter(function(n){return"STYLE"===n.tagName;});}function m(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,s.default)())return null;var i=r.csp,a=r.prepend,o=r.priority,l=void 0===o?0:o,f="queue"===a?"prependQueue":a?"prepend":"append",d="prependQueue"===f,m=document.createElement("style");m.setAttribute(u,f),d&&l&&m.setAttribute(c,"".concat(l)),null!=i&&i.nonce&&(m.nonce=null==i?void 0:i.nonce),m.innerHTML=n;var g=h(r),v=g.firstChild;if(a){if(d){var y=(r.styles||p(g)).filter(function(n){return!!["prepend","prependQueue"].includes(n.getAttribute(u))&&l>=Number(n.getAttribute(c)||0);});if(y.length)return g.insertBefore(m,y[y.length-1].nextSibling),m;}g.insertBefore(m,v);}else g.appendChild(m);return m;}function g(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=h(r);return(r.styles||p(i)).find(function(i){return i.getAttribute(d(r))===n;});}},"0c4be061":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});var a=i("852bbaa9")._(i("609f48be")).createContext({renderWithProps:!1});},"0cf4df74":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{createOffscreenGroup:function(){return c;},isInOffscreenGroup:function(){return f;}});var a=i("3862611d"),o=i("5e195043"),s=i("5e195043"),l=i("f1d8aa22"),u=function(n){function r(){for(var r=[],i=0;i1?0:n<-1?h:Math.acos(n);}function v(n){return n>=1?p:n<=-1?-p:Math.asin(n);}},"0dcab6c6":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{SEARCH_MARK:function(){return f;},default:function(){return p;}});var a=i("777fffbe"),o=i("852bbaa9"),s=a._(i("a854094b")),l=a._(i("e4870cf0")),u=a._(i("f1020fa4")),c=o._(i("609f48be")),f="__rc_cascader_search_mark__",d=function(n,r,i){var a=i.label,o=void 0===a?"":a;return r.some(function(r){return String(r[o]).toLowerCase().includes(n.toLowerCase());});},h=function(n,r,i,a){return r.map(function(n){return n[a.label];}).join(" / ");},p=function(n,r,i,a,o,p){var m=o.filter,g=void 0===m?d:m,v=o.render,y=void 0===v?h:v,_=o.limit,b=void 0===_?50:_,x=o.sort;return c.useMemo(function(){var o=[];return n?(!function r(c,d){var h=arguments.length>2&&void 0!==arguments[2]&&arguments[2];c.forEach(function(c){if(x||!1===b||!(b>0)||!(o.length>=b)){var m,v=[].concat((0,u.default)(d),[c]),_=c[i.children],E=h||c.disabled;(!_||0===_.length||p)&&g(n,v,{label:i.label})&&o.push((0,l.default)((0,l.default)({},c),{},(m={disabled:E},(0,s.default)(m,i.label,y(n,v,a,i)),(0,s.default)(m,f,v),(0,s.default)(m,i.children,void 0),m))),_&&r(c[i.children],v,E);}});}(r,[]),x&&o.sort(function(r,a){return x(r[f],a[f],n,i);}),!1!==b&&b>0?o.slice(0,b):o):[];},[n,r,i,a,y,p,g,x,b]);};},"0e2cd74b":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return p;}});var a=i("777fffbe"),o=i("480dd2d5"),s=a._(o),l=i("6f0d7bd0"),u=a._(l);function c(n){return(0,u.default)(n)&&"[object Arguments]"==(0,s.default)(n);}var f=Object.prototype,d=f.hasOwnProperty,h=f.propertyIsEnumerable,p=c(function(){return arguments;}())?c:function(n){return(0,u.default)(n)&&d.call(n,"callee")&&!h.call(n,"callee");};},"0fbce506":function(n,r,i){"use strict";(n.exports={}).getOption=function(n,r,i){var a=n[r];return null==a&&void 0!==i?i:a;};},10039389:function(n,r,i){"use strict";n.exports=function(n){function r(){}var i={log:r,warn:r,error:r};if(!n&&window.console){var a=function(n,r){n[r]=function(){var n=console[r];if(n.apply)n.apply(console,arguments);else for(var i=0;i3&&void 0!==arguments[3]&&arguments[3];if(""===r)return"";var s=p(r),l=s.negativeStr,u=s.integerStr,c=s.decimalStr,f="".concat(i).concat(c),d="".concat(l).concat(u);if(a>=0){var h=Number(c[a]);return h>=5&&!o?n(x(r).add("".concat(l,"0.").concat("0".repeat(a)).concat(10-h)).toString(),i,a,o):0===a?d:"".concat(d).concat(i).concat(c.padEnd(a,"0").slice(0,a));}return".0"===f?d:"".concat(d).concat(f);};},trimNumber:function(){return p;},validateNumber:function(){return y;}});var a=i("777fffbe"),o=i("8bbe4f57"),s=a._(o),l=i("85158032"),u=a._(l),c=i("a854094b"),f=a._(c);function d(){return"function"==typeof BigInt;}function h(n){return!n&&0!==n&&!Number.isNaN(n)||!String(n).trim();}function p(n){var r=n.trim(),i=r.startsWith("-");i&&(r=r.slice(1)),(r=r.replace(/(\.\d*[^0])0*$/,"$1").replace(/\.0*$/,"").replace(/^0+/,"")).startsWith(".")&&(r="0".concat(r));var a=r||"0",o=a.split("."),s=o[0]||"0",l=o[1]||"0";"0"===s&&"0"===l&&(i=!1);var u=i?"-":"";return{negative:i,negativeStr:u,trimStr:a,integerStr:s,decimalStr:l,fullStr:"".concat(u).concat(a)};}function m(n){var r=String(n);return!Number.isNaN(Number(r))&&r.includes("e");}function g(n){var r=String(n);if(m(n)){var i=Number(r.slice(r.indexOf("e-")+2)),a=r.match(/\.(\d+)/);return null!=a&&a[1]&&(i+=a[1].length),i;}return r.includes(".")&&y(r)?r.length-r.indexOf(".")-1:0;}function v(n){var r=String(n);if(m(n)){if(n>Number.MAX_SAFE_INTEGER)return String(d()?BigInt(n).toString():Number.MAX_SAFE_INTEGER);if(n=this.add(n.negate().toString()).toNumber();}},{key:"toNumber",value:function(){return this.isNaN()?NaN:Number(this.toString());}},{key:"toString",value:function(){var n=!(arguments.length>0)||void 0===arguments[0]||arguments[0];return n?this.isInvalidate()?"":p("".concat(this.getMark()).concat(this.getIntegerStr(),".").concat(this.getDecimalStr())).fullStr:this.origin;}}]),n;}(),b=function(){function n(r){if((0,s.default)(this,n),(0,f.default)(this,"origin",""),(0,f.default)(this,"number",void 0),(0,f.default)(this,"empty",void 0),h(r)){this.empty=!0;return;}this.origin=String(r),this.number=Number(r);}return(0,u.default)(n,[{key:"negate",value:function(){return new n(-this.toNumber());}},{key:"add",value:function(r){if(this.isInvalidate())return new n(r);var i=Number(r);if(Number.isNaN(i))return this;var a=this.number+i;if(a>Number.MAX_SAFE_INTEGER)return new n(Number.MAX_SAFE_INTEGER);if(aNumber.MAX_SAFE_INTEGER)return new n(Number.MAX_SAFE_INTEGER);if(a=this.add(n.negate().toString()).toNumber();}},{key:"toNumber",value:function(){return this.number;}},{key:"toString",value:function(){var n=!(arguments.length>0)||void 0===arguments[0]||arguments[0];return n?this.isInvalidate()?"":v(this.number):this.origin;}}]),n;}();function x(n){return d()?new _(n):new b(n);}},"11bba482":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{FormListContext:function(){return T;},ProFormList:function(){return A;}});var a=i("777fffbe"),o=i("852bbaa9"),s=a._(i("f1020fa4")),l=a._(i("e4870cf0")),u=a._(i("613f75ca")),c=a._(i("a774639c")),f=a._(i("a788b59c")),d=i("64681837"),h=i("4701d2de"),p=a._(i("a5a99096")),m=a._(i("f34e933b")),g=a._(i("064ecd09")),v=i("a275200c"),y=o._(i("609f48be")),_=a._(i("2faf3d77")),b=i("02a23b09"),x=i("8fe0a95a"),E=i("4783ed5c"),w=i("dac8af92"),S=["transform","actionRender","creatorButtonProps","label","alwaysShowItemLabel","tooltip","creatorRecord","itemRender","rules","itemContainerRender","fieldExtraRender","copyIconProps","children","deleteIconProps","actionRef","style","prefixCls","actionGuard","min","max","colProps","wrapperCol","rowProps","onAfterAdd","onAfterRemove","isValidateList","emptyListMessage","className","containerClassName","containerStyle","readonly"],T=y.default.createContext({});function A(n){var r=(0,y.useRef)(),i=(0,y.useContext)(p.default.ConfigContext),a=(0,y.useContext)(T),o=i.getPrefixCls("pro-form-list"),A=(0,d.useIntl)(),C=y.default.useContext(_.default).setFieldValueType,O=n.transform,M=n.actionRender,R=n.creatorButtonProps,P=n.label,k=n.alwaysShowItemLabel,I=n.tooltip,L=n.creatorRecord,N=n.itemRender,D=n.rules,F=n.itemContainerRender,B=n.fieldExtraRender,j=n.copyIconProps,z=void 0===j?{Icon:c.default,tooltipText:A.getMessage("copyThisLine","\u590D\u5236\u6B64\u9879")}:j,U=n.children,V=n.deleteIconProps,G=void 0===V?{Icon:f.default,tooltipText:A.getMessage("deleteThisLine","\u5220\u9664\u6B64\u9879")}:V,H=n.actionRef,W=n.style,X=n.prefixCls,q=n.actionGuard,$=n.min,Y=n.max,Z=n.colProps,K=n.wrapperCol,Q=n.rowProps,J=n.onAfterAdd,ee=n.onAfterRemove,et=n.isValidateList,en=void 0!==et&&et,er=n.emptyListMessage,ei=void 0===er?"\u5217\u8868\u4E0D\u80FD\u4E3A\u7A7A":er,ea=n.className,eo=n.containerClassName,es=n.containerStyle,el=n.readonly,eu=(0,u.default)(n,S),ec=(0,b.useGridHelpers)({colProps:Z,rowProps:Q}),ef=ec.ColWrapper,ed=ec.RowWrapper,eh=(0,y.useContext)(h.ProFormContext),ep=(0,y.useMemo)(function(){return void 0===a.name?[eu.name].flat(1):[a.name,eu.name].flat(1);},[a.name,eu.name]);(0,y.useImperativeHandle)(H,function(){return(0,l.default)((0,l.default)({},r.current),{},{get:function(n){return eh.formRef.current.getFieldValue([].concat((0,s.default)(ep),[n]));},getList:function(){return eh.formRef.current.getFieldValue((0,s.default)(ep));}});},[ep,eh.formRef]),(0,y.useEffect)(function(){(0,v.noteOnce)(!!eh.formRef,"ProFormList \u5FC5\u987B\u8981\u653E\u5230 ProForm \u4E2D,\u5426\u5219\u4F1A\u9020\u6210\u884C\u4E3A\u5F02\u5E38\u3002"),(0,v.noteOnce)(!!eh.formRef,"Proformlist must be placed in ProForm, otherwise it will cause abnormal behavior.");},[eh.formRef]),(0,y.useEffect)(function(){C&&n.name&&C([n.name].flat(1).filter(function(n){return void 0!==n;}),{valueType:"formList",transform:O});},[n.name,C,O]);var em=(0,E.useStyle)(o),eg=em.wrapSSR,ev=em.hashId;return eh.formRef?eg((0,w.jsx)(ef,{children:(0,w.jsx)("div",{className:(0,g.default)(o,ev),style:W,children:(0,w.jsx)(m.default.Item,(0,l.default)((0,l.default)({label:P,prefixCls:X,tooltip:I,style:W,required:null==D?void 0:D.some(function(n){return n.required;}),wrapperCol:K,className:ea},eu),{},{name:en?ep:void 0,rules:en?[{validator:function(n,r){return r&&0!==r.length?Promise.resolve():Promise.reject(Error(ei));},required:!0}]:void 0,children:(0,w.jsx)(m.default.List,(0,l.default)((0,l.default)({rules:D},eu),{},{name:ep,children:function(n,i,a){return r.current=i,(0,w.jsxs)(ed,{children:[(0,w.jsx)(x.ProFormListContainer,{name:ep,readonly:!!el,originName:eu.name,copyIconProps:z,deleteIconProps:G,formInstance:eh.formRef.current,prefixCls:o,meta:a,fields:n,itemContainerRender:F,itemRender:N,fieldExtraRender:B,creatorButtonProps:R,creatorRecord:L,actionRender:M,action:i,actionGuard:q,alwaysShowItemLabel:k,min:$,max:Y,count:n.length,onAfterAdd:function(n,r,i){en&&eh.formRef.current.validateFields([ep]),null==J||J(n,r,i);},onAfterRemove:function(n,r){en&&0===r&&eh.formRef.current.validateFields([ep]),null==ee||ee(n,r);},containerClassName:eo,containerStyle:es,children:U}),(0,w.jsx)(m.default.ErrorList,{errors:a.errors})]});}}))}))})})):null;}},"12787c53":function(n,r,i){var a=i("7505d865"),o=i("bbc15be8");n.exports=function(n,r,i){var s=r(n);return o(n)?s:a(s,i(n));};},"12a871f9":function(n,r,i){var a=i("f53c9952"),o=i("88ddf3cf");n.exports=function(n,r){return n&&a(r,o(r),n);};},"148614a5":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{coordOf:function(){return c;},coordinate2Transform:function(){return u;},createCoordinate:function(){return l;},isHelix:function(){return d;},isParallel:function(){return p;},isPolar:function(){return f;},isRadar:function(){return y;},isRadial:function(){return v;},isReflect:function(){return g;},isReflectY:function(){return _;},isTheta:function(){return m;},isTranspose:function(){return h;}});var a=i("19d769ab"),o=i("c4368857"),s=this&&this.__rest||function(n,r){var i={};for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&0>r.indexOf(a)&&(i[a]=n[a]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,a=Object.getOwnPropertySymbols(n);or.indexOf(a[o])&&Object.prototype.propertyIsEnumerable.call(n,a[o])&&(i[a[o]]=n[a[o]]);return i;};function l(n,r,i){let[s]=(0,o.useLibrary)("coordinate",i),{innerHeight:l,innerWidth:u,insetLeft:c,insetTop:f,insetRight:d,insetBottom:h}=n,{coordinates:p=[]}=r,m=p.find(n=>"cartesian"===n.type||"cartesian3D"===n.type)?p:[...p,{type:"cartesian"}],g="cartesian3D"===m[0].type,v=Object.assign(Object.assign({},n),{x:c,y:f,width:u-c-d,height:l-h-f,transformations:m.flatMap(s)});return g?new a.Coordinate3D(v):new a.Coordinate(v);}function u(n,r){let{coordinate:i={},coordinates:a}=n,l=s(n,["coordinate","coordinates"]);if(a)return n;let{type:u,transform:c=[]}=i,f=s(i,["type","transform"]);if(!u)return Object.assign(Object.assign({},l),{coordinates:c});let[,d]=(0,o.useLibrary)("coordinate",r),{transform:h=!1}=d(u).props||{};if(h)throw Error(`Unknown coordinate: ${u}.`);return Object.assign(Object.assign({},l),{coordinates:[Object.assign({type:u},f),...c]});}function c(n,r){return n.filter(n=>n.type===r);}function f(n){return c(n,"polar").length>0;}function d(n){return c(n,"helix").length>0;}function h(n){return c(n,"transpose").length%2==1;}function p(n){return c(n,"parallel").length>0;}function m(n){return c(n,"theta").length>0;}function g(n){return c(n,"reflect").length>0;}function v(n){return c(n,"radial").length>0;}function y(n){return c(n,"radar").length>0;}function _(n){return c(n,"reflectY").length>0;}},"14887fae":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{bowtie:function(){return d;},button:function(){return T;},circle:function(){return a;},cross:function(){return p;},dash:function(){return _;},diamond:function(){return l;},dot:function(){return y;},hexagon:function(){return f;},hv:function(){return x;},hvh:function(){return w;},hyphen:function(){return v;},line:function(){return h;},plus:function(){return g;},point:function(){return o;},smooth:function(){return b;},square:function(){return s;},tick:function(){return m;},triangle:function(){return u;},triangleDown:function(){return c;},vh:function(){return E;},vhv:function(){return S;}});var a=function(n,r,i){return[["M",n-i,r],["A",i,i,0,1,0,n+i,r],["A",i,i,0,1,0,n-i,r],["Z"]];},o=a,s=function(n,r,i){return[["M",n-i,r-i],["L",n+i,r-i],["L",n+i,r+i],["L",n-i,r+i],["Z"]];},l=function(n,r,i){return[["M",n-i,r],["L",n,r-i],["L",n+i,r],["L",n,r+i],["Z"]];},u=function(n,r,i){var a=i*Math.sin(1/3*Math.PI);return[["M",n-i,r+a],["L",n,r-a],["L",n+i,r+a],["Z"]];},c=function(n,r,i){var a=i*Math.sin(1/3*Math.PI);return[["M",n-i,r-a],["L",n+i,r-a],["L",n,r+a],["Z"]];},f=function(n,r,i){var a=i/2*Math.sqrt(3);return[["M",n,r-i],["L",n+a,r-i/2],["L",n+a,r+i/2],["L",n,r+i],["L",n-a,r+i/2],["L",n-a,r-i/2],["Z"]];},d=function(n,r,i){var a=i-1.5;return[["M",n-i,r-a],["L",n+i,r+a],["L",n+i,r-a],["L",n-i,r+a],["Z"]];},h=function(n,r,i){return[["M",n,r+i],["L",n,r-i]];},p=function(n,r,i){return[["M",n-i,r-i],["L",n+i,r+i],["M",n+i,r-i],["L",n-i,r+i]];},m=function(n,r,i){return[["M",n-i/2,r-i],["L",n+i/2,r-i],["M",n,r-i],["L",n,r+i],["M",n-i/2,r+i],["L",n+i/2,r+i]];},g=function(n,r,i){return[["M",n-i,r],["L",n+i,r],["M",n,r-i],["L",n,r+i]];},v=function(n,r,i){return[["M",n-i,r],["L",n+i,r]];},y=function(n,r,i){return[["M",n-i,r],["L",n+i,r]];},_=y,b=function(n,r,i){return[["M",n-i,r],["A",i/2,i/2,0,1,1,n,r],["A",i/2,i/2,0,1,0,n+i,r]];},x=function(n,r,i){return[["M",n-i-1,r-2.5],["L",n,r-2.5],["L",n,r+2.5],["L",n+i+1,r+2.5]];},E=function(n,r,i){return[["M",n-i-1,r+2.5],["L",n,r+2.5],["L",n,r-2.5],["L",n+i+1,r-2.5]];},w=function(n,r,i){return[["M",n-(i+1),r+2.5],["L",n-i/2,r+2.5],["L",n-i/2,r-2.5],["L",n+i/2,r-2.5],["L",n+i/2,r+2.5],["L",n+i+1,r+2.5]];};function S(n,r){return[["M",n-5,r+2.5],["L",n-5,r],["L",n,r],["L",n,r-3],["L",n,r+3],["L",n+6.5,r+3]];}var T=function(n,r,i){return[["M",n-i,r-i],["L",n+i,r],["L",n-i,r+i],["Z"]];};},"149f2852":function(n,r,i){"use strict";function a(n,r){return n=+n,r=+r,function(i){return Math.round(n*(1-i)+r*i);};}i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});},"1536f4d4":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),r.default=function(n,r){if(!n)return!1;if(n.contains)return n.contains(r);for(var i=r;i;){if(i===n)return!0;i=i.parentNode;}return!1;};},"1552e56f":function(n,r,i){var a=i("74fc3704");n.exports=function(n,r){return n&&n.length&&r&&r.length?a(n,r):n;};},"156120ad":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return d;}});var a=i("777fffbe"),o=a._(i("e4870cf0")),s=a._(i("613f75ca")),l=a._(i("609f48be")),u=a._(i("551ddf56")),c=i("dac8af92"),f=["fieldProps","min","proFieldProps","max"],d=l.default.forwardRef(function(n,r){var i=n.fieldProps,a=n.min,l=n.proFieldProps,d=n.max,h=(0,s.default)(n,f);return(0,c.jsx)(u.default,(0,o.default)({valueType:"digit",fieldProps:(0,o.default)({min:a,max:d},i),ref:r,filedConfig:{defaultProps:{width:"100%"}},proFieldProps:l},h));});},"15fcf050":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return m;}});var a=i("777fffbe"),o=i("852bbaa9"),s=a._(i("e4870cf0")),l=a._(i("613f75ca")),u=o._(i("609f48be")),c=a._(i("2faf3d77")),f=a._(i("551ddf56")),d=i("dac8af92"),h=["fieldProps","proFieldProps"],p="dateTime",m=u.default.forwardRef(function(n,r){var i=n.fieldProps,a=n.proFieldProps,o=(0,l.default)(n,h),m=(0,u.useContext)(c.default);return(0,d.jsx)(f.default,(0,s.default)({ref:r,fieldProps:(0,s.default)({getPopupContainer:m.getPopupContainer},i),valueType:p,proFieldProps:a,filedConfig:{valueType:p,customLightMode:!0}},o));});},"16d095ff":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"Handle",{enumerable:!0,get:function(){return p;}});var a=i("3862611d"),o=i("47a6bde3"),s=i("fc81244b"),l=i("a602d54e"),u=i("b0ea517f"),c=i("a63b8d99"),f=i("e77a4c2e"),d=(0,s.classNames)({labelGroup:"label-group",label:"label",iconGroup:"icon-group",icon:"icon",iconRect:"icon-rect",iconLine:"icon-line"},"handle"),h=function(n){function r(){return null!==n&&n.apply(this,arguments)||this;}return(0,a.__extends)(r,n),r.prototype.render=function(n,r){var i=n.x,o=n.y,s=n.size,l=void 0===s?10:s,c=n.radius,f=n.orientation,h=(0,a.__rest)(n,["x","y","size","radius","orientation"]),p=2.4*l,m=(0,u.select)(r).maybeAppendByClassName(d.iconRect,"rect").styles((0,a.__assign)((0,a.__assign)({},h),{width:l,height:p,radius:void 0===c?l/4:c,x:i-l/2,y:o-p/2,transformOrigin:"center"})),g=i+1/3*l-l/2,v=i+2/3*l-l/2,y=o+1/4*p-p/2,_=o+3/4*p-p/2;m.maybeAppendByClassName("".concat(d.iconLine,"-1"),"line").styles((0,a.__assign)({x1:g,x2:g,y1:y,y2:_},h)),m.maybeAppendByClassName("".concat(d.iconLine,"-2"),"line").styles((0,a.__assign)({x1:v,x2:v,y1:y,y2:_},h)),"vertical"===f&&(m.node().style.transform="rotate(90)");},r;}(o.Component),p=function(n){function r(r){return n.call(this,r,f.HANDLE_DEFAULT_CFG)||this;}return(0,a.__extends)(r,n),r.prototype.renderLabel=function(n){var r=this,i=this.attributes,o=i.x,s=i.y,h=i.showLabel,p=(0,c.subStyleProps)(this.attributes,"label"),m=p.x,g=void 0===m?0:m,v=p.y,y=void 0===v?0:v,_=p.transform,b=p.transformOrigin,x=(0,a.__rest)(p,["x","y","transform","transformOrigin"]),E=(0,a.__read)((0,c.splitStyle)(x,[]),2),w=E[0],S=E[1],T=(0,u.select)(n).maybeAppendByClassName(d.labelGroup,"g").styles(S),A=(0,a.__assign)((0,a.__assign)({},f.HANDLE_LABEL_DEFAULT_CFG),w),C=A.text,O=(0,a.__rest)(A,["text"]);(0,l.ifShow)(!!h,T,function(n){r.label=n.maybeAppendByClassName(d.label,"text").styles((0,a.__assign)((0,a.__assign)({},O),{x:o+g,y:s+y,transform:_,transformOrigin:b,text:"".concat(C)})),r.label.on("mousedown",function(n){n.stopPropagation();}),r.label.on("touchstart",function(n){n.stopPropagation();});});},r.prototype.renderIcon=function(n){var r=this.attributes,i=r.x,o=r.y,s=r.orientation,l=r.type,p=(0,a.__assign)((0,a.__assign)({x:i,y:o,orientation:s},f.HANDLE_ICON_DEFAULT_CFG),(0,c.subStyleProps)(this.attributes,"icon")),m=this.attributes.iconShape,g=void 0===m?function(){return new h({style:p});}:m;(0,u.select)(n).maybeAppendByClassName(d.iconGroup,"g").selectAll(d.icon.class).data([g]).join(function(n){return n.append("string"==typeof g?g:function(){return g(l);}).attr("className",d.icon.name);},function(n){return n.update(p);},function(n){return n.remove();});},r.prototype.render=function(n,r){this.renderIcon(r),this.renderLabel(r);},r;}(o.Component);},"176581f8":function(n,r,i){n.exports=function(n){var r=-1,i=Array(n.size);return n.forEach(function(n){i[++r]=n;}),i;};},"1915def0":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"parseSeriesAttr",{enumerable:!0,get:function(){return l;}});var a=i("777fffbe"),o=a._(i("1f338b89")),s=a._(i("1daaa764"));function l(n){if((0,o.default)(n))return[n,n,n,n];if((0,s.default)(n)){var r=n.length;if(1===r)return[n[0],n[0],n[0],n[0]];if(2===r)return[n[0],n[1],n[0],n[1]];if(3===r)return[n[0],n[1],n[2],n[1]];if(4===r)return n;}return[0,0,0,0];}},"191f48a8":function(n,r,i){var a=i("9cbba6e7");n.exports=function(n){return"function"==typeof n?n:a;};},19503730:function(n,r,i){"use strict";function a(n){return function(r){var i=new o;for(var a in n)i[a]=n[a];return i.stream=r,i;};}function o(){}i.d(r,"__esModule",{value:!0}),i.d(r,"transformer",{enumerable:!0,get:function(){return a;}}),o.prototype={constructor:o,point:function(n,r){this.stream.point(n,r);},sphere:function(){this.stream.sphere();},lineStart:function(){this.stream.lineStart();},lineEnd:function(){this.stream.lineEnd();},polygonStart:function(){this.stream.polygonStart();},polygonEnd:function(){this.stream.polygonEnd();}};},"19d769ab":function(n,r,i){var a,o;a=this,o=function(n){"use strict";function r(n){var r="function"==typeof Symbol&&Symbol.iterator,i=r&&n[r],a=0;if(i)return i.call(n);if(n&&"number"==typeof n.length)return{next:function(){return{value:(n=n&&a>=n.length?void 0:n)&&n[a++],done:!n};}};throw TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.");}function i(n,r){var i="function"==typeof Symbol&&n[Symbol.iterator];if(!i)return n;var a,o,s=i.call(n),l=[];try{for(;(void 0===r||0i=>n(r(i)),n);}function A(n,r){return r-n?i=>(i-n)/(r-n):n=>.5;}N=new g(3),g!=Float32Array&&(N[0]=0,N[1]=0,N[2]=0),N=new g(4),g!=Float32Array&&(N[0]=0,N[1]=0,N[2]=0,N[3]=0);let C=Math.sqrt(50),O=Math.sqrt(10),M=Math.sqrt(2);function R(n,r,i){return n=Math.floor(Math.log(r=(r-n)/Math.max(0,i))/Math.LN10),i=r/10**n,0<=n?(i>=C?10:i>=O?5:i>=M?2:1)*10**n:-(10**-n)/(i>=C?10:i>=O?5:i>=M?2:1);}let P=(n,r,i=5)=>{let a=0,o=(n=[n,r]).length-1,s=n[a],l=n[o],u;return l{i.prototype.rescale=function(){this.initRange(),this.nice();var[n]=this.chooseTransforms();this.composeOutput(n,this.chooseClamp(n));},i.prototype.initRange=function(){var r=this.options.interpolator;this.options.range=n(r);},i.prototype.composeOutput=function(n,i){var{domain:a,interpolator:o,round:s}=this.getOptions(),a=r(a.map(n)),s=s?n=>u(n=o(n),"Number")?Math.round(n):n:o;this.output=T(s,a,i,n);},i.prototype.invert=void 0;};}var L,N={exports:{}},D={exports:{}},F=Array.prototype.concat,B=Array.prototype.slice,j=D.exports=function(n){for(var r=[],i=0,a=n.length;ii=>n*(1-i)+r*i,K=(n,r)=>{if("number"==typeof n&&"number"==typeof r)return Z(n,r);if("string"!=typeof n||"string"!=typeof r)return()=>n;{let i=Y(n),a=Y(r);return null===i||null===a?i?()=>n:()=>r:n=>{var r=[,,,,];for(let l=0;l<4;l+=1){var o=i[l],s=a[l];r[l]=o*(1-n)+s*n;}var[l,u,c,f]=r;return`rgba(${Math.round(l)}, ${Math.round(u)}, ${Math.round(c)}, ${f})`;};}},Q=(n,r)=>{let i=Z(n,r);return n=>Math.round(i(n));};function J({map:n,initKey:r},i){return r=r(i),n.has(r)?n.get(r):i;}function ee(n){return"object"==typeof n?n.valueOf():n;}class et extends Map{constructor(n){if(super(),this.map=new Map,this.initKey=ee,null!==n)for(var[r,i]of n)this.set(r,i);}get(n){return super.get(J({map:this.map,initKey:this.initKey},n));}has(n){return super.has(J({map:this.map,initKey:this.initKey},n));}set(n,r){var i,a;return super.set(([{map:n,initKey:i},a]=[{map:this.map,initKey:this.initKey},n],i=i(a),n.has(i)?n.get(i):(n.set(i,a),a)),r);}delete(n){var r,i;return super.delete(([{map:n,initKey:r},i]=[{map:this.map,initKey:this.initKey},n],r=r(i),n.has(r)&&(i=n.get(r),n.delete(r)),i));}}class en{constructor(n){this.options=h({},this.getDefaultOptions()),this.update(n);}getOptions(){return this.options;}update(n={}){this.options=h({},this.options,n),this.rescale(n);}rescale(n){}}let er=Symbol("defaultUnknown");function ei(n,r,i){for(let a=0;a""+n:"object"==typeof n?n=>JSON.stringify(n):n=>n;}class es extends en{getDefaultOptions(){return{domain:[],range:[],unknown:er};}constructor(n){super(n);}map(n){return 0===this.domainIndexMap.size&&ei(this.domainIndexMap,this.getDomain(),this.domainKey),ea({value:this.domainKey(n),mapper:this.domainIndexMap,from:this.getDomain(),to:this.getRange(),notFoundReturn:this.options.unknown});}invert(n){return 0===this.rangeIndexMap.size&&ei(this.rangeIndexMap,this.getRange(),this.rangeKey),ea({value:this.rangeKey(n),mapper:this.rangeIndexMap,from:this.getRange(),to:this.getDomain(),notFoundReturn:this.options.unknown});}rescale(n){var[r]=this.options.domain,[i]=this.options.range;this.domainKey=eo(r),this.rangeKey=eo(i),this.rangeIndexMap?(n&&!n.range||this.rangeIndexMap.clear(),(!n||n.domain||n.compare)&&(this.domainIndexMap.clear(),this.sortedDomain=void 0)):(this.rangeIndexMap=new Map,this.domainIndexMap=new Map);}clone(){return new es(this.options);}getRange(){return this.options.range;}getDomain(){var n,r;return this.sortedDomain||({domain:n,compare:r}=this.options,this.sortedDomain=r?[...n].sort(r):n),this.sortedDomain;}}class el extends es{getDefaultOptions(){return{domain:[],range:[0,1],align:.5,round:!1,paddingInner:0,paddingOuter:0,padding:0,unknown:er,flex:[]};}constructor(n){super(n);}clone(){return new el(this.options);}getStep(n){return void 0===this.valueStep?1:"number"==typeof this.valueStep?this.valueStep:void 0===n?Array.from(this.valueStep.values())[0]:this.valueStep.get(n);}getBandWidth(n){return void 0===this.valueBandWidth?1:"number"==typeof this.valueBandWidth?this.valueBandWidth:void 0===n?Array.from(this.valueBandWidth.values())[0]:this.valueBandWidth.get(n);}getRange(){return this.adjustedRange;}getPaddingInner(){var{padding:n,paddingInner:r}=this.options;return 0n/r);}(f),g=h/m.reduce((n,r)=>n+r);var f=new et(r.map((n,r)=>(r=m[r]*g,[n,l?Math.floor(r):r]))),v=new et(r.map((n,r)=>(r=m[r]*g+p,[n,l?Math.floor(r):r]))),h=Array.from(v.values()).reduce((n,r)=>n+r),n=n+(d-(h-h/c*o))*u;let y=l?Math.round(n):n;var _=Array(c);for(let n=0;nc+r*l),{valueStep:l,valueBandWidth:u,adjustedRange:n};}({align:n,range:i,round:a,flex:o,paddingInner:this.getPaddingInner(),paddingOuter:this.getPaddingOuter(),domain:r});this.valueStep=a,this.valueBandWidth=i,this.adjustedRange=n;}}let eu=(n,r,i)=>{let a,o,s=n,l=r;if(s===l&&0{let a;var[n,o]=n,[r,s]=r;return T(n{let a=Math.min(n.length,r.length)-1,o=Array(a),s=Array(a);var l=n[0]>n[a],u=l?[...n].reverse():n,c=l?[...r].reverse():r;for(let n=0;n{var i=function(n,r,i,a,o){let s=1,l=a||n.length;for(var u=n=>n;sr?l=c:s=c+1;}return s;}(n,r,0,a)-1,l=o[i];return T(s[i],l)(r);};},ed=(n,r,i,a)=>(2Math.min(Math.max(a,n),o);}return p;}composeOutput(n,r){var{domain:i,range:a,round:o,interpolate:s}=this.options,i=ed(i.map(n),a,s,o);this.output=T(i,r,n);}composeInput(n,r,i){var{domain:a,range:o}=this.options,o=ed(o,a.map(n),Z);this.input=T(r,i,o);}}class ep extends eh{getDefaultOptions(){return{domain:[0,1],range:[0,1],unknown:void 0,nice:!1,clamp:!1,round:!1,interpolate:K,tickMethod:eu,tickCount:5};}chooseTransforms(){return[p,p];}clone(){return new ep(this.options);}}class em extends el{getDefaultOptions(){return{domain:[],range:[0,1],align:.5,round:!1,padding:0,unknown:er,paddingInner:1,paddingOuter:0};}constructor(n){super(n);}getPaddingInner(){return 1;}clone(){return new em(this.options);}update(n){super.update(n);}getPaddingOuter(){return this.options.padding;}}function eg(n,r){for(var i=[],a=0,o=n.length;a{var[n,r]=n;return T(Z(0,1),A(n,r));})],e_);let eb=s=class extends ep{getDefaultOptions(){return{domain:[0,.5,1],unknown:void 0,nice:!1,clamp:!1,round:!1,interpolator:p,tickMethod:eu,tickCount:5};}constructor(n){super(n);}clone(){return new s(this.options);}};function ex(n,r,a,o,s){var l=new ep({range:[r,r+o]}),u=new ep({range:[a,a+s]});return{transform:function(n){var n=i(n,2),r=n[0],n=n[1];return[l.map(r),u.map(n)];},untransform:function(n){var n=i(n,2),r=n[0],n=n[1];return[l.invert(r),u.invert(n)];}};}function eE(n,r,a,o,s){return(0,i(n,1)[0])(r,a,o,s);}function ew(n,r,a,o,s){return i(n,1)[0];}function eS(n,r,a,o,s){var l=(n=i(n,4))[0],u=n[1],c=n[2],n=n[3],f=new ep({range:[c,n]}),d=new ep({range:[l,u]}),h=1<(c=s/o)?1:c,p=1{let[r,i,a]=n,o=T(Z(0,.5),A(r,i)),s=T(Z(.5,1),A(i,a));return n=>(r>a?n=r&&(i=a=r):(i>r&&(i=r),a=s&&(i=a=s):(i>s&&(i=s),a 0.01\n float blurWidth = (1.0 - v_blur)/2.0;\n vec4 stroke = vec4(u_stroke_color.rgb, u_stroke_opacity);\n if(fragmengTocenter > v_innerRadius + blurWidth) {\n outputColor = stroke;\n } else if(fragmengTocenter > v_innerRadius - blurWidth){\n float mixR = (fragmengTocenter - (v_innerRadius - blurWidth)) / (blurWidth * 2.0);\n outputColor = mix(v_color, stroke, mixR);\n } else {\n outputColor = v_color;\n }\n } else {\n // \u5F53\u4E0D\u5B58\u5728 stroke \u6216 stroke <= 0.01\n outputColor = v_color;\n }\n\n outputColor = filterColor(outputColor);\n \n if(u_additive > 0.0) {\n outputColor *= circleClipOpacity;\n } else {\n outputColor.a *= circleClipOpacity;\n }\n\n}\n',defines:n.getDefines(),inject:n.getInject(),triangulation:v,depth:{enable:!1},primitive:h.gl.POINTS}))];})();}registerBuiltinAttributes(){this.registerPosition64LowAttribute(),this.styleAttributeService.registerStyleAttribute({name:"size",type:h.AttributeType.Attribute,descriptor:{name:"a_Size",shaderLocation:this.attributeLocation.SIZE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:1,update:n=>{let{size:r=1}=n;return Array.isArray(r)?[r[0]]:[r];}}});}}var _=i("8970bd89"),b=i("9400daad");let{isNumber:x}=g.lodashUtil;class E extends m.default{constructor(...n){super(...n),(0,c.default)(this,"raiseCount",0),(0,c.default)(this,"raiseRepeat",0);}get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,SIZE:9,POS:10,NORMAL:11});}getCommonUniformsInfo(){let{animateOption:n={enable:!1,speed:.01,repeat:!1},opacity:r=1,sourceColor:i,targetColor:a,pickLight:o=!1,heightfixed:s=!0,opacityLinear:l={enable:!1,dir:"up"},lightEnable:u=!0}=this.layer.getLayerConfig(),c=0,f=[0,0,0,0],d=[0,0,0,0];if(i&&a&&(f=(0,g.rgb2arr)(i),d=(0,g.rgb2arr)(a),c=1),this.raiseCount<1&&this.raiseRepeat>0&&n.enable){let{speed:r=.01}=n;this.raiseCount+=r,this.raiseCount>=1&&(this.raiseRepeat>1?(this.raiseCount=0,this.raiseRepeat--):this.raiseCount=1);}let h={u_sourceColor:f,u_targetColor:d,u_linearColor:c,u_pickLight:Number(o),u_heightfixed:Number(s),u_r:n.enable&&this.raiseRepeat>0?this.raiseCount:1,u_opacity:x(r)?r:1,u_opacitylinear:Number(l.enable),u_opacitylinear_dir:"up"===l.dir?1:0,u_lightEnable:Number(u)};return this.getUniformsBufferInfo(h);}initModels(){var n=this;return(0,l.default)(function*(){return n.initUniformsBuffer(),n.buildModels();})();}buildModels(){var n=this;return(0,l.default)(function*(){let{animateOption:{repeat:r=1}}=n.layer.getLayerConfig();return n.raiseRepeat=r,[(yield n.layer.buildLayerModel({moduleName:"pointEarthExtrude",vertexShader:'precision highp float;\n\n#define pi 3.1415926535\n#define ambientRatio 0.5\n#define diffuseRatio 0.3\n#define specularRatio 0.2\n\nlayout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in vec3 a_Size;\nlayout(location = ATTRIBUTE_LOCATION_POS) in vec3 a_Pos;\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\n\nlayout(std140) uniform commonUniform {\n vec4 u_sourceColor;\n vec4 u_targetColor;\n float u_linearColor: 0;\n float u_heightfixed: 0.0; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\n float u_globel;\n float u_r;\n float u_pickLight: 0.0;\n float u_opacitylinear: 0.0;\n float u_opacitylinear_dir: 1.0;\n float u_lightEnable: 1.0;\n};\n\nout vec4 v_color;\nout float v_lightWeight;\nout float v_barLinearZ;\n// \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\n\n#pragma include "projection"\n#pragma include "light"\n#pragma include "picking"\n\nfloat getYRadian(float x, float z) {\n if(x > 0.0 && z > 0.0) {\n return atan(x/z);\n } else if(x > 0.0 && z <= 0.0){\n return atan(-z/x) + pi/2.0;\n } else if(x <= 0.0 && z <= 0.0) {\n return pi + atan(x/z); //atan(x/z) +\n } else {\n return atan(z/-x) + pi*3.0/2.0;\n }\n}\n\nfloat getXRadian(float y, float r) {\n return atan(y/r);\n}\n\nvoid main() {\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n vec3 size = a_Size * a_Position;\n\n // a_Position.z \u662F\u5728\u6784\u5EFA\u7F51\u683C\u7684\u65F6\u5019\u4F20\u5165\u7684\u6807\u51C6\u503C 0 - 1\uFF0C\u5728\u63D2\u503C\u5668\u63D2\u503C\u53EF\u4EE5\u83B7\u53D6 0\uFF5E1 \u7EBF\u6027\u6E10\u53D8\u7684\u503C\n v_barLinearZ = a_Position.z;\n\n vec3 offset = size; // \u63A7\u5236\u5706\u67F1\u4F53\u7684\u5927\u5C0F - \u4ECE\u6807\u51C6\u5355\u4F4D\u5706\u67F1\u4F53\u8FDB\u884C\u504F\u79FB\n if(u_heightfixed < 1.0) { // \u5706\u67F1\u4F53\u4E0D\u56FA\u5B9A\u9AD8\u5EA6\n //\n } else {// \u5706\u67F1\u4F53\u56FA\u5B9A\u9AD8\u5EA6 \uFF08 \u5904\u7406 mapbox \uFF09\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n offset *= 4.0/pow(2.0, 21.0 - u_Zoom);\n }\n }\n\n\n vec4 project_pos = project_position(vec4(a_Pos.xy, 0., 1.0));\n\n // u_r \u63A7\u5236\u5706\u67F1\u7684\u751F\u957F\n vec4 pos = vec4(project_pos.xy + offset.xy, offset.z * u_r, 1.0);\n\n // \u5706\u67F1\u5149\u7167\u6548\u679C\n float lightWeight = 1.0;\n if(u_lightEnable > 0.0) { // \u53D6\u6D88\u4E09\u5143\u8868\u8FBE\u5F0F\uFF0C\u589E\u5F3A\u5065\u58EE\u6027\n lightWeight = calc_lighting(pos);\n }\n v_lightWeight = lightWeight;\n // \u8BBE\u7F6E\u5706\u67F1\u7684\u5E95\u8272\n if(u_linearColor == 1.0) { // \u4F7F\u7528\u6E10\u53D8\u989C\u8272\n v_color = mix(u_sourceColor, u_targetColor, v_barLinearZ);\n v_color.rgb *= lightWeight;\n } else { // \u4F7F\u7528 color \u65B9\u6CD5\u4F20\u5165\u7684\u989C\u8272\n v_color = a_Color;\n }\n v_color.a *= u_opacity;\n\n\n // \u5728\u5730\u7403\u6A21\u5F0F\u4E0B\uFF0C\u5C06\u539F\u672C\u5782\u76F4\u4E8E xy \u5E73\u9762\u7684\u5706\u67F1\u8C03\u6574\u59FF\u6001\u5230\u9002\u5E94\u5706\u7684\u89D2\u5EA6\n //\u65CB\u8F6C\u77E9\u9635mx\uFF0C\u521B\u5EFA\u7ED5x\u8F74\u65CB\u8F6C\u77E9\u9635\n float r = sqrt(a_Pos.z*a_Pos.z + a_Pos.x*a_Pos.x);\n float xRadian = getXRadian(a_Pos.y, r);\n float xcos = cos(xRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u4F59\u5F26\u503C\n float xsin = sin(xRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u6B63\u5F26\u503C\n mat4 mx = mat4(\n 1,0,0,0,\n 0,xcos,-xsin,0,\n 0,xsin,xcos,0,\n 0,0,0,1);\n\n //\u65CB\u8F6C\u77E9\u9635my\uFF0C\u521B\u5EFA\u7ED5y\u8F74\u65CB\u8F6C\u77E9\u9635\n float yRadian = getYRadian(a_Pos.x, a_Pos.z);\n float ycos = cos(yRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u4F59\u5F26\u503C\n float ysin = sin(yRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u6B63\u5F26\u503C\n mat4 my = mat4(\n ycos,0,-ysin,0,\n 0,1,0,0,\n ysin,0,ycos,0,\n 0,0,0,1);\n\n gl_Position = u_ViewProjectionMatrix * vec4(( my * mx * vec4(a_Position * a_Size, 1.0)).xyz + a_Pos, 1.0);\n\n\n setPickingColor(a_PickingColor);\n}\n',fragmentShader:'precision highp float;\nin vec4 v_color;\n\n#pragma include "picking"\n\nlayout(std140) uniform commonUniform {\n vec4 u_sourceColor;\n vec4 u_targetColor;\n float u_linearColor: 0;\n float u_heightfixed: 0.0; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\n float u_globel;\n float u_r;\n float u_pickLight: 0.0;\n float u_opacitylinear: 0.0;\n float u_opacitylinear_dir: 1.0;\n float u_lightEnable: 1.0;\n};\nin float v_lightWeight;\nin float v_barLinearZ;\nout vec4 outputColor;\nvoid main() {\n\n outputColor = v_color;\n\n // \u5F00\u542F\u900F\u660E\u5EA6\u6E10\u53D8\n if(u_opacitylinear > 0.0) {\n outputColor.a *= u_opacitylinear_dir > 0.0 ? (1.0 - v_barLinearZ): v_barLinearZ;\n }\n\n // picking\n if(u_pickLight > 0.0) {\n outputColor = filterColorAlpha(outputColor, v_lightWeight);\n } else {\n outputColor = filterColor(outputColor);\n }\n}\n',triangulation:_.PointExtrudeTriangulation,depth:{enable:!0},defines:n.getDefines(),inject:n.getInject(),cull:{enable:!0,face:h.gl.FRONT},blend:n.getBlend()}))];})();}registerBuiltinAttributes(){this.styleAttributeService.registerStyleAttribute({name:"size",type:h.AttributeType.Attribute,descriptor:{name:"a_Size",shaderLocation:this.attributeLocation.SIZE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:3,update:n=>{let{size:r}=n;if(!r)return[2,2,2];{let n=[];return Array.isArray(r)&&(n=2===r.length?[r[0],r[0],r[1]]:r),Array.isArray(r)||(n=[r,r,r]),n;}}}}),this.styleAttributeService.registerStyleAttribute({name:"normal",type:h.AttributeType.Attribute,descriptor:{name:"a_Normal",shaderLocation:this.attributeLocation.NORMAL,buffer:{usage:h.gl.STATIC_DRAW,data:[],type:h.gl.FLOAT},size:3,update:(n,r,i,a,o)=>o}}),this.styleAttributeService.registerStyleAttribute({name:"pos",type:h.AttributeType.Attribute,descriptor:{name:"a_Pos",shaderLocation:this.attributeLocation.POS,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:3,update:n=>{let r=(0,g.calculateCentroid)(n.coordinates);return(0,b.lglt2xyz)([r[0],r[1]]);}}});}}var w=i("da755037"),S=o._(w),T=i("377bcc16"),A=o._(T);class C extends m.default{get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,SIZE:9,SHAPE:10,EXTRUDE:11});}getCommonUniformsInfo(){let{strokeOpacity:n=1,strokeWidth:r=0,blend:i,blur:a=0}=this.layer.getLayerConfig();return this.layer.getLayerConfig(),this.getUniformsBufferInfo({u_additive:"additive"===i?1:0,u_stroke_opacity:n,u_stroke_width:r,u_blur:a});}initModels(){var n=this;return(0,l.default)(function*(){return n.initUniformsBuffer(),n.buildModels();})();}buildModels(){var n=this;return(0,l.default)(function*(){return n.layer.triangulation=_.GlobelPointFillTriangulation,[(yield n.layer.buildLayerModel({moduleName:"pointEarthFill",vertexShader:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\nlayout(location = ATTRIBUTE_LOCATION_SHAPE) in float a_Shape;\nlayout(location = ATTRIBUTE_LOCATION_EXTRUDE) in vec3 a_Extrude;\n\nlayout(std140) uniform commonUniform {\n float u_additive;\n float u_stroke_opacity : 1;\n float u_stroke_width : 2;\n float u_blur : 0.0;\n};\nout vec4 v_data;\nout vec4 v_color;\nout float v_radius;\n\n#pragma include "projection"\n#pragma include "picking"\n\n\nvoid main() {\n vec3 extrude = a_Extrude;\n float shape_type = a_Shape;\n /*\n * setPickingSize \u8BBE\u7F6E\u62FE\u53D6\u5927\u5C0F\n */\n float newSize = setPickingSize(a_Size);\n // float newSize = setPickingSize(a_Size) * 0.00001038445708445579;\n\n // unpack color(vec2)\n v_color = a_Color;\n\n // radius(16-bit)\n v_radius = newSize;\n\n // anti-alias\n // float antialiased_blur = -max(u_blur, antialiasblur);\n float antialiasblur = -max(2.0 / u_DevicePixelRatio / newSize, u_blur);\n\n // TODP: /abs(extrude.x) \u662F\u4E3A\u4E86\u517C\u5BB9\u5730\u7403\u6A21\u5F0F\n v_data = vec4(extrude.x/abs(extrude.x), extrude.y/abs(extrude.y), antialiasblur,shape_type);\n\n gl_Position = u_ViewProjectionMatrix * vec4(a_Position + extrude * newSize * 0.1 + vec3(u_offsets,0.0), 1.0);\n\n setPickingColor(a_PickingColor);\n}\n',fragmentShader:"in vec4 v_data;\nin vec4 v_color;\nin float v_radius;\n\nlayout(std140) uniform commonUniform {\n float u_additive;\n float u_stroke_opacity : 1;\n float u_stroke_width : 2;\n float u_blur : 0.0;\n};\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\n\nout vec4 outputColor;\n\nvoid main() {\n int shape = int(floor(v_data.w + 0.5));\n\n vec4 strokeColor = u_stroke == vec4(0.0) ? v_color : u_stroke;\n\n lowp float antialiasblur = v_data.z;\n float r = v_radius / (v_radius + u_stroke_width);\n\n float outer_df;\n float inner_df;\n // 'circle', 'triangle', 'square', 'pentagon', 'hexagon', 'octogon', 'hexagram', 'rhombus', 'vesica'\n if (shape == 0) {\n outer_df = sdCircle(v_data.xy, 1.0);\n inner_df = sdCircle(v_data.xy, r);\n } else if (shape == 1) {\n outer_df = sdEquilateralTriangle(1.1 * v_data.xy);\n inner_df = sdEquilateralTriangle(1.1 / r * v_data.xy);\n } else if (shape == 2) {\n outer_df = sdBox(v_data.xy, vec2(1.));\n inner_df = sdBox(v_data.xy, vec2(r));\n } else if (shape == 3) {\n outer_df = sdPentagon(v_data.xy, 0.8);\n inner_df = sdPentagon(v_data.xy, r * 0.8);\n } else if (shape == 4) {\n outer_df = sdHexagon(v_data.xy, 0.8);\n inner_df = sdHexagon(v_data.xy, r * 0.8);\n } else if (shape == 5) {\n outer_df = sdOctogon(v_data.xy, 1.0);\n inner_df = sdOctogon(v_data.xy, r);\n } else if (shape == 6) {\n outer_df = sdHexagram(v_data.xy, 0.52);\n inner_df = sdHexagram(v_data.xy, r * 0.52);\n } else if (shape == 7) {\n outer_df = sdRhombus(v_data.xy, vec2(1.0));\n inner_df = sdRhombus(v_data.xy, vec2(r));\n } else if (shape == 8) {\n outer_df = sdVesica(v_data.xy, 1.1, 0.8);\n inner_df = sdVesica(v_data.xy, r * 1.1, r * 0.8);\n }\n\n if(outer_df > antialiasblur + 0.018) discard;\n\n float opacity_t = smoothstep(0.0, antialiasblur, outer_df);\n\n float color_t = u_stroke_width < 0.01 ? 0.0 : smoothstep(\n antialiasblur,\n 0.0,\n inner_df\n );\n\n if(u_stroke_width < 0.01) {\n outputColor = vec4(v_color.rgb, v_color.a * u_opacity);\n } else {\n outputColor = mix(vec4(v_color.rgb, v_color.a * u_opacity), strokeColor * u_stroke_opacity, color_t);\n }\n\n if(u_additive > 0.0) {\n outputColor *= opacity_t;\n outputColor = filterColorAlpha(outputColor, outputColor.a);\n } else {\n outputColor.a *= opacity_t;\n outputColor = filterColor(outputColor);\n }\n}\n",triangulation:_.GlobelPointFillTriangulation,defines:n.getDefines(),inject:n.getInject(),depth:{enable:!0},blend:n.getBlend()}))];})();}animateOption2Array(n){return[n.enable?0:1,n.speed||1,n.rings||3,0];}registerBuiltinAttributes(){this.styleAttributeService.registerStyleAttribute({name:"extrude",type:h.AttributeType.Attribute,descriptor:{name:"a_Extrude",shaderLocation:this.attributeLocation.EXTRUDE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:3,update:(n,r,i,a)=>{let[o,s,l]=i,u=A.fromValues(0,0,1),c=A.fromValues(o,0,l),f=o>=0?A.angle(u,c):2*Math.PI-A.angle(u,c),d=2*Math.PI-Math.asin(s/100),h=S.create();S.rotateY(h,h,f),S.rotateX(h,h,d);let p=A.fromValues(1,1,0);A.transformMat4(p,p,h),A.normalize(p,p);let m=A.fromValues(-1,1,0);A.transformMat4(m,m,h),A.normalize(m,m);let g=A.fromValues(-1,-1,0);A.transformMat4(g,g,h),A.normalize(g,g);let v=A.fromValues(1,-1,0);A.transformMat4(v,v,h),A.normalize(v,v);let y=[...p,...m,...g,...v],_=a%4*3;return[y[_],y[_+1],y[_+2]];}}}),this.styleAttributeService.registerStyleAttribute({name:"size",type:h.AttributeType.Attribute,descriptor:{name:"a_Size",shaderLocation:this.attributeLocation.SIZE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:1,update:n=>{let{size:r=5}=n;return Array.isArray(r)?[r[0]]:[r];}}}),this.styleAttributeService.registerStyleAttribute({name:"shape",type:h.AttributeType.Attribute,descriptor:{name:"a_Shape",shaderLocation:this.attributeLocation.SHAPE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:1,update:n=>{let{shape:r=2}=n;return[this.layer.getLayerConfig().shape2d.indexOf(r)];}}});}}var O=i("991309e4"),M=a._(O),R=i("c0d77826"),P=a._(R),k=i("07cf43fc");class I extends m.default{constructor(...n){super(...n),(0,c.default)(this,"meter2coord",1),(0,c.default)(this,"texture",void 0),(0,c.default)(this,"isMeter",!1),(0,c.default)(this,"radian",0),(0,c.default)(this,"updateTexture",()=>{let{createTexture2D:n}=this.rendererService;if(this.texture){this.texture.update({data:this.iconService.getCanvas(),mag:"linear",min:"linear mipmap nearest",mipmap:!0}),this.layerService.throttleRenderLayers();return;}this.texture=n({data:this.iconService.getCanvas(),mag:h.gl.LINEAR,min:h.gl.LINEAR_MIPMAP_LINEAR,premultiplyAlpha:!1,width:1024,height:this.iconService.canvasHeight||128,mipmap:!0}),this.textures=[this.texture];});}get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,SIZE:9,EXTRUDE:10,UV:11});}getCommonUniformsInfo(){let{raisingHeight:n=0,heightfixed:r=!1,unit:i="pixel"}=this.layer.getLayerConfig();if(this.rendererService.getDirty()){var a;null===(a=this.texture)||void 0===a||a.bind();}let o={u_textSize:[1024,this.iconService.canvasHeight||128],u_heightfixed:Number(r),u_raisingHeight:Number(n),u_size_unit:k.SizeUnitType[i]};return this.getUniformsBufferInfo(o);}getAttribute(){return this.styleAttributeService.createAttributesAndIndices(this.layer.getEncodedData(),_.PointFillTriangulation);}initModels(){var n=this;return(0,l.default)(function*(){return n.iconService.on("imageUpdate",n.updateTexture),n.updateTexture(),n.buildModels();})();}buildModels(){var n=this;return(0,l.default)(function*(){return n.initUniformsBuffer(),[(yield n.layer.buildLayerModel({moduleName:"pointFillImage",vertexShader:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\nlayout(location = ATTRIBUTE_LOCATION_EXTRUDE) in vec3 a_Extrude;\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_Uv;\n\nlayout(std140) uniform commonUniform {\n vec2 u_textSize;\n float u_heightfixed;\n float u_raisingHeight;\n float u_size_unit;\n};\n\nout vec2 v_uv;\nout vec2 v_Iconuv;\nout float v_opacity;\n\n#pragma include "projection"\n#pragma include "picking"\n#pragma include "rotation_2d"\n\nvoid main() {\n vec3 extrude = a_Extrude;\n v_uv = (a_Extrude.xy + 1.0) / 2.0;\n v_uv.y = 1.0 - v_uv.y;\n v_Iconuv = a_Uv;\n v_opacity = opacity;\n float newSize = a_Size;\n if (u_size_unit == 1.0) {\n newSize = newSize * u_PixelsPerMeter.z;\n }\n\n // vec2 offset = (u_RotateMatrix * extrude.xy * (a_Size) + textrueOffsets);\n vec2 offset = extrude.xy * newSize + offsets;\n\n offset = rotate_matrix(offset, rotation);\n\n offset = project_pixel(offset);\n\n vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0), a_Position64Low);\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n',fragmentShader:'in vec2 v_uv;// \u672C\u8EAB\u7684 uv \u5750\u6807\nin vec2 v_Iconuv;\nin float v_opacity;\nout vec4 outputColor;\n\nuniform sampler2D u_texture;\nlayout(std140) uniform commonUniform {\n vec2 u_textSize;\n float u_heightfixed: 0.0;\n float u_raisingHeight: 0.0;\n float u_size_unit;\n};\n\n#pragma include "scene_uniforms"\n#pragma include "sdf_2d"\n#pragma include "picking"\n\nvoid main() {\n vec2 pos = v_Iconuv / u_textSize + v_uv / u_textSize * 64.;\n outputColor = texture(SAMPLER_2D(u_texture), pos);\n outputColor.a *= v_opacity;\n outputColor = filterColor(outputColor);\n}\n',triangulation:_.PointFillTriangulation,depth:{enable:!1},defines:n.getDefines(),inject:n.getInject(),cull:{enable:!0,face:h.gl.FRONT}}))];})();}clearModels(){var n;this.iconService.off("imageUpdate",this.updateTexture),null===(n=this.texture)||void 0===n||n.destroy();}registerBuiltinAttributes(){this.registerPosition64LowAttribute(),this.styleAttributeService.registerStyleAttribute({name:"uv",type:h.AttributeType.Attribute,descriptor:{name:"a_Uv",shaderLocation:this.attributeLocation.UV,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:2,update:n=>{let r=this.iconService.getIconMap(),{shape:i}=n,{x:a,y:o}=r[i]||{x:-64,y:-64};return[a,o];}}}),this.styleAttributeService.registerStyleAttribute({name:"extrude",type:h.AttributeType.Attribute,descriptor:{name:"a_Extrude",shaderLocation:this.attributeLocation.EXTRUDE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:3,update:(n,r,i,a)=>{let o=[1,1,0,-1,1,0,-1,-1,0,1,-1,0],s=a%4*3;return[o[s],o[s+1],o[s+2]];}}}),this.styleAttributeService.registerStyleAttribute({name:"size",type:h.AttributeType.Attribute,descriptor:{name:"a_Size",shaderLocation:this.attributeLocation.SIZE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:1,update:n=>{let{size:r=5}=n;return Array.isArray(r)?[r[0]]:[r];}}});}}var L=i("001de73b"),N=a._(L),D=i("9063dcee"),F=a._(D);class B extends m.default{get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,SIZE:9,EXTRUDE:10});}getCommonUniformsInfo(){let{blend:n,speed:r=1,unit:i="pixel"}=this.layer.getLayerConfig(),a={u_additive:"additive"===n?1:0,u_size_unit:k.SizeUnitType[i],u_speed:r,u_time:this.layer.getLayerAnimateTime()};return this.getUniformsBufferInfo(a);}getAnimateUniforms(){return{};}getAttribute(){return this.styleAttributeService.createAttributesAndIndices(this.layer.getEncodedData(),_.PointFillTriangulation);}initModels(){var n=this;return(0,l.default)(function*(){return n.buildModels();})();}buildModels(){var n=this;return(0,l.default)(function*(){return n.initUniformsBuffer(),[(yield n.layer.buildLayerModel({moduleName:"pointRadar",vertexShader:'layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\nlayout(location = ATTRIBUTE_LOCATION_EXTRUDE) in vec3 a_Extrude;\n\nlayout(std140) uniform commonUniorm {\n float u_additive;\n float u_size_unit;\n float u_speed: 1.0;\n float u_time;\n};\n\nout vec4 v_data;\nout vec4 v_color;\nout float v_radius;\nout vec2 v_extrude;\n\n#pragma include "projection"\n#pragma include "picking"\n\nvoid main() {\n float newSize = setPickingSize(a_Size);\n\n float time = u_time * u_speed;\n mat2 rotateMatrix = mat2(\n cos(time), sin(time),\n -sin(time), cos(time)\n );\n v_extrude = rotateMatrix * a_Extrude.xy;\n\n v_color = a_Color;\n v_color.a *= opacity;\n\n float blur = 0.0;\n float antialiasblur = -max(2.0 / u_DevicePixelRatio / a_Size, blur);\n\n if(u_size_unit == 1.) {\n newSize = newSize * u_PixelsPerMeter.z;\n }\n v_radius = newSize;\n\n vec2 offset = (a_Extrude.xy * (newSize));\n\n offset = project_pixel(offset);\n\n v_data = vec4(a_Extrude.x, a_Extrude.y, antialiasblur, -1.0);\n\n vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0), a_Position64Low);\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n\n setPickingColor(a_PickingColor);\n}\n',fragmentShader:'\nlayout(std140) uniform commonUniorm{\n float u_additive;\n float u_size_unit;\n float u_speed: 1.0;\n float u_time;\n};\nin vec4 v_data;\nin vec4 v_color;\nin float v_radius;\nin vec2 v_extrude;\n#pragma include "sdf_2d"\n#pragma include "picking"\n\nout vec4 outputColor;\n\nvoid main() {\n\n lowp float antialiasblur = v_data.z;\n float r = v_radius / (v_radius);\n\n float outer_df = sdCircle(v_data.xy, 1.0);\n float inner_df = sdCircle(v_data.xy, r);\n\n float opacity_t = smoothstep(0.0, antialiasblur, outer_df);\n\n outputColor = vec4(v_color.rgb, v_color.a);\n\n if(u_additive > 0.0) {\n outputColor *= opacity_t;\n } else {\n outputColor.a *= opacity_t;\n }\n\n if(outputColor.a > 0.0) {\n outputColor = filterColor(outputColor);\n }\n\n vec2 extrude = v_extrude;\n vec2 dir = normalize(extrude);\n vec2 baseDir = vec2(1.0, 0.0);\n float pi = 3.14159265359;\n float flag = sign(dir.y);\n float rades = dot(dir, baseDir);\n float radar_v = (flag - 1.0) * -0.5 * acos(rades)/pi;\n // simple AA\n if(radar_v > 0.99) {\n radar_v = 1.0 - (radar_v - 0.99)/0.01;\n }\n\n outputColor.a *= radar_v;\n}\n',triangulation:_.PointFillTriangulation,defines:n.getDefines(),inject:n.getInject(),depth:{enable:!1}}))];})();}animateOption2Array(n){return[n.enable?0:1,n.speed||1,n.rings||3,0];}registerBuiltinAttributes(){this.registerPosition64LowAttribute(),this.styleAttributeService.registerStyleAttribute({name:"extrude",type:h.AttributeType.Attribute,descriptor:{name:"a_Extrude",shaderLocation:this.attributeLocation.EXTRUDE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:3,update:(n,r,i,a)=>{let o=[1,1,0,-1,1,0,-1,-1,0,1,-1,0],s=a%4*3;return[o[s],o[s+1],o[s+2]];}}}),this.styleAttributeService.registerStyleAttribute({name:"size",type:h.AttributeType.Attribute,descriptor:{shaderLocation:this.attributeLocation.SIZE,name:"a_Size",buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:1,update:n=>{let{size:r=5}=n;return Array.isArray(r)?[r[0]]:[r];}}});}}var j=i("21da3e32"),z=a._(j);let U={fillImage:I,fill:P.default,radar:B,image:N.default,normal:F.default,simplePoint:y,extrude:M.default,text:z.default,earthFill:C,earthExtrude:E};class V extends d.default{constructor(...n){super(...n),(0,c.default)(this,"type","PointLayer"),(0,c.default)(this,"enableShaderEncodeStyles",["stroke","offsets","opacity","rotation"]),(0,c.default)(this,"enableDataEncodeStyles",["textOffset","textAnchor"]),(0,c.default)(this,"defaultSourceConfig",{data:[],options:{parser:{type:"json",x:"lng",y:"lat"}}});}buildModels(){var n=this;return(0,l.default)(function*(){let r=n.getModelType();n.layerModel&&n.layerModel.clearModels(),n.layerModel=new U[r](n),yield n.initLayerModels();})();}rebuildModels(){var n=this;return(0,l.default)(function*(){yield n.buildModels();})();}getModelTypeWillEmptyData(){if(this.shapeOption){let{field:n,values:r}=this.shapeOption,{shape2d:i}=this.getLayerConfig(),a=this.iconService.getIconMap();if(n&&(null==i?void 0:i.indexOf(n))!==-1)return"fill";if("text"===r)return"text";if(r&&r instanceof Array){for(let n of r)if("string"==typeof n&&a.hasOwnProperty(n))return"image";}}return"normal";}getDefaultConfig(){return({fillImage:{},normal:{blend:"additive"},radar:{},simplePoint:{},fill:{blend:"normal"},extrude:{},image:{},text:{blend:"normal"},tile:{},tileText:{},earthFill:{},earthExtrude:{}})[this.getModelType()];}getModelType(){let n=this.getEncodedData(),{shape2d:r,shape3d:i,billboard:a=!0}=this.getLayerConfig(),o=this.iconService.getIconMap(),s=n.find(n=>n.hasOwnProperty("shape"));if(!s)return this.getModelTypeWillEmptyData();{let n=s.shape;return"dot"===n?"normal":"simple"===n?"simplePoint":"radar"===n?"radar":"fillImage"===this.layerType||!1===a?"fillImage":(null==r?void 0:r.indexOf(n))!==-1?"GLOBEL"===this.mapService.version?"earthFill":"fill":(null==i?void 0:i.indexOf(n))!==-1?"GLOBEL"===this.mapService.version?"earthExtrude":"extrude":o.hasOwnProperty(n)?"image":"text";}}}},"1c5a6150":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"treeDataTransform",{enumerable:!0,get:function(){return y;}});var a=i("777fffbe"),o=a._(i("1daaa764")),s=a._(i("da8e1cea")),l=a._(i("4c1ff8e6")),u=a._(i("7b8bcee7")),c=a._(i("48fdc2f5")),f=a._(i("1df9042c")),d=a._(i("a96a4c71")),h=a._(i("01c1137e")),p=a._(i("42fc1f40")),m=a._(i("3efd64b7")),g=a._(i("f0a50269")),v=i("cbed5754");function y(n,r,i){var a;let{value:y}=i,_=function(n,r){let i={treemapBinary:f.default,treemapDice:d.default,treemapSlice:h.default,treemapSliceDice:p.default,treemapSquarify:m.default,treemapResquarify:g.default},a="treemapSquarify"===n?i[n].ratio(r):i[n];if(!a)throw TypeError("Invalid tile method!");return a;}(r.tile,r.ratio),b=(a=r.path,Array.isArray(n)?"function"==typeof a?(0,l.default)().path(a)(n):(0,l.default)()(n):(0,u.default)(n));(0,o.default)(n)?function n(r){let i=(0,s.default)(r,["data","name"]);i.replaceAll&&(r.path=i.replaceAll(".","/").split("/")),r.children&&r.children.forEach(r=>{n(r);});}(b):function n(r,i=[r.data.name]){r.id=r.id||r.data.name,r.path=i,r.children&&r.children.forEach(a=>{a.id=`${r.id}/${a.data.name}`,a.path=[...i,a.data.name],n(a,a.path);});}(b),y?b.sum(n=>r.ignoreParentValue&&n.children?0:(0,v.field)(y)(n)).sort(r.sort):b.count(),(0,c.default)().tile(_).size(r.size).round(r.round).paddingInner(r.paddingInner).paddingOuter(r.paddingOuter).paddingTop(r.paddingTop).paddingRight(r.paddingRight).paddingBottom(r.paddingBottom).paddingLeft(r.paddingLeft)(b);let x=b.descendants().map(n=>Object.assign(n,{id:n.id.replace(/^\//,""),x:[n.x0,n.x1],y:[n.y0,n.y1]}));return[x.filter("function"==typeof r.layer?r.layer:n=>n.height===r.layer),x];}},"1cf5f081":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{ARRAY_TYPE:function(){return o;},EPSILON:function(){return a;}});var a=1e-6,o="undefined"!=typeof Float32Array?Float32Array:Array;Math.hypot||(Math.hypot=function(){for(var n=0,r=arguments.length;r--;)n+=arguments[r]*arguments[r];return Math.sqrt(n);});},"1d1b11bd":function(n,r,i){"use strict";function a(n){return null==n?null:o(n);}function o(n){if("function"!=typeof n)throw Error();return n;}i.d(r,"__esModule",{value:!0}),i.e(r,{optional:function(){return a;},required:function(){return o;}});},"1d3bdddd":function(n,r,i){n.exports=function(n,r){for(var i=-1,a=null==n?0:n.length,o=0,s=[];++i=i-1){var d=u[r];d.x0=o,d.y0=s,d.x1=l,d.y1=c;return;}for(var h=f[r],p=a/2+h,m=r+1,g=i-1;m>>1;f[v]c-s){var b=a?(o*_+l*y)/a:l;n(r,m,y,o,s,b,c),n(m,i,_,b,s,l,c);}else{var x=a?(s*_+c*y)/a:c;n(r,m,y,o,s,l,x),n(m,i,_,o,x,l,c);}}(0,c,n.value,r,i,a,o);}i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});},"1e224d4e":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"ModalForm",{enumerable:!0,get:function(){return w;}});var a=i("777fffbe"),o=i("852bbaa9"),s=a._(i("23934e00")),l=a._(i("9b84be4b")),u=a._(i("e4870cf0")),c=a._(i("ee64167d")),f=a._(i("613f75ca")),d=i("4175825c"),h=a._(i("a5a99096")),p=a._(i("be348412")),m=a._(i("ce03fd86")),g=i("dd8ccb36"),v=i("a275200c"),y=o._(i("609f48be")),_=i("792e90bc"),b=i("cd1e34ba"),x=i("dac8af92"),E=["children","trigger","onVisibleChange","onOpenChange","modalProps","onFinish","submitTimeout","title","width","visible","open"];function w(n){var r,i,a,o,w=n.children,S=n.trigger,T=n.onVisibleChange,A=n.onOpenChange,C=n.modalProps,O=n.onFinish,M=n.submitTimeout,R=n.title,P=n.width,k=n.visible,I=n.open,L=(0,f.default)(n,E);(0,v.noteOnce)(!L.footer||!(null!=C&&C.footer),"ModalForm \u662F\u4E00\u4E2A ProForm \u7684\u7279\u6B8A\u5E03\u5C40\uFF0C\u5982\u679C\u60F3\u81EA\u5B9A\u4E49\u6309\u94AE\uFF0C\u8BF7\u4F7F\u7528 submit.render \u81EA\u5B9A\u4E49\u3002");var N=(0,y.useContext)(h.default.ConfigContext),D=(0,y.useState)([]),F=(0,c.default)(D,2)[1],B=(0,y.useState)(!1),j=(0,c.default)(B,2),z=j[0],U=j[1],V=(0,m.default)(!!k,{value:I||k,onChange:A||T}),G=(0,c.default)(V,2),H=G[0],W=G[1],X=(0,y.useRef)(null),q=(0,y.useCallback)(function(n){null===X.current&&n&&F([]),X.current=n;},[]),$=(0,y.useRef)(),Y=(0,y.useCallback)(function(){var n,r,i,a=null!==(n=null!==(r=L.form)&&void 0!==r?r:null===(i=L.formRef)||void 0===i?void 0:i.current)&&void 0!==n?n:$.current;a&&null!=C&&C.destroyOnClose&&a.resetFields();},[null==C?void 0:C.destroyOnClose,L.form,L.formRef]);(0,y.useImperativeHandle)(L.formRef,function(){return $.current;},[$.current]),(0,y.useEffect)(function(){(I||k)&&(null==A||A(!0),null==T||T(!0));},[k,I]);var Z=(0,y.useMemo)(function(){var n;return S?y.default.cloneElement(S,(0,u.default)((0,u.default)({key:"trigger"},S.props),{},{onClick:(n=(0,l.default)((0,s.default)().mark(function n(r){var i,a;return(0,s.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:W(!H),null===(i=S.props)||void 0===i||null===(a=i.onClick)||void 0===a||a.call(i,r);case 2:case"end":return n.stop();}},n);})),function(r){return n.apply(this,arguments);})})):null;},[W,S,H]),K=(0,y.useMemo)(function(){var n,r,i,a,o,s,l;return!1!==L.submitter&&(0,g.merge)({searchConfig:{submitText:null!==(n=null!==(r=null==C?void 0:C.okText)&&void 0!==r?r:null===(i=N.locale)||void 0===i||null===(i=i.Modal)||void 0===i?void 0:i.okText)&&void 0!==n?n:"\u786E\u8BA4",resetText:null!==(a=null!==(o=null==C?void 0:C.cancelText)&&void 0!==o?o:null===(s=N.locale)||void 0===s||null===(s=s.Modal)||void 0===s?void 0:s.cancelText)&&void 0!==a?a:"\u53D6\u6D88"},resetButtonProps:{preventDefault:!0,disabled:M?z:void 0,onClick:function(n){var r;W(!1),null==C||null===(r=C.onCancel)||void 0===r||r.call(C,n);}}},null!==(l=L.submitter)&&void 0!==l?l:{});},[null===(a=N.locale)||void 0===a||null===(a=a.Modal)||void 0===a?void 0:a.cancelText,null===(o=N.locale)||void 0===o||null===(o=o.Modal)||void 0===o?void 0:o.okText,C,L.submitter,W,z,M]),Q=(0,y.useCallback)(function(n,r){return(0,x.jsxs)(x.Fragment,{children:[n,X.current&&r?(0,x.jsx)(y.default.Fragment,{children:(0,_.createPortal)(r,X.current)},"submitter"):r]});},[]),J=(0,y.useCallback)((r=(0,l.default)((0,s.default)().mark(function n(r){var i,a,o;return(0,s.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return i=null==O?void 0:O(r),M&&i instanceof Promise&&(U(!0),a=setTimeout(function(){return U(!1);},M),i.finally(function(){clearTimeout(a),U(!1);})),n.next=4,i;case 4:return(o=n.sent)&&W(!1),n.abrupt("return",o);case 7:case"end":return n.stop();}},n);})),function(n){return r.apply(this,arguments);}),[O,W,M]),ee=(0,d.openVisibleCompatible)(H);return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(p.default,(0,u.default)((0,u.default)((0,u.default)({title:R,width:P||800},C),ee),{},{onCancel:function(n){var r;M&&z||(W(!1),null==C||null===(r=C.onCancel)||void 0===r||r.call(C,n));},afterClose:function(){var n;Y(),H&&W(!1),null==C||null===(n=C.afterClose)||void 0===n||n.call(C);},footer:!1!==L.submitter?(0,x.jsx)("div",{ref:q,style:{display:"flex",justifyContent:"flex-end"}}):null,children:(0,x.jsx)(b.BaseForm,(0,u.default)((0,u.default)({formComponentType:"ModalForm",layout:"vertical"},L),{},{onInit:function(n,r){var i;L.formRef&&(L.formRef.current=r),null==L||null===(i=L.onInit)||void 0===i||i.call(L,n,r),$.current=r;},formRef:$,submitter:K,onFinish:(i=(0,l.default)((0,s.default)().mark(function n(r){var i;return(0,s.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,J(r);case 2:return i=n.sent,n.abrupt("return",i);case 4:case"end":return n.stop();}},n);})),function(n){return i.apply(this,arguments);}),contentRender:Q,children:w}))})),Z]});}},"1e27b7a9":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return p;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("7cfeda15"),l=a._(s),u=i("609f48be"),c=o._(u),f={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M942.2 486.2Q889.47 375.11 816.7 305l-50.88 50.88C807.31 395.53 843.45 447.4 874.7 512 791.5 684.2 673.4 766 512 766q-72.67 0-133.87-22.38L323 798.75Q408 838 512 838q288.3 0 430.2-300.3a60.29 60.29 0 000-51.5zm-63.57-320.64L836 122.88a8 8 0 00-11.32 0L715.31 232.2Q624.86 186 512 186q-288.3 0-430.2 300.3a60.3 60.3 0 000 51.5q56.69 119.4 136.5 191.41L112.48 835a8 8 0 000 11.31L155.17 889a8 8 0 0011.31 0l712.15-712.12a8 8 0 000-11.32zM149.3 512C232.6 339.8 350.7 258 512 258c54.54 0 104.13 9.36 149.12 28.39l-70.3 70.3a176 176 0 00-238.13 238.13l-83.42 83.42C223.1 637.49 183.3 582.28 149.3 512zm246.7 0a112.11 112.11 0 01146.2-106.69L401.31 546.2A112 112 0 01396 512z"}},{tag:"path",attrs:{d:"M508 624c-3.46 0-6.87-.16-10.25-.47l-52.82 52.82a176.09 176.09 0 00227.42-227.42l-52.82 52.82c.31 3.38.47 6.79.47 10.25a111.94 111.94 0 01-112 112z"}}]},name:"eye-invisible",theme:"outlined"},d=i("887aaf6c"),h=a._(d),p=c.forwardRef(function(n,r){return c.createElement(h.default,(0,l.default)({},n,{ref:r,icon:f}));});},"1e27b829":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{createColumnOf:function(){return d;},initializeMark:function(){return f;}});var a=i("1f4e7f4b"),o=i("f5373dff"),s=i("c4368857"),l=i("7d5002fc"),u=this&&this.__awaiter||function(n,r,i,a){return new(i||(i=Promise))(function(o,s){function l(n){try{c(a.next(n));}catch(n){s(n);}}function u(n){try{c(a.throw(n));}catch(n){s(n);}}function c(n){var r;n.done?o(n.value):((r=n.value)instanceof i?r:new i(function(n){n(r);})).then(l,u);}c((a=a.apply(n,r||[])).next());});},c=this&&this.__rest||function(n,r){var i={};for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&0>r.indexOf(a)&&(i[a]=n[a]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,a=Object.getOwnPropertySymbols(n);or.indexOf(a[o])&&Object.prototype.propertyIsEnumerable.call(n,a[o])&&(i[a[o]]=n[a[o]]);return i;};function f(n,r,i){return u(this,void 0,void 0,function*(){let[f,d]=yield function(n,r,i){return u(this,void 0,void 0,function*(){let{library:a}=i,[o]=(0,s.useLibrary)("transform",a),{preInference:u=[],postInference:c=[]}=r,{transform:f=[]}=n,d=[l.applyDefaults,l.applyDataTransform,l.flatEncode,l.inferChannelsType,l.maybeVisualChannel,l.extractColumns,l.maybeArrayField,l.maybeNonAnimate,l.addGuideToScale,l.normalizeTooltip,...u.map(o),...f.map(o),...c.map(o),l.extractTooltip],h=[],p=n;for(let n of d)[h,p]=yield n(h,p,i);return[h,p];});}(n,r,i),{encode:h,scale:p,data:m,tooltip:g}=d;if(!1===Array.isArray(m))return null;let{channels:v}=r,y=(0,a.rollups)(Object.entries(h).filter(([,n])=>(0,o.defined)(n)),n=>n.map(([n,r])=>Object.assign({name:n},r)),([n])=>{var r;let i=null===(r=/([^\d]+)\d*$/.exec(n))||void 0===r?void 0:r[1],a=v.find(n=>n.name===i);return(null==a?void 0:a.independent)?n:i;}),_=v.filter(n=>{let{name:r,required:i}=n;if(y.find(([n])=>n===r))return!0;if(i)throw Error(`Missing encoding for channel: ${r}.`);return!1;}).flatMap(n=>{let{name:r,scale:i,scaleKey:a,range:o,quantitative:s,ordinal:l}=n;return y.filter(([n])=>n.startsWith(r)).map(([n,r],u)=>{let f=r.some(n=>n.visual),d=r.some(n=>n.constant),h=p[n]||{},{independent:m=!1,key:g=a||n,type:v=d?"constant":f?"identity":i}=h,y=c(h,["independent","key","type"]),_="constant"===v;return{name:n,values:r,scaleKey:m||_?Symbol("independent"):g,scale:Object.assign(Object.assign({type:v,range:_?void 0:o},y),{quantitative:s,ordinal:l})};});});return[d,Object.assign(Object.assign({},r),{index:f,channels:_,tooltip:g})];});}function d(n){let[r]=(0,s.useLibrary)("encode",n);return(n,i)=>void 0===i||void 0===n?null:Object.assign(Object.assign({},i),{type:"column",value:r(i)(n),field:function(n){let{type:r,value:i}=n;return"field"===r&&"string"==typeof i?i:null;}(i)});}},"1f338b89":function(n,r,i){"use strict";function a(n){return"number"==typeof n;}i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});},"1f4e7f4b":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return f;},groups:function(){return d;},rollup:function(){return h;},rollups:function(){return p;}});var a=i("777fffbe");class o extends Map{constructor(n,r=l){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),null!=n)for(let[r,i]of n)this.set(r,i);}get(n){return super.get(s(this,n));}has(n){return super.has(s(this,n));}set(n,r){return super.set(function({_intern:n,_key:r},i){let a=r(i);return n.has(a)?n.get(a):(n.set(a,i),i);}(this,n),r);}delete(n){return super.delete(function({_intern:n,_key:r},i){let a=r(i);return n.has(a)&&(i=n.get(i),n.delete(a)),i;}(this,n));}}function s({_intern:n,_key:r},i){let a=r(i);return n.has(a)?n.get(a):i;}function l(n){return null!==n&&"object"==typeof n?n.valueOf():n;}var u=i("496cbcb8"),c=a._(u);function f(n,...r){return m(n,c.default,c.default,r);}function d(n,...r){return m(n,Array.from,c.default,r);}function h(n,r,...i){return m(n,c.default,r,i);}function p(n,r,...i){return m(n,Array.from,r,i);}function m(n,r,i,a){return function n(s,l){if(l>=a.length)return i(s);let u=new o,c=a[l++],f=-1;for(let n of s){let r=c(n,++f,s),i=u.get(r);i?i.push(n):u.set(r,[n]);}for(let[r,i]of u)u.set(r,n(i,l));return r(u);}(n,0);}},"1f547793":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return o;}});var a=Object.prototype,o=function(n){var r=n&&n.constructor;return n===("function"==typeof r&&r.prototype||a);};},"1f9d5621":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return l;}});var a=i("777fffbe"),o=a._(i("83684c30")),s=a._(i("62a7c4f2"));function l(n){return(0,o.default)(n)?0:(0,s.default)(n)?n.length:Object.keys(n).length;}},"1fe7fa71":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{BaseInput:function(){return b;},default:function(){return L;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("e4870cf0"),l=a._(s),u=i("7cfeda15"),c=a._(u),f=i("a854094b"),d=a._(f),h=i("99c0cd4c"),p=a._(h),m=i("064ecd09"),g=a._(m),v=i("609f48be"),y=o._(v),_=i("8ccd78b4"),b=y.default.forwardRef(function(n,r){var i,a,o,s=n.inputElement,u=n.children,f=n.prefixCls,h=n.prefix,m=n.suffix,v=n.addonBefore,b=n.addonAfter,x=n.className,E=n.style,w=n.disabled,S=n.readOnly,T=n.focused,A=n.triggerFocus,C=n.allowClear,O=n.value,M=n.handleReset,R=n.hidden,P=n.classes,k=n.classNames,I=n.dataAttrs,L=n.styles,N=n.components,D=n.onClear,F=null!=u?u:s,B=(null==N?void 0:N.affixWrapper)||"span",j=(null==N?void 0:N.groupWrapper)||"span",z=(null==N?void 0:N.wrapper)||"span",U=(null==N?void 0:N.groupAddon)||"span",V=(0,y.useRef)(null),G=(0,_.hasPrefixSuffix)(n),H=(0,y.cloneElement)(F,{value:O,className:(0,g.default)(null===(i=F.props)||void 0===i?void 0:i.className,!G&&(null==k?void 0:k.variant))||null}),W=(0,y.useRef)(null);if(y.default.useImperativeHandle(r,function(){return{nativeElement:W.current||V.current};}),G){var X=null;if(C){var q=!w&&!S&&O,$="".concat(f,"-clear-icon"),Y="object"===(0,p.default)(C)&&null!=C&&C.clearIcon?C.clearIcon:"\u2716";X=y.default.createElement("button",{type:"button",tabIndex:-1,onClick:function(n){null==M||M(n),null==D||D();},onMouseDown:function(n){return n.preventDefault();},className:(0,g.default)($,(0,d.default)((0,d.default)({},"".concat($,"-hidden"),!q),"".concat($,"-has-suffix"),!!m))},Y);}var Z="".concat(f,"-affix-wrapper"),K=(0,g.default)(Z,(0,d.default)((0,d.default)((0,d.default)((0,d.default)((0,d.default)({},"".concat(f,"-disabled"),w),"".concat(Z,"-disabled"),w),"".concat(Z,"-focused"),T),"".concat(Z,"-readonly"),S),"".concat(Z,"-input-with-clear-btn"),m&&C&&O),null==P?void 0:P.affixWrapper,null==k?void 0:k.affixWrapper,null==k?void 0:k.variant),Q=(m||C)&&y.default.createElement("span",{className:(0,g.default)("".concat(f,"-suffix"),null==k?void 0:k.suffix),style:null==L?void 0:L.suffix},X,m);H=y.default.createElement(B,(0,c.default)({className:K,style:null==L?void 0:L.affixWrapper,onClick:function(n){var r;null!==(r=V.current)&&void 0!==r&&r.contains(n.target)&&(null==A||A());}},null==I?void 0:I.affixWrapper,{ref:V}),h&&y.default.createElement("span",{className:(0,g.default)("".concat(f,"-prefix"),null==k?void 0:k.prefix),style:null==L?void 0:L.prefix},h),H,Q);}if((0,_.hasAddon)(n)){var J="".concat(f,"-group"),ee="".concat(J,"-addon"),et="".concat(J,"-wrapper"),en=(0,g.default)("".concat(f,"-wrapper"),J,null==P?void 0:P.wrapper,null==k?void 0:k.wrapper),er=(0,g.default)(et,(0,d.default)({},"".concat(et,"-disabled"),w),null==P?void 0:P.group,null==k?void 0:k.groupWrapper);H=y.default.createElement(j,{className:er,ref:W},y.default.createElement(z,{className:en},v&&y.default.createElement(U,{className:ee},v),H,b&&y.default.createElement(U,{className:ee},b)));}return y.default.cloneElement(H,{className:(0,g.default)(null===(a=H.props)||void 0===a?void 0:a.className,x)||null,style:(0,l.default)((0,l.default)({},null===(o=H.props)||void 0===o?void 0:o.style),E),hidden:R});}),x=i("f1020fa4"),E=a._(x),w=i("ee64167d"),S=a._(w),T=i("613f75ca"),A=a._(T),C=i("ce03fd86"),O=a._(C),M=i("ddaa0afd"),R=a._(M),P=i("3cf89988"),k=a._(P),I=["autoComplete","onChange","onFocus","onBlur","onPressEnter","onKeyDown","onKeyUp","prefixCls","disabled","htmlSize","className","maxLength","suffix","showCount","count","type","classes","classNames","styles","onCompositionStart","onCompositionEnd"],L=(0,y.forwardRef)(function(n,r){var i,a=n.autoComplete,o=n.onChange,s=n.onFocus,u=n.onBlur,f=n.onPressEnter,h=n.onKeyDown,p=n.onKeyUp,m=n.prefixCls,v=void 0===m?"rc-input":m,x=n.disabled,w=n.htmlSize,T=n.className,C=n.maxLength,M=n.suffix,P=n.showCount,L=n.count,N=n.type,D=n.classes,F=n.classNames,B=n.styles,j=n.onCompositionStart,z=n.onCompositionEnd,U=(0,A.default)(n,I),V=(0,y.useState)(!1),G=(0,S.default)(V,2),H=G[0],W=G[1],X=(0,y.useRef)(!1),q=(0,y.useRef)(!1),$=(0,y.useRef)(null),Y=(0,y.useRef)(null),Z=function(n){$.current&&(0,_.triggerFocus)($.current,n);},K=(0,O.default)(n.defaultValue,{value:n.value}),Q=(0,S.default)(K,2),J=Q[0],ee=Q[1],et=null==J?"":String(J),en=(0,y.useState)(null),er=(0,S.default)(en,2),ei=er[0],ea=er[1],eo=(0,k.default)(L,P),es=eo.max||C,el=eo.strategy(et),eu=!!es&&el>es;(0,y.useImperativeHandle)(r,function(){var n;return{focus:Z,blur:function(){var n;null===(n=$.current)||void 0===n||n.blur();},setSelectionRange:function(n,r,i){var a;null===(a=$.current)||void 0===a||a.setSelectionRange(n,r,i);},select:function(){var n;null===(n=$.current)||void 0===n||n.select();},input:$.current,nativeElement:(null===(n=Y.current)||void 0===n?void 0:n.nativeElement)||$.current};}),(0,y.useEffect)(function(){q.current&&(q.current=!1),W(function(n){return(!n||!x)&&n;});},[x]);var ec=function(n,r,i){var a,s,l=r;if(!X.current&&eo.exceedFormatter&&eo.max&&eo.strategy(r)>eo.max)l=eo.exceedFormatter(r,{max:eo.max}),r!==l&&ea([(null===(a=$.current)||void 0===a?void 0:a.selectionStart)||0,(null===(s=$.current)||void 0===s?void 0:s.selectionEnd)||0]);else if("compositionEnd"===i.source)return;ee(l),$.current&&(0,_.resolveOnChange)($.current,n,o,l);};(0,y.useEffect)(function(){if(ei){var n;null===(n=$.current)||void 0===n||n.setSelectionRange.apply(n,(0,E.default)(ei));}},[ei]);var ef=eu&&"".concat(v,"-out-of-range");return y.default.createElement(b,(0,c.default)({},U,{prefixCls:v,className:(0,g.default)(T,ef),handleReset:function(n){ee(""),Z(),$.current&&(0,_.resolveOnChange)($.current,n,o);},value:et,focused:H,triggerFocus:Z,suffix:function(){var n=Number(es)>0;if(M||eo.show){var r=eo.showFormatter?eo.showFormatter({value:et,count:el,maxLength:es}):"".concat(el).concat(n?" / ".concat(es):"");return y.default.createElement(y.default.Fragment,null,eo.show&&y.default.createElement("span",{className:(0,g.default)("".concat(v,"-show-count-suffix"),(0,d.default)({},"".concat(v,"-show-count-has-suffix"),!!M),null==F?void 0:F.count),style:(0,l.default)({},null==B?void 0:B.count)},r),M);}return null;}(),disabled:x,classes:D,classNames:F,styles:B,ref:Y}),(i=(0,R.default)(n,["prefixCls","onPressEnter","addonBefore","addonAfter","prefix","suffix","allowClear","defaultValue","showCount","count","classes","htmlSize","styles","classNames","onClear"]),y.default.createElement("input",(0,c.default)({autoComplete:a},i,{onChange:function(n){ec(n,n.target.value,{source:"change"});},onFocus:function(n){W(!0),null==s||s(n);},onBlur:function(n){q.current&&(q.current=!1),W(!1),null==u||u(n);},onKeyDown:function(n){f&&"Enter"===n.key&&!q.current&&(q.current=!0,f(n)),null==h||h(n);},onKeyUp:function(n){"Enter"===n.key&&(q.current=!1),null==p||p(n);},className:(0,g.default)(v,(0,d.default)({},"".concat(v,"-disabled"),x),null==F?void 0:F.input),style:null==B?void 0:B.input,ref:$,size:w,type:void 0===N?"text":N,onCompositionStart:function(n){X.current=!0,null==j||j(n);},onCompositionEnd:function(n){X.current=!1,ec(n,n.currentTarget.value,{source:"compositionEnd"}),null==z||z(n);}}))));});},"202d5e21":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return P;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("7cfeda15"),l=a._(s),u=i("a854094b"),c=a._(u),f=i("e4870cf0"),d=a._(f),h=i("ee64167d"),p=a._(h),m=i("613f75ca"),g=a._(m),v=i("609f48be"),y=o._(v),_=i("064ecd09"),b=a._(_),x=i("ae8eb856"),E=a._(x),w=i("b7c8f320"),S=y.memo(function(n){for(var r=n.prefixCls,i=n.level,a=n.isStart,o=n.isEnd,s="".concat(r,"-indent-unit"),l=[],u=0;u0&&"read"!==K?(0,A.jsx)("div",{className:(0,_.default)("".concat(P,"-action"),(0,s.default)({},"".concat(P,"-action-small"),"small"===$),q),children:ed}):null,ep={name:X.name,field:F,index:B,record:null==j||null===(i=j.getFieldValue)||void 0===i?void 0:i.call(j,[Y.listName,z,F.name].filter(function(n){return void 0!==n;}).flat(1)),fields:N,operation:k,meta:D},em=(0,T.useGridHelpers)().grid,eg=(null==O?void 0:O(el,ep))||el,ev=(null==M?void 0:M({listDom:(0,A.jsx)("div",{className:(0,_.default)("".concat(P,"-container"),U,q),style:(0,c.default)({width:em?"100%":void 0},V),children:eg}),action:eh},ep))||(0,A.jsxs)("div",{className:(0,_.default)("".concat(P,"-item"),q,(0,s.default)((0,s.default)({},"".concat(P,"-item-default"),void 0===R),"".concat(P,"-item-show-label"),R)),style:{display:"flex",alignItems:"flex-end"},children:[(0,A.jsx)("div",{className:(0,_.default)("".concat(P,"-container"),U,q),style:(0,c.default)({width:em?"100%":void 0},V),children:eg}),eh]});return(0,A.jsx)(w.FormListContext.Provider,{value:(0,c.default)((0,c.default)({},F),{},{listName:[Y.listName,z,F.name].filter(function(n){return void 0!==n;}).flat(1)}),children:ev});};},"20e31a38":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return E;},quantileIndex:function(){return w;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("63aba70a"),l=a._(s),u=i("cf1ac170"),c=a._(u),f=i("d8cea4a1"),d=a._(f),h=i("7b424aab"),p=a._(h),m=i("944abdfb");function g(n,r,i=0,a=1/0,o){if(r=Math.floor(r),i=Math.floor(Math.max(0,i)),a=Math.floor(Math.min(n.length-1,a)),!(i<=r&&r<=a))return n;for(o=void 0===o?m.ascendingDefined:(0,m.compareDefined)(o);a>i;){if(a-i>600){let s=a-i+1,l=r-i+1,u=Math.log(s),c=.5*Math.exp(2*u/3),f=.5*Math.sqrt(u*c*(s-c)/s)*(l-s/2<0?-1:1),d=Math.max(i,Math.floor(r-l*c/s+f)),h=Math.min(a,Math.floor(r+(s-l)*c/s+f));g(n,r,d,h,o);}let s=n[r],l=i,u=a;for(v(n,i,r),o(n[a],s)>0&&v(n,i,a);lo(n[l],s);)++l;for(;o(n[u],s)>0;)--u;}0===o(n[i],s)?v(n,i,u):v(n,++u,a),u<=r&&(i=u+1),r<=u&&(a=u-1);}return n;}function v(n,r,i){let a=n[r];n[r]=n[i],n[i]=a;}var y=i("5007e869"),_=o._(y),b=i("4f81a096"),x=a._(b);function E(n,r,i){if(!(!(a=(n=Float64Array.from((0,_.numbers)(n,i))).length)||isNaN(r=+r))){if(r<=0||a<2)return(0,d.default)(n);if(r>=1)return(0,l.default)(n);var a,o=(a-1)*r,s=Math.floor(o),u=(0,l.default)(g(n,s).subarray(0,s+1));return u+((0,d.default)(n.subarray(s+1))-u)*(o-s);}}function w(n,r,i=_.default){if(!isNaN(r=+r)){if(a=Float64Array.from(n,(r,a)=>(0,_.default)(i(n[a],a,n))),r<=0)return(0,p.default)(a);if(r>=1)return(0,c.default)(a);var a,o=Uint32Array.from(n,(n,r)=>r),s=a.length-1,l=Math.floor(s*r);return g(o,l,0,s,(n,r)=>(0,m.ascendingDefined)(a[n],a[r])),(l=function(n,r=x.default){let i;let a=!1;if(1===r.length){let o;for(let s of n){let n=r(s);(a?(0,x.default)(n,o)>0:0===(0,x.default)(n,n))&&(i=s,o=n,a=!0);}}else for(let o of n)(a?r(o,i)>0:0===r(o,o))&&(i=o,a=!0);return i;}(o.subarray(0,l+1),n=>a[n]))>=0?l:-1;}}},"21da3e32":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{TextTrianglation:function(){return M;},default:function(){return R;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("e4870cf0"),l=a._(s),u=i("9b84be4b"),c=a._(u),f=i("a854094b"),d=a._(f),h=i("553ee311"),p=i("9479dab9"),m=i("6654a076"),g=a._(m),v=i("da755037"),y=o._(v),_=i("26429605"),b=o._(_);class x{constructor(n,r,i){(0,d.default)(this,"boxCells",[]),(0,d.default)(this,"xCellCount",void 0),(0,d.default)(this,"yCellCount",void 0),(0,d.default)(this,"boxKeys",void 0),(0,d.default)(this,"bboxes",void 0),(0,d.default)(this,"width",void 0),(0,d.default)(this,"height",void 0),(0,d.default)(this,"xScale",void 0),(0,d.default)(this,"yScale",void 0),(0,d.default)(this,"boxUid",void 0);let a=this.boxCells;this.xCellCount=Math.ceil(n/i),this.yCellCount=Math.ceil(r/i);for(let n=0;nthis.width||a<0||r>this.height)return!o&&[];let l=[];if(n<=0&&r<=0&&this.width<=i&&this.height<=a){if(o)return!0;for(let n=0;n0:l;}queryCell(n,r,i,a,o,s,l,u){let c=l.seenUids,f=this.boxCells[o];if(null!==f){let o=this.bboxes;for(let d of f)if(!c.box[d]){c.box[d]=!0;let f=4*d;if(n<=o[f+2]&&r<=o[f+3]&&i>=o[f+0]&&a>=o[f+1]&&(!u||u(this.boxKeys[d]))){if(l.hitTest)return s.push(!0),!0;s.push({key:this.boxKeys[d],x1:o[f],y1:o[f+1],x2:o[f+2],y2:o[f+3]});}}}return!1;}forEachCell(n,r,i,a,o,s,l,u){let c=this.convertToXCellCoord(n),f=this.convertToYCellCoord(r),d=this.convertToXCellCoord(i),h=this.convertToYCellCoord(a);for(let p=c;p<=d;p++)for(let c=f;c<=h;c++){let f=this.xCellCount*c+p;if(o.call(this,n,r,i,a,f,s,l,u))return;}}convertToXCellCoord(n){return Math.max(0,Math.min(this.xCellCount-1,Math.floor(n*this.xScale)));}convertToYCellCoord(n){return Math.max(0,Math.min(this.yCellCount-1,Math.floor(n*this.yScale)));}}class E{constructor(n,r){(0,d.default)(this,"width",void 0),(0,d.default)(this,"height",void 0),(0,d.default)(this,"grid",void 0),(0,d.default)(this,"viewportPadding",100),(0,d.default)(this,"screenRightBoundary",void 0),(0,d.default)(this,"screenBottomBoundary",void 0),(0,d.default)(this,"gridRightBoundary",void 0),(0,d.default)(this,"gridBottomBoundary",void 0),this.width=n,this.height=r,this.viewportPadding=Math.max(n,r),this.grid=new x(n+this.viewportPadding,r+this.viewportPadding,25),this.screenRightBoundary=n+this.viewportPadding,this.screenBottomBoundary=r+this.viewportPadding,this.gridRightBoundary=n+2*this.viewportPadding,this.gridBottomBoundary=r+2*this.viewportPadding;}placeCollisionBox(n){let r=n.x1+n.anchorPointX+this.viewportPadding,i=n.y1+n.anchorPointY+this.viewportPadding,a=n.x2+n.anchorPointX+this.viewportPadding,o=n.y2+n.anchorPointY+this.viewportPadding;return!this.isInsideGrid(r,i,a,o)||this.grid.hitTest(r,i,a,o)?{box:[]}:{box:[r,i,a,o]};}insertCollisionBox(n,r){this.grid.insert({featureIndex:r},n[0],n[1],n[2],n[3]);}project(n,r,i){let a=b.fromValues(r,i,0,1),o=b.create(),s=y.fromValues(...n);return b.transformMat4(o,a,s),{x:(o[0]/o[3]+1)/2*this.width+this.viewportPadding,y:(-o[1]/o[3]+1)/2*this.height+this.viewportPadding};}isInsideGrid(n,r,i,a){return i>=0&&n=0&&r{i.push(...s,n.tex.x,n.tex.y+n.tex.height,n.tl.x,n.tl.y,...s,n.tex.x+n.tex.width,n.tex.y+n.tex.height,n.tr.x,n.tr.y,...s,n.tex.x+n.tex.width,n.tex.y,n.br.x,n.br.y,...s,n.tex.x,n.tex.y,n.bl.x,n.bl.y),a.push(0+4*r,1+4*r,2+4*r,2+4*r,3+4*r,0+4*r);}),{vertices:i,indices:a,size:7};}class R extends g.default{constructor(...n){var r;super(...n),r=this,(0,d.default)(this,"glyphInfo",void 0),(0,d.default)(this,"glyphInfoMap",{}),(0,d.default)(this,"rawEncodeData",void 0),(0,d.default)(this,"texture",void 0),(0,d.default)(this,"currentZoom",-1),(0,d.default)(this,"extent",void 0),(0,d.default)(this,"textureHeight",0),(0,d.default)(this,"textCount",0),(0,d.default)(this,"preTextStyle",{}),(0,d.default)(this,"mapping",(0,c.default)(function*(){r.initGlyph(),r.updateTexture(),yield r.reBuildModel();}));}get attributeLocation(){return Object.assign(super.attributeLocation,{MAX:super.attributeLocation.MAX,SIZE:9,TEXT_OFFSETS:10,UV:11});}getUninforms(){let n=this.getCommonUniformsInfo(),r=this.getUniformsBufferInfo(this.getStyleAttribute());return this.updateStyleUnifoms(),(0,l.default)((0,l.default)((0,l.default)({},n.uniformsOption),r.uniformsOption),{u_sdf_map:this.textures[0]});}getCommonUniformsInfo(){let{stroke:n="#fff",strokeWidth:r=0,halo:i=.5,gamma:a=2,raisingHeight:o=0}=this.layer.getLayerConfig(),s=this.getFontServiceMapping(),l=this.getFontServiceCanvas();s&&Object.keys(s).length!==this.textCount&&l&&(this.updateTexture(),this.textCount=Object.keys(s).length),this.preTextStyle=this.getTextStyle();let u={u_stroke_color:(0,p.rgb2arr)(n),u_sdf_map_size:[(null==l?void 0:l.width)||1,(null==l?void 0:l.height)||1],u_raisingHeight:Number(o),u_stroke_width:r,u_gamma_scale:a,u_halo_blur:i};return this.getUniformsBufferInfo(u);}initModels(){var n=this;return(0,c.default)(function*(){return n.bindEvent(),n.extent=n.textExtent(),n.rawEncodeData=n.layer.getEncodedData(),n.preTextStyle=n.getTextStyle(),n.initUniformsBuffer(),n.buildModels();})();}buildModels(){var n=this;return(0,c.default)(function*(){let{textAllowOverlap:r=!1}=n.layer.getLayerConfig();return n.initGlyph(),n.updateTexture(),r||n.filterGlyphs(),[(yield n.layer.buildLayerModel({moduleName:"pointText",vertexShader:C,fragmentShader:A,defines:n.getDefines(),inject:n.getInject(),triangulation:M.bind(n),depth:{enable:!1}}))];})();}needUpdate(){var n=this;return(0,c.default)(function*(){let{textAllowOverlap:r=!1,textAnchor:i="center",textOffset:a,padding:o,fontFamily:s,fontWeight:l}=n.getTextStyle();if(!O(o,n.preTextStyle.padding)||!O(a,n.preTextStyle.textOffset)||!O(i,n.preTextStyle.textAnchor)||!O(s,n.preTextStyle.fontFamily)||!O(l,n.preTextStyle.fontWeight))return yield n.mapping(),!0;if(r)return!1;let u=n.mapService.getZoom(),c=n.mapService.getBounds(),f=(0,p.boundsContains)(n.extent,c);return(Math.abs(n.currentZoom-u)>.5||!f||r!==n.preTextStyle.textAllowOverlap)&&(yield n.reBuildModel(),!0);})();}clearModels(){var n;null===(n=this.texture)||void 0===n||n.destroy(),this.layer.off("remapping",this.mapping);}registerBuiltinAttributes(){this.registerPosition64LowAttribute(),this.styleAttributeService.registerStyleAttribute({name:"textOffsets",type:h.AttributeType.Attribute,descriptor:{shaderLocation:this.attributeLocation.TEXT_OFFSETS,name:"a_textOffsets",buffer:{usage:h.gl.STATIC_DRAW,data:[],type:h.gl.FLOAT},size:2,update:(n,r,i)=>[i[5],i[6]]}}),this.styleAttributeService.registerStyleAttribute({name:"textUv",type:h.AttributeType.Attribute,descriptor:{name:"a_tex",shaderLocation:this.attributeLocation.UV,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:2,update:(n,r,i)=>[i[3],i[4]]}}),this.styleAttributeService.registerStyleAttribute({name:"size",type:h.AttributeType.Attribute,descriptor:{name:"a_Size",shaderLocation:this.attributeLocation.SIZE,buffer:{usage:h.gl.DYNAMIC_DRAW,data:[],type:h.gl.FLOAT},size:1,update:n=>{let{size:r=12}=n;return Array.isArray(r)?[r[0]]:[r];}}});}bindEvent(){this.layer.isTileLayer||this.layer.on("remapping",this.mapping);}textExtent(){let n=this.mapService.getBounds();return(0,p.padBounds)(n,.5);}initTextFont(){let{fontWeight:n,fontFamily:r}=this.getTextStyle(),i=this.rawEncodeData,a=[];i.forEach(n=>{let{shape:r=""}=n;for(let n of r=r.toString())-1===a.indexOf(n)&&a.push(n);}),this.fontService.setFontOptions({characterSet:a,fontWeight:n,fontFamily:r,iconfont:!1});}initIconFontTex(){let{fontWeight:n,fontFamily:r}=this.getTextStyle(),i=this.rawEncodeData,a=[];i.forEach(n=>{let{shape:r=""}=n;r=`${r}`,-1===a.indexOf(r)&&a.push(r);}),this.fontService.setFontOptions({characterSet:a,fontWeight:n,fontFamily:r,iconfont:!0});}getTextStyle(){let{fontWeight:n="400",fontFamily:r="sans-serif",textAllowOverlap:i=!1,padding:a=[0,0],textAnchor:o="center",textOffset:s=[0,0],opacity:l=1,strokeOpacity:u=1,strokeWidth:c=0,stroke:f="#000"}=this.layer.getLayerConfig();return{fontWeight:n,fontFamily:r,textAllowOverlap:i,padding:a,textAnchor:o,textOffset:s,opacity:l,strokeOpacity:u,strokeWidth:c,stroke:f};}generateGlyphLayout(n){let r=this.getFontServiceMapping(),{spacing:i=2,textAnchor:a="center",textOffset:o}=this.layer.getLayerConfig(),s=this.rawEncodeData;this.glyphInfo=s.map(s=>{let{shape:l="",id:u,size:c=1}=s,f=s.textOffset?s.textOffset:o||[0,0],d=s.textAnchor?s.textAnchor:a||"center",h=function(n,r,i,a,o,s,l=[0,0],u){let c=n.split("\n"),f=[],d={positionedGlyphs:f,top:l[1],bottom:l[1],left:l[0],right:l[0],lineCount:c.length,text:n};return u?function(n,r,i,a,o,s,l){let u=0,c=-8,f=0,d=n.positionedGlyphs,h="right"===s?1:"left"===s?0:.5,p=d.length;i.forEach(n=>{let i=r[n];i&&(d.push({glyph:n,x:i.advance/2,y:c+0,vertical:!1,scale:1,metrics:i}),u+=i.advance+l),d.length!==p&&(f=Math.max(u-l,f),S(d,r,p,d.length-1,h)),u=0,c-=a+5;});let{horizontalAlign:m,verticalAlign:g}=w(o);T(d,h,m,g,f,a,i.length);let v=c- -8;n.top+=-g*v,n.bottom=n.top-v,n.left+=-m*f,n.right=n.left+f;}(d,r,c,i,a,o,s):function(n,r,i,a,o,s,l){let u=0,c=-8,f=0,d=n.positionedGlyphs,h="right"===s?1:"left"===s?0:.5,p=d.length;i.forEach(n=>{n.split("").forEach(n=>{let i=r[n];i&&(d.push({glyph:n,x:u,y:c+0,vertical:!1,scale:1,metrics:i}),u+=i.advance+l);}),d.length!==p&&(f=Math.max(u-l,f),S(d,r,p,d.length-1,h)),u=0,c-=a+5;});let{horizontalAlign:m,verticalAlign:g}=w(o);T(d,h,m,g,f,a,i.length);let v=c- -8;n.top+=-g*v,n.bottom=n.top-v,n.left+=-m*f,n.right=n.left+f;}(d,r,c,i,a,o,s),!!f.length&&d;}(l.toString(),r,c,d,"left",i,f,n),m=function(n,r=[0,0],i){let{positionedGlyphs:a=[]}=n,o=[];for(let n of a){let a=n.metrics,s=a.advance*n.scale/2,l=i?[n.x+s,n.y]:[0,0],u=i?[0,0]:[n.x+s+r[0],n.y+r[1]],c=-4*n.scale-s+u[0],f=-4*n.scale+u[1],d=c+a.width*n.scale,h=f+a.height*n.scale,p={x:c,y:f},m={x:d,y:f},g={x:c,y:h},v={x:d,y:h};o.push({tl:p,tr:m,bl:g,br:v,tex:a,glyphOffset:l});}return o;}(h,f,!1);return s.shaping=h,s.glyphQuads=m,s.centroid=(0,p.calculateCentroid)(s.coordinates),this.glyphInfoMap[u]={shaping:h,glyphQuads:m,centroid:(0,p.calculateCentroid)(s.coordinates)},s;});}getFontServiceMapping(){let{fontWeight:n="400",fontFamily:r="sans-serif"}=this.layer.getLayerConfig();return this.fontService.getMappingByKey(`${r}_${n}`);}getFontServiceCanvas(){let{fontWeight:n="400",fontFamily:r="sans-serif"}=this.layer.getLayerConfig();return this.fontService.getCanvasByKey(`${r}_${n}`);}filterGlyphs(){let{padding:n=[0,0],textAllowOverlap:r=!1}=this.layer.getLayerConfig();if(r)return;this.glyphInfoMap={},this.currentZoom=this.mapService.getZoom(),this.extent=this.textExtent();let{width:i,height:a}=this.rendererService.getViewportSize(),o=new E(i,a);this.glyphInfo.filter(r=>{let{shaping:i,id:a=0}=r,s=r.centroid,l=r.size/16,u=this.mapService.lngLatToContainer(s),{box:c}=o.placeCollisionBox({x1:i.left*l-n[0],x2:i.right*l+n[0],y1:i.top*l-n[1],y2:i.bottom*l+n[1],anchorPointX:u.x,anchorPointY:u.y});return!!c&&!!c.length&&(o.insertCollisionBox(c,a),!0);}).forEach(n=>{this.glyphInfoMap[n.id]=n;});}initGlyph(){let{iconfont:n=!1}=this.layer.getLayerConfig();n?this.initIconFontTex():this.initTextFont(),this.generateGlyphLayout(n);}updateTexture(){let{createTexture2D:n}=this.rendererService,r=this.getFontServiceCanvas();this.textureHeight=r.height,this.texture&&this.texture.destroy(),this.texture=n({data:r,mag:h.gl.LINEAR,min:h.gl.LINEAR,width:r.width,height:r.height}),this.textures=[this.texture];}reBuildModel(){var n=this;return(0,c.default)(function*(){n.filterGlyphs();let r=yield n.layer.buildLayerModel({moduleName:"pointText",vertexShader:C,fragmentShader:A,triangulation:M.bind(n),defines:n.getDefines(),inject:n.getInject(),depth:{enable:!1}});n.layer.models=[r];})();}}},"2247dc85":function(n,r,i){"use strict";var a=i("f5a08f97").default,o=i("89a0cb41").default;Object.defineProperty(r,"__esModule",{value:!0}),r.generate=function n(r,i,a){return a?h.default.createElement(r.tag,(0,s.default)((0,s.default)({key:i},m(r.attrs)),a),(r.children||[]).map(function(a,o){return n(a,"".concat(i,"-").concat(r.tag,"-").concat(o));})):h.default.createElement(r.tag,(0,s.default)({key:i},m(r.attrs)),(r.children||[]).map(function(a,o){return n(a,"".concat(i,"-").concat(r.tag,"-").concat(o));}));},r.getSecondaryColor=function(n){return(0,u.generate)(n)[0];},r.iconStyles=void 0,r.isIconDefinition=function(n){return"object"===(0,l.default)(n)&&"string"==typeof n.name&&"string"==typeof n.theme&&("object"===(0,l.default)(n.icon)||"function"==typeof n.icon);},r.normalizeAttrs=m,r.normalizeTwoToneColors=function(n){return n?Array.isArray(n)?n:[n]:[];},r.useInsertStyles=r.svgBaseProps=void 0,r.warning=function(n,r){(0,d.default)(n,"[@ant-design/icons] ".concat(r));};var s=o(i("3bbc6f6c")),l=o(i("d03c096f")),u=i("0d7b2f56"),c=i("0c2b9405"),f=i("a2d16fe8"),d=o(i("80a41602")),h=a(i("609f48be")),p=o(i("7c9399ac"));function m(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(n).reduce(function(r,i){var a=n[i];return"class"===i?(r.className=a,delete r.class):(delete r[i],r[i.replace(/-(.)/g,function(n,r){return r.toUpperCase();})]=a),r;},{});}r.svgBaseProps={width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true",focusable:"false"};var g=r.iconStyles="\n.anticon {\n display: inline-flex;\n align-items: center;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.anticon > * {\n line-height: 1;\n}\n\n.anticon svg {\n display: inline-block;\n}\n\n.anticon::before {\n display: none;\n}\n\n.anticon .anticon-icon {\n display: block;\n}\n\n.anticon[tabindex] {\n cursor: pointer;\n}\n\n.anticon-spin::before,\n.anticon-spin {\n display: inline-block;\n -webkit-animation: loadingCircle 1s infinite linear;\n animation: loadingCircle 1s infinite linear;\n}\n\n@-webkit-keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n";r.useInsertStyles=function(n){var r=(0,h.useContext)(p.default),i=r.csp,a=r.prefixCls,o=r.layer,s=g;a&&(s=s.replace(/anticon/g,a)),o&&(s="@layer ".concat(o," {\n").concat(s,"\n}")),(0,h.useEffect)(function(){var r=n.current,a=(0,f.getShadowRoot)(r);(0,c.updateCSS)(s,"@ant-design-icons",{prepend:!o,csp:i,attachTo:a});},[]);};},22702128:function(n,r,i){var a=i("c565fed6"),o=i("08f49370");n.exports=function(n,r){return null!=n&&o(n,r,a);};},"22aea40b":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{computedExpandedClassName:function(){return d;},findAllChildrenKeys:function(){return f;},renderExpandIcon:function(){return c;}});var a=i("777fffbe"),o=i("852bbaa9"),s=a._(i("a854094b")),l=o._(i("609f48be")),u=a._(i("064ecd09"));function c(n){var r=n.prefixCls,i=n.record,a=n.onExpand,o=n.expanded,c=n.expandable,f="".concat(r,"-row-expand-icon");return c?l.createElement("span",{className:(0,u.default)(f,(0,s.default)((0,s.default)({},"".concat(r,"-row-expanded"),o),"".concat(r,"-row-collapsed"),!o)),onClick:function(n){a(i,n),n.stopPropagation();}}):l.createElement("span",{className:(0,u.default)(f,"".concat(r,"-row-spaced"))});}function f(n,r,i){var a=[];return!function n(o){(o||[]).forEach(function(o,s){a.push(r(o,s)),n(o[i]);});}(n),a;}function d(n,r,i,a){return"string"==typeof n?n:"function"==typeof n?n(r,i,a):"";}},"22e5bac1":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return h;}});var a=i("777fffbe"),o=a._(i("e4870cf0"));i("a3273044");var s=i("64681837"),l=a._(i("38ab0c18")),u=a._(i("f34e933b")),c=a._(i("ddaa0afd")),f=i("609f48be"),d=i("dac8af92"),h=function(n){var r=(0,s.useIntl)(),i=u.default.useFormInstance();if(!1===n.render)return null;var a=n.onSubmit,h=n.render,p=n.onReset,m=n.searchConfig,g=void 0===m?{}:m,v=n.submitButtonProps,y=n.resetButtonProps,_=s.proTheme.useToken().token,b=function(){i.submit(),null==a||a();},x=function(){i.resetFields(),null==p||p();},E=g.submitText,w=void 0===E?r.getMessage("tableForm.submit","\u63D0\u4EA4"):E,S=g.resetText,T=void 0===S?r.getMessage("tableForm.reset","\u91CD\u7F6E"):S,A=[];!1!==y&&A.push((0,f.createElement)(l.default,(0,o.default)((0,o.default)({},(0,c.default)(null!=y?y:{},["preventDefault"])),{},{key:"rest",onClick:function(n){var r;null!=y&&y.preventDefault||x(),null==y||null===(r=y.onClick)||void 0===r||r.call(y,n);}}),T)),!1!==v&&A.push((0,f.createElement)(l.default,(0,o.default)((0,o.default)({type:"primary"},(0,c.default)(v||{},["preventDefault"])),{},{key:"submit",onClick:function(n){var r;null!=v&&v.preventDefault||b(),null==v||null===(r=v.onClick)||void 0===r||r.call(v,n);}}),w));var C=h?h((0,o.default)((0,o.default)({},n),{},{form:i,submit:b,reset:x}),A):A;return C?Array.isArray(C)?(null==C?void 0:C.length)<1?null:(null==C?void 0:C.length)===1?C[0]:(0,d.jsx)("div",{style:{display:"flex",gap:_.marginXS,alignItems:"center"},children:C}):C:null;};},"23b4cb91":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{getTileFactory:function(){return z;}});var a=i("777fffbe"),o=i("553ee311"),s=i("9b84be4b"),l=a._(s),u=i("6f3d386c"),c=a._(u),f=i("1c0d7fd1"),d=a._(f),h=i("e4870cf0"),p=a._(h),m=i("a854094b"),g=a._(m),v=i("cf4f8679"),y=i("04fd6645"),_=a._(y);class b extends v.EventEmitter{constructor(n,r){super(),(0,g.default)(this,"x",void 0),(0,g.default)(this,"y",void 0),(0,g.default)(this,"z",void 0),(0,g.default)(this,"key",void 0),(0,g.default)(this,"parent",void 0),(0,g.default)(this,"sourceTile",void 0),(0,g.default)(this,"visible",!0),(0,g.default)(this,"layers",[]),(0,g.default)(this,"isLoaded",!1),(0,g.default)(this,"tileMaskLayers",[]),(0,g.default)(this,"tileMask",void 0),this.parent=r,this.sourceTile=n,this.x=n.x,this.y=n.y,this.z=n.z,this.key=`${this.x}_${this.y}_${this.z}`;}getLayers(){return this.layers;}styleUpdate(...n){}lnglatInBounds(n){let[r,i,a,o]=this.sourceTile.bounds,{lng:s,lat:l}=n;return s>=r&&s<=a&&l>=i&&l<=o;}getLayerOptions(){var n;let r=this.parent.getLayerConfig();return(0,p.default)((0,p.default)({},r),{},{textAllowOverlap:!0,autoFit:!1,maskLayers:this.getMaskLayer(),tileMask:-1!==["PolygonLayer","LineLayer"].indexOf(this.parent.type),mask:r.mask||(null===(n=r.maskLayers)||void 0===n?void 0:n.length)!==0&&r.enableMask});}getMaskLayer(){let{maskLayers:n}=this.parent.getLayerConfig(),r=[];return null==n||n.forEach(n=>{if(!n.tileLayer)return r.push(n),n;let i=n.tileLayer.getTile(this.sourceTile.key),a=null==i?void 0:i.getLayers()[0];a&&r.push(a);}),r;}addTileMask(){var n=this;return(0,l.default)(function*(){let r=new _.default({name:"mask",visible:!0,enablePicking:!1}).source({type:"FeatureCollection",features:[n.sourceTile.bboxPolygon]},{parser:{type:"geojson",featureId:"id"}}).shape("fill").color("#0f0").style({opacity:.5}),i=(0,o.createLayerContainer)(n.parent.container);r.setContainer(i),yield r.init(),n.tileMask=r;let a=n.getMainLayer();return void 0!==a&&(a.tileMask=r),r;})();}addMask(n,r){var i=this;return(0,l.default)(function*(){let a=(0,o.createLayerContainer)(i.parent.container);r.setContainer(a),yield r.init(),n.addMask(r),i.tileMaskLayers.push(r);})();}addLayer(n){var r=this;return(0,l.default)(function*(){n.isTileLayer=!0;let i=(0,o.createLayerContainer)(r.parent.container);n.setContainer(i),r.layers.push(n),yield n.init();})();}updateVisible(n){this.visible=n,this.updateOptions("visible",n);}updateOptions(n,r){this.layers.forEach(i=>{i.updateLayerConfig({[n]:r});});}getMainLayer(){return this.layers[0];}getFeatures(n){return[];}getFeatureById(n){return[];}destroy(){var n;null===(n=this.tileMask)||void 0===n||n.destroy(),this.layers.forEach(n=>n.destroy());}}class x extends b{initTileLayer(){var n=this;return(0,l.default)(function*(){let r=n.getSourceOption(),i=r.data.features[0].properties,a=new c.default().source(r.data,r.options).size(1).shape("line").color("red"),o=new d.default({minZoom:n.z-1,maxZoom:n.z+1,textAllowOverlap:!0}).source([i],{parser:{type:"json",x:"x",y:"y"}}).size(20).color("red").shape(n.key).style({stroke:"#fff",strokeWidth:2});yield n.addLayer(a),yield n.addLayer(o),n.isLoaded=!0;})();}getSourceOption(){let n=this.parent.getSource();return{data:{type:"FeatureCollection",features:this.sourceTile.data.layers.testTile.features},options:{parser:{type:"geojson"},transforms:n.transforms}};}}var E=i("f653f760"),w=a._(E);class S extends b{initTileLayer(){var n=this;return(0,l.default)(function*(){let r=n.parent.getLayerAttributeConfig(),i=n.getLayerOptions(),a=n.getSourceOption(),o=new w.default((0,p.default)({},i)).source(a.data,a.options);r&&Object.keys(r).forEach(n=>{var i,a;o[n](null===(i=r[n])||void 0===i?void 0:i.field,null===(a=r[n])||void 0===a?void 0:a.values);}),yield n.addLayer(o),n.isLoaded=!0;})();}getSourceOption(){let n=this.parent.getSource();return{data:this.sourceTile.data,options:{parser:{type:"image",extent:this.sourceTile.bounds},transforms:n.transforms}};}}var T=i("7d31d91a"),A=a._(T);class C extends b{initTileLayer(){var n=this;return(0,l.default)(function*(){let r=n.parent.getLayerAttributeConfig(),i=n.getLayerOptions(),a=n.getSourceOption(),o=new A.default((0,p.default)({},i)).source(a.data,a.options);r&&Object.keys(r).forEach(n=>{var i,a;o[n](null===(i=r[n])||void 0===i?void 0:i.field,null===(a=r[n])||void 0===a?void 0:a.values);}),yield n.addLayer(o),n.isLoaded=!0;})();}getFeatures(n){return n?this.sourceTile.data.getTileData(n):[];}getSourceOption(){let n=this.parent.getSource(),{sourceLayer:r,featureId:i}=this.parent.getLayerConfig();return{data:{type:"FeatureCollection",features:this.getFeatures(r)},options:{parser:{type:"geojson",featureId:i},transforms:n.transforms}};}}var O=i("613f75ca"),M=a._(O),R=i("d105ec89"),P=a._(R);let k=["rasterData"];class I extends b{initTileLayer(){var n=this;return(0,l.default)(function*(){let r=n.parent.getLayerAttributeConfig(),i=n.getLayerOptions(),a=n.getSourceOption(),o=new P.default((0,p.default)({},i)).source(a.data,a.options);r&&Object.keys(r).forEach(n=>{var i,a;o[n](null===(i=r[n])||void 0===i?void 0:i.field,null===(a=r[n])||void 0===a?void 0:a.values);}),yield n.addLayer(o),n.isLoaded=!0;})();}getSourceOption(){let n=this.parent.getSource(),r=this.sourceTile.data.data,{rasterData:i}=r,a=(0,M.default)(r,k);return{data:i,options:{parser:(0,p.default)({type:"rasterRgb",extent:this.sourceTile.bounds},a),transforms:n.transforms}};}}class L extends b{initTileLayer(){var n=this;return(0,l.default)(function*(){let r=n.parent.getLayerAttributeConfig(),i=n.getLayerOptions(),a=n.getSourceOption(),o=new P.default((0,p.default)({},i)).source(a.data,a.options);r&&Object.keys(r).forEach(n=>{var i,a;o[n](null===(i=r[n])||void 0===i?void 0:i.field,null===(a=r[n])||void 0===a?void 0:a.values);}),yield n.addLayer(o),n.isLoaded=!0;})();}getSourceOption(){let n=this.parent.getSource();return{data:this.sourceTile.data,options:{parser:{type:"image",extent:this.sourceTile.bounds},transforms:n.transforms}};}}var N=i("9479dab9");let D=["rasterData"],F={positions:[0,1],colors:["#000","#fff"]};class B extends b{constructor(...n){super(...n),(0,g.default)(this,"colorTexture",void 0);}initTileLayer(){var n=this;return(0,l.default)(function*(){let r=n.parent.getLayerAttributeConfig(),i=n.getLayerOptions(),a=n.getSourceOption(),{rampColors:o,domain:s}=n.getLayerOptions();n.colorTexture=n.parent.textureService.getColorTexture(o,s);let l=new P.default((0,p.default)((0,p.default)({},i),{},{colorTexture:n.colorTexture})).source(a.data,a.options);r&&Object.keys(r).forEach(n=>{var i,a;l[n](null===(i=r[n])||void 0===i?void 0:i.field,null===(a=r[n])||void 0===a?void 0:a.values);}),yield n.addLayer(l),n.isLoaded=!0;})();}getSourceOption(){let n=this.parent.getSource(),r=this.sourceTile.data.data,{rasterData:i}=r,a=(0,M.default)(r,D);return{data:i,options:{parser:(0,p.default)({type:"raster",extent:this.sourceTile.bounds},a),transforms:n.transforms}};}styleUpdate(...n){let{rampColors:r=F,domain:i}=n;this.colorTexture=this.parent.textureService.getColorTexture(r,i||(0,N.getDefaultDomain)(r)),this.layers.forEach(n=>n.style({colorTexture:this.colorTexture}));}destroy(){this.layers.forEach(n=>n.destroy());}}class j extends b{initTileLayer(){var n=this;return(0,l.default)(function*(){var r;let i=n.parent.getLayerAttributeConfig(),a=n.getLayerOptions(),o="PolygonLayer"===(r=n.parent.type)?_.default:"LineLayer"===r?c.default:d.default,s=n.getSourceOption();if(!s){n.isLoaded=!0,n.emit("loaded");return;}let l=new o((0,p.default)({},a)).source(s.data,s.options);Object.keys(i).forEach(n=>{var r,a;l[n](null===(r=i[n])||void 0===r?void 0:r.field,null===(a=i[n])||void 0===a?void 0:a.values);}),yield n.addLayer(l),a.tileMask&&(yield n.addTileMask()),n.setLayerMinMaxZoom(l),n.isLoaded=!0,n.emit("loaded");})();}getSourceOption(){let n=this.parent.getSource(),{sourceLayer:r="defaultLayer",featureId:i="id"}=this.parent.getLayerConfig();return{data:{type:"FeatureCollection",features:this.getFeatures(r)},options:{parser:{type:"geojson",featureId:i},transforms:n.transforms}};}setLayerMinMaxZoom(n){"text"===n.getModelType()&&n.updateLayerConfig({maxZoom:this.z+1,minZoom:this.z-1});}getFeatures(n){return this.sourceTile.data.getTileData(n);}getFeatureById(n){let r=this.getMainLayer();return r?r.getSource().data.dataArray.filter(r=>r._id===n):[];}}function z(n){switch(n.type){case"PolygonLayer":case"LineLayer":case"PointLayer":return j;case"TileDebugLayer":return x;case"MaskLayer":return C;case"RasterLayer":let{dataType:r}=n.getSource().parser;switch(r){case o.RasterTileType.RGB:case o.RasterTileType.CUSTOMRGB:return I;case o.RasterTileType.ARRAYBUFFER:case o.RasterTileType.CUSTOMARRAYBUFFER:return B;case o.RasterTileType.TERRAINRGB:case o.RasterTileType.CUSTOMTERRAINRGB:return L;default:return S;}default:return j;}}},"23ec6b43":function(n,r,i){var a=i("ca53fc7e");n.exports=function(n,r){return a(n,r);};},"2483f485":function(n,r,i){var a=i("f5e08e2b"),o=i("72a58360"),s=Object.hasOwnProperty,l=Object.create(null);for(var u in a)s.call(a,u)&&(l[a[u]]=u);var c=n.exports={to:{},get:{}};function f(n,r,i){return Math.min(Math.max(r,n),i);}function d(n){var r=Math.round(n).toString(16).toUpperCase();return r.length<2?"0"+r:r;}c.get=function(n){var r,i;switch(n.substring(0,3).toLowerCase()){case"hsl":r=c.get.hsl(n),i="hsl";break;case"hwb":r=c.get.hwb(n),i="hwb";break;default:r=c.get.rgb(n),i="rgb";}return r?{model:i,value:r}:null;},c.get.rgb=function(n){if(!n)return null;var r,i,o,l=[0,0,0,1];if(r=n.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(i=0,o=r[2],r=r[1];i<3;i++){var u=2*i;l[i]=parseInt(r.slice(u,u+2),16);}o&&(l[3]=parseInt(o,16)/255);}else if(r=n.match(/^#([a-f0-9]{3,4})$/i)){for(i=0,o=(r=r[1])[3];i<3;i++)l[i]=parseInt(r[i]+r[i],16);o&&(l[3]=parseInt(o+o,16)/255);}else if(r=n.match(/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)){for(i=0;i<3;i++)l[i]=parseInt(r[i+1],0);r[4]&&(r[5]?l[3]=.01*parseFloat(r[4]):l[3]=parseFloat(r[4]));}else if(r=n.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)){for(i=0;i<3;i++)l[i]=Math.round(2.55*parseFloat(r[i+1]));r[4]&&(r[5]?l[3]=.01*parseFloat(r[4]):l[3]=parseFloat(r[4]));}else if(!(r=n.match(/^(\w+)$/)))return null;else return"transparent"===r[1]?[0,0,0,0]:s.call(a,r[1])?((l=a[r[1]])[3]=1,l):null;for(i=0;i<3;i++)l[i]=f(l[i],0,255);return l[3]=f(l[3],0,1),l;},c.get.hsl=function(n){if(!n)return null;var r=n.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(r){var i=parseFloat(r[4]);return[(parseFloat(r[1])%360+360)%360,f(parseFloat(r[2]),0,100),f(parseFloat(r[3]),0,100),f(isNaN(i)?1:i,0,1)];}return null;},c.get.hwb=function(n){if(!n)return null;var r=n.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(r){var i=parseFloat(r[4]);return[(parseFloat(r[1])%360+360)%360,f(parseFloat(r[2]),0,100),f(parseFloat(r[3]),0,100),f(isNaN(i)?1:i,0,1)];}return null;},c.to.hex=function(){var n=o(arguments);return"#"+d(n[0])+d(n[1])+d(n[2])+(n[3]<1?d(Math.round(255*n[3])):"");},c.to.rgb=function(){var n=o(arguments);return n.length<4||1===n[3]?"rgb("+Math.round(n[0])+", "+Math.round(n[1])+", "+Math.round(n[2])+")":"rgba("+Math.round(n[0])+", "+Math.round(n[1])+", "+Math.round(n[2])+", "+n[3]+")";},c.to.rgb.percent=function(){var n=o(arguments),r=Math.round(n[0]/255*100),i=Math.round(n[1]/255*100),a=Math.round(n[2]/255*100);return n.length<4||1===n[3]?"rgb("+r+"%, "+i+"%, "+a+"%)":"rgba("+r+"%, "+i+"%, "+a+"%, "+n[3]+")";},c.to.hsl=function(){var n=o(arguments);return n.length<4||1===n[3]?"hsl("+n[0]+", "+n[1]+"%, "+n[2]+"%)":"hsla("+n[0]+", "+n[1]+"%, "+n[2]+"%, "+n[3]+")";},c.to.hwb=function(){var n=o(arguments),r="";return n.length>=4&&1!==n[3]&&(r=", "+n[3]),"hwb("+n[0]+", "+n[1]+"%, "+n[2]+"%"+r+")";},c.to.keyword=function(n){return l[n.slice(0,3)];};},"254c8ced":function(n,r,i){"use strict";var a;i.d(r,"__esModule",{value:!0}),i.d(r,"InteractionEvent",{enumerable:!0,get:function(){return o;}});let o=((a={}).Hover="hover",a.Click="click",a.Select="select",a.Active="active",a.Drag="drag",a);},"2569b57a":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{AsyncSeriesBailHook:function(){return en;},AsyncSeriesHook:function(){return et;},AsyncWaterfallHook:function(){return er;},SyncBailHook:function(){return ee;},SyncHook:function(){return $;}});let a=i("1054d627");function o(n,r,i,a){return new(i||(i=Promise))(function(o,s){function l(n){try{c(a.next(n));}catch(n){s(n);}}function u(n){try{c(a.throw(n));}catch(n){s(n);}}function c(n){var r;n.done?o(n.value):((r=n.value)instanceof i?r:new i(function(n){n(r);})).then(l,u);}c((a=a.apply(n,r||[])).next());});}function s(n,r){var i,a,o,s,l={label:0,sent:function(){if(1&o[0])throw o[1];return o[1];},trys:[],ops:[]};return s={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this;}),s;function u(s){return function(u){return function(s){if(i)throw TypeError("Generator is already executing.");for(;l;)try{if(i=1,a&&(o=2&s[0]?a.return:s[0]?a.throw||((o=a.return)&&o.call(a),0):a.next)&&!(o=o.call(a,s[1])).done)return o;switch(a=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return l.label++,{value:s[1],done:!1};case 5:l.label++,a=s[1],s=[0];continue;case 7:s=l.ops.pop(),l.trys.pop();continue;default:if(!(o=(o=l.trys).length>0&&o[o.length-1])&&(6===s[0]||2===s[0])){l=0;continue;}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]0)&&!(a=s.next()).done;)l.push(a.value);}catch(n){o={error:n};}finally{try{a&&!a.done&&(i=s.return)&&i.call(s);}finally{if(o)throw o.error;}}return l;}function u(n,r,i){if(i||2==arguments.length)for(var a,o=0,s=r.length;o=0&&n.length%1==0;},T.exports=h.default;var A={},C={exports:{}},O={exports:{}};Object.defineProperty(p=O.exports,"__esModule",{value:!0}),p.default=function(n){return function(){for(var r=[],i=arguments.length;i--;)r[i]=arguments[i];var a=r.pop();return n.call(this,r,a);};},O.exports=p.default;var M={};Object.defineProperty(M,"__esModule",{value:!0}),M.fallback=I,M.wrap=L;var R=M.hasQueueMicrotask="function"==typeof queueMicrotask&&queueMicrotask,P=M.hasSetImmediate="function"==typeof setImmediate&&setImmediate,k=M.hasNextTick="object"==typeof a&&"function"==typeof a.nextTick;function I(n){setTimeout(n,0);}function L(n){return function(r){for(var i=[],a=arguments.length-1;a-- >0;)i[a]=arguments[a+1];return n(function(){return r.apply(void 0,i);});};}E=R?queueMicrotask:P?setImmediate:k?a.nextTick:I,M.default=L(E),function(n,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=function(n){return(0,A.isAsync)(n)?function(){for(var r=[],i=arguments.length;i--;)r[i]=arguments[i];var a=r.pop();return s(n.apply(this,r),a);}:(0,i.default)(function(r,i){var a;try{a=n.apply(this,r);}catch(n){return i(n);}if(a&&"function"==typeof a.then)return s(a,i);i(null,a);});};var i=o(O.exports),a=o(M);function o(n){return n&&n.__esModule?n:{default:n};}function s(n,r){return n.then(function(n){l(r,null,n);},function(n){l(r,n&&n.message?n:Error(n));});}function l(n,r,i){try{n(r,i);}catch(n){(0,a.default)(function(n){throw n;},n);}}n.exports=r.default;}(C,C.exports),Object.defineProperty(A,"__esModule",{value:!0}),A.isAsyncIterable=A.isAsyncGenerator=A.isAsync=void 0;var N=(f=C.exports)&&f.__esModule?f:{default:f};function D(n){return"AsyncFunction"===n[Symbol.toStringTag];}A.default=function(n){if("function"!=typeof n)throw Error("expected a function");return D(n)?(0,N.default)(n):n;},A.isAsync=D,A.isAsyncGenerator=function(n){return"AsyncGenerator"===n[Symbol.toStringTag];},A.isAsyncIterable=function(n){return"function"==typeof n[Symbol.asyncIterator];};var F={exports:{}};Object.defineProperty(m=F.exports,"__esModule",{value:!0}),m.default=function(n,r){if(void 0===r&&(r=n.length),!r)throw Error("arity is undefined");return function(){for(var i=this,a=[],o=arguments.length;o--;)a[o]=arguments[o];return"function"==typeof a[r-1]?n.apply(this,a):new Promise(function(o,s){a[r-1]=function(n){for(var r=[],i=arguments.length-1;i-- >0;)r[i]=arguments[i+1];if(n)return s(n);o(r.length>1?r:r[0]);},n.apply(i,a);});};},F.exports=m.default,function(n,r){Object.defineProperty(r,"__esModule",{value:!0});var i=s(T.exports),a=s(A),o=s(F.exports);function s(n){return n&&n.__esModule?n:{default:n};}r.default=(0,o.default)(function(n,r,o){var s=(0,i.default)(r)?[]:{};n(r,function(n,r,i){(0,a.default)(n)(function(n){for(var a=[],o=arguments.length-1;o-- >0;)a[o]=arguments[o+1];a.length<2&&(a=a[0]),s[r]=a,i(n);});},function(n){return o(n,s);});},3),n.exports=r.default;}(S,S.exports);var B={exports:{}},j={exports:{}},z={exports:{}},U={exports:{}};Object.defineProperty(g=U.exports,"__esModule",{value:!0}),g.default=function(n){function r(){for(var r=[],i=arguments.length;i--;)r[i]=arguments[i];if(null!==n){var a=n;n=null,a.apply(this,r);}}return Object.assign(r,n),r;},U.exports=g.default;var V={exports:{}},G={exports:{}};Object.defineProperty(v=G.exports,"__esModule",{value:!0}),v.default=function(n){return n[Symbol.iterator]&&n[Symbol.iterator]();},G.exports=v.default,function(n,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=function(n){if((0,i.default)(n))return r=-1,o=n.length,function(){return++r=r||l||o||(l=!0,n.next().then(function(n){var r=n.value,h=n.done;if(!s&&!o){if(l=!1,h){o=!0,u<=0&&a(null);return;}u++,i(r,c,d),c++,f();}}).catch(h));}function d(n,r){if(u-=1,!s){if(n)return h(n);if(!1===n){o=!0,s=!0;return;}if(r===x.default||o&&u<=0)return o=!0,a(null);f();}}function h(n){s||(l=!1,o=!0,a(n));}f();},x=(d=X.exports)&&d.__esModule?d:{default:d},W.exports=b.default,function(n,r){Object.defineProperty(r,"__esModule",{value:!0});var i=u(U.exports),a=u(V.exports),o=u(H.exports),s=u(W.exports),l=u(X.exports);function u(n){return n&&n.__esModule?n:{default:n};}r.default=function(n){return function(r,u,c){if(c=(0,i.default)(c),n<=0)throw RangeError("concurrency limit cannot be less than 1");if(!r)return c(null);if((0,A.isAsyncGenerator)(r))return(0,s.default)(r,n,u,c);if((0,A.isAsyncIterable)(r))return(0,s.default)(r[Symbol.asyncIterator](),n,u,c);var f=(0,a.default)(r),d=!1,h=!1,p=0,m=!1;function g(n,r){if(!h){if(p-=1,n)d=!0,c(n);else if(!1===n)d=!0,h=!0;else{if(r===l.default||d&&p<=0)return d=!0,c(null);m||v();}}}function v(){for(m=!0;p0;)a[o]=arguments[o+1];if(!1!==i){if(i||s===n.length)return r.apply(void 0,[i].concat(a));l(a);}}l([]);}),n.exports=r.default;}(Q,Q.exports);var J=c(Q.exports);!function(){function n(){this.tasks=[];}n.prototype.call=function(){return J(this.tasks);},n.prototype.tap=function(n,r){0===this.tasks.length?this.tasks.push(function(n){var i=r();n(!!i&&null,i);}):this.tasks.push(function(i,a){a(!!r.apply(void 0,u([],l(i),!1))&&null,n);});};}();var ee=function(){function n(){this.tasks=[];}return n.prototype.call=function(){return q(this.tasks);},n.prototype.tap=function(n,r){this.tasks.push(function(i){i(r(),n);});},n;}(),et=function(){function n(){this.args=[],this.tasks=[];}return n.prototype.promise=function(){for(var n=arguments,r=[],i=0;i0&&(l=1/Math.sqrt(l)),n[0]=i*l,n[1]=a*l,n[2]=o*l,n[3]=s*l,n;}function v(n,r){return n[0]*r[0]+n[1]*r[1]+n[2]*r[2]+n[3]*r[3];}function y(n,r,i,a){var o=r[0],s=r[1],l=r[2],u=r[3];return n[0]=o+a*(i[0]-o),n[1]=s+a*(i[1]-s),n[2]=l+a*(i[2]-l),n[3]=u+a*(i[3]-u),n;}function _(n,r,i){var a=r[0],o=r[1],s=r[2],l=r[3];return n[0]=i[0]*a+i[4]*o+i[8]*s+i[12]*l,n[1]=i[1]*a+i[5]*o+i[9]*s+i[13]*l,n[2]=i[2]*a+i[6]*o+i[10]*s+i[14]*l,n[3]=i[3]*a+i[7]*o+i[11]*s+i[15]*l,n;}function b(n,r){return n[0]===r[0]&&n[1]===r[1]&&n[2]===r[2]&&n[3]===r[3];}function x(n,r){var i=n[0],a=n[1],s=n[2],l=n[3],u=r[0],c=r[1],f=r[2],d=r[3];return Math.abs(i-u)<=o.EPSILON*Math.max(1,Math.abs(i),Math.abs(u))&&Math.abs(a-c)<=o.EPSILON*Math.max(1,Math.abs(a),Math.abs(c))&&Math.abs(s-f)<=o.EPSILON*Math.max(1,Math.abs(s),Math.abs(f))&&Math.abs(l-d)<=o.EPSILON*Math.max(1,Math.abs(l),Math.abs(d));}var E=(a=s(),function(n,r,i,o,s,l){var u,c;for(r||(r=4),i||(i=0),c=o?Math.min(o*r+i,n.length):n.length,u=i;u0?1:n<0?-1:0;},w=Math.sqrt,S=Math.tan;function T(n){return n>1?0:n<-1?s:Math.acos(n);}function A(n){return n>1?l:n<-1?-l:Math.asin(n);}},"2843bd80":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"createElement",{enumerable:!0,get:function(){return o;}});var a=i("5e195043");function o(n){let r="function"==typeof n?n:n.render;return class extends a.CustomElement{connectedCallback(){this.draw();}attributeChangedCallback(){this.draw();}draw(){r(this);}};}},29196330:function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return o;}});var a=i("852bbaa9")._(i("609f48be"));function o(n,r,i,o){return a.useMemo(function(){if(null!=i&&i.size){for(var a=[],s=0;s<(null==n?void 0:n.length);s+=1)!function n(r,i,a,o,s,l,u){var c=l(i,u);r.push({record:i,indent:a,index:u,rowKey:c});var f=null==s?void 0:s.has(c);if(i&&Array.isArray(i[o])&&f)for(var d=0;d0&&O[1]>0);var M=O[0]/C[0],R=O[1]/C[1],P=(h.right-h.left)/2/M,k=(h.bottom-h.top)/2/R,I=[(A[0]+T[0])/2+P,(A[1]+T[1])/2+k],L=S.unproject(I),N=S.zoom+Math.log2(Math.abs(Math.min(M,R)));return{longitude:L[0],latitude:L[1],zoom:Math.min(N,void 0===f?24:f)};}},"2a0a75c8":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"BlendTypes",{enumerable:!0,get:function(){return o;}});var a=i("553ee311");let o={[a.BlendType.additive]:{enable:!0,func:{srcRGB:a.gl.ONE,dstRGB:a.gl.ONE,srcAlpha:1,dstAlpha:1}},[a.BlendType.none]:{enable:!1},[a.BlendType.normal]:{enable:!0,func:{srcRGB:a.gl.SRC_ALPHA,dstRGB:a.gl.ONE_MINUS_SRC_ALPHA,srcAlpha:1,dstAlpha:1}},[a.BlendType.subtractive]:{enable:!0,func:{srcRGB:a.gl.ONE,dstRGB:a.gl.ONE,srcAlpha:a.gl.ZERO,dstAlpha:a.gl.ONE_MINUS_SRC_COLOR},equation:{rgb:a.gl.FUNC_SUBTRACT,alpha:a.gl.FUNC_SUBTRACT}},[a.BlendType.max]:{enable:!0,func:{srcRGB:a.gl.ONE,dstRGB:a.gl.ONE},equation:{rgb:a.gl.MAX_EXT}},[a.BlendType.min]:{enable:!0,func:{srcRGB:a.gl.ONE,dstRGB:a.gl.ONE},equation:{rgb:a.gl.MIN_EXT}}};},"2abeadd7":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return p;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("7cfeda15"),l=a._(s),u=i("609f48be"),c=o._(u),f={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm0 76c-205.4 0-372 166.6-372 372s166.6 372 372 372 372-166.6 372-372-166.6-372-372-372zm128.01 198.83c.03 0 .05.01.09.06l45.02 45.01a.2.2 0 01.05.09.12.12 0 010 .07c0 .02-.01.04-.05.08L557.25 512l127.87 127.86a.27.27 0 01.05.06v.02a.12.12 0 010 .07c0 .03-.01.05-.05.09l-45.02 45.02a.2.2 0 01-.09.05.12.12 0 01-.07 0c-.02 0-.04-.01-.08-.05L512 557.25 384.14 685.12c-.04.04-.06.05-.08.05a.12.12 0 01-.07 0c-.03 0-.05-.01-.09-.05l-45.02-45.02a.2.2 0 01-.05-.09.12.12 0 010-.07c0-.02.01-.04.06-.08L466.75 512 338.88 384.14a.27.27 0 01-.05-.06l-.01-.02a.12.12 0 010-.07c0-.03.01-.05.05-.09l45.02-45.02a.2.2 0 01.09-.05.12.12 0 01.07 0c.02 0 .04.01.08.06L512 466.75l127.86-127.86c.04-.05.06-.06.08-.06a.12.12 0 01.07 0z"}}]},name:"close-circle",theme:"outlined"},d=i("887aaf6c"),h=a._(d),p=c.forwardRef(function(n,r){return c.createElement(h.default,(0,l.default)({},n,{ref:r,icon:f}));});},"2ae24c78":function(n,r,i){n.exports=function(n){var r=-1,i=Array(n.size);return n.forEach(function(n,a){i[++r]=[a,n];}),i;};},"2c0045d4":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{CATEGORY_DEFAULT_OPTIONS:function(){return c;},CLASS_NAMES:function(){return h;},CONTINUOUS_DEFAULT_OPTIONS:function(){return f;},LEGEND_BASE_DEFAULT_OPTIONS:function(){return u;},STEP_RATIO:function(){return d;}});var a=i("fc81244b"),o=i("ca2da9d1"),s=i("a63b8d99"),l=i("572a6e2f"),u={showTitle:!0,padding:0,orientation:"horizontal",backgroundFill:"transparent",titleText:"",titleSpacing:4,titlePosition:"top-left",titleFill:"#2C3542",titleFontWeight:"bold",titleFontFamily:"sans-serif",titleFontSize:12},c=(0,o.deepAssign)({},u,{}),f=(0,o.deepAssign)({},u,(0,s.superStyleProps)(l.DEFAULT_HANDLE_CFG,"handle"),{color:["#d0e3fa","#acc7f6","#8daaf2","#6d8eea","#4d73cd","#325bb1","#5a3e75","#8c3c79","#e23455","#e7655b"],indicatorBackgroundFill:"#262626",indicatorLabelFill:"white",indicatorLabelFontSize:12,indicatorVisibility:"hidden",labelAlign:"value",labelDirection:"positive",labelSpacing:5,showHandle:!0,showIndicator:!0,showLabel:!0,slidable:!0,titleText:"",type:"continuous"}),d=.01,h=(0,a.classNames)({title:"title",titleGroup:"title-group",items:"items",itemsGroup:"items-group",contentGroup:"content-group",ribbonGroup:"ribbon-group",ribbon:"ribbon",handlesGroup:"handles-group",handle:"handle",startHandle:"start-handle",endHandle:"end-handle",labelGroup:"label-group",label:"label",indicator:"indicator"},"legend");},"2cb3cf04":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{ANNOTATION_LIST:function(){return v;},CHART_OPTIONS:function(){return l;},CONFIG_SHAPE:function(){return m;},SKIP_DEL_CUSTOM_SIGN:function(){return f;},SPECIAL_OPTIONS:function(){return g;},TRANSFORM_OPTION_KEY:function(){return h;},TRANSFORM_SIGN:function(){return c;},VIEW_OPTIONS:function(){return u;}});var a=i("d8554caa"),o=this&&this.__assign||function(){return(o=Object.assign||function(n){for(var r,i=1,a=arguments.length;ir.indexOf(a)&&(i[a]=n[a]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,a=Object.getOwnPropertySymbols(n);or.indexOf(a[o])&&Object.prototype.propertyIsEnumerable.call(n,a[o])&&(i[a[o]]=n[a[o]]);return i;},l=["renderer"],u=["width","height","autoFit","theme","inset","insetLeft","insetRight","insetTop","insetBottom","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","margin","marginTop","marginRight","marginBottom","marginLeft","depth","title","clip","children","type","data","direction"],c="__transform__",f="__skipDelCustomKeys__",d=function(n,r){return(0,a.isBoolean)(r)?{type:n,available:r}:o({type:n},r);},h={xField:"encode.x",yField:"encode.y",colorField:"encode.color",angleField:"encode.y",keyField:"encode.key",y1Field:"encode.y1",sizeField:"encode.size",setsField:"encode.sets",shapeField:"encode.shape",seriesField:"encode.series",positionField:"encode.position",textField:"encode.text",valueField:"encode.value",binField:"encode.x",srcField:"encode.src",linkColorField:"encode.linkColor",fontSizeField:"encode.fontSize",coordinateType:"coordinate.type",radius:"coordinate.outerRadius",innerRadius:"coordinate.innerRadius",startAngle:"coordinate.startAngle",endAngle:"coordinate.endAngle",focusX:"coordinate.focusX",focusY:"coordinate.focusY",distortionX:"coordinate.distortionX",distortionY:"coordinate.distortionY",visual:"coordinate.visual",stack:{target:"transform",value:function(n){return d("stackY",n);}},normalize:{target:"transform",value:function(n){return d("normalizeY",n);}},percent:{target:"transform",value:function(n){return d("normalizeY",n);}},group:{target:"transform",value:function(n){return d("dodgeX",n);}},sort:{target:"transform",value:function(n){return d("sortX",n);}},symmetry:{target:"transform",value:function(n){return d("symmetryY",n);}},diff:{target:"transform",value:function(n){return d("diffY",n);}},meta:{target:"scale",value:function(n){return n;}},label:{target:"labels",value:function(n){return n;}},shape:"style.shape",connectNulls:{target:"style",value:function(n){return(0,a.isBoolean)(n)?{connect:n}:n;}},transpose:{target:"transpose",value:function(n){return d("transpose",n);}}},p=["xField","yField","seriesField","colorField","shapeField","keyField","positionField","meta","tooltip","animate","stack","normalize","percent","group","sort","symmetry","diff"],m=[{key:"annotations",extendedProperties:[]},{key:"line",type:"line",extendedProperties:p},{key:"connector",type:"connector",extendedProperties:[]},{key:"point",type:"point",extendedProperties:p,defaultShapeConfig:{shapeField:"circle"}},{key:"area",type:"area",extendedProperties:p}],g=[{key:"transform",callback:function(n,r,i){n[r]=n[r]||[];var a,l=i.available,u=s(i,["available"]);if(void 0===l||l)n[r].push(o(((a={})[c]=!0,a),u));else{var f=n[r].indexOf(function(n){return n.type===i.type;});-1!==f&&n[r].splice(f,1);}}},{key:"labels",callback:function(n,r,i){var s;if(!i||(0,a.isArray)(i)){n[r]=i||[];return;}i.text||(i.text=n.yField),n[r]=n[r]||[],n[r].push(o(((s={})[c]=!0,s),i));}},{key:"transpose",callback:function(n,r,i){var a;i.available?n.coordinate={transform:[o(((a={})[c]=!0,a),i)]}:n.coordinate={};}}],v=[{key:"conversionTag",shape:"ConversionTag"},{key:"axisText",shape:"BidirectionalBarAxisText"}];},"2cc7f81c":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return s;}});var a=i("777fffbe")._(i("6a859b73")),o="object"==typeof self&&self&&self.Object===Object&&self,s=a.default||o||Function("return this")();},"2d19bd14":function(n,r,i){var a=i("bbc15be8"),o=i("07ba0bdb"),s=i("7700f5ce"),l=i("cd32a75b");n.exports=function(n,r){return a(n)?n:o(n,r)?[n]:s(l(n));};},"2de3468c":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{LegendContinuous:function(){return J;}});var a=i("777fffbe"),o=i("5e195043"),s=i("3862611d"),l=i("c2287686"),u=i("3715e357"),c=a._(u),f=i("6aaf503e"),d=a._(f),h=i("47a6bde3"),p=i("920dd2bf"),m=i("ca2da9d1"),g=i("f65342ee"),v=i("f1d8aa22"),y=i("a602d54e"),_=i("b0ea517f"),b=i("a63b8d99"),x=i("880f07e8"),E=i("750ce7b9"),w=i("a46fcb64"),S=i("fc81244b"),T=i("a125f0ec"),A=i("1915def0"),C=i("611ea1fe"),O={backgroundFill:"#262626",backgroundLineCap:"round",backgroundLineWidth:1,backgroundStroke:"#333",backgroundZIndex:-1,formatter:function(n){return n.toString();},labelFill:"#fff",labelFontSize:12,labelTextBaseline:"middle",padding:[2,4],position:"right",radius:0,zIndex:999},M=(0,S.classNames)({background:"background",labelGroup:"label-group",label:"label"},"indicator"),R=function(n){function r(r){var i=n.call(this,r,O)||this;return i.point=[0,0],i.group=i.appendChild(new o.Group({})),i.isMutationObserved=!0,i;}return(0,s.__extends)(r,n),r.prototype.renderBackground=function(){if(this.label){var n=this.attributes,r=n.position,i=n.padding,a=(0,s.__read)((0,A.parseSeriesAttr)(i),4),o=a[0],l=a[1],u=a[2],c=a[3],f=this.label.node().getLocalBounds(),d=f.min,h=f.max,m=new p.BBox(d[0]-c,d[1]-o,h[0]+l-d[0]+c,h[1]+u-d[1]+o),g=this.getPath(r,m),v=(0,b.subStyleProps)(this.attributes,"background");this.background=(0,_.select)(this.group).maybeAppendByClassName(M.background,"path").styles((0,s.__assign)((0,s.__assign)({},v),{d:g})),this.group.appendChild(this.label.node());}},r.prototype.renderLabel=function(){var n=this.attributes,r=n.formatter,i=n.labelText,a=(0,b.subStyleProps)(this.attributes,"label"),o=(0,s.__read)((0,b.splitStyle)(a),2),l=o[0],u=o[1],c=(l.text,(0,s.__rest)(l,["text"]));this.label=(0,_.select)(this.group).maybeAppendByClassName(M.labelGroup,"g").styles(u),i&&this.label.maybeAppendByClassName(M.label,function(){return(0,C.renderExtDo)(r(i));}).style("text",r(i).toString()).selectAll("text").styles(c);},r.prototype.adjustLayout=function(){var n=(0,s.__read)(this.point,2),r=n[0],i=n[1],a=this.attributes,o=a.x,l=a.y;this.group.attr("transform","translate(".concat(o-r,", ").concat(l-i,")"));},r.prototype.getPath=function(n,r){var i=this.attributes.radius,a=r.x,o=r.y,l=r.width,u=r.height,c=[["M",a+i,o],["L",a+l-i,o],["A",i,i,0,0,1,a+l,o+i],["L",a+l,o+u-i],["A",i,i,0,0,1,a+l-i,o+u],["L",a+i,o+u],["A",i,i,0,0,1,a,o+u-i],["L",a,o+i],["A",i,i,0,0,1,a+i,o],["Z"]],f={top:4,right:6,bottom:0,left:2}[n],d=this.createCorner([c[f].slice(-2),c[f+1].slice(-2)]);return c.splice.apply(c,(0,s.__spreadArray)([f+1,1],(0,s.__read)(d),!1)),c[0][0]="M",c;},r.prototype.createCorner=function(n,r){void 0===r&&(r=10);var i=T.isHorizontal.apply(void 0,(0,s.__spreadArray)([],(0,s.__read)(n),!1)),a=(0,s.__read)(n,2),o=(0,s.__read)(a[0],2),l=o[0],u=o[1],c=(0,s.__read)(a[1],2),f=c[0],d=c[1],h=(0,s.__read)(i?[f-l,[l,f]]:[d-u,[u,d]],2),p=h[0],m=(0,s.__read)(h[1],2),g=m[0],v=m[1],y=p/2,_=p/Math.abs(p)*r,b=_/2,x=_*Math.sqrt(3)/2*.8,E=(0,s.__read)([g,g+y-b,g+y,g+y+b,v],5),w=E[0],S=E[1],A=E[2],C=E[3],O=E[4];return i?(this.point=[A,u-x],[["L",w,u],["L",S,u],["L",A,u-x],["L",C,u],["L",O,u]]):(this.point=[l+x,A],[["L",l,w],["L",l,S],["L",l+x,A],["L",l,C],["L",l,O]]);},r.prototype.applyVisibility=function(){"hidden"===this.attributes.visibility?(0,v.hide)(this):(0,v.show)(this);},r.prototype.bindEvents=function(){this.label.on(o.ElementEvent.BOUNDS_CHANGED,this.renderBackground);},r.prototype.render=function(){this.renderLabel(),this.renderBackground(),this.adjustLayout(),this.applyVisibility();},r;}(h.Component),P=i("16d095ff"),k=i("b7c9e889"),I=i("2c0045d4"),L=i("572a6e2f"),N=i("da5c7e2c"),D=a._(N),F=i("ceab2f6b");function B(n,r){var i=(0,s.__read)(function(n,r){for(var i=1;i=a&&r<=o)return[a,o];}return[r,r];}(n,r),2),a=i[0],o=i[1];return{tick:r>(a+o)/2?o:a,range:[a,o]};}var j=(0,S.classNames)({trackGroup:"background-group",track:"background",selectionGroup:"ribbon-group",selection:"ribbon",clipPath:"clip-path"},"ribbon");function z(n){var r=n.orientation,i=n.size,a=n.length;return(0,F.ifHorizontal)(r,[a,i],[i,a]);}function U(n){var r=n.type,i=(0,s.__read)(z(n),2),a=i[0],o=i[1];return"size"===r?[["M",0,o],["L",0+a,0],["L",0+a,o],["Z"]]:[["M",0,o],["L",0,0],["L",0+a,0],["L",0+a,o],["Z"]];}var V=function(n){function r(r){return n.call(this,r,{type:"color",orientation:"horizontal",size:30,range:[0,1],length:200,block:!1,partition:[],color:["#fff","#000"],trackFill:"#e5e5e5"})||this;}return(0,s.__extends)(r,n),r.prototype.render=function(n,r){var i,a,l,u,c,f,d,h,p,m,g,v,y,x,E;(function(n,r){var i=(0,b.subStyleProps)(r,"track");n.maybeAppendByClassName(j.track,"path").styles((0,s.__assign)({d:U(r)},i));})((0,_.select)(r).maybeAppendByClassName(j.trackGroup,"g"),n),i=(0,_.select)(r).maybeAppendByClassName(j.selectionGroup,"g"),a=(0,b.subStyleProps)(n,"selection"),m=(f=n).orientation,g=f.color,v=f.block,y=f.partition,x=(p=(0,D.default)(g)?Array(20).fill(0).map(function(n,r,i){return g(r/(i.length-1));}):g).length,E=p.map(function(n){return(0,o.parseColor)(n).toString();}),l=x?1===x?E[0]:v?(d=Array.from(E),Array(h=y.length).fill(0).reduce(function(n,r,i){var a=d[i%d.length];return n+" ".concat(y[i],":").concat(a).concat(iv?Math.max(h-c,0):Math.max((h-c-v)/_,0));var E=Math.max(y,f),w=m-E,S=(0,s.__read)(this.ifHorizontal([w,b],[b,w]),2),T=S[0],A=S[1],C=["top","left"].includes(x)?c:0,O=(0,s.__read)(this.ifHorizontal([E/2,C],[C,E/2]),2),M=O[0],R=O[1];return new p.BBox(M,R,T,A);},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"ribbonShape",{get:function(){var n=this.ribbonBBox,r=n.width,i=n.height;return this.ifHorizontal({size:i,length:r},{size:r,length:i});},enumerable:!1,configurable:!0}),r.prototype.renderRibbon=function(n){var r=this.attributes,i=r.data,a=r.type,o=r.orientation,s=r.color,l=r.block,u=(0,b.subStyleProps)(this.attributes,"ribbon"),c=this.range,f=c.min,d=c.max,h=this.ribbonBBox,p=h.x,g=h.y,v=this.ribbonShape,y=v.length,_=v.size,x=(0,m.deepAssign)({transform:"translate(".concat(p,", ").concat(g,")"),length:y,size:_,type:a,orientation:o,color:s,block:l,partition:i.map(function(n){return(n.value-f)/(d-f);}),range:this.ribbonRange},u);this.ribbon=n.maybeAppendByClassName(I.CLASS_NAMES.ribbon,function(){return new V({style:x});}).update(x);},r.prototype.getHandleClassName=function(n){return"".concat(I.CLASS_NAMES.prefix("".concat(n,"-handle")));},r.prototype.renderHandles=function(){var n=this.attributes,r=n.showHandle,i=n.orientation,a=(0,b.subStyleProps)(this.attributes,"handle"),o=(0,s.__read)(this.selection,2),l=o[0],u=o[1],c=(0,s.__assign)((0,s.__assign)({},a),{orientation:i}),f=a.shape,d="basic"===(void 0===f?"slider":f)?L.Handle:P.Handle,h=this;this.handlesGroup.selectAll(I.CLASS_NAMES.handle.class).data(r?[{value:l,type:"start"},{value:u,type:"end"}]:[],function(n){return n.type;}).join(function(n){return n.append(function(){return new d({style:c});}).attr("className",function(n){var r=n.type;return"".concat(I.CLASS_NAMES.handle," ").concat(h.getHandleClassName(r));}).each(function(n){var r=n.type,i=n.value;this.update({labelText:i}),h["".concat(r,"Handle")]=this,this.addEventListener("pointerdown",h.onDragStart(r));});},function(n){return n.update(c).each(function(n){var r=n.value;this.update({labelText:r});});},function(n){return n.each(function(n){var r=n.type;h["".concat(r,"Handle")]=void 0;}).remove();});},r.prototype.adjustHandles=function(){var n=(0,s.__read)(this.selection,2),r=n[0],i=n[1];this.setHandlePosition("start",r),this.setHandlePosition("end",i);},Object.defineProperty(r.prototype,"handleBBox",{get:function(){if(this.cacheHandleBBox)return this.cacheHandleBBox;if(!this.attributes.showHandle)return new p.BBox(0,0,0,0);var n=this.startHandle.getBBox(),r=n.width,i=n.height,a=this.endHandle.getBBox(),o=a.width,l=a.height,u=(0,s.__read)([Math.max(r,o),Math.max(i,l)],2),c=u[0],f=u[1];return this.cacheHandleBBox=new p.BBox(0,0,c,f),this.cacheHandleBBox;},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"handleShape",{get:function(){var n=this.handleBBox,r=n.width,i=n.height,a=(0,s.__read)(this.ifHorizontal([i,r],[r,i]),2);return{width:r,height:i,size:a[0],length:a[1]};},enumerable:!1,configurable:!0}),r.prototype.setHandlePosition=function(n,r){var i=this.attributes.handleFormatter,a=this.ribbonBBox,o=a.x,l=a.y,u=this.ribbonShape.size,c=this.getOffset(r),f=(0,s.__read)(this.ifHorizontal([o+c,l+u*this.handleOffsetRatio],[o+u*this.handleOffsetRatio,l+c]),2),d=f[0],h=f[1],p=this.handlesGroup.select(".".concat(this.getHandleClassName(n))).node();null==p||p.update({transform:"translate(".concat(d,", ").concat(h,")"),formatter:i});},r.prototype.renderIndicator=function(n){var r=(0,b.subStyleProps)(this.attributes,"indicator");this.indicator=n.maybeAppendByClassName(I.CLASS_NAMES.indicator,function(){return new R({});}).update(r);},Object.defineProperty(r.prototype,"labelData",{get:function(){var n=this;return this.attributes.data.reduce(function(r,i,a,o){var l,u,c=null!==(l=null==i?void 0:i.id)&&void 0!==l?l:a.toString();if(r.push((0,s.__assign)((0,s.__assign)({},i),{id:c,index:a,type:"value",label:null!==(u=null==i?void 0:i.label)&&void 0!==u?u:i.value.toString(),value:n.ribbonScale.map(i.value)})),ar.indexOf(a)&&(i[a]=n[a]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,a=Object.getOwnPropertySymbols(n);or.indexOf(a[o])&&Object.prototype.propertyIsEnumerable.call(n,a[o])&&(i[a[o]]=n[a[o]]);return i;};function Q(n){let{domain:r}=n.getOptions(),[i,a]=[r[0],(0,Y.lastOf)(r)];return[i,a];}let J=n=>{let{labelFormatter:r,layout:i,order:a,orientation:s,position:l,size:u,title:c,style:f,crossPadding:d,padding:h}=n,p=K(n,["labelFormatter","layout","order","orientation","position","size","title","style","crossPadding","padding"]);return({scales:a,value:s,theme:u,scale:d})=>{let{bbox:h}=s,{x:m,y:g,width:v,height:y}=h,_=(0,Z.inferComponentLayout)(l,i),{legendContinuous:b={}}=u,x=(0,Z.adaptor)(Object.assign({},b,Object.assign(Object.assign({titleText:(0,Z.titleContent)(c),labelAlign:"value",labelFormatter:"string"==typeof r?n=>(0,$.format)(r)(n.label):r},function(n,r,i,a,s,l){let u=(0,Z.scaleOf)(n,"color"),c=function(n,r,i){var a;let{size:o}=r,s=(0,Z.inferComponentShape)(n,r,i);return a=s.orientation,s.size=o,(0,Z.isHorizontal)(a)?s.height=o:s.width=o,s;}(i,a,s);if(u instanceof q.Threshold){let{range:n}=u.getOptions(),[r,i]=Q(u);return u instanceof X.Quantize||u instanceof W.Quantile?function(n,r,i,a,o){let s=r.thresholds;return Object.assign(Object.assign({},n),{color:o,data:[i,...s,a].map(n=>({value:n/a,label:String(n)}))});}(c,u,r,i,n):function(n,r,i){let a=[-1/0,...r.thresholds,1/0].map((n,r)=>({value:r,label:n}));return Object.assign(Object.assign({},n),{data:a,color:i,labelFilter:(n,r)=>r>0&&rvoid 0!==n).find(n=>!(n instanceof H.Constant)));return Object.assign(Object.assign({},n),{domain:[m,g],data:d.getTicks().map(n=>({value:n})),color:Array(Math.floor(u)).fill(0).map((n,r)=>{let i=(p-h)/(u-1)*r+h,o=d.map(i)||f,s=a?a.map(i):1;return o.replace(/rgb[a]*\(([\d]{1,3}) *, *([\d]{1,3}) *, *([\d]{1,3})[\S\s]*\)/,(n,r,i,a)=>`rgba(${r}, ${i}, ${a}, ${s})`);})});}(c,u,(0,Z.scaleOf)(n,"size"),(0,Z.scaleOf)(n,"opacity"),r,l);}(a,d,s,n,J,u)),f),p)),E=new Z.G2Layout({style:Object.assign(Object.assign({x:m,y:g,width:v,height:y},_),{subOptions:x})});return E.appendChild(new G({className:"legend-continuous",style:x})),E;};};J.props={defaultPosition:"top",defaultOrientation:"vertical",defaultOrder:1,defaultSize:60,defaultLength:200,defaultLegendSize:60,defaultPadding:[20,10],defaultCrossPadding:[12,12]};},"2e660475":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"ProForm",{enumerable:!0,get:function(){return h;}});var a=i("777fffbe"),o=a._(i("e4870cf0")),s=a._(i("f34e933b")),l=i("cd1e34ba"),u=i("a6284f72"),c=a._(i("da74b122")),f=a._(i("ef77f514")),d=i("dac8af92");function h(n){return(0,d.jsx)(l.BaseForm,(0,o.default)({layout:"vertical",contentRender:function(n,r){return(0,d.jsxs)(d.Fragment,{children:[n,r]});}},n));}h.Group=c.default,h.useForm=s.default.useForm,h.Item=f.default,h.useWatch=s.default.useWatch,h.ErrorList=s.default.ErrorList,h.Provider=s.default.Provider,h.useFormInstance=s.default.useFormInstance,h.EditOrReadOnlyContext=u.EditOrReadOnlyContext;},"2eaee10a":function(n,r,i){n.exports=function(n,r){if(null==n)return{};var i={};for(var a in n)if(({}).hasOwnProperty.call(n,a)){if(-1!==r.indexOf(a))continue;i[a]=n[a];}return i;},n.exports.__esModule=!0,n.exports.default=n.exports;},"2ef2ced3":function(n,r,i){function a(n){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n;}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n;})(n);}function o(n,r){void 0===r&&(r={});for(var i=function(n){for(var r=[],i=0;i=48&&l<=57||l>=65&&l<=90||l>=97&&l<=122||95===l){o+=n[s++];continue;}break;}if(!o)throw TypeError("Missing parameter name at "+i);r.push({type:"NAME",index:i,value:o}),i=s;continue;}if("("===a){var u=1,c="",s=i+1;if("?"===n[s])throw TypeError('Pattern cannot start with "?" at '+s);for(;s-1:void 0===x;o||(m+="(?:"+p+"(?="+h+"))?"),E||(m+="(?="+p+"|"+h+")");}return new RegExp(m,c(i));}function d(n,r,i){return n instanceof RegExp?function(n,r){if(!r)return n;var i=n.source.match(/\((?!\?)/g);if(i)for(var a=0;a{var a;return"g"!==n.tagName&&(null===(a=n.style)||void 0===a?void 0:a[r])!==void 0&&(i=n.style[r],!0);}),null!=i?i:o[r];}function l(n,r,i,a){n.style[r]=i,a&&n.children.forEach(n=>l(n,r,i,a));}function u(n){l(n,"visibility","hidden",!0);}function c(n){l(n,"visibility","visible",!0);}},"2f051558":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{mark:function(){return u;}});var a=i("d8554caa"),o=i("2cb3cf04"),s=this&&this.__assign||function(){return(s=Object.assign||function(n){for(var r,i=1,a=arguments.length;i()=>n;function o(n,r){var i=r-n;return i?function(r){return n+r*i;}:a(isNaN(n)?r:n);}},"30e56a71":function(n,r,i){var a=i("12787c53"),o=i("459d5e7d"),s=i("21446f8a");n.exports=function(n){return a(n,s,o);};},"30f8b1e3":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return u;}});var a=i("777fffbe"),o=a._(i("5ca9cae9")),s=a._(i("1daaa764")),l=a._(i("e9b37d7e")),u=function(n,r,i){if(!(0,s.default)(n)&&!(0,l.default)(n))return n;var a=i;return(0,o.default)(n,function(n,i){a=r(a,n,i);}),a;};},"31280e27":function(n,r,i){"use strict";var a=i("0fbce506");function o(){var n={},r=0,i=0,a=0;return{add:function(o,s){s||(s=o,o=0),o>i?i=o:o{let{lat:r,lng:i}=this.map.getCenter();this.emit("mapchange"),this.viewport.syncWithMapCamera({bearing:this.map.getBearing(),center:[i,r],viewportHeight:this.map.transform.height,pitch:this.map.getPitch(),viewportWidth:this.map.transform.width,zoom:this.map.getZoom(),cameraHeight:0}),this.updateCoordinateSystemService(),this.cameraChangedCallback(this.viewport);}),this.config=n.mapConfig,this.configService=n.globalConfigService,this.coordinateSystemService=n.coordinateSystemService,this.eventEmitter=new c.EventEmitter;}setBgColor(n){this.bgColor=n;}addMarkerContainer(){let n=this.map.getCanvasContainer();this.markerContainer=u.DOM.create("div","l7-marker-container",n),this.markerContainer.setAttribute("tabindex","-1");}getMarkerContainer(){return this.markerContainer;}getOverlayContainer(){}getCanvasOverlays(){}on(n,r){-1!==l.MapServiceEvent.indexOf(n)?this.eventEmitter.on(n,r):this.map.on(h[n]||n,r);}off(n,r){this.map.off(h[n]||n,r),this.eventEmitter.off(n,r);}getContainer(){return this.map.getContainer();}getMapCanvasContainer(){return this.map.getCanvasContainer();}getSize(){if("SIMPLE"===this.version)return this.simpleMapCoord.getSize();let n=this.map.transform;return[n.width,n.height];}getType(){return"default";}getZoom(){return this.map.getZoom();}setZoom(n){return this.map.setZoom(n);}getCenter(){return this.map.getCenter();}setCenter(n){this.map.setCenter(n);}getPitch(){return this.map.getPitch();}getRotation(){return this.map.getBearing();}getBounds(){return this.map.getBounds().toArray();}getMinZoom(){return this.map.getMinZoom();}getMaxZoom(){return this.map.getMaxZoom();}setRotation(n){this.map.setBearing(n);}zoomIn(n,r){this.map.zoomIn(n,r);}zoomOut(n,r){this.map.zoomOut(n,r);}setPitch(n){return this.map.setPitch(n);}panTo(n){this.map.panTo(n);}panBy(n=0,r=0){this.map.panBy([n,r]);}fitBounds(n,r){this.map.fitBounds(n,r);}setMaxZoom(n){this.map.setMaxZoom(n);}setMinZoom(n){this.map.setMinZoom(n);}setMapStatus(n){!0===n.doubleClickZoom&&this.map.doubleClickZoom.enable(),!1===n.doubleClickZoom&&this.map.doubleClickZoom.disable(),!1===n.dragEnable&&this.map.dragPan.disable(),!0===n.dragEnable&&this.map.dragPan.enable(),!1===n.rotateEnable&&this.map.dragRotate.disable(),!0===n.dragEnable&&this.map.dragRotate.enable(),!1===n.keyboardEnable&&this.map.keyboard.disable(),!0===n.keyboardEnable&&this.map.keyboard.enable(),!1===n.zoomEnable&&this.map.scrollZoom.disable(),!0===n.zoomEnable&&this.map.scrollZoom.enable();}setZoomAndCenter(n,r){this.map.flyTo({zoom:n,center:r});}setMapStyle(n){var r;null===(r=this.map)||void 0===r||r.setStyle(this.getMapStyleValue(n));}meterToCoord(n,r){return 1;}pixelToLngLat(n){return this.map.unproject(n);}lngLatToPixel(n){return this.map.project(n);}containerToLngLat(n){return this.map.unproject(n);}lngLatToContainer(n){return this.map.project(n);}getMapStyle(){try{var n;let r=null!==(n=this.map.getStyle().sprite)&&void 0!==n?n:"";if(/^mapbox:\/\/sprites\/zcxduo\/\w+\/\w+$/.test(r))return null==r?void 0:r.replace(/\/\w+$/,"").replace(/sprites/,"styles");return r;}catch(n){return"";}}getMapStyleConfig(){return d;}getMapStyleValue(n){var r;return null!==(r=this.getMapStyleConfig()[n])&&void 0!==r?r:n;}destroy(){this.eventEmitter.removeAllListeners(),this.map&&(this.map.remove(),this.$mapContainer=null);}emit(n,...r){this.eventEmitter.emit(n,...r);}once(n,...r){this.eventEmitter.once(n,...r);}getMapContainer(){return this.$mapContainer;}exportMap(n){var r;let i=null===(r=this.map)||void 0===r?void 0:r.getCanvas();return"jpg"===n?null==i?void 0:i.toDataURL("image/jpeg"):null==i?void 0:i.toDataURL("image/png");}onCameraChanged(n){this.cameraChangedCallback=n;}creatMapContainer(n){let r=n;return"string"==typeof n&&(r=document.getElementById(n)),r;}updateView(n){this.emit("mapchange"),this.viewport.syncWithMapCamera({bearing:n.bearing,center:n.center,viewportHeight:n.viewportHeight,pitch:n.pitch,viewportWidth:n.viewportWidth,zoom:n.zoom,cameraHeight:0}),this.updateCoordinateSystemService(),this.cameraChangedCallback(this.viewport);}updateCoordinateSystemService(){let{offsetCoordinate:n=!0}=this.config;this.viewport.getZoom()>12&&n?this.coordinateSystemService.setCoordinateSystem(l.CoordinateSystem.LNGLAT_OFFSET):this.coordinateSystemService.setCoordinateSystem(l.CoordinateSystem.LNGLAT);}}},"32f028e7":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{Continuous:function(){return y;}});var a=i("777fffbe"),o=i("8704c632"),s=a._(o),l=i("75aabd79"),u=i("8c0d48bf"),c=i("792e6f22"),f=i("bbb27eba"),d=i("65a1f2fd"),h=i("73ee4a11"),p=i("d2953067");let m=(n,r,i)=>{let a,o;let[s,l]=n,[u,f]=r;return s{let a=Math.min(n.length,r.length)-1,o=Array(a),s=Array(a),l=n[0]>n[a],u=l?[...n].reverse():n,h=l?[...r].reverse():r;for(let n=0;n{let i=(0,f.bisect)(n,r,1,a)-1,l=o[i],u=s[i];return(0,d.compose)(u,l)(r);};},v=(n,r,i,a)=>(Math.min(n.length,r.length)>2?g:m)(n,r,a?u.createInterpolateRound:i);class y extends l.Base{getDefaultOptions(){return{domain:[0,1],range:[0,1],nice:!1,clamp:!1,round:!1,interpolate:u.createInterpolateNumber,tickCount:5};}map(n){return(0,p.isValid)(n)?this.output(n):this.options.unknown;}invert(n){return(0,p.isValid)(n)?this.input(n):this.options.unknown;}nice(){if(!this.options.nice)return;let[n,r,i,...a]=this.getTickMethodOptions();this.options.domain=this.chooseNice()(n,r,i,...a);}getTicks(){let{tickMethod:n}=this.options,[r,i,a,...o]=this.getTickMethodOptions();return n(r,i,a,...o);}getTickMethodOptions(){let{domain:n,tickCount:r}=this.options;return[n[0],n[n.length-1],r];}chooseNice(){return h.d3LinearNice;}rescale(){this.nice();let[n,r]=this.chooseTransforms();this.composeOutput(n,this.chooseClamp(n)),this.composeInput(n,r,this.chooseClamp(r));}chooseClamp(n){let{clamp:r,range:i}=this.options,a=this.options.domain.map(n),o=Math.min(a.length,i.length);return r?function(n,r){let i=rr?n:r;return n=>Math.min(Math.max(i,n),a);}(a[0],a[o-1]):s.default;}composeOutput(n,r){let{domain:i,range:a,round:o,interpolate:s}=this.options,l=v(i.map(n),a,s,o);this.output=(0,d.compose)(l,r,n);}composeInput(n,r,i){let{domain:a,range:o}=this.options,s=v(o,a.map(n),u.createInterpolateNumber);this.input=(0,d.compose)(r,i,s);}}},"3301e887":function(n,r,i){var a=i("d91aaf3b"),o=i("bbc15be8"),s=i("3cd6a52e");n.exports=function(n){return"string"==typeof n||!o(n)&&s(n)&&"[object String]"==a(n);};},"3316fbe3":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"packEncloseRandom",{enumerable:!0,get:function(){return o;}});var a=i("858d251b");function o(n,r){for(var i,o,d=0,h=(n=(0,a.shuffle)(Array.from(n),r)).length,p=[];d0&&i*i>a*a+o*o;}function u(n,r){for(var i=0;i1e-6?(M+Math.sqrt(M*M-4*O*R))/(2*O):R/M);return{x:a+S+T*P,y:o+A+C*P,r:P};}},"33a06475":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),r.TokenData=void 0,r.parse=h,r.compile=function(n,r={}){let{encode:i=encodeURIComponent,delimiter:o="/"}=r,s=function n(r,i,o){let s=r.map(r=>(function(r,i,o){if("text"===r.type)return()=>[r.value];if("group"===r.type){let a=n(r.tokens,i,o);return n=>{let[r,...i]=a(n);return i.length?[""]:[r];};}let s=o||a;return"wildcard"===r.type&&!1!==o?n=>{let a=n[r.name];if(null==a)return["",r.name];if(!Array.isArray(a)||0===a.length)throw TypeError(`Expected "${r.name}" to be a non-empty array`);return[a.map((n,i)=>{if("string"!=typeof n)throw TypeError(`Expected "${r.name}/${i}" to be a string`);return s(n);}).join(i)];}:n=>{let i=n[r.name];if(null==i)return["",r.name];if("string"!=typeof i)throw TypeError(`Expected "${r.name}" to be a string`);return[s(i)];};})(r,i,o));return n=>{let r=[""];for(let i of s){let[a,...o]=i(n);r[0]+=a,r.push(...o);}return r;};}((n instanceof d?n:h(n,r)).tokens,o,i);return function(n={}){let[r,...i]=s(n);if(i.length)throw TypeError(`Missing parameters: ${i.join(", ")}`);return r;};},r.match=function(n,r={}){let{decode:i=decodeURIComponent,delimiter:o="/"}=r,{regexp:s,keys:l}=p(n,r),u=l.map(n=>!1===i?a:"param"===n.type?i:n=>n.split(o).map(i));return function(n){let r=s.exec(n);if(!r)return!1;let i=r[0],a=Object.create(null);for(let n=1;ns.test(n));}(r.name)&&((null==(l=a[i+1])?void 0:l.type)!=="text"||!s.test(l.value[0]))?r.name:JSON.stringify(r.name);if("param"===r.type)return`:${u}`;if("wildcard"===r.type)return`*${u}`;throw TypeError(`Unexpected token: ${r}`);}).join("");};let a=n=>n,o=/^[$_\p{ID_Start}]$/u,s=/^[$\u200c\u200d\p{ID_Continue}]$/u,l="https://git.new/pathToRegexpError",u={"{":"{","}":"}","(":"(",")":")","[":"[","]":"]","+":"+","?":"?","!":"!"};function c(n){return n.replace(/[.+*?^${}()[\]|/\\]/g,"\\$&");}class f{constructor(n){this.tokens=n;}peek(){if(!this._peek){let n=this.tokens.next();this._peek=n.value;}return this._peek;}tryConsume(n){let r=this.peek();if(r.type===n)return this._peek=void 0,r.value;}consume(n){let r=this.tryConsume(n);if(void 0!==r)return r;let{type:i,index:a}=this.peek();throw TypeError(`Unexpected ${i} at ${a}, expected ${n}: ${l}`);}text(){let n,r="";for(;n=this.tryConsume("CHAR")||this.tryConsume("ESCAPED");)r+=n;return r;}}class d{constructor(n){this.tokens=n;}}function h(n,r={}){let{encodePath:i=a}=r,c=new f(function*(n){let r=[...n],i=0;function a(){let n="";if(o.test(r[++i]))for(n+=r[i];s.test(r[++i]);)n+=r[i];else if('"'===r[i]){let a=i;for(;in instanceof d?n:h(n,r)))for(let n of function* n(r,i,a){if(i===r.length)return yield a;let o=r[i];if("group"===o.type){let s=a.slice();for(let a of n(o.tokens,0,s))yield*n(r,i+1,a);}else a.push(o);yield*n(r,i+1,a);}(a,0,[])){let r=function(n,r,i){let a="",o="",s=!0;for(let f=0;fa){if(r>0)return(0,d.default)({},n,s);if(r<0&&oa)return(0,d.default)({},n,r<0?s:-s);return{};}function W(n,r,i,a){var o=(0,x.getClientSize)(),s=o.width,l=o.height,u=null;return n<=s&&r<=l?u={x:0,y:0}:(n>s||r>l)&&(u=(0,c.default)((0,c.default)({},H("x",i,n,s)),H("y",a,r,l))),u;}function X(n){var r=n.src,i=n.isCustomPlaceholder,a=n.fallback,o=(0,T.useState)(i?"loading":"normal"),s=(0,p.default)(o,2),l=s[0],u=s[1],c=(0,T.useRef)(!1),f="error"===l;(0,T.useEffect)(function(){var n=!0;return new Promise(function(n){if(!r){n(!1);return;}var i=document.createElement("img");i.onerror=function(){return n(!1);},i.onload=function(){return n(!0);},i.src=r;}).then(function(r){!r&&n&&u("error");}),function(){n=!1;};},[r]),(0,T.useEffect)(function(){i&&!c.current?u("loading"):f&&u("normal");},[r]);var d=function(){u("normal");};return[function(n){c.current=!1,"loading"===l&&null!=n&&n.complete&&(n.naturalWidth||n.naturalHeight)&&(c.current=!0,d());},f&&a?{src:a}:{onLoad:d,src:r},l];}function q(n,r){return Math.hypot(n.x-r.x,n.y-r.y);}var $=["fallback","src","imgRef"],Y=["prefixCls","src","alt","imageInfo","fallback","movable","onClose","visible","icons","rootClassName","closeIcon","getContainer","current","count","countRender","scaleStep","minScale","maxScale","transitionName","maskTransitionName","imageRender","imgCommonProps","toolbarRender","onTransform","onChange"],Z=function(n){var r=n.fallback,i=n.src,a=n.imgRef,o=(0,y.default)(n,$),s=X({src:i,fallback:r}),u=(0,p.default)(s,2),c=u[0],f=u[1];return T.default.createElement("img",(0,l.default)({ref:function(n){a.current=n,c(n);}},o,f));},K=function(n){var r,i,a,o,s,u,f,h,m,g,v,_,E,w,S,A,O,R,k,I,L,N,B,z,H,X,$,K,Q=n.prefixCls,J=n.src,ee=n.alt,et=n.imageInfo,en=n.fallback,er=n.movable,ei=void 0===er||er,ea=n.onClose,eo=n.visible,es=n.icons,el=n.rootClassName,eu=n.closeIcon,ec=n.getContainer,ef=n.current,ed=void 0===ef?0:ef,eh=n.count,ep=void 0===eh?1:eh,em=n.countRender,eg=n.scaleStep,ev=void 0===eg?.5:eg,ey=n.minScale,e_=void 0===ey?1:ey,eb=n.maxScale,ex=void 0===eb?50:eb,eE=n.transitionName,ew=n.maskTransitionName,eS=void 0===ew?"fade":ew,eT=n.imageRender,eA=n.imgCommonProps,eC=n.toolbarRender,eO=n.onTransform,eM=n.onChange,eR=(0,y.default)(n,Y),eP=(0,T.useRef)(),ek=(0,T.useContext)(D),eI=ek&&ep>1,eL=ek&&ep>=1,eN=(0,T.useState)(!0),eD=(0,p.default)(eN,2),eF=eD[0],eB=eD[1],ej=(r=(0,T.useRef)(null),i=(0,T.useRef)([]),a=(0,T.useState)(V),s=(o=(0,p.default)(a,2))[0],u=o[1],f=function(n,a){null===r.current&&(i.current=[],r.current=(0,U.default)(function(){u(function(n){var o=n;return i.current.forEach(function(n){o=(0,c.default)((0,c.default)({},o),n);}),r.current=null,null==eO||eO({transform:o,action:a}),o;});})),i.current.push((0,c.default)((0,c.default)({},s),n));},{transform:s,resetTransform:function(n){u(V),(0,j.default)(V,s)||null==eO||eO({transform:V,action:n});},updateTransform:f,dispatchZoomChange:function(n,r,i,a,o){var l=eP.current,u=l.width,c=l.height,d=l.offsetWidth,h=l.offsetHeight,p=l.offsetLeft,m=l.offsetTop,g=n,v=s.scale*n;v>ex?(v=ex,g=ex/s.scale):v0&&(r=1/r),eG(r,"wheel",n.clientX,n.clientY);}}}),eW=eH.isMoving,eX=eH.onMouseDown,eq=eH.onWheel,e$=(k=ez.rotate,I=ez.scale,L=ez.x,N=ez.y,B=(0,T.useState)(!1),H=(z=(0,p.default)(B,2))[0],X=z[1],$=(0,T.useRef)({point1:{x:0,y:0},point2:{x:0,y:0},eventType:"none"}),K=function(n){$.current=(0,c.default)((0,c.default)({},$.current),n);},(0,T.useEffect)(function(){var n;return eo&&ei&&(n=(0,M.default)(window,"touchmove",function(n){return n.preventDefault();},{passive:!1})),function(){var r;null===(r=n)||void 0===r||r.remove();};},[eo,ei]),{isTouching:H,onTouchStart:function(n){if(ei){n.stopPropagation(),X(!0);var r=n.touches,i=void 0===r?[]:r;i.length>1?K({point1:{x:i[0].clientX,y:i[0].clientY},point2:{x:i[1].clientX,y:i[1].clientY},eventType:"touchZoom"}):K({point1:{x:i[0].clientX-L,y:i[0].clientY-N},eventType:"move"});}},onTouchMove:function(n){var r=n.touches,i=void 0===r?[]:r,a=$.current,o=a.point1,s=a.point2,l=a.eventType;if(i.length>1&&"touchZoom"===l){var u={x:i[0].clientX,y:i[0].clientY},c={x:i[1].clientX,y:i[1].clientY},f=function(n,r,i,a){var o=q(n,i),s=q(r,a);if(0===o&&0===s)return[n.x,n.y];var l=o/(o+s);return[n.x+l*(r.x-n.x),n.y+l*(r.y-n.y)];}(o,s,u,c),d=(0,p.default)(f,2),h=d[0],m=d[1];eG(q(u,c)/q(o,s),"touchZoom",h,m,!0),K({point1:u,point2:c,eventType:"touchZoom"});}else"move"===l&&(eV({x:i[0].clientX-o.x,y:i[0].clientY-o.y},"move"),K({eventType:"move"}));},onTouchEnd:function(){if(eo){if(H&&X(!1),K({eventType:"none"}),e_>I)return eV({x:0,y:0,scale:e_},"touchZoom");var n=eP.current.offsetWidth*I,r=eP.current.offsetHeight*I,i=eP.current.getBoundingClientRect(),a=i.left,o=i.top,s=k%180!=0,l=W(s?r:n,s?n:r,a,o);l&&eV((0,c.default)({},l),"dragRebound");}}}),eY=e$.isTouching,eZ=e$.onTouchStart,eK=e$.onTouchMove,eQ=e$.onTouchEnd,eJ=ez.rotate,e0=ez.scale,e1=(0,b.default)((0,d.default)({},"".concat(Q,"-moving"),eW));(0,T.useEffect)(function(){eF||eB(!0);},[eF]);var e2=function(n){var r=ed+n;!Number.isInteger(r)||r<0||r>ep-1||(eB(!1),eU(n<0?"prev":"next"),null==eM||eM(r,ed));},e3=function(n){eo&&eI&&(n.keyCode===P.default.LEFT?e2(-1):n.keyCode===P.default.RIGHT&&e2(1));};(0,T.useEffect)(function(){var n=(0,M.default)(window,"keydown",e3,!1);return function(){n.remove();};},[eo,eI,ed]);var e4=T.default.createElement(Z,(0,l.default)({},eA,{width:n.width,height:n.height,imgRef:eP,className:"".concat(Q,"-img"),alt:ee,style:{transform:"translate3d(".concat(ez.x,"px, ").concat(ez.y,"px, 0) scale3d(").concat(ez.flipX?"-":"").concat(e0,", ").concat(ez.flipY?"-":"").concat(e0,", 1) rotate(").concat(eJ,"deg)"),transitionDuration:(!eF||eY)&&"0s"},fallback:en,src:J,onWheel:eq,onMouseDown:eX,onDoubleClick:function(n){eo&&(1!==e0?eV({x:0,y:0,scale:1},"doubleClick"):eG(1+ev,"doubleClick",n.clientX,n.clientY));},onTouchStart:eZ,onTouchMove:eK,onTouchEnd:eQ,onTouchCancel:eQ})),e5=(0,c.default)({url:J,alt:ee},et);return T.default.createElement(T.default.Fragment,null,T.default.createElement(C.default,(0,l.default)({transitionName:void 0===eE?"zoom":eE,maskTransitionName:eS,closable:!1,keyboard:!0,prefixCls:Q,onClose:ea,visible:eo,classNames:{wrapper:e1},rootClassName:el,getContainer:ec},eR,{afterClose:function(){eU("close");}}),T.default.createElement("div",{className:"".concat(Q,"-img-wrapper")},eT?eT(e4,(0,c.default)({transform:ez,image:e5},ek?{current:ed}:{})):e4)),T.default.createElement(F,{visible:eo,transform:ez,maskTransitionName:eS,closeIcon:eu,getContainer:ec,prefixCls:Q,rootClassName:el,icons:void 0===es?{}:es,countRender:em,showSwitch:eI,showProgress:eL,current:ed,count:ep,scale:e0,minScale:e_,maxScale:ex,toolbarRender:eC,onActive:e2,onZoomIn:function(){eG(1+ev,"zoomIn");},onZoomOut:function(){eG(1/(1+ev),"zoomOut");},onRotateRight:function(){eV({rotate:eJ+90},"rotateRight");},onRotateLeft:function(){eV({rotate:eJ-90},"rotateLeft");},onFlipX:function(){eV({flipX:!ez.flipX},"flipX");},onFlipY:function(){eV({flipY:!ez.flipY},"flipY");},onClose:ea,onReset:function(){eU("reset");},zIndex:void 0!==eR.zIndex?eR.zIndex+1:void 0,image:e5}));},Q=i("f1020fa4"),J=a._(Q),ee=["crossOrigin","decoding","draggable","loading","referrerPolicy","sizes","srcSet","useMap","alt"],et=["visible","onVisibleChange","getContainer","current","movable","minScale","maxScale","countRender","closeIcon","onChange","onTransform","toolbarRender","imageRender"],en=["src"],er=0,ei=["src","alt","onPreviewClose","prefixCls","previewPrefixCls","placeholder","fallback","width","height","style","preview","className","onClick","onError","wrapperClassName","wrapperStyle","rootClassName"],ea=["src","visible","onVisibleChange","getContainer","mask","maskClassName","movable","icons","scaleStep","minScale","maxScale","imageRender","toolbarRender"],eo=function(n){var r,i,a,o,s=n.src,u=n.alt,f=n.onPreviewClose,h=n.prefixCls,m=void 0===h?"rc-image":h,v=n.previewPrefixCls,_=void 0===v?"".concat(m,"-preview"):v,E=n.placeholder,S=n.fallback,A=n.width,C=n.height,O=n.style,M=n.preview,R=void 0===M||M,P=n.className,k=n.onClick,I=n.onError,L=n.wrapperClassName,N=n.wrapperStyle,F=n.rootClassName,B=(0,y.default)(n,ei),j="object"===(0,g.default)(R)?R:{},z=j.src,U=j.visible,V=void 0===U?void 0:U,G=j.onVisibleChange,H=j.getContainer,W=j.mask,q=j.maskClassName,$=j.movable,Y=j.icons,Z=j.scaleStep,Q=j.minScale,J=j.maxScale,et=j.imageRender,en=j.toolbarRender,eo=(0,y.default)(j,ea),es=null!=z?z:s,el=(0,w.default)(!!V,{value:V,onChange:void 0===G?f:G}),eu=(0,p.default)(el,2),ec=eu[0],ef=eu[1],ed=X({src:s,isCustomPlaceholder:E&&!0!==E,fallback:S}),eh=(0,p.default)(ed,3),ep=eh[0],em=eh[1],eg=eh[2],ev=(0,T.useState)(null),ey=(0,p.default)(ev,2),e_=ey[0],eb=ey[1],ex=(0,T.useContext)(D),eE=!!R,ew=(0,b.default)(m,L,F,(0,d.default)({},"".concat(m,"-error"),"error"===eg)),eS=(0,T.useMemo)(function(){var r={};return ee.forEach(function(i){void 0!==n[i]&&(r[i]=n[i]);}),r;},ee.map(function(r){return n[r];})),eT=(0,T.useMemo)(function(){return(0,c.default)((0,c.default)({},eS),{},{src:es});},[es,eS]),eA=(r=T.useState(function(){return String(er+=1);}),i=(0,p.default)(r,1)[0],a=T.useContext(D),o={data:eT,canPreview:eE},T.useEffect(function(){if(a)return a.register(i,o);},[]),T.useEffect(function(){a&&a.register(i,o);},[eE,eT]),i);return T.createElement(T.Fragment,null,T.createElement("div",(0,l.default)({},B,{className:ew,onClick:eE?function(n){var r=(0,x.getOffset)(n.target),i=r.left,a=r.top;ex?ex.onPreview(eA,es,i,a):(eb({x:i,y:a}),ef(!0)),null==k||k(n);}:k,style:(0,c.default)({width:A,height:C},N)}),T.createElement("img",(0,l.default)({},eS,{className:(0,b.default)("".concat(m,"-img"),(0,d.default)({},"".concat(m,"-img-placeholder"),!0===E),P),style:(0,c.default)({height:C},O),ref:ep},em,{width:A,height:C,onError:I})),"loading"===eg&&T.createElement("div",{"aria-hidden":"true",className:"".concat(m,"-placeholder")},E),W&&eE&&T.createElement("div",{className:(0,b.default)("".concat(m,"-mask"),q),style:{display:(null==O?void 0:O.display)==="none"?"none":void 0}},W)),!ex&&eE&&T.createElement(K,(0,l.default)({"aria-hidden":!ec,visible:ec,prefixCls:_,onClose:function(){ef(!1),eb(null);},mousePosition:e_,src:es,alt:u,imageInfo:{width:A,height:C},fallback:S,getContainer:void 0===H?void 0:H,icons:Y,movable:$,scaleStep:Z,minScale:Q,maxScale:J,rootClassName:F,imageRender:et,imgCommonProps:eS,toolbarRender:en},eo)));};eo.PreviewGroup=function(n){var r,i,a,o,s,u,f=n.previewPrefixCls,h=n.children,m=n.icons,v=n.items,_=n.preview,b=n.fallback,x="object"===(0,g.default)(_)?_:{},E=x.visible,S=x.onVisibleChange,A=x.getContainer,C=x.current,O=x.movable,M=x.minScale,R=x.maxScale,P=x.countRender,k=x.closeIcon,I=x.onChange,L=x.onTransform,N=x.toolbarRender,F=x.imageRender,B=(0,y.default)(x,et),j=(r=T.useState({}),a=(i=(0,p.default)(r,2))[0],o=i[1],s=T.useCallback(function(n,r){return o(function(i){return(0,c.default)((0,c.default)({},i),{},(0,d.default)({},n,r));}),function(){o(function(r){var i=(0,c.default)({},r);return delete i[n],i;});};},[]),[T.useMemo(function(){return v?v.map(function(n){if("string"==typeof n)return{data:{src:n}};var r={};return Object.keys(n).forEach(function(i){["src"].concat((0,J.default)(ee)).includes(i)&&(r[i]=n[i]);}),{data:r};}):Object.keys(a).reduce(function(n,r){var i=a[r],o=i.canPreview,s=i.data;return o&&n.push({data:s,id:r}),n;},[]);},[v,a]),s,!!v]),z=(0,p.default)(j,3),U=z[0],V=z[1],G=z[2],H=(0,w.default)(0,{value:C}),W=(0,p.default)(H,2),X=W[0],q=W[1],$=(0,T.useState)(!1),Y=(0,p.default)($,2),Z=Y[0],Q=Y[1],er=(null===(u=U[X])||void 0===u?void 0:u.data)||{},ei=er.src,ea=(0,y.default)(er,en),eo=(0,w.default)(!!E,{value:E,onChange:function(n,r){null==S||S(n,r,X);}}),es=(0,p.default)(eo,2),el=es[0],eu=es[1],ec=(0,T.useState)(null),ef=(0,p.default)(ec,2),ed=ef[0],eh=ef[1],ep=T.useCallback(function(n,r,i,a){var o=G?U.findIndex(function(n){return n.data.src===r;}):U.findIndex(function(r){return r.id===n;});q(o<0?0:o),eu(!0),eh({x:i,y:a}),Q(!0);},[U,G]);T.useEffect(function(){el?Z||q(0):Q(!1);},[el]);var em=T.useMemo(function(){return{register:V,onPreview:ep};},[V,ep]);return T.createElement(D.Provider,{value:em},h,T.createElement(K,(0,l.default)({"aria-hidden":!el,movable:O,visible:el,prefixCls:void 0===f?"rc-image-preview":f,closeIcon:k,onClose:function(){eu(!1),eh(null);},mousePosition:ed,imgCommonProps:ea,src:ei,fallback:b,icons:void 0===m?{}:m,minScale:M,maxScale:R,getContainer:A,current:X,count:U.length,countRender:P,onTransform:L,toolbarRender:N,imageRender:F,onChange:function(n,r){q(n),null==I||I(n,r);}},B)));};},"3656debc":function(n,r,i){"use strict";var a=i("4d6ab2e4"),o={"text/plain":"Text","text/html":"Url",default:"Text"};n.exports=function(n,r){var i,s,l,u,c,f,d,h,p=!1;r||(r={}),l=r.debug||!1;try{if(c=a(),f=document.createRange(),d=document.getSelection(),(h=document.createElement("span")).textContent=n,h.ariaHidden="true",h.style.all="unset",h.style.position="fixed",h.style.top=0,h.style.clip="rect(0, 0, 0, 0)",h.style.whiteSpace="pre",h.style.webkitUserSelect="text",h.style.MozUserSelect="text",h.style.msUserSelect="text",h.style.userSelect="text",h.addEventListener("copy",function(i){if(i.stopPropagation(),r.format){if(i.preventDefault(),void 0===i.clipboardData){l&&console.warn("unable to use e.clipboardData"),l&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var a=o[r.format]||o.default;window.clipboardData.setData(a,n);}else i.clipboardData.clearData(),i.clipboardData.setData(r.format,n);}r.onCopy&&(i.preventDefault(),r.onCopy(i.clipboardData));}),document.body.appendChild(h),f.selectNodeContents(h),d.addRange(f),!document.execCommand("copy"))throw Error("copy command was unsuccessful");p=!0;}catch(a){l&&console.error("unable to copy using execCommand: ",a),l&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(r.format||"text",n),r.onCopy&&r.onCopy(window.clipboardData),p=!0;}catch(a){l&&console.error("unable to copy using clipboardData: ",a),l&&console.error("falling back to prompt"),i="message"in r?r.message:"Copy to clipboard: #{key}, Enter",s=(/mac os x/i.test(navigator.userAgent)?"\u2318":"Ctrl")+"+C",u=i.replace(/#{\s*key\s*}/g,s),window.prompt(u,n);}}finally{d&&("function"==typeof d.removeRange?d.removeRange(f):d.removeAllRanges()),h&&document.body.removeChild(h),c();}return p;};},"3715e357":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});var a=function(n,r,i){return ni?i:n;};},"3776434f":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{applyScale:function(){return x;},assignScale:function(){return T;},collectScales:function(){return w;},groupTransform:function(){return E;},inferScale:function(){return b;},isPosition:function(){return B;},isValidScale:function(){return j;},syncFacetsScales:function(){return C;},useRelation:function(){return S;},useRelationScale:function(){return A;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("c2287686"),l=i("8c0d48bf"),u=a._(i("19faa3be")),c=a._(i("63aba70a")),f=i("1f4e7f4b"),d=o._(i("ed031284")),h=a._(i("d7948920")),p=a._(i("f515d959")),m=a._(i("7cf6ebc4")),g=i("cfce14bf"),v=i("f5373dff"),y=i("148614a5"),_=i("c4368857");function b(n,r,i,a,o,u){let{guide:c={}}=i,f=function(n,r,i){let{type:a,domain:o,range:s,quantitative:l,ordinal:u}=i;return void 0!==a?a:F(r,v.isStrictObject)?"identity":"string"==typeof s?"linear":(o||s||[]).length>2?k(n,u):void 0!==o?N([o])?k(n,u):D(r)?"time":I(n,s,l):N(r)?k(n,u):D(r)?"time":I(n,s,l);}(n,r,i);if("string"!=typeof f)return i;let h=function(n,r,i,a){let{domain:o}=a;if(void 0!==o)return o;switch(n){case"linear":case"time":case"log":case"pow":case"sqrt":case"quantize":case"threshold":return L(function(n,r){let{zero:i=!1}=r,a=1/0,o=-1/0;for(let r of n)for(let n of r)(0,v.defined)(n)&&(a=Math.min(a,+n),o=Math.max(o,+n));return a===1/0?[]:i?[Math.min(0,a),o]:[a,o];}(i,a),a);case"band":case"ordinal":case"point":return Array.from(new Set(i.flat()));case"quantile":return i.flat().sort();case"sequential":return L(function(n){let r=1/0,i=-1/0;for(let a of n)for(let n of a)(0,v.defined)(n)&&(r=Math.min(r,+n),i=Math.max(i,+n));return r===1/0?[]:[r<0?-i:r,i];}(i),a);default:return[];}}(f,0,r,i),p=function(n,r,i){let{ratio:a}=i;return null==a?r:M({type:n})?function(n,r,i){let a=n.map(Number),o=new s.Linear({domain:a,range:[a[0],a[0]+(a[a.length-1]-a[0])*r]});return"time"===i?n.map(n=>new Date(o.map(n))):n.map(n=>o.map(n));}(r,a,n):R({type:n})?function(n,r){let i=Math.round(n.length*r);return n.slice(0,i);}(r,a):r;}(f,h,i);return Object.assign(Object.assign(Object.assign({},i),function(n,r,i,a,o){switch(n){case"linear":case"time":case"log":case"pow":case"sqrt":return function(n,r){let{interpolate:i=l.createInterpolateValue,nice:a=!1,tickCount:o=5}=r;return Object.assign(Object.assign({},r),{interpolate:i,nice:a,tickCount:o});}(0,a);case"band":case"point":return function(n,r,i,a){if(void 0!==a.padding||void 0!==a.paddingInner||void 0!==a.paddingOuter)return Object.assign(Object.assign({},a),{unknown:NaN});let o="enterDelay"===r||"enterDuration"===r||"size"===r?0:"band"===n?(0,y.isTheta)(i)?0:.1:"point"===n?.5:0,{paddingInner:s=o,paddingOuter:l=o}=a;return Object.assign(Object.assign({},a),{paddingInner:s,paddingOuter:l,padding:o,unknown:NaN});}(n,r,o,a);case"sequential":return function(n){let{palette:r="ylGnBu",offset:i}=n,a=(0,m.default)(r),o=d[`interpolate${a}`];if(!o)throw Error(`Unknown palette: ${a}`);return{interpolator:i?n=>o(i(n)):o};}(a);default:return a;}}(f,n,0,i,a)),{domain:p,range:function(n,r,i,a,o,s,l){let{range:u}=a;if("string"==typeof u)return u.split("-");if(void 0!==u)return u;let{rangeMin:c,rangeMax:f}=a;switch(n){case"linear":case"time":case"log":case"pow":case"sqrt":{var d;let[n,u]=(d=P(i,a,o,s,l),"enterDelay"===r?[0,1e3]:"enterDuration"==r?[300,1e3]:r.startsWith("y")||r.startsWith("position")?[1,0]:"color"===r?[(0,g.firstOf)(d),(0,g.lastOf)(d)]:"opacity"===r?[0,1]:"size"===r?[1,10]:[0,1]);return[null!=c?c:n,null!=f?f:u];}case"band":case"point":{let n="size"===r?5:0,i="size"===r?10:1;return[null!=c?c:n,null!=f?f:i];}case"ordinal":return P(i,a,o,s,l);case"sequential":return;case"constant":return[i[0][0]];default:return[];}}(f,n,r,i,p,o,u),expectedDomain:h,guide:c,name:n,type:f});}function x(n,r){let i={};for(let a of n){let{values:n,name:o}=a,s=r[o];for(let r of n){let{name:n,value:a}=r;i[n]=a.map(n=>s.map(n));}}return i;}function E(n,r){let i=Array.from(n.values()).flatMap(n=>n.channels);(0,f.rollups)(i,n=>n.map(n=>r.get(n.scale.uid)),n=>n.name).filter(([,n])=>n.some(n=>"function"==typeof n.getOptions().groupTransform)&&n.every(n=>n.getTicks)).map(n=>n[1]).forEach(n=>{(0,n.map(n=>n.getOptions().groupTransform)[0])(n);});}function w(n,r){var i;let{components:a=[]}=r,o=["scale","encode","axis","legend","data","transform"],s=Array.from(new Set(n.flatMap(n=>n.channels.map(n=>n.scale)))),l=new Map(s.map(n=>[n.name,n]));for(let n of a)for(let r of function(n){let{channels:r=[],type:i,scale:a={}}=n,o=["shape","color","opacity","size"];return 0!==r.length?r:"axisX"===i?["x"]:"axisY"===i?["y"]:"legends"===i?Object.keys(a).filter(n=>o.includes(n)):[];}(n)){let a=l.get(r),u=(null===(i=n.scale)||void 0===i?void 0:i[r])||{},{independent:c=!1}=u;if(a&&!c){let{guide:r}=a,i="boolean"==typeof r?{}:r;a.guide=(0,h.default)({},i,n),Object.assign(a,u);}else{let i=Object.assign(Object.assign({},u),{expectedDomain:u.domain,name:r,guide:(0,p.default)(n,o)});s.push(i);}}return s;}function S(n){let r,i;return n&&Array.isArray(n)?[a=>{var o;r=a.map.bind(a),i=null===(o=a.invert)||void 0===o?void 0:o.bind(a);let s=n.filter(([n])=>"function"==typeof n),l=n.filter(([n])=>"function"!=typeof n),u=new Map(l);if(a.map=n=>{for(let[r,i]of s)if(r(n))return i;return u.has(n)?u.get(n):r(n);},!i)return a;let c=new Map(l.map(([n,r])=>[r,n])),f=new Map(s.map(([n,r])=>[r,n]));return a.invert=n=>f.has(n)?n:c.has(n)?c.get(n):i(n),a;},n=>(null!==r&&(n.map=r),null!==i&&(n.invert=i),n)]:[v.identity,v.identity];}function T(n,r){let i=Object.keys(n);for(let a of Object.values(r)){let{name:r}=a.getOptions();if(r in n){let o=i.filter(n=>n.startsWith(r)).map(n=>+(n.replace(r,"")||0)),s=(0,c.default)(o)+1,l=`${r}${s}`;n[l]=a,a.getOptions().key=l;}else n[r]=a;}return n;}function A(n,r){let[i]=(0,_.useLibrary)("scale",r),{relations:a}=n,[o]=S(a);return o(i(n));}function C(n){let r=n.flatMap(n=>Array.from(n.values())).flatMap(n=>n.channels.map(n=>n.scale));O(r,"x"),O(r,"y");}function O(n,r){let i=n.filter(({name:n,facet:i=!0})=>i&&n===r),a=i.flatMap(n=>n.domain),o=i.every(M)?(0,u.default)(a):i.every(R)?Array.from(new Set(a)):null;if(null!==o)for(let n of i)n.domain=o;}function M(n){let{type:r}=n;return"string"==typeof r&&["linear","log","pow","time"].includes(r);}function R(n){let{type:r}=n;return"string"==typeof r&&["band","point","ordinal"].includes(r);}function P(n,r,i,a,o){let[s]=(0,_.useLibrary)("palette",o),{category10:l,category20:u}=a,c=(0,g.unique)(i).length<=l.length?l:u,{palette:f=c,offset:h}=r;if(Array.isArray(f))return f;try{return s({type:f});}catch(r){let n=function(n,r,i=n=>n){if(!n)return null;let a=(0,m.default)(n),o=d[`scheme${a}`],s=d[`interpolate${a}`];if(!o&&!s)return null;if(o){if(!o.some(Array.isArray))return o;let n=o[r.length];if(n)return n;}return r.map((n,a)=>s(i(a/r.length)));}(f,i,h);if(n)return n;throw Error(`Unknown Component: ${f} `);}}function k(n,r){return r||(n.startsWith("x")||n.startsWith("y")||n.startsWith("position")||n.startsWith("size")?"point":"ordinal");}function I(n,r,i){return i||("color"!==n?"linear":r?"linear":"sequential");}function L(n,r){if(0===n.length)return n;let{domainMin:i,domainMax:a}=r,[o,s]=n;return[null!=i?i:o,null!=a?a:s];}function N(n){return F(n,n=>{let r=typeof n;return"string"===r||"boolean"===r;});}function D(n){return F(n,n=>n instanceof Date);}function F(n,r){for(let i of n)if(i.some(r))return!0;return!1;}function B(n){return n.startsWith("x")||n.startsWith("y")||n.startsWith("position")||"enterDelay"===n||"enterDuration"===n||"updateDelay"===n||"updateDuration"===n||"exitDelay"===n||"exitDuration"===n;}function j(n){if(!n||!n.type)return!1;if("function"==typeof n.type)return!0;let{type:r,domain:i,range:a,interpolator:o}=n,s=i&&i.length>0,l=a&&a.length>0;return!!(["linear","sqrt","log","time","pow","threshold","quantize","quantile","ordinal","band","point"].includes(r)&&s&&l||["sequential"].includes(r)&&s&&(l||o)||["constant","identity"].includes(r)&&l);}},"377bcc16":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{add:function(){return h;},angle:function(){return O;},clone:function(){return l;},copy:function(){return f;},create:function(){return s;},cross:function(){return w;},dist:function(){return P;},distance:function(){return _;},dot:function(){return E;},equals:function(){return M;},forEach:function(){return I;},fromValues:function(){return c;},len:function(){return k;},length:function(){return u;},lerp:function(){return S;},max:function(){return v;},min:function(){return g;},multiply:function(){return m;},negate:function(){return b;},normalize:function(){return x;},scale:function(){return y;},set:function(){return d;},sub:function(){return R;},subtract:function(){return p;},transformMat3:function(){return A;},transformMat4:function(){return T;},transformQuat:function(){return C;}});var a,o=i("852bbaa9")._(i("1cf5f081"));function s(){var n=new o.ARRAY_TYPE(3);return o.ARRAY_TYPE!=Float32Array&&(n[0]=0,n[1]=0,n[2]=0),n;}function l(n){var r=new o.ARRAY_TYPE(3);return r[0]=n[0],r[1]=n[1],r[2]=n[2],r;}function u(n){return Math.hypot(n[0],n[1],n[2]);}function c(n,r,i){var a=new o.ARRAY_TYPE(3);return a[0]=n,a[1]=r,a[2]=i,a;}function f(n,r){return n[0]=r[0],n[1]=r[1],n[2]=r[2],n;}function d(n,r,i,a){return n[0]=r,n[1]=i,n[2]=a,n;}function h(n,r,i){return n[0]=r[0]+i[0],n[1]=r[1]+i[1],n[2]=r[2]+i[2],n;}function p(n,r,i){return n[0]=r[0]-i[0],n[1]=r[1]-i[1],n[2]=r[2]-i[2],n;}function m(n,r,i){return n[0]=r[0]*i[0],n[1]=r[1]*i[1],n[2]=r[2]*i[2],n;}function g(n,r,i){return n[0]=Math.min(r[0],i[0]),n[1]=Math.min(r[1],i[1]),n[2]=Math.min(r[2],i[2]),n;}function v(n,r,i){return n[0]=Math.max(r[0],i[0]),n[1]=Math.max(r[1],i[1]),n[2]=Math.max(r[2],i[2]),n;}function y(n,r,i){return n[0]=r[0]*i,n[1]=r[1]*i,n[2]=r[2]*i,n;}function _(n,r){return Math.hypot(r[0]-n[0],r[1]-n[1],r[2]-n[2]);}function b(n,r){return n[0]=-r[0],n[1]=-r[1],n[2]=-r[2],n;}function x(n,r){var i=r[0],a=r[1],o=r[2],s=i*i+a*a+o*o;return s>0&&(s=1/Math.sqrt(s)),n[0]=r[0]*s,n[1]=r[1]*s,n[2]=r[2]*s,n;}function E(n,r){return n[0]*r[0]+n[1]*r[1]+n[2]*r[2];}function w(n,r,i){var a=r[0],o=r[1],s=r[2],l=i[0],u=i[1],c=i[2];return n[0]=o*c-s*u,n[1]=s*l-a*c,n[2]=a*u-o*l,n;}function S(n,r,i,a){var o=r[0],s=r[1],l=r[2];return n[0]=o+a*(i[0]-o),n[1]=s+a*(i[1]-s),n[2]=l+a*(i[2]-l),n;}function T(n,r,i){var a=r[0],o=r[1],s=r[2],l=i[3]*a+i[7]*o+i[11]*s+i[15];return l=l||1,n[0]=(i[0]*a+i[4]*o+i[8]*s+i[12])/l,n[1]=(i[1]*a+i[5]*o+i[9]*s+i[13])/l,n[2]=(i[2]*a+i[6]*o+i[10]*s+i[14])/l,n;}function A(n,r,i){var a=r[0],o=r[1],s=r[2];return n[0]=a*i[0]+o*i[3]+s*i[6],n[1]=a*i[1]+o*i[4]+s*i[7],n[2]=a*i[2]+o*i[5]+s*i[8],n;}function C(n,r,i){var a=i[0],o=i[1],s=i[2],l=i[3],u=r[0],c=r[1],f=r[2],d=o*f-s*c,h=s*u-a*f,p=a*c-o*u,m=o*p-s*h,g=s*d-a*p,v=a*h-o*d,y=2*l;return d*=y,h*=y,p*=y,m*=2,g*=2,v*=2,n[0]=u+d+m,n[1]=c+h+g,n[2]=f+p+v,n;}function O(n,r){var i=n[0],a=n[1],o=n[2],s=r[0],l=r[1],u=r[2],c=Math.sqrt(i*i+a*a+o*o)*Math.sqrt(s*s+l*l+u*u);return Math.acos(Math.min(Math.max(c&&E(n,r)/c,-1),1));}function M(n,r){var i=n[0],a=n[1],s=n[2],l=r[0],u=r[1],c=r[2];return Math.abs(i-l)<=o.EPSILON*Math.max(1,Math.abs(i),Math.abs(l))&&Math.abs(a-u)<=o.EPSILON*Math.max(1,Math.abs(a),Math.abs(u))&&Math.abs(s-c)<=o.EPSILON*Math.max(1,Math.abs(s),Math.abs(c));}var R=p,P=_,k=u,I=(a=s(),function(n,r,i,o,s,l){var u,c;for(r||(r=3),i||(i=0),c=o?Math.min(o*r+i,n.length):n.length,u=i;ur.indexOf(a)&&(i[a]=n[a]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,a=Object.getOwnPropertySymbols(n);or.indexOf(a[o])&&Object.prototype.propertyIsEnumerable.call(n,a[o])&&(i[a[o]]=n[a[o]]);return i;}function u(n,r,i,a){return new(i||(i=Promise))(function(o,s){function l(n){try{c(a.next(n));}catch(n){s(n);}}function u(n){try{c(a.throw(n));}catch(n){s(n);}}function c(n){var r;n.done?o(n.value):((r=n.value)instanceof i?r:new i(function(n){n(r);})).then(l,u);}c((a=a.apply(n,r||[])).next());});}function c(n,r){var i,a,o,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1];},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return l.next=u(0),l.throw=u(1),l.return=u(2),"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this;}),l;function u(u){return function(c){return function(u){if(i)throw TypeError("Generator is already executing.");for(;l&&(l=0,u[0]&&(s=0)),s;)try{if(i=1,a&&(o=2&u[0]?a.return:u[0]?a.throw||((o=a.return)&&o.call(a),0):a.next)&&!(o=o.call(a,u[1])).done)return o;switch(a=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return s.label++,{value:u[1],done:!1};case 5:s.label++,a=u[1],u=[0];continue;case 7:u=s.ops.pop(),s.trys.pop();continue;default:if(!(o=(o=s.trys).length>0&&o[o.length-1])&&(6===u[0]||2===u[0])){s=0;continue;}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]=n.length&&(n=void 0),{value:n&&n[a++],done:!n};}};throw TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.");}function h(n,r){var i="function"==typeof Symbol&&n[Symbol.iterator];if(!i)return n;var a,o,s=i.call(n),l=[];try{for(;(void 0===r||r-- >0)&&!(a=s.next()).done;)l.push(a.value);}catch(n){o={error:n};}finally{try{a&&!a.done&&(i=s.return)&&i.call(s);}finally{if(o)throw o.error;}}return l;}function p(n,r,i){if(i||2==arguments.length)for(var a,o=0,s=r.length;or.indexOf(a)&&(i[a]=n[a]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,a=Object.getOwnPropertySymbols(n);or.indexOf(a[o])&&Object.prototype.propertyIsEnumerable.call(n,a[o])&&(i[a[o]]=n[a[o]]);return i;};function y(n,r){let{eulerAngles:i,origin:a}=r;a&&n.setOrigin(a),i&&n.rotate(i[0],i[1],i[2]);}function _(n){let{innerWidth:r,innerHeight:i,depth:a}=n.getOptions();return[r,i,a];}function b(n,r,i,a,o,l,u,c){var d;(void 0!==i||void 0!==l)&&n.update(Object.assign(Object.assign({},i&&{tickCount:i}),l&&{tickMethod:l}));let m=function(n,r,i){if(n.getTicks)return n.getTicks();if(!i)return r;let[a,o]=(0,f.default)(r,n=>+n),{tickCount:s}=n.getOptions();return i(a,o,s);}(n,r,l),g=o?m.filter(o):m,v=n=>n instanceof Date?String(n):"object"==typeof n&&n?n:String(n),y=a||(null===(d=n.getFormatter)||void 0===d?void 0:d.call(n))||v,_=function(n,r){if((0,h.isPolar)(r))return n=>n;let{innerWidth:i,innerHeight:a,insetTop:o,insetBottom:l,insetLeft:u,insetRight:c}=r.getOptions(),[f,d,p]="left"===n||"right"===n?[o,l,a]:[u,c,i],m=new s.Linear({domain:[0,1],range:[f/p,1-d/p]});return n=>m.map(n);}(u,c),b=function(n,r){let{width:i,height:a}=r.getOptions();return o=>{if(!(0,h.isFisheye)(r))return o;let l=r.map("bottom"===n?[o,1]:[0,o]);if("bottom"===n){let n=l[0];return new s.Linear({domain:[0,i],range:[0,1]}).map(n);}if("left"===n){let n=l[1];return new s.Linear({domain:[0,a],range:[0,1]}).map(n);}return o;};}(u,c),x=n=>["top","bottom","center","outer"].includes(n),E=n=>["left","right"].includes(n);return(0,h.isPolar)(c)||(0,h.isTranspose)(c)?g.map((r,i,a)=>{var o,s;let l=(null===(o=n.getBandWidth)||void 0===o?void 0:o.call(n,r))/2||0,f=_(n.map(r)+l);return{value:(0,h.isRadial)(c)&&"center"===u||(0,h.isTranspose)(c)&&(null===(s=n.getTicks)||void 0===s?void 0:s.call(n))&&x(u)||(0,h.isTranspose)(c)&&E(u)?1-f:f,label:v(y((0,p.prettyNumber)(r),i,a)),id:String(i)};}):g.map((r,i,a)=>{var o;let s=(null===(o=n.getBandWidth)||void 0===o?void 0:o.call(n,r))/2||0,l=b(_(n.map(r)+s));return{value:E(u)?1-l:l,label:v(y((0,p.prettyNumber)(r),i,a)),id:String(i)};});}let x=n=>r=>{let{labelFormatter:i,labelFilter:a=()=>!0}=r;return o=>{var s;let{scales:[l]}=o,u=(null===(s=l.getTicks)||void 0===s?void 0:s.call(l))||l.getOptions().domain,c="string"==typeof i?(0,d.format)(i):i;return n(Object.assign(Object.assign({},r),{labelFormatter:c,labelFilter:(n,r,i)=>a(u[r],r,u),scale:l}))(o);};},E=x(n=>{let{direction:r="left",important:i={},labelFormatter:a,order:s,orientation:l,actualPosition:u,position:f,size:d,style:p={},title:y,tickCount:x,tickFilter:E,tickMethod:w,transform:S,indexBBox:T}=n,A=v(n,["direction","important","labelFormatter","order","orientation","actualPosition","position","size","style","title","tickCount","tickFilter","tickMethod","transform","indexBBox"]);return({scales:s,value:v,coordinate:C,theme:O})=>{var M;let{bbox:R}=v,[P]=s,{domain:k,xScale:I}=P.getOptions(),L=Object.assign(Object.assign(Object.assign({},function(n,r,i,a,o,s){let l=function(n,r,i,a,o,s){let l=i.axis,u=["top","right","bottom","left"].includes(o)?i[`axis${(0,m.capitalizeFirst)(o)}`]:i.axisLinear,f=n.getOptions().name;return Object.assign({},l,u,i[`axis${(0,c.default)(f)}`]||{});}(n,0,i,0,o,0);return"center"===o?Object.assign(Object.assign(Object.assign(Object.assign({},l),{labelDirection:"right"===a?"negative":"positive"}),"center"===a?{labelTransform:"translate(50%,0)"}:null),{tickDirection:"right"===a?"negative":"positive",labelSpacing:"center"===a?0:4,titleSpacing:(0,g.isVertical)(s)?10:0,tick:"center"!==a&&void 0}):l;}(P,0,O,r,f,l)),p),A),N=function(n,r,i="xy"){let[a,o,s]=_(r);return"xy"===i?n.includes("bottom")||n.includes("top")?o:a:"xz"===i?n.includes("bottom")||n.includes("top")?s:a:n.includes("bottom")||n.includes("top")?o:s;}(u||f,C,n.plane),D=function(n,r,i,a,o){let{x:s,y:l,width:u,height:c}=i;if("bottom"===n)return{startPos:[s,l],endPos:[s+u,l]};if("left"===n)return{startPos:[s+u,l+c],endPos:[s+u,l]};if("right"===n)return{startPos:[s,l+c],endPos:[s,l]};if("top"===n)return{startPos:[s,l+c],endPos:[s+u,l+c]};if("center"===n){if("vertical"===r)return{startPos:[s,l],endPos:[s,l+c]};if("horizontal"===r)return{startPos:[s,l],endPos:[s+u,l]};if("number"==typeof r){let[n,i]=a.getCenter(),[f,d]=(0,h.radiusOf)(a),[p,m]=(0,h.angleOf)(a),g=Math.min(u,c)/2,{insetLeft:v,insetTop:y}=a.getOptions(),_=f*g,b=d*g,[x,E]=[n+s-v,i+l-y],[w,S]=[Math.cos(r),Math.sin(r)],T=(0,h.isPolar)(a)&&o?(()=>{let{domain:n}=o.getOptions();return n.length;})():3;return{startPos:[x+b*w,E+b*S],endPos:[x+_*w,E+_*S],gridClosed:1e-6>Math.abs(m-p-360),gridCenter:[x,E],gridControlAngles:Array(T).fill(0).map((n,r,i)=>(m-p)/T*r)};}}return{};}(f,l,R,C,I),F=function(n){let{depth:r}=n.getOptions();return r?{tickIsBillboard:!0,lineIsBillboard:!0,labelIsBillboard:!0,titleIsBillboard:!0,gridIsBillboard:!0}:{};}(C),B=b(P,k,x,a,E,w,f,C),j=T?B.map((n,r)=>{let i=T.get(r);return i&&i[0]===n.label?Object.assign(Object.assign({},n),{bbox:i[1]}):n;}):B,z=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},L),{type:"linear",data:j,crossSize:d,titleText:(0,g.titleContent)(y),labelOverlap:function(n=[],r){if(n.length>0)return n;let{labelAutoRotate:i,labelAutoHide:a,labelAutoEllipsis:o,labelAutoWrap:s}=r,l=[],u=(n,r)=>{r&&l.push(Object.assign(Object.assign({},n),r));};return u({type:"rotate",optionalAngles:[0,15,30,45,60,90]},i),u({type:"ellipsis",minLength:20},o),u({type:"hide"},a),u({type:"wrap",wordWrapWidth:100,maxLines:3,recoveryWhenFail:!0},s),l;}(S,L),grid:(M=L.grid,!((0,h.isTheta)(C)||(0,h.isParallel)(C))&&(void 0===M?!!P.getTicks:M)),gridLength:N,line:!0,indexBBox:T}),L.line?null:{lineOpacity:0}),D),F),i);return z.labelOverlap.find(n=>"hide"===n.type)&&(z.crossSize=!1),new o.Axis({className:"axis",style:(0,g.adaptor)(z)});};}),w=x(n=>{let{order:r,size:i,position:a,orientation:s,labelFormatter:c,tickFilter:f,tickCount:d,tickMethod:p,important:m={},style:y={},indexBBox:x,title:E,grid:w=!1}=n,S=v(n,["order","size","position","orientation","labelFormatter","tickFilter","tickCount","tickMethod","important","style","indexBBox","title","grid"]);return({scales:[n],value:r,coordinate:i,theme:s})=>{let{bbox:v}=r,{domain:y}=n.getOptions(),T=b(n,y,d,c,f,p,a,i),A=x?T.map((n,r)=>{let i=x.get(r);return i&&i[0]===n.label?Object.assign(Object.assign({},n),{bbox:i[1]}):n;}):T,[C,O]=(0,h.radiusOf)(i),M=function(n,r,i,a,o){let{x:s,y:l,width:u,height:c}=r,f=[s+u/2,l+c/2],d=Math.min(u,c)/2,[p,m]=(0,h.angleOf)(o),[g,v]=_(o),y={center:f,radius:d,startAngle:p,endAngle:m,gridLength:Math.min(g,v)/2*(a-i)};if("inner"===n){let{insetLeft:n,insetTop:r}=o.getOptions();return Object.assign(Object.assign({},y),{center:[f[0]-n,f[1]-r],labelAlign:"perpendicular",labelDirection:"positive",tickDirection:"positive",gridDirection:"negative"});}return Object.assign(Object.assign({},y),{labelAlign:"parallel",labelDirection:"negative",tickDirection:"negative",gridDirection:"positive"});}(a,v,C,O,i),{axis:R,axisArc:P={}}=s,k=(0,g.adaptor)((0,l.default)({},R,P,M,Object.assign(Object.assign({type:"arc",data:A,titleText:(0,g.titleContent)(E),grid:w},S),m)));return new o.Axis({style:(0,u.default)(k,["transform"])});};});E.props={defaultPosition:"center",defaultSize:45,defaultOrder:0,defaultCrossPadding:[12,12],defaultPadding:[12,12]},w.props={defaultPosition:"outer",defaultOrientation:"vertical",defaultSize:45,defaultOrder:0,defaultCrossPadding:[12,12],defaultPadding:[12,12]};},"3bb506d6":function(n,r,i){n.exports=function(n,r,i){for(var a=i-1,o=n.length;++a ".concat(r),{"&-header":{paddingInlineEnd:0,paddingBlockEnd:n.padding,paddingInlineStart:0},"&-body":{paddingBlock:0,paddingInline:0,backgroundColor:"transparent"}}),"&&-split > &-body":{paddingBlock:0,paddingInline:0},"&&-contain-card > &-body":{display:"flex"}},"".concat(r,"-body-direction-column"),{flexDirection:"column"}),"".concat(r,"-body-wrap"),{flexWrap:"wrap"}),"&&-collapse",(0,o.default)({},"> ".concat(r),{"&-header":{paddingBlockEnd:n.padding,borderBlockEnd:0},"&-body":{display:"none"}})),"".concat(r,"-header"),{display:"flex",alignItems:"center",justifyContent:"space-between",paddingInline:n.paddingLG,paddingBlock:n.padding,paddingBlockEnd:0,"&-border":{"&":{paddingBlockEnd:n.padding},borderBlockEnd:"".concat(n.lineWidth,"px ").concat(n.lineType," ").concat(n.colorSplit)},"&-collapsible":{cursor:"pointer"}}),"".concat(r,"-title"),{color:n.colorText,fontWeight:500,fontSize:n.fontSizeLG,lineHeight:n.lineHeight}),"".concat(r,"-extra"),{color:n.colorText}),"".concat(r,"-type-inner"),(0,o.default)({},"".concat(r,"-header"),{backgroundColor:n.colorFillAlter})),"".concat(r,"-collapsible-icon"),{marginInlineEnd:n.marginXS,color:n.colorIconHover,":hover":{color:n.colorPrimaryHover},"& svg":{transition:"transform ".concat(n.motionDurationMid)}}),"".concat(r,"-body"),{display:"block",boxSizing:"border-box",height:"100%",paddingInline:n.paddingLG,paddingBlock:n.padding,"&-center":{display:"flex",alignItems:"center",justifyContent:"center"}}),"&&-size-small",(0,o.default)((0,o.default)({},r,{"&-header":{paddingInline:n.paddingSM,paddingBlock:n.paddingXS,paddingBlockEnd:0,"&-border":{paddingBlockEnd:n.paddingXS}},"&-title":{fontSize:n.fontSize},"&-body":{paddingInline:n.paddingSM,paddingBlock:n.paddingSM}}),"".concat(r,"-header").concat(r,"-header-collapsible"),{paddingBlock:n.paddingXS})))),"".concat(r,"-col"),(0,o.default)((0,o.default)({},"&".concat(r,"-split-vertical"),{borderInlineEnd:"".concat(n.lineWidth,"px ").concat(n.lineType," ").concat(n.colorSplit)}),"&".concat(r,"-split-horizontal"),{borderBlockEnd:"".concat(n.lineWidth,"px ").concat(n.lineType," ").concat(n.colorSplit)})),"".concat(r,"-tabs"),(0,o.default)((0,o.default)((0,o.default)((0,o.default)((0,o.default)((0,o.default)({},"".concat(n.antCls,"-tabs-top > ").concat(n.antCls,"-tabs-nav"),(0,o.default)({marginBlockEnd:0},"".concat(n.antCls,"-tabs-nav-list"),{marginBlockStart:n.marginXS,paddingInlineStart:n.padding})),"".concat(n.antCls,"-tabs-bottom > ").concat(n.antCls,"-tabs-nav"),(0,o.default)({marginBlockEnd:0},"".concat(n.antCls,"-tabs-nav-list"),{paddingInlineStart:n.padding})),"".concat(n.antCls,"-tabs-left"),(0,o.default)({},"".concat(n.antCls,"-tabs-content-holder"),(0,o.default)({},"".concat(n.antCls,"-tabs-content"),(0,o.default)({},"".concat(n.antCls,"-tabs-tabpane"),{paddingInlineStart:0})))),"".concat(n.antCls,"-tabs-left > ").concat(n.antCls,"-tabs-nav"),(0,o.default)({marginInlineEnd:0},"".concat(n.antCls,"-tabs-nav-list"),{paddingBlockStart:n.padding})),"".concat(n.antCls,"-tabs-right"),(0,o.default)({},"".concat(n.antCls,"-tabs-content-holder"),(0,o.default)({},"".concat(n.antCls,"-tabs-content"),(0,o.default)({},"".concat(n.antCls,"-tabs-tabpane"),{paddingInlineStart:0})))),"".concat(n.antCls,"-tabs-right > ").concat(n.antCls,"-tabs-nav"),(0,o.default)({},"".concat(n.antCls,"-tabs-nav-list"),{paddingBlockStart:n.padding})));},f=function(n,r){var i=r.componentCls;return 0===n?(0,o.default)({},"".concat(i,"-col-0"),{display:"none"}):(0,o.default)({},"".concat(i,"-col-").concat(n),{flexShrink:0,width:"".concat(n/24*100,"%")});};function d(n){return(0,l.useStyle)("ProCard",function(r){var i=(0,s.default)((0,s.default)({},r),{},{componentCls:".".concat(n)});return[c(i),Array(25).fill(1).map(function(n,r){return f(r,i);})];});}},"3efd64b7":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return c;},phi:function(){return l;},squarifyRatio:function(){return u;}});var a=i("777fffbe"),o=a._(i("a96a4c71")),s=a._(i("01c1137e")),l=(1+Math.sqrt(5))/2;function u(n,r,i,a,l,u){for(var c,f,d,h,p,m,g,v,y,_,b,x=[],E=r.children,w=0,S=0,T=E.length,A=r.value;wg&&(g=f),(v=Math.max(g/(b=p*p*_),b/m))>y){p-=f;break;}y=v;}x.push(c={value:p,dice:d1?r:1);},i;}(l);},"3f3add3b":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return l;}});var a=i("777fffbe"),o=a._(i("480dd2d5")),s=a._(i("b42f1d64")),l=function(n){if(!(0,s.default)(n))return!1;var r=(0,o.default)(n);return"[object Function]"==r||"[object GeneratorFunction]"==r||"[object AsyncFunction]"==r||"[object Proxy]"==r;};},"3f775776":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});var a=i("777fffbe")._(i("2cc7f81c")).default.Symbol;},"3f92e064":function(n,r,i){"use strict";function a(n,r){return Math.sqrt((n[0]-r[0])*(n[0]-r[0])+(n[1]-r[1])*(n[1]-r[1]));}i.d(r,"__esModule",{value:!0}),i.d(r,"distanceSquareRoot",{enumerable:!0,get:function(){return a;}});},"4017e4bc":function(n,r,i){"use strict";function a(n,r){return n=+n,r=+r,function(i){return n*(1-i)+r*i;};}i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});},"40c8a0ce":function(n,r,i){var a=i("1c9de5a5"),o=i("426615a4"),s=i("27063286"),l=i("20367225"),u=i("469db534"),c=i("bbc15be8"),f=i("a76367d1"),d=i("a59b28c4"),h="[object Arguments]",p="[object Array]",m="[object Object]",g=Object.prototype.hasOwnProperty;n.exports=function(n,r,i,v,y,_){var b=c(n),x=c(r),E=b?p:u(n),w=x?p:u(r);E=E==h?m:E,w=w==h?m:w;var S=E==m,T=w==m,A=E==w;if(A&&f(n)){if(!f(r))return!1;b=!0,S=!1;}if(A&&!S)return _||(_=new a),b||d(n)?o(n,r,i,v,y,_):s(n,r,E,i,v,y,_);if(!(1&i)){var C=S&&g.call(n,"__wrapped__"),O=T&&g.call(r,"__wrapped__");if(C||O){var M=C?n.value():n,R=O?r.value():r;return _||(_=new a),y(M,R,i,v,_);}}return!!A&&(_||(_=new a),l(n,r,i,v,y,_));};},"410a4659":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"Vector",{enumerable:!0,get:function(){return u;}});var a=i("af0c43b0"),o=i("45669125"),s=i("7d4c6398"),l=this&&this.__rest||function(n,r){var i={};for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&0>r.indexOf(a)&&(i[a]=n[a]);if(null!=n&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,a=Object.getOwnPropertySymbols(n);or.indexOf(a[o])&&Object.prototype.propertyIsEnumerable.call(n,a[o])&&(i[a[o]]=n[a[o]]);return i;};let u=(n,r)=>{let{arrow:i=!0,arrowSize:u="40%"}=n,c=l(n,["arrow","arrowSize"]),{document:f}=r;return(n,r,d)=>{let{defaultColor:h}=d,p=l(d,["defaultColor"]),{color:m=h,transform:g}=r,[v,y]=n,_=(0,a.path)();if(_.moveTo(...v),_.lineTo(...y),i){let[n,r]=(0,o.arrowPoints)(v,y,{arrowSize:u});_.moveTo(...n),_.lineTo(...y),_.lineTo(...r);}return(0,s.select)(f.createElement("path",{})).call(o.applyStyle,p).style("d",_.toString()).style("stroke",m).style("transform",g).call(o.applyStyle,c).node();};};u.props={defaultMarker:"line",defaultEnterAnimation:"fadeIn",defaultUpdateAnimation:"morphing",defaultExitAnimation:"fadeOut"};},"41a7442f":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return _;}});var a=i("777fffbe"),o=i("78a22024"),s=a._(o),l=i("adf76174"),u=a._(l),c=i("609f48be");a._(c);var f=i("e4870cf0"),d=a._(f),h=i("a854094b"),p=a._(h),m=i("398ab4d8"),g=i("a3273044"),v=new m.Keyframes("card-loading",{"0%":{backgroundPosition:"0 50%"},"50%":{backgroundPosition:"100% 50%"},"100%":{backgroundPosition:"0 50%"}}),y=i("dac8af92"),_=function(n){var r,i=n.style,a=n.prefix;return(0,(r=a||"ant-pro-card",(0,g.useStyle)("ProCardLoading",function(n){var i;return[(i=(0,d.default)((0,d.default)({},n),{},{componentCls:".".concat(r)}),(0,p.default)({},i.componentCls,(0,p.default)((0,p.default)({"&-loading":{overflow:"hidden"},"&-loading &-body":{userSelect:"none"}},"".concat(i.componentCls,"-loading-content"),{width:"100%",p:{marginBlock:0,marginInline:0}}),"".concat(i.componentCls,"-loading-block"),{height:"14px",marginBlock:"4px",background:"linear-gradient(90deg, rgba(54, 61, 64, 0.2), rgba(54, 61, 64, 0.4), rgba(54, 61, 64, 0.2))",backgroundSize:"600% 600%",borderRadius:i.borderRadius,animationName:v,animationDuration:"1.4s",animationTimingFunction:"ease",animationIterationCount:"infinite"})))];})).wrapSSR)((0,y.jsxs)("div",{className:"".concat(a,"-loading-content"),style:i,children:[(0,y.jsx)(u.default,{gutter:8,children:(0,y.jsx)(s.default,{span:22,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})})}),(0,y.jsxs)(u.default,{gutter:8,children:[(0,y.jsx)(s.default,{span:8,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})}),(0,y.jsx)(s.default,{span:15,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})})]}),(0,y.jsxs)(u.default,{gutter:8,children:[(0,y.jsx)(s.default,{span:6,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})}),(0,y.jsx)(s.default,{span:18,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})})]}),(0,y.jsxs)(u.default,{gutter:8,children:[(0,y.jsx)(s.default,{span:13,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})}),(0,y.jsx)(s.default,{span:9,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})})]}),(0,y.jsxs)(u.default,{gutter:8,children:[(0,y.jsx)(s.default,{span:4,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})}),(0,y.jsx)(s.default,{span:3,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})}),(0,y.jsx)(s.default,{span:16,children:(0,y.jsx)("div",{className:"".concat(a,"-loading-block")})})]})]}));};},"42520f5c":function(n,r,i){"use strict";function a(){}i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});},"426615a4":function(n,r,i){var a=i("6c4af3b3"),o=i("a3307b57"),s=i("831aa241");n.exports=function(n,r,i,l,u,c){var f=1&i,d=n.length,h=r.length;if(d!=h&&!(f&&h>d))return!1;var p=c.get(n),m=c.get(r);if(p&&m)return p==r&&m==n;var g=-1,v=!0,y=2&i?new a:void 0;for(c.set(n,r),c.set(r,n);++gI*I+L*L&&(C=M,O=R),{cx:C,cy:O,x01:-h,y01:-p,x11:C*(s/S-1),y11:O*(s/S-1)};}function p(){var n=l,r=u,i=(0,a.default)(0),p=null,m=c,g=f,v=d,y=null,_=(0,s.withPath)(b);function b(){var a,s,l=+n.apply(this,arguments),u=+r.apply(this,arguments),c=m.apply(this,arguments)-o.halfPi,f=g.apply(this,arguments)-o.halfPi,d=(0,o.abs)(f-c),b=f>c;if(y||(y=a=_()),uo.epsilon){if(d>o.tau-o.epsilon)y.moveTo(u*(0,o.cos)(c),u*(0,o.sin)(c)),y.arc(0,0,u,c,f,!b),l>o.epsilon&&(y.moveTo(l*(0,o.cos)(f),l*(0,o.sin)(f)),y.arc(0,0,l,f,c,b));else{var x,E,w=c,S=f,T=c,A=f,C=d,O=d,M=v.apply(this,arguments)/2,R=M>o.epsilon&&(p?+p.apply(this,arguments):(0,o.sqrt)(l*l+u*u)),P=(0,o.min)((0,o.abs)(u-l)/2,+i.apply(this,arguments)),k=P,I=P;if(R>o.epsilon){var L=(0,o.asin)(R/l*(0,o.sin)(M)),N=(0,o.asin)(R/u*(0,o.sin)(M));(C-=2*L)>o.epsilon?(L*=b?1:-1,T+=L,A-=L):(C=0,T=A=(c+f)/2),(O-=2*N)>o.epsilon?(N*=b?1:-1,w+=N,S-=N):(O=0,w=S=(c+f)/2);}var D=u*(0,o.cos)(w),F=u*(0,o.sin)(w),B=l*(0,o.cos)(A),j=l*(0,o.sin)(A);if(P>o.epsilon){var z,U=u*(0,o.cos)(S),V=u*(0,o.sin)(S),G=l*(0,o.cos)(T),H=l*(0,o.sin)(T);if(do.epsilon?I>o.epsilon?(x=h(G,H,D,F,u,I,b),E=h(U,V,B,j,u,I,b),y.moveTo(x.cx+x.x01,x.cy+x.y01),Io.epsilon&&C>o.epsilon?k>o.epsilon?(x=h(B,j,U,V,l,-k,b),E=h(D,F,G,H,l,-k,b),y.lineTo(x.cx+x.x01,x.cy+x.y01),kn).filter(n=>"transpose"===n).length%2!=0;}function o(n){let{transformations:r}=n.getOptions();return r.some(([n])=>"polar"===n);}function s(n){let{transformations:r}=n.getOptions();return r.some(([n])=>"reflect"===n)&&r.some(([n])=>n.startsWith("transpose"));}function l(n){let{transformations:r}=n.getOptions();return r.some(([n])=>"helix"===n);}function u(n){let{transformations:r}=n.getOptions();return r.some(([n])=>"parallel"===n);}function c(n){let{transformations:r}=n.getOptions();return r.some(([n])=>"fisheye"===n);}function f(n){return u(n)&&o(n);}function d(n){return l(n)||o(n);}function h(n){return o(n)&&a(n);}function p(n){if(d(n)){let[r,i]=n.getSize(),a=n.getOptions().transformations.find(n=>"polar"===n[0]);if(a)return Math.max(r,i)/2*a[4];}return 0;}function m(n){let{transformations:r}=n.getOptions(),[,,,i,a]=r.find(n=>"polar"===n[0]);return[+i,+a];}function g(n,r=!0){let{transformations:i}=n.getOptions(),[,a,o]=i.find(n=>"polar"===n[0]);return r?[180*+a/Math.PI,180*+o/Math.PI]:[a,o];}function v(n,r){let{transformations:i}=n.getOptions(),[,...a]=i.find(n=>n[0]===r);return a;}i.d(r,"__esModule",{value:!0}),i.e(r,{angleOf:function(){return g;},getRadius:function(){return p;},getTransformOptions:function(){return v;},isCircular:function(){return d;},isFisheye:function(){return c;},isHelix:function(){return l;},isParallel:function(){return u;},isPolar:function(){return o;},isRadar:function(){return f;},isRadial:function(){return s;},isTheta:function(){return h;},isTranspose:function(){return a;},radiusOf:function(){return m;}});},"42fc1f40":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return l;}});var a=i("777fffbe"),o=a._(i("a96a4c71")),s=a._(i("01c1137e"));function l(n,r,i,a,l){(1&n.depth?s.default:o.default)(n,r,i,a,l);}},"43f60061":function(n,r,i){var a=i("99045891");n.exports=function(n){return function(r){return a(r,n);};};},"449c5245":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),r.hover=void 0;var a,o=Object.assign||function(n){for(var r=1;r1&&void 0!==arguments[1]?arguments[1]:"span";return function(i){function a(){!function(n,r){if(!(n instanceof r))throw TypeError("Cannot call a class as a function");}(this,a);for(var i,u,c,f=arguments.length,d=Array(f),h=0;h0===i?n.moveTo(r[0],r[1]):n.lineTo(r[0],r[1])),n.closePath(),n;}function p(n,r,i){let{arrowSize:a}=i,o="string"==typeof a?+parseFloat(a)/100*(0,f.dist)(n,r):a,s=Math.PI/6,l=Math.atan2(r[1]-n[1],r[0]-n[0]),u=Math.PI/2-l-s,c=[r[0]-o*Math.sin(u),r[1]-o*Math.cos(u)],d=l-s;return[c,[r[0]-o*Math.cos(d),r[1]-o*Math.sin(d)]];}function m(n,r,i,a,o){let s=(0,f.angle)((0,f.sub)(a,r))+Math.PI,l=(0,f.angle)((0,f.sub)(a,i))+Math.PI;return n.arc(a[0],a[1],o,s,l,l-s<0),n;}function g(n,r,i,a="y",c="between",f=!1){let d="y"===a||!0===a?i:r,h=(0,u.indexOf)(d),[p,m]=(0,l.default)(h,n=>d[n]),v=new o.Linear({domain:[p,m],range:[0,100]}),y=n=>(0,s.default)(d[n])&&!Number.isNaN(d[n])?v.map(d[n]):0,_={between:r=>`${n[r]} ${y(r)}%`,start:r=>0===r?`${n[r]} ${y(r)}%`:`${n[r-1]} ${y(r)}%, ${n[r]} ${y(r)}%`,end:r=>r===n.length-1?`${n[r]} ${y(r)}%`:`${n[r]} ${y(r)}%, ${n[r+1]} ${y(r)}%`},b=h.sort((n,r)=>y(n)-y(r)).map(_[c]||_.between).join(",");return`linear-gradient(${"y"===a||!0===a?f?180:90:f?90:0}deg, ${b})`;}function v(n){let[r,i,a,o]=n;return[o,r,i,a];}function y(n,r,i){let[a,o,,s]=(0,c.isTranspose)(n)?v(r):r,[l,u]=i,d=n.getCenter(),h=(0,f.angleWithQuadrant)((0,f.sub)(a,d)),p=(0,f.angleWithQuadrant)((0,f.sub)(o,d)),m=p===h&&l!==u?p+2*Math.PI:p;return{startAngle:h,endAngle:m-h>=0?m:2*Math.PI+m,innerRadius:(0,f.dist)(s,d),outerRadius:(0,f.dist)(a,d)};}function _(n){let{colorAttribute:r,opacityAttribute:i=r}=n;return`${i}Opacity`;}function b(n,r){if(!(0,c.isPolar)(n))return"";let i=n.getCenter(),{transform:a}=r;return`translate(${i[0]}, ${i[1]}) ${a||""}`;}function x(n){if(1===n.length)return n[0];let[[r,i,a=0],[o,s,l=0]]=n;return[(r+o)/2,(i+s)/2,(a+l)/2];}},"459d5e7d":function(n,r,i){var a=i("7505d865"),o=i("39c5fc9e"),s=i("78ccff10"),l=i("aef7be7a"),u=Object.getOwnPropertySymbols?function(n){for(var r=[];n;)a(r,s(n)),n=o(n);return r;}:l;n.exports=u;},"45d14b4e":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"Text",{enumerable:!0,get:function(){return l;}});var a=i("3862611d"),o=i("5e195043"),s=i("0cf4df74"),l=function(n){function r(r){void 0===r&&(r={});var i=r.style,o=(0,a.__rest)(r,["style"]);return n.call(this,(0,a.__assign)({style:(0,a.__assign)({text:"",fill:"black",fontFamily:"sans-serif",fontSize:16,fontStyle:"normal",fontVariant:"normal",fontWeight:"normal",lineWidth:1,textAlign:"start",textBaseline:"middle"},i)},o))||this;}return(0,a.__extends)(r,n),Object.defineProperty(r.prototype,"offscreenGroup",{get:function(){return this._offscreen||(this._offscreen=(0,s.createOffscreenGroup)(this)),this._offscreen;},enumerable:!1,configurable:!0}),r.prototype.disconnectedCallback=function(){var n;null===(n=this._offscreen)||void 0===n||n.destroy();},r;}(o.Text);},"4600e9c8":function(n,r,i){var a=i("a4c5f883"),o=i("aea2ff65"),s=i("3bb506d6");n.exports=function(n,r,i){return r==r?s(n,r,i):a(n,o,i);};},"469db534":function(n,r,i){var a=i("90fd84e0"),o=i("1cb05aa4"),s=i("42885e34"),l=i("863198de"),u=i("b5f7c477"),c=i("d91aaf3b"),f=i("c6018141"),d="[object Map]",h="[object Promise]",p="[object Set]",m="[object WeakMap]",g="[object DataView]",v=f(a),y=f(o),_=f(s),b=f(l),x=f(u),E=c;(a&&E(new a(new ArrayBuffer(1)))!=g||o&&E(new o)!=d||s&&E(s.resolve())!=h||l&&E(new l)!=p||u&&E(new u)!=m)&&(E=function(n){var r=c(n),i="[object Object]"==r?n.constructor:void 0,a=i?f(i):"";if(a)switch(a){case v:return g;case y:return d;case _:return h;case b:return p;case x:return m;}return r;}),n.exports=E;},"46f5c5e9":function(n,r,i){"use strict";var a=Math.log(2),o=n.exports,s=i("c97a579d");function l(n){return 1-Math.abs(n);}n.exports.getUnifiedMinMax=function(n,r){return o.getUnifiedMinMaxMulti([n],r);},n.exports.getUnifiedMinMaxMulti=function(n,r){r=r||{};var i=!1,a=!1,o=s.isNumber(r.width)?r.width:2,l=s.isNumber(r.size)?r.size:50,u=s.isNumber(r.min)?r.min:(i=!0,s.findMinMulti(n)),c=s.isNumber(r.max)?r.max:(a=!0,s.findMaxMulti(n)),f=(c-u)/(l-1);return i&&(u-=2*o*f),a&&(c+=2*o*f),{min:u,max:c};},n.exports.create=function(n,r){if(r=r||{},!n||0===n.length)return[];var i=s.isNumber(r.size)?r.size:50,a=s.isNumber(r.width)?r.width:2,u=o.getUnifiedMinMax(n,{size:i,width:a,min:r.min,max:r.max}),c=u.min,f=u.max-c,d=f/(i-1);if(0===f)return[{x:c,y:1}];for(var h=[],p=0;p=h.length)){var i=Math.max(r-a,0),o=Math.min(r+a,h.length-1),l=i-(r-a),u=r+a-o,f=g/(g-(m[-a-1+l]||0)-(m[-a-1+u]||0));l>0&&(y+=f*(l-1)*v);var p=Math.max(0,r-a+1);s.inside(0,h.length-1,p)&&(h[p].y+=1*f*v),s.inside(0,h.length-1,r+1)&&(h[r+1].y-=2*f*v),s.inside(0,h.length-1,o+1)&&(h[o+1].y+=1*f*v);}});var _=y,b=0,x=0;return h.forEach(function(n){b+=n.y,_+=b,n.y=_,x+=_;}),x>0&&h.forEach(function(n){n.y/=x;}),h;},n.exports.getExpectedValueFromPdf=function(n){if(n&&0!==n.length){var r=0;return n.forEach(function(n){r+=n.x*n.y;}),r;}},n.exports.getXWithLeftTailArea=function(n,r){if(n&&0!==n.length){for(var i=0,a=0,o=0;o=r));o++);return n[a].x;}},n.exports.getPerplexity=function(n){if(n&&0!==n.length){var r=0;return n.forEach(function(n){var i=Math.log(n.y);isFinite(i)&&(r+=n.y*i);}),Math.pow(2,r=-r/a);}};},"47334cff":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return o;}});var a=i("777fffbe")._(i("e93984e8")),o=function(n,r,i){"__proto__"==r&&a.default?(0,a.default)(n,r,{configurable:!0,enumerable:!0,value:i,writable:!0}):n[r]=i;};},"4749c5b7":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{aProjectFlat:function(){return h;},amap2Project:function(){return p;},bBoxToBounds:function(){return v;},boundsContains:function(){return g;},calculateCentroid:function(){return _;},calculatePointsCenterAndRadius:function(){return b;},extent:function(){return f;},getBBoxFromPoints:function(){return x;},lngLatInExtent:function(){return c;},lngLatToMeters:function(){return d;},normalize:function(){return y;},padBounds:function(){return m;}});var a=i("ca69744f");function o(n){var r=[1/0,1/0,-1/0,-1/0];return(0,a.coordEach)(n,function(n){r[0]>n[0]&&(r[0]=n[0]),r[1]>n[1]&&(r[1]=n[1]),r[2]i&&n.lng<=o&&n.lat>a&&n.lat<=s;}function f(n){let r=[1/0,1/0,-1/0,-1/0];return n.forEach(n=>{let{coordinates:i}=n;(function n(r,i){return Array.isArray(i[0])?i.forEach(i=>{n(r,i);}):(r[0]>i[0]&&(r[0]=i[0]),r[1]>i[1]&&(r[1]=i[1]),r[2]180||n<-180)&&((n%=360)>180&&(n=-360+n),n<-180&&(n=360+n),0===n&&(n=0)),n;}(n[0]),a=function(n){if(null==n)throw Error("lat is required");return(n>90||n<-90)&&((n%=180)>90&&(n=-180+n),n<-90&&(n=180+n),0===n&&(n=0)),n;}(n[1]);return a>85&&(a=85),a<-85&&(a=-85),3===n.length?[i,a,n[2]]:[i,a];}(n,r))[0],o=n[1],s=a*u/180,l=Math.log(Math.tan((90+o)*Math.PI/360))/(Math.PI/180);return l=l*u/180,i.enable&&(s=Number(s.toFixed(i.decimal)),l=Number(l.toFixed(i.decimal))),3===n.length?[s,l,n[2]]:[s,l];}function h(n){let r=Math.max(Math.min(85.0511287798,n[1]),-85.0511287798),i=Math.PI/180,a=n[0]*i,o=r*i;o=Math.log(Math.tan(Math.PI/4+o/2));let s=-.5/Math.PI;return i=.5,[Math.floor(a=268435456*(.5/Math.PI*a+.5)),Math.floor(o=268435456*(s*o+i))];}function p(n,r){let i=Math.PI/180;return r=Math.max(Math.min(85.0511287798,r),-85.0511287798),n*=i,r*=i,[6378137*n,6378137*(r=Math.log(Math.tan(Math.PI/4+r/2)))];}function m(n,r){let i=Math.abs(n[1][1]-n[0][1])*r,a=Math.abs(n[1][0]-n[0][0])*r;return[[n[0][0]-a,n[0][1]-i],[n[1][0]+a,n[1][1]+i]];}function g(n,r){return n[0][0]<=r[0][0]&&n[0][1]<=r[0][1]&&n[1][0]>=r[1][0]&&n[1][1]>=r[1][1];}function v(n){return[[n[0],n[1]],[n[2],n[3]]];}function y(n){var r;let i=(r=[0,0],Math.sqrt(Math.pow(n[0]-r[0],2)+Math.pow(n[1]-r[1],2)));return[n[0]/i,n[1]/i];}function _(n){if((0,l.isNumber)(n[0]))return n;if((0,l.isNumber)(n[0][0]))throw Error("\u5F53\u524D\u6570\u636E\u4E0D\u652F\u6301\u6807\u6CE8");if((0,l.isNumber)(n[0][0][0])){let r=0,i=0,a=0;return n.forEach(n=>{n.forEach(n=>{r+=n[0],i+=n[1],a++;});}),[r/a,i/a,0];}throw Error("\u5F53\u524D\u6570\u636E\u4E0D\u652F\u6301\u6807\u6CE8");}function b(n){let r=n[0],i=n[1],a=n[0],o=n[1],s=0,l=0,u=0;for(let c=0;cn;},"4bb2c4c7":function(n,r,i){var a=i("eecc512b")(i("1552e56f"));n.exports=a;},"4c05700a":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return g;}});var a=i("777fffbe"),o=i("852bbaa9"),s=a._(i("e4870cf0")),l=a._(i("613f75ca")),u=i("2a7c9880"),c=o._(i("609f48be")),f=a._(i("2faf3d77")),d=a._(i("551ddf56")),h=i("dac8af92"),p=["fieldProps","proFieldProps"],m="dateRange",g=c.default.forwardRef(function(n,r){var i=n.fieldProps,a=n.proFieldProps,o=(0,l.default)(n,p),g=(0,c.useContext)(f.default);return(0,h.jsx)(d.default,(0,s.default)({ref:r,fieldProps:(0,s.default)({getPopupContainer:g.getPopupContainer},i),valueType:m,proFieldProps:a,filedConfig:{valueType:m,customLightMode:!0,lightFilterLabelFormatter:function(n){return(0,u.dateArrayFormatter)(n,(null==i?void 0:i.format)||"YYYY-MM-DD");}}},o));});},"4c1ff8e6":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return d;}});var a=i("1d1b11bd"),o=i("7b8bcee7"),s={depth:-1},l={},u={};function c(n){return n.id;}function f(n){return n.parentId;}function d(){var n,r=c,i=f;function d(a){var c,f,d,m,g,v,y,_,b=Array.from(a),x=r,E=i,w=new Map;if(null!=n){let r=b.map((r,i)=>{var o;let s;return o=n(r,i,a),s=(o=`${o}`).length,p(o,s-1)&&!p(o,s-2)&&(o=o.slice(0,-1)),"/"===o[0]?o:`/${o}`;}),i=r.map(h),o=new Set(r).add("");for(let n of i)o.has(n)||(o.add(n),r.push(n),i.push(h(n)),b.push(u));x=(n,i)=>r[i],E=(n,r)=>i[r];}for(d=0,c=b.length;d=0&&(v=b[n]).data===u;--n)v.data=null;}if(m.parent=s,m.eachBefore(function(n){n.depth=n.parent.depth+1,--c;}).eachBefore(o.computeHeight),m.parent=null,c>0)throw Error("cycle");return m;}return d.id=function(n){return arguments.length?(r=(0,a.optional)(n),d):r;},d.parentId=function(n){return arguments.length?(i=(0,a.optional)(n),d):i;},d.path=function(r){return arguments.length?(n=(0,a.optional)(r),d):n;},d;}function h(n){let r=n.length;if(r<2)return"";for(;--r>1&&!p(n,r););return n.slice(0,r);}function p(n,r){if("/"===n[r]){let i=0;for(;r>0&&"\\"===n[--r];)++i;if((1&i)==0)return!0;}return!1;}},"4c221234":function(n,r,i){var a=i("d03c096f").default,o=i("df50a282");n.exports=function(n){var r=o(n,"string");return"symbol"==a(r)?r:r+"";},n.exports.__esModule=!0,n.exports.default=n.exports;},"4d6ab2e4":function(n,r,i){n.exports=function(){var n=document.getSelection();if(!n.rangeCount)return function(){};for(var r=document.activeElement,i=[],a=0;a2&&void 0!==arguments[2]?arguments[2]:"0",a=String(n);a.lengthr?1:n>=r?0:NaN;}i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});},"4fb4672f":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return o;}});var a=i("d4c76e17");function o(n){var r=n.length;return function(i){var o=Math.floor(((i%=1)<0?++i:i)*r),s=n[(o+r-1)%r],l=n[o%r],u=n[(o+1)%r],c=n[(o+2)%r];return(0,a.basis)((i-o/r)*r,s,l,u,c);};}},"5007e869":function(n,r,i){"use strict";function a(n){return null===n?NaN:+n;}function*o(n,r){if(void 0===r)for(let r of n)null!=r&&(r=+r)>=r&&(yield r);else{let i=-1;for(let a of n)null!=(a=r(a,++i,n))&&(a=+a)>=a&&(yield a);}}i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return a;},numbers:function(){return o;}});},"5120ac0c":function(n,r,i){"use strict";function a(n,r,i){return Math.max(r,Math.min(n,i));}function o(n,r=10){return"number"!=typeof n?n:1e-15>Math.abs(n)?n:parseFloat(n.toFixed(r));}i.d(r,"__esModule",{value:!0}),i.e(r,{clamp:function(){return a;},prettyNumber:function(){return o;}});},"515e037d":function(n,r,i){var a=/\w*$/;n.exports=function(n){var r=new n.constructor(n.source,a.exec(n));return r.lastIndex=n.lastIndex,r;};},"51882ede":function(n,r,i){i.d(r,"__esModule",{value:!0}),i.e(r,{default:function(){return p;}});var a=i("777fffbe"),o=i("852bbaa9"),s=i("7cfeda15"),l=a._(s),u=i("609f48be"),c=o._(u),f={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M257.7 752c2 0 4-.2 6-.5L431.9 722c2-.4 3.9-1.3 5.3-2.8l423.9-423.9a9.96 9.96 0 000-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2a33.5 33.5 0 009.4 29.8c6.6 6.4 14.9 9.9 23.8 9.9zm67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z"}}]},name:"edit",theme:"outlined"},d=i("887aaf6c"),h=a._(d),p=c.forwardRef(function(n,r){return c.createElement(h.default,(0,l.default)({},n,{ref:r,icon:f}));});},"53930c34":function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});var a=function(){function n(){this._events={};}return n.prototype.on=function(n,r,i){return this._events[n]||(this._events[n]=[]),this._events[n].push({callback:r,once:!!i}),this;},n.prototype.once=function(n,r){return this.on(n,r,!0);},n.prototype.emit=function(n){for(var r=this,i=[],a=1;a{this.iconFontGlyphs[n.name]=n.unicode;});}addIconFont(n,r){this.iconFontMap.set(n,r);}getIconFontKey(n){return this.iconFontMap.get(n)||n;}getGlyph(n){return this.iconFontGlyphs[n]?String.fromCharCode(parseInt(this.iconFontGlyphs[n],16)):"";}setFontOptions(n){this.fontOptions=(0,M.default)((0,M.default)({},this.fontOptions),n),this.key=this.getKey();let r=this.getNewChars(this.key,this.fontOptions.characterSet),i=this.cache.get(this.key);if(i&&0===r.length)return;let a=this.generateFontAtlas(this.key,r,i);this.fontAtlas=a,this.cache.set(this.key,a);}addFontFace(n,r){let i=document.createElement("style");i.type="text/css",i.innerText=` @font-face{ font-family: '${n}'; src: url('${r}') format('woff2'), @@ -993,4 +993,4 @@ ${o} display: none !important; } `);class tl extends d{getServiceConstructor(){return ts;}}let tu=F,tc=F,tf=F;},ffac7795:function(n,r,i){"use strict";i.d(r,"__esModule",{value:!0}),i.d(r,"default",{enumerable:!0,get:function(){return a;}});var a=i("777fffbe")._(i("bf207cd8")).default;}}]); -//# sourceMappingURL=vendors_0-async.7e409de9.js.map \ No newline at end of file +//# sourceMappingURL=vendors_0-async.88a28419.js.map \ No newline at end of file diff --git a/vendors_0-async.7e409de9.js.map b/vendors_0-async.88a28419.js.map similarity index 62% rename from vendors_0-async.7e409de9.js.map rename to vendors_0-async.88a28419.js.map index 8c36201f..218fae16 100644 --- a/vendors_0-async.7e409de9.js.map +++ b/vendors_0-async.88a28419.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/@rc-component/context/es/context.js","node_modules/@rc-component/context/es/Immutable.js","node_modules/@rc-component/context/es/index.js","node_modules/@antv/l7-layers/es/point/models/image.js","node_modules/rc-util/lib/Dom/canUseDom.js","node_modules/lodash/_baseMatchesProperty.js","node_modules/supercluster/dist/supercluster.js","node_modules/element-resize-detector/src/element-utils.js","node_modules/@mapbox/point-geometry/index.js","node_modules/@ant-design/pro-table/es/utils/index.js","node_modules/reactcss/lib/mergeClasses.js","node_modules/d3-interpolate/src/numberArray.js","node_modules/d3-hierarchy/src/treemap/slice.js","node_modules/rc-tree/es/util.js","node_modules/lodash/_setCacheAdd.js","node_modules/@ant-design/pro-form/es/helpers/grid.js","node_modules/d3-interpolate/src/string.js","node_modules/@antv/g2/esm/coordinate/polar.js","node_modules/@antv/g2/esm/utils/angle.js","node_modules/@antv/component/esm/ui/marker/index.js","node_modules/@antv/component/esm/ui/marker/utils.js","node_modules/lodash/_arrayEach.js","node_modules/@antv/l7-map/node_modules/@mapbox/unitbezier/index.js","node_modules/@ant-design/pro-form/es/layouts/StepsForm/StepForm.js","node_modules/@antv/l7-layers/es/utils/load-image.js","node_modules/@antv/l7-layers/es/polygon/models/extrude.js","node_modules/@antv/l7-layers/es/polygon/models/extrusion.js","node_modules/@antv/l7-layers/es/polygon/models/fill.js","node_modules/@antv/l7-layers/es/polygon/models/ocean.js","node_modules/@antv/l7-layers/es/polygon/models/water.js","node_modules/@antv/l7-layers/es/polygon/models/index.js","node_modules/@antv/l7-layers/es/polygon/index.js","node_modules/d3-shape/src/curve/linearClosed.js","node_modules/pbf/index.js","node_modules/lodash-es/_Map.js","node_modules/@antv/util/esm/lodash/is-type.js","node_modules/@ant-design/icons-svg/es/asn/PlusOutlined.js","node_modules/@ant-design/icons/es/icons/PlusOutlined.js","node_modules/lodash/_arrayIncludesWith.js","node_modules/@antv/l7-map/es/map/util/util.js","node_modules/rc-tree/es/utils/keyUtil.js","node_modules/lodash/_isKey.js","node_modules/@antv/l7-layers/es/core/interface.js","node_modules/viewport-mercator-project/dist/esm/viewport.js","node_modules/@antv/l7-component/es/assets/iconfont/iconfont.js","node_modules/lodash/_hasPath.js","node_modules/hammerjs/hammer.js","node_modules/d3-interpolate/src/object.js","node_modules/d3-scale/node_modules/d3-array/src/ascending.js","node_modules/d3-scale/node_modules/d3-array/src/bisector.js","node_modules/d3-scale/node_modules/d3-array/src/bisect.js","node_modules/d3-scale/node_modules/d3-array/src/array.js","node_modules/d3-scale/node_modules/d3-array/src/ticks.js","node_modules/d3-scale/node_modules/d3-array/src/number.js","node_modules/d3-scale/node_modules/d3-array/src/quantile.js","node_modules/element-resize-detector/src/listener-handler.js","node_modules/@amap/amap-jsapi-loader/dist/index.js","node_modules/rc-util/lib/Dom/dynamicCSS.js","node_modules/rc-table/es/context/PerfContext.js","node_modules/@antv/component/esm/util/offscreen.js","node_modules/d3-shape/src/math.js","node_modules/rc-cascader/es/hooks/useSearchOptions.js","node_modules/lodash-es/_baseIsArguments.js","node_modules/lodash-es/isArguments.js","node_modules/batch-processor/src/utils.js","node_modules/element-resize-detector/src/reporter.js","node_modules/lodash/property.js","node_modules/d3-shape/src/constant.js","node_modules/rc-picker/es/PickerInput/Selector/hooks/useRootProps.js","node_modules/@rc-component/mini-decimal/es/MiniDecimal.js","node_modules/@rc-component/mini-decimal/es/supportUtil.js","node_modules/@rc-component/mini-decimal/es/numberUtil.js","node_modules/@rc-component/mini-decimal/es/BigIntDecimal.js","node_modules/@rc-component/mini-decimal/es/NumberDecimal.js","node_modules/@ant-design/pro-form/es/components/List/index.js","node_modules/lodash/_baseGetAllKeys.js","node_modules/lodash/_baseAssign.js","node_modules/@antv/g2/esm/runtime/coordinate.js","node_modules/@antv/component/esm/ui/marker/symbol.js","node_modules/d3-interpolate/src/round.js","node_modules/rc-util/lib/Dom/contains.js","node_modules/lodash/pullAll.js","node_modules/@ant-design/pro-form/es/components/Digit/index.js","node_modules/@ant-design/pro-form/es/components/DateTimePicker/index.js","node_modules/@antv/component/esm/ui/slider/handle.js","node_modules/lodash/_setToArray.js","node_modules/@antv/component/esm/util/series.js","node_modules/lodash/_castFunction.js","node_modules/d3-geo/src/transform.js","node_modules/@antv/coord/dist/coordinate.min.js","node_modules/@antv/vendor/node_modules/d3-array/src/extent.js","node_modules/element-resize-detector/src/id-handler.js","node_modules/lodash/_baseAssignIn.js","node_modules/@antv/l7-utils/node_modules/eventemitter3/index.js","node_modules/@antv/l7-layers/es/point/models/billboard_point.js","node_modules/@antv/l7-layers/es/point/models/earthExtrude.js","node_modules/@antv/l7-layers/es/point/models/earthFill.js","node_modules/@antv/l7-layers/es/point/models/fillImage.js","node_modules/@antv/l7-layers/es/point/models/radar.js","node_modules/@antv/l7-layers/es/point/models/index.js","node_modules/@antv/l7-layers/es/point/index.js","node_modules/@antv/g2/esm/utils/treeDataTransform.js","node_modules/gl-matrix/esm/common.js","node_modules/d3-hierarchy/src/accessors.js","node_modules/lodash/_arrayFilter.js","node_modules/lodash/uniq.js","node_modules/@antv/util/esm/lodash/is-array.js","node_modules/d3-hierarchy/src/treemap/binary.js","node_modules/@ant-design/pro-form/es/layouts/ModalForm/index.js","node_modules/@ant-design/icons-svg/es/asn/EyeInvisibleOutlined.js","node_modules/@ant-design/icons/es/icons/EyeInvisibleOutlined.js","node_modules/@antv/g2/esm/runtime/mark.js","node_modules/@antv/util/esm/lodash/is-number.js","node_modules/@antv/vendor/node_modules/d3-array/node_modules/internmap/src/index.js","node_modules/@antv/vendor/node_modules/d3-array/src/group.js","node_modules/lodash-es/_isPrototype.js","node_modules/@antv/util/esm/lodash/size.js","node_modules/rc-input/es/BaseInput.js","node_modules/rc-input/es/Input.js","node_modules/rc-tree/es/Indent.js","node_modules/rc-tree/es/TreeNode.js","node_modules/lodash/_equalObjects.js","node_modules/@ant-design/pro-form/es/components/List/ListItem.js","node_modules/@antv/vendor/node_modules/d3-array/src/quickselect.js","node_modules/@antv/vendor/node_modules/d3-array/src/quantile.js","node_modules/@antv/vendor/node_modules/d3-array/src/greatest.js","node_modules/@antv/l7-layers/es/utils/grid-index.js","node_modules/@antv/l7-layers/es/utils/collision-index.js","node_modules/@antv/l7-layers/es/utils/symbol-layout.js","node_modules/@antv/l7-layers/es/point/models/text.js","node_modules/@ant-design/icons/lib/utils.js","node_modules/lodash/hasIn.js","node_modules/rc-table/es/utils/expandUtil.js","node_modules/@ant-design/pro-form/es/components/Submitter/index.js","node_modules/@antv/l7-layers/es/tile/tile/Tile.js","node_modules/@antv/l7-layers/es/tile/tile/util.js","node_modules/@antv/l7-layers/es/tile/tile/DebugTile.js","node_modules/@antv/l7-layers/es/tile/tile/ImageTile.js","node_modules/@antv/l7-layers/es/tile/tile/MaskTile.js","node_modules/@antv/l7-layers/es/tile/tile/RasterRGBTile.js","node_modules/@antv/l7-layers/es/tile/tile/RasterTerrainRGBTile.js","node_modules/@antv/l7-layers/es/tile/tile/RasterTile.js","node_modules/@antv/l7-layers/es/tile/tile/VectorTile.js","node_modules/@antv/l7-layers/es/tile/tile/index.js","node_modules/lodash/isEqual.js","node_modules/color-string/index.js","node_modules/@antv/l7-core/es/services/interaction/IInteractionService.js","node_modules/@antv/async-hook/es/index.js","node_modules/d3-shape/src/lineRadial.js","node_modules/@babel/runtime/helpers/extends.js","node_modules/lodash/uniqueId.js","node_modules/gl-matrix/esm/vec4.js","node_modules/lodash/_equalByTag.js","node_modules/d3-geo/src/noop.js","node_modules/d3-interpolate/src/value.js","node_modules/d3-geo/src/math.js","node_modules/@antv/g2/esm/utils/createElement.js","node_modules/rc-table/es/hooks/useFlattenRecords.js","node_modules/viewport-mercator-project/dist/esm/fit-bounds.js","node_modules/@antv/l7-layers/es/utils/blend.js","node_modules/@ant-design/icons-svg/es/asn/CloseCircleOutlined.js","node_modules/@ant-design/icons/es/icons/CloseCircleOutlined.js","node_modules/lodash/_mapToArray.js","node_modules/@antv/component/esm/ui/legend/constant.js","node_modules/@ant-design/plots/es/core/constants/index.js","node_modules/lodash-es/_root.js","node_modules/lodash/_castPath.js","node_modules/@antv/component/esm/ui/indicator/constant.js","node_modules/@antv/component/esm/ui/indicator/indicator.js","node_modules/@antv/component/esm/ui/legend/continuous/utils.js","node_modules/@antv/component/esm/ui/legend/continuous/ribbon.js","node_modules/@antv/component/esm/ui/legend/continuous.js","node_modules/@antv/g2/esm/component/legendContinuous.js","node_modules/@ant-design/pro-form/es/layouts/ProForm/index.js","node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","node_modules/@umijs/route-utils/es/path-to-regexp.js","node_modules/@antv/g2/esm/utils/style.js","node_modules/@ant-design/plots/es/core/adaptor/shape-stack.js","node_modules/@ant-design/plots/es/core/adaptor/mark.js","node_modules/@antv/util/esm/lodash/is-object-like.js","node_modules/@ant-design/pro-form/es/FieldContext.js","node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/constant.js","node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/color.js","node_modules/lodash/_getAllKeysIn.js","node_modules/@antv/util/esm/lodash/reduce.js","node_modules/batch-processor/src/batch-processor.js","node_modules/lodash/noop.js","node_modules/@antv/util/esm/lodash/keys.js","node_modules/d3-interpolate/src/constant.js","node_modules/lodash-es/_Stack.js","node_modules/lodash-es/_stackClear.js","node_modules/lodash-es/_stackDelete.js","node_modules/lodash-es/_stackGet.js","node_modules/lodash-es/_stackHas.js","node_modules/lodash-es/_stackSet.js","node_modules/@antv/l7-maps/es/utils/theme.js","node_modules/@antv/l7-maps/es/utils/BaseMapService.js","node_modules/@antv/scale/esm/scales/continuous.js","node_modules/@antv/scale/esm/utils/clamp.js","node_modules/lodash/isString.js","node_modules/d3-hierarchy/src/pack/enclose.js","node_modules/@ant-design/pro-layout/node_modules/path-to-regexp/dist/index.js","node_modules/@antv/component/esm/util/scale-to-pixel.js","node_modules/d3-interpolate/src/array.js","node_modules/lodash/_baseProperty.js","node_modules/d3-shape/src/curve/linear.js","node_modules/rc-image/es/context.js","node_modules/rc-image/es/Operations.js","node_modules/rc-image/es/hooks/useImageTransform.js","node_modules/rc-image/es/getFixScaleEleTransPosition.js","node_modules/rc-image/es/hooks/useStatus.js","node_modules/rc-image/es/util.js","node_modules/rc-image/es/hooks/useTouchEvent.js","node_modules/rc-image/es/Preview.js","node_modules/rc-image/es/hooks/useMouseEvent.js","node_modules/rc-image/es/previewConfig.js","node_modules/rc-image/es/common.js","node_modules/rc-image/es/PreviewGroup.js","node_modules/rc-image/es/hooks/useRegisterImage.js","node_modules/rc-image/es/Image.js","node_modules/rc-image/es/hooks/usePreviewItems.js","node_modules/copy-to-clipboard/index.js","node_modules/@antv/util/esm/lodash/clamp.js","node_modules/@antv/g2/esm/runtime/scale.js","node_modules/gl-matrix/esm/vec3.js","node_modules/@antv/util/esm/lodash/last.js","node_modules/@ant-design/pro-form/es/layouts/index.js","node_modules/tslib/tslib.es6.mjs","node_modules/@antv/g2/esm/component/axis.js","node_modules/lodash/_strictIndexOf.js","node_modules/@babel/runtime/helpers/objectSpread2.js","node_modules/rc-input/es/hooks/useCount.js","node_modules/@antv/g2/esm/transform/utils/helper.js","node_modules/@antv/component/esm/ui/axis/guides/utils.js","node_modules/@ant-design/pro-card/es/components/Card/style.js","node_modules/d3-hierarchy/src/treemap/squarify.js","node_modules/lodash-es/isFunction.js","node_modules/lodash-es/_Symbol.js","node_modules/@antv/util/esm/path/util/distance-square-root.js","node_modules/d3-interpolate/src/number.js","node_modules/lodash/_baseIsEqualDeep.js","node_modules/@antv/g2/esm/shape/vector/vector.js","node_modules/@ant-design/pro-card/es/components/Loading/style.js","node_modules/@ant-design/pro-card/es/components/Loading/index.js","node_modules/d3-shape/src/noop.js","node_modules/lodash/_equalArrays.js","node_modules/@ant-design/pro-form/es/components/SchemaForm/layoutType/Embed.js","node_modules/lodash/_Promise.js","node_modules/@antv/util/esm/lodash/is-object.js","node_modules/d3-shape/src/arc.js","node_modules/@antv/g2/esm/utils/coordinate.js","node_modules/d3-hierarchy/src/treemap/sliceDice.js","node_modules/lodash/_basePropertyDeep.js","node_modules/reactcss/lib/components/hover.js","node_modules/@antv/g2/esm/shape/utils.js","node_modules/lodash/_getSymbolsIn.js","node_modules/@antv/component/esm/shapes/Text.js","node_modules/lodash/_baseIndexOf.js","node_modules/lodash/_getTag.js","node_modules/pdfast/src/index.js","node_modules/lodash-es/_baseAssignValue.js","node_modules/@turf/bbox/dist/es/index.js","node_modules/@antv/l7-utils/es/geo.js","node_modules/@ant-design/pro-form/es/components/List/style.js","node_modules/@antv/component/esm/core/component.js","node_modules/@antv/util/esm/lodash/is-number-equal.js","node_modules/lodash-es/_getRawTag.js","node_modules/lodash-es/_objectToString.js","node_modules/lodash-es/_baseGetTag.js","node_modules/lodash/isNumber.js","node_modules/d3-hierarchy/src/treemap/index.js","node_modules/@antv/vendor/node_modules/d3-array/src/identity.js","node_modules/@antv/g2/esm/utils/event.js","node_modules/d3-shape/src/array.js","node_modules/lodash/get.js","node_modules/element-resize-detector/src/state-handler.js","node_modules/d3-geo/src/identity.js","node_modules/lodash/pull.js","node_modules/@ant-design/pro-form/es/components/DateRangePicker/index.js","node_modules/d3-hierarchy/src/stratify.js","node_modules/@babel/runtime/helpers/toPropertyKey.js","node_modules/toggle-selection/index.js","node_modules/@antv/component/esm/util/callback.js","node_modules/lodash/clamp.js","node_modules/@ant-design/icons-svg/es/asn/EyeOutlined.js","node_modules/@ant-design/icons/es/icons/EyeOutlined.js","node_modules/@mapbox/vector-tile/lib/vectortile.js","node_modules/rc-picker/es/utils/miscUtil.js","node_modules/@antv/vendor/node_modules/d3-array/src/ascending.js","node_modules/d3-interpolate/src/basisClosed.js","node_modules/@antv/vendor/node_modules/d3-array/src/number.js","node_modules/@antv/g2/esm/utils/number.js","node_modules/lodash/_cloneRegExp.js","node_modules/@ant-design/icons-svg/es/asn/EditOutlined.js","node_modules/@ant-design/icons/es/icons/EditOutlined.js","node_modules/@antv/event-emitter/esm/index.js","node_modules/rc-cascader/es/context.js","node_modules/@antv/util/esm/path/util/is-path-array.js","node_modules/@ant-design/pro-form/es/components/Field/index.js","node_modules/@antv/l7-core/es/services/layer/IStyleAttributeService.js","node_modules/@antv/l7-core/es/services/renderer/ITexture2D.js","node_modules/@antv/l7-core/es/services/source/ISourceService.js","node_modules/@antv/l7-core/es/services/camera/ICameraService.js","node_modules/@antv/l7-core/es/services/debug/IDebugService.js","node_modules/@antv/l7-core/es/services/map/IMapService.js","node_modules/@antv/l7-core/es/utils/font_util.js","node_modules/@antv/l7-core/es/services/asset/FontService.js","node_modules/@antv/l7-core/es/services/asset/IconService.js","node_modules/@antv/l7-core/es/services/camera/CameraService.js","node_modules/@antv/l7-core/es/services/component/ControlService.js","node_modules/@antv/l7-core/es/services/component/MarkerService.js","node_modules/@antv/l7-core/es/services/component/PopupService.js","node_modules/@antv/l7-core/es/services/config/warnInfo.js","node_modules/@antv/l7-core/es/services/config/ConfigService.js","node_modules/@antv/l7-core/es/utils/project.js","node_modules/@antv/l7-core/es/services/coordinate/CoordinateSystemService.js","node_modules/@antv/l7-core/es/services/debug/DebugService.js","node_modules/@antv/l7-core/es/services/interaction/InteractionService.js","node_modules/@antv/l7-core/es/utils/dom.js","node_modules/@antv/l7-core/es/services/interaction/PickingService.js","node_modules/@antv/l7-core/es/utils/clock.js","node_modules/@antv/l7-core/es/services/layer/LayerService.js","node_modules/@antv/l7-core/es/services/layer/StyleAttribute.js","node_modules/@antv/l7-core/es/services/layer/StyleAttributeService.js","node_modules/@antv/l7-core/es/services/scene/SceneService.js","node_modules/@antv/l7-core/es/services/shader/ShaderModuleService.js","node_modules/@antv/l7-core/es/services/renderer/passes/BaseNormalPass.js","node_modules/@antv/l7-core/es/services/renderer/passes/ClearPass.js","node_modules/@antv/l7-core/es/services/renderer/passes/MultiPassRenderer.js","node_modules/@antv/l7-core/es/services/renderer/passes/PixelPickingPass.js","node_modules/@antv/l7-core/es/services/renderer/passes/PostProcessor.js","node_modules/@antv/l7-core/es/services/renderer/passes/RenderPass.js","node_modules/@antv/l7-core/es/services/renderer/passes/post-processing/BloomPass.js","node_modules/@antv/l7-core/es/services/renderer/passes/post-processing/BlurHPass.js","node_modules/@antv/l7-core/es/services/renderer/passes/post-processing/BlurVPass.js","node_modules/@antv/l7-core/es/services/renderer/passes/post-processing/ColorHalfTonePass.js","node_modules/@antv/l7-core/es/services/renderer/passes/post-processing/CopyPass.js","node_modules/@antv/l7-core/es/services/renderer/passes/post-processing/HexagonalPixelatePass.js","node_modules/@antv/l7-core/es/services/renderer/passes/post-processing/InkPass.js","node_modules/@antv/l7-core/es/services/renderer/passes/post-processing/NoisePass.js","node_modules/@antv/l7-core/es/services/renderer/passes/post-processing/SepiaPass.js","node_modules/@antv/l7-core/es/inversify.config.js","node_modules/@antv/l7-core/es/services/scene/ISceneService.js","node_modules/@antv/component/esm/util/angle-converter.js","node_modules/d3-scale/node_modules/d3-format/src/exponent.js","node_modules/d3-geo/src/clip/buffer.js","node_modules/lodash/_baseIsMatch.js","node_modules/@antv/component/esm/ui/legend/continuous/handle.js","node_modules/lodash/_initCloneArray.js","node_modules/@antv/util/esm/path/parser/params-parser.js","node_modules/gl-matrix/esm/quat.js","node_modules/lodash/_baseIndexOfWith.js","node_modules/d3-scale-chromatic/node_modules/d3-color/src/color.js","node_modules/rc-picker/es/PickerPanel/context.js","node_modules/@antv/l7-utils/es/tileset-manager/types.js","node_modules/@antv/l7-utils/es/tileset-manager/tileset-manager.js","node_modules/@antv/l7-utils/es/tileset-manager/utils/strategies.js","node_modules/@antv/l7-utils/es/tileset-manager/const.js","node_modules/@antv/l7-utils/es/tileset-manager/utils/lonlat-tile.js","node_modules/@antv/l7-utils/es/tileset-manager/tile.js","node_modules/@turf/bbox-polygon/dist/es/index.js","node_modules/@antv/l7-utils/es/tileset-manager/utils/bound-buffer.js","node_modules/@antv/l7-utils/es/tileset-manager/utils/tile-url.js","node_modules/@antv/scale/esm/scales/quantile.js","node_modules/@antv/scale/esm/utils/create-quartile.js","node_modules/@ant-design/plots/es/components/area/index.js","node_modules/@ant-design/plots/es/components/column/index.js","node_modules/@ant-design/plots/es/components/line/index.js","node_modules/@ant-design/plots/es/components/pie/index.js","node_modules/@ant-design/plots/es/components/radar/index.js","node_modules/@ant-design/plots/es/components/gauge/index.js","node_modules/@ant-design/plots/es/components/liquid/index.js","node_modules/@ant-design/plots/es/components/wordCloud/index.js","node_modules/lodash-es/_isIndex.js","node_modules/lodash-es/_arrayLikeKeys.js","node_modules/lodash-es/_baseTimes.js","node_modules/@antv/g2/esm/runtime/constant.js","node_modules/d3-scale/src/array.js","node_modules/@ant-design/icons/lib/icons/ArrowLeftOutlined.js","node_modules/@antv/util/esm/lodash/each.js","node_modules/@ant-design/pro-form/es/layouts/DrawerForm/index.js","node_modules/@ant-design/pro-form/es/layouts/DrawerForm/style.js","node_modules/viewport-mercator-project/dist/esm/web-mercator-utils.js","node_modules/@antv/g-dom-mutation-observer-api/dist/index.esm.js","node_modules/@antv/g-camera-api/dist/index.esm.js","node_modules/@antv/g-web-animations-api/dist/index.esm.js","node_modules/@ant-design/icons-svg/es/asn/DingdingOutlined.js","node_modules/@ant-design/icons/es/icons/DingdingOutlined.js","node_modules/rc-util/es/Dom/addEventListener.js","node_modules/viewport-mercator-project/dist/esm/web-mercator-viewport.js","node_modules/d3-geo/src/pointEqual.js","node_modules/@antv/util/esm/lodash/lower-first.js","node_modules/@antv/util/esm/lodash/debounce.js","node_modules/@antv/g2/esm/utils/scale.js","node_modules/lodash/_baseUniq.js","node_modules/@antv/component/esm/util/extend-display-object.js","node_modules/@babel/runtime/helpers/arrayLikeToArray.js","node_modules/@ant-design/pro-form/es/components/Text/index.js","node_modules/@antv/component/esm/util/matrix.js","node_modules/d3-hierarchy/src/treemap/round.js","node_modules/@antv/util/esm/lodash/is-array-like.js","node_modules/@antv/scale/esm/scales/ordinal.js","node_modules/d3-interpolate/src/color.js","node_modules/d3-interpolate/src/rgb.js","node_modules/@antv/vendor/node_modules/d3-array/src/max.js","node_modules/d3-hierarchy/src/pack/siblings.js","node_modules/@turf/helpers/dist/es/index.js","node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js","node_modules/rc-tree/es/MotionTreeNode.js","node_modules/rc-tree/es/useUnmount.js","node_modules/rc-tree/es/utils/diffUtil.js","node_modules/rc-tree/es/NodeList.js","node_modules/rc-tree/es/Tree.js","node_modules/rc-tree/es/DropIndicator.js","node_modules/lodash/_baseClone.js","node_modules/@antv/scale/esm/utils/compose.js","node_modules/safe-stable-stringify/index.js","node_modules/@antv/l7-layers/es/utils/stencil.js","node_modules/@antv/l7-layers/es/core/constant.js","node_modules/@antv/l7-layers/es/core/BaseModel.js","node_modules/@antv/g2/esm/utils/marker.js","node_modules/@babel/runtime/helpers/objectWithoutProperties.js","node_modules/@ant-design/plots/es/context.js","node_modules/@ant-design/plots/es/util/makeChartComp.js","node_modules/@ant-design/plots/es/hooks/useConfig.js","node_modules/lodash-es/isLength.js","node_modules/@ant-design/pro-form/es/components/TextArea/index.js","node_modules/@antv/l7-maps/es/lib/web-mercator-viewport.js","node_modules/@antv/component/esm/ui/axis/utils/index.js","node_modules/@antv/vendor/node_modules/d3-array/src/bisect.js","node_modules/lodash/forEach.js","node_modules/lodash/_baseMap.js","node_modules/lodash-es/_freeGlobal.js","node_modules/@antv/util/esm/lodash/is-undefined.js","node_modules/d3-color/src/define.js","node_modules/d3-color/src/color.js","node_modules/rc-table/es/utils/legacyUtil.js","node_modules/lodash/now.js","node_modules/lodash/_SetCache.js","node_modules/@ant-design/pro-field/es/components/Select/LightSelect/index.js","node_modules/@ant-design/pro-field/es/components/Select/SearchSelect/index.js","node_modules/@ant-design/pro-field/es/components/Select/index.js","node_modules/d3-format/src/formatPrefixAuto.js","node_modules/d3-format/src/defaultLocale.js","node_modules/d3-format/src/formatSpecifier.js","node_modules/d3-format/src/formatTrim.js","node_modules/d3-format/src/formatRounded.js","node_modules/d3-format/src/formatTypes.js","node_modules/d3-format/src/identity.js","node_modules/d3-format/src/locale.js","node_modules/d3-format/src/formatGroup.js","node_modules/d3-format/src/formatNumerals.js","node_modules/d3-format/src/exponent.js","node_modules/lodash/_baseIsMap.js","node_modules/lodash/mergeWith.js","node_modules/d3-scale-chromatic/node_modules/d3-color/src/define.js","node_modules/@antv/l7-core/es/services/renderer/passes/BasePostProcessingPass.js","node_modules/lodash-es/isObjectLike.js","node_modules/@antv/l7-layers/es/line/models/arc.js","node_modules/@antv/l7-layers/es/line/models/arc_3d.js","node_modules/@antv/l7-layers/es/core/shape/arrow.js","node_modules/@antv/l7-layers/es/core/line_trangluation.js","node_modules/@antv/l7-layers/es/line/models/flow.js","node_modules/@antv/l7-layers/es/line/models/great_circle.js","node_modules/@antv/l7-layers/es/line/models/simple_line.js","node_modules/@antv/l7-layers/es/line/models/wall.js","node_modules/@antv/l7-layers/es/line/models/index.js","node_modules/@antv/l7-layers/es/line/index.js","node_modules/@ant-design/pro-form/es/layouts/QueryFilter/index.js","node_modules/@ant-design/pro-form/es/layouts/QueryFilter/Actions.js","node_modules/@ant-design/pro-form/es/layouts/QueryFilter/style.js","node_modules/@mapbox/vector-tile/lib/vectortilelayer.js","node_modules/d3-scale/src/number.js","node_modules/d3-shape/src/curve/cardinalClosed.js","node_modules/d3-shape/src/curve/cardinal.js","node_modules/d3-shape/src/curve/catmullRomClosed.js","node_modules/d3-shape/src/curve/catmullRom.js","node_modules/@antv/g2/esm/composition/utils.js","node_modules/d3-geo/src/clip/rejoin.js","node_modules/gl-matrix/esm/mat3.js","node_modules/simple-swizzle/index.js","node_modules/@antv/g2/esm/shape/text/advance.js","node_modules/rc-util/es/Dom/css.js","node_modules/@babel/runtime/helpers/slicedToArray.js","node_modules/@antv/scale/esm/utils/d3-linear-nice.js","node_modules/@antv/l7-core/es/utils/shader-module.js","node_modules/@ant-design/icons/lib/components/AntdIcon.js","node_modules/lodash/_toKey.js","node_modules/@antv/util/esm/lodash/pick.js","node_modules/lodash/_basePullAll.js","node_modules/lodash/_arrayPush.js","node_modules/@antv/component/esm/animation/fadeOut.js","node_modules/@antv/component/esm/util/primitive.js","node_modules/@antv/component/esm/ui/grid/index.js","node_modules/@antv/component/esm/ui/axis/guides/grid.js","node_modules/@antv/component/esm/util/in-range.js","node_modules/@antv/component/esm/util/transform.js","node_modules/@antv/component/esm/ui/axis/overlap/autoEllipsis.js","node_modules/@antv/component/esm/util/defined.js","node_modules/@antv/component/esm/ui/axis/overlap/autoHide.js","node_modules/@antv/component/esm/ui/axis/overlap/index.js","node_modules/@antv/component/esm/ui/axis/overlap/autoRotate.js","node_modules/@antv/component/esm/ui/axis/overlap/autoWrap.js","node_modules/@antv/component/esm/ui/axis/guides/labels.js","node_modules/@antv/component/esm/util/wrap.js","node_modules/@antv/component/esm/ui/axis/guides/ticks.js","node_modules/@antv/component/esm/ui/axis/guides/title.js","node_modules/@antv/component/esm/ui/axis/axis.js","node_modules/@antv/component/esm/util/sampling.js","node_modules/@antv/scale/esm/scales/base.js","node_modules/lodash/_stringToPath.js","node_modules/lodash/_baseForOwn.js","node_modules/d3-geo/node_modules/d3-array/src/merge.js","node_modules/lodash/_createBaseEach.js","node_modules/rc-picker/es/utils/dateUtil.js","node_modules/viewport-mercator-project/dist/esm/math-utils.js","node_modules/lodash/_getSymbols.js","node_modules/@antv/scale/esm/utils/normalize.js","node_modules/@babel/runtime/helpers/arrayWithHoles.js","node_modules/rc-slider/es/util.js","node_modules/@ant-design/pro-card/es/components/Divider/style.js","node_modules/@ant-design/pro-card/es/ProCard.js","node_modules/@ant-design/pro-card/es/components/Divider/index.js","node_modules/lodash-es/isEmpty.js","node_modules/lodash-es/_SetCache.js","node_modules/lodash-es/_equalArrays.js","node_modules/lodash-es/_arraySome.js","node_modules/lodash-es/_cacheHas.js","node_modules/lodash-es/_setCacheAdd.js","node_modules/lodash-es/_setCacheHas.js","node_modules/lodash-es/_mapToArray.js","node_modules/lodash-es/_setToArray.js","node_modules/lodash-es/_equalByTag.js","node_modules/lodash-es/_getSymbols.js","node_modules/lodash-es/_arrayFilter.js","node_modules/lodash-es/stubArray.js","node_modules/lodash-es/_getAllKeys.js","node_modules/lodash-es/_baseGetAllKeys.js","node_modules/lodash-es/keys.js","node_modules/lodash-es/_arrayPush.js","node_modules/lodash-es/_equalObjects.js","node_modules/lodash-es/_baseIsEqualDeep.js","node_modules/@ant-design/pro-table/es/components/Alert/index.js","node_modules/@ant-design/pro-table/es/components/Alert/style.js","node_modules/@ant-design/pro-table/es/components/Form/FormRender.js","node_modules/@ant-design/pro-table/es/components/Form/index.js","node_modules/@ant-design/icons-svg/es/asn/ReloadOutlined.js","node_modules/@ant-design/icons/es/icons/ReloadOutlined.js","node_modules/@ant-design/icons-svg/es/asn/VerticalAlignBottomOutlined.js","node_modules/@ant-design/icons/es/icons/VerticalAlignBottomOutlined.js","node_modules/@ant-design/icons-svg/es/asn/VerticalAlignMiddleOutlined.js","node_modules/@ant-design/icons/es/icons/VerticalAlignMiddleOutlined.js","node_modules/@ant-design/icons-svg/es/asn/VerticalAlignTopOutlined.js","node_modules/@ant-design/icons/es/icons/VerticalAlignTopOutlined.js","node_modules/@ant-design/pro-table/es/components/ColumnSetting/index.js","node_modules/@ant-design/pro-table/es/components/ColumnSetting/style.js","node_modules/@ant-design/pro-table/es/components/ListToolBar/HeaderMenu.js","node_modules/@ant-design/pro-table/es/components/ListToolBar/index.js","node_modules/@ant-design/pro-table/es/components/ListToolBar/style.js","node_modules/@ant-design/icons-svg/es/asn/ColumnHeightOutlined.js","node_modules/@ant-design/icons/es/icons/ColumnHeightOutlined.js","node_modules/@ant-design/pro-table/es/components/ToolBar/DensityIcon.js","node_modules/@ant-design/icons-svg/es/asn/FullscreenExitOutlined.js","node_modules/@ant-design/icons/es/icons/FullscreenExitOutlined.js","node_modules/@ant-design/icons-svg/es/asn/FullscreenOutlined.js","node_modules/@ant-design/icons/es/icons/FullscreenOutlined.js","node_modules/@ant-design/pro-table/es/components/ToolBar/FullscreenIcon.js","node_modules/@ant-design/pro-table/es/components/ToolBar/index.js","node_modules/@ant-design/pro-table/es/style/index.js","node_modules/@ant-design/pro-table/es/useFetchData.js","node_modules/@ant-design/pro-table/es/utils/cellRenderToFromItem.js","node_modules/@ant-design/pro-table/es/utils/columnRender.js","node_modules/@ant-design/pro-table/es/Table.js","node_modules/lodash-es/isEqual.js","node_modules/lodash-es/_baseIsEqual.js","node_modules/@ant-design/pro-table/es/utils/columnSort.js","node_modules/@ant-design/pro-table/es/utils/genProColumnToColumn.js","node_modules/@ant-design/pro-table/es/components/EditableTable/index.js","node_modules/@antv/vendor/node_modules/d3-array/src/median.js","node_modules/lodash/_baseEach.js","node_modules/@antv/vendor/node_modules/d3-array/src/minIndex.js","node_modules/lodash/_baseMatches.js","node_modules/d3-hierarchy/src/hierarchy/count.js","node_modules/d3-hierarchy/src/hierarchy/iterator.js","node_modules/d3-hierarchy/src/hierarchy/index.js","node_modules/d3-hierarchy/src/hierarchy/each.js","node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","node_modules/d3-hierarchy/src/hierarchy/find.js","node_modules/d3-hierarchy/src/hierarchy/sum.js","node_modules/d3-hierarchy/src/hierarchy/sort.js","node_modules/d3-hierarchy/src/hierarchy/path.js","node_modules/d3-hierarchy/src/hierarchy/ancestors.js","node_modules/d3-hierarchy/src/hierarchy/descendants.js","node_modules/d3-hierarchy/src/hierarchy/leaves.js","node_modules/d3-hierarchy/src/hierarchy/links.js","node_modules/@ant-design/pro-form/es/components/Captcha/index.js","node_modules/@ant-design/icons/lib/components/Context.js","node_modules/@antv/util/esm/lodash/upper-first.js","node_modules/@antv/l7-layers/es/mask/models/fill.js","node_modules/@antv/l7-layers/es/mask/models/index.js","node_modules/@antv/l7-layers/es/mask/index.js","node_modules/lodash/forOwn.js","node_modules/@antv/l7-maps/es/utils/simpleMapCoord.js","node_modules/@antv/g2/esm/utils/selection.js","node_modules/@antv/g2/esm/runtime/transform.js","node_modules/@ant-design/pro-form/es/layouts/StepsForm/style.js","node_modules/d3-geo/src/path/string.js","node_modules/@antv/g-plugin-image-loader/dist/index.esm.js","node_modules/@antv/g-canvas/dist/index.esm.js","node_modules/@antv/expr/dist/index.esm.js","node_modules/@antv/scale/esm/utils/interpolatize.js","node_modules/@antv/g2/esm/api/extend.js","node_modules/@ant-design/plots/es/core/annotation/shapes/Text.js","node_modules/@ant-design/plots/es/core/annotation/shapes/Polygon.js","node_modules/@ant-design/plots/es/core/annotation/core.js","node_modules/@ant-design/plots/es/core/annotation/conversion-tag.js","node_modules/@ant-design/plots/es/core/annotation/bidirectional-bar-axis-text.js","node_modules/@ant-design/plots/es/core/base/index.js","node_modules/@ant-design/plots/es/core/plots/base/index.js","node_modules/@ant-design/plots/es/core/plots/area/index.js","node_modules/@ant-design/plots/es/core/plots/bar/index.js","node_modules/@ant-design/plots/es/core/plots/column/index.js","node_modules/@ant-design/plots/es/core/plots/dual-axes/index.js","node_modules/@ant-design/plots/es/core/plots/funnel/index.js","node_modules/@ant-design/plots/es/core/plots/line/index.js","node_modules/@ant-design/plots/es/core/plots/pie/index.js","node_modules/@ant-design/plots/es/core/plots/scatter/index.js","node_modules/@ant-design/plots/es/core/plots/radar/index.js","node_modules/@ant-design/plots/es/core/plots/stock/index.js","node_modules/@ant-design/plots/es/core/plots/tiny-line/index.js","node_modules/@ant-design/plots/es/core/plots/tiny-area/index.js","node_modules/@ant-design/plots/es/core/plots/tiny-column/index.js","node_modules/@ant-design/plots/es/core/plots/tiny-progress/index.js","node_modules/@ant-design/plots/es/core/plots/tiny-ring/index.js","node_modules/@ant-design/plots/es/core/plots/rose/index.js","node_modules/@ant-design/plots/es/core/plots/waterfall/index.js","node_modules/@ant-design/plots/es/core/plots/histogram/index.js","node_modules/@ant-design/plots/es/core/plots/heatmap/index.js","node_modules/@ant-design/plots/es/core/plots/box/index.js","node_modules/@ant-design/plots/es/core/plots/sankey/index.js","node_modules/@ant-design/plots/es/core/plots/bullet/index.js","node_modules/@ant-design/plots/es/core/plots/gauge/index.js","node_modules/@ant-design/plots/es/core/plots/liquid/index.js","node_modules/@ant-design/plots/es/core/plots/wordCloud/index.js","node_modules/@ant-design/plots/es/core/plots/treemap/index.js","node_modules/@ant-design/plots/es/core/plots/radial-bar/index.js","node_modules/@ant-design/plots/es/core/plots/circle-packing/index.js","node_modules/@ant-design/plots/es/core/plots/violin/index.js","node_modules/@ant-design/plots/es/core/plots/bidirectional-bar/index.js","node_modules/@ant-design/plots/es/core/plots/venn/type.js","node_modules/@ant-design/plots/es/core/plots/venn/index.js","node_modules/@ant-design/plots/es/core/plots/sunburst/index.js","node_modules/@antv/scale/esm/scales/sequential.js","node_modules/d3-geo/src/path/area.js","node_modules/d3-geo/src/path/centroid.js","node_modules/d3-geo/src/path/measure.js","node_modules/d3-timer/src/timer.js","node_modules/@ant-design/plots/es/hooks/useChart.js","node_modules/@antv/g-plugin-canvas-path-generator/dist/index.esm.js","node_modules/@antv/g-plugin-canvas-picker/dist/index.esm.js","node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseBase.js","node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseKey.js","node_modules/@antv/g-plugin-canvas-renderer/dist/index.esm.js","node_modules/@antv/g-plugin-dom-interaction/dist/index.esm.js","node_modules/@antv/g-plugin-html-renderer/dist/index.esm.js","node_modules/@antv/g-plugin-dragndrop/dist/index.esm.js","node_modules/@antv/util/esm/lodash/map-values.js","node_modules/@antv/g2/esm/utils/expr.js","node_modules/@antv/g2/esm/component/constant.js","node_modules/@antv/g2/esm/runtime/types/scale.js","node_modules/@antv/g2/esm/runtime/component.js","node_modules/@antv/g2/esm/runtime/layout.js","node_modules/@antv/g2/esm/runtime/plot.js","node_modules/@antv/g2/esm/runtime/option-preprocess/style.js","node_modules/@antv/g2/esm/runtime/render.js","node_modules/@antv/g2/esm/utils/size.js","node_modules/@antv/g2/esm/api/node.js","node_modules/@antv/g2/esm/api/utils.js","node_modules/@antv/g2/esm/api/define.js","node_modules/@antv/g2/esm/api/props.js","node_modules/@antv/g2/esm/api/composition.js","node_modules/@antv/g2/esm/api/mark.js","node_modules/@antv/g2/esm/api/runtime.js","node_modules/@antv/g2/esm/coordinate/cartesian.js","node_modules/@antv/g2/esm/coordinate/transpose.js","node_modules/@antv/g2/esm/coordinate/theta.js","node_modules/@antv/g2/esm/coordinate/parallel.js","node_modules/@antv/g2/esm/coordinate/fisheye.js","node_modules/@antv/g2/esm/coordinate/radar.js","node_modules/@antv/g2/esm/coordinate/helix.js","node_modules/@antv/g2/esm/encode/constant.js","node_modules/@antv/g2/esm/encode/field.js","node_modules/@antv/g2/esm/encode/transform.js","node_modules/@antv/g2/esm/encode/column.js","node_modules/@antv/g2/esm/shape/interval/rect.js","node_modules/@antv/g2/esm/shape/interval/hollow.js","node_modules/@antv/g2/esm/transform/maybeZeroX.js","node_modules/@antv/g2/esm/transform/maybeZeroY.js","node_modules/@antv/g2/esm/transform/maybeZeroPadding.js","node_modules/@antv/g2/esm/mark/cell.js","node_modules/@antv/g2/esm/transform/maybeZeroY1.js","node_modules/@antv/g2/esm/shape/interval/funnel.js","node_modules/@antv/g2/esm/shape/interval/pyramid.js","node_modules/@antv/g2/esm/mark/interval.js","node_modules/@antv/g2/esm/mark/rect.js","node_modules/@antv/g2/esm/shape/line/curve.js","node_modules/@antv/g2/esm/shape/line/line.js","node_modules/@antv/g2/esm/shape/line/hv.js","node_modules/@antv/g2/esm/shape/line/vh.js","node_modules/@antv/g2/esm/shape/line/hvh.js","node_modules/@antv/g2/esm/shape/line/trail.js","node_modules/@antv/g2/esm/shape/line/smooth.js","node_modules/@antv/g2/esm/transform/maybeSeries.js","node_modules/@antv/g2/esm/transform/maybeGradient.js","node_modules/@antv/g2/esm/mark/line.js","node_modules/@antv/g2/esm/shape/point/color.js","node_modules/@antv/g2/esm/shape/point/bowtie.js","node_modules/@antv/g2/esm/shape/point/cross.js","node_modules/@antv/g2/esm/shape/point/diamond.js","node_modules/@antv/g2/esm/shape/point/hexagon.js","node_modules/@antv/g2/esm/shape/point/hollowBowtie.js","node_modules/@antv/g2/esm/shape/point/hollowDiamond.js","node_modules/@antv/g2/esm/shape/point/hollowHexagon.js","node_modules/@antv/g2/esm/shape/point/hollow.js","node_modules/@antv/g2/esm/shape/point/hollowSquare.js","node_modules/@antv/g2/esm/shape/point/hollowTriangle.js","node_modules/@antv/g2/esm/shape/point/hollowTriangleDown.js","node_modules/@antv/g2/esm/shape/point/hyphen.js","node_modules/@antv/g2/esm/shape/point/line.js","node_modules/@antv/g2/esm/shape/point/triangleDown.js","node_modules/@antv/g2/esm/shape/point/plus.js","node_modules/@antv/g2/esm/shape/point/square.js","node_modules/@antv/g2/esm/shape/point/point.js","node_modules/@antv/g2/esm/shape/point/tick.js","node_modules/@antv/g2/esm/shape/point/triangle.js","node_modules/@antv/g2/esm/shape/point/circle.js","node_modules/@antv/g2/esm/shape/point/hollowCircle.js","node_modules/@antv/g2/esm/transform/maybeSize.js","node_modules/@antv/g2/esm/mark/point.js","node_modules/@antv/g2/esm/shape/text/text.js","node_modules/@antv/g2/esm/shape/text/badge.js","node_modules/@antv/g2/esm/shape/text/tag.js","node_modules/@antv/g2/esm/transform/maybeTuple.js","node_modules/@antv/g2/esm/transform/maybeVisualPosition.js","node_modules/@antv/g2/esm/mark/text.js","node_modules/d3-shape/src/area.js","node_modules/d3-shape/src/areaRadial.js","node_modules/@antv/g2/esm/shape/area/curve.js","node_modules/@antv/g2/esm/shape/area/area.js","node_modules/@antv/g2/esm/shape/area/hv.js","node_modules/@antv/g2/esm/shape/area/hvh.js","node_modules/@antv/g2/esm/shape/area/smooth.js","node_modules/@antv/g2/esm/shape/area/vh.js","node_modules/@antv/g2/esm/mark/area.js","node_modules/@antv/g2/esm/shape/image/image.js","node_modules/@antv/g2/esm/mark/image.js","node_modules/@antv/g2/esm/shape/polygon/polygon.js","node_modules/@antv/g2/esm/shape/polygon/ribbon.js","node_modules/@antv/g2/esm/mark/polygon.js","node_modules/@antv/g2/esm/shape/box/box.js","node_modules/@antv/g2/esm/shape/box/violin.js","node_modules/@antv/g2/esm/mark/box.js","node_modules/@antv/g2/esm/mark/vector.js","node_modules/@antv/g2/esm/transform/maybeIdentityX.js","node_modules/@antv/g2/esm/transform/maybeIdentityY.js","node_modules/@antv/g2/esm/shape/link/arc.js","node_modules/@antv/g2/esm/shape/link/link.js","node_modules/@antv/g2/esm/shape/link/smooth.js","node_modules/@antv/g2/esm/shape/link/vhv.js","node_modules/@antv/g2/esm/mark/link.js","node_modules/@antv/g2/esm/shape/lineXY/line.js","node_modules/@antv/g2/esm/transform/maybeTupleX.js","node_modules/@antv/g2/esm/mark/lineX.js","node_modules/@antv/g2/esm/transform/maybeTupleY.js","node_modules/@antv/g2/esm/mark/lineY.js","node_modules/@antv/g2/esm/shape/connector/connector.js","node_modules/@antv/g2/esm/mark/connector.js","node_modules/@antv/g2/esm/mark/range.js","node_modules/@antv/g2/esm/transform/maybeDefaultX.js","node_modules/@antv/g2/esm/mark/rangeX.js","node_modules/@antv/g2/esm/transform/maybeDefaultY.js","node_modules/@antv/g2/esm/mark/rangeY.js","node_modules/@antv/g2/esm/shape/path/color.js","node_modules/@antv/g2/esm/shape/path/path.js","node_modules/@antv/g2/esm/shape/path/hollow.js","node_modules/@antv/g2/esm/mark/path.js","node_modules/@antv/g2/esm/shape/shape/shape.js","node_modules/@antv/g2/esm/transform/maybeFunctionAttribute.js","node_modules/@antv/g2/esm/mark/shape.js","node_modules/@antv/g2/esm/shape/density/density.js","node_modules/@antv/g2/esm/mark/density.js","node_modules/@antv/g2/esm/shape/heatmap/renderer/index.js","node_modules/@antv/g2/esm/shape/heatmap/heatmap.js","node_modules/@antv/g2/esm/shape/heatmap/renderer/gradient.js","node_modules/@antv/g2/esm/mark/heatmap.js","node_modules/@antv/g2/esm/mark/wordCloud.js","node_modules/@antv/g2/esm/palette/category10.js","node_modules/@antv/g2/esm/palette/category20.js","node_modules/@antv/g2/esm/scale/linear.js","node_modules/@antv/g2/esm/scale/ordinal.js","node_modules/@antv/g2/esm/scale/band.js","node_modules/@antv/scale/esm/scales/identity.js","node_modules/@antv/g2/esm/scale/identity.js","node_modules/@antv/scale/esm/scales/point.js","node_modules/@antv/g2/esm/scale/point.js","node_modules/fecha/lib/fecha.js","node_modules/@antv/scale/esm/utils/time-interval.js","node_modules/@antv/scale/esm/utils/utc-interval.js","node_modules/@antv/scale/esm/utils/find-tick-interval.js","node_modules/@antv/scale/esm/tick-methods/d3-time.js","node_modules/@antv/scale/esm/utils/d3-time-nice.js","node_modules/@antv/scale/esm/scales/time.js","node_modules/@antv/scale/esm/utils/choose-mask.js","node_modules/@antv/g2/esm/scale/time.js","node_modules/@antv/scale/esm/utils/log.js","node_modules/@antv/scale/esm/tick-methods/d3-log.js","node_modules/@antv/scale/esm/utils/d3-log-nice.js","node_modules/@antv/scale/esm/scales/log.js","node_modules/@antv/g2/esm/scale/log.js","node_modules/@antv/g2/esm/scale/pow.js","node_modules/@antv/g2/esm/scale/threshold.js","node_modules/@antv/g2/esm/scale/quantile.js","node_modules/@antv/g2/esm/scale/quantize.js","node_modules/@antv/scale/esm/scales/sqrt.js","node_modules/@antv/g2/esm/scale/sqrt.js","node_modules/@antv/g2/esm/scale/sequential.js","node_modules/@antv/g2/esm/scale/constant.js","node_modules/@antv/g2/esm/theme/create.js","node_modules/@antv/g2/esm/theme/light.js","node_modules/@antv/g2/esm/theme/classic.js","node_modules/@antv/g2/esm/theme/dark.js","node_modules/@antv/g2/esm/theme/classicDark.js","node_modules/@antv/g2/esm/theme/academy.js","node_modules/@antv/g2/esm/component/axisX.js","node_modules/@antv/g2/esm/component/axisY.js","node_modules/@antv/util/esm/lodash/noop.js","node_modules/@antv/util/esm/lodash/set.js","node_modules/@antv/component/esm/ui/navigator/index.js","node_modules/@antv/component/esm/util/transpose.js","node_modules/@antv/component/esm/ui/legend/category/item.js","node_modules/@antv/component/esm/ui/legend/category/items.js","node_modules/@antv/component/esm/util/group-by.js","node_modules/@antv/component/esm/ui/legend/category.js","node_modules/@antv/g2/esm/component/legendCategory.js","node_modules/@antv/g2/esm/component/title.js","node_modules/@antv/g2/esm/component/slider.js","node_modules/@antv/g2/esm/component/sliderX.js","node_modules/@antv/g2/esm/component/sliderY.js","node_modules/@antv/component/esm/ui/scrollbar/index.js","node_modules/@antv/g2/esm/component/scrollbar.js","node_modules/@antv/g2/esm/component/scrollbarX.js","node_modules/@antv/g2/esm/component/scrollbarY.js","node_modules/@antv/g2/esm/component/legends.js","node_modules/@antv/g2/esm/animation/scaleInX.js","node_modules/@antv/g2/esm/animation/scaleInY.js","node_modules/@antv/g2/esm/animation/waveIn.js","node_modules/@antv/g2/esm/animation/fadeIn.js","node_modules/@antv/g2/esm/animation/fadeOut.js","node_modules/@antv/g2/esm/animation/utils.js","node_modules/@antv/g2/esm/animation/morphing.js","node_modules/@antv/g2/esm/animation/zoomIn.js","node_modules/@antv/g2/esm/animation/pathIn.js","node_modules/@antv/g2/esm/animation/growInX.js","node_modules/@antv/g2/esm/animation/growInY.js","node_modules/@antv/g2/esm/interaction/elementHighlight.js","node_modules/@antv/g2/esm/interaction/elementHighlightByX.js","node_modules/@antv/g2/esm/interaction/elementHighlightByColor.js","node_modules/@antv/g2/esm/interaction/elementSelect.js","node_modules/@antv/g2/esm/interaction/elementSelectByX.js","node_modules/@antv/g2/esm/interaction/elementSelectByColor.js","node_modules/@antv/g2/esm/interaction/chartIndex.js","node_modules/@antv/g2/esm/interaction/legendFilter.js","node_modules/@antv/g2/esm/interaction/brushHighlight.js","node_modules/@antv/g2/esm/interaction/brushXHighlight.js","node_modules/@antv/g2/esm/interaction/brushYHighlight.js","node_modules/@antv/g2/esm/interaction/brushAxisHighlight.js","node_modules/@antv/g2/esm/interaction/brushFilter.js","node_modules/@antv/g2/esm/interaction/sliderFilter.js","node_modules/@antv/g2/esm/interaction/poptip.js","node_modules/@antv/g2/esm/interaction/scrollbarFilter.js","node_modules/@antv/util/esm/lodash/find.js","node_modules/@antv/util/esm/lodash/is-match.js","node_modules/@antv/g2/esm/interaction/treemapDrillDown.js","node_modules/@antv/g2/esm/interaction/elementPointMove.js","node_modules/@antv/g2/esm/composition/spaceLayer.js","node_modules/@antv/g2/esm/composition/spaceFlex.js","node_modules/@antv/g2/esm/utils/container.js","node_modules/@antv/g2/esm/composition/facetRect.js","node_modules/@antv/g2/esm/composition/facetCircle.js","node_modules/@antv/g2/esm/composition/repeatMatrix.js","node_modules/@antv/g2/esm/composition/timingKeyframe.js","node_modules/@antv/g2/esm/transform/utils/order.js","node_modules/@antv/g2/esm/transform/stackY.js","node_modules/@antv/g2/esm/transform/dodgeX.js","node_modules/@antv/g2/esm/transform/stackEnter.js","node_modules/@antv/g2/esm/transform/normalizeY.js","node_modules/@antv/g2/esm/transform/jitter.js","node_modules/@antv/g2/esm/transform/jitterX.js","node_modules/@antv/g2/esm/transform/jitterY.js","node_modules/@antv/g2/esm/transform/symmetryY.js","node_modules/@antv/g2/esm/transform/diffY.js","node_modules/@antv/g2/esm/transform/select.js","node_modules/@antv/g2/esm/transform/selectX.js","node_modules/@antv/g2/esm/transform/selectY.js","node_modules/@antv/g2/esm/transform/groupN.js","node_modules/@antv/g2/esm/transform/group.js","node_modules/@antv/g2/esm/transform/groupX.js","node_modules/@antv/g2/esm/transform/sort.js","node_modules/@antv/vendor/node_modules/d3-array/src/groupSort.js","node_modules/@antv/g2/esm/transform/sortX.js","node_modules/@antv/g2/esm/transform/flexX.js","node_modules/@antv/g2/esm/transform/sortY.js","node_modules/@antv/g2/esm/transform/groupY.js","node_modules/@antv/g2/esm/transform/groupColor.js","node_modules/@antv/g2/esm/transform/sortColor.js","node_modules/@antv/g2/esm/transform/pack.js","node_modules/@antv/vendor/node_modules/d3-array/src/array.js","node_modules/@antv/vendor/node_modules/d3-array/src/ticks.js","node_modules/@antv/vendor/node_modules/d3-array/src/count.js","node_modules/@antv/vendor/node_modules/d3-array/src/threshold/sturges.js","node_modules/@antv/g2/esm/transform/bin.js","node_modules/@antv/vendor/node_modules/d3-array/src/threshold/scott.js","node_modules/@antv/vendor/node_modules/d3-array/src/bin.js","node_modules/@antv/vendor/node_modules/d3-array/src/nice.js","node_modules/@antv/vendor/node_modules/d3-array/src/constant.js","node_modules/@antv/g2/esm/transform/binX.js","node_modules/@antv/g2/esm/transform/utils/lttb.js","node_modules/@antv/g2/esm/transform/sample.js","node_modules/@antv/g2/esm/transform/filter.js","node_modules/@antv/vendor/node_modules/d3-dsv/src/autoType.js","node_modules/@antv/vendor/node_modules/d3-dsv/src/dsv.js","node_modules/@antv/g2/esm/data/fetch.js","node_modules/@antv/g2/esm/data/sortBy.js","node_modules/@antv/g2/esm/data/utils/fields.js","node_modules/@antv/g2/esm/data/filter.js","node_modules/@antv/g2/esm/data/map.js","node_modules/@antv/g2/esm/data/pick.js","node_modules/@antv/g2/esm/data/rename.js","node_modules/@antv/g2/esm/data/fold.js","node_modules/@antv/g2/esm/data/slice.js","node_modules/@antv/g2/esm/data/inline.js","node_modules/@antv/g2/esm/data/custom.js","node_modules/@antv/g2/esm/data/join.js","node_modules/@antv/g2/esm/data/sort.js","node_modules/@antv/g2/esm/data/kde.js","node_modules/@antv/g2/esm/data/log.js","node_modules/@antv/g2/esm/data/ema.js","node_modules/@antv/g2/esm/data/utils/flow.js","node_modules/@antv/g2/esm/data/utils/d3-cloud/index.js","node_modules/@antv/g2/esm/data/wordCloud.js","node_modules/@antv/g2/esm/label-transform/overlapDodgeY.js","node_modules/@antv/g2/esm/utils/bounds.js","node_modules/@antv/g2/esm/utils/color.js","node_modules/@antv/g2/esm/label-transform/utils.js","node_modules/@antv/g2/esm/label-transform/contrastReverse.js","node_modules/@antv/g2/esm/label-transform/exceedAdjust.js","node_modules/@antv/g2/esm/label-transform/overflowStroke.js","node_modules/d3-geo/src/path/context.js","node_modules/d3-geo/src/path/index.js","node_modules/d3-geo/node_modules/d3-array/src/range.js","node_modules/d3-geo/src/graticule.js","node_modules/d3-geo/src/polygonContains.js","node_modules/d3-geo/src/clip/index.js","node_modules/d3-geo/src/clip/antimeridian.js","node_modules/d3-geo/src/compose.js","node_modules/d3-geo/src/rotation.js","node_modules/d3-geo/src/circle.js","node_modules/d3-geo/src/clip/circle.js","node_modules/d3-geo/src/clip/line.js","node_modules/d3-geo/src/clip/rectangle.js","node_modules/d3-geo/src/projection/fit.js","node_modules/d3-geo/src/projection/resample.js","node_modules/d3-geo/src/projection/index.js","node_modules/d3-geo/src/projection/conic.js","node_modules/d3-geo/src/projection/conicEqualArea.js","node_modules/d3-geo/src/projection/cylindricalEqualArea.js","node_modules/d3-geo/src/projection/albers.js","node_modules/d3-geo/src/projection/albersUsa.js","node_modules/d3-geo/src/projection/azimuthal.js","node_modules/d3-geo/src/projection/azimuthalEqualArea.js","node_modules/d3-geo/src/projection/azimuthalEquidistant.js","node_modules/d3-geo/src/projection/mercator.js","node_modules/d3-geo/src/projection/conicConformal.js","node_modules/d3-geo/src/projection/equirectangular.js","node_modules/d3-geo/src/projection/conicEquidistant.js","node_modules/d3-geo/src/projection/equalEarth.js","node_modules/d3-geo/src/projection/gnomonic.js","node_modules/d3-geo/src/projection/identity.js","node_modules/d3-geo/src/projection/naturalEarth1.js","node_modules/d3-geo/src/projection/orthographic.js","node_modules/d3-geo/src/projection/stereographic.js","node_modules/d3-geo/src/projection/transverseMercator.js","node_modules/@antv/g2/esm/composition/geoView.js","node_modules/@antv/g2/esm/composition/geoPath.js","node_modules/@antv/g2/esm/data/utils/d3-sankey/align.js","node_modules/@antv/g2/esm/data/utils/d3-sankey/constant.js","node_modules/@antv/g2/esm/data/utils/d3-sankey/sankey.js","node_modules/@antv/g2/esm/data/sankey.js","node_modules/@antv/g2/esm/mark/sankey.js","node_modules/@antv/g2/esm/mark/treemap.js","node_modules/@antv/g2/esm/mark/pack.js","node_modules/d3-dispatch/src/dispatch.js","node_modules/d3-force/src/lcg.js","node_modules/d3-force/src/simulation.js","node_modules/d3-quadtree/src/add.js","node_modules/d3-quadtree/src/quad.js","node_modules/d3-quadtree/src/x.js","node_modules/d3-quadtree/src/y.js","node_modules/d3-quadtree/src/quadtree.js","node_modules/d3-quadtree/src/cover.js","node_modules/d3-quadtree/src/data.js","node_modules/d3-quadtree/src/extent.js","node_modules/d3-quadtree/src/find.js","node_modules/d3-quadtree/src/remove.js","node_modules/d3-quadtree/src/root.js","node_modules/d3-quadtree/src/size.js","node_modules/d3-quadtree/src/visit.js","node_modules/d3-quadtree/src/visitAfter.js","node_modules/d3-force/src/constant.js","node_modules/d3-force/src/jiggle.js","node_modules/d3-force/src/manyBody.js","node_modules/d3-force/src/link.js","node_modules/d3-force/src/x.js","node_modules/d3-force/src/y.js","node_modules/d3-force/src/center.js","node_modules/@antv/g2/esm/mark/forceGraph.js","node_modules/@antv/g2/esm/data/cluster.js","node_modules/@antv/g2/esm/data/tree.js","node_modules/@antv/g2/esm/mark/tree.js","node_modules/@antv/g2/esm/data/utils/arc/sort.js","node_modules/@antv/g2/esm/data/utils/arc/arc.js","node_modules/@antv/g2/esm/data/arc.js","node_modules/@antv/g2/esm/mark/chord.js","node_modules/@antv/g2/esm/mark/boxplot.js","node_modules/@antv/g2/esm/shape/gauge/round.js","node_modules/@antv/g2/esm/mark/gauge.js","node_modules/@antv/g2/esm/shape/liquid/shapes.js","node_modules/@antv/g2/esm/shape/liquid/liquid.js","node_modules/@antv/g2/esm/shape/liquid/wave.js","node_modules/@antv/g2/esm/mark/liquid.js","node_modules/@antv/g2/esm/data/utils/venn/circleintersection.js","node_modules/@antv/g2/esm/data/utils/venn/fmin/blas1.js","node_modules/@antv/g2/esm/data/utils/venn/layout.js","node_modules/@antv/g2/esm/data/utils/venn/fmin/bisect.js","node_modules/@antv/g2/esm/data/utils/venn/fmin/conjugateGradient.js","node_modules/@antv/g2/esm/data/utils/venn/fmin/linesearch.js","node_modules/@antv/g2/esm/data/venn.js","node_modules/@antv/g2/esm/data/utils/venn/fmin/nelderMead.js","node_modules/@antv/g2/esm/data/utils/venn/diagram.js","node_modules/@ant-design/plots/es/core/base/chart.js","node_modules/@antv/g2/esm/runtime/option-preprocess/index.js","node_modules/@antv/g2/esm/utils/flow.js","node_modules/@antv/g2/esm/lib/std.js","node_modules/@antv/g2/esm/lib/geo.js","node_modules/@antv/g2/esm/lib/graph.js","node_modules/@antv/g2/esm/lib/plot.js","node_modules/@antv/g2/esm/lib/core.js","node_modules/@antv/g2/esm/animation/scaleOutX.js","node_modules/@antv/g2/esm/animation/scaleOutY.js","node_modules/@antv/g2/esm/animation/zoomOut.js","node_modules/@antv/g2/esm/interaction/fisheye.js","node_modules/@antv/g2/esm/interaction/legendHighlight.js","node_modules/@antv/g2/esm/interaction/brushXFilter.js","node_modules/@antv/g2/esm/interaction/brushYFilter.js","node_modules/@antv/g2/esm/label-transform/overlapHide.js","node_modules/@antv/g2/esm/label-transform/overflowHide.js","node_modules/@ant-design/plots/es/core/annotation/index.js","node_modules/@ant-design/plots/es/core/plots/area/adaptor.js","node_modules/@ant-design/plots/es/core/plots/bar/adaptor.js","node_modules/@ant-design/plots/es/core/plots/bar/shape.js","node_modules/@ant-design/plots/es/core/plots/column/shape.js","node_modules/@ant-design/plots/es/core/plots/dual-axes/adaptor.js","node_modules/@ant-design/plots/es/core/plots/funnel/adaptor.js","node_modules/@ant-design/plots/es/core/plots/line/adaptor.js","node_modules/@ant-design/plots/es/core/plots/pie/adaptor.js","node_modules/@ant-design/plots/es/core/plots/scatter/adaptor.js","node_modules/@ant-design/plots/es/core/plots/radar/adaptor.js","node_modules/@ant-design/plots/es/core/plots/stock/adaptor.js","node_modules/@ant-design/plots/es/core/plots/tiny-line/adaptor.js","node_modules/@ant-design/plots/es/core/plots/tiny-area/adaptor.js","node_modules/@ant-design/plots/es/core/plots/tiny-column/adaptor.js","node_modules/@ant-design/plots/es/core/plots/tiny-progress/adaptor.js","node_modules/@ant-design/plots/es/core/plots/tiny-ring/adaptor.js","node_modules/@ant-design/plots/es/core/plots/rose/adaptor.js","node_modules/@ant-design/plots/es/core/plots/waterfall/constants.js","node_modules/@ant-design/plots/es/core/plots/waterfall/adaptor.js","node_modules/@ant-design/plots/es/core/plots/histogram/adaptor.js","node_modules/@ant-design/plots/es/core/plots/heatmap/adaptor.js","node_modules/@ant-design/plots/es/core/plots/box/adaptor.js","node_modules/@ant-design/plots/es/core/plots/sankey/adaptor.js","node_modules/@ant-design/plots/es/core/adaptor/coordinate-layout.js","node_modules/@ant-design/plots/es/core/plots/bullet/adaptor.js","node_modules/@ant-design/plots/es/core/plots/gauge/adaptor.js","node_modules/@ant-design/plots/es/core/plots/liquid/adaptor.js","node_modules/@ant-design/plots/es/core/plots/wordCloud/adaptor.js","node_modules/@ant-design/plots/es/core/plots/treemap/adaptor.js","node_modules/@ant-design/plots/es/core/plots/radial-bar/adaptor.js","node_modules/@ant-design/plots/es/core/plots/circle-packing/adaptor.js","node_modules/@ant-design/plots/es/core/plots/violin/adaptor.js","node_modules/@ant-design/plots/es/core/plots/bidirectional-bar/adaptor.js","node_modules/@ant-design/plots/es/core/plots/venn/adaptor.js","node_modules/@ant-design/plots/es/core/plots/sunburst/adaptor.js","node_modules/@ant-design/plots/es/core/index.js","node_modules/@ant-design/plots/es/components/base/index.js","node_modules/@ant-design/plots/es/util/is-valid-element.js","node_modules/@antv/scale/esm/utils/internMap.js","node_modules/@antv/scale/esm/scales/band.js","node_modules/rc-tabs/es/TabContext.js","node_modules/lodash/_isStrictComparable.js","node_modules/dayjs/plugin/relativeTime.js","node_modules/@antv/component/esm/animation/utils.js","node_modules/@antv/l7-source/es/source/vector.js","node_modules/@ant-design/pro-form/es/BaseForm/createField.js","node_modules/@turf/invariant/dist/es/index.js","node_modules/rc-table/es/Cell/index.js","node_modules/rc-table/es/Cell/useCellRender.js","node_modules/rc-table/es/Cell/useHoverState.js","node_modules/element-resize-detector/src/id-generator.js","node_modules/rc-util/lib/warning.js","node_modules/@ant-design/pro-form/es/components/TimePicker/index.js","node_modules/element-resize-detector/src/browser-detector.js","node_modules/@antv/l7-layers/es/line/models/line.js","node_modules/lodash-es/isArray.js","node_modules/lodash/_cacheHas.js","node_modules/@antv/util/esm/lodash/is-nil.js","node_modules/lodash/throttle.js","node_modules/@ant-design/plots/es/core/utils/data-transform.js","node_modules/@antv/l7-maps/node_modules/eventemitter3/index.js","node_modules/regl/dist/regl.js","node_modules/d3-hierarchy/src/array.js","node_modules/rc-table/es/Body/BodyRow.js","node_modules/lodash/_Set.js","node_modules/d3-shape/src/curve/step.js","node_modules/@ant-design/pro-card/es/components/Actions/style.js","node_modules/@ant-design/pro-card/es/components/Actions/index.js","node_modules/@antv/vendor/node_modules/d3-array/src/mean.js","node_modules/@antv/util/esm/lodash/identity.js","node_modules/@antv/g2/esm/interaction/utils.js","node_modules/@antv/component/esm/util/number.js","node_modules/lodash/keys.js","node_modules/@antv/l7-layers/es/utils/extrude_polyline.js","node_modules/@antv/l7-layers/es/core/shape/extrude.js","node_modules/@antv/l7-layers/es/core/triangulation.js","node_modules/@babel/runtime/helpers/interopRequireDefault.js","node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","node_modules/element-resize-detector/src/detection-strategy/object.js","node_modules/lodash/isSet.js","node_modules/@antv/l7-source/es/factory.js","node_modules/d3-dsv/src/dsv.js","node_modules/d3-dsv/src/csv.js","node_modules/@antv/l7-source/es/utils/util.js","node_modules/@antv/l7-source/es/parser/json.js","node_modules/@antv/l7-source/es/parser/geojson.js","node_modules/geojson-vt/src/feature.js","node_modules/geojson-vt/src/convert.js","node_modules/geojson-vt/src/simplify.js","node_modules/geojson-vt/src/clip.js","node_modules/geojson-vt/src/wrap.js","node_modules/geojson-vt/src/transform.js","node_modules/geojson-vt/src/tile.js","node_modules/geojson-vt/src/index.js","node_modules/@antv/l7-source/es/source/geojsonvt.js","node_modules/@antv/l7-source/es/parser/geojsonvt.js","node_modules/@antv/l7-source/es/parser/image.js","node_modules/@antv/l7-source/es/parser/jsonTile.js","node_modules/@antv/l7-source/es/parser/mvt.js","node_modules/@antv/l7-source/es/utils/tile/getCustomData.js","node_modules/@antv/l7-source/es/utils/tile/request.js","node_modules/@antv/l7-source/es/utils/tile/getRasterData.js","node_modules/@antv/l7-source/es/utils/tile/getRasterTile.js","node_modules/@antv/l7-source/es/parser/raster-tile.js","node_modules/@antv/l7-source/es/parser/raster/ndi.js","node_modules/@antv/l7-source/es/parser/raster/rgb.js","node_modules/@antv/l7-source/es/parser/rasterRgb.js","node_modules/@antv/l7-source/es/parser/testTile.js","node_modules/@antv/l7-source/es/transform/cluster.js","node_modules/@antv/l7-source/es/utils/statistics.js","node_modules/@antv/l7-source/es/source.js","node_modules/d3-hexbin/src/hexbin.js","node_modules/@antv/l7-source/es/transform/hexagon.js","node_modules/@antv/l7-source/es/transform/join.js","node_modules/@antv/l7-source/es/utils/relative-coordinates.js","node_modules/@antv/l7-source/es/index.js","node_modules/@antv/l7-source/es/parser/csv.js","node_modules/@antv/l7-source/es/parser/raster.js","node_modules/@antv/l7-source/es/transform/filter.js","node_modules/@antv/l7-source/es/transform/map.js","node_modules/@antv/l7-source/es/transform/grid.js","node_modules/@ant-design/pro-card/es/components/TabPane/index.js","node_modules/@antv/scale/esm/utils/color.js","node_modules/@antv/scale/esm/utils/interpolate.js","node_modules/lodash/_copySymbols.js","node_modules/lodash/toNumber.js","node_modules/@antv/util/esm/path/util/is-normalized-array.js","node_modules/rc-input/es/utils/commonUtils.js","node_modules/rc-table/es/hooks/useRenderTimes.js","node_modules/d3-hierarchy/src/tree.js","node_modules/lodash/memoize.js","node_modules/@antv/l7-map/es/map/geo/lng_lat.js","node_modules/lodash-es/_baseIsTypedArray.js","node_modules/lodash-es/_nodeUtil.js","node_modules/lodash-es/isTypedArray.js","node_modules/lodash-es/_baseUnary.js","node_modules/d3-shape/src/line.js","node_modules/@antv/l7-utils/es/lodash-adapter.js","node_modules/@ant-design/pro-form/es/components/List/ListContainer.js","node_modules/@ant-design/pro-form/es/components/Select/index.js","node_modules/@antv/l7-layers/es/point/models/normal.js","node_modules/@ant-design/icons-svg/es/asn/CaretUpOutlined.js","node_modules/@ant-design/icons/es/icons/CaretUpOutlined.js","node_modules/d3-geo/node_modules/d3-array/src/fsum.js","node_modules/lodash/_DataView.js","node_modules/@antv/l7-map/es/map/geo/mercator_coordinate.js","node_modules/rc-tree/es/utils/conductUtil.js","node_modules/@antv/util/esm/lodash/min.js","node_modules/d3-shape/src/point.js","node_modules/@antv/component/esm/util/bbox.js","node_modules/lodash/_createSet.js","node_modules/@antv/scale/esm/tick-methods/d3-ticks.js","node_modules/tinycolor2/esm/tinycolor.js","node_modules/@chenshuai2144/sketch-color/es/components/common/ColorWrap.js","node_modules/rc-cascader/es/utils/commonUtil.js","node_modules/rc-cascader/es/utils/treeUtil.js","node_modules/rc-cascader/es/hooks/useMissingValues.js","node_modules/rc-cascader/es/hooks/useEntities.js","node_modules/rc-cascader/es/hooks/useOptions.js","node_modules/rc-cascader/es/hooks/useSelect.js","node_modules/rc-cascader/es/hooks/useValues.js","node_modules/rc-cascader/es/OptionList/CacheContent.js","node_modules/rc-cascader/es/OptionList/Checkbox.js","node_modules/rc-cascader/es/OptionList/Column.js","node_modules/rc-cascader/es/OptionList/useActive.js","node_modules/rc-cascader/es/OptionList/useKeyboard.js","node_modules/rc-cascader/es/OptionList/List.js","node_modules/rc-cascader/es/OptionList/index.js","node_modules/rc-cascader/es/Panel.js","node_modules/rc-cascader/es/Cascader.js","node_modules/rc-cascader/es/hooks/useDisplayValues.js","node_modules/rc-cascader/es/hooks/useSearchConfig.js","node_modules/antd/es/cascader/hooks/useBase.js","node_modules/antd/es/cascader/hooks/useCheckable.js","node_modules/antd/es/cascader/hooks/useColumnIcons.js","node_modules/antd/es/cascader/style/columns.js","node_modules/antd/es/cascader/style/index.js","node_modules/antd/es/cascader/style/panel.js","node_modules/antd/es/cascader/index.js","node_modules/antd/es/cascader/Panel.js","node_modules/@ant-design/pro-field/es/components/Cascader/index.js","node_modules/@ant-design/pro-field/es/components/Checkbox/index.js","node_modules/@ant-design/pro-field/es/components/Code/index.js","node_modules/antd/es/color-picker/context.js","node_modules/antd/es/color-picker/components/ColorClear.js","node_modules/rc-util/es/hooks/useMobile.js","node_modules/rc-input-number/es/StepHandler.js","node_modules/rc-input-number/es/utils/numberUtil.js","node_modules/rc-input-number/es/hooks/useFrame.js","node_modules/rc-input-number/es/InputNumber.js","node_modules/rc-input-number/es/hooks/useCursor.js","node_modules/rc-util/es/proxyObject.js","node_modules/antd/es/input-number/style/index.js","node_modules/antd/es/input-number/style/token.js","node_modules/antd/es/input-number/index.js","node_modules/antd/es/color-picker/components/ColorSteppers.js","node_modules/antd/es/color-picker/components/ColorAlphaInput.js","node_modules/antd/es/color-picker/components/ColorHexInput.js","node_modules/antd/es/color-picker/components/ColorHsbInput.js","node_modules/antd/es/color-picker/components/ColorRgbInput.js","node_modules/antd/es/color-picker/components/ColorInput.js","node_modules/antd/es/color-picker/interface.js","node_modules/rc-slider/es/context.js","node_modules/rc-slider/es/Handles/Handle.js","node_modules/rc-slider/es/Handles/index.js","node_modules/rc-slider/es/Marks/Mark.js","node_modules/rc-slider/es/Marks/index.js","node_modules/rc-slider/es/Steps/Dot.js","node_modules/rc-slider/es/Steps/index.js","node_modules/rc-slider/es/Tracks/Track.js","node_modules/rc-slider/es/Tracks/index.js","node_modules/rc-slider/es/hooks/useDrag.js","node_modules/rc-slider/es/Slider.js","node_modules/rc-slider/es/hooks/useOffset.js","node_modules/rc-slider/es/hooks/useRange.js","node_modules/antd/es/slider/Context.js","node_modules/antd/es/slider/SliderTooltip.js","node_modules/antd/es/slider/style/index.js","node_modules/antd/es/slider/useRafLock.js","node_modules/antd/es/slider/index.js","node_modules/antd/es/color-picker/components/ColorSlider.js","node_modules/antd/es/color-picker/components/PanelPicker/GradientColorBar.js","node_modules/antd/es/color-picker/components/PanelPicker/index.js","node_modules/antd/es/color-picker/components/PanelPresets.js","node_modules/antd/es/color-picker/ColorPickerPanel.js","node_modules/antd/es/color-picker/components/ColorTrigger.js","node_modules/antd/es/color-picker/style/color-block.js","node_modules/antd/es/color-picker/style/input.js","node_modules/antd/es/color-picker/style/picker.js","node_modules/antd/es/color-picker/style/presets.js","node_modules/antd/es/color-picker/style/slider.js","node_modules/antd/es/color-picker/style/index.js","node_modules/antd/es/color-picker/ColorPicker.js","node_modules/antd/es/color-picker/hooks/useModeColor.js","node_modules/@chenshuai2144/sketch-color/es/helpers/alpha.js","node_modules/@chenshuai2144/sketch-color/es/helpers/checkboard.js","node_modules/@chenshuai2144/sketch-color/es/components/common/Checkboard.js","node_modules/@chenshuai2144/sketch-color/es/components/common/Alpha.js","node_modules/@chenshuai2144/sketch-color/es/helpers/hue.js","node_modules/@chenshuai2144/sketch-color/es/components/common/Hue.js","node_modules/@chenshuai2144/sketch-color/es/helpers/saturation.js","node_modules/@chenshuai2144/sketch-color/es/components/common/Saturation.js","node_modules/@chenshuai2144/sketch-color/es/helpers/color.js","node_modules/@chenshuai2144/sketch-color/es/components/common/EditableInput.js","node_modules/@chenshuai2144/sketch-color/es/helpers/interaction.js","node_modules/@chenshuai2144/sketch-color/es/components/common/Swatch.js","node_modules/@chenshuai2144/sketch-color/es/components/sketch/SketchFields.js","node_modules/@chenshuai2144/sketch-color/es/components/sketch/SketchPresetColors.js","node_modules/@chenshuai2144/sketch-color/es/components/sketch/Sketch.js","node_modules/@ant-design/pro-field/es/components/ColorPicker/old.js","node_modules/@ant-design/pro-field/es/components/ColorPicker/index.js","node_modules/@ant-design/pro-field/es/components/DatePicker/index.js","node_modules/@ant-design/pro-field/es/components/Digit/index.js","node_modules/@ant-design/pro-field/es/components/DigitRange/index.js","node_modules/@ant-design/pro-field/es/components/FromNow/index.js","node_modules/@ant-design/icons-svg/es/asn/RotateLeftOutlined.js","node_modules/@ant-design/icons/es/icons/RotateLeftOutlined.js","node_modules/@ant-design/icons-svg/es/asn/RotateRightOutlined.js","node_modules/@ant-design/icons/es/icons/RotateRightOutlined.js","node_modules/@ant-design/icons-svg/es/asn/SwapOutlined.js","node_modules/@ant-design/icons/es/icons/SwapOutlined.js","node_modules/@ant-design/icons-svg/es/asn/ZoomInOutlined.js","node_modules/@ant-design/icons/es/icons/ZoomInOutlined.js","node_modules/@ant-design/icons-svg/es/asn/ZoomOutOutlined.js","node_modules/@ant-design/icons/es/icons/ZoomOutOutlined.js","node_modules/antd/es/image/style/index.js","node_modules/antd/es/image/PreviewGroup.js","node_modules/antd/es/image/index.js","node_modules/@ant-design/pro-field/es/components/Image/index.js","node_modules/@ant-design/pro-field/es/components/IndexColumn/index.js","node_modules/@ant-design/pro-field/es/components/Money/index.js","node_modules/@ant-design/pro-field/es/components/Options/index.js","node_modules/@ant-design/pro-field/es/components/Password/index.js","node_modules/@ant-design/pro-field/es/components/Percent/util.js","node_modules/@ant-design/pro-field/es/components/Percent/index.js","node_modules/@ant-design/pro-field/es/components/Progress/index.js","node_modules/@ant-design/pro-field/es/components/Radio/index.js","node_modules/@ant-design/pro-field/es/components/RangePicker/index.js","node_modules/@ant-design/icons-svg/es/asn/StarFilled.js","node_modules/@ant-design/icons/es/icons/StarFilled.js","node_modules/rc-rate/es/Star.js","node_modules/rc-rate/es/Rate.js","node_modules/rc-rate/es/useRefs.js","node_modules/rc-rate/es/util.js","node_modules/antd/es/rate/index.js","node_modules/@ant-design/pro-field/es/components/Rate/index.js","node_modules/@ant-design/pro-field/es/components/Second/index.js","node_modules/@ant-design/pro-field/es/components/Segmented/index.js","node_modules/@ant-design/pro-field/es/components/Slider/index.js","node_modules/@ant-design/pro-field/es/components/Switch/index.js","node_modules/@ant-design/pro-field/es/components/Text/index.js","node_modules/@ant-design/pro-field/es/components/TextArea/readonly.js","node_modules/@ant-design/pro-field/es/components/TextArea/index.js","node_modules/antd/es/time-picker/index.js","node_modules/@ant-design/pro-field/es/components/TimePicker/index.js","node_modules/rc-tree-select/es/hooks/useCache.js","node_modules/rc-tree-select/es/utils/valueUtil.js","node_modules/rc-tree-select/es/TreeNode.js","node_modules/rc-tree-select/es/utils/legacyUtil.js","node_modules/rc-tree-select/es/hooks/useFilterTreeData.js","node_modules/rc-tree-select/es/hooks/useRefFunc.js","node_modules/rc-tree-select/es/LegacyContext.js","node_modules/rc-tree-select/es/TreeSelectContext.js","node_modules/rc-tree-select/es/OptionList.js","node_modules/rc-tree-select/es/utils/strategyUtil.js","node_modules/rc-tree-select/es/TreeSelect.js","node_modules/rc-tree-select/es/hooks/useTreeData.js","node_modules/rc-tree-select/es/hooks/useDataEntities.js","node_modules/rc-tree-select/es/hooks/useCheckedKeys.js","node_modules/antd/es/tree-select/style/index.js","node_modules/antd/es/tree-select/index.js","node_modules/@ant-design/pro-field/es/components/TreeSelect/index.js","node_modules/@ant-design/pro-field/es/FieldHOC/index.js","node_modules/@ant-design/pro-field/es/index.js","node_modules/rc-picker/es/PickerInput/Selector/Icon.js","node_modules/@antv/l7-scene/node_modules/eventemitter3/index.js","node_modules/reactcss/lib/index.js","node_modules/@ant-design/pro-table/es/Store/Provide.js","node_modules/@antv/l7-layers/es/earth/utils.js","node_modules/@antv/vendor/node_modules/d3-array/src/sort.js","node_modules/@antv/vendor/node_modules/d3-array/src/permute.js","node_modules/@antv/l7-utils/es/anchor.js","node_modules/@antv/l7-utils/es/color.js","node_modules/@antv/l7-utils/es/dom.js","node_modules/@antv/l7-utils/es/env.js","node_modules/@antv/l7-utils/es/event.js","node_modules/@antv/l7-utils/es/hash.js","node_modules/@antv/l7-utils/es/lineAtOffset/index.js","node_modules/@antv/l7-utils/es/lru_cache.js","node_modules/@antv/l7-utils/es/statistics.js","node_modules/@antv/l7-utils/es/index.js","node_modules/lodash-es/identity.js","node_modules/lodash/_baseTrim.js","node_modules/d3-shape/src/curve/monotone.js","node_modules/@antv/g-device-api/es/index.js","node_modules/d3-hierarchy/src/constant.js","node_modules/@antv/vendor/node_modules/d3-array/src/descending.js","node_modules/@antv/vendor/node_modules/d3-array/src/bisector.js","node_modules/@ant-design/icons-svg/es/asn/FilterOutlined.js","node_modules/@ant-design/icons/es/icons/FilterOutlined.js","node_modules/@ant-design/pro-form/es/layouts/LightFilter/index.js","node_modules/@ant-design/pro-form/es/layouts/LightFilter/style.js","node_modules/lodash/_baseGet.js","node_modules/@antv/l7-layers/es/point/models/extrude.js","node_modules/rc-table/es/Footer/SummaryContext.js","node_modules/rc-table/es/Footer/Row.js","node_modules/rc-table/es/Footer/Summary.js","node_modules/rc-table/es/Footer/Cell.js","node_modules/rc-table/es/Footer/index.js","node_modules/rc-table/es/Body/MeasureCell.js","node_modules/rc-table/es/Body/MeasureRow.js","node_modules/rc-table/es/Body/index.js","node_modules/rc-table/es/ColGroup.js","node_modules/rc-table/es/FixedHolder/index.js","node_modules/rc-table/es/Header/HeaderRow.js","node_modules/rc-table/es/Header/Header.js","node_modules/rc-table/es/hooks/useSticky.js","node_modules/rc-table/es/Panel/index.js","node_modules/rc-table/es/utils/offsetUtil.js","node_modules/rc-table/es/stickyScrollBar.js","node_modules/rc-table/es/hooks/useFrame.js","node_modules/rc-table/es/Table.js","node_modules/rc-table/es/hooks/useFixedInfo.js","node_modules/rc-table/es/hooks/useHover.js","node_modules/rc-table/es/hooks/useExpand.js","node_modules/rc-table/es/hooks/useStickyOffsets.js","node_modules/rc-table/es/sugar/Column.js","node_modules/rc-table/es/sugar/ColumnGroup.js","node_modules/rc-table/es/VirtualTable/context.js","node_modules/rc-table/es/VirtualTable/VirtualCell.js","node_modules/rc-table/es/VirtualTable/BodyLine.js","node_modules/rc-table/es/VirtualTable/BodyGrid.js","node_modules/rc-table/es/VirtualTable/index.js","node_modules/d3-hierarchy/src/pack/index.js","node_modules/mapbox-gl/dist/mapbox-gl.js","node_modules/@ant-design/pro-form/es/components/Checkbox/index.js","node_modules/lodash/each.js","node_modules/@antv/scale/esm/utils/ticks.js","node_modules/@ant-design/icons-svg/es/asn/ShareAltOutlined.js","node_modules/@ant-design/icons/es/icons/ShareAltOutlined.js","node_modules/@ant-design/icons-svg/es/asn/DownloadOutlined.js","node_modules/@ant-design/icons/es/icons/DownloadOutlined.js","node_modules/@antv/l7-core/node_modules/eventemitter3/index.js","node_modules/dayjs/plugin/isoWeek.js","node_modules/@antv/g2/esm/coordinate/radial.js","node_modules/lodash/cloneDeep.js","node_modules/lodash/_getMatchData.js","node_modules/@ant-design/pro-form/es/components/FieldSet/index.js","node_modules/@antv/component/esm/ui/axis/utils/bounds.js","node_modules/@antv/component/esm/ui/axis/utils/contain.js","node_modules/@antv/component/esm/ui/axis/utils/test.js","node_modules/@antv/component/esm/ui/axis/utils/intersect.js","node_modules/@antv/util/esm/path/util/rotate-vector.js","node_modules/@antv/util/esm/path/process/arc-2-cubic.js","node_modules/@ant-design/icons/lib/icons/ArrowRightOutlined.js","node_modules/lodash/map.js","node_modules/@antv/component/esm/util/shape.js","node_modules/@antv/l7-component/node_modules/eventemitter3/index.js","node_modules/@ant-design/pro-card/es/components/Card/index.js","node_modules/@ant-design/icons/ArrowRightOutlined.js","node_modules/lodash-es/_nativeKeys.js","node_modules/lodash-es/_baseKeys.js","node_modules/@ant-design/icons-svg/es/asn/FileOutlined.js","node_modules/@ant-design/icons/es/icons/FileOutlined.js","node_modules/rc-util/lib/Dom/shadow.js","node_modules/lodash/_arraySome.js","node_modules/lodash/_baseIsSet.js","node_modules/@antv/component/esm/ui/axis/constant.js","node_modules/@antv/g2/esm/utils/mark.js","node_modules/rc-table/es/hooks/useColumns/useWidthColumns.js","node_modules/rc-table/es/hooks/useColumns/index.js","node_modules/@babel/runtime/helpers/defineProperty.js","node_modules/lodash/_baseFindIndex.js","node_modules/d3-hierarchy/src/cluster.js","node_modules/@antv/component/esm/util/if-show.js","node_modules/@ant-design/pro-form/es/BaseForm/EditOrReadOnlyContext.js","node_modules/@antv/component/esm/util/string.js","node_modules/@antv/component/esm/util/style.js","node_modules/rc-table/es/constant.js","node_modules/@ant-design/icons-svg/es/asn/DeleteOutlined.js","node_modules/@ant-design/icons/es/icons/DeleteOutlined.js","node_modules/@ant-design/pro-form/es/components/SchemaForm/layoutType/StepsForm.js","node_modules/rc-picker/es/PickerInput/Selector/MaskFormat.js","node_modules/rc-picker/es/PickerInput/Selector/Input.js","node_modules/rc-picker/es/PickerInput/Selector/util.js","node_modules/@antv/l7-source/es/utils/bandOperation/math.js","node_modules/@antv/l7-source/es/utils/bandOperation/bands.js","node_modules/d3-hierarchy/src/treemap/dice.js","node_modules/rc-table/es/utils/fixUtil.js","node_modules/lodash/_initCloneByTag.js","node_modules/@antv/util/esm/path/util/mid-point.js","node_modules/@antv/g2/esm/utils/string.js","node_modules/lodash-es/_Uint8Array.js","node_modules/@antv/scale/esm/scales/pow.js","node_modules/@antv/g-math/dist/index.esm.js","node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","node_modules/@antv/util/esm/path/process/line-2-cubic.js","node_modules/@antv/util/esm/path/convert/path-2-curve.js","node_modules/@antv/util/esm/path/util/is-curve-array.js","node_modules/@antv/util/esm/path/process/segment-2-cubic.js","node_modules/@antv/util/esm/path/process/quad-2-cubic.js","node_modules/@antv/util/esm/path/process/fix-arc.js","node_modules/@ant-design/plots/es/core/utils/merge-with-array-coverage.js","node_modules/lodash/_baseIsNaN.js","node_modules/lodash/stubArray.js","node_modules/d3-path/src/path.js","node_modules/element-resize-detector/src/collection-utils.js","node_modules/@ant-design/pro-form/es/components/SchemaForm/index.js","node_modules/@antv/util/esm/lodash/flatten.js","node_modules/@antv/component/esm/util/selection.js","node_modules/@antv/component/esm/util/group.js","node_modules/lodash/_copySymbolsIn.js","node_modules/@antv/l7-layers/es/core/CommonStyleAttribute.js","node_modules/@ant-design/plots/es/components/tiny/index.js","node_modules/@ant-design/plots/es/components/tiny/line/index.js","node_modules/@ant-design/plots/es/components/tiny/area/index.js","node_modules/@ant-design/plots/es/components/tiny/column/index.js","node_modules/@ant-design/plots/es/components/tiny/progress/index.js","node_modules/@ant-design/plots/es/components/tiny/ring/index.js","node_modules/@ant-design/pro-form/es/components/SchemaForm/valueType/field.js","node_modules/@ant-design/pro-form/es/components/SchemaForm/valueType/index.js","node_modules/@ant-design/pro-form/es/components/SchemaForm/valueType/ignore.js","node_modules/@ant-design/pro-form/es/components/SchemaForm/valueType/group.js","node_modules/@ant-design/pro-form/es/components/SchemaForm/valueType/formList.js","node_modules/@ant-design/pro-form/es/components/SchemaForm/valueType/formSet.js","node_modules/@ant-design/pro-form/es/components/SchemaForm/valueType/divider.js","node_modules/@ant-design/pro-form/es/components/SchemaForm/valueType/dependency.js","node_modules/lodash-es/isObject.js","node_modules/viewport-mercator-project/dist/esm/assert.js","node_modules/simple-swizzle/node_modules/is-arrayish/index.js","node_modules/@antv/l7-layers/es/citybuliding/models/build.js","node_modules/@antv/l7-layers/es/citybuliding/building.js","node_modules/@antv/l7-layers/es/heatmap/models/grid.js","node_modules/@antv/l7-layers/es/heatmap/models/grid3d.js","node_modules/@antv/l7-layers/es/heatmap/models/heatmap.js","node_modules/@antv/l7-layers/es/heatmap/triangulation.js","node_modules/@antv/l7-layers/es/heatmap/models/hexagon.js","node_modules/@antv/l7-layers/es/heatmap/models/index.js","node_modules/@antv/l7-layers/es/heatmap/index.js","node_modules/@antv/l7-layers/es/tile/service/TileLayerService.js","node_modules/@antv/l7-layers/es/tile/service/TileSourceService.js","node_modules/@turf/union/dist/es/index.js","node_modules/@antv/l7-layers/es/tile/service/TilePickService.js","node_modules/@antv/l7-layers/es/tile/utils/constants.js","node_modules/@antv/l7-layers/es/tile/core/BaseLayer.js","node_modules/@antv/util/esm/dom/create-dom.js","node_modules/@antv/component/esm/util/replace-children.js","node_modules/@antv/component/esm/ui/tooltip/constant.js","node_modules/@antv/component/esm/ui/tooltip/index.js","node_modules/@antv/util/esm/lodash/substitute.js","node_modules/@antv/g2/esm/interaction/tooltip.js","node_modules/d3-interpolate/src/date.js","node_modules/lodash/_WeakMap.js","node_modules/lodash/debounce.js","node_modules/@antv/l7-react/es/component/SceneContext.js","node_modules/reactcss/lib/flattenNames.js","node_modules/rc-tree/es/contextTypes.js","node_modules/@antv/component/esm/ui/title/index.js","node_modules/@antv/util/esm/lodash/filter.js","node_modules/lodash-es/_shortOut.js","node_modules/lodash-es/_createAssigner.js","node_modules/lodash-es/_baseRest.js","node_modules/lodash-es/_overRest.js","node_modules/lodash-es/_assignMergeValue.js","node_modules/lodash-es/_baseFor.js","node_modules/lodash-es/_createBaseFor.js","node_modules/lodash-es/_cloneBuffer.js","node_modules/lodash-es/_baseCreate.js","node_modules/lodash-es/_getPrototype.js","node_modules/lodash-es/isPlainObject.js","node_modules/lodash-es/_safeGet.js","node_modules/lodash-es/_assignValue.js","node_modules/lodash-es/_baseKeysIn.js","node_modules/lodash-es/keysIn.js","node_modules/lodash-es/_nativeKeysIn.js","node_modules/lodash-es/_baseSetToString.js","node_modules/lodash-es/constant.js","node_modules/lodash-es/_setToString.js","node_modules/lodash-es/merge.js","node_modules/lodash-es/_baseMerge.js","node_modules/lodash-es/_baseMergeDeep.js","node_modules/lodash-es/_cloneArrayBuffer.js","node_modules/lodash-es/isArrayLikeObject.js","node_modules/lodash-es/_copyArray.js","node_modules/lodash-es/_cloneTypedArray.js","node_modules/lodash-es/toPlainObject.js","node_modules/lodash-es/_copyObject.js","node_modules/lodash-es/_initCloneObject.js","node_modules/lodash-es/_isIterateeCall.js","node_modules/lodash-es/_apply.js","node_modules/@antv/util/esm/path/util/is-absolute-array.js","node_modules/@mapbox/geojson-rewind/index.js","node_modules/@antv/scale/esm/utils/bisect.js","node_modules/@antv/util/esm/lodash/clone.js","node_modules/@antv/component/esm/ui/sparkline/columns.js","node_modules/@antv/component/esm/ui/sparkline/lines.js","node_modules/@antv/component/esm/ui/sparkline/path.js","node_modules/@antv/component/esm/util/path.js","node_modules/@antv/util/esm/lodash/min-by.js","node_modules/@antv/util/esm/lodash/max-by.js","node_modules/@antv/component/esm/ui/sparkline/utils.js","node_modules/@antv/component/esm/ui/sparkline/index.js","node_modules/@antv/component/esm/ui/slider/index.js","node_modules/@mapbox/vector-tile/lib/vectortilefeature.js","node_modules/@antv/component/esm/util/ellipsis.js","node_modules/lodash/_baseIteratee.js","node_modules/flru/dist/flru.mjs","node_modules/@antv/g2/esm/utils/lru.js","node_modules/@mapbox/tiny-sdf/index.js","node_modules/rc-table/es/Body/ExpandedRow.js","node_modules/@ant-design/plots/es/core/utils/field-adapter.js","node_modules/eventemitter3/index.js","node_modules/@antv/l7-maps/es/types.js","node_modules/rc-table/es/hooks/useRowInfo.js","node_modules/lodash-es/_isMasked.js","node_modules/lodash-es/_coreJsData.js","node_modules/lodash-es/_baseIsNative.js","node_modules/lodash-es/_getNative.js","node_modules/lodash-es/_getValue.js","node_modules/lodash-es/eq.js","node_modules/@antv/l7-layers/es/point/models/fill.js","node_modules/@ant-design/icons/lib/components/twoTonePrimaryColor.js","node_modules/earcut/src/earcut.js","node_modules/element-resize-detector/src/element-resize-detector.js","node_modules/lodash-es/_DataView.js","node_modules/lodash-es/_Promise.js","node_modules/lodash-es/_Set.js","node_modules/lodash-es/_WeakMap.js","node_modules/lodash-es/_getTag.js","node_modules/@antv/scale/esm/scales/linear.js","node_modules/@antv/scale/esm/scales/constant.js","node_modules/d3-shape/src/curve/radial.js","node_modules/@ant-design/charts-util/es/rc/error-boundary.js","node_modules/@ant-design/charts-util/es/react/render.js","node_modules/@ant-design/charts-util/es/utils/context.js","node_modules/@ant-design/charts-util/es/rc/create-node.js","node_modules/@ant-design/charts-util/es/rc/chart-loading.js","node_modules/@ant-design/charts-util/es/utils/measure-text.js","node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","node_modules/@ant-design/icons-svg/lib/asn/ArrowLeftOutlined.js","node_modules/@ant-design/icons-svg/es/asn/UpOutlined.js","node_modules/@ant-design/icons/es/icons/UpOutlined.js","node_modules/@antv/g2/esm/component/axisRadar.js","node_modules/@antv/g2/esm/component/legendContinuousBlock.js","node_modules/@antv/g2/esm/component/legendContinuousSize.js","node_modules/@antv/g2/esm/component/legendContinuousBlockSize.js","node_modules/@antv/g2/esm/composition/mark.js","node_modules/@antv/g2/esm/composition/view.js","node_modules/@antv/g2/esm/shape/label/position/area.js","node_modules/@antv/g2/esm/shape/label/position/default.js","node_modules/@antv/g2/esm/shape/label/position/outside.js","node_modules/@antv/g2/esm/shape/label/position/utils.js","node_modules/@antv/g2/esm/shape/label/position/spider.js","node_modules/@antv/g2/esm/shape/label/position/surround.js","node_modules/@antv/g2/esm/shape/label/label.js","node_modules/@antv/g2/esm/interaction/event.js","node_modules/@antv/g2/esm/runtime/library.js","node_modules/@antv/g2/esm/lib/builtinlib.js","node_modules/@antv/util/esm/lodash/max.js","node_modules/lodash/_baseHasIn.js","node_modules/lodash/_setCacheHas.js","node_modules/@antv/l7-renderer/es/device/DeviceAttribute.js","node_modules/@antv/l7-renderer/es/device/constants.js","node_modules/@antv/l7-renderer/es/device/utils/typedarray.js","node_modules/@antv/l7-renderer/es/device/DeviceBuffer.js","node_modules/@antv/l7-renderer/es/device/utils/HashMap.js","node_modules/@antv/l7-renderer/es/device/DeviceCache.js","node_modules/@antv/l7-renderer/es/device/DeviceElements.js","node_modules/@antv/l7-renderer/es/device/DeviceTexture2D.js","node_modules/@antv/l7-renderer/es/device/DeviceFramebuffer.js","node_modules/@antv/l7-renderer/es/device/DeviceModel.js","node_modules/@antv/l7-renderer/es/device/index.js","node_modules/@antv/l7-renderer/es/device/utils/webgl.js","node_modules/@antv/l7-renderer/es/regl/ReglAttribute.js","node_modules/@antv/l7-renderer/es/regl/constants.js","node_modules/@antv/l7-renderer/es/regl/ReglBuffer.js","node_modules/@antv/l7-renderer/es/regl/ReglElements.js","node_modules/@antv/l7-renderer/es/regl/ReglFramebuffer.js","node_modules/@antv/l7-renderer/es/regl/ReglModel.js","node_modules/@antv/l7-renderer/es/regl/ReglTexture2D.js","node_modules/@antv/l7-renderer/es/regl/index.js","node_modules/@antv/l7-scene/es/boxSelect.js","node_modules/@antv/l7-scene/es/index.js","node_modules/dayjs/plugin/quarterOfYear.js","node_modules/pdfast/src/helper.js","node_modules/rc-table/es/context/TableContext.js","node_modules/lodash/_cloneDataView.js","node_modules/@antv/component/esm/util/deep-assign.js","node_modules/lodash/_baseIsEqual.js","node_modules/lodash/_arrayIncludes.js","node_modules/@turf/meta/dist/es/index.js","node_modules/@antv/scale/esm/scales/threshold.js","node_modules/@antv/l7-layers/es/core/utils.js","node_modules/@antv/vendor/node_modules/d3-array/src/deviation.js","node_modules/@antv/vendor/node_modules/d3-array/src/variance.js","node_modules/@antv/g2/esm/transform/maybeKey.js","node_modules/@antv/g2/esm/utils/dateFormat.js","node_modules/@antv/g2/esm/transform/maybeTitle.js","node_modules/@antv/g2/esm/transform/maybeTooltip.js","node_modules/@antv/g2/esm/mark/utils.js","node_modules/lodash/_memoizeCapped.js","node_modules/@ant-design/pro-form/es/BaseForm/BaseForm.js","node_modules/@ant-design/icons-svg/lib/asn/ArrowRightOutlined.js","node_modules/@antv/component/esm/ui/legend/utils.js","node_modules/@antv/scale/esm/scales/quantize.js","node_modules/@antv/vendor/node_modules/d3-array/src/maxIndex.js","node_modules/reactcss/lib/components/active.js","node_modules/@antv/l7-layers/node_modules/eventemitter3/index.js","node_modules/@antv/g2/esm/utils/array.js","node_modules/@antv/g2/esm/api/library.js","node_modules/@babel/runtime/helpers/typeof.js","node_modules/@antv/util/esm/lodash/is-string.js","node_modules/reactcss/lib/loop.js","node_modules/d3-shape/src/path.js","node_modules/lodash-es/isBuffer.js","node_modules/lodash-es/stubFalse.js","node_modules/rc-tree/es/utils/treeUtil.js","node_modules/@antv/l7-layers/es/raster/models/raster.js","node_modules/@antv/l7-layers/es/raster/models/rasterRgb.js","node_modules/@antv/l7-layers/es/raster/models/rasterTerrainRgb.js","node_modules/@antv/l7-layers/es/raster/models/index.js","node_modules/@antv/l7-layers/es/raster/index.js","node_modules/lodash/isMap.js","node_modules/@antv/scale/esm/utils/is-valid.js","node_modules/@antv/util/esm/lodash/is-null.js","node_modules/@antv/l7-layers/es/core/shape/Path.js","node_modules/lodash/_nativeKeys.js","node_modules/d3-geo/src/cartesian.js","node_modules/@antv/l7-core/es/services/renderer/IMultiPassRenderer.js","node_modules/@antv/l7-utils/es/math.js","node_modules/d3-interpolate/src/basis.js","node_modules/@antv/l7-source/node_modules/eventemitter3/index.js","node_modules/@antv/g-lite/dist/index.esm.js","node_modules/@antv/util/esm/path/util/segment-line-factory.js","node_modules/@antv/util/esm/path/util/segment-arc-factory.js","node_modules/@antv/util/esm/path/util/segment-cubic-factory.js","node_modules/@antv/util/esm/path/util/path-length-factory.js","node_modules/@antv/util/esm/path/util/segment-quad-factory.js","node_modules/@antv/util/esm/lodash/mod.js","node_modules/@antv/util/esm/path/util/equalize-segments.js","node_modules/@antv/util/esm/path/util/get-draw-direction.js","node_modules/@antv/util/esm/path/util/get-path-area.js","node_modules/@antv/util/esm/lodash/is-boolean.js","node_modules/@babel/runtime/helpers/esm/get.js","node_modules/@babel/runtime/helpers/esm/superPropBase.js","node_modules/@babel/runtime/helpers/esm/superPropGet.js","node_modules/@antv/util/esm/path/util/get-total-length.js","node_modules/@antv/util/esm/path/process/reverse-curve.js","node_modules/@antv/util/esm/path/util/get-rotated-curve.js","node_modules/@antv/util/esm/path/process/clone-path.js","node_modules/@antv/util/esm/path/util/get-point-at-length.js","node_modules/lodash/_cloneSymbol.js","node_modules/@antv/l7-react/es/component/MapScene/MapboxScene.js","node_modules/@antv/l7-react/es/component/CustomControl.js","node_modules/@antv/l7-react/es/component/LayerContext.js","node_modules/@antv/l7-react/es/component/LayerAttribute/Active.js","node_modules/@antv/l7-react/es/component/LayerAttribute/Animate.js","node_modules/@antv/l7-react/es/component/LayerAttribute/Color.js","node_modules/@antv/l7-react/es/component/LayerAttribute/Filter.js","node_modules/@antv/l7-react/es/component/LayerAttribute/Scale.js","node_modules/@antv/l7-react/es/component/LayerAttribute/Select.js","node_modules/@antv/l7-react/es/component/LayerAttribute/Shape.js","node_modules/@antv/l7-react/es/component/LayerAttribute/Size.js","node_modules/@antv/l7-react/es/component/LayerAttribute/Source.js","node_modules/@antv/l7-react/es/component/LayerAttribute/Style.js","node_modules/@antv/l7-react/es/component/LayerAttribute/Layer.js","node_modules/@antv/l7-react/es/component/Layer.js","node_modules/@antv/l7-react/es/component/LayerEvent.js","node_modules/@antv/l7-react/es/component/Popup.js","node_modules/@antv/l7-react/es/component/Marker.js","node_modules/@antv/l7-react/es/component/SceneEvent.js","node_modules/@antv/l7-react/es/component/LoadImage.js","node_modules/@antv/util/esm/lodash/throttle.js","node_modules/@antv/util/esm/lodash/to-string.js","node_modules/lodash/isBoolean.js","node_modules/gl-matrix/esm/vec2.js","node_modules/@antv/g2/esm/utils/vector.js","node_modules/@antv/util/esm/lodash/index-of.js","node_modules/@antv/scale/esm/utils/pretty-number.js","node_modules/@antv/scale/esm/tick-methods/wilkinson-extended.js","node_modules/@antv/util/esm/lodash/deep-mix.js","node_modules/rc-table/es/utils/valueUtil.js","node_modules/lodash/lodash.js","node_modules/@antv/vendor/node_modules/d3-array/src/min.js","node_modules/lodash/_trimmedEndIndex.js","node_modules/@antv/util/esm/lodash/is-function.js","node_modules/@ant-design/pro-form/es/components/Group/index.js","node_modules/@ant-design/pro-form/es/components/Group/style.js","node_modules/gl-matrix/esm/mat4.js","node_modules/@antv/util/esm/lodash/get.js","node_modules/element-resize-detector/src/detection-strategy/scroll.js","node_modules/@antv/component/esm/util/layout/utils/helper.js","node_modules/@antv/component/esm/util/layout/flex/index.js","node_modules/@antv/component/esm/util/layout/grid/index.js","node_modules/@antv/component/esm/util/layout/executer.js","node_modules/@antv/component/esm/ui/layout/layout.js","node_modules/@antv/g2/esm/component/utils.js","node_modules/@ant-design/icons-svg/es/asn/CaretDownOutlined.js","node_modules/@ant-design/icons/es/icons/CaretDownOutlined.js","node_modules/@ant-design/pro-form/es/layouts/LoginForm/index.js","node_modules/@ant-design/pro-form/es/layouts/LoginForm/style.js","node_modules/@mapbox/vector-tile/index.js","node_modules/@babel/runtime/helpers/nonIterableRest.js","node_modules/@ant-design/plots/es/core/utils/delete-excess-keys.js","node_modules/@ant-design/plots/es/core/utils/filter-transformed.js","node_modules/@ant-design/plots/es/core/utils/transform.js","node_modules/numeral/numeral.js","node_modules/polygon-clipping/dist/polygon-clipping.umd.js","node_modules/@antv/l7-component/es/control/baseControl/selectControl.js","node_modules/@antv/l7-component/es/marker.js","node_modules/@antv/l7-component/es/control/baseControl/control.js","node_modules/@antv/l7-component/es/utils/popper.js","node_modules/@antv/l7-component/es/utils/icon.js","node_modules/@antv/l7-component/es/utils/screenfull.js","node_modules/@antv/l7-component/es/control/logo.js","node_modules/@antv/l7-component/es/popup/popup.js","node_modules/@antv/l7-component/es/index.js","node_modules/@ant-design/icons/lib/components/IconBase.js","node_modules/@antv/g2/esm/utils/traverse-elements.js","node_modules/@babel/runtime/helpers/toPrimitive.js","node_modules/@antv/l7-core/es/services/layer/ILayerService.js","node_modules/@antv/l7-layers/es/utils/rampcolor_legend.js","node_modules/@ant-design/pro-form/es/components/Dependency/index.js","node_modules/rc-picker/es/PickerInput/hooks/useRangePickerValue.js","node_modules/@ant-design/icons-svg/es/asn/InfoCircleOutlined.js","node_modules/@ant-design/icons/es/icons/InfoCircleOutlined.js","node_modules/@antv/util/esm/lodash/mix.js","node_modules/@antv/g2-extension-plot/esm/utils/hierarchy/partition.js","node_modules/@antv/g2-extension-plot/esm/mark/sunburst.js","node_modules/@antv/g2-extension-plot/esm/interaction/drillDown.js","node_modules/@antv/g2-extension-plot/esm/lib.js","node_modules/rc-picker/es/PickerInput/hooks/useLockEffect.js","node_modules/d3-scale/node_modules/d3-format/src/formatPrefixAuto.js","node_modules/d3-scale/node_modules/d3-format/src/defaultLocale.js","node_modules/d3-time-format/src/defaultLocale.js","node_modules/@antv/l7-layers/es/plugins/DataMappingPlugin.js","node_modules/@antv/l7-layers/es/plugins/DataSourcePlugin.js","node_modules/d3-array/src/extent.js","node_modules/d3-scale/src/init.js","node_modules/d3-collection/src/map.js","node_modules/d3-collection/src/set.js","node_modules/d3-scale/src/ordinal.js","node_modules/d3-scale/src/continuous.js","node_modules/d3-scale/src/constant.js","node_modules/d3-scale/node_modules/d3-format/src/formatSpecifier.js","node_modules/d3-scale/node_modules/d3-format/src/formatTrim.js","node_modules/d3-scale/node_modules/d3-format/src/formatRounded.js","node_modules/d3-scale/node_modules/d3-format/src/formatTypes.js","node_modules/d3-scale/node_modules/d3-format/src/identity.js","node_modules/d3-scale/node_modules/d3-format/src/locale.js","node_modules/d3-scale/node_modules/d3-format/src/formatGroup.js","node_modules/d3-scale/node_modules/d3-format/src/formatNumerals.js","node_modules/d3-scale/src/tickFormat.js","node_modules/d3-scale/node_modules/d3-format/src/precisionRound.js","node_modules/d3-scale/node_modules/d3-format/src/precisionPrefix.js","node_modules/d3-scale/node_modules/d3-format/src/precisionFixed.js","node_modules/d3-scale/src/linear.js","node_modules/d3-scale/src/nice.js","node_modules/d3-scale/src/log.js","node_modules/d3-scale/src/pow.js","node_modules/d3-scale/node_modules/d3-time/src/interval.js","node_modules/d3-scale/node_modules/d3-time/src/year.js","node_modules/d3-scale/node_modules/d3-time/src/month.js","node_modules/d3-scale/node_modules/d3-time/src/week.js","node_modules/d3-scale/node_modules/d3-time/src/duration.js","node_modules/d3-scale/node_modules/d3-time/src/day.js","node_modules/d3-scale/node_modules/d3-time/src/hour.js","node_modules/d3-scale/node_modules/d3-time/src/minute.js","node_modules/d3-scale/node_modules/d3-time/src/second.js","node_modules/d3-scale/node_modules/d3-time/src/millisecond.js","node_modules/d3-time-format/node_modules/d3-time/src/interval.js","node_modules/d3-time-format/node_modules/d3-time/src/day.js","node_modules/d3-time-format/node_modules/d3-time/src/duration.js","node_modules/d3-time-format/node_modules/d3-time/src/week.js","node_modules/d3-time-format/node_modules/d3-time/src/year.js","node_modules/d3-time-format/node_modules/d3-time/src/utcDay.js","node_modules/d3-time-format/node_modules/d3-time/src/utcWeek.js","node_modules/d3-time-format/node_modules/d3-time/src/utcYear.js","node_modules/d3-time-format/src/locale.js","node_modules/d3-scale/src/time.js","node_modules/d3-scale/src/sequential.js","node_modules/d3-scale/src/diverging.js","node_modules/d3-scale/src/quantile.js","node_modules/d3-scale/src/quantize.js","node_modules/d3-scale/src/threshold.js","node_modules/@antv/l7-layers/es/plugins/FeatureScalePlugin.js","node_modules/@antv/l7-layers/es/utils/identityScale.js","node_modules/@antv/l7-layers/es/plugins/LayerAnimateStylePlugin.js","node_modules/@antv/l7-layers/es/plugins/LayerMaskPlugin.js","node_modules/@antv/l7-layers/es/plugins/LayerModelPlugin.js","node_modules/@antv/l7-layers/es/plugins/LayerStylePlugin.js","node_modules/@antv/l7-layers/es/plugins/LightingPlugin.js","node_modules/@antv/l7-layers/es/utils/multiPassRender.js","node_modules/@antv/l7-layers/es/plugins/MultiPassRendererPlugin.js","node_modules/@antv/l7-layers/es/plugins/PixelPickingPlugin.js","node_modules/@antv/l7-layers/es/tile/utils/utils.js","node_modules/@antv/l7-layers/es/plugins/RegisterStyleAttributePlugin.js","node_modules/@antv/l7-layers/es/plugins/ShaderUniformPlugin.js","node_modules/@antv/l7-layers/es/plugins/UpdateModelPlugin.js","node_modules/@antv/l7-layers/es/plugins/UpdateStyleAttributePlugin.js","node_modules/@antv/l7-layers/es/core/LayerPickService.js","node_modules/@antv/l7-layers/es/core/TextureService.js","node_modules/@antv/l7-layers/es/core/BaseLayer.js","node_modules/@antv/l7-layers/es/plugins/index.js","node_modules/@antv/l7-source/es/utils/bandOperation/operationSchema.js","node_modules/reactcss/lib/autoprefix.js","node_modules/lodash/_matchesStrictComparable.js","node_modules/lodash/_baseKeys.js","node_modules/@antv/l7-source/es/source/index.js","node_modules/lodash-es/isArrayLike.js","node_modules/@antv/l7-utils/es/config.js","node_modules/@antv/util/esm/lodash/memoize.js","node_modules/@antv/component/esm/util/text.js","node_modules/@antv/component/esm/ui/slider/constant.js","node_modules/rc-util/lib/omit.js","node_modules/@ant-design/icons/ArrowLeftOutlined.js","node_modules/@antv/util/esm/lodash/is-equal.js","node_modules/lodash-es/_defineProperty.js","node_modules/lodash/isUndefined.js","node_modules/@antv/vendor/node_modules/d3-array/src/sum.js","node_modules/@antv/util/esm/lodash/is-plain-object.js","node_modules/rc-checkbox/es/index.js","node_modules/@antv/util/esm/path/parser/finalize-segment.js","node_modules/@antv/util/esm/path/parser/is-digit-start.js","node_modules/@antv/util/esm/path/parser/skip-spaces.js","node_modules/@antv/util/esm/path/parser/is-space.js","node_modules/@antv/util/esm/path/parser/path-parser.js","node_modules/@antv/util/esm/path/process/normalize-path.js","node_modules/@antv/util/esm/path/convert/path-2-absolute.js","node_modules/@antv/util/esm/path/parser/parse-path-string.js","node_modules/@antv/util/esm/path/parser/scan-segment.js","node_modules/@antv/util/esm/path/parser/is-path-command.js","node_modules/@antv/util/esm/path/parser/is-arc-command.js","node_modules/@antv/util/esm/path/parser/scan-flag.js","node_modules/@antv/util/esm/path/parser/scan-param.js","node_modules/@antv/util/esm/path/process/normalize-segment.js","node_modules/rc-picker/es/PickerInput/Selector/hooks/useInputProps.js","node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/cubehelix.js","node_modules/d3-scale-chromatic/src/colors.js","node_modules/d3-scale-chromatic/src/categorical/category10.js","node_modules/d3-scale-chromatic/src/categorical/Accent.js","node_modules/d3-scale-chromatic/src/categorical/Dark2.js","node_modules/d3-scale-chromatic/src/categorical/observable10.js","node_modules/d3-scale-chromatic/src/categorical/Paired.js","node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","node_modules/d3-scale-chromatic/src/categorical/Set1.js","node_modules/d3-scale-chromatic/src/categorical/Set2.js","node_modules/d3-scale-chromatic/src/categorical/Set3.js","node_modules/d3-scale-chromatic/src/categorical/Tableau10.js","node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/basis.js","node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/rgb.js","node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/basisClosed.js","node_modules/d3-scale-chromatic/src/ramp.js","node_modules/d3-scale-chromatic/src/diverging/BrBG.js","node_modules/d3-scale-chromatic/src/diverging/PRGn.js","node_modules/d3-scale-chromatic/src/diverging/PiYG.js","node_modules/d3-scale-chromatic/src/diverging/PuOr.js","node_modules/d3-scale-chromatic/src/diverging/RdBu.js","node_modules/d3-scale-chromatic/src/diverging/RdGy.js","node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","node_modules/d3-scale-chromatic/src/diverging/Spectral.js","node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js","node_modules/d3-scale-chromatic/node_modules/d3-color/src/math.js","node_modules/d3-scale-chromatic/node_modules/d3-color/src/cubehelix.js","node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js","node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","node_modules/d3-hierarchy/src/partition.js","node_modules/d3-scale/node_modules/d3-format/src/formatDecimal.js","node_modules/@antv/l7-utils/es/ajax.js","node_modules/@antv/l7-core/es/services/component/IControlService.js","node_modules/@ant-design/pro-form/es/BaseForm/LightWrapper/index.js","node_modules/@ant-design/pro-form/es/BaseForm/LightWrapper/style.js","node_modules/@ant-design/pro-form/es/components/FormItem/index.js","node_modules/@ant-design/pro-form/es/layouts/StepsForm/index.js","node_modules/@antv/l7-core/es/services/coordinate/ICoordinateSystemService.js","node_modules/d3-hierarchy/src/treemap/resquarify.js","node_modules/rc-picker/es/hooks/useTimeInfo.js","node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/util.js","node_modules/@antv/component/esm/util/visibility.js","node_modules/@antv/component/esm/util/traverse.js","node_modules/@antv/l7-core/es/services/renderer/gl.js","node_modules/d3-hierarchy/src/lcg.js","node_modules/d3-geo/src/path/bounds.js","node_modules/@antv/component/esm/util/omit.js","node_modules/@antv/component/esm/ui/axis/guides/line.js","node_modules/@antv/component/esm/util/keyframe-interpolate.js","node_modules/@antv/component/esm/util/interpolate.js","node_modules/d3-geo/src/stream.js","node_modules/@antv/util/esm/lodash/omit.js","node_modules/@antv/g2/esm/utils/helper.js","node_modules/@babel/runtime/helpers/interopRequireWildcard.js","node_modules/lodash-es/_assocIndexOf.js","node_modules/lodash-es/_listCacheDelete.js","node_modules/lodash-es/_ListCache.js","node_modules/lodash-es/_listCacheClear.js","node_modules/lodash-es/_listCacheGet.js","node_modules/lodash-es/_listCacheHas.js","node_modules/lodash-es/_listCacheSet.js","node_modules/color-name/index.js","node_modules/lodash/isNil.js","node_modules/@antv/component/esm/util/event.js","node_modules/@antv/l7-layers/es/image/models/image.js","node_modules/@antv/l7-layers/es/image/models/index.js","node_modules/@antv/l7-layers/es/image/index.js","node_modules/@ant-design/pro-form/es/components/Radio/index.js","node_modules/lodash-es/_nativeCreate.js","node_modules/lodash-es/_hashGet.js","node_modules/lodash-es/_hashHas.js","node_modules/lodash-es/_Hash.js","node_modules/lodash-es/_hashClear.js","node_modules/lodash-es/_hashDelete.js","node_modules/lodash-es/_hashSet.js","node_modules/lodash-es/_getMapData.js","node_modules/lodash-es/_isKeyable.js","node_modules/lodash-es/_MapCache.js","node_modules/lodash-es/_mapCacheClear.js","node_modules/lodash-es/_mapCacheDelete.js","node_modules/lodash-es/_mapCacheGet.js","node_modules/lodash-es/_mapCacheHas.js","node_modules/lodash-es/_mapCacheSet.js","node_modules/@antv/g2/esm/shape/interval/color.js","node_modules/lodash/_baseClamp.js","node_modules/lodash-es/_toSource.js","node_modules/d3-format/src/formatDecimal.js","node_modules/rc-picker/es/PickerInput/context.js","node_modules/lodash/_getAllKeys.js","node_modules/@antv/component/esm/util/classnames.js","node_modules/@ant-design/icons-svg/es/asn/LikeOutlined.js","node_modules/@ant-design/icons/es/icons/LikeOutlined.js","node_modules/@antv/util/esm/path/parser/params-count.js","node_modules/lodash-es/_overArg.js","node_modules/@ant-design/plots/es/core/plots/bidirectional-bar/constants.js","node_modules/@antv/l7-map/es/map/util/browser.js","node_modules/@antv/l7-maps/es/utils/BaseMapWrapper.js","node_modules/@antv/l7-maps/es/lib/base-map.js","node_modules/@antv/l7-maps/es/utils/utils.js","node_modules/@antv/l7-maps/es/amap-next/theme.js","node_modules/@antv/l7-maps/es/amap-next/map.js","node_modules/@antv/l7-maps/es/amap-next/index.js","node_modules/@antv/l7-map/es/map/geo/lng_lat_bounds.js","node_modules/@antv/l7-map/es/map/util/abort_error.js","node_modules/@antv/l7-map/es/map/util/evented.js","node_modules/@antv/l7-map/es/map/camera.js","node_modules/gl-matrix/esm/mat2.js","node_modules/@antv/l7-map/es/map/geo/edge_insets.js","node_modules/@antv/l7-map/es/map/geo/transform.js","node_modules/@antv/l7-map/es/map/util/dom.js","node_modules/@antv/l7-map/es/map/handler/transform-provider.js","node_modules/@antv/l7-map/es/map/handler/box_zoom.js","node_modules/@antv/l7-map/es/map/handler/click_zoom.js","node_modules/@antv/l7-map/es/map/handler/cooperative_gestures.js","node_modules/@antv/l7-map/es/map/handler/keyboard.js","node_modules/@antv/l7-map/es/map/util/simpleMapCoord.js","node_modules/@antv/l7-map/es/map/events.js","node_modules/@antv/l7-map/es/map/handler/map_event.js","node_modules/@antv/l7-map/es/map/handler/drag_handler.js","node_modules/@antv/l7-map/es/map/handler/drag_move_state_manager.js","node_modules/@antv/l7-map/es/map/handler/mouse.js","node_modules/@antv/l7-map/es/map/handler/scroll_zoom.js","node_modules/@antv/l7-map/es/map/handler/shim/dblclick_zoom.js","node_modules/@antv/l7-map/es/map/handler/shim/drag_pan.js","node_modules/@antv/l7-map/es/map/handler/shim/drag_rotate.js","node_modules/@antv/l7-map/es/map/handler/shim/two_fingers_touch.js","node_modules/@antv/l7-map/es/map/handler/handler_util.js","node_modules/@antv/l7-map/es/map/handler/tap_recognizer.js","node_modules/@antv/l7-map/es/map/handler/tap_drag_zoom.js","node_modules/@antv/l7-map/es/map/handler/tap_zoom.js","node_modules/@antv/l7-map/es/map/handler/touch_pan.js","node_modules/@antv/l7-map/es/map/handler/two_fingers_touch.js","node_modules/@antv/l7-map/es/map/handler_inertia.js","node_modules/@antv/l7-map/es/map/handler_manager.js","node_modules/@antv/l7-map/es/map/util/task_queue.js","node_modules/@antv/l7-map/es/map/map.js","node_modules/@antv/l7-maps/es/map/map.js","node_modules/@antv/l7-maps/es/map/index.js","node_modules/@antv/l7-maps/es/mapbox/map.js","node_modules/@antv/l7-maps/es/mapbox/index.js","node_modules/@antv/l7-maps/es/index.js","node_modules/eventemitter3/index.mjs"],"sourcesContent":["import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport useEvent from \"rc-util/es/hooks/useEvent\";\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport isEqual from \"rc-util/es/isEqual\";\nimport * as React from 'react';\nimport { unstable_batchedUpdates } from 'react-dom';\nexport function createContext(defaultValue) {\n var Context = /*#__PURE__*/React.createContext(undefined);\n var Provider = function Provider(_ref) {\n var value = _ref.value,\n children = _ref.children;\n var valueRef = React.useRef(value);\n valueRef.current = value;\n var _React$useState = React.useState(function () {\n return {\n getValue: function getValue() {\n return valueRef.current;\n },\n listeners: new Set()\n };\n }),\n _React$useState2 = _slicedToArray(_React$useState, 1),\n context = _React$useState2[0];\n useLayoutEffect(function () {\n unstable_batchedUpdates(function () {\n context.listeners.forEach(function (listener) {\n listener(value);\n });\n });\n }, [value]);\n return /*#__PURE__*/React.createElement(Context.Provider, {\n value: context\n }, children);\n };\n return {\n Context: Context,\n Provider: Provider,\n defaultValue: defaultValue\n };\n}\n\n/** e.g. useSelect(userContext) => user */\n\n/** e.g. useSelect(userContext, user => user.name) => user.name */\n\n/** e.g. useSelect(userContext, ['name', 'age']) => user { name, age } */\n\n/** e.g. useSelect(userContext, 'name') => user.name */\n\nexport function useContext(holder, selector) {\n var eventSelector = useEvent(typeof selector === 'function' ? selector : function (ctx) {\n if (selector === undefined) {\n return ctx;\n }\n if (!Array.isArray(selector)) {\n return ctx[selector];\n }\n var obj = {};\n selector.forEach(function (key) {\n obj[key] = ctx[key];\n });\n return obj;\n });\n var context = React.useContext(holder === null || holder === void 0 ? void 0 : holder.Context);\n var _ref2 = context || {},\n listeners = _ref2.listeners,\n getValue = _ref2.getValue;\n var valueRef = React.useRef();\n valueRef.current = eventSelector(context ? getValue() : holder === null || holder === void 0 ? void 0 : holder.defaultValue);\n var _React$useState3 = React.useState({}),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n forceUpdate = _React$useState4[1];\n useLayoutEffect(function () {\n if (!context) {\n return;\n }\n function trigger(nextValue) {\n var nextSelectorValue = eventSelector(nextValue);\n if (!isEqual(valueRef.current, nextSelectorValue, true)) {\n forceUpdate({});\n }\n }\n listeners.add(trigger);\n return function () {\n listeners.delete(trigger);\n };\n }, [context]);\n return valueRef.current;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { supportRef } from \"rc-util/es/ref\";\nimport * as React from 'react';\n/**\n * Create Immutable pair for `makeImmutable` and `responseImmutable`.\n */\nexport default function createImmutable() {\n var ImmutableContext = /*#__PURE__*/React.createContext(null);\n\n /**\n * Get render update mark by `makeImmutable` root.\n * Do not deps on the return value as render times\n * but only use for `useMemo` or `useCallback` deps.\n */\n function useImmutableMark() {\n return React.useContext(ImmutableContext);\n }\n\n /**\n * Wrapped Component will be marked as Immutable.\n * When Component parent trigger render,\n * it will notice children component (use with `responseImmutable`) node that parent has updated.\n * @param Component Passed Component\n * @param triggerRender Customize trigger `responseImmutable` children re-render logic. Default will always trigger re-render when this component re-render.\n */\n function makeImmutable(Component, shouldTriggerRender) {\n var refAble = supportRef(Component);\n var ImmutableComponent = function ImmutableComponent(props, ref) {\n var refProps = refAble ? {\n ref: ref\n } : {};\n var renderTimesRef = React.useRef(0);\n var prevProps = React.useRef(props);\n\n // If parent has the context, we do not wrap it\n var mark = useImmutableMark();\n if (mark !== null) {\n return /*#__PURE__*/React.createElement(Component, _extends({}, props, refProps));\n }\n if (\n // Always trigger re-render if not provide `notTriggerRender`\n !shouldTriggerRender || shouldTriggerRender(prevProps.current, props)) {\n renderTimesRef.current += 1;\n }\n prevProps.current = props;\n return /*#__PURE__*/React.createElement(ImmutableContext.Provider, {\n value: renderTimesRef.current\n }, /*#__PURE__*/React.createElement(Component, _extends({}, props, refProps)));\n };\n if (process.env.NODE_ENV !== 'production') {\n ImmutableComponent.displayName = \"ImmutableRoot(\".concat(Component.displayName || Component.name, \")\");\n }\n return refAble ? /*#__PURE__*/React.forwardRef(ImmutableComponent) : ImmutableComponent;\n }\n\n /**\n * Wrapped Component with `React.memo`.\n * But will rerender when parent with `makeImmutable` rerender.\n */\n function responseImmutable(Component, propsAreEqual) {\n var refAble = supportRef(Component);\n var ImmutableComponent = function ImmutableComponent(props, ref) {\n var refProps = refAble ? {\n ref: ref\n } : {};\n useImmutableMark();\n return /*#__PURE__*/React.createElement(Component, _extends({}, props, refProps));\n };\n if (process.env.NODE_ENV !== 'production') {\n ImmutableComponent.displayName = \"ImmutableResponse(\".concat(Component.displayName || Component.name, \")\");\n }\n return refAble ? /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(ImmutableComponent), propsAreEqual) : /*#__PURE__*/React.memo(ImmutableComponent, propsAreEqual);\n }\n return {\n makeImmutable: makeImmutable,\n responseImmutable: responseImmutable,\n useImmutableMark: useImmutableMark\n };\n}","import { createContext, useContext } from \"./context\";\nimport createImmutable from \"./Immutable\";\n\n// For legacy usage, we export it directly\nvar _createImmutable = createImmutable(),\n makeImmutable = _createImmutable.makeImmutable,\n responseImmutable = _createImmutable.responseImmutable,\n useImmutableMark = _createImmutable.useImmutableMark;\nexport { createContext, useContext, createImmutable, makeImmutable, responseImmutable, useImmutableMark };","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport BaseModel from \"../../core/BaseModel\";\nimport { PointImageTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/image/image_frag.glsl' */\nconst pointImageFrag = \"layout(std140) uniform commonUniforms {\\n vec2 u_textSize;\\n float u_raisingHeight;\\n float u_heightfixed;\\n};\\n\\nuniform sampler2D u_texture;\\n\\nin vec4 v_color;\\nin vec2 v_uv;\\nin float v_opacity;\\n\\n#pragma include \\\"picking\\\"\\n\\nout vec4 outputColor;\\n\\nvoid main(){\\n vec2 pos = v_uv / u_textSize + gl_PointCoord / u_textSize * 64.;\\n vec4 textureColor;\\n\\n // Y = 0.299R + 0.587G + 0.114B // \\u4EAE\\u5EA6\\u63D0\\u53D6\\n \\n textureColor = texture(SAMPLER_2D(u_texture), pos);\\n\\n // Tip: \\u53BB\\u9664\\u8FB9\\u7F18\\u90E8\\u5206 mipmap \\u5BFC\\u81F4\\u7684\\u6DF7\\u5408\\u53D8\\u6697\\n float fragmengTocenter = distance(vec2(0.5), gl_PointCoord);\\n if(fragmengTocenter >= 0.5) {\\n float luma = 0.299 * textureColor.r + 0.587 * textureColor.g + 0.114 * textureColor.b;\\n textureColor.a *= luma;\\n }\\n \\n if(all(lessThan(v_color, vec4(1.0+0.00001))) && all(greaterThan(v_color, vec4(1.0-0.00001))) || v_color==vec4(1.0)){\\n outputColor= textureColor;\\n }else {\\n outputColor= step(0.01, textureColor.z) * v_color;\\n }\\n outputColor.a *= v_opacity;\\n if (outputColor.a < 0.01) {\\n discard;\\n }\\n outputColor = filterColor(outputColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/image/image_vert.glsl' */\nconst pointImageVert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_Uv;\\n\\nlayout(std140) uniform commonUniforms {\\n vec2 u_textSize;\\n float u_raisingHeight;\\n float u_heightfixed;\\n};\\n\\nout vec4 v_color;\\nout vec2 v_uv;\\nout float v_opacity;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n // cal style mapping - \\u6570\\u636E\\u7EB9\\u7406\\u6620\\u5C04\\u90E8\\u5206\\u7684\\u8BA1\\u7B97\\n v_color = a_Color;\\n v_opacity = opacity;\\n v_uv = a_Uv;\\n vec4 project_pos = project_position(vec4(a_Position, 1.0), a_Position64Low);\\n\\n vec2 offset = project_pixel(offsets);\\n\\n float raisingHeight = u_raisingHeight;\\n if (u_heightfixed < 1.0) {\\n // false\\n raisingHeight = project_pixel(u_raisingHeight);\\n } else {\\n if (\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\\n ) {\\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\\n raisingHeight = u_raisingHeight * mapboxZoomScale;\\n }\\n }\\n\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, raisingHeight, 1.0));\\n\\n gl_PointSize = a_Size * 2.0 * u_DevicePixelRatio;\\n setPickingColor(a_PickingColor);\\n}\\n\";\nexport default class ImageModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"texture\", void 0);\n _defineProperty(this, \"updateTexture\", () => {\n const {\n createTexture2D\n } = this.rendererService;\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas(),\n mag: 'linear',\n min: 'linear mipmap nearest',\n mipmap: true\n });\n // 更新完纹理后在更新的图层的时候需要更新所有的图层\n // this.layer.layerModelNeedUpdate = true;\n setTimeout(() => {\n // 延迟渲染\n this.layerService.throttleRenderLayers();\n });\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.LINEAR,\n min: gl.LINEAR_MIPMAP_LINEAR,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128,\n mipmap: true\n });\n });\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n UV: 10\n });\n }\n getUninforms() {\n // ThreeJS 图层兼容\n if (this.rendererService.getDirty()) {\n var _this$texture;\n (_this$texture = this.texture) === null || _this$texture === void 0 || _this$texture.bind();\n }\n const commonInfo = this.getCommonUniformsInfo();\n const attributeInfo = this.getUniformsBufferInfo(this.getStyleAttribute());\n this.updateStyleUnifoms();\n return _objectSpread(_objectSpread({}, commonInfo.uniformsOption), attributeInfo.uniformsOption);\n }\n getCommonUniformsInfo() {\n const {\n raisingHeight = 0,\n heightfixed = false\n } = this.layer.getLayerConfig();\n const commonOptions = {\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n u_raisingHeight: Number(raisingHeight),\n u_heightfixed: Number(heightfixed),\n u_texture: this.texture\n };\n this.textures = [this.texture];\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.iconService.on('imageUpdate', _this.updateTexture);\n _this.updateTexture();\n return _this.buildModels();\n })();\n }\n clearModels() {\n var _this$texture2;\n (_this$texture2 = this.texture) === null || _this$texture2 === void 0 || _this$texture2.destroy();\n this.iconService.off('imageUpdate', this.updateTexture);\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.initUniformsBuffer();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'pointImage',\n vertexShader: pointImageVert,\n fragmentShader: pointImageFrag,\n triangulation: PointImageTriangulation,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n depth: {\n enable: false\n },\n primitive: gl.POINTS\n });\n return [model];\n })();\n }\n registerBuiltinAttributes() {\n // 注册 Position 属性 64 位地位部分,经纬度数据开启双精度,避免大于 20层级以上出现数据偏移\n this.registerPosition64LowAttribute();\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n size = 5\n } = feature;\n return Array.isArray(size) ? [size[0]] : [size];\n }\n }\n });\n\n // point layer uv;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n shaderLocation: this.attributeLocation.UV,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: feature => {\n const iconMap = this.iconService.getIconMap();\n const {\n shape\n } = feature;\n const {\n x,\n y\n } = iconMap[shape] || {\n x: -64,\n y: -64\n }; // 非画布区域,默认的图标改为透明\n return [x, y];\n }\n }\n });\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = canUseDom;\nfunction canUseDom() {\n return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\ntypeof define === 'function' && define.amd ? define(factory) :\n(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Supercluster = factory());\n})(this, (function () { 'use strict';\n\nfunction sortKD(ids, coords, nodeSize, left, right, depth) {\n if (right - left <= nodeSize) { return; }\n\n var m = (left + right) >> 1;\n\n select(ids, coords, m, left, right, depth % 2);\n\n sortKD(ids, coords, nodeSize, left, m - 1, depth + 1);\n sortKD(ids, coords, nodeSize, m + 1, right, depth + 1);\n}\n\nfunction select(ids, coords, k, left, right, inc) {\n\n while (right > left) {\n if (right - left > 600) {\n var n = right - left + 1;\n var m = k - left + 1;\n var z = Math.log(n);\n var s = 0.5 * Math.exp(2 * z / 3);\n var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n select(ids, coords, k, newLeft, newRight, inc);\n }\n\n var t = coords[2 * k + inc];\n var i = left;\n var j = right;\n\n swapItem(ids, coords, left, k);\n if (coords[2 * right + inc] > t) { swapItem(ids, coords, left, right); }\n\n while (i < j) {\n swapItem(ids, coords, i, j);\n i++;\n j--;\n while (coords[2 * i + inc] < t) { i++; }\n while (coords[2 * j + inc] > t) { j--; }\n }\n\n if (coords[2 * left + inc] === t) { swapItem(ids, coords, left, j); }\n else {\n j++;\n swapItem(ids, coords, j, right);\n }\n\n if (j <= k) { left = j + 1; }\n if (k <= j) { right = j - 1; }\n }\n}\n\nfunction swapItem(ids, coords, i, j) {\n swap(ids, i, j);\n swap(coords, 2 * i, 2 * j);\n swap(coords, 2 * i + 1, 2 * j + 1);\n}\n\nfunction swap(arr, i, j) {\n var tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction range(ids, coords, minX, minY, maxX, maxY, nodeSize) {\n var stack = [0, ids.length - 1, 0];\n var result = [];\n var x, y;\n\n while (stack.length) {\n var axis = stack.pop();\n var right = stack.pop();\n var left = stack.pop();\n\n if (right - left <= nodeSize) {\n for (var i = left; i <= right; i++) {\n x = coords[2 * i];\n y = coords[2 * i + 1];\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) { result.push(ids[i]); }\n }\n continue;\n }\n\n var m = Math.floor((left + right) / 2);\n\n x = coords[2 * m];\n y = coords[2 * m + 1];\n\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) { result.push(ids[m]); }\n\n var nextAxis = (axis + 1) % 2;\n\n if (axis === 0 ? minX <= x : minY <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(nextAxis);\n }\n if (axis === 0 ? maxX >= x : maxY >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(nextAxis);\n }\n }\n\n return result;\n}\n\nfunction within(ids, coords, qx, qy, r, nodeSize) {\n var stack = [0, ids.length - 1, 0];\n var result = [];\n var r2 = r * r;\n\n while (stack.length) {\n var axis = stack.pop();\n var right = stack.pop();\n var left = stack.pop();\n\n if (right - left <= nodeSize) {\n for (var i = left; i <= right; i++) {\n if (sqDist(coords[2 * i], coords[2 * i + 1], qx, qy) <= r2) { result.push(ids[i]); }\n }\n continue;\n }\n\n var m = Math.floor((left + right) / 2);\n\n var x = coords[2 * m];\n var y = coords[2 * m + 1];\n\n if (sqDist(x, y, qx, qy) <= r2) { result.push(ids[m]); }\n\n var nextAxis = (axis + 1) % 2;\n\n if (axis === 0 ? qx - r <= x : qy - r <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(nextAxis);\n }\n if (axis === 0 ? qx + r >= x : qy + r >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(nextAxis);\n }\n }\n\n return result;\n}\n\nfunction sqDist(ax, ay, bx, by) {\n var dx = ax - bx;\n var dy = ay - by;\n return dx * dx + dy * dy;\n}\n\nvar defaultGetX = function (p) { return p[0]; };\nvar defaultGetY = function (p) { return p[1]; };\n\nvar KDBush = function KDBush(points, getX, getY, nodeSize, ArrayType) {\n if ( getX === void 0 ) getX = defaultGetX;\n if ( getY === void 0 ) getY = defaultGetY;\n if ( nodeSize === void 0 ) nodeSize = 64;\n if ( ArrayType === void 0 ) ArrayType = Float64Array;\n\n this.nodeSize = nodeSize;\n this.points = points;\n\n var IndexArrayType = points.length < 65536 ? Uint16Array : Uint32Array;\n\n var ids = this.ids = new IndexArrayType(points.length);\n var coords = this.coords = new ArrayType(points.length * 2);\n\n for (var i = 0; i < points.length; i++) {\n ids[i] = i;\n coords[2 * i] = getX(points[i]);\n coords[2 * i + 1] = getY(points[i]);\n }\n\n sortKD(ids, coords, nodeSize, 0, ids.length - 1, 0);\n};\n\nKDBush.prototype.range = function range$1 (minX, minY, maxX, maxY) {\n return range(this.ids, this.coords, minX, minY, maxX, maxY, this.nodeSize);\n};\n\nKDBush.prototype.within = function within$1 (x, y, r) {\n return within(this.ids, this.coords, x, y, r, this.nodeSize);\n};\n\nvar defaultOptions = {\n minZoom: 0, // min zoom to generate clusters on\n maxZoom: 16, // max zoom level to cluster the points on\n minPoints: 2, // minimum points to form a cluster\n radius: 40, // cluster radius in pixels\n extent: 512, // tile extent (radius is calculated relative to it)\n nodeSize: 64, // size of the KD-tree leaf node, affects performance\n log: false, // whether to log timing info\n\n // whether to generate numeric ids for input features (in vector tiles)\n generateId: false,\n\n // a reduce function for calculating custom cluster properties\n reduce: null, // (accumulated, props) => { accumulated.sum += props.sum; }\n\n // properties to use for individual points when running the reducer\n map: function (props) { return props; } // props => ({sum: props.my_value})\n};\n\nvar fround = Math.fround || (function (tmp) { return (function (x) { tmp[0] = +x; return tmp[0]; }); })(new Float32Array(1));\n\nvar Supercluster = function Supercluster(options) {\n this.options = extend(Object.create(defaultOptions), options);\n this.trees = new Array(this.options.maxZoom + 1);\n};\n\nSupercluster.prototype.load = function load (points) {\n var ref = this.options;\n var log = ref.log;\n var minZoom = ref.minZoom;\n var maxZoom = ref.maxZoom;\n var nodeSize = ref.nodeSize;\n\n if (log) { console.time('total time'); }\n\n var timerId = \"prepare \" + (points.length) + \" points\";\n if (log) { console.time(timerId); }\n\n this.points = points;\n\n // generate a cluster object for each point and index input points into a KD-tree\n var clusters = [];\n for (var i = 0; i < points.length; i++) {\n if (!points[i].geometry) { continue; }\n clusters.push(createPointCluster(points[i], i));\n }\n this.trees[maxZoom + 1] = new KDBush(clusters, getX, getY, nodeSize, Float32Array);\n\n if (log) { console.timeEnd(timerId); }\n\n // cluster points on max zoom, then cluster the results on previous zoom, etc.;\n // results in a cluster hierarchy across zoom levels\n for (var z = maxZoom; z >= minZoom; z--) {\n var now = +Date.now();\n\n // create a new set of clusters for the zoom and index them with a KD-tree\n clusters = this._cluster(clusters, z);\n this.trees[z] = new KDBush(clusters, getX, getY, nodeSize, Float32Array);\n\n if (log) { console.log('z%d: %d clusters in %dms', z, clusters.length, +Date.now() - now); }\n }\n\n if (log) { console.timeEnd('total time'); }\n\n return this;\n};\n\nSupercluster.prototype.getClusters = function getClusters (bbox, zoom) {\n var minLng = ((bbox[0] + 180) % 360 + 360) % 360 - 180;\n var minLat = Math.max(-90, Math.min(90, bbox[1]));\n var maxLng = bbox[2] === 180 ? 180 : ((bbox[2] + 180) % 360 + 360) % 360 - 180;\n var maxLat = Math.max(-90, Math.min(90, bbox[3]));\n\n if (bbox[2] - bbox[0] >= 360) {\n minLng = -180;\n maxLng = 180;\n } else if (minLng > maxLng) {\n var easternHem = this.getClusters([minLng, minLat, 180, maxLat], zoom);\n var westernHem = this.getClusters([-180, minLat, maxLng, maxLat], zoom);\n return easternHem.concat(westernHem);\n }\n\n var tree = this.trees[this._limitZoom(zoom)];\n var ids = tree.range(lngX(minLng), latY(maxLat), lngX(maxLng), latY(minLat));\n var clusters = [];\n for (var i = 0, list = ids; i < list.length; i += 1) {\n var id = list[i];\n\n var c = tree.points[id];\n clusters.push(c.numPoints ? getClusterJSON(c) : this.points[c.index]);\n }\n return clusters;\n};\n\nSupercluster.prototype.getChildren = function getChildren (clusterId) {\n var originId = this._getOriginId(clusterId);\n var originZoom = this._getOriginZoom(clusterId);\n var errorMsg = 'No cluster with the specified id.';\n\n var index = this.trees[originZoom];\n if (!index) { throw new Error(errorMsg); }\n\n var origin = index.points[originId];\n if (!origin) { throw new Error(errorMsg); }\n\n var r = this.options.radius / (this.options.extent * Math.pow(2, originZoom - 1));\n var ids = index.within(origin.x, origin.y, r);\n var children = [];\n for (var i = 0, list = ids; i < list.length; i += 1) {\n var id = list[i];\n\n var c = index.points[id];\n if (c.parentId === clusterId) {\n children.push(c.numPoints ? getClusterJSON(c) : this.points[c.index]);\n }\n }\n\n if (children.length === 0) { throw new Error(errorMsg); }\n\n return children;\n};\n\nSupercluster.prototype.getLeaves = function getLeaves (clusterId, limit, offset) {\n limit = limit || 10;\n offset = offset || 0;\n\n var leaves = [];\n this._appendLeaves(leaves, clusterId, limit, offset, 0);\n\n return leaves;\n};\n\nSupercluster.prototype.getTile = function getTile (z, x, y) {\n var tree = this.trees[this._limitZoom(z)];\n var z2 = Math.pow(2, z);\n var ref = this.options;\n var extent = ref.extent;\n var radius = ref.radius;\n var p = radius / extent;\n var top = (y - p) / z2;\n var bottom = (y + 1 + p) / z2;\n\n var tile = {\n features: []\n };\n\n this._addTileFeatures(\n tree.range((x - p) / z2, top, (x + 1 + p) / z2, bottom),\n tree.points, x, y, z2, tile);\n\n if (x === 0) {\n this._addTileFeatures(\n tree.range(1 - p / z2, top, 1, bottom),\n tree.points, z2, y, z2, tile);\n }\n if (x === z2 - 1) {\n this._addTileFeatures(\n tree.range(0, top, p / z2, bottom),\n tree.points, -1, y, z2, tile);\n }\n\n return tile.features.length ? tile : null;\n};\n\nSupercluster.prototype.getClusterExpansionZoom = function getClusterExpansionZoom (clusterId) {\n var expansionZoom = this._getOriginZoom(clusterId) - 1;\n while (expansionZoom <= this.options.maxZoom) {\n var children = this.getChildren(clusterId);\n expansionZoom++;\n if (children.length !== 1) { break; }\n clusterId = children[0].properties.cluster_id;\n }\n return expansionZoom;\n};\n\nSupercluster.prototype._appendLeaves = function _appendLeaves (result, clusterId, limit, offset, skipped) {\n var children = this.getChildren(clusterId);\n\n for (var i = 0, list = children; i < list.length; i += 1) {\n var child = list[i];\n\n var props = child.properties;\n\n if (props && props.cluster) {\n if (skipped + props.point_count <= offset) {\n // skip the whole cluster\n skipped += props.point_count;\n } else {\n // enter the cluster\n skipped = this._appendLeaves(result, props.cluster_id, limit, offset, skipped);\n // exit the cluster\n }\n } else if (skipped < offset) {\n // skip a single point\n skipped++;\n } else {\n // add a single point\n result.push(child);\n }\n if (result.length === limit) { break; }\n }\n\n return skipped;\n};\n\nSupercluster.prototype._addTileFeatures = function _addTileFeatures (ids, points, x, y, z2, tile) {\n for (var i$1 = 0, list = ids; i$1 < list.length; i$1 += 1) {\n var i = list[i$1];\n\n var c = points[i];\n var isCluster = c.numPoints;\n\n var tags = (void 0), px = (void 0), py = (void 0);\n if (isCluster) {\n tags = getClusterProperties(c);\n px = c.x;\n py = c.y;\n } else {\n var p = this.points[c.index];\n tags = p.properties;\n px = lngX(p.geometry.coordinates[0]);\n py = latY(p.geometry.coordinates[1]);\n }\n\n var f = {\n type: 1,\n geometry: [[\n Math.round(this.options.extent * (px * z2 - x)),\n Math.round(this.options.extent * (py * z2 - y))\n ]],\n tags: tags\n };\n\n // assign id\n var id = (void 0);\n if (isCluster) {\n id = c.id;\n } else if (this.options.generateId) {\n // optionally generate id\n id = c.index;\n } else if (this.points[c.index].id) {\n // keep id if already assigned\n id = this.points[c.index].id;\n }\n\n if (id !== undefined) { f.id = id; }\n\n tile.features.push(f);\n }\n};\n\nSupercluster.prototype._limitZoom = function _limitZoom (z) {\n return Math.max(this.options.minZoom, Math.min(Math.floor(+z), this.options.maxZoom + 1));\n};\n\nSupercluster.prototype._cluster = function _cluster (points, zoom) {\n var clusters = [];\n var ref = this.options;\n var radius = ref.radius;\n var extent = ref.extent;\n var reduce = ref.reduce;\n var minPoints = ref.minPoints;\n var r = radius / (extent * Math.pow(2, zoom));\n\n // loop through each point\n for (var i = 0; i < points.length; i++) {\n var p = points[i];\n // if we've already visited the point at this zoom level, skip it\n if (p.zoom <= zoom) { continue; }\n p.zoom = zoom;\n\n // find all nearby points\n var tree = this.trees[zoom + 1];\n var neighborIds = tree.within(p.x, p.y, r);\n\n var numPointsOrigin = p.numPoints || 1;\n var numPoints = numPointsOrigin;\n\n // count the number of points in a potential cluster\n for (var i$1 = 0, list = neighborIds; i$1 < list.length; i$1 += 1) {\n var neighborId = list[i$1];\n\n var b = tree.points[neighborId];\n // filter out neighbors that are already processed\n if (b.zoom > zoom) { numPoints += b.numPoints || 1; }\n }\n\n // if there were neighbors to merge, and there are enough points to form a cluster\n if (numPoints > numPointsOrigin && numPoints >= minPoints) {\n var wx = p.x * numPointsOrigin;\n var wy = p.y * numPointsOrigin;\n\n var clusterProperties = reduce && numPointsOrigin > 1 ? this._map(p, true) : null;\n\n // encode both zoom and point index on which the cluster originated -- offset by total length of features\n var id = (i << 5) + (zoom + 1) + this.points.length;\n\n for (var i$2 = 0, list$1 = neighborIds; i$2 < list$1.length; i$2 += 1) {\n var neighborId$1 = list$1[i$2];\n\n var b$1 = tree.points[neighborId$1];\n\n if (b$1.zoom <= zoom) { continue; }\n b$1.zoom = zoom; // save the zoom (so it doesn't get processed twice)\n\n var numPoints2 = b$1.numPoints || 1;\n wx += b$1.x * numPoints2; // accumulate coordinates for calculating weighted center\n wy += b$1.y * numPoints2;\n\n b$1.parentId = id;\n\n if (reduce) {\n if (!clusterProperties) { clusterProperties = this._map(p, true); }\n reduce(clusterProperties, this._map(b$1));\n }\n }\n\n p.parentId = id;\n clusters.push(createCluster(wx / numPoints, wy / numPoints, id, numPoints, clusterProperties));\n\n } else { // left points as unclustered\n clusters.push(p);\n\n if (numPoints > 1) {\n for (var i$3 = 0, list$2 = neighborIds; i$3 < list$2.length; i$3 += 1) {\n var neighborId$2 = list$2[i$3];\n\n var b$2 = tree.points[neighborId$2];\n if (b$2.zoom <= zoom) { continue; }\n b$2.zoom = zoom;\n clusters.push(b$2);\n }\n }\n }\n }\n\n return clusters;\n};\n\n// get index of the point from which the cluster originated\nSupercluster.prototype._getOriginId = function _getOriginId (clusterId) {\n return (clusterId - this.points.length) >> 5;\n};\n\n// get zoom of the point from which the cluster originated\nSupercluster.prototype._getOriginZoom = function _getOriginZoom (clusterId) {\n return (clusterId - this.points.length) % 32;\n};\n\nSupercluster.prototype._map = function _map (point, clone) {\n if (point.numPoints) {\n return clone ? extend({}, point.properties) : point.properties;\n }\n var original = this.points[point.index].properties;\n var result = this.options.map(original);\n return clone && result === original ? extend({}, result) : result;\n};\n\nfunction createCluster(x, y, id, numPoints, properties) {\n return {\n x: fround(x), // weighted cluster center; round for consistency with Float32Array index\n y: fround(y),\n zoom: Infinity, // the last zoom the cluster was processed at\n id: id, // encodes index of the first child of the cluster and its zoom level\n parentId: -1, // parent cluster id\n numPoints: numPoints,\n properties: properties\n };\n}\n\nfunction createPointCluster(p, id) {\n var ref = p.geometry.coordinates;\n var x = ref[0];\n var y = ref[1];\n return {\n x: fround(lngX(x)), // projected point coordinates\n y: fround(latY(y)),\n zoom: Infinity, // the last zoom the point was processed at\n index: id, // index of the source feature in the original input array,\n parentId: -1 // parent cluster id\n };\n}\n\nfunction getClusterJSON(cluster) {\n return {\n type: 'Feature',\n id: cluster.id,\n properties: getClusterProperties(cluster),\n geometry: {\n type: 'Point',\n coordinates: [xLng(cluster.x), yLat(cluster.y)]\n }\n };\n}\n\nfunction getClusterProperties(cluster) {\n var count = cluster.numPoints;\n var abbrev =\n count >= 10000 ? ((Math.round(count / 1000)) + \"k\") :\n count >= 1000 ? ((Math.round(count / 100) / 10) + \"k\") : count;\n return extend(extend({}, cluster.properties), {\n cluster: true,\n cluster_id: cluster.id,\n point_count: count,\n point_count_abbreviated: abbrev\n });\n}\n\n// longitude/latitude to spherical mercator in [0..1] range\nfunction lngX(lng) {\n return lng / 360 + 0.5;\n}\nfunction latY(lat) {\n var sin = Math.sin(lat * Math.PI / 180);\n var y = (0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI);\n return y < 0 ? 0 : y > 1 ? 1 : y;\n}\n\n// spherical mercator to longitude/latitude\nfunction xLng(x) {\n return (x - 0.5) * 360;\n}\nfunction yLat(y) {\n var y2 = (180 - y * 360) * Math.PI / 180;\n return 360 * Math.atan(Math.exp(y2)) / Math.PI - 90;\n}\n\nfunction extend(dest, src) {\n for (var id in src) { dest[id] = src[id]; }\n return dest;\n}\n\nfunction getX(p) {\n return p.x;\n}\nfunction getY(p) {\n return p.y;\n}\n\nreturn Supercluster;\n\n}));\n","\"use strict\";\n\nmodule.exports = function(options) {\n var getState = options.stateHandler.getState;\n\n /**\n * Tells if the element has been made detectable and ready to be listened for resize events.\n * @public\n * @param {element} The element to check.\n * @returns {boolean} True or false depending on if the element is detectable or not.\n */\n function isDetectable(element) {\n var state = getState(element);\n return state && !!state.isDetectable;\n }\n\n /**\n * Marks the element that it has been made detectable and ready to be listened for resize events.\n * @public\n * @param {element} The element to mark.\n */\n function markAsDetectable(element) {\n getState(element).isDetectable = true;\n }\n\n /**\n * Tells if the element is busy or not.\n * @public\n * @param {element} The element to check.\n * @returns {boolean} True or false depending on if the element is busy or not.\n */\n function isBusy(element) {\n return !!getState(element).busy;\n }\n\n /**\n * Marks the object is busy and should not be made detectable.\n * @public\n * @param {element} element The element to mark.\n * @param {boolean} busy If the element is busy or not.\n */\n function markBusy(element, busy) {\n getState(element).busy = !!busy;\n }\n\n return {\n isDetectable: isDetectable,\n markAsDetectable: markAsDetectable,\n isBusy: isBusy,\n markBusy: markBusy\n };\n};\n","'use strict';\n\nmodule.exports = Point;\n\n/**\n * A standalone point geometry with useful accessor, comparison, and\n * modification methods.\n *\n * @class Point\n * @param {Number} x the x-coordinate. this could be longitude or screen\n * pixels, or any other sort of unit.\n * @param {Number} y the y-coordinate. this could be latitude or screen\n * pixels, or any other sort of unit.\n * @example\n * var point = new Point(-77, 38);\n */\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n}\n\nPoint.prototype = {\n\n /**\n * Clone this point, returning a new point that can be modified\n * without affecting the old one.\n * @return {Point} the clone\n */\n clone: function() { return new Point(this.x, this.y); },\n\n /**\n * Add this point's x & y coordinates to another point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n add: function(p) { return this.clone()._add(p); },\n\n /**\n * Subtract this point's x & y coordinates to from point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n sub: function(p) { return this.clone()._sub(p); },\n\n /**\n * Multiply this point's x & y coordinates by point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n multByPoint: function(p) { return this.clone()._multByPoint(p); },\n\n /**\n * Divide this point's x & y coordinates by point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n divByPoint: function(p) { return this.clone()._divByPoint(p); },\n\n /**\n * Multiply this point's x & y coordinates by a factor,\n * yielding a new point.\n * @param {Point} k factor\n * @return {Point} output point\n */\n mult: function(k) { return this.clone()._mult(k); },\n\n /**\n * Divide this point's x & y coordinates by a factor,\n * yielding a new point.\n * @param {Point} k factor\n * @return {Point} output point\n */\n div: function(k) { return this.clone()._div(k); },\n\n /**\n * Rotate this point around the 0, 0 origin by an angle a,\n * given in radians\n * @param {Number} a angle to rotate around, in radians\n * @return {Point} output point\n */\n rotate: function(a) { return this.clone()._rotate(a); },\n\n /**\n * Rotate this point around p point by an angle a,\n * given in radians\n * @param {Number} a angle to rotate around, in radians\n * @param {Point} p Point to rotate around\n * @return {Point} output point\n */\n rotateAround: function(a,p) { return this.clone()._rotateAround(a,p); },\n\n /**\n * Multiply this point by a 4x1 transformation matrix\n * @param {Array} m transformation matrix\n * @return {Point} output point\n */\n matMult: function(m) { return this.clone()._matMult(m); },\n\n /**\n * Calculate this point but as a unit vector from 0, 0, meaning\n * that the distance from the resulting point to the 0, 0\n * coordinate will be equal to 1 and the angle from the resulting\n * point to the 0, 0 coordinate will be the same as before.\n * @return {Point} unit vector point\n */\n unit: function() { return this.clone()._unit(); },\n\n /**\n * Compute a perpendicular point, where the new y coordinate\n * is the old x coordinate and the new x coordinate is the old y\n * coordinate multiplied by -1\n * @return {Point} perpendicular point\n */\n perp: function() { return this.clone()._perp(); },\n\n /**\n * Return a version of this point with the x & y coordinates\n * rounded to integers.\n * @return {Point} rounded point\n */\n round: function() { return this.clone()._round(); },\n\n /**\n * Return the magitude of this point: this is the Euclidean\n * distance from the 0, 0 coordinate to this point's x and y\n * coordinates.\n * @return {Number} magnitude\n */\n mag: function() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n },\n\n /**\n * Judge whether this point is equal to another point, returning\n * true or false.\n * @param {Point} other the other point\n * @return {boolean} whether the points are equal\n */\n equals: function(other) {\n return this.x === other.x &&\n this.y === other.y;\n },\n\n /**\n * Calculate the distance from this point to another point\n * @param {Point} p the other point\n * @return {Number} distance\n */\n dist: function(p) {\n return Math.sqrt(this.distSqr(p));\n },\n\n /**\n * Calculate the distance from this point to another point,\n * without the square root step. Useful if you're comparing\n * relative distances.\n * @param {Point} p the other point\n * @return {Number} distance\n */\n distSqr: function(p) {\n var dx = p.x - this.x,\n dy = p.y - this.y;\n return dx * dx + dy * dy;\n },\n\n /**\n * Get the angle from the 0, 0 coordinate to this point, in radians\n * coordinates.\n * @return {Number} angle\n */\n angle: function() {\n return Math.atan2(this.y, this.x);\n },\n\n /**\n * Get the angle from this point to another point, in radians\n * @param {Point} b the other point\n * @return {Number} angle\n */\n angleTo: function(b) {\n return Math.atan2(this.y - b.y, this.x - b.x);\n },\n\n /**\n * Get the angle between this point and another point, in radians\n * @param {Point} b the other point\n * @return {Number} angle\n */\n angleWith: function(b) {\n return this.angleWithSep(b.x, b.y);\n },\n\n /*\n * Find the angle of the two vectors, solving the formula for\n * the cross product a x b = |a||b|sin(θ) for θ.\n * @param {Number} x the x-coordinate\n * @param {Number} y the y-coordinate\n * @return {Number} the angle in radians\n */\n angleWithSep: function(x, y) {\n return Math.atan2(\n this.x * y - this.y * x,\n this.x * x + this.y * y);\n },\n\n _matMult: function(m) {\n var x = m[0] * this.x + m[1] * this.y,\n y = m[2] * this.x + m[3] * this.y;\n this.x = x;\n this.y = y;\n return this;\n },\n\n _add: function(p) {\n this.x += p.x;\n this.y += p.y;\n return this;\n },\n\n _sub: function(p) {\n this.x -= p.x;\n this.y -= p.y;\n return this;\n },\n\n _mult: function(k) {\n this.x *= k;\n this.y *= k;\n return this;\n },\n\n _div: function(k) {\n this.x /= k;\n this.y /= k;\n return this;\n },\n\n _multByPoint: function(p) {\n this.x *= p.x;\n this.y *= p.y;\n return this;\n },\n\n _divByPoint: function(p) {\n this.x /= p.x;\n this.y /= p.y;\n return this;\n },\n\n _unit: function() {\n this._div(this.mag());\n return this;\n },\n\n _perp: function() {\n var y = this.y;\n this.y = this.x;\n this.x = -y;\n return this;\n },\n\n _rotate: function(angle) {\n var cos = Math.cos(angle),\n sin = Math.sin(angle),\n x = cos * this.x - sin * this.y,\n y = sin * this.x + cos * this.y;\n this.x = x;\n this.y = y;\n return this;\n },\n\n _rotateAround: function(angle, p) {\n var cos = Math.cos(angle),\n sin = Math.sin(angle),\n x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y),\n y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);\n this.x = x;\n this.y = y;\n return this;\n },\n\n _round: function() {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n return this;\n }\n};\n\n/**\n * Construct a point from an array if necessary, otherwise if the input\n * is already a Point, or an unknown type, return it unchanged\n * @param {Array|Point|*} a any kind of input value\n * @return {Point} constructed point, or passed-through value.\n * @example\n * // this\n * var point = Point.convert([0, 1]);\n * // is equivalent to\n * var point = new Point(0, 1);\n */\nPoint.convert = function (a) {\n if (a instanceof Point) {\n return a;\n }\n if (Array.isArray(a)) {\n return new Point(a[0], a[1]);\n }\n return a;\n};\n","import _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\n/**\n * 检查值是否存在 为了 避开 0 和 false\n *\n * @param value\n */\nexport var checkUndefinedOrNull = function checkUndefinedOrNull(value) {\n return value !== undefined && value !== null;\n};\n\n/**\n * 合并用户 props 和 预设的 props\n *\n * @param pagination\n * @param action\n * @param intl\n */\nexport function mergePagination(pagination, pageInfo, intl) {\n var _pagination$current, _pagination$pageSize;\n if (pagination === false) {\n return false;\n }\n var total = pageInfo.total,\n current = pageInfo.current,\n pageSize = pageInfo.pageSize,\n setPageInfo = pageInfo.setPageInfo;\n var defaultPagination = _typeof(pagination) === 'object' ? pagination : {};\n return _objectSpread(_objectSpread({\n showTotal: function showTotal(all, range) {\n return \"\".concat(intl.getMessage('pagination.total.range', '第'), \" \").concat(range[0], \"-\").concat(range[1], \" \").concat(intl.getMessage('pagination.total.total', '条/总共'), \" \").concat(all, \" \").concat(intl.getMessage('pagination.total.item', '条'));\n },\n total: total\n }, defaultPagination), {}, {\n current: pagination !== true && pagination ? (_pagination$current = pagination.current) !== null && _pagination$current !== void 0 ? _pagination$current : current : current,\n pageSize: pagination !== true && pagination ? (_pagination$pageSize = pagination.pageSize) !== null && _pagination$pageSize !== void 0 ? _pagination$pageSize : pageSize : pageSize,\n onChange: function onChange(page, newPageSize) {\n var _ref = pagination,\n onChange = _ref.onChange;\n onChange === null || onChange === void 0 || onChange(page, newPageSize || 20);\n // pageSize 改变之后就没必要切换页码\n if (newPageSize !== pageSize || current !== page) {\n setPageInfo({\n pageSize: newPageSize,\n current: page\n });\n }\n }\n });\n}\n\n/**\n * 获取用户的 action 信息\n *\n * @param actionRef\n * @param counter\n * @param onCleanSelected\n */\nexport function useActionType(ref, action, props) {\n /** 这里生成action的映射,保证 action 总是使用的最新 只需要渲染一次即可 */\n var userAction = _objectSpread(_objectSpread({}, props.editableUtils), {}, {\n pageInfo: action.pageInfo,\n reload: function () {\n var _reload = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(resetPageIndex) {\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!resetPageIndex) {\n _context.next = 3;\n break;\n }\n _context.next = 3;\n return action.setPageInfo({\n current: 1\n });\n case 3:\n _context.next = 5;\n return action === null || action === void 0 ? void 0 : action.reload();\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n function reload(_x) {\n return _reload.apply(this, arguments);\n }\n return reload;\n }(),\n reloadAndRest: function () {\n var _reloadAndRest = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n // reload 之后大概率会切换数据,清空一下选择。\n props.onCleanSelected();\n _context2.next = 3;\n return action.setPageInfo({\n current: 1\n });\n case 3:\n _context2.next = 5;\n return action === null || action === void 0 ? void 0 : action.reload();\n case 5:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n function reloadAndRest() {\n return _reloadAndRest.apply(this, arguments);\n }\n return reloadAndRest;\n }(),\n reset: function () {\n var _reset = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n var _action$reset;\n return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return props.resetAll();\n case 2:\n _context3.next = 4;\n return action === null || action === void 0 || (_action$reset = action.reset) === null || _action$reset === void 0 ? void 0 : _action$reset.call(action);\n case 4:\n _context3.next = 6;\n return action === null || action === void 0 ? void 0 : action.reload();\n case 6:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }));\n function reset() {\n return _reset.apply(this, arguments);\n }\n return reset;\n }(),\n fullScreen: function fullScreen() {\n return props.fullScreen();\n },\n clearSelected: function clearSelected() {\n return props.onCleanSelected();\n },\n setPageInfo: function setPageInfo(rest) {\n return action.setPageInfo(rest);\n }\n });\n // eslint-disable-next-line no-param-reassign\n ref.current = userAction;\n}\n/**\n * 一个转化的 pipeline 列表\n *\n * @param data\n * @param pipeline\n */\nexport function postDataPipeline(data, pipeline) {\n if (pipeline.filter(function (item) {\n return item;\n }).length < 1) {\n return data;\n }\n return pipeline.reduce(function (pre, postData) {\n return postData(pre);\n }, data);\n}\nexport var isBordered = function isBordered(borderType, border) {\n if (border === undefined) {\n return false;\n }\n if (typeof border === 'boolean') {\n return border;\n }\n return border[borderType];\n};\nexport var isMergeCell = function isMergeCell(dom // 如果是合并单元格的,直接返回对象\n) {\n var _dom$props;\n return dom && _typeof(dom) === 'object' && (dom === null || dom === void 0 || (_dom$props = dom.props) === null || _dom$props === void 0 ? void 0 : _dom$props.colSpan);\n};\n\n/**\n * 根据 key 和 dataIndex 生成唯一 id\n *\n * @param key 用户设置的 key\n * @param dataIndex 在对象中的数据\n * @param index 序列号,理论上唯一\n */\nexport var genColumnKey = function genColumnKey(key, index) {\n if (key) {\n return Array.isArray(key) ? key.join('-') : key.toString();\n }\n return \"\".concat(index);\n};\n\n/**\n * 将 ProTable - column - dataIndex 转为字符串形式\n *\n * @param dataIndex Column 中的 dataIndex\n */\nfunction parseDataIndex(dataIndex) {\n if (Array.isArray(dataIndex)) {\n return dataIndex.join(',');\n }\n return dataIndex === null || dataIndex === void 0 ? void 0 : dataIndex.toString();\n}\n\n/**\n * 从 ProColumns 数组中取出默认的排序和筛选数据\n *\n * @param columns ProColumns\n */\nexport function parseDefaultColumnConfig(columns) {\n var filter = {};\n var sort = {};\n columns.forEach(function (column) {\n // 转换 dataIndex\n var dataIndex = parseDataIndex(column.dataIndex);\n if (!dataIndex) {\n return;\n }\n // 当 column 启用 filters 功能时,取出默认的筛选值\n if (column.filters) {\n var defaultFilteredValue = column.defaultFilteredValue;\n if (defaultFilteredValue === undefined) {\n filter[dataIndex] = null;\n } else {\n filter[dataIndex] = column.defaultFilteredValue;\n }\n }\n // 当 column 启用 sorter 功能时,取出默认的排序值\n if (column.sorter && column.defaultSortOrder) {\n sort[dataIndex] = column.defaultSortOrder;\n }\n });\n return {\n sort: sort,\n filter: filter\n };\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.mergeClasses = undefined;\n\nvar _forOwn2 = require('lodash/forOwn');\n\nvar _forOwn3 = _interopRequireDefault(_forOwn2);\n\nvar _cloneDeep2 = require('lodash/cloneDeep');\n\nvar _cloneDeep3 = _interopRequireDefault(_cloneDeep2);\n\nvar _extends = Object.assign || 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; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mergeClasses = exports.mergeClasses = function mergeClasses(classes) {\n var activeNames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n var styles = classes.default && (0, _cloneDeep3.default)(classes.default) || {};\n activeNames.map(function (name) {\n var toMerge = classes[name];\n if (toMerge) {\n (0, _forOwn3.default)(toMerge, function (value, key) {\n if (!styles[key]) {\n styles[key] = {};\n }\n\n styles[key] = _extends({}, styles[key], toMerge[key]);\n });\n }\n\n return name;\n });\n return styles;\n};\n\nexports.default = mergeClasses;","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\"];\n/* eslint-disable no-lonely-if */\n/**\n * Legacy code. Should avoid to use if you are new to import these code.\n */\n\nimport warning from \"rc-util/es/warning\";\nimport React from 'react';\nimport TreeNode from \"./TreeNode\";\nimport getEntity from \"./utils/keyUtil\";\nexport { getPosition, isTreeNode } from \"./utils/treeUtil\";\nexport function arrDel(list, value) {\n if (!list) return [];\n var clone = list.slice();\n var index = clone.indexOf(value);\n if (index >= 0) {\n clone.splice(index, 1);\n }\n return clone;\n}\nexport function arrAdd(list, value) {\n var clone = (list || []).slice();\n if (clone.indexOf(value) === -1) {\n clone.push(value);\n }\n return clone;\n}\nexport function posToArr(pos) {\n return pos.split('-');\n}\nexport function getDragChildrenKeys(dragNodeKey, keyEntities) {\n // not contains self\n // self for left or right drag\n var dragChildrenKeys = [];\n var entity = getEntity(keyEntities, dragNodeKey);\n function dig() {\n var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n list.forEach(function (_ref) {\n var key = _ref.key,\n children = _ref.children;\n dragChildrenKeys.push(key);\n dig(children);\n });\n }\n dig(entity.children);\n return dragChildrenKeys;\n}\nexport function isLastChild(treeNodeEntity) {\n if (treeNodeEntity.parent) {\n var posArr = posToArr(treeNodeEntity.pos);\n return Number(posArr[posArr.length - 1]) === treeNodeEntity.parent.children.length - 1;\n }\n return false;\n}\nexport function isFirstChild(treeNodeEntity) {\n var posArr = posToArr(treeNodeEntity.pos);\n return Number(posArr[posArr.length - 1]) === 0;\n}\n\n// Only used when drag, not affect SSR.\nexport function calcDropPosition(event, dragNodeProps, targetNodeProps, indent, startMousePosition, allowDrop, flattenedNodes, keyEntities, expandKeys, direction) {\n var _abstractDropNodeEnti;\n var clientX = event.clientX,\n clientY = event.clientY;\n var _getBoundingClientRec = event.target.getBoundingClientRect(),\n top = _getBoundingClientRec.top,\n height = _getBoundingClientRec.height;\n // optional chain for testing\n var horizontalMouseOffset = (direction === 'rtl' ? -1 : 1) * (((startMousePosition === null || startMousePosition === void 0 ? void 0 : startMousePosition.x) || 0) - clientX);\n var rawDropLevelOffset = (horizontalMouseOffset - 12) / indent;\n\n // Filter the expanded keys to exclude the node that not has children currently (like async nodes).\n var filteredExpandKeys = expandKeys.filter(function (key) {\n var _keyEntities$key;\n return (_keyEntities$key = keyEntities[key]) === null || _keyEntities$key === void 0 || (_keyEntities$key = _keyEntities$key.children) === null || _keyEntities$key === void 0 ? void 0 : _keyEntities$key.length;\n });\n\n // find abstract drop node by horizontal offset\n var abstractDropNodeEntity = getEntity(keyEntities, targetNodeProps.eventKey);\n if (clientY < top + height / 2) {\n // first half, set abstract drop node to previous node\n var nodeIndex = flattenedNodes.findIndex(function (flattenedNode) {\n return flattenedNode.key === abstractDropNodeEntity.key;\n });\n var prevNodeIndex = nodeIndex <= 0 ? 0 : nodeIndex - 1;\n var prevNodeKey = flattenedNodes[prevNodeIndex].key;\n abstractDropNodeEntity = getEntity(keyEntities, prevNodeKey);\n }\n var initialAbstractDropNodeKey = abstractDropNodeEntity.key;\n var abstractDragOverEntity = abstractDropNodeEntity;\n var dragOverNodeKey = abstractDropNodeEntity.key;\n var dropPosition = 0;\n var dropLevelOffset = 0;\n\n // Only allow cross level drop when dragging on a non-expanded node\n if (!filteredExpandKeys.includes(initialAbstractDropNodeKey)) {\n for (var i = 0; i < rawDropLevelOffset; i += 1) {\n if (isLastChild(abstractDropNodeEntity)) {\n abstractDropNodeEntity = abstractDropNodeEntity.parent;\n dropLevelOffset += 1;\n } else {\n break;\n }\n }\n }\n var abstractDragDataNode = dragNodeProps.data;\n var abstractDropDataNode = abstractDropNodeEntity.node;\n var dropAllowed = true;\n if (isFirstChild(abstractDropNodeEntity) && abstractDropNodeEntity.level === 0 && clientY < top + height / 2 && allowDrop({\n dragNode: abstractDragDataNode,\n dropNode: abstractDropDataNode,\n dropPosition: -1\n }) && abstractDropNodeEntity.key === targetNodeProps.eventKey) {\n // first half of first node in first level\n dropPosition = -1;\n } else if ((abstractDragOverEntity.children || []).length && filteredExpandKeys.includes(dragOverNodeKey)) {\n // drop on expanded node\n // only allow drop inside\n if (allowDrop({\n dragNode: abstractDragDataNode,\n dropNode: abstractDropDataNode,\n dropPosition: 0\n })) {\n dropPosition = 0;\n } else {\n dropAllowed = false;\n }\n } else if (dropLevelOffset === 0) {\n if (rawDropLevelOffset > -1.5) {\n // | Node | <- abstractDropNode\n // | -^-===== | <- mousePosition\n // 1. try drop after\n // 2. do not allow drop\n if (allowDrop({\n dragNode: abstractDragDataNode,\n dropNode: abstractDropDataNode,\n dropPosition: 1\n })) {\n dropPosition = 1;\n } else {\n dropAllowed = false;\n }\n } else {\n // | Node | <- abstractDropNode\n // | ---==^== | <- mousePosition\n // whether it has children or doesn't has children\n // always\n // 1. try drop inside\n // 2. try drop after\n // 3. do not allow drop\n if (allowDrop({\n dragNode: abstractDragDataNode,\n dropNode: abstractDropDataNode,\n dropPosition: 0\n })) {\n dropPosition = 0;\n } else if (allowDrop({\n dragNode: abstractDragDataNode,\n dropNode: abstractDropDataNode,\n dropPosition: 1\n })) {\n dropPosition = 1;\n } else {\n dropAllowed = false;\n }\n }\n } else {\n // | Node1 | <- abstractDropNode\n // | Node2 |\n // --^--|----=====| <- mousePosition\n // 1. try insert after Node1\n // 2. do not allow drop\n if (allowDrop({\n dragNode: abstractDragDataNode,\n dropNode: abstractDropDataNode,\n dropPosition: 1\n })) {\n dropPosition = 1;\n } else {\n dropAllowed = false;\n }\n }\n return {\n dropPosition: dropPosition,\n dropLevelOffset: dropLevelOffset,\n dropTargetKey: abstractDropNodeEntity.key,\n dropTargetPos: abstractDropNodeEntity.pos,\n dragOverNodeKey: dragOverNodeKey,\n dropContainerKey: dropPosition === 0 ? null : ((_abstractDropNodeEnti = abstractDropNodeEntity.parent) === null || _abstractDropNodeEnti === void 0 ? void 0 : _abstractDropNodeEnti.key) || null,\n dropAllowed: dropAllowed\n };\n}\n\n/**\n * Return selectedKeys according with multiple prop\n * @param selectedKeys\n * @param props\n * @returns [string]\n */\nexport function calcSelectedKeys(selectedKeys, props) {\n if (!selectedKeys) return undefined;\n var multiple = props.multiple;\n if (multiple) {\n return selectedKeys.slice();\n }\n if (selectedKeys.length) {\n return [selectedKeys[0]];\n }\n return selectedKeys;\n}\nvar internalProcessProps = function internalProcessProps(props) {\n return props;\n};\nexport function convertDataToTree(treeData, processor) {\n if (!treeData) return [];\n var _ref2 = processor || {},\n _ref2$processProps = _ref2.processProps,\n processProps = _ref2$processProps === void 0 ? internalProcessProps : _ref2$processProps;\n var list = Array.isArray(treeData) ? treeData : [treeData];\n return list.map(function (_ref3) {\n var children = _ref3.children,\n props = _objectWithoutProperties(_ref3, _excluded);\n var childrenNodes = convertDataToTree(children, processor);\n return /*#__PURE__*/React.createElement(TreeNode, _extends({\n key: props.key\n }, processProps(props)), childrenNodes);\n });\n}\n\n/**\n * Parse `checkedKeys` to { checkedKeys, halfCheckedKeys } style\n */\nexport function parseCheckedKeys(keys) {\n if (!keys) {\n return null;\n }\n\n // Convert keys to object format\n var keyProps;\n if (Array.isArray(keys)) {\n // [Legacy] Follow the api doc\n keyProps = {\n checkedKeys: keys,\n halfCheckedKeys: undefined\n };\n } else if (_typeof(keys) === 'object') {\n keyProps = {\n checkedKeys: keys.checked || undefined,\n halfCheckedKeys: keys.halfChecked || undefined\n };\n } else {\n warning(false, '`checkedKeys` is not an array or an object');\n return null;\n }\n return keyProps;\n}\n\n/**\n * If user use `autoExpandParent` we should get the list of parent node\n * @param keyList\n * @param keyEntities\n */\nexport function conductExpandParent(keyList, keyEntities) {\n var expandedKeys = new Set();\n function conductUp(key) {\n if (expandedKeys.has(key)) return;\n var entity = getEntity(keyEntities, key);\n if (!entity) return;\n expandedKeys.add(key);\n var parent = entity.parent,\n node = entity.node;\n if (node.disabled) return;\n if (parent) {\n conductUp(parent.key);\n }\n }\n (keyList || []).forEach(function (key) {\n conductUp(key);\n });\n return _toConsumableArray(expandedKeys);\n}","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\", \"Wrapper\"],\n _excluded2 = [\"children\", \"Wrapper\"];\nimport { Col, Row } from 'antd';\nimport { createContext, useContext, useMemo } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var GridContext = /*#__PURE__*/createContext({\n grid: false,\n colProps: undefined,\n rowProps: undefined\n});\nexport var gridHelpers = function gridHelpers(_ref) {\n var grid = _ref.grid,\n rowProps = _ref.rowProps,\n colProps = _ref.colProps;\n return {\n grid: !!grid,\n RowWrapper: function RowWrapper() {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n children = _ref2.children,\n Wrapper = _ref2.Wrapper,\n props = _objectWithoutProperties(_ref2, _excluded);\n if (!grid) {\n return Wrapper ? /*#__PURE__*/_jsx(Wrapper, {\n children: children\n }) : children;\n }\n return /*#__PURE__*/_jsx(Row, _objectSpread(_objectSpread(_objectSpread({\n gutter: 8\n }, rowProps), props), {}, {\n children: children\n }));\n },\n ColWrapper: function ColWrapper() {\n var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n children = _ref3.children,\n Wrapper = _ref3.Wrapper,\n rest = _objectWithoutProperties(_ref3, _excluded2);\n var props = useMemo(function () {\n var originProps = _objectSpread(_objectSpread({}, colProps), rest);\n\n /**\n * `xs` takes precedence over `span`\n * avoid `span` doesn't work\n */\n if (typeof originProps.span === 'undefined' && typeof originProps.xs === 'undefined') {\n originProps.xs = 24;\n }\n return originProps;\n }, [rest]);\n if (!grid) {\n return Wrapper ? /*#__PURE__*/_jsx(Wrapper, {\n children: children\n }) : children;\n }\n return /*#__PURE__*/_jsx(Col, _objectSpread(_objectSpread({}, props), {}, {\n children: children\n }));\n }\n };\n};\nexport var useGridHelpers = function useGridHelpers(props) {\n var config = useMemo(function () {\n {\n if (_typeof(props) === 'object') {\n return props;\n }\n return {\n grid: props\n };\n }\n }, [props]);\n var _useContext = useContext(GridContext),\n grid = _useContext.grid,\n colProps = _useContext.colProps;\n return useMemo(function () {\n return gridHelpers({\n grid: !!(grid || config.grid),\n rowProps: config === null || config === void 0 ? void 0 : config.rowProps,\n colProps: (config === null || config === void 0 ? void 0 : config.colProps) || colProps,\n Wrapper: config === null || config === void 0 ? void 0 : config.Wrapper\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [config === null || config === void 0 ? void 0 : config.Wrapper, config.grid, grid,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify([colProps, config === null || config === void 0 ? void 0 : config.colProps, config === null || config === void 0 ? void 0 : config.rowProps])]);\n};","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import { convertAngles } from '../utils/angle';\nexport const getPolarOptions = (options = {}) => {\n const defaultOptions = {\n startAngle: -Math.PI / 2,\n endAngle: (Math.PI * 3) / 2,\n innerRadius: 0,\n outerRadius: 1,\n };\n const polarOption = Object.assign(Object.assign({}, defaultOptions), options);\n return Object.assign(Object.assign({}, polarOption), convertAngles(polarOption.startAngle, polarOption.endAngle));\n};\n/**\n * Polar transformation for circular charts using center of canvas as origin.\n * @todo Adjust size of canvas by startAngle and endAngle to make chart as big as possible.\n */\nexport const Polar = (options) => {\n const { startAngle, endAngle, innerRadius, outerRadius } = getPolarOptions(options);\n return [\n ['translate', 0, 0.5],\n ['reflect.y'],\n ['translate', 0, -0.5],\n ['polar', startAngle, endAngle, innerRadius, outerRadius],\n ];\n};\nPolar.props = {};\n//# sourceMappingURL=polar.js.map","export function toRadian(degree) {\n return (degree * Math.PI) / 180;\n}\nexport function toDegree(radian) {\n return (radian * 180) / Math.PI;\n}\n// convert the angle to the range of 0 to 4*Math.PI\nexport function convertAngles(startAngle, endAngle) {\n startAngle = startAngle % (2 * Math.PI);\n endAngle = endAngle % (2 * Math.PI);\n if (startAngle < 0) {\n startAngle = 2 * Math.PI + startAngle;\n }\n if (endAngle < 0) {\n endAngle = 2 * Math.PI + endAngle;\n }\n if (startAngle >= endAngle) {\n endAngle = endAngle + 2 * Math.PI;\n }\n return {\n startAngle,\n endAngle,\n };\n}\n//# sourceMappingURL=angle.js.map","import { __assign, __extends, __rest } from \"tslib\";\nimport { isFunction } from '@antv/util';\nimport { Component } from '../../core';\nimport { ifShow, select } from '../../util';\nimport { bowtie, circle, cross, dash, diamond, dot, hexagon, hv, hvh, hyphen, line, plus, point, smooth, square, tick, triangle, triangleDown, vh, vhv, } from './symbol';\nimport { parseMarker } from './utils';\nfunction getType(symbol) {\n var markerType = parseMarker(symbol);\n if (['base64', 'url', 'image'].includes(markerType)) {\n return 'image';\n }\n if (symbol && markerType === 'symbol') {\n return 'path';\n }\n return null;\n}\nvar Marker = /** @class */ (function (_super) {\n __extends(Marker, _super);\n function Marker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Marker.prototype.render = function (attributes, container) {\n var _a = attributes.x, x = _a === void 0 ? 0 : _a, _b = attributes.y, y = _b === void 0 ? 0 : _b;\n var _c = this.getSubShapeStyle(attributes), symbol = _c.symbol, _d = _c.size, size = _d === void 0 ? 16 : _d, style = __rest(_c, [\"symbol\", \"size\"]);\n var type = getType(symbol);\n ifShow(!!type, select(container), function (group) {\n group\n .maybeAppendByClassName(\"marker\", type)\n .attr('className', \"marker \".concat(type, \"-marker\"))\n .call(function (selection) {\n if (type === 'image') {\n // todo 大小和 path symbol 保持一致\n var r = size * 2;\n selection.styles({\n img: symbol,\n width: r,\n height: r,\n x: x - size,\n y: y - size,\n });\n }\n else {\n var r = size / 2;\n var symbolFn = isFunction(symbol) ? symbol : Marker.getSymbol(symbol);\n selection.styles(__assign({ d: symbolFn === null || symbolFn === void 0 ? void 0 : symbolFn(x, y, r) }, style));\n }\n });\n });\n };\n Marker.MARKER_SYMBOL_MAP = new Map();\n /**\n * 注册 icon 类型\n * @param type\n * @param path\n */\n Marker.registerSymbol = function (type, symbol) {\n Marker.MARKER_SYMBOL_MAP.set(type, symbol);\n };\n /**\n * 获取已经注册的 icon 的 path\n */\n Marker.getSymbol = function (type) {\n return Marker.MARKER_SYMBOL_MAP.get(type);\n };\n /**\n * @returns 获取已经注册的 icon 的类型\n */\n Marker.getSymbols = function () {\n return Array.from(Marker.MARKER_SYMBOL_MAP.keys());\n };\n return Marker;\n}(Component));\nexport { Marker };\n/** Shapes for Point Geometry */\nMarker.registerSymbol('cross', cross);\nMarker.registerSymbol('hyphen', hyphen);\nMarker.registerSymbol('line', line);\nMarker.registerSymbol('plus', plus);\nMarker.registerSymbol('tick', tick);\nMarker.registerSymbol('circle', circle);\nMarker.registerSymbol('point', point);\nMarker.registerSymbol('bowtie', bowtie);\nMarker.registerSymbol('hexagon', hexagon);\nMarker.registerSymbol('square', square);\nMarker.registerSymbol('diamond', diamond);\nMarker.registerSymbol('triangle', triangle);\nMarker.registerSymbol('triangle-down', triangleDown);\n/** LineSymbols */\nMarker.registerSymbol('line', line);\nMarker.registerSymbol('dot', dot);\nMarker.registerSymbol('dash', dash);\nMarker.registerSymbol('smooth', smooth);\nMarker.registerSymbol('hv', hv);\nMarker.registerSymbol('vh', vh);\nMarker.registerSymbol('hvh', hvh);\nMarker.registerSymbol('vhv', vhv);\n//# sourceMappingURL=index.js.map","import { isObject, isString, isFunction } from '@antv/util';\n/**\n * 解析marker类型\n */\nexport function parseMarker(icon) {\n var type = 'default';\n if (isObject(icon) && icon instanceof Image)\n type = 'image';\n else if (isFunction(icon))\n type = 'symbol';\n else if (isString(icon)) {\n var dataURLsPattern = new RegExp('data:(image|text)');\n if (icon.match(dataURLsPattern)) {\n type = 'base64';\n }\n else if (/^(https?:\\/\\/(([a-zA-Z0-9]+-?)+[a-zA-Z0-9]+\\.)+[a-zA-Z]+)(:\\d+)?(\\/.*)?(\\?.*)?(#.*)?$/.test(icon)) {\n type = 'url';\n }\n else {\n // 不然就当作symbol string 处理\n type = 'symbol';\n }\n }\n return type;\n}\n//# sourceMappingURL=utils.js.map","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","'use strict';\n\nmodule.exports = UnitBezier;\n\nfunction UnitBezier(p1x, p1y, p2x, p2y) {\n // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1).\n this.cx = 3.0 * p1x;\n this.bx = 3.0 * (p2x - p1x) - this.cx;\n this.ax = 1.0 - this.cx - this.bx;\n\n this.cy = 3.0 * p1y;\n this.by = 3.0 * (p2y - p1y) - this.cy;\n this.ay = 1.0 - this.cy - this.by;\n\n this.p1x = p1x;\n this.p1y = p1y;\n this.p2x = p2x;\n this.p2y = p2y;\n}\n\nUnitBezier.prototype = {\n sampleCurveX: function (t) {\n // `ax t^3 + bx t^2 + cx t' expanded using Horner's rule.\n return ((this.ax * t + this.bx) * t + this.cx) * t;\n },\n\n sampleCurveY: function (t) {\n return ((this.ay * t + this.by) * t + this.cy) * t;\n },\n\n sampleCurveDerivativeX: function (t) {\n return (3.0 * this.ax * t + 2.0 * this.bx) * t + this.cx;\n },\n\n solveCurveX: function (x, epsilon) {\n if (epsilon === undefined) epsilon = 1e-6;\n\n if (x < 0.0) return 0.0;\n if (x > 1.0) return 1.0;\n\n var t = x;\n\n // First try a few iterations of Newton's method - normally very fast.\n for (var i = 0; i < 8; i++) {\n var x2 = this.sampleCurveX(t) - x;\n if (Math.abs(x2) < epsilon) return t;\n\n var d2 = this.sampleCurveDerivativeX(t);\n if (Math.abs(d2) < 1e-6) break;\n\n t = t - x2 / d2;\n }\n\n // Fall back to the bisection method for reliability.\n var t0 = 0.0;\n var t1 = 1.0;\n t = x;\n\n for (i = 0; i < 20; i++) {\n x2 = this.sampleCurveX(t);\n if (Math.abs(x2 - x) < epsilon) break;\n\n if (x > x2) {\n t0 = t;\n } else {\n t1 = t;\n }\n\n t = (t1 - t0) * 0.5 + t0;\n }\n\n return t;\n },\n\n solve: function (x, epsilon) {\n return this.sampleCurveY(this.solveCurveX(x, epsilon));\n }\n};\n","import _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar _excluded = [\"onFinish\", \"step\", \"formRef\", \"title\", \"stepProps\"];\nimport omit from \"rc-util/es/omit\";\nimport { noteOnce } from \"rc-util/es/warning\";\nimport { useContext, useEffect, useImperativeHandle, useRef } from 'react';\nimport { BaseForm } from \"../../BaseForm\";\nimport { StepFormProvide, StepsFormProvide } from \"./index\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction StepForm(stepNativeProps) {\n var formRef = useRef();\n var context = useContext(StepsFormProvide);\n var stepContext = useContext(StepFormProvide);\n var props = _objectSpread(_objectSpread({}, stepNativeProps), stepContext);\n var onFinish = props.onFinish,\n step = props.step,\n propFormRef = props.formRef,\n title = props.title,\n stepProps = props.stepProps,\n restProps = _objectWithoutProperties(props, _excluded);\n noteOnce(!restProps.submitter, 'StepForm 不包含提交按钮,请在 StepsForm 上');\n\n /** 重置 formRef */\n useImperativeHandle(propFormRef, function () {\n return formRef.current;\n }, [propFormRef === null || propFormRef === void 0 ? void 0 : propFormRef.current]);\n\n /** Dom 不存在的时候解除挂载 */\n useEffect(function () {\n if (!(props.name || props.step)) return;\n var name = (props.name || props.step).toString();\n context === null || context === void 0 || context.regForm(name, props);\n return function () {\n context === null || context === void 0 || context.unRegForm(name);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n if (context && context !== null && context !== void 0 && context.formArrayRef) {\n context.formArrayRef.current[step || 0] = formRef;\n }\n return /*#__PURE__*/_jsx(BaseForm, _objectSpread({\n formRef: formRef,\n onFinish: ( /*#__PURE__*/function () {\n var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(values) {\n var success;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (restProps.name) {\n context === null || context === void 0 || context.onFormFinish(restProps.name, values);\n }\n if (!onFinish) {\n _context.next = 9;\n break;\n }\n context === null || context === void 0 || context.setLoading(true);\n // 如果报错,直接抛出\n _context.next = 5;\n return onFinish === null || onFinish === void 0 ? void 0 : onFinish(values);\n case 5:\n success = _context.sent;\n if (success) {\n context === null || context === void 0 || context.next();\n }\n context === null || context === void 0 || context.setLoading(false);\n return _context.abrupt(\"return\");\n case 9:\n if (!(context !== null && context !== void 0 && context.lastStep)) context === null || context === void 0 || context.next();\n case 10:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }()),\n onInit: function onInit(_, form) {\n var _restProps$onInit;\n formRef.current = form;\n if (context && context !== null && context !== void 0 && context.formArrayRef) {\n context.formArrayRef.current[step || 0] = formRef;\n }\n restProps === null || restProps === void 0 || (_restProps$onInit = restProps.onInit) === null || _restProps$onInit === void 0 || _restProps$onInit.call(restProps, _, form);\n },\n layout: \"vertical\"\n }, omit(restProps, ['layoutType', 'columns'])));\n}\nexport default StepForm;","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nexport function loadImage(_x) {\n return _loadImage.apply(this, arguments);\n}\nfunction _loadImage() {\n _loadImage = _asyncToGenerator(function* (url) {\n // @ts-ignore\n if (window.createImageBitmap) {\n const response = yield fetch(url);\n const imageBitmap = yield createImageBitmap(yield response.blob());\n return imageBitmap;\n } else {\n const image = new window.Image();\n return new Promise(res => {\n image.onload = () => res(image);\n image.src = url;\n image.crossOrigin = 'Anonymous';\n });\n }\n });\n return _loadImage.apply(this, arguments);\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport { rgb2arr } from '@antv/l7-utils';\nimport BaseModel from \"../../core/BaseModel\";\nimport { PolygonExtrudeTriangulation } from \"../../core/triangulation\";\nimport { loadImage } from \"../../utils/load-image\";\n/* babel-plugin-inline-import '../shaders/extrude/polygon_extrude_frag.glsl' */\nconst polygonExtrudeFrag = \"layout(std140) uniform commonUniforms {\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n float u_linearColor;\\n float u_topsurface;\\n float u_sidesurface;\\n float u_heightfixed; // \\u9ED8\\u8BA4\\u4E0D\\u56FA\\u5B9A\\n float u_raisingHeight;\\n};\\n\\nin vec4 v_Color;\\n#pragma include \\\"scene_uniforms\\\"\\n#pragma include \\\"picking\\\"\\nout vec4 outputColor;\\nvoid main() {\\n\\n // top face\\n if(u_topsurface < 1.0) {\\n discard;\\n }\\n\\n outputColor = v_Color;\\n \\n outputColor = filterColor(outputColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/extrude/polygon_extrude_picklight_frag.glsl' */\nconst polygonExtrudePickLightFrag = \"\\nlayout(std140) uniform commonUniforms {\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n float u_linearColor;\\n float u_topsurface;\\n float u_sidesurface;\\n float u_heightfixed; // \\u9ED8\\u8BA4\\u4E0D\\u56FA\\u5B9A\\n float u_raisingHeight;\\n};\\n\\nin vec4 v_Color;\\nin vec3 v_uvs;\\nin vec2 v_texture_data;\\nout vec4 outputColor;\\n\\n#pragma include \\\"scene_uniforms\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n float isSide = v_texture_data.x;\\n float sidey = v_uvs[2];\\n float lightWeight = v_texture_data.y;\\n\\n // Tip: \\u90E8\\u5206\\u673A\\u578B GPU \\u8BA1\\u7B97\\u7CBE\\u5EA6\\u517C\\u5BB9\\n if(isSide < 0.999) {\\n // side face\\n if(u_sidesurface < 1.0) {\\n discard;\\n }\\n \\n if( u_linearColor == 1.0) {\\n // side use linear\\n vec4 linearColor = mix(u_targetColor, u_sourceColor, sidey);\\n linearColor.rgb *= lightWeight;\\n outputColor = linearColor;\\n } else {\\n // side notuse linear\\n outputColor = v_Color;\\n }\\n } else {\\n // top face\\n if(u_topsurface < 1.0) {\\n discard;\\n }\\n outputColor = v_Color;\\n }\\n\\n outputColor = filterColorAlpha(outputColor, lightWeight);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/extrude/polygon_extrude_picklight_vert.glsl' */\nconst polygonExtrudePickLightVert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec3 a_uvs;\\n\\nlayout(std140) uniform commonUniforms {\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n float u_linearColor;\\n float u_topsurface;\\n float u_sidesurface;\\n float u_heightfixed; // \\u9ED8\\u8BA4\\u4E0D\\u56FA\\u5B9A\\n float u_raisingHeight;\\n};\\n\\nout vec4 v_Color;\\nout vec3 v_uvs;\\nout vec2 v_texture_data;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"light\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n v_uvs = a_uvs;\\n // cal style mapping - \\u6570\\u636E\\u7EB9\\u7406\\u6620\\u5C04\\u90E8\\u5206\\u7684\\u8BA1\\u7B97\\n vec4 pos = vec4(a_Position.xy, a_Position.z * a_Size, 1.0);\\n vec4 project_pos = project_position(pos, a_Position64Low);\\n\\n if (u_heightfixed > 0.0) {\\n // \\u5224\\u65AD\\u51E0\\u4F55\\u4F53\\u662F\\u5426\\u56FA\\u5B9A\\u9AD8\\u5EA6\\n project_pos.z = a_Position.z * a_Size;\\n project_pos.z += u_raisingHeight;\\n if (\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\\n ) {\\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\\n project_pos.z *= mapboxZoomScale;\\n project_pos.z += u_raisingHeight * mapboxZoomScale;\\n }\\n }\\n\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\\n float lightWeight = calc_lighting(project_pos);\\n v_texture_data = vec2(a_Position.z, lightWeight);\\n\\n v_Color = vec4(a_Color.rgb * lightWeight, a_Color.w * opacity);\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/extrude/polygon_extrude_vert.glsl' */\nconst polygonExtrudeVert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec3 a_uvs;\\n\\nlayout(std140) uniform commonUniforms {\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n float u_linearColor;\\n float u_topsurface;\\n float u_sidesurface;\\n float u_heightfixed; // \\u9ED8\\u8BA4\\u4E0D\\u56FA\\u5B9A\\n float u_raisingHeight;\\n};\\n\\nout vec4 v_Color;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"light\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n float isSide = a_Position.z;\\n float topU = a_uvs[0];\\n float topV = 1.0 - a_uvs[1];\\n float sidey = a_uvs[2];\\n\\n vec4 pos = vec4(a_Position.xy, a_Position.z * a_Size, 1.0);\\n\\n vec4 project_pos = project_position(pos, a_Position64Low);\\n float lightWeight = calc_lighting(project_pos);\\n\\n if (u_heightfixed > 0.0) {\\n // \\u5224\\u65AD\\u51E0\\u4F55\\u4F53\\u662F\\u5426\\u56FA\\u5B9A\\u9AD8\\u5EA6\\n project_pos.z = a_Position.z * a_Size;\\n project_pos.z += u_raisingHeight;\\n\\n if (\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\\n ) {\\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\\n project_pos.z *= mapboxZoomScale;\\n project_pos.z += u_raisingHeight * mapboxZoomScale;\\n }\\n }\\n\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\\n\\n // Tip: \\u90E8\\u5206\\u673A\\u578B GPU \\u8BA1\\u7B97\\u7CBE\\u5EA6\\u517C\\u5BB9\\n if (isSide < 0.999) {\\n // side face\\n // if(u_sidesurface < 1.0) {\\n // discard;\\n // }\\n\\n if (u_linearColor == 1.0) {\\n vec4 linearColor = mix(u_targetColor, u_sourceColor, sidey);\\n linearColor.rgb *= lightWeight;\\n v_Color = linearColor;\\n } else {\\n v_Color = a_Color;\\n }\\n\\n } else {\\n v_Color = a_Color;\\n }\\n\\n v_Color = vec4(v_Color.rgb * lightWeight, v_Color.w * opacity);\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/extrude/polygon_extrudetex_frag.glsl' */\nconst polygonExtrudeTexFrag = \"uniform sampler2D u_texture;\\n\\nlayout(std140) uniform commonUniforms {\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n float u_linearColor;\\n float u_topsurface;\\n float u_sidesurface;\\n float u_heightfixed; // \\u9ED8\\u8BA4\\u4E0D\\u56FA\\u5B9A\\n float u_raisingHeight;\\n};\\n\\nin vec4 v_Color;\\nin vec3 v_uvs;\\nin vec2 v_texture_data;\\n\\n#pragma include \\\"scene_uniforms\\\"\\n#pragma include \\\"picking\\\"\\n\\nout vec4 outputColor;\\n\\nvoid main() {\\n float opacity = u_opacity;\\n float isSide = v_texture_data.x;\\n float lightWeight = v_texture_data.y;\\n float topU = v_uvs[0];\\n float topV = 1.0 - v_uvs[1];\\n float sidey = v_uvs[2];\\n\\n outputColor = texture(SAMPLER_2D(u_texture), vec2(topU, topV));\\n // Tip: \\u90E8\\u5206\\u673A\\u578B GPU \\u8BA1\\u7B97\\u7CBE\\u5EA6\\u517C\\u5BB9\\n if (isSide < 0.999) {// \\u662F\\u5426\\u662F\\u8FB9\\u7F18\\n // side face\\n if (u_sidesurface < 1.0) {\\n discard;\\n }\\n\\n if (u_linearColor == 1.0) {\\n vec4 linearColor = mix(u_targetColor, u_sourceColor, sidey);\\n linearColor.rgb *= lightWeight;\\n outputColor = linearColor;\\n } else {\\n outputColor = v_Color;\\n }\\n } else {\\n // top face\\n if (u_topsurface < 1.0) {\\n discard;\\n }\\n }\\n \\n outputColor.a *= opacity;\\n outputColor = filterColor(outputColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/extrude/polygon_extrudetex_vert.glsl' */\nconst polygonExtrudeTexVert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec3 a_uvs;\\n\\nlayout(std140) uniform commonUniforms {\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n float u_linearColor;\\n float u_topsurface;\\n float u_sidesurface;\\n float u_heightfixed; // \\u9ED8\\u8BA4\\u4E0D\\u56FA\\u5B9A\\n float u_raisingHeight;\\n};\\n\\nout vec4 v_Color;\\nout vec3 v_uvs;\\nout vec2 v_texture_data;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"light\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n vec4 pos = vec4(a_Position.xy, a_Position.z * a_Size, 1.0);\\n vec4 project_pos = project_position(pos, a_Position64Low);\\n float lightWeight = calc_lighting(project_pos);\\n v_uvs = a_uvs;\\n v_Color = a_Color;\\n v_Color.a *= opacity;\\n\\n v_texture_data = vec2(a_Position.z, lightWeight);\\n\\n if (u_heightfixed > 0.0) {\\n // \\u5224\\u65AD\\u51E0\\u4F55\\u4F53\\u662F\\u5426\\u56FA\\u5B9A\\u9AD8\\u5EA6\\n project_pos.z = a_Position.z * a_Size;\\n project_pos.z += u_raisingHeight;\\n\\n if (\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\\n ) {\\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\\n project_pos.z *= mapboxZoomScale;\\n project_pos.z += u_raisingHeight * mapboxZoomScale;\\n }\\n }\\n\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nexport default class ExtrudeModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"texture\", void 0);\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n NORMAL: 10,\n UV: 11\n });\n }\n getUninforms() {\n const commoninfo = this.getCommonUniformsInfo();\n const attributeInfo = this.getUniformsBufferInfo(this.getStyleAttribute());\n this.updateStyleUnifoms();\n return _objectSpread(_objectSpread({}, commoninfo.uniformsOption), attributeInfo.uniformsOption);\n }\n getCommonUniformsInfo() {\n const {\n mapTexture,\n heightfixed = false,\n raisingHeight = 0,\n topsurface = true,\n sidesurface = true,\n sourceColor,\n targetColor\n } = this.layer.getLayerConfig();\n\n // 转化渐变色\n let useLinearColor = 0; // 默认不生效\n let sourceColorArr = [1, 1, 1, 1];\n let targetColorArr = [1, 1, 1, 1];\n if (sourceColor && targetColor) {\n sourceColorArr = rgb2arr(sourceColor);\n targetColorArr = rgb2arr(targetColor);\n useLinearColor = 1;\n }\n const commonOptions = {\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\n u_linearColor: useLinearColor,\n // 控制侧面和顶面的显示隐藏\n u_topsurface: Number(topsurface),\n u_sidesurface: Number(sidesurface),\n u_heightfixed: Number(heightfixed),\n u_raisingHeight: Number(raisingHeight)\n };\n if (mapTexture && this.texture) {\n // @ts-ignore\n commonOptions.u_texture = this.texture;\n this.textures = [this.texture];\n }\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n yield _this.loadTexture();\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n const {\n frag,\n vert,\n type\n } = _this2.getShaders();\n _this2.initUniformsBuffer();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: type,\n vertexShader: vert,\n fragmentShader: frag,\n depth: {\n enable: true\n },\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n triangulation: PolygonExtrudeTriangulation\n });\n return [model];\n })();\n }\n getShaders() {\n const {\n pickLight,\n mapTexture\n } = this.layer.getLayerConfig();\n if (mapTexture) {\n return {\n frag: polygonExtrudeTexFrag,\n vert: polygonExtrudeTexVert,\n type: 'polygonExtrudeTexture'\n };\n }\n if (pickLight) {\n return {\n frag: polygonExtrudePickLightFrag,\n vert: polygonExtrudePickLightVert,\n type: 'polygonExtrudePickLight'\n };\n } else {\n return {\n frag: polygonExtrudeFrag,\n vert: polygonExtrudeVert,\n type: 'polygonExtrude'\n };\n }\n }\n clearModels() {\n var _this$texture;\n (_this$texture = this.texture) === null || _this$texture === void 0 || _this$texture.destroy();\n this.textures = [];\n }\n registerBuiltinAttributes() {\n const bounds = this.layer.getSource().extent;\n const lngLen = bounds[2] - bounds[0];\n const latLen = bounds[3] - bounds[1];\n\n // 注册 Position 属性 64 位地位部分,经纬度数据开启双精度,避免大于 22 层级以上出现数据偏移\n this.registerPosition64LowAttribute();\n this.styleAttributeService.registerStyleAttribute({\n name: 'uvs',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_uvs',\n shaderLocation: this.attributeLocation.UV,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: (feature, featureIdx, vertex) => {\n const lng = vertex[0];\n const lat = vertex[1];\n // 临时 兼容高德V2\n return [(lng - bounds[0]) / lngLen, (lat - bounds[1]) / latLen, vertex[4]];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'normal',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Normal',\n shaderLocation: this.attributeLocation.NORMAL,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: (feature, featureIdx, vertex, attributeIdx, normal) => {\n return normal;\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n size = 10\n } = feature;\n return Array.isArray(size) ? [size[0]] : [size];\n }\n }\n });\n }\n loadTexture() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n const {\n mapTexture\n } = _this3.layer.getLayerConfig();\n const {\n createTexture2D\n } = _this3.rendererService;\n _this3.texture = createTexture2D({\n height: 1,\n width: 1\n });\n if (mapTexture) {\n const image = yield loadImage(mapTexture);\n _this3.texture = createTexture2D({\n data: image,\n width: image.width,\n height: image.height,\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n min: gl.LINEAR,\n mag: gl.LINEAR\n });\n }\n })();\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport BaseModel from \"../../core/BaseModel\";\nimport { PolygonExtrudeTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/extrusion/polygon_extrusion_frag.glsl' */\nconst polygonExtrudeFrag = \"\\nin vec4 v_Color;\\n#pragma include \\\"scene_uniforms\\\"\\n#pragma include \\\"picking\\\"\\nout vec4 outputColor;\\nvoid main() {\\n\\n outputColor = v_Color;\\n outputColor = filterColor(outputColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/extrusion/polygon_extrusion_vert.glsl' */\nconst polygonExtrudeVert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\\n\\nout vec4 v_Color;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"light\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n vec4 pos = vec4(a_Position.xy, a_Position.z * a_Size + (1.0 - a_Position.z) * extrusionBase, 1.0);\\n\\n vec4 project_pos = project_position(pos, a_Position64Low);\\n float lightWeight = calc_lighting(project_pos);\\n v_Color = a_Color;\\n v_Color = vec4(v_Color.rgb * lightWeight, v_Color.w * opacity);\\n\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nexport default class ExtrusionModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"texture\", void 0);\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n NORMAL: 10,\n EXTRUSION_BASE: 11\n });\n }\n getUninforms() {\n const commoninfo = this.getCommonUniformsInfo();\n const attributeInfo = this.getUniformsBufferInfo(this.getStyleAttribute());\n this.updateStyleUnifoms();\n return _objectSpread(_objectSpread({}, commoninfo.uniformsOption), attributeInfo.uniformsOption);\n }\n getCommonUniformsInfo() {\n const commonOptions = {};\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n const {\n frag,\n vert,\n type\n } = _this2.getShaders();\n _this2.initUniformsBuffer();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: type,\n vertexShader: vert,\n fragmentShader: frag,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n triangulation: PolygonExtrudeTriangulation,\n depth: {\n enable: true\n }\n });\n return [model];\n })();\n }\n getShaders() {\n return {\n frag: polygonExtrudeFrag,\n vert: polygonExtrudeVert,\n type: 'polygonExtrude'\n };\n }\n clearModels() {\n var _this$texture;\n (_this$texture = this.texture) === null || _this$texture === void 0 || _this$texture.destroy();\n }\n registerBuiltinAttributes() {\n // 注册 Position 属性 64 位地位部分,经纬度数据开启双精度,避免大于 22 层级以上出现数据偏移\n this.registerPosition64LowAttribute();\n this.styleAttributeService.registerStyleAttribute({\n name: 'normal',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Normal',\n shaderLocation: this.attributeLocation.NORMAL,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: (feature, featureIdx, vertex, attributeIdx, normal) => {\n return normal;\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n size = 10\n } = feature;\n return Array.isArray(size) ? [size[0]] : [size];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrusionBase',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_ExtrusionBase',\n shaderLocation: this.attributeLocation.EXTRUSION_BASE,\n buffer: {\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n extrusionBase: op = 0\n } = feature;\n return [op];\n }\n }\n });\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport BaseModel from \"../../core/BaseModel\";\nimport { polygonTriangulation, polygonTriangulationWithCenter } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/fill/fill_frag.glsl' */\nconst polygon_frag = \"in vec4 v_color;\\n#pragma include \\\"scene_uniforms\\\"\\n#pragma include \\\"picking\\\"\\nout vec4 outputColor;\\nvoid main() {\\n outputColor = v_color;\\n outputColor = filterColor(outputColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/fill/fill_linear_frag.glsl' */\nconst polygon_linear_frag = \"\\nlayout(std140) uniform commonUniforms {\\n float u_raisingHeight;\\n float u_opacitylinear;\\n float u_dir;\\n};\\n\\nin vec4 v_color;\\nin vec3 v_linear;\\nin vec2 v_pos;\\nout vec4 outputColor;\\n#pragma include \\\"scene_uniforms\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n outputColor = v_color;\\n if (u_opacitylinear > 0.0) {\\n outputColor.a *= u_dir == 1.0 ? 1.0 - length(v_pos - v_linear.xy)/v_linear.z : length(v_pos - v_linear.xy)/v_linear.z;\\n }\\n outputColor = filterColor(outputColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/fill/fill_linear_vert.glsl' */\nconst polygon_linear_vert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_LINEAR) in vec3 a_linear;\\n\\nlayout(std140) uniform commonUniforms {\\n float u_raisingHeight;\\n float u_opacitylinear;\\n float u_dir;\\n};\\n\\nout vec4 v_color;\\nout vec3 v_linear;\\nout vec2 v_pos;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n if (u_opacitylinear > 0.0) {\\n v_linear = a_linear;\\n v_pos = a_Position.xy;\\n }\\n v_color = vec4(a_Color.xyz, a_Color.w * opacity);\\n vec4 project_pos = project_position(vec4(a_Position, 1.0), a_Position64Low);\\n project_pos.z += u_raisingHeight;\\n\\n if (u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\\n float mapboxZoomScale = 4.0/pow(2.0, 21.0 - u_Zoom);\\n project_pos.z *= mapboxZoomScale;\\n project_pos.z += u_raisingHeight * mapboxZoomScale;\\n }\\n\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\\n setPickingColor(a_PickingColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/fill/fill_vert.glsl' */\nconst polygon_vert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\n\\nlayout(std140) uniform commonUniforms {\\n float u_raisingHeight;\\n};\\n\\nout vec4 v_color;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n // cal style mapping - \\u6570\\u636E\\u7EB9\\u7406\\u6620\\u5C04\\u90E8\\u5206\\u7684\\u8BA1\\u7B97\\n\\n v_color = vec4(a_Color.xyz, a_Color.w * opacity);\\n vec4 project_pos = project_position(vec4(a_Position, 1.0), a_Position64Low);\\n\\n project_pos.z += u_raisingHeight;\\n\\n if (\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\\n ) {\\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\\n project_pos.z *= mapboxZoomScale;\\n project_pos.z += u_raisingHeight * mapboxZoomScale;\\n }\\n\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\\n\\n setPickingColor(a_PickingColor);\\n}\\n\\n\";\nexport default class FillModel extends BaseModel {\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n LINEAR: 9\n });\n }\n getUninforms() {\n const commoninfo = this.getCommonUniformsInfo();\n const attributeInfo = this.getUniformsBufferInfo(this.getStyleAttribute());\n this.updateStyleUnifoms();\n return _objectSpread(_objectSpread({}, commoninfo.uniformsOption), attributeInfo.uniformsOption);\n }\n getCommonUniformsInfo() {\n const {\n raisingHeight = 0,\n opacityLinear = {\n enable: false,\n dir: 'in'\n }\n } = this.layer.getLayerConfig();\n const commonOptions = {\n u_raisingHeight: Number(raisingHeight),\n u_opacitylinear: Number(opacityLinear.enable),\n u_dir: opacityLinear.dir === 'in' ? 1.0 : 0.0\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n const {\n frag,\n vert,\n triangulation,\n type\n } = _this2.getModelParams();\n _this2.initUniformsBuffer();\n _this2.layer.triangulation = triangulation;\n const model = yield _this2.layer.buildLayerModel({\n moduleName: type,\n vertexShader: vert,\n fragmentShader: frag,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n triangulation,\n primitive: gl.TRIANGLES,\n depth: {\n enable: false\n }\n });\n return [model];\n })();\n }\n registerBuiltinAttributes() {\n // 注册 Position 属性 64 位地位部分,经纬度数据开启双精度,避免大于 22 层级以上出现数据偏移\n this.registerPosition64LowAttribute();\n const {\n opacityLinear = {\n enable: false,\n dir: 'in'\n }\n } = this.layer.getLayerConfig();\n if (opacityLinear.enable) {\n this.styleAttributeService.registerStyleAttribute({\n name: 'linear',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_linear',\n shaderLocation: this.attributeLocation.LINEAR,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: (feature, featureIdx, vertex) => {\n return [vertex[3], vertex[4], vertex[5]];\n }\n }\n });\n }\n }\n getModelParams() {\n const {\n opacityLinear = {\n enable: false\n }\n } = this.layer.getLayerConfig();\n if (opacityLinear.enable) {\n return {\n frag: polygon_linear_frag,\n vert: polygon_linear_vert,\n type: 'polygonLinear',\n triangulation: polygonTriangulationWithCenter\n };\n } else {\n return {\n frag: polygon_frag,\n vert: polygon_vert,\n type: 'polygonFill',\n triangulation: polygonTriangulation\n };\n }\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport { rgb2arr } from '@antv/l7-utils';\nimport BaseModel from \"../../core/BaseModel\";\nimport { polygonTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/ocean/ocean_frag.glsl' */\nconst ocean_frag = \"\\nlayout(std140) uniform commonUniforms {\\n vec4 u_watercolor;\\n vec4 u_watercolor2;\\n float u_time;\\n};\\n\\nin vec2 v_uv;\\nin float v_opacity;\\nout vec4 outputColor;\\n\\nfloat coast2water_fadedepth = 0.10;\\nfloat large_waveheight = .750; // change to adjust the \\\"heavy\\\" waves\\nfloat large_wavesize = 3.4; // factor to adjust the large wave size\\nfloat small_waveheight = 0.6; // change to adjust the small random waves\\nfloat small_wavesize = 0.5; // factor to ajust the small wave size\\nfloat water_softlight_fact = 15.; // range [1..200] (should be << smaller than glossy-fact)\\nfloat water_glossylight_fact= 120.; // range [1..200]\\nfloat particle_amount = 70.;\\n\\nvec3 water_specularcolor = vec3(1.3, 1.3, 0.9); // specular Color (RGB) of the water-highlights\\n#define light vec3(-0., sin(u_time*0.5)*.5 + .35, 2.8) // position of the sun\\n\\nuniform sampler2D u_texture1;\\nuniform sampler2D u_texture2;\\nuniform sampler2D u_texture3;\\n\\n \\n\\nfloat hash( float n ) {\\n return fract(sin(n)*43758.5453123);\\n}\\n\\n// 2d noise function\\nfloat noise1( in vec2 x ) {\\n vec2 p = floor(x);\\n vec2 f = smoothstep(0.0, 1.0, fract(x));\\n float n = p.x + p.y*57.0;\\n return mix(mix( hash(n+ 0.0), hash(n+ 1.0),f.x),\\n mix( hash(n+ 57.0), hash(n+ 58.0),f.x),f.y);\\n}\\n\\nfloat noise(vec2 p) {\\n return texture(SAMPLER_2D(u_texture2),p*vec2(1./256.)).x;\\n}\\n\\nvec4 highness(vec2 p) {\\n vec4 t = texture(SAMPLER_2D(u_texture1),fract(p));\\n float clipped = -2.0-smoothstep(3.,10.,t.a)*6.9-smoothstep(10.,100.,t.a)*89.9-smoothstep(0.,10000.,t.a)*10000.0;\\n return clamp(t, 0.0,3.0)+clamp(t/3.0-1.0, 0.0,1.0)+clamp(t/16.0-1.0, 0.0,1.0);\\n}\\n\\nfloat height_map( vec2 p ) {\\n vec4 height=highness(p);\\n /*\\n height = -0.5+\\n 0.5*smoothstep(-100.,0.,-height)+\\n 2.75*smoothstep(0.,2.,height)+\\n 1.75*smoothstep(2.,4.,height)+\\n 2.75*smoothstep(4.,16.,height)+\\n 1.5*smoothstep(16.,1000.,height);\\n */\\n\\n mat2 m = mat2( 0.9563*1.4, -0.2924*1.4, 0.2924*1.4, 0.9563*1.4 );\\n //p = p*6.;\\n float f = 0.6000*noise1( p ); p = m*p*1.1*6.;\\n f += 0.2500*noise( p ); p = m*p*1.32;\\n f += 0.1666*noise( p ); p = m*p*1.11;\\n f += 0.0834*noise( p ); p = m*p*1.12;\\n f += 0.0634*noise( p ); p = m*p*1.13;\\n f += 0.0444*noise( p ); p = m*p*1.14;\\n f += 0.0274*noise( p ); p = m*p*1.15;\\n f += 0.0134*noise( p ); p = m*p*1.16;\\n f += 0.0104*noise( p ); p = m*p*1.17;\\n f += 0.0084*noise( p );\\n f = .25*f+dot(height,vec4(-.03125,-.125,.25,.25))*.5;\\n const float FLAT_LEVEL = 0.92525;\\n //f = f*0.25+height*0.75;\\n if (f level)\\n {\\n col = CalcTerrain(uv, height);\\n }\\n if (height <= level)\\n {\\n vec2 dif = vec2(.0, .01);\\n vec2 pos = uv*15. + vec2(u_time*.01);\\n float h1 = water_map(pos-dif,waveheight);\\n float h2 = water_map(pos+dif,waveheight);\\n float h3 = water_map(pos-dif.yx,waveheight);\\n float h4 = water_map(pos+dif.yx,waveheight);\\n vec3 normwater = normalize(vec3(h3-h4, h1-h2, .125)); // norm-vector of the 'bumpy' water-plane\\n uv += normwater.xy*.002*(level-height);\\n \\n col = CalcTerrain(uv, height);\\n\\n float coastfade = clamp((level-height)/coast2water_fadedepth, 0., 1.);\\n float coastfade2= clamp((level-height)/deepwater_fadedepth, 0., 1.);\\n float intensity = col.r*.2126+col.g*.7152+col.b*.0722;\\n watercolor = mix(watercolor*intensity, watercolor2, smoothstep(0., 1., coastfade2));\\n\\n vec3 r0 = vec3(uv, WATER_LEVEL);\\n vec3 rd = normalize( light - r0 ); // ray-direction to the light from water-position\\n float grad = dot(normwater, rd); // dot-product of norm-vector and light-direction\\n float specular = pow(grad, water_softlight_fact); // used for soft highlights \\n float specular2= pow(grad, water_glossylight_fact); // used for glossy highlights\\n float gradpos = dot(vec3(0., 0., 1.), rd);\\n float specular1= smoothstep(0., 1., pow(gradpos, 5.)); // used for diffusity (some darker corona around light's specular reflections...) \\n float watershade = test_shadow( uv, level );\\n watercolor *= 2.2+watershade;\\n watercolor += (.2+.8*watershade) * ((grad-1.0)*.5+specular) * .25;\\n watercolor /= (1.+specular1*1.25);\\n watercolor += watershade*specular2*water_specularcolor;\\n watercolor += watershade*coastfade*(1.-coastfade2)*(vec3(.5, .6, .7)*nautic(uv)+vec3(1., 1., 1.)*particles(uv));\\n \\n col = mix(col, watercolor, coastfade);\\n }\\n \\n outputColor = vec4(col, v_opacity); \\n}\\n\";\n/* babel-plugin-inline-import '../shaders/ocean/ocean_vert.glsl' */\nconst ocean_vert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_uv;\\n\\nlayout(std140) uniform commonUniforms {\\n vec4 u_watercolor;\\n vec4 u_watercolor2;\\n float u_time;\\n};\\n\\nout vec2 v_uv;\\nout float v_opacity;\\n\\n#pragma include \\\"projection\\\"\\n\\nvoid main() {\\n v_uv = a_uv;\\n v_opacity = opacity;\\n vec4 project_pos = project_position(vec4(a_Position, 1.0));\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\\n}\\n\\n\";\nexport default class OceanModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"texture1\", void 0);\n _defineProperty(this, \"texture2\", void 0);\n _defineProperty(this, \"texture3\", void 0);\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n UV: 9\n });\n }\n getUninforms() {\n const commoninfo = this.getCommonUniformsInfo();\n const attributeInfo = this.getUniformsBufferInfo(this.getStyleAttribute());\n this.updateStyleUnifoms();\n return _objectSpread(_objectSpread({}, commoninfo.uniformsOption), attributeInfo.uniformsOption);\n }\n getCommonUniformsInfo() {\n const {\n watercolor = '#6D99A8',\n watercolor2 = '#0F121C'\n } = this.layer.getLayerConfig();\n const commonOptions = {\n u_watercolor: rgb2arr(watercolor),\n u_watercolor2: rgb2arr(watercolor2),\n u_time: this.layer.getLayerAnimateTime(),\n u_texture1: this.texture1,\n u_texture2: this.texture2,\n u_texture3: this.texture3\n };\n\n // u_opacity: isNumber(opacity) ? opacity : 1.0,\n this.textures = [this.texture1, this.texture2, this.texture3];\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n getAnimateUniforms() {\n return {\n u_time: this.layer.getLayerAnimateTime()\n };\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.loadTexture();\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.initUniformsBuffer();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'polygonOcean',\n vertexShader: ocean_vert,\n fragmentShader: ocean_frag,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n triangulation: polygonTriangulation,\n primitive: gl.TRIANGLES,\n depth: {\n enable: false\n }\n });\n return [model];\n })();\n }\n clearModels() {\n var _this$texture, _this$texture2, _this$texture3;\n (_this$texture = this.texture1) === null || _this$texture === void 0 || _this$texture.destroy();\n (_this$texture2 = this.texture2) === null || _this$texture2 === void 0 || _this$texture2.destroy();\n (_this$texture3 = this.texture3) === null || _this$texture3 === void 0 || _this$texture3.destroy();\n }\n registerBuiltinAttributes() {\n const bbox = this.layer.getSource().extent;\n const [minLng, minLat, maxLng, maxLat] = bbox;\n const lngLen = maxLng - minLng;\n const latLen = maxLat - minLat;\n this.styleAttributeService.registerStyleAttribute({\n name: 'oceanUv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_uv',\n shaderLocation: this.attributeLocation.UV,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: (feature, featureIdx, vertex) => {\n const [lng, lat] = vertex;\n return [(lng - minLng) / lngLen, (lat - minLat) / latLen];\n }\n }\n });\n }\n loadTexture() {\n const {\n createTexture2D\n } = this.rendererService;\n const defaultTextureOptions = {\n height: 0,\n width: 0\n };\n // 默认索引为 undefined,所以单独赋值\n this.texture1 = createTexture2D(defaultTextureOptions);\n this.texture2 = createTexture2D(defaultTextureOptions);\n this.texture3 = createTexture2D(defaultTextureOptions);\n\n // 加载完 image 后单独给 texture f赋值\n initImage(images => {\n this.texture1 = initTex(images[0]);\n this.texture2 = initTex(images[1]);\n this.texture3 = initTex(images[2]);\n this.layerService.reRender();\n });\n function initImage(callback) {\n let loadedCount = 0;\n const loadedImages = [];\n const images = ['https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*EojwT4VzSiYAAAAAAAAAAAAAARQnAQ', 'https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*MJ22QbpuCzIAAAAAAAAAAAAAARQnAQ', 'https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*-z2HSIVDsHIAAAAAAAAAAAAAARQnAQ'];\n images.map(imgSrc => {\n const image = new Image();\n image.crossOrigin = '';\n image.src = imgSrc;\n loadedImages.push(image);\n image.onload = () => {\n loadedCount++;\n if (loadedCount === 3) {\n callback(loadedImages);\n }\n };\n });\n }\n function initTex(image) {\n return createTexture2D({\n data: image,\n width: image.width,\n height: image.height,\n wrapS: gl.MIRRORED_REPEAT,\n wrapT: gl.MIRRORED_REPEAT,\n min: gl.LINEAR,\n mag: gl.LINEAR\n });\n }\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport BaseModel from \"../../core/BaseModel\";\nimport { polygonTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/water/polygon_water_frag.glsl' */\nconst water_frag = \"uniform sampler2D u_texture;\\nlayout(std140) uniform commonUniforms {\\n float u_speed;\\n float u_time;\\n};\\n\\nout vec4 outputColor;\\n\\n\\nin vec4 v_Color;\\nin vec2 v_uv;\\n\\nfloat rand(vec2 n) { return 0.5 + 0.5 * fract(sin(dot(n.xy, vec2(12.9898, 78.233)))* 43758.5453); }\\n\\nfloat water(vec3 p) {\\n float t = u_time * u_speed;\\n p.z += t * 2.; p.x += t * 2.;\\n vec3 c1 = texture(SAMPLER_2D(u_texture), p.xz / 30.).xyz;\\n p.z += t * 3.; p.x += t * 0.52;\\n vec3 c2 = texture(SAMPLER_2D(u_texture), p.xz / 30.).xyz;\\n p.z += t * 4.; p.x += t * 0.8;\\n vec3 c3 = texture(SAMPLER_2D(u_texture), p.xz / 30.).xyz;\\n c1 += c2 - c3;\\n float z = (c1.x + c1.y + c1.z) / 3.;\\n return p.y + z / 4.;\\n}\\n\\nfloat map(vec3 p) {\\n float d = 100.0;\\n d = water(p);\\n return d;\\n}\\n\\nfloat intersect(vec3 ro, vec3 rd) {\\n float d = 0.0;\\n for (int i = 0; i <= 100; i++) {\\n float h = map(ro + rd * d);\\n if (h < 0.1) return d;\\n d += h;\\n }\\n return 0.0;\\n}\\n\\nvec3 norm(vec3 p) {\\n float eps = .1;\\n return normalize(vec3(\\n map(p + vec3(eps, 0, 0)) - map(p + vec3(-eps, 0, 0)),\\n map(p + vec3(0, eps, 0)) - map(p + vec3(0, -eps, 0)),\\n map(p + vec3(0, 0, eps)) - map(p + vec3(0, 0, -eps))\\n ));\\n} \\n\\nfloat calSpc() {\\n vec3 l1 = normalize(vec3(1, 1, 1));\\n vec3 ro = vec3(-3, 20, -8);\\n vec3 rc = vec3(0, 0, 0);\\n vec3 ww = normalize(rc - ro);\\n vec3 uu = normalize(cross(vec3(0,1,0), ww));\\n vec3 vv = normalize(cross(rc - ro, uu));\\n vec3 rd = normalize(uu * v_uv.x + vv * v_uv.y + ww);\\n float d = intersect(ro, rd);\\n vec3 p = ro + rd * d;\\n vec3 n = norm(p);\\n float spc = pow(max(0.0, dot(reflect(l1, n), rd)), 30.0);\\n return spc;\\n}\\n\\nvoid main() {\\n\\n outputColor = v_Color;\\n float spc = calSpc();\\n outputColor += spc * 0.4;\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/water/polygon_water_vert.glsl' */\nconst water_vert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_uv;\\n\\nlayout(std140) uniform commonUniforms {\\n float u_speed;\\n float u_time;\\n};\\nout vec4 v_Color;\\nout vec2 v_uv;\\n\\n#pragma include \\\"projection\\\"\\n\\nvoid main() {\\n v_uv = a_uv;\\n v_Color = a_Color;\\n v_Color.a *= opacity;\\n vec4 project_pos = project_position(vec4(a_Position, 1.0));\\n\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\\n}\\n\\n\";\nexport default class WaterModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"texture\", void 0);\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n UV: 9\n });\n }\n getUninforms() {\n const commoninfo = this.getCommonUniformsInfo();\n const attributeInfo = this.getUniformsBufferInfo(this.getStyleAttribute());\n this.updateStyleUnifoms();\n return _objectSpread(_objectSpread({}, commoninfo.uniformsOption), attributeInfo.uniformsOption);\n }\n getCommonUniformsInfo() {\n const {\n speed = 0.5\n } = this.layer.getLayerConfig();\n const commonOptions = {\n u_speed: speed,\n u_time: this.layer.getLayerAnimateTime(),\n u_texture: this.texture\n };\n\n // u_opacity: isNumber(opacity) ? opacity : 1.0,\n this.textures = [this.texture];\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n getAnimateUniforms() {\n return {\n u_time: this.layer.getLayerAnimateTime()\n };\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.loadTexture();\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.initUniformsBuffer();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'polygonWater',\n vertexShader: water_vert,\n fragmentShader: water_frag,\n triangulation: polygonTriangulation,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n primitive: gl.TRIANGLES,\n depth: {\n enable: false\n },\n pickingEnabled: false,\n diagnosticDerivativeUniformityEnabled: false\n });\n return [model];\n })();\n }\n clearModels() {\n var _this$texture;\n (_this$texture = this.texture) === null || _this$texture === void 0 || _this$texture.destroy();\n }\n registerBuiltinAttributes() {\n const bbox = this.layer.getSource().extent;\n const [minLng, minLat, maxLng, maxLat] = bbox;\n const lngLen = maxLng - minLng;\n const latLen = maxLat - minLat;\n this.styleAttributeService.registerStyleAttribute({\n name: 'waterUv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_uv',\n shaderLocation: this.attributeLocation.UV,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: (feature, featureIdx, vertex) => {\n const [lng, lat] = vertex;\n return [(lng - minLng) / lngLen, (lat - minLat) / latLen];\n }\n }\n });\n }\n loadTexture() {\n const {\n waterTexture\n } = this.layer.getLayerConfig();\n const {\n createTexture2D\n } = this.rendererService;\n this.texture = createTexture2D({\n height: 1,\n width: 1\n });\n const image = new Image();\n image.crossOrigin = '';\n if (waterTexture) {\n // custom texture\n console.warn('L7 recommend:https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*EojwT4VzSiYAAAAAAAAAAAAAARQnAQ');\n image.src = waterTexture;\n } else {\n // default texture\n image.src = 'https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*EojwT4VzSiYAAAAAAAAAAAAAARQnAQ';\n }\n image.onload = () => {\n this.texture = createTexture2D({\n data: image,\n width: image.width,\n height: image.height,\n wrapS: gl.MIRRORED_REPEAT,\n wrapT: gl.MIRRORED_REPEAT,\n min: gl.LINEAR,\n mag: gl.LINEAR\n });\n this.layerService.reRender();\n };\n }\n}","import LineModel from \"../../line/models/line\";\nimport PointExtrudeModel from \"../../point/models/extrude\";\nimport PointFillModel from \"../../point/models/fill\";\nimport IMageModel from \"../../point/models/image\";\nimport NormalModel from \"../../point/models/normal\";\nimport TextModel from \"../../point/models/text\";\nimport ExtrudeModel from \"./extrude\";\nimport Extrusion from \"./extrusion\";\nimport FillModel from \"./fill\";\nimport Ocean from \"./ocean\";\nimport Water from \"./water\";\nconst PolygonModels = {\n fill: FillModel,\n line: LineModel,\n extrude: ExtrudeModel,\n text: TextModel,\n point_fill: PointFillModel,\n point_image: IMageModel,\n point_normal: NormalModel,\n point_extrude: PointExtrudeModel,\n water: Water,\n ocean: Ocean,\n extrusion: Extrusion\n // point_fill: PointModels.fill,\n};\nexport default PolygonModels;","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport BaseLayer from \"../core/BaseLayer\";\nimport PolygonModels from \"./models/\";\nexport default class PolygonLayer extends BaseLayer {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"type\", 'PolygonLayer');\n _defineProperty(this, \"enableShaderEncodeStyles\", ['opacity', 'extrusionBase',\n // shape 为文本时\n 'rotation', 'offsets', 'stroke']);\n }\n buildModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const shape = _this.getModelType();\n _this.layerModel = new PolygonModels[shape](_this);\n yield _this.initLayerModels();\n })();\n }\n getModelType() {\n var _shapeAttribute$scale;\n const shapeAttribute = this.styleAttributeService.getLayerStyleAttribute('shape');\n const shape = shapeAttribute === null || shapeAttribute === void 0 || (_shapeAttribute$scale = shapeAttribute.scale) === null || _shapeAttribute$scale === void 0 ? void 0 : _shapeAttribute$scale.field;\n if (shape === 'fill' || !shape) {\n return 'fill';\n } else if (shape === 'extrude') {\n return 'extrude';\n } else if (shape === 'extrusion') {\n return 'extrusion';\n } else if (shape === 'water') {\n return 'water';\n } else if (shape === 'ocean') {\n return 'ocean';\n } else if (shape === 'line') {\n return 'line';\n } else {\n return this.getPointModelType();\n }\n }\n getPointModelType() {\n // pointlayer\n // 2D、 3d、 shape、image、text、normal、\n const layerData = this.getEncodedData();\n const {\n shape2d,\n shape3d\n } = this.getLayerConfig();\n const iconMap = this.iconService.getIconMap();\n const item = layerData.find(fe => {\n return fe.hasOwnProperty('shape');\n });\n if (!item) {\n return 'fill';\n } else {\n const shape = item.shape;\n if (shape === 'dot') {\n return 'point_normal';\n }\n if ((shape2d === null || shape2d === void 0 ? void 0 : shape2d.indexOf(shape)) !== -1) {\n return 'point_fill';\n }\n if ((shape3d === null || shape3d === void 0 ? void 0 : shape3d.indexOf(shape)) !== -1) {\n return 'point_extrude';\n }\n if (iconMap.hasOwnProperty(shape)) {\n return 'point_image';\n }\n return 'text';\n }\n }\n}","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","'use strict';\n\nmodule.exports = Pbf;\n\nvar ieee754 = require('ieee754');\n\nfunction Pbf(buf) {\n this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);\n this.pos = 0;\n this.type = 0;\n this.length = this.buf.length;\n}\n\nPbf.Varint = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum\nPbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64\nPbf.Bytes = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields\nPbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32\n\nvar SHIFT_LEFT_32 = (1 << 16) * (1 << 16),\n SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;\n\n// Threshold chosen based on both benchmarking and knowledge about browser string\n// data structures (which currently switch structure types at 12 bytes or more)\nvar TEXT_DECODER_MIN_LENGTH = 12;\nvar utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8');\n\nPbf.prototype = {\n\n destroy: function() {\n this.buf = null;\n },\n\n // === READING =================================================================\n\n readFields: function(readField, result, end) {\n end = end || this.length;\n\n while (this.pos < end) {\n var val = this.readVarint(),\n tag = val >> 3,\n startPos = this.pos;\n\n this.type = val & 0x7;\n readField(tag, result, this);\n\n if (this.pos === startPos) this.skip(val);\n }\n return result;\n },\n\n readMessage: function(readField, result) {\n return this.readFields(readField, result, this.readVarint() + this.pos);\n },\n\n readFixed32: function() {\n var val = readUInt32(this.buf, this.pos);\n this.pos += 4;\n return val;\n },\n\n readSFixed32: function() {\n var val = readInt32(this.buf, this.pos);\n this.pos += 4;\n return val;\n },\n\n // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)\n\n readFixed64: function() {\n var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;\n this.pos += 8;\n return val;\n },\n\n readSFixed64: function() {\n var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;\n this.pos += 8;\n return val;\n },\n\n readFloat: function() {\n var val = ieee754.read(this.buf, this.pos, true, 23, 4);\n this.pos += 4;\n return val;\n },\n\n readDouble: function() {\n var val = ieee754.read(this.buf, this.pos, true, 52, 8);\n this.pos += 8;\n return val;\n },\n\n readVarint: function(isSigned) {\n var buf = this.buf,\n val, b;\n\n b = buf[this.pos++]; val = b & 0x7f; if (b < 0x80) return val;\n b = buf[this.pos++]; val |= (b & 0x7f) << 7; if (b < 0x80) return val;\n b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;\n b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;\n b = buf[this.pos]; val |= (b & 0x0f) << 28;\n\n return readVarintRemainder(val, isSigned, this);\n },\n\n readVarint64: function() { // for compatibility with v2.0.1\n return this.readVarint(true);\n },\n\n readSVarint: function() {\n var num = this.readVarint();\n return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding\n },\n\n readBoolean: function() {\n return Boolean(this.readVarint());\n },\n\n readString: function() {\n var end = this.readVarint() + this.pos;\n var pos = this.pos;\n this.pos = end;\n\n if (end - pos >= TEXT_DECODER_MIN_LENGTH && utf8TextDecoder) {\n // longer strings are fast with the built-in browser TextDecoder API\n return readUtf8TextDecoder(this.buf, pos, end);\n }\n // short strings are fast with our custom implementation\n return readUtf8(this.buf, pos, end);\n },\n\n readBytes: function() {\n var end = this.readVarint() + this.pos,\n buffer = this.buf.subarray(this.pos, end);\n this.pos = end;\n return buffer;\n },\n\n // verbose for performance reasons; doesn't affect gzipped size\n\n readPackedVarint: function(arr, isSigned) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readVarint(isSigned));\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readVarint(isSigned));\n return arr;\n },\n readPackedSVarint: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readSVarint());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readSVarint());\n return arr;\n },\n readPackedBoolean: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readBoolean());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readBoolean());\n return arr;\n },\n readPackedFloat: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readFloat());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readFloat());\n return arr;\n },\n readPackedDouble: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readDouble());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readDouble());\n return arr;\n },\n readPackedFixed32: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readFixed32());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readFixed32());\n return arr;\n },\n readPackedSFixed32: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed32());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readSFixed32());\n return arr;\n },\n readPackedFixed64: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readFixed64());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readFixed64());\n return arr;\n },\n readPackedSFixed64: function(arr) {\n if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed64());\n var end = readPackedEnd(this);\n arr = arr || [];\n while (this.pos < end) arr.push(this.readSFixed64());\n return arr;\n },\n\n skip: function(val) {\n var type = val & 0x7;\n if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {}\n else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos;\n else if (type === Pbf.Fixed32) this.pos += 4;\n else if (type === Pbf.Fixed64) this.pos += 8;\n else throw new Error('Unimplemented type: ' + type);\n },\n\n // === WRITING =================================================================\n\n writeTag: function(tag, type) {\n this.writeVarint((tag << 3) | type);\n },\n\n realloc: function(min) {\n var length = this.length || 16;\n\n while (length < this.pos + min) length *= 2;\n\n if (length !== this.length) {\n var buf = new Uint8Array(length);\n buf.set(this.buf);\n this.buf = buf;\n this.length = length;\n }\n },\n\n finish: function() {\n this.length = this.pos;\n this.pos = 0;\n return this.buf.subarray(0, this.length);\n },\n\n writeFixed32: function(val) {\n this.realloc(4);\n writeInt32(this.buf, val, this.pos);\n this.pos += 4;\n },\n\n writeSFixed32: function(val) {\n this.realloc(4);\n writeInt32(this.buf, val, this.pos);\n this.pos += 4;\n },\n\n writeFixed64: function(val) {\n this.realloc(8);\n writeInt32(this.buf, val & -1, this.pos);\n writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);\n this.pos += 8;\n },\n\n writeSFixed64: function(val) {\n this.realloc(8);\n writeInt32(this.buf, val & -1, this.pos);\n writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);\n this.pos += 8;\n },\n\n writeVarint: function(val) {\n val = +val || 0;\n\n if (val > 0xfffffff || val < 0) {\n writeBigVarint(val, this);\n return;\n }\n\n this.realloc(4);\n\n this.buf[this.pos++] = val & 0x7f | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n this.buf[this.pos++] = (val >>> 7) & 0x7f;\n },\n\n writeSVarint: function(val) {\n this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);\n },\n\n writeBoolean: function(val) {\n this.writeVarint(Boolean(val));\n },\n\n writeString: function(str) {\n str = String(str);\n this.realloc(str.length * 4);\n\n this.pos++; // reserve 1 byte for short string length\n\n var startPos = this.pos;\n // write the string directly to the buffer and see how much was written\n this.pos = writeUtf8(this.buf, str, this.pos);\n var len = this.pos - startPos;\n\n if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n // finally, write the message length in the reserved place and restore the position\n this.pos = startPos - 1;\n this.writeVarint(len);\n this.pos += len;\n },\n\n writeFloat: function(val) {\n this.realloc(4);\n ieee754.write(this.buf, val, this.pos, true, 23, 4);\n this.pos += 4;\n },\n\n writeDouble: function(val) {\n this.realloc(8);\n ieee754.write(this.buf, val, this.pos, true, 52, 8);\n this.pos += 8;\n },\n\n writeBytes: function(buffer) {\n var len = buffer.length;\n this.writeVarint(len);\n this.realloc(len);\n for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];\n },\n\n writeRawMessage: function(fn, obj) {\n this.pos++; // reserve 1 byte for short message length\n\n // write the message directly to the buffer and see how much was written\n var startPos = this.pos;\n fn(obj, this);\n var len = this.pos - startPos;\n\n if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n // finally, write the message length in the reserved place and restore the position\n this.pos = startPos - 1;\n this.writeVarint(len);\n this.pos += len;\n },\n\n writeMessage: function(tag, fn, obj) {\n this.writeTag(tag, Pbf.Bytes);\n this.writeRawMessage(fn, obj);\n },\n\n writePackedVarint: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedVarint, arr); },\n writePackedSVarint: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSVarint, arr); },\n writePackedBoolean: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedBoolean, arr); },\n writePackedFloat: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFloat, arr); },\n writePackedDouble: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedDouble, arr); },\n writePackedFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed32, arr); },\n writePackedSFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed32, arr); },\n writePackedFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed64, arr); },\n writePackedSFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed64, arr); },\n\n writeBytesField: function(tag, buffer) {\n this.writeTag(tag, Pbf.Bytes);\n this.writeBytes(buffer);\n },\n writeFixed32Field: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed32);\n this.writeFixed32(val);\n },\n writeSFixed32Field: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed32);\n this.writeSFixed32(val);\n },\n writeFixed64Field: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed64);\n this.writeFixed64(val);\n },\n writeSFixed64Field: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed64);\n this.writeSFixed64(val);\n },\n writeVarintField: function(tag, val) {\n this.writeTag(tag, Pbf.Varint);\n this.writeVarint(val);\n },\n writeSVarintField: function(tag, val) {\n this.writeTag(tag, Pbf.Varint);\n this.writeSVarint(val);\n },\n writeStringField: function(tag, str) {\n this.writeTag(tag, Pbf.Bytes);\n this.writeString(str);\n },\n writeFloatField: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed32);\n this.writeFloat(val);\n },\n writeDoubleField: function(tag, val) {\n this.writeTag(tag, Pbf.Fixed64);\n this.writeDouble(val);\n },\n writeBooleanField: function(tag, val) {\n this.writeVarintField(tag, Boolean(val));\n }\n};\n\nfunction readVarintRemainder(l, s, p) {\n var buf = p.buf,\n h, b;\n\n b = buf[p.pos++]; h = (b & 0x70) >> 4; if (b < 0x80) return toNum(l, h, s);\n b = buf[p.pos++]; h |= (b & 0x7f) << 3; if (b < 0x80) return toNum(l, h, s);\n b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);\n b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);\n b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);\n b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);\n\n throw new Error('Expected varint not more than 10 bytes');\n}\n\nfunction readPackedEnd(pbf) {\n return pbf.type === Pbf.Bytes ?\n pbf.readVarint() + pbf.pos : pbf.pos + 1;\n}\n\nfunction toNum(low, high, isSigned) {\n if (isSigned) {\n return high * 0x100000000 + (low >>> 0);\n }\n\n return ((high >>> 0) * 0x100000000) + (low >>> 0);\n}\n\nfunction writeBigVarint(val, pbf) {\n var low, high;\n\n if (val >= 0) {\n low = (val % 0x100000000) | 0;\n high = (val / 0x100000000) | 0;\n } else {\n low = ~(-val % 0x100000000);\n high = ~(-val / 0x100000000);\n\n if (low ^ 0xffffffff) {\n low = (low + 1) | 0;\n } else {\n low = 0;\n high = (high + 1) | 0;\n }\n }\n\n if (val >= 0x10000000000000000 || val < -0x10000000000000000) {\n throw new Error('Given varint doesn\\'t fit into 10 bytes');\n }\n\n pbf.realloc(10);\n\n writeBigVarintLow(low, high, pbf);\n writeBigVarintHigh(high, pbf);\n}\n\nfunction writeBigVarintLow(low, high, pbf) {\n pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n pbf.buf[pbf.pos] = low & 0x7f;\n}\n\nfunction writeBigVarintHigh(high, pbf) {\n var lsb = (high & 0x07) << 4;\n\n pbf.buf[pbf.pos++] |= lsb | ((high >>>= 3) ? 0x80 : 0); if (!high) return;\n pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n pbf.buf[pbf.pos++] = high & 0x7f;\n}\n\nfunction makeRoomForExtraLength(startPos, len, pbf) {\n var extraLen =\n len <= 0x3fff ? 1 :\n len <= 0x1fffff ? 2 :\n len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7));\n\n // if 1 byte isn't enough for encoding message length, shift the data to the right\n pbf.realloc(extraLen);\n for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];\n}\n\nfunction writePackedVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]); }\nfunction writePackedSVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]); }\nfunction writePackedFloat(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]); }\nfunction writePackedDouble(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]); }\nfunction writePackedBoolean(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]); }\nfunction writePackedFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]); }\nfunction writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); }\nfunction writePackedFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]); }\nfunction writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); }\n\n// Buffer code below from https://github.com/feross/buffer, MIT-licensed\n\nfunction readUInt32(buf, pos) {\n return ((buf[pos]) |\n (buf[pos + 1] << 8) |\n (buf[pos + 2] << 16)) +\n (buf[pos + 3] * 0x1000000);\n}\n\nfunction writeInt32(buf, val, pos) {\n buf[pos] = val;\n buf[pos + 1] = (val >>> 8);\n buf[pos + 2] = (val >>> 16);\n buf[pos + 3] = (val >>> 24);\n}\n\nfunction readInt32(buf, pos) {\n return ((buf[pos]) |\n (buf[pos + 1] << 8) |\n (buf[pos + 2] << 16)) +\n (buf[pos + 3] << 24);\n}\n\nfunction readUtf8(buf, pos, end) {\n var str = '';\n var i = pos;\n\n while (i < end) {\n var b0 = buf[i];\n var c = null; // codepoint\n var bytesPerSequence =\n b0 > 0xEF ? 4 :\n b0 > 0xDF ? 3 :\n b0 > 0xBF ? 2 : 1;\n\n if (i + bytesPerSequence > end) break;\n\n var b1, b2, b3;\n\n if (bytesPerSequence === 1) {\n if (b0 < 0x80) {\n c = b0;\n }\n } else if (bytesPerSequence === 2) {\n b1 = buf[i + 1];\n if ((b1 & 0xC0) === 0x80) {\n c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);\n if (c <= 0x7F) {\n c = null;\n }\n }\n } else if (bytesPerSequence === 3) {\n b1 = buf[i + 1];\n b2 = buf[i + 2];\n if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {\n c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);\n if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {\n c = null;\n }\n }\n } else if (bytesPerSequence === 4) {\n b1 = buf[i + 1];\n b2 = buf[i + 2];\n b3 = buf[i + 3];\n if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);\n if (c <= 0xFFFF || c >= 0x110000) {\n c = null;\n }\n }\n }\n\n if (c === null) {\n c = 0xFFFD;\n bytesPerSequence = 1;\n\n } else if (c > 0xFFFF) {\n c -= 0x10000;\n str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);\n c = 0xDC00 | c & 0x3FF;\n }\n\n str += String.fromCharCode(c);\n i += bytesPerSequence;\n }\n\n return str;\n}\n\nfunction readUtf8TextDecoder(buf, pos, end) {\n return utf8TextDecoder.decode(buf.subarray(pos, end));\n}\n\nfunction writeUtf8(buf, str, pos) {\n for (var i = 0, c, lead; i < str.length; i++) {\n c = str.charCodeAt(i); // code point\n\n if (c > 0xD7FF && c < 0xE000) {\n if (lead) {\n if (c < 0xDC00) {\n buf[pos++] = 0xEF;\n buf[pos++] = 0xBF;\n buf[pos++] = 0xBD;\n lead = c;\n continue;\n } else {\n c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;\n lead = null;\n }\n } else {\n if (c > 0xDBFF || (i + 1 === str.length)) {\n buf[pos++] = 0xEF;\n buf[pos++] = 0xBF;\n buf[pos++] = 0xBD;\n } else {\n lead = c;\n }\n continue;\n }\n } else if (lead) {\n buf[pos++] = 0xEF;\n buf[pos++] = 0xBF;\n buf[pos++] = 0xBD;\n lead = null;\n }\n\n if (c < 0x80) {\n buf[pos++] = c;\n } else {\n if (c < 0x800) {\n buf[pos++] = c >> 0x6 | 0xC0;\n } else {\n if (c < 0x10000) {\n buf[pos++] = c >> 0xC | 0xE0;\n } else {\n buf[pos++] = c >> 0x12 | 0xF0;\n buf[pos++] = c >> 0xC & 0x3F | 0x80;\n }\n buf[pos++] = c >> 0x6 & 0x3F | 0x80;\n }\n buf[pos++] = c & 0x3F | 0x80;\n }\n }\n return pos;\n}\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","var toString = {}.toString;\nvar isType = function (value, type) { return toString.call(value) === '[object ' + type + ']'; };\nexport default isType;\n//# sourceMappingURL=is-type.js.map","// This icon file is generated automatically.\nvar PlusOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8z\" } }] }, \"name\": \"plus\", \"theme\": \"outlined\" };\nexport default PlusOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport PlusOutlinedSvg from \"@ant-design/icons-svg/es/asn/PlusOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar PlusOutlined = function PlusOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: PlusOutlinedSvg\n }));\n};\n\n/**![plus](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQ4MiAxNTJoNjBxOCAwIDggOHY3MDRxMCA4LTggOGgtNjBxLTggMC04LThWMTYwcTAtOCA4LTh6IiAvPjxwYXRoIGQ9Ik0xOTIgNDc0aDY3MnE4IDAgOCA4djYwcTAgOC04IDhIMTYwcS04IDAtOC04di02MHEwLTggOC04eiIgLz48L3N2Zz4=) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(PlusOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'PlusOutlined';\n}\nexport default RefIcon;","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","import UnitBezier from '@mapbox/unitbezier';\nexport const interpolates = {\n number: function number(from, to, t) {\n return from + t * (to - from);\n }\n};\n\n/**\n * constrain n to the given range via min + max\n *\n * @param n - value\n * @param min - the minimum value to be returned\n * @param max - the maximum value to be returned\n * @returns the clamped value\n */\nexport function clamp(n, min, max) {\n return Math.min(max, Math.max(min, n));\n}\n\n/**\n * constrain n to the given range, excluding the minimum, via modular arithmetic\n *\n * @param n - value\n * @param min - the minimum value to be returned, exclusive\n * @param max - the maximum value to be returned, inclusive\n * @returns constrained number\n */\nexport function wrap(n, min, max) {\n const d = max - min;\n const w = ((n - min) % d + d) % d + min;\n return w === min ? max : w;\n}\nlet id = 1;\n\n/**\n * Return a unique numeric id, starting at 1 and incrementing with\n * each call.\n *\n * @returns unique numeric id.\n */\nexport function uniqueId() {\n return id++;\n}\n\n/**\n * Given a destination object and optionally many source objects,\n * copy all properties from the source objects into the destination.\n * The last source object given overrides properties from previous\n * source objects.\n *\n * @param dest - destination object\n * @param sources - sources from which properties are pulled\n */\n\nexport function extend(dest, ...sources) {\n for (const src of sources) {\n for (const k in src) {\n dest[k] = src[k];\n }\n }\n return dest;\n}\n\n// See https://stackoverflow.com/questions/49401866/all-possible-keys-of-an-union-type\n\n/**\n * Given an object and a number of properties as strings, return version\n * of that object with only those properties.\n *\n * @param src - the object\n * @param properties - an array of property names chosen\n * to appear on the resulting object.\n * @returns object with limited properties.\n * @example\n * ```ts\n * let foo = { name: 'Charlie', age: 10 };\n * let justName = pick(foo, ['name']); // justName = { name: 'Charlie' }\n * ```\n */\nexport function pick(src, properties) {\n const result = {};\n for (let i = 0; i < properties.length; i++) {\n const k = properties[i];\n if (k in src) {\n result[k] = src[k];\n }\n }\n return result;\n}\n\n/**\n * Makes optional keys required and add the the undefined type.\n *\n * ```\n * interface Test {\n * foo: number;\n * bar?: number;\n * baz: number | undefined;\n * }\n *\n * Complete {\n * foo: number;\n * bar: number | undefined;\n * baz: number | undefined;\n * }\n *\n * ```\n *\n * See https://medium.com/terria/typescript-transforming-optional-properties-to-required-properties-that-may-be-undefined-7482cb4e1585\n */\n\n/**\n * Given given (x, y), (x1, y1) control points for a bezier curve,\n * return a function that interpolates along that curve.\n *\n * @param p1x - control point 1 x coordinate\n * @param p1y - control point 1 y coordinate\n * @param p2x - control point 2 x coordinate\n * @param p2y - control point 2 y coordinate\n */\nexport function bezier(p1x, p1y, p2x, p2y) {\n const bezier = new UnitBezier(p1x, p1y, p2x, p2y);\n return t => {\n return bezier.solve(t);\n };\n}\n\n/**\n * A default bezier-curve powered easing function with\n * control points (0.25, 0.1) and (0.25, 1)\n */\nexport const defaultEasing = bezier(0.25, 0.1, 0.25, 1);\n\n/**\n * Print a warning message to the console and ensure duplicate warning messages\n * are not printed.\n */\nconst warnOnceHistory = {};\nexport function warnOnce(message) {\n if (!warnOnceHistory[message]) {\n // console isn't defined in some WebWorkers, see #2558\n if (typeof console !== 'undefined') console.warn(message);\n warnOnceHistory[message] = true;\n }\n}\n\n/**\n * This method converts degrees to radians.\n * The return value is the radian value.\n * @param degrees - The number of degrees\n * @returns radians\n */\nexport function degreesToRadians(degrees) {\n return degrees * Math.PI / 180;\n}","export default function getEntity(keyEntities, key) {\n return keyEntities[key];\n}","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","export let lineStyleType = /*#__PURE__*/function (lineStyleType) {\n lineStyleType[lineStyleType[\"solid\"] = 0] = \"solid\";\n lineStyleType[lineStyleType[\"dash\"] = 1] = \"dash\";\n return lineStyleType;\n}({});\nexport let LinearDir = /*#__PURE__*/function (LinearDir) {\n LinearDir[\"VERTICAL\"] = \"vertical\";\n LinearDir[\"HORIZONTAL\"] = \"horizontal\";\n return LinearDir;\n}({});\nexport let TextureBlend = /*#__PURE__*/function (TextureBlend) {\n TextureBlend[\"NORMAL\"] = \"normal\";\n TextureBlend[\"REPLACE\"] = \"replace\";\n return TextureBlend;\n}({});\n/**\n * 基础图层类型定义\n */\n\nexport let SizeUnitType = /*#__PURE__*/function (SizeUnitType) {\n SizeUnitType[SizeUnitType[\"pixel\"] = 0] = \"pixel\";\n SizeUnitType[SizeUnitType[\"meter\"] = 1] = \"meter\";\n return SizeUnitType;\n}({});\n\n// 栅格瓦片图层\n\nexport let CanvasUpdateType = /*#__PURE__*/function (CanvasUpdateType) {\n CanvasUpdateType[\"ALWAYS\"] = \"always\";\n CanvasUpdateType[\"DRAGEND\"] = \"dragend\";\n return CanvasUpdateType;\n}({});","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport { createMat4 } from './math-utils';\nimport { worldToPixels, pixelsToWorld } from './web-mercator-utils';\nimport * as mat4 from 'gl-matrix/mat4';\nvar IDENTITY = createMat4();\n\nvar Viewport = function () {\n function Viewport() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n width = _ref.width,\n height = _ref.height,\n _ref$viewMatrix = _ref.viewMatrix,\n viewMatrix = _ref$viewMatrix === void 0 ? IDENTITY : _ref$viewMatrix,\n _ref$projectionMatrix = _ref.projectionMatrix,\n projectionMatrix = _ref$projectionMatrix === void 0 ? IDENTITY : _ref$projectionMatrix;\n\n _classCallCheck(this, Viewport);\n\n this.width = width || 1;\n this.height = height || 1;\n this.scale = 1;\n this.pixelsPerMeter = 1;\n this.viewMatrix = viewMatrix;\n this.projectionMatrix = projectionMatrix;\n var vpm = createMat4();\n mat4.multiply(vpm, vpm, this.projectionMatrix);\n mat4.multiply(vpm, vpm, this.viewMatrix);\n this.viewProjectionMatrix = vpm;\n var m = createMat4();\n mat4.scale(m, m, [this.width / 2, -this.height / 2, 1]);\n mat4.translate(m, m, [1, -1, 0]);\n mat4.multiply(m, m, this.viewProjectionMatrix);\n var mInverse = mat4.invert(createMat4(), m);\n\n if (!mInverse) {\n throw new Error('Pixel project matrix not invertible');\n }\n\n this.pixelProjectionMatrix = m;\n this.pixelUnprojectionMatrix = mInverse;\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\n _createClass(Viewport, [{\n key: \"equals\",\n value: function equals(viewport) {\n if (!(viewport instanceof Viewport)) {\n return false;\n }\n\n return viewport.width === this.width && viewport.height === this.height && mat4.equals(viewport.projectionMatrix, this.projectionMatrix) && mat4.equals(viewport.viewMatrix, this.viewMatrix);\n }\n }, {\n key: \"project\",\n value: function project(xyz) {\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref2$topLeft = _ref2.topLeft,\n topLeft = _ref2$topLeft === void 0 ? true : _ref2$topLeft;\n\n var worldPosition = this.projectPosition(xyz);\n var coord = worldToPixels(worldPosition, this.pixelProjectionMatrix);\n\n var _coord = _slicedToArray(coord, 2),\n x = _coord[0],\n y = _coord[1];\n\n var y2 = topLeft ? y : this.height - y;\n return xyz.length === 2 ? [x, y2] : [x, y2, coord[2]];\n }\n }, {\n key: \"unproject\",\n value: function unproject(xyz) {\n var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref3$topLeft = _ref3.topLeft,\n topLeft = _ref3$topLeft === void 0 ? true : _ref3$topLeft,\n targetZ = _ref3.targetZ;\n\n var _xyz = _slicedToArray(xyz, 3),\n x = _xyz[0],\n y = _xyz[1],\n z = _xyz[2];\n\n var y2 = topLeft ? y : this.height - y;\n var targetZWorld = targetZ && targetZ * this.pixelsPerMeter;\n var coord = pixelsToWorld([x, y2, z], this.pixelUnprojectionMatrix, targetZWorld);\n\n var _this$unprojectPositi = this.unprojectPosition(coord),\n _this$unprojectPositi2 = _slicedToArray(_this$unprojectPositi, 3),\n X = _this$unprojectPositi2[0],\n Y = _this$unprojectPositi2[1],\n Z = _this$unprojectPositi2[2];\n\n if (Number.isFinite(z)) {\n return [X, Y, Z];\n }\n\n return Number.isFinite(targetZ) ? [X, Y, targetZ] : [X, Y];\n }\n }, {\n key: \"projectPosition\",\n value: function projectPosition(xyz) {\n var _this$projectFlat = this.projectFlat(xyz),\n _this$projectFlat2 = _slicedToArray(_this$projectFlat, 2),\n X = _this$projectFlat2[0],\n Y = _this$projectFlat2[1];\n\n var Z = (xyz[2] || 0) * this.pixelsPerMeter;\n return [X, Y, Z];\n }\n }, {\n key: \"unprojectPosition\",\n value: function unprojectPosition(xyz) {\n var _this$unprojectFlat = this.unprojectFlat(xyz),\n _this$unprojectFlat2 = _slicedToArray(_this$unprojectFlat, 2),\n X = _this$unprojectFlat2[0],\n Y = _this$unprojectFlat2[1];\n\n var Z = (xyz[2] || 0) / this.pixelsPerMeter;\n return [X, Y, Z];\n }\n }, {\n key: \"projectFlat\",\n value: function projectFlat(xyz) {\n var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.scale;\n return xyz;\n }\n }, {\n key: \"unprojectFlat\",\n value: function unprojectFlat(xyz) {\n var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.scale;\n return xyz;\n }\n }]);\n\n return Viewport;\n}();\n\nexport { Viewport as default };\n//# sourceMappingURL=viewport.js.map","/* eslint-disable */\nwindow._iconfont_svg_string_3580659 = '', function (t) {\n try {\n var a = (a = document.getElementsByTagName('script'))[a.length - 1],\n l = a.getAttribute('data-injectcss'),\n a = a.getAttribute('data-disable-injectsvg');\n if (!a) {\n var o,\n e,\n i,\n n,\n m,\n c = function (a, l) {\n l.parentNode.insertBefore(a, l);\n };\n if (l && !t.__iconfont__svg__cssinject__) {\n t.__iconfont__svg__cssinject__ = !0;\n try {\n document.write('');\n } catch (a) {\n console && console.log(a);\n }\n }\n o = function () {\n var a,\n l = document.createElement('div');\n l.innerHTML = t._iconfont_svg_string_3580659, (l = l.getElementsByTagName('svg')[0]) && (l.setAttribute('aria-hidden', 'true'), l.style.position = 'absolute', l.style.width = 0, l.style.height = 0, l.style.overflow = 'hidden', l = l, (a = document.body).firstChild ? c(l, a.firstChild) : a.appendChild(l));\n }, document.addEventListener ? ~['complete', 'loaded', 'interactive'].indexOf(document.readyState) ? setTimeout(o, 0) : (e = function () {\n document.removeEventListener('DOMContentLoaded', e, !1), o();\n }, document.addEventListener('DOMContentLoaded', e, !1)) : document.attachEvent && (i = o, n = t.document, m = !1, L(), n.onreadystatechange = function () {\n 'complete' == n.readyState && (n.onreadystatechange = null, d());\n });\n }\n function d() {\n m || (m = !0, i());\n }\n function L() {\n try {\n n.documentElement.doScroll('left');\n } catch (a) {\n return void setTimeout(L, 50);\n }\n d();\n }\n } catch (e) {}\n}(window);","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","/*! 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","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","\"use strict\";\n\nmodule.exports = function(idHandler) {\n var eventListeners = {};\n\n /**\n * Gets all listeners for the given element.\n * @public\n * @param {element} element The element to get all listeners for.\n * @returns All listeners for the given element.\n */\n function getListeners(element) {\n var id = idHandler.get(element);\n\n if (id === undefined) {\n return [];\n }\n\n return eventListeners[id] || [];\n }\n\n /**\n * Stores the given listener for the given element. Will not actually add the listener to the element.\n * @public\n * @param {element} element The element that should have the listener added.\n * @param {function} listener The callback that the element has added.\n */\n function addListener(element, listener) {\n var id = idHandler.get(element);\n\n if(!eventListeners[id]) {\n eventListeners[id] = [];\n }\n\n eventListeners[id].push(listener);\n }\n\n function removeListener(element, listener) {\n var listeners = getListeners(element);\n for (var i = 0, len = listeners.length; i < len; ++i) {\n if (listeners[i] === listener) {\n listeners.splice(i, 1);\n break;\n }\n }\n }\n\n function removeAllListeners(element) {\n var listeners = getListeners(element);\n if (!listeners) { return; }\n listeners.length = 0;\n }\n\n return {\n get: getListeners,\n add: addListener,\n removeListener: removeListener,\n removeAllListeners: removeAllListeners\n };\n};\n","'use strict';(function(m,p){\"object\"===typeof exports&&\"undefined\"!==typeof module?module.exports=p():\"function\"===typeof define&&define.amd?define(p):(m=m||self,m.AMapLoader=p())})(this,function(){function m(a){var b=[];a.AMapUI&&b.push(p(a.AMapUI));a.Loca&&b.push(r(a.Loca));return Promise.all(b)}function p(a){return new Promise(function(h,c){var f=[];if(a.plugins)for(var e=0;e 0 && arguments[0] !== undefined ? arguments[0] : {},\n mark = _ref.mark;\n if (mark) {\n return mark.startsWith('data-') ? mark : \"data-\".concat(mark);\n }\n return MARK_KEY;\n}\nfunction getContainer(option) {\n if (option.attachTo) {\n return option.attachTo;\n }\n var head = document.querySelector('head');\n return head || document.body;\n}\nfunction getOrder(prepend) {\n if (prepend === 'queue') {\n return 'prependQueue';\n }\n return prepend ? 'prepend' : 'append';\n}\n\n/**\n * Find style which inject by rc-util\n */\nfunction findStyles(container) {\n return Array.from((containerCache.get(container) || container).children).filter(function (node) {\n return node.tagName === 'STYLE';\n });\n}\nfunction injectCSS(css) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!(0, _canUseDom.default)()) {\n return null;\n }\n var csp = option.csp,\n prepend = option.prepend,\n _option$priority = option.priority,\n priority = _option$priority === void 0 ? 0 : _option$priority;\n var mergedOrder = getOrder(prepend);\n var isPrependQueue = mergedOrder === 'prependQueue';\n var styleNode = document.createElement('style');\n styleNode.setAttribute(APPEND_ORDER, mergedOrder);\n if (isPrependQueue && priority) {\n styleNode.setAttribute(APPEND_PRIORITY, \"\".concat(priority));\n }\n if (csp !== null && csp !== void 0 && csp.nonce) {\n styleNode.nonce = csp === null || csp === void 0 ? void 0 : csp.nonce;\n }\n styleNode.innerHTML = css;\n var container = getContainer(option);\n var firstChild = container.firstChild;\n if (prepend) {\n // If is queue `prepend`, it will prepend first style and then append rest style\n if (isPrependQueue) {\n var existStyle = (option.styles || findStyles(container)).filter(function (node) {\n // Ignore style which not injected by rc-util with prepend\n if (!['prepend', 'prependQueue'].includes(node.getAttribute(APPEND_ORDER))) {\n return false;\n }\n\n // Ignore style which priority less then new style\n var nodePriority = Number(node.getAttribute(APPEND_PRIORITY) || 0);\n return priority >= nodePriority;\n });\n if (existStyle.length) {\n container.insertBefore(styleNode, existStyle[existStyle.length - 1].nextSibling);\n return styleNode;\n }\n }\n\n // Use `insertBefore` as `prepend`\n container.insertBefore(styleNode, firstChild);\n } else {\n container.appendChild(styleNode);\n }\n return styleNode;\n}\nfunction findExistNode(key) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var container = getContainer(option);\n return (option.styles || findStyles(container)).find(function (node) {\n return node.getAttribute(getMark(option)) === key;\n });\n}\nfunction removeCSS(key) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var existNode = findExistNode(key, option);\n if (existNode) {\n var container = getContainer(option);\n container.removeChild(existNode);\n }\n}\n\n/**\n * qiankun will inject `appendChild` to insert into other\n */\nfunction syncRealContainer(container, option) {\n var cachedRealContainer = containerCache.get(container);\n\n // Find real container when not cached or cached container removed\n if (!cachedRealContainer || !(0, _contains.default)(document, cachedRealContainer)) {\n var placeholderStyle = injectCSS('', option);\n var parentNode = placeholderStyle.parentNode;\n containerCache.set(container, parentNode);\n container.removeChild(placeholderStyle);\n }\n}\n\n/**\n * manually clear container cache to avoid global cache in unit testes\n */\nfunction clearContainerCache() {\n containerCache.clear();\n}\nfunction updateCSS(css, key) {\n var originOption = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var container = getContainer(originOption);\n var styles = findStyles(container);\n var option = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originOption), {}, {\n styles: styles\n });\n\n // Sync real parent\n syncRealContainer(container, option);\n var existNode = findExistNode(key, option);\n if (existNode) {\n var _option$csp, _option$csp2;\n if ((_option$csp = option.csp) !== null && _option$csp !== void 0 && _option$csp.nonce && existNode.nonce !== ((_option$csp2 = option.csp) === null || _option$csp2 === void 0 ? void 0 : _option$csp2.nonce)) {\n var _option$csp3;\n existNode.nonce = (_option$csp3 = option.csp) === null || _option$csp3 === void 0 ? void 0 : _option$csp3.nonce;\n }\n if (existNode.innerHTML !== css) {\n existNode.innerHTML = css;\n }\n return existNode;\n }\n var newNode = injectCSS(css, option);\n newNode.setAttribute(getMark(option), key);\n return newNode;\n}","import * as React from 'react';\n// TODO: Remove when use `responsiveImmutable`\nvar PerfContext = /*#__PURE__*/React.createContext({\n renderWithProps: false\n});\nexport default PerfContext;","import { __extends, __read, __spreadArray } from \"tslib\";\nimport { ElementEvent } from '@antv/g';\nimport { Group } from '../shapes/Group';\nimport { hide } from './visibility';\nvar OffscreenGroup = /** @class */ (function (_super) {\n __extends(OffscreenGroup, _super);\n function OffscreenGroup() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var _this = _super.apply(this, __spreadArray([], __read(args), false)) || this;\n _this.isMutationObserved = true;\n _this.addEventListener(ElementEvent.INSERTED, function () {\n hide(_this);\n });\n return _this;\n }\n return OffscreenGroup;\n}(Group));\nexport function createOffscreenGroup(container) {\n var group = container.appendChild(new OffscreenGroup({\n class: 'offscreen',\n }));\n hide(group);\n return group;\n}\nexport function isInOffscreenGroup(group) {\n var ancestor = group;\n while (ancestor) {\n if (ancestor.className === 'offscreen') {\n return true;\n }\n ancestor = ancestor.parent;\n }\n return false;\n}\n//# sourceMappingURL=offscreen.js.map","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport * as React from 'react';\nexport var SEARCH_MARK = '__rc_cascader_search_mark__';\nvar defaultFilter = function defaultFilter(search, options, _ref) {\n var _ref$label = _ref.label,\n label = _ref$label === void 0 ? '' : _ref$label;\n return options.some(function (opt) {\n return String(opt[label]).toLowerCase().includes(search.toLowerCase());\n });\n};\nvar defaultRender = function defaultRender(inputValue, path, prefixCls, fieldNames) {\n return path.map(function (opt) {\n return opt[fieldNames.label];\n }).join(' / ');\n};\nvar useSearchOptions = function useSearchOptions(search, options, fieldNames, prefixCls, config, enableHalfPath) {\n var _config$filter = config.filter,\n filter = _config$filter === void 0 ? defaultFilter : _config$filter,\n _config$render = config.render,\n render = _config$render === void 0 ? defaultRender : _config$render,\n _config$limit = config.limit,\n limit = _config$limit === void 0 ? 50 : _config$limit,\n sort = config.sort;\n return React.useMemo(function () {\n var filteredOptions = [];\n if (!search) {\n return [];\n }\n function dig(list, pathOptions) {\n var parentDisabled = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n list.forEach(function (option) {\n // Perf saving when `sort` is disabled and `limit` is provided\n if (!sort && limit !== false && limit > 0 && filteredOptions.length >= limit) {\n return;\n }\n var connectedPathOptions = [].concat(_toConsumableArray(pathOptions), [option]);\n var children = option[fieldNames.children];\n var mergedDisabled = parentDisabled || option.disabled;\n\n // If current option is filterable\n if (\n // If is leaf option\n !children || children.length === 0 ||\n // If is changeOnSelect or multiple\n enableHalfPath) {\n if (filter(search, connectedPathOptions, {\n label: fieldNames.label\n })) {\n var _objectSpread2;\n filteredOptions.push(_objectSpread(_objectSpread({}, option), {}, (_objectSpread2 = {\n disabled: mergedDisabled\n }, _defineProperty(_objectSpread2, fieldNames.label, render(search, connectedPathOptions, prefixCls, fieldNames)), _defineProperty(_objectSpread2, SEARCH_MARK, connectedPathOptions), _defineProperty(_objectSpread2, fieldNames.children, undefined), _objectSpread2)));\n }\n }\n if (children) {\n dig(option[fieldNames.children], connectedPathOptions, mergedDisabled);\n }\n });\n }\n dig(options, []);\n\n // Do sort\n if (sort) {\n filteredOptions.sort(function (a, b) {\n return sort(a[SEARCH_MARK], b[SEARCH_MARK], search, fieldNames);\n });\n }\n return limit !== false && limit > 0 ? filteredOptions.slice(0, limit) : filteredOptions;\n }, [search, options, fieldNames, prefixCls, render, enableHalfPath, filter, sort, limit]);\n};\nexport default useSearchOptions;","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","\"use strict\";\n\nvar utils = module.exports = {};\n\nutils.getOption = getOption;\n\nfunction getOption(options, name, defaultValue) {\n var value = options[name];\n\n if((value === undefined || value === null) && defaultValue !== undefined) {\n return defaultValue;\n }\n\n return value;\n}\n","\"use strict\";\n\n/* global console: false */\n\n/**\n * Reporter that handles the reporting of logs, warnings and errors.\n * @public\n * @param {boolean} quiet Tells if the reporter should be quiet or not.\n */\nmodule.exports = function(quiet) {\n function noop() {\n //Does nothing.\n }\n\n var reporter = {\n log: noop,\n warn: noop,\n error: noop\n };\n\n if(!quiet && window.console) {\n var attachFunction = function(reporter, name) {\n //The proxy is needed to be able to call the method with the console context,\n //since we cannot use bind.\n reporter[name] = function reporterProxy() {\n var f = console[name];\n if (f.apply) { //IE9 does not support console.log.apply :)\n f.apply(console, arguments);\n } else {\n for (var i = 0; i < arguments.length; i++) {\n f(arguments[i]);\n }\n }\n };\n };\n\n attachFunction(reporter, \"log\");\n attachFunction(reporter, \"warn\");\n attachFunction(reporter, \"error\");\n }\n\n return reporter;\n};","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","import * as React from 'react';\nimport { pickProps } from \"../../../utils/miscUtil\";\nvar propNames = ['onMouseEnter', 'onMouseLeave'];\nexport default function useRootProps(props) {\n return React.useMemo(function () {\n return pickProps(props, propNames);\n }, [props]);\n}","/* eslint-disable max-classes-per-file */\n\nimport BigIntDecimal from \"./BigIntDecimal\";\nimport NumberDecimal from \"./NumberDecimal\";\nimport { trimNumber } from \"./numberUtil\";\nimport { supportBigInt } from \"./supportUtil\";\n\n// Still support origin export\nexport { NumberDecimal, BigIntDecimal };\nexport default function getMiniDecimal(value) {\n // We use BigInt here.\n // Will fallback to Number if not support.\n if (supportBigInt()) {\n return new BigIntDecimal(value);\n }\n return new NumberDecimal(value);\n}\n\n/**\n * Align the logic of toFixed to around like 1.5 => 2.\n * If set `cutOnly`, will just remove the over decimal part.\n */\nexport function toFixed(numStr, separatorStr, precision) {\n var cutOnly = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (numStr === '') {\n return '';\n }\n var _trimNumber = trimNumber(numStr),\n negativeStr = _trimNumber.negativeStr,\n integerStr = _trimNumber.integerStr,\n decimalStr = _trimNumber.decimalStr;\n var precisionDecimalStr = \"\".concat(separatorStr).concat(decimalStr);\n var numberWithoutDecimal = \"\".concat(negativeStr).concat(integerStr);\n if (precision >= 0) {\n // We will get last + 1 number to check if need advanced number\n var advancedNum = Number(decimalStr[precision]);\n if (advancedNum >= 5 && !cutOnly) {\n var advancedDecimal = getMiniDecimal(numStr).add(\"\".concat(negativeStr, \"0.\").concat('0'.repeat(precision)).concat(10 - advancedNum));\n return toFixed(advancedDecimal.toString(), separatorStr, precision, cutOnly);\n }\n if (precision === 0) {\n return numberWithoutDecimal;\n }\n return \"\".concat(numberWithoutDecimal).concat(separatorStr).concat(decimalStr.padEnd(precision, '0').slice(0, precision));\n }\n if (precisionDecimalStr === '.0') {\n return numberWithoutDecimal;\n }\n return \"\".concat(numberWithoutDecimal).concat(precisionDecimalStr);\n}","export function supportBigInt() {\n return typeof BigInt === 'function';\n}","import { supportBigInt } from \"./supportUtil\";\nexport function isEmpty(value) {\n return !value && value !== 0 && !Number.isNaN(value) || !String(value).trim();\n}\n\n/**\n * Format string number to readable number\n */\nexport function trimNumber(numStr) {\n var str = numStr.trim();\n var negative = str.startsWith('-');\n if (negative) {\n str = str.slice(1);\n }\n str = str\n // Remove decimal 0. `1.000` => `1.`, `1.100` => `1.1`\n .replace(/(\\.\\d*[^0])0*$/, '$1')\n // Remove useless decimal. `1.` => `1`\n .replace(/\\.0*$/, '')\n // Remove integer 0. `0001` => `1`, 000.1' => `.1`\n .replace(/^0+/, '');\n if (str.startsWith('.')) {\n str = \"0\".concat(str);\n }\n var trimStr = str || '0';\n var splitNumber = trimStr.split('.');\n var integerStr = splitNumber[0] || '0';\n var decimalStr = splitNumber[1] || '0';\n if (integerStr === '0' && decimalStr === '0') {\n negative = false;\n }\n var negativeStr = negative ? '-' : '';\n return {\n negative: negative,\n negativeStr: negativeStr,\n trimStr: trimStr,\n integerStr: integerStr,\n decimalStr: decimalStr,\n fullStr: \"\".concat(negativeStr).concat(trimStr)\n };\n}\nexport function isE(number) {\n var str = String(number);\n return !Number.isNaN(Number(str)) && str.includes('e');\n}\n\n/**\n * [Legacy] Convert 1e-9 to 0.000000001.\n * This may lose some precision if user really want 1e-9.\n */\nexport function getNumberPrecision(number) {\n var numStr = String(number);\n if (isE(number)) {\n var precision = Number(numStr.slice(numStr.indexOf('e-') + 2));\n var decimalMatch = numStr.match(/\\.(\\d+)/);\n if (decimalMatch !== null && decimalMatch !== void 0 && decimalMatch[1]) {\n precision += decimalMatch[1].length;\n }\n return precision;\n }\n return numStr.includes('.') && validateNumber(numStr) ? numStr.length - numStr.indexOf('.') - 1 : 0;\n}\n\n/**\n * Convert number (includes scientific notation) to -xxx.yyy format\n */\nexport function num2str(number) {\n var numStr = String(number);\n if (isE(number)) {\n if (number > Number.MAX_SAFE_INTEGER) {\n return String(supportBigInt() ? BigInt(number).toString() : Number.MAX_SAFE_INTEGER);\n }\n if (number < Number.MIN_SAFE_INTEGER) {\n return String(supportBigInt() ? BigInt(number).toString() : Number.MIN_SAFE_INTEGER);\n }\n numStr = number.toFixed(getNumberPrecision(numStr));\n }\n return trimNumber(numStr).fullStr;\n}\nexport function validateNumber(num) {\n if (typeof num === 'number') {\n return !Number.isNaN(num);\n }\n\n // Empty\n if (!num) {\n return false;\n }\n return (\n // Normal type: 11.28\n /^\\s*-?\\d+(\\.\\d+)?\\s*$/.test(num) ||\n // Pre-number: 1.\n /^\\s*-?\\d+\\.\\s*$/.test(num) ||\n // Post-number: .1\n /^\\s*-?\\.\\d+\\s*$/.test(num)\n );\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { isE, isEmpty, num2str, trimNumber, validateNumber } from \"./numberUtil\";\nvar BigIntDecimal = /*#__PURE__*/function () {\n /** BigInt will convert `0009` to `9`. We need record the len of decimal */\n\n function BigIntDecimal(value) {\n _classCallCheck(this, BigIntDecimal);\n _defineProperty(this, \"origin\", '');\n _defineProperty(this, \"negative\", void 0);\n _defineProperty(this, \"integer\", void 0);\n _defineProperty(this, \"decimal\", void 0);\n _defineProperty(this, \"decimalLen\", void 0);\n _defineProperty(this, \"empty\", void 0);\n _defineProperty(this, \"nan\", void 0);\n if (isEmpty(value)) {\n this.empty = true;\n return;\n }\n this.origin = String(value);\n\n // Act like Number convert\n if (value === '-' || Number.isNaN(value)) {\n this.nan = true;\n return;\n }\n var mergedValue = value;\n\n // We need convert back to Number since it require `toFixed` to handle this\n if (isE(mergedValue)) {\n mergedValue = Number(mergedValue);\n }\n mergedValue = typeof mergedValue === 'string' ? mergedValue : num2str(mergedValue);\n if (validateNumber(mergedValue)) {\n var trimRet = trimNumber(mergedValue);\n this.negative = trimRet.negative;\n var numbers = trimRet.trimStr.split('.');\n this.integer = BigInt(numbers[0]);\n var decimalStr = numbers[1] || '0';\n this.decimal = BigInt(decimalStr);\n this.decimalLen = decimalStr.length;\n } else {\n this.nan = true;\n }\n }\n _createClass(BigIntDecimal, [{\n key: \"getMark\",\n value: function getMark() {\n return this.negative ? '-' : '';\n }\n }, {\n key: \"getIntegerStr\",\n value: function getIntegerStr() {\n return this.integer.toString();\n }\n\n /**\n * @private get decimal string\n */\n }, {\n key: \"getDecimalStr\",\n value: function getDecimalStr() {\n return this.decimal.toString().padStart(this.decimalLen, '0');\n }\n\n /**\n * @private Align BigIntDecimal with same decimal length. e.g. 12.3 + 5 = 1230000\n * This is used for add function only.\n */\n }, {\n key: \"alignDecimal\",\n value: function alignDecimal(decimalLength) {\n var str = \"\".concat(this.getMark()).concat(this.getIntegerStr()).concat(this.getDecimalStr().padEnd(decimalLength, '0'));\n return BigInt(str);\n }\n }, {\n key: \"negate\",\n value: function negate() {\n var clone = new BigIntDecimal(this.toString());\n clone.negative = !clone.negative;\n return clone;\n }\n }, {\n key: \"cal\",\n value: function cal(offset, calculator, calDecimalLen) {\n var maxDecimalLength = Math.max(this.getDecimalStr().length, offset.getDecimalStr().length);\n var myAlignedDecimal = this.alignDecimal(maxDecimalLength);\n var offsetAlignedDecimal = offset.alignDecimal(maxDecimalLength);\n var valueStr = calculator(myAlignedDecimal, offsetAlignedDecimal).toString();\n var nextDecimalLength = calDecimalLen(maxDecimalLength);\n\n // We need fill string length back to `maxDecimalLength` to avoid parser failed\n var _trimNumber = trimNumber(valueStr),\n negativeStr = _trimNumber.negativeStr,\n trimStr = _trimNumber.trimStr;\n var hydrateValueStr = \"\".concat(negativeStr).concat(trimStr.padStart(nextDecimalLength + 1, '0'));\n return new BigIntDecimal(\"\".concat(hydrateValueStr.slice(0, -nextDecimalLength), \".\").concat(hydrateValueStr.slice(-nextDecimalLength)));\n }\n }, {\n key: \"add\",\n value: function add(value) {\n if (this.isInvalidate()) {\n return new BigIntDecimal(value);\n }\n var offset = new BigIntDecimal(value);\n if (offset.isInvalidate()) {\n return this;\n }\n return this.cal(offset, function (num1, num2) {\n return num1 + num2;\n }, function (len) {\n return len;\n });\n }\n }, {\n key: \"multi\",\n value: function multi(value) {\n var target = new BigIntDecimal(value);\n if (this.isInvalidate() || target.isInvalidate()) {\n return new BigIntDecimal(NaN);\n }\n return this.cal(target, function (num1, num2) {\n return num1 * num2;\n }, function (len) {\n return len * 2;\n });\n }\n }, {\n key: \"isEmpty\",\n value: function isEmpty() {\n return this.empty;\n }\n }, {\n key: \"isNaN\",\n value: function isNaN() {\n return this.nan;\n }\n }, {\n key: \"isInvalidate\",\n value: function isInvalidate() {\n return this.isEmpty() || this.isNaN();\n }\n }, {\n key: \"equals\",\n value: function equals(target) {\n return this.toString() === (target === null || target === void 0 ? void 0 : target.toString());\n }\n }, {\n key: \"lessEquals\",\n value: function lessEquals(target) {\n return this.add(target.negate().toString()).toNumber() <= 0;\n }\n }, {\n key: \"toNumber\",\n value: function toNumber() {\n if (this.isNaN()) {\n return NaN;\n }\n return Number(this.toString());\n }\n }, {\n key: \"toString\",\n value: function toString() {\n var safe = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n if (!safe) {\n return this.origin;\n }\n if (this.isInvalidate()) {\n return '';\n }\n return trimNumber(\"\".concat(this.getMark()).concat(this.getIntegerStr(), \".\").concat(this.getDecimalStr())).fullStr;\n }\n }]);\n return BigIntDecimal;\n}();\nexport { BigIntDecimal as default };","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { getNumberPrecision, isEmpty, num2str } from \"./numberUtil\";\n\n/**\n * We can remove this when IE not support anymore\n */\nvar NumberDecimal = /*#__PURE__*/function () {\n function NumberDecimal(value) {\n _classCallCheck(this, NumberDecimal);\n _defineProperty(this, \"origin\", '');\n _defineProperty(this, \"number\", void 0);\n _defineProperty(this, \"empty\", void 0);\n if (isEmpty(value)) {\n this.empty = true;\n return;\n }\n this.origin = String(value);\n this.number = Number(value);\n }\n _createClass(NumberDecimal, [{\n key: \"negate\",\n value: function negate() {\n return new NumberDecimal(-this.toNumber());\n }\n }, {\n key: \"add\",\n value: function add(value) {\n if (this.isInvalidate()) {\n return new NumberDecimal(value);\n }\n var target = Number(value);\n if (Number.isNaN(target)) {\n return this;\n }\n var number = this.number + target;\n\n // [Legacy] Back to safe integer\n if (number > Number.MAX_SAFE_INTEGER) {\n return new NumberDecimal(Number.MAX_SAFE_INTEGER);\n }\n if (number < Number.MIN_SAFE_INTEGER) {\n return new NumberDecimal(Number.MIN_SAFE_INTEGER);\n }\n var maxPrecision = Math.max(getNumberPrecision(this.number), getNumberPrecision(target));\n return new NumberDecimal(number.toFixed(maxPrecision));\n }\n }, {\n key: \"multi\",\n value: function multi(value) {\n var target = Number(value);\n if (this.isInvalidate() || Number.isNaN(target)) {\n return new NumberDecimal(NaN);\n }\n var number = this.number * target;\n\n // [Legacy] Back to safe integer\n if (number > Number.MAX_SAFE_INTEGER) {\n return new NumberDecimal(Number.MAX_SAFE_INTEGER);\n }\n if (number < Number.MIN_SAFE_INTEGER) {\n return new NumberDecimal(Number.MIN_SAFE_INTEGER);\n }\n var maxPrecision = Math.max(getNumberPrecision(this.number), getNumberPrecision(target));\n return new NumberDecimal(number.toFixed(maxPrecision));\n }\n }, {\n key: \"isEmpty\",\n value: function isEmpty() {\n return this.empty;\n }\n }, {\n key: \"isNaN\",\n value: function isNaN() {\n return Number.isNaN(this.number);\n }\n }, {\n key: \"isInvalidate\",\n value: function isInvalidate() {\n return this.isEmpty() || this.isNaN();\n }\n }, {\n key: \"equals\",\n value: function equals(target) {\n return this.toNumber() === (target === null || target === void 0 ? void 0 : target.toNumber());\n }\n }, {\n key: \"lessEquals\",\n value: function lessEquals(target) {\n return this.add(target.negate().toString()).toNumber() <= 0;\n }\n }, {\n key: \"toNumber\",\n value: function toNumber() {\n return this.number;\n }\n }, {\n key: \"toString\",\n value: function toString() {\n var safe = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n if (!safe) {\n return this.origin;\n }\n if (this.isInvalidate()) {\n return '';\n }\n return num2str(this.number);\n }\n }]);\n return NumberDecimal;\n}();\nexport { NumberDecimal as default };","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"transform\", \"actionRender\", \"creatorButtonProps\", \"label\", \"alwaysShowItemLabel\", \"tooltip\", \"creatorRecord\", \"itemRender\", \"rules\", \"itemContainerRender\", \"fieldExtraRender\", \"copyIconProps\", \"children\", \"deleteIconProps\", \"actionRef\", \"style\", \"prefixCls\", \"actionGuard\", \"min\", \"max\", \"colProps\", \"wrapperCol\", \"rowProps\", \"onAfterAdd\", \"onAfterRemove\", \"isValidateList\", \"emptyListMessage\", \"className\", \"containerClassName\", \"containerStyle\", \"readonly\"];\nimport { CopyOutlined, DeleteOutlined } from '@ant-design/icons';\nimport { useIntl } from '@ant-design/pro-provider';\nimport { ProFormContext } from '@ant-design/pro-utils';\nimport { ConfigProvider, Form } from 'antd';\nimport classNames from 'classnames';\nimport { noteOnce } from \"rc-util/es/warning\";\nimport React, { useContext, useEffect, useImperativeHandle, useMemo, useRef } from 'react';\nimport FieldContext from \"../../FieldContext\";\nimport { useGridHelpers } from \"../../helpers\";\nimport { ProFormListContainer } from \"./ListContainer\";\nimport { useStyle } from \"./style\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar FormListContext = /*#__PURE__*/React.createContext({});\nfunction ProFormList(props) {\n var actionRefs = useRef();\n var context = useContext(ConfigProvider.ConfigContext);\n var listContext = useContext(FormListContext);\n var baseClassName = context.getPrefixCls('pro-form-list');\n // Internationalization\n var intl = useIntl();\n /** 从 context 中拿到的值 */\n var _React$useContext = React.useContext(FieldContext),\n setFieldValueType = _React$useContext.setFieldValueType;\n var transform = props.transform,\n actionRender = props.actionRender,\n creatorButtonProps = props.creatorButtonProps,\n label = props.label,\n alwaysShowItemLabel = props.alwaysShowItemLabel,\n tooltip = props.tooltip,\n creatorRecord = props.creatorRecord,\n itemRender = props.itemRender,\n rules = props.rules,\n itemContainerRender = props.itemContainerRender,\n fieldExtraRender = props.fieldExtraRender,\n _props$copyIconProps = props.copyIconProps,\n copyIconProps = _props$copyIconProps === void 0 ? {\n Icon: CopyOutlined,\n tooltipText: intl.getMessage('copyThisLine', '复制此项')\n } : _props$copyIconProps,\n _children = props.children,\n _props$deleteIconProp = props.deleteIconProps,\n deleteIconProps = _props$deleteIconProp === void 0 ? {\n Icon: DeleteOutlined,\n tooltipText: intl.getMessage('deleteThisLine', '删除此项')\n } : _props$deleteIconProp,\n actionRef = props.actionRef,\n style = props.style,\n prefixCls = props.prefixCls,\n actionGuard = props.actionGuard,\n min = props.min,\n max = props.max,\n colProps = props.colProps,\n wrapperCol = props.wrapperCol,\n rowProps = props.rowProps,\n _onAfterAdd = props.onAfterAdd,\n _onAfterRemove = props.onAfterRemove,\n _props$isValidateList = props.isValidateList,\n isValidateList = _props$isValidateList === void 0 ? false : _props$isValidateList,\n _props$emptyListMessa = props.emptyListMessage,\n emptyListMessage = _props$emptyListMessa === void 0 ? '列表不能为空' : _props$emptyListMessa,\n className = props.className,\n containerClassName = props.containerClassName,\n containerStyle = props.containerStyle,\n readonly = props.readonly,\n rest = _objectWithoutProperties(props, _excluded);\n var _useGridHelpers = useGridHelpers({\n colProps: colProps,\n rowProps: rowProps\n }),\n ColWrapper = _useGridHelpers.ColWrapper,\n RowWrapper = _useGridHelpers.RowWrapper;\n var proFormContext = useContext(ProFormContext);\n\n // 处理 list 的嵌套\n var name = useMemo(function () {\n if (listContext.name === undefined) {\n return [rest.name].flat(1);\n }\n return [listContext.name, rest.name].flat(1);\n }, [listContext.name, rest.name]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useImperativeHandle(actionRef, function () {\n return _objectSpread(_objectSpread({}, actionRefs.current), {}, {\n get: function get(index) {\n return proFormContext.formRef.current.getFieldValue([].concat(_toConsumableArray(name), [index]));\n },\n getList: function getList() {\n return proFormContext.formRef.current.getFieldValue(_toConsumableArray(name));\n }\n });\n }, [name, proFormContext.formRef]);\n useEffect(function () {\n noteOnce(!!proFormContext.formRef, \"ProFormList \\u5FC5\\u987B\\u8981\\u653E\\u5230 ProForm \\u4E2D,\\u5426\\u5219\\u4F1A\\u9020\\u6210\\u884C\\u4E3A\\u5F02\\u5E38\\u3002\");\n noteOnce(!!proFormContext.formRef, \"Proformlist must be placed in ProForm, otherwise it will cause abnormal behavior.\");\n }, [proFormContext.formRef]);\n useEffect(function () {\n // 如果 setFieldValueType 和 props.name 不存在不存入\n if (!setFieldValueType || !props.name) {\n return;\n }\n\n // Field.type === 'ProField' 时 props 里面是有 valueType 的,所以要设置一下\n // 写一个 ts 比较麻烦,用 any 顶一下\n setFieldValueType([props.name].flat(1).filter(function (itemName) {\n return itemName !== undefined;\n }), {\n valueType: 'formList',\n transform: transform\n });\n }, [props.name, setFieldValueType, transform]);\n var _useStyle = useStyle(baseClassName),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n if (!proFormContext.formRef) return null;\n return wrapSSR( /*#__PURE__*/_jsx(ColWrapper, {\n children: /*#__PURE__*/_jsx(\"div\", {\n className: classNames(baseClassName, hashId),\n style: style,\n children: /*#__PURE__*/_jsx(Form.Item, _objectSpread(_objectSpread({\n label: label,\n prefixCls: prefixCls,\n tooltip: tooltip,\n style: style,\n required: rules === null || rules === void 0 ? void 0 : rules.some(function (rule) {\n return rule.required;\n }),\n wrapperCol: wrapperCol,\n className: className\n }, rest), {}, {\n name: isValidateList ? name : undefined,\n rules: isValidateList ? [{\n validator: function validator(rule, value) {\n if (!value || value.length === 0) {\n return Promise.reject(new Error(emptyListMessage));\n }\n return Promise.resolve();\n },\n required: true\n }] : undefined,\n children: /*#__PURE__*/_jsx(Form.List, _objectSpread(_objectSpread({\n rules: rules\n }, rest), {}, {\n name: name,\n children: function children(fields, action, meta) {\n // 将 action 暴露给外部\n actionRefs.current = action;\n return /*#__PURE__*/_jsxs(RowWrapper, {\n children: [/*#__PURE__*/_jsx(ProFormListContainer, {\n name: name,\n readonly: !!readonly,\n originName: rest.name,\n copyIconProps: copyIconProps,\n deleteIconProps: deleteIconProps,\n formInstance: proFormContext.formRef.current,\n prefixCls: baseClassName,\n meta: meta,\n fields: fields,\n itemContainerRender: itemContainerRender,\n itemRender: itemRender,\n fieldExtraRender: fieldExtraRender,\n creatorButtonProps: creatorButtonProps,\n creatorRecord: creatorRecord,\n actionRender: actionRender,\n action: action,\n actionGuard: actionGuard,\n alwaysShowItemLabel: alwaysShowItemLabel,\n min: min,\n max: max,\n count: fields.length,\n onAfterAdd: function onAfterAdd(defaultValue, insertIndex, count) {\n if (isValidateList) {\n proFormContext.formRef.current.validateFields([name]);\n }\n _onAfterAdd === null || _onAfterAdd === void 0 || _onAfterAdd(defaultValue, insertIndex, count);\n },\n onAfterRemove: function onAfterRemove(index, count) {\n if (isValidateList) {\n if (count === 0) {\n proFormContext.formRef.current.validateFields([name]);\n }\n }\n _onAfterRemove === null || _onAfterRemove === void 0 || _onAfterRemove(index, count);\n },\n containerClassName: containerClassName,\n containerStyle: containerStyle,\n children: _children\n }), /*#__PURE__*/_jsx(Form.ErrorList, {\n errors: meta.errors\n })]\n });\n }\n }))\n }))\n })\n }));\n}\nexport { FormListContext, ProFormList };","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Coordinate, Coordinate3D } from '@antv/coord';\nimport { useLibrary } from './library';\nexport function createCoordinate(layout, partialOptions, library) {\n const [useCoordinate] = useLibrary('coordinate', library);\n const { innerHeight, innerWidth, insetLeft, insetTop, insetRight, insetBottom, } = layout;\n const { coordinates: partialTransform = [] } = partialOptions;\n const transform = inferCoordinate(partialTransform);\n const isCartesian3D = transform[0].type === 'cartesian3D';\n const options = Object.assign(Object.assign({}, layout), { x: insetLeft, y: insetTop, width: innerWidth - insetLeft - insetRight, height: innerHeight - insetBottom - insetTop, transformations: transform.flatMap(useCoordinate) });\n const coordinate = isCartesian3D\n ? // @ts-ignore\n new Coordinate3D(options)\n : new Coordinate(options);\n return coordinate;\n}\nexport function coordinate2Transform(node, library) {\n // @ts-ignore\n const { coordinate = {}, coordinates } = node, rest = __rest(node, [\"coordinate\", \"coordinates\"]);\n // If coordinates are already set, it means that the coordinate has been processed\n // during the initialization. There is not need to process it during update.\n if (coordinates)\n return node;\n const { type, transform = [] } = coordinate, options = __rest(coordinate, [\"type\", \"transform\"]);\n if (!type)\n return Object.assign(Object.assign({}, rest), { coordinates: transform });\n const [, createCoordinate] = useLibrary('coordinate', library);\n const { transform: isTransform = false } = createCoordinate(type).props || {};\n if (isTransform) {\n throw new Error(`Unknown coordinate: ${type}.`);\n }\n return Object.assign(Object.assign({}, rest), { coordinates: [Object.assign({ type }, options), ...transform] });\n}\nexport function coordOf(coordinates, type) {\n return coordinates.filter((d) => d.type === type);\n}\n/**\n * todo Duplication is not considered\n */\nexport function isPolar(coordinates) {\n return coordOf(coordinates, 'polar').length > 0;\n}\nexport function isHelix(coordinates) {\n return coordOf(coordinates, 'helix').length > 0;\n}\n/**\n * todo The number of transposes matters\n */\nexport function isTranspose(coordinates) {\n return coordOf(coordinates, 'transpose').length % 2 === 1;\n}\nexport function isParallel(coordinates) {\n return coordOf(coordinates, 'parallel').length > 0;\n}\nexport function isTheta(coordinates) {\n return coordOf(coordinates, 'theta').length > 0;\n}\nexport function isReflect(coordinates) {\n return coordOf(coordinates, 'reflect').length > 0;\n}\nexport function isRadial(coordinates) {\n return coordOf(coordinates, 'radial').length > 0;\n}\nexport function isRadar(coordinates) {\n return coordOf(coordinates, 'radar').length > 0;\n}\n/**\n * todo The axis corresponding to the Y reversal is not reversed\n */\nexport function isReflectY(coordinates) {\n return coordOf(coordinates, 'reflectY').length > 0;\n}\nfunction inferCoordinate(coordinates) {\n if (coordinates.find((d) => d.type === 'cartesian' || d.type === 'cartesian3D'))\n return coordinates;\n return [...coordinates, { type: 'cartesian' }];\n}\n//# sourceMappingURL=coordinate.js.map","/**\n * ○\n */\nexport var circle = function (x, y, r) {\n return [['M', x - r, y], ['A', r, r, 0, 1, 0, x + r, y], ['A', r, r, 0, 1, 0, x - r, y], ['Z']];\n};\n/**\n * Cname circle to point.\n */\nexport var point = circle;\n/**\n * □\n */\nexport var square = function (x, y, r) {\n return [['M', x - r, y - r], ['L', x + r, y - r], ['L', x + r, y + r], ['L', x - r, y + r], ['Z']];\n};\n/**\n * ◇\n */\nexport var diamond = function (x, y, r) {\n return [['M', x - r, y], ['L', x, y - r], ['L', x + r, y], ['L', x, y + r], ['Z']];\n};\n/**\n * △\n */\nexport var triangle = function (x, y, r) {\n var diffY = r * Math.sin((1 / 3) * Math.PI);\n return [['M', x - r, y + diffY], ['L', x, y - diffY], ['L', x + r, y + diffY], ['Z']];\n};\n/**\n * ▽\n */\nexport var triangleDown = function (x, y, r) {\n var diffY = r * Math.sin((1 / 3) * Math.PI);\n return [['M', x - r, y - diffY], ['L', x + r, y - diffY], ['L', x, y + diffY], ['Z']];\n};\n/**\n * ⬡\n */\nexport var hexagon = function (x, y, r) {\n var diffX = (r / 2) * Math.sqrt(3);\n return [\n ['M', x, y - r],\n ['L', x + diffX, y - r / 2],\n ['L', x + diffX, y + r / 2],\n ['L', x, y + r],\n ['L', x - diffX, y + r / 2],\n ['L', x - diffX, y - r / 2],\n ['Z'],\n ];\n};\n/**\n * ▷◁\n */\nexport var bowtie = function (x, y, r) {\n var diffY = r - 1.5;\n return [['M', x - r, y - diffY], ['L', x + r, y + diffY], ['L', x + r, y - diffY], ['L', x - r, y + diffY], ['Z']];\n};\n/** -- 非闭合图形 ------------------------------------------------------------------------------- */\n/**\n * |\n */\nexport var line = function (x, y, r) {\n return [\n ['M', x, y + r],\n ['L', x, y - r],\n ];\n};\n/**\n * ✕\n */\nexport var cross = function (x, y, r) {\n return [\n ['M', x - r, y - r],\n ['L', x + r, y + r],\n ['M', x + r, y - r],\n ['L', x - r, y + r],\n ];\n};\n/**\n * 工\n */\nexport var tick = function (x, y, r) {\n return [\n ['M', x - r / 2, y - r],\n ['L', x + r / 2, y - r],\n ['M', x, y - r],\n ['L', x, y + r],\n ['M', x - r / 2, y + r],\n ['L', x + r / 2, y + r],\n ];\n};\n/**\n * +\n */\nexport var plus = function (x, y, r) {\n return [\n ['M', x - r, y],\n ['L', x + r, y],\n ['M', x, y - r],\n ['L', x, y + r],\n ];\n};\n/**\n * -\n */\nexport var hyphen = function (x, y, r) {\n return [\n ['M', x - r, y],\n ['L', x + r, y],\n ];\n};\n/** -- 用于图例的 marker ------------------------------------------------------------------------------- */\n/**\n * ---\n */\nexport var dot = function (x, y, r) {\n return [\n ['M', x - r, y],\n ['L', x + r, y],\n ];\n};\nexport var dash = dot;\nexport var smooth = function (x, y, r) {\n return [\n ['M', x - r, y],\n ['A', r / 2, r / 2, 0, 1, 1, x, y],\n ['A', r / 2, r / 2, 0, 1, 0, x + r, y],\n ];\n};\nexport var hv = function (x, y, r) {\n return [\n ['M', x - r - 1, y - 2.5],\n ['L', x, y - 2.5],\n ['L', x, y + 2.5],\n ['L', x + r + 1, y + 2.5],\n ];\n};\nexport var vh = function (x, y, r) {\n return [\n ['M', x - r - 1, y + 2.5],\n ['L', x, y + 2.5],\n ['L', x, y - 2.5],\n ['L', x + r + 1, y - 2.5],\n ];\n};\nexport var hvh = function (x, y, r) {\n return [\n ['M', x - (r + 1), y + 2.5],\n ['L', x - r / 2, y + 2.5],\n ['L', x - r / 2, y - 2.5],\n ['L', x + r / 2, y - 2.5],\n ['L', x + r / 2, y + 2.5],\n ['L', x + r + 1, y + 2.5],\n ];\n};\nexport function vhv(x, y) {\n // 宽 13px,高 8px\n return [\n ['M', x - 5, y + 2.5],\n ['L', x - 5, y],\n ['L', x, y],\n ['L', x, y - 3],\n ['L', x, y + 3],\n ['L', x + 6.5, y + 3],\n ];\n}\n/** --------------------------------------------------------------------------------- */\nexport var button = function (x, y, r) {\n return [['M', x - r, y - r], ['L', x + r, y], ['L', x - r, y + r], ['Z']];\n};\n//# sourceMappingURL=symbol.js.map","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = contains;\nfunction contains(root, n) {\n if (!root) {\n return false;\n }\n\n // Use native if support\n if (root.contains) {\n return root.contains(n);\n }\n\n // `document.contains` not support with IE11\n var node = n;\n while (node) {\n if (node === root) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}","var basePullAll = require('./_basePullAll');\n\n/**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\nfunction pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n}\n\nmodule.exports = pullAll;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"fieldProps\", \"min\", \"proFieldProps\", \"max\"];\nimport React from 'react';\nimport ProFormField from \"../Field\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * 数组选择组件\n *\n * @param\n */\nvar ProFormDigit = function ProFormDigit(_ref, ref) {\n var fieldProps = _ref.fieldProps,\n min = _ref.min,\n proFieldProps = _ref.proFieldProps,\n max = _ref.max,\n rest = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/_jsx(ProFormField, _objectSpread({\n valueType: \"digit\",\n fieldProps: _objectSpread({\n min: min,\n max: max\n }, fieldProps),\n ref: ref,\n filedConfig: {\n defaultProps: {\n width: '100%'\n }\n },\n proFieldProps: proFieldProps\n }, rest));\n};\nvar ForwardRefProFormDigit = /*#__PURE__*/React.forwardRef(ProFormDigit);\nexport default ForwardRefProFormDigit;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"fieldProps\", \"proFieldProps\"];\nimport React, { useContext } from 'react';\nimport FieldContext from \"../../FieldContext\";\nimport ProField from \"../Field\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar valueType = 'dateTime';\n\n/**\n * 时间日期选择组件\n *\n * @param\n */\nvar ProFormDateTimePicker = /*#__PURE__*/React.forwardRef(function (_ref, ref) {\n var fieldProps = _ref.fieldProps,\n proFieldProps = _ref.proFieldProps,\n rest = _objectWithoutProperties(_ref, _excluded);\n var context = useContext(FieldContext);\n return /*#__PURE__*/_jsx(ProField, _objectSpread({\n ref: ref,\n fieldProps: _objectSpread({\n getPopupContainer: context.getPopupContainer\n }, fieldProps),\n valueType: valueType,\n proFieldProps: proFieldProps,\n filedConfig: {\n valueType: valueType,\n customLightMode: true\n }\n }, rest));\n});\nexport default ProFormDateTimePicker;","import { __assign, __extends, __read, __rest } from \"tslib\";\nimport { Component } from '../../core';\nimport { classNames, ifShow, select, splitStyle, subStyleProps } from '../../util';\nimport { HANDLE_DEFAULT_CFG, HANDLE_ICON_DEFAULT_CFG, HANDLE_LABEL_DEFAULT_CFG } from './constant';\nvar CLASS_NAMES = classNames({\n labelGroup: 'label-group',\n label: 'label',\n iconGroup: 'icon-group',\n icon: 'icon',\n iconRect: 'icon-rect',\n iconLine: 'icon-line',\n}, 'handle');\nvar HandleIcon = /** @class */ (function (_super) {\n __extends(HandleIcon, _super);\n function HandleIcon() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n HandleIcon.prototype.render = function (attributes, container) {\n var x = attributes.x, y = attributes.y, _a = attributes.size, size = _a === void 0 ? 10 : _a, _b = attributes.radius, radius = _b === void 0 ? size / 4 : _b, orientation = attributes.orientation, iconStyle = __rest(attributes, [\"x\", \"y\", \"size\", \"radius\", \"orientation\"]);\n // 默认手柄\n var width = size;\n var height = width * 2.4;\n var rect = select(container)\n .maybeAppendByClassName(CLASS_NAMES.iconRect, 'rect')\n .styles(__assign(__assign({}, iconStyle), { width: width, height: height, radius: radius, x: x - width / 2, y: y - height / 2, transformOrigin: 'center' }));\n var x1 = x + (1 / 3) * width - width / 2;\n var x2 = x + (2 / 3) * width - width / 2;\n var y1 = y + (1 / 4) * height - height / 2;\n var y2 = y + (3 / 4) * height - height / 2;\n rect.maybeAppendByClassName(\"\".concat(CLASS_NAMES.iconLine, \"-1\"), 'line').styles(__assign({ x1: x1, x2: x1, y1: y1, y2: y2 }, iconStyle));\n rect.maybeAppendByClassName(\"\".concat(CLASS_NAMES.iconLine, \"-2\"), 'line').styles(__assign({ x1: x2, x2: x2, y1: y1, y2: y2 }, iconStyle));\n if (orientation === 'vertical')\n rect.node().style.transform = 'rotate(90)';\n };\n return HandleIcon;\n}(Component));\nvar Handle = /** @class */ (function (_super) {\n __extends(Handle, _super);\n function Handle(options) {\n return _super.call(this, options, HANDLE_DEFAULT_CFG) || this;\n }\n Handle.prototype.renderLabel = function (container) {\n var _this = this;\n var _a = this.attributes, x = _a.x, y = _a.y, showLabel = _a.showLabel;\n var _b = subStyleProps(this.attributes, 'label'), _c = _b.x, labelX = _c === void 0 ? 0 : _c, _d = _b.y, labelY = _d === void 0 ? 0 : _d, transform = _b.transform, transformOrigin = _b.transformOrigin, style = __rest(_b, [\"x\", \"y\", \"transform\", \"transformOrigin\"]);\n var _e = __read(splitStyle(style, []), 2), labelStyle = _e[0], groupStyle = _e[1];\n var labelGroup = select(container).maybeAppendByClassName(CLASS_NAMES.labelGroup, 'g').styles(groupStyle);\n // @ts-ignore\n var _f = __assign(__assign({}, HANDLE_LABEL_DEFAULT_CFG), labelStyle), text = _f.text, rest = __rest(_f, [\"text\"]);\n ifShow(!!showLabel, labelGroup, function (group) {\n _this.label = group.maybeAppendByClassName(CLASS_NAMES.label, 'text').styles(__assign(__assign({}, rest), { x: x + labelX, y: y + labelY, transform: transform, transformOrigin: transformOrigin, text: \"\".concat(text) }));\n /** avoid trigger event on label */\n _this.label.on('mousedown', function (e) {\n e.stopPropagation();\n });\n _this.label.on('touchstart', function (e) {\n e.stopPropagation();\n });\n });\n };\n Handle.prototype.renderIcon = function (container) {\n var _a = this.attributes, x = _a.x, y = _a.y, orientation = _a.orientation, type = _a.type;\n var iconStyle = __assign(__assign({ x: x, y: y, orientation: orientation }, HANDLE_ICON_DEFAULT_CFG), subStyleProps(this.attributes, 'icon'));\n var _b = this.attributes.iconShape, iconShape = _b === void 0 ? function () { return new HandleIcon({ style: iconStyle }); } : _b;\n var iconGroup = select(container).maybeAppendByClassName(CLASS_NAMES.iconGroup, 'g');\n iconGroup\n .selectAll(CLASS_NAMES.icon.class)\n .data([iconShape])\n .join(function (enter) {\n return enter\n .append(typeof iconShape === 'string' ? iconShape : function () { return iconShape(type); })\n .attr('className', CLASS_NAMES.icon.name);\n }, function (update) { return update.update(iconStyle); }, function (exit) { return exit.remove(); });\n };\n Handle.prototype.render = function (attributes, container) {\n this.renderIcon(container);\n this.renderLabel(container);\n };\n return Handle;\n}(Component));\nexport { Handle };\n//# sourceMappingURL=handle.js.map","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","import { isNumber, isArray } from '@antv/util';\n/**\n * 规范化padding\n */\nexport function parseSeriesAttr(series) {\n if (isNumber(series)) {\n return [series, series, series, series];\n }\n if (isArray(series)) {\n var len = series.length;\n if (len === 1) {\n return [series[0], series[0], series[0], series[0]];\n }\n if (len === 2) {\n return [series[0], series[1], series[0], series[1]];\n }\n if (len === 3) {\n return [series[0], series[1], series[2], series[1]];\n }\n if (len === 4) {\n return series;\n }\n }\n return [0, 0, 0, 0];\n}\n//# sourceMappingURL=series.js.map","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","!function(t,r){\"object\"==typeof exports&&\"undefined\"!=typeof module?r(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],r):r((t=\"undefined\"!=typeof globalThis?globalThis:t||self).Coordinate={})}(this,function(t){\"use strict\";function x(t){var r=\"function\"==typeof Symbol&&Symbol.iterator,n=r&&t[r],e=0;if(n)return n.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return{value:(t=t&&e>=t.length?void 0:t)&&t[e++],done:!t}}};throw new TypeError(r?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")}function k(t,r){var n=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var e,o,a=n.call(t),i=[];try{for(;(void 0===r||0t=>r(n(t)),t)}function h(r,n){return n-r?t=>(t-r)/(n-r):t=>.5}const H=Math.sqrt(50),Q=Math.sqrt(10),X=Math.sqrt(2);function s(t,r,n){r=(r-t)/Math.max(0,n),t=Math.floor(Math.log(r)/Math.LN10),n=r/10**t;return 0<=t?(n>=H?10:n>=Q?5:n>=X?2:1)*10**t:-(10**-t)/(n>=H?10:n>=Q?5:n>=X?2:1)}const Y=(t,r,n=5)=>{t=[t,r];let e=0,o=t.length-1,a=t[e],i=t[o],u;return i{t.prototype.rescale=function(){this.initRange(),this.nice();var[t]=this.chooseTransforms();this.composeOutput(t,this.chooseClamp(t))},t.prototype.initRange=function(){var t=this.options[\"interpolator\"];this.options.range=r(t)},t.prototype.composeOutput=function(t,r){var n,{domain:e,interpolator:o,round:a}=this.getOptions(),e=i(e.map(t)),a=a?(n=o,t=>{t=n(t);return $(t)?Math.round(t):t}):o;this.output=l(a,e,r,t)},t.prototype.invert=void 0}}var n,e={exports:{}},o={exports:{}},rt=function(t){return!(!t||\"string\"==typeof t)&&(t instanceof Array||Array.isArray(t)||0<=t.length&&(t.splice instanceof Function||Object.getOwnPropertyDescriptor(t,t.length-1)&&\"String\"!==t.constructor.name))},nt=Array.prototype.concat,et=Array.prototype.slice,ot=o.exports=function(t){for(var r=[],n=0,e=t.length;nt=>r*(1-t)+n*t,lt=(t,r)=>{if(\"number\"==typeof t&&\"number\"==typeof r)return m(t,r);if(\"string\"!=typeof t||\"string\"!=typeof r)return()=>t;{var n=t,e=r;const s=st(n),l=st(e);return null===s||null===l?s?()=>n:()=>e:r=>{var n=new Array(4);for(let t=0;t<4;t+=1){var e=s[t],o=l[t];n[t]=e*(1-r)+o*r}var[t,a,i,u]=n;return`rgba(${Math.round(t)}, ${Math.round(a)}, ${Math.round(i)}, ${u})`}}},ht=(t,r)=>{const n=m(t,r);return t=>Math.round(n(t))};function ct({map:t,initKey:r},n){r=r(n);return t.has(r)?t.get(r):n}function pt(t){return\"object\"==typeof t?t.valueOf():t}class ft extends Map{constructor(t){if(super(),this.map=new Map,this.initKey=pt,null!==t)for(var[r,n]of t)this.set(r,n)}get(t){return super.get(ct({map:this.map,initKey:this.initKey},t))}has(t){return super.has(ct({map:this.map,initKey:this.initKey},t))}set(t,r){return super.set(([{map:t,initKey:n},e]=[{map:this.map,initKey:this.initKey},t],n=n(e),t.has(n)?t.get(n):(t.set(n,e),e)),r);var n,e}delete(t){return super.delete(([{map:t,initKey:r},n]=[{map:this.map,initKey:this.initKey},t],r=r(n),t.has(r)&&(n=t.get(r),t.delete(r)),n));var r,n}}class dt{constructor(t){this.options=r({},this.getDefaultOptions()),this.update(t)}getOptions(){return this.options}update(t={}){this.options=r({},this.options,t),this.rescale(t)}rescale(t){}}const y=Symbol(\"defaultUnknown\");function gt(r,n,e){for(let t=0;t\"\"+t:\"object\"==typeof t?t=>JSON.stringify(t):t=>t}class yt extends dt{getDefaultOptions(){return{domain:[],range:[],unknown:y}}constructor(t){super(t)}map(t){return 0===this.domainIndexMap.size&>(this.domainIndexMap,this.getDomain(),this.domainKey),vt({value:this.domainKey(t),mapper:this.domainIndexMap,from:this.getDomain(),to:this.getRange(),notFoundReturn:this.options.unknown})}invert(t){return 0===this.rangeIndexMap.size&>(this.rangeIndexMap,this.getRange(),this.rangeKey),vt({value:this.rangeKey(t),mapper:this.rangeIndexMap,from:this.getRange(),to:this.getDomain(),notFoundReturn:this.options.unknown})}rescale(t){var[r]=this.options.domain,[n]=this.options.range;this.domainKey=mt(r),this.rangeKey=mt(n),this.rangeIndexMap?(t&&!t.range||this.rangeIndexMap.clear(),t&&!t.domain&&!t.compare||(this.domainIndexMap.clear(),this.sortedDomain=void 0)):(this.rangeIndexMap=new Map,this.domainIndexMap=new Map)}clone(){return new yt(this.options)}getRange(){return this.options.range}getDomain(){var t,r;return this.sortedDomain||({domain:t,compare:r}=this.options,this.sortedDomain=r?[...t].sort(r):t),this.sortedDomain}}function Mt(t){const{domain:r,range:n,paddingOuter:e,paddingInner:o,flex:a,round:i,align:u}=t;var s=r.length,l=0<(l=(t=s)-(h=a).length)?[...h,...new Array(l).fill(1)]:l<0?h.slice(0,t):h,[t,h]=n,h=h-t,c=h/(2/s*e+1-1/s*o);const p=c*o/s;c-=s*p;const f=function(t){const r=Math.min(...t);return t.map(t=>t/r)}(l),d=c/f.reduce((t,r)=>t+r);var l=new ft(r.map((t,r)=>{r=f[r]*d;return[t,i?Math.floor(r):r]})),g=new ft(r.map((t,r)=>{r=f[r]*d+p;return[t,i?Math.floor(r):r]})),c=Array.from(g.values()).reduce((t,r)=>t+r),t=t+(h-(c-c/s*o))*u;let v=i?Math.round(t):t;var m=new Array(s);for(let t=0;ts+r*i),{valueStep:i,valueBandWidth:u,adjustedRange:t}}({align:t,range:n,round:e,flex:o,paddingInner:this.getPaddingInner(),paddingOuter:this.getPaddingOuter(),domain:r});this.valueStep=e,this.valueBandWidth=n,this.adjustedRange=t}}const M=(t,r,n)=>{let e,o,a=t,i=r;if(a===i&&0{var[t,e]=t,[r,o]=r;let a,i;return l(i=t{const o=Math.min(e.length,t.length)-1,a=new Array(o),i=new Array(o);var n=e[0]>e[o],u=n?[...e].reverse():e,s=n?[...t].reverse():t;for(let t=0;t{var r=function(t,r,n,e,o){let a=n||0,i=e||t.length;for(var u=o||(t=>t);ar?i=s:a=s+1}return a}(e,t,1,o)-1,n=a[r];return l(i[r],n)(t)}},kt=(t,r,n,e)=>{return(2Math.min(Math.max(e,t),o)}return A}composeOutput(t,r){var{domain:n,range:e,round:o,interpolate:a}=this.options,n=kt(n.map(t),e,a,o);this.output=l(n,r,t)}composeInput(t,r,n){var{domain:e,range:o}=this.options,o=kt(o,e.map(t),m);this.input=l(r,n,o)}}class w extends Ot{getDefaultOptions(){return{domain:[0,1],range:[0,1],unknown:void 0,nice:!1,clamp:!1,round:!1,interpolate:lt,tickMethod:M,tickCount:5}}chooseTransforms(){return[A,A]}clone(){return new w(this.options)}}class At extends wt{getDefaultOptions(){return{domain:[],range:[0,1],align:.5,round:!1,padding:0,unknown:y,paddingInner:1,paddingOuter:0}}constructor(t){super(t)}getPaddingInner(){return 1}clone(){return new At(this.options)}update(t){super.update(t)}getPaddingOuter(){return this.options.padding}}function jt(t,r){for(var n=[],e=0,o=t.length;e{var[t,r]=t;return l(m(0,1),h(t,r))})],It);let St=I=class extends w{getDefaultOptions(){return{domain:[0,.5,1],unknown:void 0,nice:!1,clamp:!1,round:!1,interpolator:A,tickMethod:M,tickCount:5}}constructor(t){super(t)}clone(){return new I(this.options)}};St=I=function(t,r,n,e){var o,a=arguments.length,i=a<3?r:null===e?e=Object.getOwnPropertyDescriptor(r,n):e;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)i=Reflect.decorate(t,r,n,e);else for(var u=t.length-1;0<=u;u--)(o=t[u])&&(i=(a<3?o(i):3{const[r,n,e]=t,o=l(m(0,.5),h(r,n)),a=l(m(.5,1),h(n,e));return t=>(r>e?t= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n","\"use strict\";\n\nmodule.exports = function(options) {\n var idGenerator = options.idGenerator;\n var getState = options.stateHandler.getState;\n\n /**\n * Gets the resize detector id of the element.\n * @public\n * @param {element} element The target element to get the id of.\n * @returns {string|number|null} The id of the element. Null if it has no id.\n */\n function getId(element) {\n var state = getState(element);\n\n if (state && state.id !== undefined) {\n return state.id;\n }\n\n return null;\n }\n\n /**\n * Sets the resize detector id of the element. Requires the element to have a resize detector state initialized.\n * @public\n * @param {element} element The target element to set the id of.\n * @returns {string|number|null} The id of the element.\n */\n function setId(element) {\n var state = getState(element);\n\n if (!state) {\n throw new Error(\"setId required the element to have a resize detection state.\");\n }\n\n var id = idGenerator.generate();\n\n state.id = id;\n\n return id;\n }\n\n return {\n get: getId,\n set: setId\n };\n};\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport BaseModel from \"../../core/BaseModel\";\nimport { rgb2arr } from '@antv/l7-utils';\n/* babel-plugin-inline-import '../shaders/billboard/billboard_point_frag.glsl' */\nconst simplePointFrag = \"\\nlayout(std140) uniform commonUniorm {\\n vec4 u_stroke_color;\\n float u_additive;\\n float u_stroke_opacity;\\n float u_stroke_width;\\n};\\n\\nin vec4 v_color;\\nin float v_blur;\\nin float v_innerRadius;\\n\\nout vec4 outputColor;\\n\\n#pragma include \\\"picking\\\"\\nvoid main() {\\n vec2 center = vec2(0.5);\\n\\n // Tip: \\u7247\\u5143\\u5230\\u4E2D\\u5FC3\\u70B9\\u7684\\u8DDD\\u79BB 0 - 1\\n float fragmengTocenter = distance(center, gl_PointCoord) * 2.0;\\n // Tip: \\u7247\\u5143\\u7684\\u526A\\u5207\\u6210\\u5706\\u5F62\\n float circleClipOpacity = 1.0 - smoothstep(v_blur, 1.0, fragmengTocenter);\\n\\n\\n if(v_innerRadius < 0.99) {\\n // \\u5F53\\u5B58\\u5728 stroke \\u4E14 stroke > 0.01\\n float blurWidth = (1.0 - v_blur)/2.0;\\n vec4 stroke = vec4(u_stroke_color.rgb, u_stroke_opacity);\\n if(fragmengTocenter > v_innerRadius + blurWidth) {\\n outputColor = stroke;\\n } else if(fragmengTocenter > v_innerRadius - blurWidth){\\n float mixR = (fragmengTocenter - (v_innerRadius - blurWidth)) / (blurWidth * 2.0);\\n outputColor = mix(v_color, stroke, mixR);\\n } else {\\n outputColor = v_color;\\n }\\n } else {\\n // \\u5F53\\u4E0D\\u5B58\\u5728 stroke \\u6216 stroke <= 0.01\\n outputColor = v_color;\\n }\\n\\n outputColor = filterColor(outputColor);\\n \\n if(u_additive > 0.0) {\\n outputColor *= circleClipOpacity;\\n } else {\\n outputColor.a *= circleClipOpacity;\\n }\\n\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/billboard/billboard_point_vert.glsl' */\nconst simplePointVert = \"\\nlayout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\n\\nlayout(std140) uniform commonUniorm {\\n vec4 u_stroke_color;\\n float u_additive;\\n float u_stroke_opacity;\\n float u_stroke_width;\\n};\\n\\nout vec4 v_color;\\nout float v_blur;\\nout float v_innerRadius;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"picking\\\"\\n#pragma include \\\"project\\\"\\nvoid main() {\\n v_color = vec4(a_Color.xyz, a_Color.w * opacity);\\n v_blur = 1.0 - max(2.0 / a_Size, 0.05);\\n v_innerRadius = max((a_Size - u_stroke_width) / a_Size, 0.0);\\n\\n vec2 offset = project_pixel(u_offsets);\\n\\n vec4 project_pos = project_position(vec4(a_Position, 1.0), a_Position64Low);\\n gl_Position = project_common_position_to_clipspace(vec4(vec2(project_pos.xy+offset),project_pos.z,project_pos.w));\\n\\n gl_PointSize = a_Size * 2.0 * u_DevicePixelRatio;\\n setPickingColor(a_PickingColor);\\n}\\n\";\nexport function PointTriangulation(feature) {\n const coordinates = feature.coordinates;\n return {\n vertices: [...coordinates],\n indices: [0],\n size: coordinates.length\n };\n}\nexport default class SimplePointModel extends BaseModel {\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9\n });\n }\n getDefaultStyle() {\n return {\n blend: 'additive'\n };\n }\n getCommonUniformsInfo() {\n const {\n blend,\n strokeOpacity = 1,\n strokeWidth = 0,\n stroke = '#fff'\n } = this.layer.getLayerConfig();\n const commonOptions = {\n u_stroke_color: rgb2arr(stroke),\n u_additive: blend === 'additive' ? 1.0 : 0.0,\n u_stroke_opacity: strokeOpacity,\n u_stroke_width: strokeWidth\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.layer.triangulation = PointTriangulation;\n _this2.initUniformsBuffer();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'pointSimple',\n vertexShader: simplePointVert,\n fragmentShader: simplePointFrag,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n triangulation: PointTriangulation,\n depth: {\n enable: false\n },\n primitive: gl.POINTS\n });\n return [model];\n })();\n }\n registerBuiltinAttributes() {\n // 注册 Position 属性 64 位地位部分,经纬度数据开启双精度,避免大于 22 层级以上出现数据偏移\n this.registerPosition64LowAttribute();\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n size = 1\n } = feature;\n return Array.isArray(size) ? [size[0]] : [size];\n }\n }\n });\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport { calculateCentroid, lodashUtil, rgb2arr } from '@antv/l7-utils';\nimport BaseModel from \"../../core/BaseModel\";\nimport { PointExtrudeTriangulation } from \"../../core/triangulation\";\nimport { lglt2xyz } from \"../../earth/utils\";\n/* babel-plugin-inline-import '../shaders/earthExtrude/earthExtrude_frag.glsl' */\nconst pointExtrudeFrag = \"precision highp float;\\nin vec4 v_color;\\n\\n#pragma include \\\"picking\\\"\\n\\nlayout(std140) uniform commonUniform {\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n float u_linearColor: 0;\\n float u_heightfixed: 0.0; // \\u9ED8\\u8BA4\\u4E0D\\u56FA\\u5B9A\\n float u_globel;\\n float u_r;\\n float u_pickLight: 0.0;\\n float u_opacitylinear: 0.0;\\n float u_opacitylinear_dir: 1.0;\\n float u_lightEnable: 1.0;\\n};\\nin float v_lightWeight;\\nin float v_barLinearZ;\\nout vec4 outputColor;\\nvoid main() {\\n\\n outputColor = v_color;\\n\\n // \\u5F00\\u542F\\u900F\\u660E\\u5EA6\\u6E10\\u53D8\\n if(u_opacitylinear > 0.0) {\\n outputColor.a *= u_opacitylinear_dir > 0.0 ? (1.0 - v_barLinearZ): v_barLinearZ;\\n }\\n\\n // picking\\n if(u_pickLight > 0.0) {\\n outputColor = filterColorAlpha(outputColor, v_lightWeight);\\n } else {\\n outputColor = filterColor(outputColor);\\n }\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/earthExtrude/earthExtrude_vert.glsl' */\nconst pointExtrudeVert = \"precision highp float;\\n\\n#define pi 3.1415926535\\n#define ambientRatio 0.5\\n#define diffuseRatio 0.3\\n#define specularRatio 0.2\\n\\nlayout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in vec3 a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_POS) in vec3 a_Pos;\\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\\n\\nlayout(std140) uniform commonUniform {\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n float u_linearColor: 0;\\n float u_heightfixed: 0.0; // \\u9ED8\\u8BA4\\u4E0D\\u56FA\\u5B9A\\n float u_globel;\\n float u_r;\\n float u_pickLight: 0.0;\\n float u_opacitylinear: 0.0;\\n float u_opacitylinear_dir: 1.0;\\n float u_lightEnable: 1.0;\\n};\\n\\nout vec4 v_color;\\nout float v_lightWeight;\\nout float v_barLinearZ;\\n// \\u7528\\u4E8E\\u5C06\\u5728\\u9876\\u70B9\\u7740\\u8272\\u5668\\u4E2D\\u8BA1\\u7B97\\u597D\\u7684\\u6837\\u5F0F\\u503C\\u4F20\\u9012\\u7ED9\\u7247\\u5143\\n\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"light\\\"\\n#pragma include \\\"picking\\\"\\n\\nfloat getYRadian(float x, float z) {\\n if(x > 0.0 && z > 0.0) {\\n return atan(x/z);\\n } else if(x > 0.0 && z <= 0.0){\\n return atan(-z/x) + pi/2.0;\\n } else if(x <= 0.0 && z <= 0.0) {\\n return pi + atan(x/z); //atan(x/z) +\\n } else {\\n return atan(z/-x) + pi*3.0/2.0;\\n }\\n}\\n\\nfloat getXRadian(float y, float r) {\\n return atan(y/r);\\n}\\n\\nvoid main() {\\n\\n // cal style mapping - \\u6570\\u636E\\u7EB9\\u7406\\u6620\\u5C04\\u90E8\\u5206\\u7684\\u8BA1\\u7B97\\n vec3 size = a_Size * a_Position;\\n\\n // a_Position.z \\u662F\\u5728\\u6784\\u5EFA\\u7F51\\u683C\\u7684\\u65F6\\u5019\\u4F20\\u5165\\u7684\\u6807\\u51C6\\u503C 0 - 1\\uFF0C\\u5728\\u63D2\\u503C\\u5668\\u63D2\\u503C\\u53EF\\u4EE5\\u83B7\\u53D6 0\\uFF5E1 \\u7EBF\\u6027\\u6E10\\u53D8\\u7684\\u503C\\n v_barLinearZ = a_Position.z;\\n\\n vec3 offset = size; // \\u63A7\\u5236\\u5706\\u67F1\\u4F53\\u7684\\u5927\\u5C0F - \\u4ECE\\u6807\\u51C6\\u5355\\u4F4D\\u5706\\u67F1\\u4F53\\u8FDB\\u884C\\u504F\\u79FB\\n if(u_heightfixed < 1.0) { // \\u5706\\u67F1\\u4F53\\u4E0D\\u56FA\\u5B9A\\u9AD8\\u5EA6\\n //\\n } else {// \\u5706\\u67F1\\u4F53\\u56FA\\u5B9A\\u9AD8\\u5EA6 \\uFF08 \\u5904\\u7406 mapbox \\uFF09\\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\\n offset *= 4.0/pow(2.0, 21.0 - u_Zoom);\\n }\\n }\\n\\n\\n vec4 project_pos = project_position(vec4(a_Pos.xy, 0., 1.0));\\n\\n // u_r \\u63A7\\u5236\\u5706\\u67F1\\u7684\\u751F\\u957F\\n vec4 pos = vec4(project_pos.xy + offset.xy, offset.z * u_r, 1.0);\\n\\n // \\u5706\\u67F1\\u5149\\u7167\\u6548\\u679C\\n float lightWeight = 1.0;\\n if(u_lightEnable > 0.0) { // \\u53D6\\u6D88\\u4E09\\u5143\\u8868\\u8FBE\\u5F0F\\uFF0C\\u589E\\u5F3A\\u5065\\u58EE\\u6027\\n lightWeight = calc_lighting(pos);\\n }\\n v_lightWeight = lightWeight;\\n // \\u8BBE\\u7F6E\\u5706\\u67F1\\u7684\\u5E95\\u8272\\n if(u_linearColor == 1.0) { // \\u4F7F\\u7528\\u6E10\\u53D8\\u989C\\u8272\\n v_color = mix(u_sourceColor, u_targetColor, v_barLinearZ);\\n v_color.rgb *= lightWeight;\\n } else { // \\u4F7F\\u7528 color \\u65B9\\u6CD5\\u4F20\\u5165\\u7684\\u989C\\u8272\\n v_color = a_Color;\\n }\\n v_color.a *= u_opacity;\\n\\n\\n // \\u5728\\u5730\\u7403\\u6A21\\u5F0F\\u4E0B\\uFF0C\\u5C06\\u539F\\u672C\\u5782\\u76F4\\u4E8E xy \\u5E73\\u9762\\u7684\\u5706\\u67F1\\u8C03\\u6574\\u59FF\\u6001\\u5230\\u9002\\u5E94\\u5706\\u7684\\u89D2\\u5EA6\\n //\\u65CB\\u8F6C\\u77E9\\u9635mx\\uFF0C\\u521B\\u5EFA\\u7ED5x\\u8F74\\u65CB\\u8F6C\\u77E9\\u9635\\n float r = sqrt(a_Pos.z*a_Pos.z + a_Pos.x*a_Pos.x);\\n float xRadian = getXRadian(a_Pos.y, r);\\n float xcos = cos(xRadian);//\\u6C42\\u89E3\\u65CB\\u8F6C\\u89D2\\u5EA6\\u4F59\\u5F26\\u503C\\n float xsin = sin(xRadian);//\\u6C42\\u89E3\\u65CB\\u8F6C\\u89D2\\u5EA6\\u6B63\\u5F26\\u503C\\n mat4 mx = mat4(\\n 1,0,0,0,\\n 0,xcos,-xsin,0,\\n 0,xsin,xcos,0,\\n 0,0,0,1);\\n\\n //\\u65CB\\u8F6C\\u77E9\\u9635my\\uFF0C\\u521B\\u5EFA\\u7ED5y\\u8F74\\u65CB\\u8F6C\\u77E9\\u9635\\n float yRadian = getYRadian(a_Pos.x, a_Pos.z);\\n float ycos = cos(yRadian);//\\u6C42\\u89E3\\u65CB\\u8F6C\\u89D2\\u5EA6\\u4F59\\u5F26\\u503C\\n float ysin = sin(yRadian);//\\u6C42\\u89E3\\u65CB\\u8F6C\\u89D2\\u5EA6\\u6B63\\u5F26\\u503C\\n mat4 my = mat4(\\n ycos,0,-ysin,0,\\n 0,1,0,0,\\n ysin,0,ycos,0,\\n 0,0,0,1);\\n\\n gl_Position = u_ViewProjectionMatrix * vec4(( my * mx * vec4(a_Position * a_Size, 1.0)).xyz + a_Pos, 1.0);\\n\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nconst {\n isNumber\n} = lodashUtil;\nexport default class ExtrudeModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"raiseCount\", 0);\n _defineProperty(this, \"raiseRepeat\", 0);\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n POS: 10,\n NORMAL: 11\n });\n }\n getCommonUniformsInfo() {\n const {\n animateOption = {\n enable: false,\n speed: 0.01,\n repeat: false\n },\n opacity = 1,\n sourceColor,\n targetColor,\n pickLight = false,\n heightfixed = true,\n opacityLinear = {\n enable: false,\n dir: 'up'\n },\n lightEnable = true\n } = this.layer.getLayerConfig();\n\n // 转化渐变色\n let useLinearColor = 0; // 默认不生效\n let sourceColorArr = [0, 0, 0, 0];\n let targetColorArr = [0, 0, 0, 0];\n if (sourceColor && targetColor) {\n sourceColorArr = rgb2arr(sourceColor);\n targetColorArr = rgb2arr(targetColor);\n useLinearColor = 1;\n }\n if (this.raiseCount < 1 && this.raiseRepeat > 0) {\n if (animateOption.enable) {\n const {\n speed = 0.01\n } = animateOption;\n this.raiseCount += speed;\n if (this.raiseCount >= 1) {\n if (this.raiseRepeat > 1) {\n this.raiseCount = 0;\n this.raiseRepeat--;\n } else {\n this.raiseCount = 1;\n }\n }\n }\n }\n const commonOptions = {\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\n // 渐变色支持参数\n u_linearColor: useLinearColor,\n // 圆柱体的拾取高亮是否要计算光照\n u_pickLight: Number(pickLight),\n // 圆柱体是否固定高度\n u_heightfixed: Number(heightfixed),\n u_r: animateOption.enable && this.raiseRepeat > 0 ? this.raiseCount : 1.0,\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n // 透明度渐变\n u_opacitylinear: Number(opacityLinear.enable),\n u_opacitylinear_dir: opacityLinear.dir === 'up' ? 1.0 : 0.0,\n // 光照计算开关\n u_lightEnable: Number(lightEnable)\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.initUniformsBuffer();\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n const {\n animateOption: {\n repeat = 1\n }\n } = _this2.layer.getLayerConfig();\n _this2.raiseRepeat = repeat;\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'pointEarthExtrude',\n vertexShader: pointExtrudeVert,\n fragmentShader: pointExtrudeFrag,\n triangulation: PointExtrudeTriangulation,\n depth: {\n enable: true\n },\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n cull: {\n enable: true,\n face: gl.FRONT\n },\n blend: _this2.getBlend()\n });\n return [model];\n })();\n }\n registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: feature => {\n const {\n size\n } = feature;\n if (size) {\n let buffersize = [];\n if (Array.isArray(size)) {\n buffersize = size.length === 2 ? [size[0], size[0], size[1]] : size;\n }\n if (!Array.isArray(size)) {\n buffersize = [size, size, size];\n }\n return buffersize;\n } else {\n return [2, 2, 2];\n }\n }\n }\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'normal',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Normal',\n shaderLocation: this.attributeLocation.NORMAL,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: (feature, featureIdx, vertex, attributeIdx, normal) => {\n return normal;\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'pos',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Pos',\n shaderLocation: this.attributeLocation.POS,\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: feature => {\n const coordinates = calculateCentroid(feature.coordinates);\n return lglt2xyz([coordinates[0], coordinates[1]]);\n }\n }\n });\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport BaseModel from \"../../core/BaseModel\";\nimport { GlobelPointFillTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/earthFill/earthFill_frag.glsl' */\nconst pointFillFrag = \"in vec4 v_data;\\nin vec4 v_color;\\nin float v_radius;\\n\\nlayout(std140) uniform commonUniform {\\n float u_additive;\\n float u_stroke_opacity : 1;\\n float u_stroke_width : 2;\\n float u_blur : 0.0;\\n};\\n#pragma include \\\"sdf_2d\\\"\\n#pragma include \\\"picking\\\"\\n\\nout vec4 outputColor;\\n\\nvoid main() {\\n int shape = int(floor(v_data.w + 0.5));\\n\\n vec4 strokeColor = u_stroke == vec4(0.0) ? v_color : u_stroke;\\n\\n lowp float antialiasblur = v_data.z;\\n float r = v_radius / (v_radius + u_stroke_width);\\n\\n float outer_df;\\n float inner_df;\\n // 'circle', 'triangle', 'square', 'pentagon', 'hexagon', 'octogon', 'hexagram', 'rhombus', 'vesica'\\n if (shape == 0) {\\n outer_df = sdCircle(v_data.xy, 1.0);\\n inner_df = sdCircle(v_data.xy, r);\\n } else if (shape == 1) {\\n outer_df = sdEquilateralTriangle(1.1 * v_data.xy);\\n inner_df = sdEquilateralTriangle(1.1 / r * v_data.xy);\\n } else if (shape == 2) {\\n outer_df = sdBox(v_data.xy, vec2(1.));\\n inner_df = sdBox(v_data.xy, vec2(r));\\n } else if (shape == 3) {\\n outer_df = sdPentagon(v_data.xy, 0.8);\\n inner_df = sdPentagon(v_data.xy, r * 0.8);\\n } else if (shape == 4) {\\n outer_df = sdHexagon(v_data.xy, 0.8);\\n inner_df = sdHexagon(v_data.xy, r * 0.8);\\n } else if (shape == 5) {\\n outer_df = sdOctogon(v_data.xy, 1.0);\\n inner_df = sdOctogon(v_data.xy, r);\\n } else if (shape == 6) {\\n outer_df = sdHexagram(v_data.xy, 0.52);\\n inner_df = sdHexagram(v_data.xy, r * 0.52);\\n } else if (shape == 7) {\\n outer_df = sdRhombus(v_data.xy, vec2(1.0));\\n inner_df = sdRhombus(v_data.xy, vec2(r));\\n } else if (shape == 8) {\\n outer_df = sdVesica(v_data.xy, 1.1, 0.8);\\n inner_df = sdVesica(v_data.xy, r * 1.1, r * 0.8);\\n }\\n\\n if(outer_df > antialiasblur + 0.018) discard;\\n\\n float opacity_t = smoothstep(0.0, antialiasblur, outer_df);\\n\\n float color_t = u_stroke_width < 0.01 ? 0.0 : smoothstep(\\n antialiasblur,\\n 0.0,\\n inner_df\\n );\\n\\n if(u_stroke_width < 0.01) {\\n outputColor = vec4(v_color.rgb, v_color.a * u_opacity);\\n } else {\\n outputColor = mix(vec4(v_color.rgb, v_color.a * u_opacity), strokeColor * u_stroke_opacity, color_t);\\n }\\n\\n if(u_additive > 0.0) {\\n outputColor *= opacity_t;\\n outputColor = filterColorAlpha(outputColor, outputColor.a);\\n } else {\\n outputColor.a *= opacity_t;\\n outputColor = filterColor(outputColor);\\n }\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/earthFill/earthFill_vert.glsl' */\nconst pointFillVert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_SHAPE) in float a_Shape;\\nlayout(location = ATTRIBUTE_LOCATION_EXTRUDE) in vec3 a_Extrude;\\n\\nlayout(std140) uniform commonUniform {\\n float u_additive;\\n float u_stroke_opacity : 1;\\n float u_stroke_width : 2;\\n float u_blur : 0.0;\\n};\\nout vec4 v_data;\\nout vec4 v_color;\\nout float v_radius;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"picking\\\"\\n\\n\\nvoid main() {\\n vec3 extrude = a_Extrude;\\n float shape_type = a_Shape;\\n /*\\n * setPickingSize \\u8BBE\\u7F6E\\u62FE\\u53D6\\u5927\\u5C0F\\n */\\n float newSize = setPickingSize(a_Size);\\n // float newSize = setPickingSize(a_Size) * 0.00001038445708445579;\\n\\n // unpack color(vec2)\\n v_color = a_Color;\\n\\n // radius(16-bit)\\n v_radius = newSize;\\n\\n // anti-alias\\n // float antialiased_blur = -max(u_blur, antialiasblur);\\n float antialiasblur = -max(2.0 / u_DevicePixelRatio / newSize, u_blur);\\n\\n // TODP: /abs(extrude.x) \\u662F\\u4E3A\\u4E86\\u517C\\u5BB9\\u5730\\u7403\\u6A21\\u5F0F\\n v_data = vec4(extrude.x/abs(extrude.x), extrude.y/abs(extrude.y), antialiasblur,shape_type);\\n\\n gl_Position = u_ViewProjectionMatrix * vec4(a_Position + extrude * newSize * 0.1 + vec3(u_offsets,0.0), 1.0);\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nimport { mat4, vec3 } from 'gl-matrix';\nexport default class FillModel extends BaseModel {\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n SHAPE: 10,\n EXTRUDE: 11\n });\n }\n getCommonUniformsInfo() {\n const {\n strokeOpacity = 1,\n strokeWidth = 0,\n // offsets = [0, 0],\n blend,\n blur = 0\n } = this.layer.getLayerConfig();\n this.layer.getLayerConfig();\n const commonOptions = {\n u_additive: blend === 'additive' ? 1.0 : 0.0,\n u_stroke_opacity: strokeOpacity,\n u_stroke_width: strokeWidth,\n u_blur: blur\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.initUniformsBuffer();\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.layer.triangulation = GlobelPointFillTriangulation;\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'pointEarthFill',\n vertexShader: pointFillVert,\n fragmentShader: pointFillFrag,\n triangulation: GlobelPointFillTriangulation,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n depth: {\n enable: true\n },\n blend: _this2.getBlend()\n });\n return [model];\n })();\n }\n\n // overwrite baseModel func\n animateOption2Array(option) {\n return [option.enable ? 0 : 1.0, option.speed || 1, option.rings || 3, 0];\n }\n registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\n shaderLocation: this.attributeLocation.EXTRUDE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: (feature, featureIdx, vertex, attributeIdx) => {\n const [x, y, z] = vertex;\n const n1 = vec3.fromValues(0, 0, 1);\n const n2 = vec3.fromValues(x, 0, z);\n const xzReg = x >= 0 ? vec3.angle(n1, n2) : Math.PI * 2 - vec3.angle(n1, n2);\n const yReg = Math.PI * 2 - Math.asin(y / 100);\n const m = mat4.create();\n mat4.rotateY(m, m, xzReg);\n mat4.rotateX(m, m, yReg);\n const v1 = vec3.fromValues(1, 1, 0);\n vec3.transformMat4(v1, v1, m);\n vec3.normalize(v1, v1);\n const v2 = vec3.fromValues(-1, 1, 0);\n vec3.transformMat4(v2, v2, m);\n vec3.normalize(v2, v2);\n const v3 = vec3.fromValues(-1, -1, 0);\n vec3.transformMat4(v3, v3, m);\n vec3.normalize(v3, v3);\n const v4 = vec3.fromValues(1, -1, 0);\n vec3.transformMat4(v4, v4, m);\n vec3.normalize(v4, v4);\n const extrude = [...v1, ...v2, ...v3, ...v4];\n const extrudeIndex = attributeIdx % 4 * 3;\n return [extrude[extrudeIndex], extrude[extrudeIndex + 1], extrude[extrudeIndex + 2]];\n }\n }\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n size = 5\n } = feature;\n return Array.isArray(size) ? [size[0]] : [size];\n }\n }\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'shape',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Shape',\n shaderLocation: this.attributeLocation.SHAPE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n shape = 2\n } = feature;\n const shape2d = this.layer.getLayerConfig().shape2d;\n const shapeIndex = shape2d.indexOf(shape);\n return [shapeIndex];\n }\n }\n });\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport BaseModel from \"../../core/BaseModel\";\nimport { SizeUnitType } from \"../../core/interface\";\nimport { PointFillTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/fillImage/fillImage_frag.glsl' */\nconst pointFillFrag = \"in vec2 v_uv;// \\u672C\\u8EAB\\u7684 uv \\u5750\\u6807\\nin vec2 v_Iconuv;\\nin float v_opacity;\\nout vec4 outputColor;\\n\\nuniform sampler2D u_texture;\\nlayout(std140) uniform commonUniform {\\n vec2 u_textSize;\\n float u_heightfixed: 0.0;\\n float u_raisingHeight: 0.0;\\n float u_size_unit;\\n};\\n\\n#pragma include \\\"scene_uniforms\\\"\\n#pragma include \\\"sdf_2d\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n vec2 pos = v_Iconuv / u_textSize + v_uv / u_textSize * 64.;\\n outputColor = texture(SAMPLER_2D(u_texture), pos);\\n outputColor.a *= v_opacity;\\n outputColor = filterColor(outputColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/fillImage/fillImage_vert.glsl' */\nconst pointFillVert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_EXTRUDE) in vec3 a_Extrude;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_Uv;\\n\\nlayout(std140) uniform commonUniform {\\n vec2 u_textSize;\\n float u_heightfixed;\\n float u_raisingHeight;\\n float u_size_unit;\\n};\\n\\nout vec2 v_uv;\\nout vec2 v_Iconuv;\\nout float v_opacity;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"picking\\\"\\n#pragma include \\\"rotation_2d\\\"\\n\\nvoid main() {\\n vec3 extrude = a_Extrude;\\n v_uv = (a_Extrude.xy + 1.0) / 2.0;\\n v_uv.y = 1.0 - v_uv.y;\\n v_Iconuv = a_Uv;\\n v_opacity = opacity;\\n float newSize = a_Size;\\n if (u_size_unit == 1.0) {\\n newSize = newSize * u_PixelsPerMeter.z;\\n }\\n\\n // vec2 offset = (u_RotateMatrix * extrude.xy * (a_Size) + textrueOffsets);\\n vec2 offset = extrude.xy * newSize + offsets;\\n\\n offset = rotate_matrix(offset, rotation);\\n\\n offset = project_pixel(offset);\\n\\n vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0), a_Position64Low);\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nexport default class FillImageModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"meter2coord\", 1);\n _defineProperty(this, \"texture\", void 0);\n _defineProperty(this, \"isMeter\", false);\n _defineProperty(this, \"radian\", 0);\n _defineProperty(this, \"updateTexture\", () => {\n const {\n createTexture2D\n } = this.rendererService;\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas(),\n mag: 'linear',\n min: 'linear mipmap nearest',\n mipmap: true\n });\n // 更新完纹理后在更新的图层的时候需要更新所有的图层\n this.layerService.throttleRenderLayers();\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.LINEAR,\n min: gl.LINEAR_MIPMAP_LINEAR,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128,\n mipmap: true\n });\n this.textures = [this.texture];\n });\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n EXTRUDE: 10,\n UV: 11\n });\n }\n // 旋转的弧度\n getCommonUniformsInfo() {\n const {\n raisingHeight = 0.0,\n heightfixed = false,\n unit = 'pixel'\n } = this.layer.getLayerConfig();\n if (this.rendererService.getDirty()) {\n var _this$texture;\n (_this$texture = this.texture) === null || _this$texture === void 0 || _this$texture.bind();\n }\n const commonOptions = {\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n u_heightfixed: Number(heightfixed),\n u_raisingHeight: Number(raisingHeight),\n u_size_unit: SizeUnitType[unit]\n }; //2+1+1+1\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n getAttribute() {\n return this.styleAttributeService.createAttributesAndIndices(this.layer.getEncodedData(), PointFillTriangulation);\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.iconService.on('imageUpdate', _this.updateTexture);\n _this.updateTexture();\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.initUniformsBuffer();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'pointFillImage',\n vertexShader: pointFillVert,\n fragmentShader: pointFillFrag,\n triangulation: PointFillTriangulation,\n depth: {\n enable: false\n },\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n cull: {\n enable: true,\n face: gl.FRONT\n }\n });\n return [model];\n })();\n }\n clearModels() {\n var _this$texture2;\n this.iconService.off('imageUpdate', this.updateTexture);\n (_this$texture2 = this.texture) === null || _this$texture2 === void 0 || _this$texture2.destroy();\n }\n\n // overwrite baseModel func\n registerBuiltinAttributes() {\n // 注册 Position 属性 64 位地位部分,经纬度数据开启双精度,避免大于 20层级以上出现数据偏移\n this.registerPosition64LowAttribute();\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n shaderLocation: this.attributeLocation.UV,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: feature => {\n const iconMap = this.iconService.getIconMap();\n const {\n shape\n } = feature;\n const {\n x,\n y\n } = iconMap[shape] || {\n x: -64,\n y: -64\n };\n return [x, y];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\n shaderLocation: this.attributeLocation.EXTRUDE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: (feature, featureIdx, vertex, attributeIdx) => {\n const extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];\n const extrudeIndex = attributeIdx % 4 * 3;\n return [extrude[extrudeIndex], extrude[extrudeIndex + 1], extrude[extrudeIndex + 2]];\n }\n }\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n size = 5\n } = feature;\n return Array.isArray(size) ? [size[0]] : [size];\n }\n }\n });\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport BaseModel from \"../../core/BaseModel\";\nimport { SizeUnitType } from \"../../core/interface\";\nimport { PointFillTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/radar/radar_frag.glsl' */\nconst pointFillFrag = \"\\nlayout(std140) uniform commonUniorm{\\n float u_additive;\\n float u_size_unit;\\n float u_speed: 1.0;\\n float u_time;\\n};\\nin vec4 v_data;\\nin vec4 v_color;\\nin float v_radius;\\nin vec2 v_extrude;\\n#pragma include \\\"sdf_2d\\\"\\n#pragma include \\\"picking\\\"\\n\\nout vec4 outputColor;\\n\\nvoid main() {\\n\\n lowp float antialiasblur = v_data.z;\\n float r = v_radius / (v_radius);\\n\\n float outer_df = sdCircle(v_data.xy, 1.0);\\n float inner_df = sdCircle(v_data.xy, r);\\n\\n float opacity_t = smoothstep(0.0, antialiasblur, outer_df);\\n\\n outputColor = vec4(v_color.rgb, v_color.a);\\n\\n if(u_additive > 0.0) {\\n outputColor *= opacity_t;\\n } else {\\n outputColor.a *= opacity_t;\\n }\\n\\n if(outputColor.a > 0.0) {\\n outputColor = filterColor(outputColor);\\n }\\n\\n vec2 extrude = v_extrude;\\n vec2 dir = normalize(extrude);\\n vec2 baseDir = vec2(1.0, 0.0);\\n float pi = 3.14159265359;\\n float flag = sign(dir.y);\\n float rades = dot(dir, baseDir);\\n float radar_v = (flag - 1.0) * -0.5 * acos(rades)/pi;\\n // simple AA\\n if(radar_v > 0.99) {\\n radar_v = 1.0 - (radar_v - 0.99)/0.01;\\n }\\n\\n outputColor.a *= radar_v;\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/radar/radar_vert.glsl' */\nconst pointFillVert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_EXTRUDE) in vec3 a_Extrude;\\n\\nlayout(std140) uniform commonUniorm {\\n float u_additive;\\n float u_size_unit;\\n float u_speed: 1.0;\\n float u_time;\\n};\\n\\nout vec4 v_data;\\nout vec4 v_color;\\nout float v_radius;\\nout vec2 v_extrude;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n float newSize = setPickingSize(a_Size);\\n\\n float time = u_time * u_speed;\\n mat2 rotateMatrix = mat2(\\n cos(time), sin(time),\\n -sin(time), cos(time)\\n );\\n v_extrude = rotateMatrix * a_Extrude.xy;\\n\\n v_color = a_Color;\\n v_color.a *= opacity;\\n\\n float blur = 0.0;\\n float antialiasblur = -max(2.0 / u_DevicePixelRatio / a_Size, blur);\\n\\n if(u_size_unit == 1.) {\\n newSize = newSize * u_PixelsPerMeter.z;\\n }\\n v_radius = newSize;\\n\\n vec2 offset = (a_Extrude.xy * (newSize));\\n\\n offset = project_pixel(offset);\\n\\n v_data = vec4(a_Extrude.x, a_Extrude.y, antialiasblur, -1.0);\\n\\n vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0), a_Position64Low);\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nexport default class RadarModel extends BaseModel {\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n EXTRUDE: 10\n });\n }\n getCommonUniformsInfo() {\n const {\n blend,\n speed = 1,\n unit = 'pixel'\n } = this.layer.getLayerConfig();\n const commonOptions = {\n u_additive: blend === 'additive' ? 1.0 : 0.0,\n u_size_unit: SizeUnitType[unit],\n u_speed: speed,\n u_time: this.layer.getLayerAnimateTime()\n }; //1+1+1+1\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n getAnimateUniforms() {\n return {};\n }\n getAttribute() {\n return this.styleAttributeService.createAttributesAndIndices(this.layer.getEncodedData(), PointFillTriangulation);\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.initUniformsBuffer();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'pointRadar',\n vertexShader: pointFillVert,\n fragmentShader: pointFillFrag,\n triangulation: PointFillTriangulation,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n depth: {\n enable: false\n }\n });\n return [model];\n })();\n }\n\n // overwrite baseModel func\n animateOption2Array(option) {\n return [option.enable ? 0 : 1.0, option.speed || 1, option.rings || 3, 0];\n }\n registerBuiltinAttributes() {\n // 注册 Position 属性 64 位地位部分,经纬度数据开启双精度,避免大于 20层级以上出现数据偏移\n this.registerPosition64LowAttribute();\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\n shaderLocation: this.attributeLocation.EXTRUDE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: (feature, featureIdx, vertex, attributeIdx) => {\n const extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];\n const extrudeIndex = attributeIdx % 4 * 3;\n return [extrude[extrudeIndex], extrude[extrudeIndex + 1], extrude[extrudeIndex + 2]];\n }\n }\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n shaderLocation: this.attributeLocation.SIZE,\n name: 'a_Size',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n size = 5\n } = feature;\n return Array.isArray(size) ? [size[0]] : [size];\n }\n }\n });\n }\n}","import SimplePoint from \"./billboard_point\";\nimport EarthExtrudeModel from \"./earthExtrude\";\n// earth\nimport EarthFillModel from \"./earthFill\";\nimport ExtrudeModel from \"./extrude\";\nimport FillModel from \"./fill\";\nimport FillImageModel from \"./fillImage\";\nimport IMageModel from \"./image\";\nimport NormalModel from \"./normal\";\nimport Radar from \"./radar\";\nimport TextModel from \"./text\";\nconst PointModels = {\n fillImage: FillImageModel,\n fill: FillModel,\n radar: Radar,\n image: IMageModel,\n normal: NormalModel,\n simplePoint: SimplePoint,\n extrude: ExtrudeModel,\n text: TextModel,\n earthFill: EarthFillModel,\n earthExtrude: EarthExtrudeModel\n};\nexport default PointModels;","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport BaseLayer from \"../core/BaseLayer\";\nimport PointModels from \"./models/index\";\nexport default class PointLayer extends BaseLayer {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"type\", 'PointLayer');\n _defineProperty(this, \"enableShaderEncodeStyles\", ['stroke', 'offsets', 'opacity', 'rotation']);\n //4+2+1+1\n _defineProperty(this, \"enableDataEncodeStyles\", ['textOffset', 'textAnchor']);\n _defineProperty(this, \"defaultSourceConfig\", {\n data: [],\n options: {\n parser: {\n type: 'json',\n x: 'lng',\n y: 'lat'\n }\n }\n });\n }\n buildModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const modelType = _this.getModelType();\n if (_this.layerModel) {\n _this.layerModel.clearModels();\n }\n _this.layerModel = new PointModels[modelType](_this);\n yield _this.initLayerModels();\n })();\n }\n rebuildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n yield _this2.buildModels();\n })();\n }\n\n /**\n * 在未传入数据的时候判断点图层的 shape 类型\n * @returns\n */\n getModelTypeWillEmptyData() {\n if (this.shapeOption) {\n const {\n field,\n values\n } = this.shapeOption;\n const {\n shape2d\n } = this.getLayerConfig();\n const iconMap = this.iconService.getIconMap();\n if (field && (shape2d === null || shape2d === void 0 ? void 0 : shape2d.indexOf(field)) !== -1) {\n return 'fill';\n }\n if (values === 'text') {\n return 'text';\n }\n if (values && values instanceof Array) {\n for (const v of values) {\n if (typeof v === 'string' && iconMap.hasOwnProperty(v)) {\n return 'image';\n }\n }\n }\n }\n return 'normal';\n }\n getDefaultConfig() {\n const type = this.getModelType();\n const defaultConfig = {\n fillImage: {},\n normal: {\n blend: 'additive'\n },\n radar: {},\n simplePoint: {},\n fill: {\n blend: 'normal'\n },\n extrude: {},\n image: {},\n text: {\n blend: 'normal'\n },\n tile: {},\n tileText: {},\n earthFill: {},\n earthExtrude: {}\n };\n return defaultConfig[type];\n }\n getModelType() {\n // 2D、 3d、 shape、image、text、normal、\n const layerData = this.getEncodedData();\n const {\n shape2d,\n shape3d,\n billboard = true\n } = this.getLayerConfig();\n const iconMap = this.iconService.getIconMap();\n const item = layerData.find(fe => {\n return fe.hasOwnProperty('shape');\n });\n if (!item) {\n return this.getModelTypeWillEmptyData();\n } else {\n const shape = item.shape;\n if (shape === 'dot') {\n return 'normal';\n }\n if (shape === 'simple') {\n return 'simplePoint';\n }\n if (shape === 'radar') {\n return 'radar';\n }\n if (this.layerType === 'fillImage' || billboard === false) {\n return 'fillImage';\n }\n if ((shape2d === null || shape2d === void 0 ? void 0 : shape2d.indexOf(shape)) !== -1) {\n if (this.mapService.version === 'GLOBEL') {\n return 'earthFill';\n } else {\n return 'fill';\n }\n }\n if ((shape3d === null || shape3d === void 0 ? void 0 : shape3d.indexOf(shape)) !== -1) {\n if (this.mapService.version === 'GLOBEL') {\n return 'earthExtrude';\n } else {\n return 'extrude';\n }\n }\n if (iconMap.hasOwnProperty(shape)) {\n return 'image';\n }\n return 'text';\n }\n }\n}","import { isArray, get } from '@antv/util';\nimport { stratify, hierarchy, treemap as treemapLayout, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify, } from '@antv/vendor/d3-hierarchy';\nimport { field } from '../mark/utils';\n/**\n * @description Path need when the data is a flat json structure,\n * and the tree object structure do not need.\n */\nfunction generateHierarchyRoot(data, path) {\n if (Array.isArray(data)) {\n return typeof path === 'function'\n ? stratify().path(path)(data)\n : stratify()(data);\n }\n return hierarchy(data);\n}\nfunction addObjectDataPath(root, path = [root.data.name]) {\n // @ts-ignore\n root.id = root.id || root.data.name;\n root.path = path;\n if (root.children) {\n root.children.forEach((item) => {\n // @ts-ignore\n item.id = `${root.id}/${item.data.name}`;\n item.path = [...path, item.data.name];\n addObjectDataPath(item, item.path);\n });\n }\n}\nfunction addArrayDataPath(root) {\n const name = get(root, ['data', 'name']);\n if (name.replaceAll) {\n root.path = name.replaceAll('.', '/').split('/');\n }\n if (root.children) {\n root.children.forEach((item) => {\n addArrayDataPath(item);\n });\n }\n}\nfunction getTileMethod(tile, ratio) {\n const tiles = {\n treemapBinary,\n treemapDice,\n treemapSlice,\n treemapSliceDice,\n treemapSquarify,\n treemapResquarify,\n };\n const tileMethod = tile === 'treemapSquarify' ? tiles[tile].ratio(ratio) : tiles[tile];\n if (!tileMethod) {\n throw new TypeError('Invalid tile method!');\n }\n return tileMethod;\n}\nexport function treeDataTransform(data, layout, encode) {\n const { value } = encode;\n const tileMethod = getTileMethod(layout.tile, layout.ratio);\n const root = generateHierarchyRoot(data, layout.path);\n if (isArray(data)) {\n addArrayDataPath(root);\n }\n else {\n addObjectDataPath(root);\n }\n // Calculate the value and sort.\n value\n ? root\n .sum((d) => layout.ignoreParentValue && d.children\n ? 0\n : field(value)(d))\n .sort(layout.sort)\n : root.count();\n treemapLayout()\n .tile(tileMethod)\n // @ts-ignore\n .size(layout.size)\n .round(layout.round)\n .paddingInner(layout.paddingInner)\n .paddingOuter(layout.paddingOuter)\n .paddingTop(layout.paddingTop)\n .paddingRight(layout.paddingRight)\n .paddingBottom(layout.paddingBottom)\n .paddingLeft(layout.paddingLeft)(root);\n const nodes = root.descendants().map((d) => Object.assign(d, {\n id: d.id.replace(/^\\//, ''),\n x: [d.x0, d.x1],\n y: [d.y0, d.y1],\n }));\n const filterData = nodes.filter(typeof layout.layer === 'function'\n ? layout.layer\n : (d) => d.height === layout.layer);\n return [filterData, nodes];\n}\n//# sourceMappingURL=treeDataTransform.js.map","/**\n * Common utilities\n * @module glMatrix\n */\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nexport var RANDOM = Math.random;\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 */\n\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\n/**\n * Convert Degree To Radian\n *\n * @param {Number} a Angle in Degrees\n */\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 */\n\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n","/**\n * 判断值是否为数组\n * @return 是否为数组\n */\nexport default function isArray(value) {\n return Array.isArray(value);\n}\n//# sourceMappingURL=is-array.js.map","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n","import _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\", \"trigger\", \"onVisibleChange\", \"onOpenChange\", \"modalProps\", \"onFinish\", \"submitTimeout\", \"title\", \"width\", \"visible\", \"open\"];\nimport { openVisibleCompatible } from '@ant-design/pro-utils';\nimport { ConfigProvider, Modal } from 'antd';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport { merge } from \"rc-util/es/utils/set\";\nimport { noteOnce } from \"rc-util/es/warning\";\nimport React, { useCallback, useContext, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { BaseForm } from \"../../BaseForm\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction ModalForm(_ref) {\n var _context$locale3, _context$locale4;\n var children = _ref.children,\n trigger = _ref.trigger,\n onVisibleChange = _ref.onVisibleChange,\n onOpenChange = _ref.onOpenChange,\n modalProps = _ref.modalProps,\n onFinish = _ref.onFinish,\n submitTimeout = _ref.submitTimeout,\n title = _ref.title,\n width = _ref.width,\n propVisible = _ref.visible,\n propsOpen = _ref.open,\n rest = _objectWithoutProperties(_ref, _excluded);\n noteOnce(\n // eslint-disable-next-line @typescript-eslint/dot-notation\n !rest['footer'] || !(modalProps !== null && modalProps !== void 0 && modalProps.footer), 'ModalForm 是一个 ProForm 的特殊布局,如果想自定义按钮,请使用 submit.render 自定义。');\n var context = useContext(ConfigProvider.ConfigContext);\n var _useState = useState([]),\n _useState2 = _slicedToArray(_useState, 2),\n forceUpdate = _useState2[1];\n var _useState3 = useState(false),\n _useState4 = _slicedToArray(_useState3, 2),\n loading = _useState4[0],\n setLoading = _useState4[1];\n var _useMergedState = useMergedState(!!propVisible, {\n value: propsOpen || propVisible,\n onChange: onOpenChange || onVisibleChange\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n open = _useMergedState2[0],\n setOpen = _useMergedState2[1];\n var footerRef = useRef(null);\n var footerDomRef = useCallback(function (element) {\n if (footerRef.current === null && element) {\n forceUpdate([]);\n }\n footerRef.current = element;\n }, []);\n var formRef = useRef();\n var resetFields = useCallback(function () {\n var _ref2, _rest$form, _rest$formRef;\n var form = (_ref2 = (_rest$form = rest.form) !== null && _rest$form !== void 0 ? _rest$form : (_rest$formRef = rest.formRef) === null || _rest$formRef === void 0 ? void 0 : _rest$formRef.current) !== null && _ref2 !== void 0 ? _ref2 : formRef.current;\n // 重置表单\n if (form && modalProps !== null && modalProps !== void 0 && modalProps.destroyOnClose) {\n form.resetFields();\n }\n }, [modalProps === null || modalProps === void 0 ? void 0 : modalProps.destroyOnClose, rest.form, rest.formRef]);\n useImperativeHandle(rest.formRef, function () {\n return formRef.current;\n }, [formRef.current]);\n useEffect(function () {\n if (propsOpen || propVisible) {\n onOpenChange === null || onOpenChange === void 0 || onOpenChange(true);\n onVisibleChange === null || onVisibleChange === void 0 || onVisibleChange(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [propVisible, propsOpen]);\n var triggerDom = useMemo(function () {\n if (!trigger) {\n return null;\n }\n return /*#__PURE__*/React.cloneElement(trigger, _objectSpread(_objectSpread({\n key: 'trigger'\n }, trigger.props), {}, {\n onClick: function () {\n var _onClick = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(e) {\n var _trigger$props, _trigger$props$onClic;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n setOpen(!open);\n (_trigger$props = trigger.props) === null || _trigger$props === void 0 || (_trigger$props$onClic = _trigger$props.onClick) === null || _trigger$props$onClic === void 0 || _trigger$props$onClic.call(_trigger$props, e);\n case 2:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n function onClick(_x) {\n return _onClick.apply(this, arguments);\n }\n return onClick;\n }()\n }));\n }, [setOpen, trigger, open]);\n var submitterConfig = useMemo(function () {\n var _ref3, _modalProps$okText, _context$locale, _ref4, _modalProps$cancelTex, _context$locale2, _rest$submitter;\n if (rest.submitter === false) {\n return false;\n }\n return merge({\n searchConfig: {\n submitText: (_ref3 = (_modalProps$okText = modalProps === null || modalProps === void 0 ? void 0 : modalProps.okText) !== null && _modalProps$okText !== void 0 ? _modalProps$okText : (_context$locale = context.locale) === null || _context$locale === void 0 || (_context$locale = _context$locale.Modal) === null || _context$locale === void 0 ? void 0 : _context$locale.okText) !== null && _ref3 !== void 0 ? _ref3 : '确认',\n resetText: (_ref4 = (_modalProps$cancelTex = modalProps === null || modalProps === void 0 ? void 0 : modalProps.cancelText) !== null && _modalProps$cancelTex !== void 0 ? _modalProps$cancelTex : (_context$locale2 = context.locale) === null || _context$locale2 === void 0 || (_context$locale2 = _context$locale2.Modal) === null || _context$locale2 === void 0 ? void 0 : _context$locale2.cancelText) !== null && _ref4 !== void 0 ? _ref4 : '取消'\n },\n resetButtonProps: {\n preventDefault: true,\n // 提交表单loading时,不可关闭弹框\n disabled: submitTimeout ? loading : undefined,\n onClick: function onClick(e) {\n var _modalProps$onCancel;\n setOpen(false);\n // fix: #6006 点击取消按钮时,那么必然会触发弹窗关闭,我们无需在 此处重置表单,只需在弹窗关闭时重置即可\n modalProps === null || modalProps === void 0 || (_modalProps$onCancel = modalProps.onCancel) === null || _modalProps$onCancel === void 0 || _modalProps$onCancel.call(modalProps, e);\n }\n }\n }, (_rest$submitter = rest.submitter) !== null && _rest$submitter !== void 0 ? _rest$submitter : {});\n }, [(_context$locale3 = context.locale) === null || _context$locale3 === void 0 || (_context$locale3 = _context$locale3.Modal) === null || _context$locale3 === void 0 ? void 0 : _context$locale3.cancelText, (_context$locale4 = context.locale) === null || _context$locale4 === void 0 || (_context$locale4 = _context$locale4.Modal) === null || _context$locale4 === void 0 ? void 0 : _context$locale4.okText, modalProps, rest.submitter, setOpen, loading, submitTimeout]);\n var contentRender = useCallback(function (formDom, submitter) {\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [formDom, footerRef.current && submitter ? /*#__PURE__*/_jsx(React.Fragment, {\n children: /*#__PURE__*/createPortal(submitter, footerRef.current)\n }, \"submitter\") : submitter]\n });\n }, []);\n var onFinishHandle = useCallback( /*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(values) {\n var response, timer, result;\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n response = onFinish === null || onFinish === void 0 ? void 0 : onFinish(values);\n if (submitTimeout && response instanceof Promise) {\n setLoading(true);\n timer = setTimeout(function () {\n return setLoading(false);\n }, submitTimeout);\n response.finally(function () {\n clearTimeout(timer);\n setLoading(false);\n });\n }\n _context2.next = 4;\n return response;\n case 4:\n result = _context2.sent;\n // 返回真值,关闭弹框\n if (result) {\n setOpen(false);\n }\n return _context2.abrupt(\"return\", result);\n case 7:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n return function (_x2) {\n return _ref5.apply(this, arguments);\n };\n }(), [onFinish, setOpen, submitTimeout]);\n var modalOpenProps = openVisibleCompatible(open);\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Modal, _objectSpread(_objectSpread(_objectSpread({\n title: title,\n width: width || 800\n }, modalProps), modalOpenProps), {}, {\n onCancel: function onCancel(e) {\n var _modalProps$onCancel2;\n // 提交表单loading时,阻止弹框关闭\n if (submitTimeout && loading) return;\n setOpen(false);\n modalProps === null || modalProps === void 0 || (_modalProps$onCancel2 = modalProps.onCancel) === null || _modalProps$onCancel2 === void 0 || _modalProps$onCancel2.call(modalProps, e);\n },\n afterClose: function afterClose() {\n var _modalProps$afterClos;\n resetFields();\n if (open) {\n setOpen(false);\n }\n modalProps === null || modalProps === void 0 || (_modalProps$afterClos = modalProps.afterClose) === null || _modalProps$afterClos === void 0 || _modalProps$afterClos.call(modalProps);\n },\n footer: rest.submitter !== false ? /*#__PURE__*/_jsx(\"div\", {\n ref: footerDomRef,\n style: {\n display: 'flex',\n justifyContent: 'flex-end'\n }\n }) : null,\n children: /*#__PURE__*/_jsx(BaseForm, _objectSpread(_objectSpread({\n formComponentType: \"ModalForm\",\n layout: \"vertical\"\n }, rest), {}, {\n onInit: function onInit(_, form) {\n var _rest$onInit;\n if (rest.formRef) {\n rest.formRef.current = form;\n }\n rest === null || rest === void 0 || (_rest$onInit = rest.onInit) === null || _rest$onInit === void 0 || _rest$onInit.call(rest, _, form);\n formRef.current = form;\n },\n formRef: formRef,\n submitter: submitterConfig,\n onFinish: ( /*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(values) {\n var result;\n return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return onFinishHandle(values);\n case 2:\n result = _context3.sent;\n return _context3.abrupt(\"return\", result);\n case 4:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }));\n return function (_x3) {\n return _ref6.apply(this, arguments);\n };\n }()),\n contentRender: contentRender,\n children: children\n }))\n })), triggerDom]\n });\n}\nexport { ModalForm };","// This icon file is generated automatically.\nvar EyeInvisibleOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M942.2 486.2Q889.47 375.11 816.7 305l-50.88 50.88C807.31 395.53 843.45 447.4 874.7 512 791.5 684.2 673.4 766 512 766q-72.67 0-133.87-22.38L323 798.75Q408 838 512 838q288.3 0 430.2-300.3a60.29 60.29 0 000-51.5zm-63.57-320.64L836 122.88a8 8 0 00-11.32 0L715.31 232.2Q624.86 186 512 186q-288.3 0-430.2 300.3a60.3 60.3 0 000 51.5q56.69 119.4 136.5 191.41L112.48 835a8 8 0 000 11.31L155.17 889a8 8 0 0011.31 0l712.15-712.12a8 8 0 000-11.32zM149.3 512C232.6 339.8 350.7 258 512 258c54.54 0 104.13 9.36 149.12 28.39l-70.3 70.3a176 176 0 00-238.13 238.13l-83.42 83.42C223.1 637.49 183.3 582.28 149.3 512zm246.7 0a112.11 112.11 0 01146.2-106.69L401.31 546.2A112 112 0 01396 512z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M508 624c-3.46 0-6.87-.16-10.25-.47l-52.82 52.82a176.09 176.09 0 00227.42-227.42l-52.82 52.82c.31 3.38.47 6.79.47 10.25a111.94 111.94 0 01-112 112z\" } }] }, \"name\": \"eye-invisible\", \"theme\": \"outlined\" };\nexport default EyeInvisibleOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport EyeInvisibleOutlinedSvg from \"@ant-design/icons-svg/es/asn/EyeInvisibleOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar EyeInvisibleOutlined = function EyeInvisibleOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: EyeInvisibleOutlinedSvg\n }));\n};\n\n/**![eye-invisible](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTk0Mi4yIDQ4Ni4yUTg4OS40NyAzNzUuMTEgODE2LjcgMzA1bC01MC44OCA1MC44OEM4MDcuMzEgMzk1LjUzIDg0My40NSA0NDcuNCA4NzQuNyA1MTIgNzkxLjUgNjg0LjIgNjczLjQgNzY2IDUxMiA3NjZxLTcyLjY3IDAtMTMzLjg3LTIyLjM4TDMyMyA3OTguNzVRNDA4IDgzOCA1MTIgODM4cTI4OC4zIDAgNDMwLjItMzAwLjNhNjAuMjkgNjAuMjkgMCAwMDAtNTEuNXptLTYzLjU3LTMyMC42NEw4MzYgMTIyLjg4YTggOCAwIDAwLTExLjMyIDBMNzE1LjMxIDIzMi4yUTYyNC44NiAxODYgNTEyIDE4NnEtMjg4LjMgMC00MzAuMiAzMDAuM2E2MC4zIDYwLjMgMCAwMDAgNTEuNXE1Ni42OSAxMTkuNCAxMzYuNSAxOTEuNDFMMTEyLjQ4IDgzNWE4IDggMCAwMDAgMTEuMzFMMTU1LjE3IDg4OWE4IDggMCAwMDExLjMxIDBsNzEyLjE1LTcxMi4xMmE4IDggMCAwMDAtMTEuMzJ6TTE0OS4zIDUxMkMyMzIuNiAzMzkuOCAzNTAuNyAyNTggNTEyIDI1OGM1NC41NCAwIDEwNC4xMyA5LjM2IDE0OS4xMiAyOC4zOWwtNzAuMyA3MC4zYTE3NiAxNzYgMCAwMC0yMzguMTMgMjM4LjEzbC04My40MiA4My40MkMyMjMuMSA2MzcuNDkgMTgzLjMgNTgyLjI4IDE0OS4zIDUxMnptMjQ2LjcgMGExMTIuMTEgMTEyLjExIDAgMDExNDYuMi0xMDYuNjlMNDAxLjMxIDU0Ni4yQTExMiAxMTIgMCAwMTM5NiA1MTJ6IiAvPjxwYXRoIGQ9Ik01MDggNjI0Yy0zLjQ2IDAtNi44Ny0uMTYtMTAuMjUtLjQ3bC01Mi44MiA1Mi44MmExNzYuMDkgMTc2LjA5IDAgMDAyMjcuNDItMjI3LjQybC01Mi44MiA1Mi44MmMuMzEgMy4zOC40NyA2Ljc5LjQ3IDEwLjI1YTExMS45NCAxMTEuOTQgMCAwMS0xMTIgMTEyeiIgLz48L3N2Zz4=) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(EyeInvisibleOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'EyeInvisibleOutlined';\n}\nexport default RefIcon;","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { rollups } from '@antv/vendor/d3-array';\nimport { defined } from '../utils/helper';\nimport { useLibrary } from './library';\nimport { applyDefaults, applyDataTransform, extractColumns, flatEncode, inferChannelsType, maybeArrayField, maybeVisualChannel, addGuideToScale, maybeNonAnimate, normalizeTooltip, extractTooltip, } from './transform';\nexport function initializeMark(partialMark, partialProps, context) {\n return __awaiter(this, void 0, void 0, function* () {\n // Apply transform to mark to derive indices, data, encode, etc,.\n const [I, transformedMark] = yield applyMarkTransform(partialMark, partialProps, context);\n const { encode, scale, data, tooltip } = transformedMark;\n // Skip mark with non-tabular data. Do not skip empty\n // data, they are useful for facet to display axes.\n if (Array.isArray(data) === false) {\n return null;\n }\n // Group non-independent channels with same prefix, such as x1, x2 => x.\n // For independent channels, dot not group them, such as position1, position2.\n const { channels: channelDescriptors } = partialProps;\n const nameChannels = rollups(Object.entries(encode).filter(([, value]) => defined(value)), (values) => values.map(([key, options]) => (Object.assign({ name: key }, options))), ([key]) => {\n var _a;\n const prefix = (_a = /([^\\d]+)\\d*$/.exec(key)) === null || _a === void 0 ? void 0 : _a[1];\n const descriptor = channelDescriptors.find((d) => d.name === prefix);\n if (descriptor === null || descriptor === void 0 ? void 0 : descriptor.independent)\n return key;\n return prefix;\n });\n // Check required channels and initialize scale options for each channel.\n const channels = channelDescriptors\n .filter((descriptor) => {\n const { name, required } = descriptor;\n if (nameChannels.find(([d]) => d === name))\n return true;\n if (required)\n throw new Error(`Missing encoding for channel: ${name}.`);\n return false;\n })\n .flatMap((descriptor) => {\n const { name, scale: scaleType, scaleKey, range, quantitative, ordinal, } = descriptor;\n const valuesArray = nameChannels.filter(([channel]) => channel.startsWith(name));\n return valuesArray.map(([channel, values], i) => {\n const visual = values.some((d) => d.visual);\n const constant = values.some((d) => d.constant);\n const _a = scale[channel] || {}, { independent = false, \n // Use channel name as default scale key.\n key = scaleKey || channel, \n // Visual channel use identity scale.\n type = constant ? 'constant' : visual ? 'identity' : scaleType } = _a, scaleOptions = __rest(_a, [\"independent\", \"key\", \"type\"]);\n // For constant scale, infer range from data.\n const isConstant = type === 'constant';\n const finalRange = isConstant ? undefined : range;\n return {\n name: channel,\n values,\n // Generate a unique key for independent channel,\n // which will not group with any other channels.\n scaleKey: independent || isConstant ? Symbol('independent') : key,\n scale: Object.assign(Object.assign({ type, range: finalRange }, scaleOptions), { quantitative,\n ordinal }),\n };\n });\n });\n return [transformedMark, Object.assign(Object.assign({}, partialProps), { index: I, channels, tooltip })];\n });\n}\nexport function createColumnOf(library) {\n const [useEncode] = useLibrary('encode', library);\n return (data, encode) => {\n if (encode === undefined)\n return null;\n if (data === undefined)\n return null;\n return Object.assign(Object.assign({}, encode), { type: 'column', value: useEncode(encode)(data), field: fieldOf(encode) });\n };\n}\nfunction applyMarkTransform(mark, props, context) {\n return __awaiter(this, void 0, void 0, function* () {\n const { library } = context;\n const [useTransform] = useLibrary('transform', library);\n const { preInference = [], postInference = [] } = props;\n const { transform = [] } = mark;\n const transforms = [\n applyDefaults,\n applyDataTransform,\n flatEncode,\n inferChannelsType,\n maybeVisualChannel,\n extractColumns,\n maybeArrayField,\n maybeNonAnimate,\n addGuideToScale,\n normalizeTooltip,\n ...preInference.map(useTransform),\n ...transform.map(useTransform),\n ...postInference.map(useTransform),\n extractTooltip,\n ];\n let index = [];\n let transformedMark = mark;\n for (const t of transforms) {\n [index, transformedMark] = yield t(index, transformedMark, context);\n }\n return [index, transformedMark];\n });\n}\nfunction fieldOf(encode) {\n const { type, value } = encode;\n if (type === 'field' && typeof value === 'string')\n return value;\n return null;\n}\n//# sourceMappingURL=mark.js.map","/**\n * 判断值是否为数字\n * @return 是否为数字\n */\nexport default function isNumber(value) {\n return typeof value === 'number';\n}\n//# sourceMappingURL=is-number.js.map","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","import {InternMap} from \"internmap\";\nimport identity from \"./identity.js\";\n\nexport default function group(values, ...keys) {\n return nest(values, identity, identity, keys);\n}\n\nexport function groups(values, ...keys) {\n return nest(values, Array.from, identity, keys);\n}\n\nfunction flatten(groups, keys) {\n for (let i = 1, n = keys.length; i < n; ++i) {\n groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value]));\n }\n return groups;\n}\n\nexport function flatGroup(values, ...keys) {\n return flatten(groups(values, ...keys), keys);\n}\n\nexport function flatRollup(values, reduce, ...keys) {\n return flatten(rollups(values, reduce, ...keys), keys);\n}\n\nexport function rollup(values, reduce, ...keys) {\n return nest(values, identity, reduce, keys);\n}\n\nexport function rollups(values, reduce, ...keys) {\n return nest(values, Array.from, reduce, keys);\n}\n\nexport function index(values, ...keys) {\n return nest(values, identity, unique, keys);\n}\n\nexport function indexes(values, ...keys) {\n return nest(values, Array.from, unique, keys);\n}\n\nfunction unique(values) {\n if (values.length !== 1) throw new Error(\"duplicate key\");\n return values[0];\n}\n\nfunction nest(values, map, reduce, keys) {\n return (function regroup(values, i) {\n if (i >= keys.length) return reduce(values);\n const groups = new InternMap();\n const keyof = keys[i++];\n let index = -1;\n for (const value of values) {\n const key = keyof(value, ++index, values);\n const group = groups.get(key);\n if (group) group.push(value);\n else groups.set(key, [value]);\n }\n for (const [key, values] of groups) {\n groups.set(key, regroup(values, i));\n }\n return map(groups);\n })(values, 0);\n}\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","import isNil from './is-nil';\nimport isArraylike from './is-array-like';\nexport default function size(o) {\n if (isNil(o)) {\n return 0;\n }\n if (isArraylike(o)) {\n return o.length;\n }\n return Object.keys(o).length;\n}\n//# sourceMappingURL=size.js.map","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport clsx from 'classnames';\nimport React, { cloneElement, useRef } from 'react';\nimport { hasAddon, hasPrefixSuffix } from \"./utils/commonUtils\";\nvar BaseInput = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var _props, _props2, _props3;\n var inputEl = props.inputElement,\n children = props.children,\n prefixCls = props.prefixCls,\n prefix = props.prefix,\n suffix = props.suffix,\n addonBefore = props.addonBefore,\n addonAfter = props.addonAfter,\n className = props.className,\n style = props.style,\n disabled = props.disabled,\n readOnly = props.readOnly,\n focused = props.focused,\n triggerFocus = props.triggerFocus,\n allowClear = props.allowClear,\n value = props.value,\n handleReset = props.handleReset,\n hidden = props.hidden,\n classes = props.classes,\n classNames = props.classNames,\n dataAttrs = props.dataAttrs,\n styles = props.styles,\n components = props.components,\n onClear = props.onClear;\n var inputElement = children !== null && children !== void 0 ? children : inputEl;\n var AffixWrapperComponent = (components === null || components === void 0 ? void 0 : components.affixWrapper) || 'span';\n var GroupWrapperComponent = (components === null || components === void 0 ? void 0 : components.groupWrapper) || 'span';\n var WrapperComponent = (components === null || components === void 0 ? void 0 : components.wrapper) || 'span';\n var GroupAddonComponent = (components === null || components === void 0 ? void 0 : components.groupAddon) || 'span';\n var containerRef = useRef(null);\n var onInputClick = function onInputClick(e) {\n var _containerRef$current;\n if ((_containerRef$current = containerRef.current) !== null && _containerRef$current !== void 0 && _containerRef$current.contains(e.target)) {\n triggerFocus === null || triggerFocus === void 0 || triggerFocus();\n }\n };\n var hasAffix = hasPrefixSuffix(props);\n var element = /*#__PURE__*/cloneElement(inputElement, {\n value: value,\n className: clsx((_props = inputElement.props) === null || _props === void 0 ? void 0 : _props.className, !hasAffix && (classNames === null || classNames === void 0 ? void 0 : classNames.variant)) || null\n });\n\n // ======================== Ref ======================== //\n var groupRef = useRef(null);\n React.useImperativeHandle(ref, function () {\n return {\n nativeElement: groupRef.current || containerRef.current\n };\n });\n\n // ================== Prefix & Suffix ================== //\n if (hasAffix) {\n // ================== Clear Icon ================== //\n var clearIcon = null;\n if (allowClear) {\n var needClear = !disabled && !readOnly && value;\n var clearIconCls = \"\".concat(prefixCls, \"-clear-icon\");\n var iconNode = _typeof(allowClear) === 'object' && allowClear !== null && allowClear !== void 0 && allowClear.clearIcon ? allowClear.clearIcon : '✖';\n clearIcon = /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n tabIndex: -1,\n onClick: function onClick(event) {\n handleReset === null || handleReset === void 0 || handleReset(event);\n onClear === null || onClear === void 0 || onClear();\n }\n // Do not trigger onBlur when clear input\n // https://github.com/ant-design/ant-design/issues/31200\n ,\n onMouseDown: function onMouseDown(e) {\n return e.preventDefault();\n },\n className: clsx(clearIconCls, _defineProperty(_defineProperty({}, \"\".concat(clearIconCls, \"-hidden\"), !needClear), \"\".concat(clearIconCls, \"-has-suffix\"), !!suffix))\n }, iconNode);\n }\n var affixWrapperPrefixCls = \"\".concat(prefixCls, \"-affix-wrapper\");\n var affixWrapperCls = clsx(affixWrapperPrefixCls, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-disabled\"), disabled), \"\".concat(affixWrapperPrefixCls, \"-disabled\"), disabled), \"\".concat(affixWrapperPrefixCls, \"-focused\"), focused), \"\".concat(affixWrapperPrefixCls, \"-readonly\"), readOnly), \"\".concat(affixWrapperPrefixCls, \"-input-with-clear-btn\"), suffix && allowClear && value), classes === null || classes === void 0 ? void 0 : classes.affixWrapper, classNames === null || classNames === void 0 ? void 0 : classNames.affixWrapper, classNames === null || classNames === void 0 ? void 0 : classNames.variant);\n var suffixNode = (suffix || allowClear) && /*#__PURE__*/React.createElement(\"span\", {\n className: clsx(\"\".concat(prefixCls, \"-suffix\"), classNames === null || classNames === void 0 ? void 0 : classNames.suffix),\n style: styles === null || styles === void 0 ? void 0 : styles.suffix\n }, clearIcon, suffix);\n element = /*#__PURE__*/React.createElement(AffixWrapperComponent, _extends({\n className: affixWrapperCls,\n style: styles === null || styles === void 0 ? void 0 : styles.affixWrapper,\n onClick: onInputClick\n }, dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.affixWrapper, {\n ref: containerRef\n }), prefix && /*#__PURE__*/React.createElement(\"span\", {\n className: clsx(\"\".concat(prefixCls, \"-prefix\"), classNames === null || classNames === void 0 ? void 0 : classNames.prefix),\n style: styles === null || styles === void 0 ? void 0 : styles.prefix\n }, prefix), element, suffixNode);\n }\n\n // ================== Addon ================== //\n if (hasAddon(props)) {\n var wrapperCls = \"\".concat(prefixCls, \"-group\");\n var addonCls = \"\".concat(wrapperCls, \"-addon\");\n var groupWrapperCls = \"\".concat(wrapperCls, \"-wrapper\");\n var mergedWrapperClassName = clsx(\"\".concat(prefixCls, \"-wrapper\"), wrapperCls, classes === null || classes === void 0 ? void 0 : classes.wrapper, classNames === null || classNames === void 0 ? void 0 : classNames.wrapper);\n var mergedGroupClassName = clsx(groupWrapperCls, _defineProperty({}, \"\".concat(groupWrapperCls, \"-disabled\"), disabled), classes === null || classes === void 0 ? void 0 : classes.group, classNames === null || classNames === void 0 ? void 0 : classNames.groupWrapper);\n\n // Need another wrapper for changing display:table to display:inline-block\n // and put style prop in wrapper\n element = /*#__PURE__*/React.createElement(GroupWrapperComponent, {\n className: mergedGroupClassName,\n ref: groupRef\n }, /*#__PURE__*/React.createElement(WrapperComponent, {\n className: mergedWrapperClassName\n }, addonBefore && /*#__PURE__*/React.createElement(GroupAddonComponent, {\n className: addonCls\n }, addonBefore), element, addonAfter && /*#__PURE__*/React.createElement(GroupAddonComponent, {\n className: addonCls\n }, addonAfter)));\n }\n\n // `className` and `style` are always on the root element\n return /*#__PURE__*/React.cloneElement(element, {\n className: clsx((_props2 = element.props) === null || _props2 === void 0 ? void 0 : _props2.className, className) || null,\n style: _objectSpread(_objectSpread({}, (_props3 = element.props) === null || _props3 === void 0 ? void 0 : _props3.style), style),\n hidden: hidden\n });\n});\nexport default BaseInput;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"autoComplete\", \"onChange\", \"onFocus\", \"onBlur\", \"onPressEnter\", \"onKeyDown\", \"onKeyUp\", \"prefixCls\", \"disabled\", \"htmlSize\", \"className\", \"maxLength\", \"suffix\", \"showCount\", \"count\", \"type\", \"classes\", \"classNames\", \"styles\", \"onCompositionStart\", \"onCompositionEnd\"];\nimport clsx from 'classnames';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport omit from \"rc-util/es/omit\";\nimport React, { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport BaseInput from \"./BaseInput\";\nimport useCount from \"./hooks/useCount\";\nimport { resolveOnChange, triggerFocus } from \"./utils/commonUtils\";\nvar Input = /*#__PURE__*/forwardRef(function (props, ref) {\n var autoComplete = props.autoComplete,\n onChange = props.onChange,\n onFocus = props.onFocus,\n onBlur = props.onBlur,\n onPressEnter = props.onPressEnter,\n onKeyDown = props.onKeyDown,\n onKeyUp = props.onKeyUp,\n _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'rc-input' : _props$prefixCls,\n disabled = props.disabled,\n htmlSize = props.htmlSize,\n className = props.className,\n maxLength = props.maxLength,\n suffix = props.suffix,\n showCount = props.showCount,\n count = props.count,\n _props$type = props.type,\n type = _props$type === void 0 ? 'text' : _props$type,\n classes = props.classes,\n classNames = props.classNames,\n styles = props.styles,\n _onCompositionStart = props.onCompositionStart,\n onCompositionEnd = props.onCompositionEnd,\n rest = _objectWithoutProperties(props, _excluded);\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n focused = _useState2[0],\n setFocused = _useState2[1];\n var compositionRef = useRef(false);\n var keyLockRef = useRef(false);\n var inputRef = useRef(null);\n var holderRef = useRef(null);\n var focus = function focus(option) {\n if (inputRef.current) {\n triggerFocus(inputRef.current, option);\n }\n };\n\n // ====================== Value =======================\n var _useMergedState = useMergedState(props.defaultValue, {\n value: props.value\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n value = _useMergedState2[0],\n setValue = _useMergedState2[1];\n var formatValue = value === undefined || value === null ? '' : String(value);\n\n // =================== Select Range ===================\n var _useState3 = useState(null),\n _useState4 = _slicedToArray(_useState3, 2),\n selection = _useState4[0],\n setSelection = _useState4[1];\n\n // ====================== Count =======================\n var countConfig = useCount(count, showCount);\n var mergedMax = countConfig.max || maxLength;\n var valueLength = countConfig.strategy(formatValue);\n var isOutOfRange = !!mergedMax && valueLength > mergedMax;\n\n // ======================= Ref ========================\n useImperativeHandle(ref, function () {\n var _holderRef$current;\n return {\n focus: focus,\n blur: function blur() {\n var _inputRef$current;\n (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.blur();\n },\n setSelectionRange: function setSelectionRange(start, end, direction) {\n var _inputRef$current2;\n (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 || _inputRef$current2.setSelectionRange(start, end, direction);\n },\n select: function select() {\n var _inputRef$current3;\n (_inputRef$current3 = inputRef.current) === null || _inputRef$current3 === void 0 || _inputRef$current3.select();\n },\n input: inputRef.current,\n nativeElement: ((_holderRef$current = holderRef.current) === null || _holderRef$current === void 0 ? void 0 : _holderRef$current.nativeElement) || inputRef.current\n };\n });\n useEffect(function () {\n if (keyLockRef.current) {\n keyLockRef.current = false;\n }\n setFocused(function (prev) {\n return prev && disabled ? false : prev;\n });\n }, [disabled]);\n var triggerChange = function triggerChange(e, currentValue, info) {\n var cutValue = currentValue;\n if (!compositionRef.current && countConfig.exceedFormatter && countConfig.max && countConfig.strategy(currentValue) > countConfig.max) {\n cutValue = countConfig.exceedFormatter(currentValue, {\n max: countConfig.max\n });\n if (currentValue !== cutValue) {\n var _inputRef$current4, _inputRef$current5;\n setSelection([((_inputRef$current4 = inputRef.current) === null || _inputRef$current4 === void 0 ? void 0 : _inputRef$current4.selectionStart) || 0, ((_inputRef$current5 = inputRef.current) === null || _inputRef$current5 === void 0 ? void 0 : _inputRef$current5.selectionEnd) || 0]);\n }\n } else if (info.source === 'compositionEnd') {\n // Avoid triggering twice\n // https://github.com/ant-design/ant-design/issues/46587\n return;\n }\n setValue(cutValue);\n if (inputRef.current) {\n resolveOnChange(inputRef.current, e, onChange, cutValue);\n }\n };\n useEffect(function () {\n if (selection) {\n var _inputRef$current6;\n (_inputRef$current6 = inputRef.current) === null || _inputRef$current6 === void 0 || _inputRef$current6.setSelectionRange.apply(_inputRef$current6, _toConsumableArray(selection));\n }\n }, [selection]);\n var onInternalChange = function onInternalChange(e) {\n triggerChange(e, e.target.value, {\n source: 'change'\n });\n };\n var onInternalCompositionEnd = function onInternalCompositionEnd(e) {\n compositionRef.current = false;\n triggerChange(e, e.currentTarget.value, {\n source: 'compositionEnd'\n });\n onCompositionEnd === null || onCompositionEnd === void 0 || onCompositionEnd(e);\n };\n var handleKeyDown = function handleKeyDown(e) {\n if (onPressEnter && e.key === 'Enter' && !keyLockRef.current) {\n keyLockRef.current = true;\n onPressEnter(e);\n }\n onKeyDown === null || onKeyDown === void 0 || onKeyDown(e);\n };\n var handleKeyUp = function handleKeyUp(e) {\n if (e.key === 'Enter') {\n keyLockRef.current = false;\n }\n onKeyUp === null || onKeyUp === void 0 || onKeyUp(e);\n };\n var handleFocus = function handleFocus(e) {\n setFocused(true);\n onFocus === null || onFocus === void 0 || onFocus(e);\n };\n var handleBlur = function handleBlur(e) {\n if (keyLockRef.current) {\n keyLockRef.current = false;\n }\n setFocused(false);\n onBlur === null || onBlur === void 0 || onBlur(e);\n };\n var handleReset = function handleReset(e) {\n setValue('');\n focus();\n if (inputRef.current) {\n resolveOnChange(inputRef.current, e, onChange);\n }\n };\n\n // ====================== Input =======================\n var outOfRangeCls = isOutOfRange && \"\".concat(prefixCls, \"-out-of-range\");\n var getInputElement = function getInputElement() {\n // Fix https://fb.me/react-unknown-prop\n var otherProps = omit(props, ['prefixCls', 'onPressEnter', 'addonBefore', 'addonAfter', 'prefix', 'suffix', 'allowClear',\n // Input elements must be either controlled or uncontrolled,\n // specify either the value prop, or the defaultValue prop, but not both.\n 'defaultValue', 'showCount', 'count', 'classes', 'htmlSize', 'styles', 'classNames', 'onClear']);\n return /*#__PURE__*/React.createElement(\"input\", _extends({\n autoComplete: autoComplete\n }, otherProps, {\n onChange: onInternalChange,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n onKeyUp: handleKeyUp,\n className: clsx(prefixCls, _defineProperty({}, \"\".concat(prefixCls, \"-disabled\"), disabled), classNames === null || classNames === void 0 ? void 0 : classNames.input),\n style: styles === null || styles === void 0 ? void 0 : styles.input,\n ref: inputRef,\n size: htmlSize,\n type: type,\n onCompositionStart: function onCompositionStart(e) {\n compositionRef.current = true;\n _onCompositionStart === null || _onCompositionStart === void 0 || _onCompositionStart(e);\n },\n onCompositionEnd: onInternalCompositionEnd\n }));\n };\n var getSuffix = function getSuffix() {\n // Max length value\n var hasMaxLength = Number(mergedMax) > 0;\n if (suffix || countConfig.show) {\n var dataCount = countConfig.showFormatter ? countConfig.showFormatter({\n value: formatValue,\n count: valueLength,\n maxLength: mergedMax\n }) : \"\".concat(valueLength).concat(hasMaxLength ? \" / \".concat(mergedMax) : '');\n return /*#__PURE__*/React.createElement(React.Fragment, null, countConfig.show && /*#__PURE__*/React.createElement(\"span\", {\n className: clsx(\"\".concat(prefixCls, \"-show-count-suffix\"), _defineProperty({}, \"\".concat(prefixCls, \"-show-count-has-suffix\"), !!suffix), classNames === null || classNames === void 0 ? void 0 : classNames.count),\n style: _objectSpread({}, styles === null || styles === void 0 ? void 0 : styles.count)\n }, dataCount), suffix);\n }\n return null;\n };\n\n // ====================== Render ======================\n return /*#__PURE__*/React.createElement(BaseInput, _extends({}, rest, {\n prefixCls: prefixCls,\n className: clsx(className, outOfRangeCls),\n handleReset: handleReset,\n value: formatValue,\n focused: focused,\n triggerFocus: focus,\n suffix: getSuffix(),\n disabled: disabled,\n classes: classes,\n classNames: classNames,\n styles: styles,\n ref: holderRef\n }), getInputElement());\n});\nexport default Input;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport classNames from 'classnames';\nimport * as React from 'react';\nvar Indent = function Indent(_ref) {\n var prefixCls = _ref.prefixCls,\n level = _ref.level,\n isStart = _ref.isStart,\n isEnd = _ref.isEnd;\n var baseClassName = \"\".concat(prefixCls, \"-indent-unit\");\n var list = [];\n for (var i = 0; i < level; i += 1) {\n list.push( /*#__PURE__*/React.createElement(\"span\", {\n key: i,\n className: classNames(baseClassName, _defineProperty(_defineProperty({}, \"\".concat(baseClassName, \"-start\"), isStart[i]), \"\".concat(baseClassName, \"-end\"), isEnd[i]))\n }));\n }\n return /*#__PURE__*/React.createElement(\"span\", {\n \"aria-hidden\": \"true\",\n className: \"\".concat(prefixCls, \"-indent\")\n }, list);\n};\nexport default /*#__PURE__*/React.memo(Indent);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"eventKey\", \"className\", \"style\", \"dragOver\", \"dragOverGapTop\", \"dragOverGapBottom\", \"isLeaf\", \"isStart\", \"isEnd\", \"expanded\", \"selected\", \"checked\", \"halfChecked\", \"loading\", \"domRef\", \"active\", \"data\", \"onMouseMove\", \"selectable\"];\nimport React from 'react';\nimport classNames from 'classnames';\nimport pickAttrs from \"rc-util/es/pickAttrs\";\nimport { TreeContext, UnstableContext } from \"./contextTypes\";\nimport Indent from \"./Indent\";\nimport getEntity from \"./utils/keyUtil\";\nimport { convertNodePropsToEventData } from \"./utils/treeUtil\";\nvar ICON_OPEN = 'open';\nvar ICON_CLOSE = 'close';\nvar defaultTitle = '---';\nvar TreeNode = function TreeNode(props) {\n var _unstableContext$node, _context$filterTreeNo, _classNames4;\n var eventKey = props.eventKey,\n className = props.className,\n style = props.style,\n dragOver = props.dragOver,\n dragOverGapTop = props.dragOverGapTop,\n dragOverGapBottom = props.dragOverGapBottom,\n isLeaf = props.isLeaf,\n isStart = props.isStart,\n isEnd = props.isEnd,\n expanded = props.expanded,\n selected = props.selected,\n checked = props.checked,\n halfChecked = props.halfChecked,\n loading = props.loading,\n domRef = props.domRef,\n active = props.active,\n data = props.data,\n onMouseMove = props.onMouseMove,\n selectable = props.selectable,\n otherProps = _objectWithoutProperties(props, _excluded);\n var context = React.useContext(TreeContext);\n var unstableContext = React.useContext(UnstableContext);\n var selectHandleRef = React.useRef(null);\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n dragNodeHighlight = _React$useState2[0],\n setDragNodeHighlight = _React$useState2[1];\n\n // ======= State: Disabled State =======\n var isDisabled = !!(context.disabled || props.disabled || (_unstableContext$node = unstableContext.nodeDisabled) !== null && _unstableContext$node !== void 0 && _unstableContext$node.call(unstableContext, data));\n var isCheckable = React.useMemo(function () {\n // Return false if tree or treeNode is not checkable\n if (!context.checkable || props.checkable === false) {\n return false;\n }\n return context.checkable;\n }, [context.checkable, props.checkable]);\n\n // ======= Event Handlers: Selection and Check =======\n var onSelect = function onSelect(e) {\n if (isDisabled) {\n return;\n }\n context.onNodeSelect(e, convertNodePropsToEventData(props));\n };\n var onCheck = function onCheck(e) {\n if (isDisabled) {\n return;\n }\n if (!isCheckable || props.disableCheckbox) {\n return;\n }\n context.onNodeCheck(e, convertNodePropsToEventData(props), !checked);\n };\n\n // ======= State: Selectable Check =======\n var isSelectable = React.useMemo(function () {\n // Ignore when selectable is undefined or null\n if (typeof selectable === 'boolean') {\n return selectable;\n }\n return context.selectable;\n }, [selectable, context.selectable]);\n var onSelectorClick = function onSelectorClick(e) {\n // Click trigger before select/check operation\n context.onNodeClick(e, convertNodePropsToEventData(props));\n if (isSelectable) {\n onSelect(e);\n } else {\n onCheck(e);\n }\n };\n var onSelectorDoubleClick = function onSelectorDoubleClick(e) {\n context.onNodeDoubleClick(e, convertNodePropsToEventData(props));\n };\n var onMouseEnter = function onMouseEnter(e) {\n context.onNodeMouseEnter(e, convertNodePropsToEventData(props));\n };\n var onMouseLeave = function onMouseLeave(e) {\n context.onNodeMouseLeave(e, convertNodePropsToEventData(props));\n };\n var onContextMenu = function onContextMenu(e) {\n context.onNodeContextMenu(e, convertNodePropsToEventData(props));\n };\n\n // ======= Drag: Drag Enabled =======\n var isDraggable = React.useMemo(function () {\n return !!(context.draggable && (!context.draggable.nodeDraggable || context.draggable.nodeDraggable(data)));\n }, [context.draggable, data]);\n\n // ======= Drag: Drag Event Handlers =======\n var onDragStart = function onDragStart(e) {\n e.stopPropagation();\n setDragNodeHighlight(true);\n context.onNodeDragStart(e, props);\n try {\n // ie throw error\n // firefox-need-it\n e.dataTransfer.setData('text/plain', '');\n } catch (_unused) {\n // empty\n }\n };\n var onDragEnter = function onDragEnter(e) {\n e.preventDefault();\n e.stopPropagation();\n context.onNodeDragEnter(e, props);\n };\n var onDragOver = function onDragOver(e) {\n e.preventDefault();\n e.stopPropagation();\n context.onNodeDragOver(e, props);\n };\n var onDragLeave = function onDragLeave(e) {\n e.stopPropagation();\n context.onNodeDragLeave(e, props);\n };\n var onDragEnd = function onDragEnd(e) {\n e.stopPropagation();\n setDragNodeHighlight(false);\n context.onNodeDragEnd(e, props);\n };\n var onDrop = function onDrop(e) {\n e.preventDefault();\n e.stopPropagation();\n setDragNodeHighlight(false);\n context.onNodeDrop(e, props);\n };\n\n // ======= Expand: Node Expansion =======\n var onExpand = function onExpand(e) {\n if (loading) {\n return;\n }\n context.onNodeExpand(e, convertNodePropsToEventData(props));\n };\n\n // ======= State: Has Children =======\n var hasChildren = React.useMemo(function () {\n var _ref = getEntity(context.keyEntities, eventKey) || {},\n children = _ref.children;\n return Boolean((children || []).length);\n }, [context.keyEntities, eventKey]);\n\n // ======= State: Leaf Check =======\n var memoizedIsLeaf = React.useMemo(function () {\n if (isLeaf === false) {\n return false;\n }\n return isLeaf || !context.loadData && !hasChildren || context.loadData && props.loaded && !hasChildren;\n }, [isLeaf, context.loadData, hasChildren, props.loaded]);\n\n // ============== Effect ==============\n React.useEffect(function () {\n // Load data to avoid default expanded tree without data\n if (loading) {\n return;\n }\n // read from state to avoid loadData at same time\n if (typeof context.loadData === 'function' && expanded && !memoizedIsLeaf && !props.loaded) {\n // We needn't reload data when has children in sync logic\n // It's only needed in node expanded\n context.onNodeLoad(convertNodePropsToEventData(props));\n }\n }, [loading, context.loadData, context.onNodeLoad, expanded, memoizedIsLeaf, props]);\n\n // ==================== Render: Drag Handler ====================\n var dragHandlerNode = React.useMemo(function () {\n var _context$draggable;\n if (!((_context$draggable = context.draggable) !== null && _context$draggable !== void 0 && _context$draggable.icon)) {\n return null;\n }\n return /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(context.prefixCls, \"-draggable-icon\")\n }, context.draggable.icon);\n }, [context.draggable]);\n\n // ====================== Render: Switcher ======================\n var renderSwitcherIconDom = function renderSwitcherIconDom(isInternalLeaf) {\n var switcherIcon = props.switcherIcon || context.switcherIcon;\n // if switcherIconDom is null, no render switcher span\n if (typeof switcherIcon === 'function') {\n return switcherIcon(_objectSpread(_objectSpread({}, props), {}, {\n isLeaf: isInternalLeaf\n }));\n }\n return switcherIcon;\n };\n\n // Switcher\n var renderSwitcher = function renderSwitcher() {\n if (memoizedIsLeaf) {\n // if switcherIconDom is null, no render switcher span\n var _switcherIconDom = renderSwitcherIconDom(true);\n return _switcherIconDom !== false ? /*#__PURE__*/React.createElement(\"span\", {\n className: classNames(\"\".concat(context.prefixCls, \"-switcher\"), \"\".concat(context.prefixCls, \"-switcher-noop\"))\n }, _switcherIconDom) : null;\n }\n var switcherIconDom = renderSwitcherIconDom(false);\n return switcherIconDom !== false ? /*#__PURE__*/React.createElement(\"span\", {\n onClick: onExpand,\n className: classNames(\"\".concat(context.prefixCls, \"-switcher\"), \"\".concat(context.prefixCls, \"-switcher_\").concat(expanded ? ICON_OPEN : ICON_CLOSE))\n }, switcherIconDom) : null;\n };\n\n // ====================== Checkbox ======================\n var checkboxNode = React.useMemo(function () {\n if (!isCheckable) {\n return null;\n }\n\n // [Legacy] Custom element should be separate with `checkable` in future\n var $custom = typeof isCheckable !== 'boolean' ? isCheckable : null;\n return /*#__PURE__*/React.createElement(\"span\", {\n className: classNames(\"\".concat(context.prefixCls, \"-checkbox\"), _defineProperty(_defineProperty(_defineProperty({}, \"\".concat(context.prefixCls, \"-checkbox-checked\"), checked), \"\".concat(context.prefixCls, \"-checkbox-indeterminate\"), !checked && halfChecked), \"\".concat(context.prefixCls, \"-checkbox-disabled\"), isDisabled || props.disableCheckbox)),\n onClick: onCheck,\n role: \"checkbox\",\n \"aria-checked\": halfChecked ? 'mixed' : checked,\n \"aria-disabled\": isDisabled || props.disableCheckbox,\n \"aria-label\": \"Select \".concat(typeof props.title === 'string' ? props.title : 'tree node')\n }, $custom);\n }, [isCheckable, checked, halfChecked, isDisabled, props.disableCheckbox, props.title]);\n\n // ============== State: Node State (Open/Close) ==============\n var nodeState = React.useMemo(function () {\n if (memoizedIsLeaf) {\n return null;\n }\n return expanded ? ICON_OPEN : ICON_CLOSE;\n }, [memoizedIsLeaf, expanded]);\n\n // ==================== Render: Title + Icon ====================\n var iconNode = React.useMemo(function () {\n return /*#__PURE__*/React.createElement(\"span\", {\n className: classNames(\"\".concat(context.prefixCls, \"-iconEle\"), \"\".concat(context.prefixCls, \"-icon__\").concat(nodeState || 'docu'), _defineProperty({}, \"\".concat(context.prefixCls, \"-icon_loading\"), loading))\n });\n }, [context.prefixCls, nodeState, loading]);\n\n // =================== Drop Indicator ===================\n var dropIndicatorNode = React.useMemo(function () {\n var rootDraggable = Boolean(context.draggable);\n // allowDrop is calculated in Tree.tsx, there is no need for calc it here\n var showIndicator = !props.disabled && rootDraggable && context.dragOverNodeKey === eventKey;\n if (!showIndicator) {\n return null;\n }\n return context.dropIndicatorRender({\n dropPosition: context.dropPosition,\n dropLevelOffset: context.dropLevelOffset,\n indent: context.indent,\n prefixCls: context.prefixCls,\n direction: context.direction\n });\n }, [context.dropPosition, context.dropLevelOffset, context.indent, context.prefixCls, context.direction, context.draggable, context.dragOverNodeKey, context.dropIndicatorRender]);\n\n // Icon + Title\n var selectorNode = React.useMemo(function () {\n var _props$title = props.title,\n title = _props$title === void 0 ? defaultTitle : _props$title;\n var wrapClass = \"\".concat(context.prefixCls, \"-node-content-wrapper\");\n\n // Icon - Still show loading icon when loading without showIcon\n var $icon;\n if (context.showIcon) {\n var currentIcon = props.icon || context.icon;\n $icon = currentIcon ? /*#__PURE__*/React.createElement(\"span\", {\n className: classNames(\"\".concat(context.prefixCls, \"-iconEle\"), \"\".concat(context.prefixCls, \"-icon__customize\"))\n }, typeof currentIcon === 'function' ? currentIcon(props) : currentIcon) : iconNode;\n } else if (context.loadData && loading) {\n $icon = iconNode;\n }\n\n // Title\n var titleNode;\n if (typeof title === 'function') {\n titleNode = title(data);\n } else if (context.titleRender) {\n titleNode = context.titleRender(data);\n } else {\n titleNode = title;\n }\n return /*#__PURE__*/React.createElement(\"span\", {\n ref: selectHandleRef,\n title: typeof title === 'string' ? title : '',\n className: classNames(wrapClass, \"\".concat(wrapClass, \"-\").concat(nodeState || 'normal'), _defineProperty({}, \"\".concat(context.prefixCls, \"-node-selected\"), !isDisabled && (selected || dragNodeHighlight))),\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave,\n onContextMenu: onContextMenu,\n onClick: onSelectorClick,\n onDoubleClick: onSelectorDoubleClick\n }, $icon, /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(context.prefixCls, \"-title\")\n }, titleNode), dropIndicatorNode);\n }, [context.prefixCls, context.showIcon, props, context.icon, iconNode, context.titleRender, data, nodeState, onMouseEnter, onMouseLeave, onContextMenu, onSelectorClick, onSelectorDoubleClick]);\n var dataOrAriaAttributeProps = pickAttrs(otherProps, {\n aria: true,\n data: true\n });\n var _ref2 = getEntity(context.keyEntities, eventKey) || {},\n level = _ref2.level;\n var isEndNode = isEnd[isEnd.length - 1];\n var draggableWithoutDisabled = !isDisabled && isDraggable;\n var dragging = context.draggingNodeKey === eventKey;\n var ariaSelected = selectable !== undefined ? {\n 'aria-selected': !!selectable\n } : undefined;\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n ref: domRef,\n role: \"treeitem\",\n \"aria-expanded\": isLeaf ? undefined : expanded,\n className: classNames(className, \"\".concat(context.prefixCls, \"-treenode\"), (_classNames4 = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_classNames4, \"\".concat(context.prefixCls, \"-treenode-disabled\"), isDisabled), \"\".concat(context.prefixCls, \"-treenode-switcher-\").concat(expanded ? 'open' : 'close'), !isLeaf), \"\".concat(context.prefixCls, \"-treenode-checkbox-checked\"), checked), \"\".concat(context.prefixCls, \"-treenode-checkbox-indeterminate\"), halfChecked), \"\".concat(context.prefixCls, \"-treenode-selected\"), selected), \"\".concat(context.prefixCls, \"-treenode-loading\"), loading), \"\".concat(context.prefixCls, \"-treenode-active\"), active), \"\".concat(context.prefixCls, \"-treenode-leaf-last\"), isEndNode), \"\".concat(context.prefixCls, \"-treenode-draggable\"), isDraggable), \"dragging\", dragging), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_classNames4, 'drop-target', context.dropTargetKey === eventKey), 'drop-container', context.dropContainerKey === eventKey), 'drag-over', !isDisabled && dragOver), 'drag-over-gap-top', !isDisabled && dragOverGapTop), 'drag-over-gap-bottom', !isDisabled && dragOverGapBottom), 'filter-node', (_context$filterTreeNo = context.filterTreeNode) === null || _context$filterTreeNo === void 0 ? void 0 : _context$filterTreeNo.call(context, convertNodePropsToEventData(props))), \"\".concat(context.prefixCls, \"-treenode-leaf\"), memoizedIsLeaf))),\n style: style\n // Draggable config\n ,\n draggable: draggableWithoutDisabled,\n onDragStart: draggableWithoutDisabled ? onDragStart : undefined\n // Drop config\n ,\n onDragEnter: isDraggable ? onDragEnter : undefined,\n onDragOver: isDraggable ? onDragOver : undefined,\n onDragLeave: isDraggable ? onDragLeave : undefined,\n onDrop: isDraggable ? onDrop : undefined,\n onDragEnd: isDraggable ? onDragEnd : undefined,\n onMouseMove: onMouseMove\n }, ariaSelected, dataOrAriaAttributeProps), /*#__PURE__*/React.createElement(Indent, {\n prefixCls: context.prefixCls,\n level: level,\n isStart: isStart,\n isEnd: isEnd\n }), dragHandlerNode, renderSwitcher(), checkboxNode, selectorNode);\n};\nTreeNode.isTreeNode = 1;\nif (process.env.NODE_ENV !== 'production') {\n TreeNode.displayName = 'TreeNode';\n}\nexport default TreeNode;","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"creatorButtonProps\", \"deleteIconProps\", \"copyIconProps\", \"itemContainerRender\", \"itemRender\", \"alwaysShowItemLabel\", \"prefixCls\", \"creatorRecord\", \"action\", \"actionGuard\", \"children\", \"actionRender\", \"fields\", \"meta\", \"field\", \"index\", \"formInstance\", \"originName\", \"containerClassName\", \"containerStyle\", \"min\", \"max\", \"count\"];\nimport { CopyOutlined, DeleteOutlined, LoadingOutlined } from '@ant-design/icons';\nimport { ProProvider } from '@ant-design/pro-provider';\nimport { ConfigProvider, Tooltip } from 'antd';\nimport classNames from 'classnames';\nimport toArray from \"rc-util/es/Children/toArray\";\nimport set from \"rc-util/es/utils/set\";\nimport React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { FormListContext } from '.';\nimport { EditOrReadOnlyContext } from \"../../BaseForm/EditOrReadOnlyContext\";\nimport { useGridHelpers } from \"../../helpers\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/** Antd 自带的toArray 不支持方法,所以需要自己搞一个 */\nvar listToArray = function listToArray(children) {\n if (Array.isArray(children)) {\n return children;\n }\n if (typeof children === 'function') {\n return [children];\n }\n return toArray(children);\n};\nvar ProFormListItem = function ProFormListItem(props) {\n var _ConfigProvider$useCo, _formInstance$getFiel2;\n var creatorButtonProps = props.creatorButtonProps,\n deleteIconProps = props.deleteIconProps,\n copyIconProps = props.copyIconProps,\n itemContainerRender = props.itemContainerRender,\n itemRender = props.itemRender,\n alwaysShowItemLabel = props.alwaysShowItemLabel,\n prefixCls = props.prefixCls,\n creatorRecord = props.creatorRecord,\n action = props.action,\n actionGuard = props.actionGuard,\n children = props.children,\n actionRender = props.actionRender,\n fields = props.fields,\n meta = props.meta,\n field = props.field,\n index = props.index,\n formInstance = props.formInstance,\n originName = props.originName,\n containerClassName = props.containerClassName,\n containerStyle = props.containerStyle,\n min = props.min,\n max = props.max,\n count = props.count,\n rest = _objectWithoutProperties(props, _excluded);\n var _useContext = useContext(ProProvider),\n hashId = _useContext.hashId;\n var _ref = ((_ConfigProvider$useCo = ConfigProvider.useConfig) === null || _ConfigProvider$useCo === void 0 ? void 0 : _ConfigProvider$useCo.call(ConfigProvider)) || {\n componentSize: 'middle'\n },\n componentSize = _ref.componentSize;\n var listContext = useContext(FormListContext);\n var unmountedRef = useRef(false);\n var _useContext2 = useContext(EditOrReadOnlyContext),\n mode = _useContext2.mode;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n loadingRemove = _useState2[0],\n setLoadingRemove = _useState2[1];\n var _useState3 = useState(false),\n _useState4 = _slicedToArray(_useState3, 2),\n loadingCopy = _useState4[0],\n setLoadingCopy = _useState4[1];\n useEffect(function () {\n return function () {\n unmountedRef.current = true;\n };\n }, []);\n var getCurrentRowData = function getCurrentRowData() {\n return formInstance.getFieldValue([listContext.listName, originName, index === null || index === void 0 ? void 0 : index.toString()].flat(1).filter(function (item) {\n return item !== null && item !== undefined;\n }));\n };\n var formListAction = {\n getCurrentRowData: getCurrentRowData,\n setCurrentRowData: function setCurrentRowData(data) {\n var _formInstance$getFiel;\n var oldTableDate = (formInstance === null || formInstance === void 0 || (_formInstance$getFiel = formInstance.getFieldsValue) === null || _formInstance$getFiel === void 0 ? void 0 : _formInstance$getFiel.call(formInstance)) || {};\n var rowKeyName = [listContext.listName, originName, index === null || index === void 0 ? void 0 : index.toString()].flat(1).filter(function (item) {\n return item !== null && item !== undefined;\n });\n var updateValues = set(oldTableDate, rowKeyName, _objectSpread(_objectSpread({}, getCurrentRowData()), data || {}));\n return formInstance.setFieldsValue(updateValues);\n }\n };\n var childrenArray = listToArray(children).map(function (childrenItem) {\n if (typeof childrenItem === 'function') {\n return childrenItem === null || childrenItem === void 0 ? void 0 : childrenItem(field, index, _objectSpread(_objectSpread({}, action), formListAction), count);\n }\n return childrenItem;\n }).map(function (childrenItem, itemIndex) {\n if ( /*#__PURE__*/React.isValidElement(childrenItem)) {\n var _childrenItem$props;\n return /*#__PURE__*/React.cloneElement(childrenItem, _objectSpread({\n key: childrenItem.key || (childrenItem === null || childrenItem === void 0 || (_childrenItem$props = childrenItem.props) === null || _childrenItem$props === void 0 ? void 0 : _childrenItem$props.name) || itemIndex\n }, (childrenItem === null || childrenItem === void 0 ? void 0 : childrenItem.props) || {}));\n }\n return childrenItem;\n });\n var copyIcon = useMemo(function () {\n if (mode === 'read') return null;\n /** 复制按钮的配置 */\n if (copyIconProps === false || max === count) return null;\n var _ref2 = copyIconProps,\n _ref2$Icon = _ref2.Icon,\n Icon = _ref2$Icon === void 0 ? CopyOutlined : _ref2$Icon,\n tooltipText = _ref2.tooltipText;\n return /*#__PURE__*/_jsx(Tooltip, {\n title: tooltipText,\n children: loadingCopy ? /*#__PURE__*/_jsx(LoadingOutlined, {}) : /*#__PURE__*/_jsx(Icon, {\n className: classNames(\"\".concat(prefixCls, \"-action-icon action-copy\"), hashId),\n onClick: /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n var row;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n setLoadingCopy(true);\n row = formInstance === null || formInstance === void 0 ? void 0 : formInstance.getFieldValue([listContext.listName, originName, field.name].filter(function (item) {\n return item !== undefined;\n }).flat(1));\n _context.next = 4;\n return action.add(row);\n case 4:\n setLoadingCopy(false);\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }))\n })\n }, \"copy\");\n }, [copyIconProps, max, count, loadingCopy, prefixCls, hashId, formInstance, listContext.listName, field.name, originName, action]);\n var deleteIcon = useMemo(function () {\n if (mode === 'read') return null;\n if (deleteIconProps === false || min === count) return null;\n var _ref4 = deleteIconProps,\n _ref4$Icon = _ref4.Icon,\n Icon = _ref4$Icon === void 0 ? DeleteOutlined : _ref4$Icon,\n tooltipText = _ref4.tooltipText;\n return /*#__PURE__*/_jsx(Tooltip, {\n title: tooltipText,\n children: loadingRemove ? /*#__PURE__*/_jsx(LoadingOutlined, {}) : /*#__PURE__*/_jsx(Icon, {\n className: classNames(\"\".concat(prefixCls, \"-action-icon action-remove\"), hashId),\n onClick: /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n setLoadingRemove(true);\n _context2.next = 3;\n return action.remove(field.name);\n case 3:\n if (!unmountedRef.current) {\n setLoadingRemove(false);\n }\n case 4:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }))\n })\n }, \"delete\");\n }, [deleteIconProps, min, count, loadingRemove, prefixCls, hashId, action, field.name]);\n var defaultActionDom = useMemo(function () {\n return [copyIcon, deleteIcon].filter(function (item) {\n return item !== null && item !== undefined;\n });\n }, [copyIcon, deleteIcon]);\n var actions = (actionRender === null || actionRender === void 0 ? void 0 : actionRender(field, action, defaultActionDom, count)) || defaultActionDom;\n var dom = actions.length > 0 && mode !== 'read' ? /*#__PURE__*/_jsx(\"div\", {\n className: classNames(\"\".concat(prefixCls, \"-action\"), _defineProperty({}, \"\".concat(prefixCls, \"-action-small\"), componentSize === 'small'), hashId),\n children: actions\n }) : null;\n var options = {\n name: rest.name,\n field: field,\n index: index,\n record: formInstance === null || formInstance === void 0 || (_formInstance$getFiel2 = formInstance.getFieldValue) === null || _formInstance$getFiel2 === void 0 ? void 0 : _formInstance$getFiel2.call(formInstance, [listContext.listName, originName, field.name].filter(function (item) {\n return item !== undefined;\n }).flat(1)),\n fields: fields,\n operation: action,\n meta: meta\n };\n var _useGridHelpers = useGridHelpers(),\n grid = _useGridHelpers.grid;\n var itemContainer = (itemContainerRender === null || itemContainerRender === void 0 ? void 0 : itemContainerRender(childrenArray, options)) || childrenArray;\n var contentDom = (itemRender === null || itemRender === void 0 ? void 0 : itemRender({\n listDom: /*#__PURE__*/_jsx(\"div\", {\n className: classNames(\"\".concat(prefixCls, \"-container\"), containerClassName, hashId),\n style: _objectSpread({\n width: grid ? '100%' : undefined\n }, containerStyle),\n children: itemContainer\n }),\n action: dom\n }, options)) || /*#__PURE__*/_jsxs(\"div\", {\n className: classNames(\"\".concat(prefixCls, \"-item\"), hashId, _defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-item-default\"), alwaysShowItemLabel === undefined), \"\".concat(prefixCls, \"-item-show-label\"), alwaysShowItemLabel)),\n style: {\n display: 'flex',\n alignItems: 'flex-end'\n },\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: classNames(\"\".concat(prefixCls, \"-container\"), containerClassName, hashId),\n style: _objectSpread({\n width: grid ? '100%' : undefined\n }, containerStyle),\n children: itemContainer\n }), dom]\n });\n return /*#__PURE__*/_jsx(FormListContext.Provider, {\n value: _objectSpread(_objectSpread({}, field), {}, {\n listName: [listContext.listName, originName, field.name].filter(function (item) {\n return item !== undefined;\n }).flat(1)\n }),\n children: contentDom\n });\n};\nexport { ProFormListItem };","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n k = Math.floor(k);\n left = Math.floor(Math.max(0, left));\n right = Math.floor(Math.min(array.length - 1, right));\n\n if (!(left <= k && k <= right)) return array;\n\n compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n if (isNaN(p = +p)) return;\n numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n if (p <= 0) return minIndex(numbers);\n if (p >= 1) return maxIndex(numbers);\n var numbers,\n index = Uint32Array.from(values, (_, i) => i),\n j = numbers.length - 1,\n i = Math.floor(j * p);\n quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n return i >= 0 ? i : -1;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function greatest(values, compare = ascending) {\n let max;\n let defined = false;\n if (compare.length === 1) {\n let maxValue;\n for (const element of values) {\n const value = compare(element);\n if (defined\n ? ascending(value, maxValue) > 0\n : ascending(value, value) === 0) {\n max = element;\n maxValue = value;\n defined = true;\n }\n }\n } else {\n for (const value of values) {\n if (defined\n ? compare(value, max) > 0\n : compare(value, value) === 0) {\n max = value;\n defined = true;\n }\n }\n }\n return max;\n}\n","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n/**\n * 网格索引,相比 @mapbox/grid-index,在简单计算碰撞检测结果时效率更高\n * @see https://zhuanlan.zhihu.com/p/74373214\n */\nclass GridIndex {\n constructor(width, height, cellSize) {\n _defineProperty(this, \"boxCells\", []);\n _defineProperty(this, \"xCellCount\", void 0);\n _defineProperty(this, \"yCellCount\", void 0);\n _defineProperty(this, \"boxKeys\", void 0);\n _defineProperty(this, \"bboxes\", void 0);\n _defineProperty(this, \"width\", void 0);\n _defineProperty(this, \"height\", void 0);\n _defineProperty(this, \"xScale\", void 0);\n _defineProperty(this, \"yScale\", void 0);\n _defineProperty(this, \"boxUid\", void 0);\n const boxCells = this.boxCells;\n this.xCellCount = Math.ceil(width / cellSize);\n this.yCellCount = Math.ceil(height / cellSize);\n for (let i = 0; i < this.xCellCount * this.yCellCount; i++) {\n boxCells.push([]);\n }\n this.boxKeys = [];\n this.bboxes = [];\n this.width = width;\n this.height = height;\n this.xScale = this.xCellCount / width;\n this.yScale = this.yCellCount / height;\n this.boxUid = 0;\n }\n insert(key, x1, y1, x2, y2) {\n this.forEachCell(x1, y1, x2, y2, this.insertBoxCell, this.boxUid++);\n this.boxKeys.push(key);\n this.bboxes.push(x1);\n this.bboxes.push(y1);\n this.bboxes.push(x2);\n this.bboxes.push(y2);\n }\n query(x1, y1, x2, y2, predicate) {\n return this.queryHitTest(x1, y1, x2, y2, false, predicate);\n }\n hitTest(x1, y1, x2, y2, predicate) {\n return this.queryHitTest(x1, y1, x2, y2, true, predicate);\n }\n insertBoxCell(x1, y1, x2, y2, cellIndex, uid) {\n this.boxCells[cellIndex].push(uid);\n }\n queryHitTest(x1, y1, x2, y2, hitTest, predicate) {\n if (x2 < 0 || x1 > this.width || y2 < 0 || y1 > this.height) {\n return hitTest ? false : [];\n }\n const result = [];\n if (x1 <= 0 && y1 <= 0 && this.width <= x2 && this.height <= y2) {\n // 这一步是高效的关键,后续精确碰撞检测结果在计算文本可见性时并不需要\n if (hitTest) {\n return true;\n }\n for (let boxUid = 0; boxUid < this.boxKeys.length; boxUid++) {\n result.push({\n key: this.boxKeys[boxUid],\n x1: this.bboxes[boxUid * 4],\n y1: this.bboxes[boxUid * 4 + 1],\n x2: this.bboxes[boxUid * 4 + 2],\n y2: this.bboxes[boxUid * 4 + 3]\n });\n }\n return predicate ? result.filter(predicate) : result;\n }\n const queryArgs = {\n hitTest,\n seenUids: {\n box: {},\n circle: {}\n }\n };\n this.forEachCell(x1, y1, x2, y2, this.queryCell, result, queryArgs, predicate);\n return hitTest ? result.length > 0 : result;\n }\n queryCell(x1, y1, x2, y2, cellIndex, result, queryArgs, predicate) {\n const seenUids = queryArgs.seenUids;\n const boxCell = this.boxCells[cellIndex];\n if (boxCell !== null) {\n const bboxes = this.bboxes;\n for (const boxUid of boxCell) {\n if (!seenUids.box[boxUid]) {\n seenUids.box[boxUid] = true;\n const offset = boxUid * 4;\n if (x1 <= bboxes[offset + 2] && y1 <= bboxes[offset + 3] && x2 >= bboxes[offset + 0] && y2 >= bboxes[offset + 1] && (!predicate || predicate(this.boxKeys[boxUid]))) {\n if (queryArgs.hitTest) {\n result.push(true);\n return true;\n }\n result.push({\n key: this.boxKeys[boxUid],\n x1: bboxes[offset],\n y1: bboxes[offset + 1],\n x2: bboxes[offset + 2],\n y2: bboxes[offset + 3]\n });\n }\n }\n }\n }\n return false;\n }\n forEachCell(x1, y1, x2, y2, fn, arg1, arg2, predicate) {\n const cx1 = this.convertToXCellCoord(x1);\n const cy1 = this.convertToYCellCoord(y1);\n const cx2 = this.convertToXCellCoord(x2);\n const cy2 = this.convertToYCellCoord(y2);\n for (let x = cx1; x <= cx2; x++) {\n for (let y = cy1; y <= cy2; y++) {\n const cellIndex = this.xCellCount * y + x;\n if (fn.call(this, x1, y1, x2, y2, cellIndex, arg1, arg2, predicate)) {\n return;\n }\n }\n }\n }\n convertToXCellCoord(x) {\n return Math.max(0, Math.min(this.xCellCount - 1, Math.floor(x * this.xScale)));\n }\n convertToYCellCoord(y) {\n return Math.max(0, Math.min(this.yCellCount - 1, Math.floor(y * this.yScale)));\n }\n}\nexport default GridIndex;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n// @mapbox/grid-index 并没有类似 hitTest 的单纯获取碰撞检测结果的方法,query 将导致计算大量多余的包围盒结果,因此使用改良版\nimport { mat4, vec4 } from 'gl-matrix';\nimport GridIndex from \"./grid-index\";\n/**\n * 基于网格实现文本避让,大幅提升包围盒碰撞检测效率\n * @see https://zhuanlan.zhihu.com/p/74373214\n */\nexport default class CollisionIndex {\n constructor(width, height) {\n _defineProperty(this, \"width\", void 0);\n _defineProperty(this, \"height\", void 0);\n _defineProperty(this, \"grid\", void 0);\n _defineProperty(this, \"viewportPadding\", 100);\n _defineProperty(this, \"screenRightBoundary\", void 0);\n _defineProperty(this, \"screenBottomBoundary\", void 0);\n _defineProperty(this, \"gridRightBoundary\", void 0);\n _defineProperty(this, \"gridBottomBoundary\", void 0);\n this.width = width;\n this.height = height;\n this.viewportPadding = Math.max(width, height);\n // 创建网格索引\n this.grid = new GridIndex(width + this.viewportPadding, height + this.viewportPadding, 25);\n this.screenRightBoundary = width + this.viewportPadding;\n this.screenBottomBoundary = height + this.viewportPadding;\n this.gridRightBoundary = width + 2 * this.viewportPadding;\n this.gridBottomBoundary = height + 2 * this.viewportPadding;\n }\n placeCollisionBox(collisionBox) {\n // const projectedPoint = this.project(\n // mvpMatrix,\n // collisionBox.anchorPointX,\n // collisionBox.anchorPointY,\n // );\n\n const tlX = collisionBox.x1 + collisionBox.anchorPointX + this.viewportPadding;\n const tlY = collisionBox.y1 + collisionBox.anchorPointY + this.viewportPadding;\n const brX = collisionBox.x2 + collisionBox.anchorPointX + this.viewportPadding;\n const brY = collisionBox.y2 + collisionBox.anchorPointY + this.viewportPadding;\n if (!this.isInsideGrid(tlX, tlY, brX, brY) || this.grid.hitTest(tlX, tlY, brX, brY)) {\n return {\n box: []\n };\n }\n return {\n box: [tlX, tlY, brX, brY]\n };\n }\n insertCollisionBox(box, featureIndex) {\n const key = {\n featureIndex\n };\n this.grid.insert(key, box[0], box[1], box[2], box[3]);\n }\n\n /**\n * 后续碰撞检测都需要投影到 viewport 坐标系\n * @param {THREE.Matrix4} mvpMatrix mvp矩阵\n * @param {number} x P20 平面坐标X\n * @param {number} y P20 平面坐标Y\n * @return {Point} projectedPoint\n */\n project(mvpMatrix, x, y) {\n const point = vec4.fromValues(x, y, 0, 1);\n const out = vec4.create();\n // @ts-ignore\n const mat = mat4.fromValues(...mvpMatrix);\n vec4.transformMat4(out, point, mat);\n // GL 坐标系[-1, 1] -> viewport 坐标系[width, height]\n return {\n x: (out[0] / out[3] + 1) / 2 * this.width + this.viewportPadding,\n y: (-out[1] / out[3] + 1) / 2 * this.height + this.viewportPadding\n };\n }\n\n /**\n * 判断包围盒是否在整个网格内,需要加上 buffer\n * @param {number} x1 x1\n * @param {number} y1 y1\n * @param {number} x2 x2\n * @param {number} y2 y2\n * @return {Point} isInside\n */\n isInsideGrid(x1, y1, x2, y2) {\n return x2 >= 0 && x1 < this.gridRightBoundary && y2 >= 0 && y1 < this.gridBottomBoundary;\n }\n}","/**\n * 返回文本相对锚点位置\n * @param {string} anchor 锚点位置\n * @return {alignment} alignment\n */\nfunction getAnchorAlignment(anchor) {\n let horizontalAlign = 0.5;\n let verticalAlign = 0.5;\n switch (anchor) {\n case 'right':\n case 'top-right':\n case 'bottom-right':\n horizontalAlign = 1;\n break;\n case 'left':\n case 'top-left':\n case 'bottom-left':\n horizontalAlign = 0;\n break;\n default:\n horizontalAlign = 0.5;\n }\n switch (anchor) {\n case 'bottom':\n case 'bottom-right':\n case 'bottom-left':\n verticalAlign = 1;\n break;\n case 'top':\n case 'top-right':\n case 'top-left':\n verticalAlign = 0;\n break;\n default:\n verticalAlign = 0.5;\n }\n return {\n horizontalAlign,\n verticalAlign\n };\n}\n\n// justify right = 1, left = 0, center = 0.5\nfunction justifyLine(positionedGlyphs, glyphMap, start, end, justify) {\n if (!justify) {\n return;\n }\n const lastPositionedGlyph = positionedGlyphs[end];\n const glyph = lastPositionedGlyph.glyph;\n if (glyph) {\n const lastAdvance = glyphMap[glyph].advance * lastPositionedGlyph.scale;\n const lineIndent = (positionedGlyphs[end].x + lastAdvance) * justify;\n for (let j = start; j <= end; j++) {\n positionedGlyphs[j].x -= lineIndent;\n }\n }\n}\n\n// justify right=1 left=0 center=0.5\n// horizontalAlign right=1 left=0 center=0.5\n// verticalAlign right=1 left=0 center=0.5\nfunction align(positionedGlyphs, justify, horizontalAlign, verticalAlign, maxLineLength, lineHeight, lineCount) {\n const shiftX = (justify - horizontalAlign) * maxLineLength;\n const shiftY = (-verticalAlign * lineCount + 0.5) * lineHeight;\n for (const glyphs of positionedGlyphs) {\n glyphs.x += shiftX;\n glyphs.y += shiftY;\n }\n}\nfunction shapeLines(shaping, glyphMap, lines, lineHeight, textAnchor, textJustify, spacing) {\n // buffer 为 4\n const yOffset = -8;\n let x = 0;\n let y = yOffset;\n let maxLineLength = 0;\n const positionedGlyphs = shaping.positionedGlyphs;\n const justify = textJustify === 'right' ? 1 : textJustify === 'left' ? 0 : 0.5;\n const lineStartIndex = positionedGlyphs.length;\n lines.forEach(line => {\n line.split('').forEach(char => {\n const glyph = glyphMap[char];\n const baselineOffset = 0;\n if (glyph) {\n positionedGlyphs.push({\n glyph: char,\n x,\n y: y + baselineOffset,\n vertical: false,\n // TODO:目前只支持水平方向\n scale: 1,\n metrics: glyph\n });\n x += glyph.advance + spacing;\n }\n });\n\n // 左右对齐\n if (positionedGlyphs.length !== lineStartIndex) {\n const lineLength = x - spacing;\n maxLineLength = Math.max(lineLength, maxLineLength);\n justifyLine(positionedGlyphs, glyphMap, lineStartIndex, positionedGlyphs.length - 1, justify);\n }\n x = 0;\n y -= lineHeight + 5;\n });\n const {\n horizontalAlign,\n verticalAlign\n } = getAnchorAlignment(textAnchor);\n align(positionedGlyphs, justify, horizontalAlign, verticalAlign, maxLineLength, lineHeight, lines.length);\n\n // 计算包围盒\n const height = y - yOffset;\n shaping.top += -verticalAlign * height;\n shaping.bottom = shaping.top - height;\n shaping.left += -horizontalAlign * maxLineLength;\n shaping.right = shaping.left + maxLineLength;\n}\nfunction shapeIconFont(shaping, glyphMap, iconfonts, lineHeight, textAnchor, textJustify, spacing) {\n // buffer 为 4\n const yOffset = -8;\n let x = 0;\n let y = yOffset;\n let maxLineLength = 0;\n const positionedGlyphs = shaping.positionedGlyphs;\n const justify = textJustify === 'right' ? 1 : textJustify === 'left' ? 0 : 0.5;\n const lineStartIndex = positionedGlyphs.length;\n iconfonts.forEach(iconfont => {\n const glyph = glyphMap[iconfont];\n const baselineOffset = 0;\n if (glyph) {\n positionedGlyphs.push({\n glyph: iconfont,\n // x,\n /**\n * iconfont\n * 在计算大小的时候计算的是 unicode 字符 如 \n * 在布局计算 icon 位置的时候应该始终保持居中(且 icon 只占一个字符的位置)\n */\n x: glyph.advance / 2,\n y: y + baselineOffset,\n vertical: false,\n // TODO:目前只支持水平方向\n scale: 1,\n metrics: glyph\n });\n x += glyph.advance + spacing;\n }\n\n // 左右对齐\n if (positionedGlyphs.length !== lineStartIndex) {\n const lineLength = x - spacing;\n maxLineLength = Math.max(lineLength, maxLineLength);\n justifyLine(positionedGlyphs, glyphMap, lineStartIndex, positionedGlyphs.length - 1, justify);\n }\n x = 0;\n y -= lineHeight + 5;\n });\n const {\n horizontalAlign,\n verticalAlign\n } = getAnchorAlignment(textAnchor);\n align(positionedGlyphs, justify, horizontalAlign, verticalAlign, maxLineLength, lineHeight, iconfonts.length);\n\n // 计算包围盒\n const height = y - yOffset;\n shaping.top += -verticalAlign * height;\n shaping.bottom = shaping.top - height;\n shaping.left += -horizontalAlign * maxLineLength;\n shaping.right = shaping.left + maxLineLength;\n}\n\n/**\n * 计算文本中每个独立字符相对锚点的位置\n *\n * @param {string} text 原始文本\n * @param {*} glyphs mapping\n * @param {number} lineHeight 行高\n * @param {string} textAnchor 文本相对于锚点的位置\n * @param {string} textJustify 左右对齐\n * @param {number} spacing 字符间距\n * @param {[number, number]} translate 文本水平 & 垂直偏移量\n * @param {[boolean]} isIconFont 是否是 iconfont\n * @return {boolean|shaping} 每个字符相对于锚点的位置\n */\nexport function shapeText(text, glyphs, lineHeight, textAnchor, textJustify, spacing, translate = [0, 0], isIconFont) {\n // TODO:处理换行\n const lines = text.split('\\n');\n const positionedGlyphs = [];\n const shaping = {\n positionedGlyphs,\n top: translate[1],\n bottom: translate[1],\n left: translate[0],\n right: translate[0],\n lineCount: lines.length,\n text\n };\n isIconFont ? shapeIconFont(shaping, glyphs, lines, lineHeight, textAnchor, textJustify, spacing) : shapeLines(shaping, glyphs, lines, lineHeight, textAnchor, textJustify, spacing);\n if (!positionedGlyphs.length) {\n return false;\n }\n return shaping;\n}\nexport function getGlyphQuads(shaping, textOffset = [0, 0], alongLine) {\n const {\n positionedGlyphs = []\n } = shaping;\n const quads = [];\n for (const positionedGlyph of positionedGlyphs) {\n const rect = positionedGlyph.metrics;\n\n // The rects have an addditional buffer that is not included in their size.\n const rectBuffer = 4;\n const halfAdvance = rect.advance * positionedGlyph.scale / 2;\n const glyphOffset = alongLine ? [positionedGlyph.x + halfAdvance, positionedGlyph.y] : [0, 0];\n const builtInOffset = alongLine ? [0, 0] : [positionedGlyph.x + halfAdvance + textOffset[0], positionedGlyph.y + textOffset[1]];\n const x1 = (0 - rectBuffer) * positionedGlyph.scale - halfAdvance + builtInOffset[0];\n const y1 = (0 - rectBuffer) * positionedGlyph.scale + builtInOffset[1];\n const x2 = x1 + rect.width * positionedGlyph.scale;\n const y2 = y1 + rect.height * positionedGlyph.scale;\n const tl = {\n x: x1,\n y: y1\n };\n const tr = {\n x: x2,\n y: y1\n };\n const bl = {\n x: x1,\n y: y2\n };\n const br = {\n x: x2,\n y: y2\n };\n\n // TODO:处理字符旋转的情况\n\n quads.push({\n tl,\n tr,\n bl,\n br,\n tex: rect,\n glyphOffset\n });\n }\n return quads;\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport { boundsContains, calculateCentroid, lodashUtil, padBounds, rgb2arr } from '@antv/l7-utils';\nimport BaseModel from \"../../core/BaseModel\";\nimport CollisionIndex from \"../../utils/collision-index\";\nimport { getGlyphQuads, shapeText } from \"../../utils/symbol-layout\";\n/* babel-plugin-inline-import '../shaders/text/text_frag.glsl' */\nconst textFrag = \"#define SDF_PX 8.0\\n#define EDGE_GAMMA 0.105\\n#define FONT_SIZE 48.0\\n\\nuniform sampler2D u_sdf_map;\\nlayout(std140) uniform commonUniforms {\\n vec4 u_stroke_color : [0.0, 0.0, 0.0, 0.0];\\n vec2 u_sdf_map_size;\\n float u_raisingHeight: 0.0;\\n float u_stroke_width : 2;\\n float u_gamma_scale : 0.5;\\n float u_halo_blur : 0.5;\\n};\\n\\nin vec2 v_uv;\\nin float v_gamma_scale;\\nin vec4 v_color;\\nin vec4 v_stroke_color;\\nin float v_fontScale;\\n\\nout vec4 outputColor;\\n\\n#pragma include \\\"picking\\\"\\nvoid main() {\\n // get style data mapping\\n\\n // get sdf from atlas\\n float dist = texture(SAMPLER_2D(u_sdf_map), v_uv).a;\\n\\n lowp float buff = (6.0 - u_stroke_width / v_fontScale) / SDF_PX;\\n highp float gamma = (u_halo_blur * 1.19 / SDF_PX + EDGE_GAMMA) / (v_fontScale * u_gamma_scale) / 1.0;\\n\\n highp float gamma_scaled = gamma * v_gamma_scale;\\n\\n highp float alpha = smoothstep(buff - gamma_scaled, buff + gamma_scaled, dist);\\n\\n outputColor = mix(v_color, v_stroke_color, smoothstep(0., 0.5, 1.- dist));\\n\\n outputColor.a *= alpha;\\n // \\u4F5C\\u4E3A mask \\u6A21\\u677F\\u65F6\\u9700\\u8981\\u4E22\\u5F03\\u900F\\u660E\\u7684\\u50CF\\u7D20\\n if (outputColor.a < 0.01) {\\n discard;\\n }\\n outputColor = filterColor(outputColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/text/text_vert.glsl' */\nconst textVert = \"#define SDF_PX 8.0\\n#define EDGE_GAMMA 0.105\\n#define FONT_SIZE 24.0\\n\\nlayout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_TEXT_OFFSETS) in vec2 a_textOffsets;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_tex;\\n\\nlayout(std140) uniform commonUniforms {\\n vec4 u_stroke_color : [0.0, 0.0, 0.0, 0.0];\\n vec2 u_sdf_map_size;\\n float u_raisingHeight: 0.0;\\n float u_stroke_width : 2;\\n float u_gamma_scale : 0.5;\\n float u_halo_blur : 0.5;\\n};\\n\\nout vec2 v_uv;\\nout float v_gamma_scale;\\nout vec4 v_color;\\nout vec4 v_stroke_color;\\nout float v_fontScale;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"picking\\\"\\n#pragma include \\\"rotation_2d\\\"\\n\\nvoid main() {\\n // cal style mapping - \\u6570\\u636E\\u7EB9\\u7406\\u6620\\u5C04\\u90E8\\u5206\\u7684\\u8BA1\\u7B97\\n\\n v_uv = a_tex / u_sdf_map_size;\\n\\n\\n\\n v_color = vec4(a_Color.xyz, a_Color.w * opacity);\\n v_stroke_color = vec4(u_stroke_color.xyz, u_stroke_color.w * opacity);\\n\\n // \\u6587\\u672C\\u7F29\\u653E\\u6BD4\\u4F8B\\n float fontScale = a_Size / FONT_SIZE;\\n v_fontScale = fontScale;\\n\\n vec4 project_pos = project_position(vec4(a_Position, 1.0), a_Position64Low);\\n // vec4 projected_position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\\n\\n vec2 offset = rotate_matrix(a_textOffsets,rotation);\\n\\n // gl_Position = vec4(projected_position.xy / projected_position.w + rotation_matrix * a_textOffsets * fontScale / u_ViewportSize * 2.0 * u_DevicePixelRatio, 0.0, 1.0);\\n\\n float raiseHeight = u_raisingHeight;\\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\\n float mapboxZoomScale = 4.0/pow(2.0, 21.0 - u_Zoom);\\n raiseHeight = u_raisingHeight * mapboxZoomScale;\\n }\\n\\n vec4 projected_position = project_common_position_to_clipspace(vec4(project_pos.xyz + vec3(0.0, 0.0, raiseHeight), 1.0));\\n\\n gl_Position = vec4(\\n projected_position.xy / projected_position.w + offset * fontScale / u_ViewportSize * 2.0 * u_DevicePixelRatio, 0.0, 1.0);\\n v_gamma_scale = gl_Position.w;\\n setPickingColor(a_PickingColor);\\n\\n}\\n\";\nconst {\n isEqual\n} = lodashUtil;\nexport function TextTrianglation(feature) {\n // @ts-ignore\n const that = this;\n const id = feature.id;\n const vertices = [];\n const indices = [];\n if (!that.glyphInfoMap || !that.glyphInfoMap[id]) {\n return {\n vertices: [],\n // [ x, y, z, tex.x,tex.y, offset.x. offset.y]\n indices: [],\n size: 7\n };\n }\n const centroid = that.glyphInfoMap[id].centroid; // 计算中心点\n const coord = centroid.length === 2 ? [centroid[0], centroid[1], 0] : centroid;\n that.glyphInfoMap[id].glyphQuads.forEach((quad, index) => {\n vertices.push(...coord, quad.tex.x, quad.tex.y + quad.tex.height, quad.tl.x, quad.tl.y, ...coord, quad.tex.x + quad.tex.width, quad.tex.y + quad.tex.height, quad.tr.x, quad.tr.y, ...coord, quad.tex.x + quad.tex.width, quad.tex.y, quad.br.x, quad.br.y, ...coord, quad.tex.x, quad.tex.y, quad.bl.x, quad.bl.y);\n indices.push(0 + index * 4, 1 + index * 4, 2 + index * 4, 2 + index * 4, 3 + index * 4, 0 + index * 4);\n });\n return {\n vertices,\n // [ x, y, z, tex.x,tex.y, offset.x. offset.y]\n indices,\n size: 7\n };\n}\nexport default class TextModel extends BaseModel {\n constructor(...args) {\n var _this;\n super(...args);\n _this = this;\n _defineProperty(this, \"glyphInfo\", void 0);\n _defineProperty(this, \"glyphInfoMap\", {});\n _defineProperty(this, \"rawEncodeData\", void 0);\n _defineProperty(this, \"texture\", void 0);\n _defineProperty(this, \"currentZoom\", -1);\n _defineProperty(this, \"extent\", void 0);\n _defineProperty(this, \"textureHeight\", 0);\n _defineProperty(this, \"textCount\", 0);\n _defineProperty(this, \"preTextStyle\", {});\n _defineProperty(this, \"mapping\", /*#__PURE__*/_asyncToGenerator(function* () {\n _this.initGlyph(); //\n _this.updateTexture();\n yield _this.reBuildModel();\n }));\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n TEXT_OFFSETS: 10,\n UV: 11\n });\n }\n getUninforms() {\n const commoninfo = this.getCommonUniformsInfo();\n const attributeInfo = this.getUniformsBufferInfo(this.getStyleAttribute());\n this.updateStyleUnifoms();\n return _objectSpread(_objectSpread(_objectSpread({}, commoninfo.uniformsOption), attributeInfo.uniformsOption), {\n u_sdf_map: this.textures[0]\n });\n }\n getCommonUniformsInfo() {\n const {\n stroke = '#fff',\n strokeWidth = 0,\n halo = 0.5,\n gamma = 2.0,\n raisingHeight = 0\n } = this.layer.getLayerConfig();\n const mapping = this.getFontServiceMapping();\n const canvas = this.getFontServiceCanvas();\n if (mapping && Object.keys(mapping).length !== this.textCount && canvas) {\n this.updateTexture();\n this.textCount = Object.keys(mapping).length;\n }\n this.preTextStyle = this.getTextStyle();\n const commonOptions = {\n u_stroke_color: rgb2arr(stroke),\n u_sdf_map_size: [(canvas === null || canvas === void 0 ? void 0 : canvas.width) || 1, (canvas === null || canvas === void 0 ? void 0 : canvas.height) || 1],\n u_raisingHeight: Number(raisingHeight),\n u_stroke_width: strokeWidth,\n u_gamma_scale: gamma,\n u_halo_blur: halo\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n // 绑定事件\n _this2.bindEvent();\n _this2.extent = _this2.textExtent();\n _this2.rawEncodeData = _this2.layer.getEncodedData();\n _this2.preTextStyle = _this2.getTextStyle();\n _this2.initUniformsBuffer();\n return _this2.buildModels();\n })();\n }\n buildModels() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n const {\n textAllowOverlap = false\n } = _this3.layer.getLayerConfig();\n\n // this.mapping(); 重复调用\n _this3.initGlyph(); //\n _this3.updateTexture();\n if (!textAllowOverlap) {\n _this3.filterGlyphs();\n }\n const model = yield _this3.layer.buildLayerModel({\n moduleName: 'pointText',\n vertexShader: textVert,\n fragmentShader: textFrag,\n defines: _this3.getDefines(),\n inject: _this3.getInject(),\n triangulation: TextTrianglation.bind(_this3),\n depth: {\n enable: false\n }\n });\n return [model];\n })();\n }\n // 需要更新的场景\n // 1. 文本偏移量发生改变\n // 2. 文本锚点发生改变\n // 3. 文本允许重叠发生改变\n // 4. 文本字体发生改变\n // 5. 文本字体粗细发生改变\n needUpdate() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n const {\n textAllowOverlap = false,\n textAnchor = 'center',\n textOffset,\n padding,\n fontFamily,\n fontWeight\n } = _this4.getTextStyle();\n if (!isEqual(padding, _this4.preTextStyle.padding) || !isEqual(textOffset, _this4.preTextStyle.textOffset) || !isEqual(textAnchor, _this4.preTextStyle.textAnchor) || !isEqual(fontFamily, _this4.preTextStyle.fontFamily) || !isEqual(fontWeight, _this4.preTextStyle.fontWeight)) {\n yield _this4.mapping();\n return true;\n }\n if (textAllowOverlap) {\n // 小于不做避让\n return false;\n }\n\n // textAllowOverlap 发生改变\n const zoom = _this4.mapService.getZoom();\n const extent = _this4.mapService.getBounds();\n const flag = boundsContains(_this4.extent, extent);\n // 文本不能压盖则进行过滤\n if (Math.abs(_this4.currentZoom - zoom) > 0.5 || !flag || textAllowOverlap !== _this4.preTextStyle.textAllowOverlap) {\n // TODO this.mapping 数据未变化,避让\n yield _this4.reBuildModel();\n return true;\n }\n return false;\n })();\n }\n clearModels() {\n var _this$texture;\n (_this$texture = this.texture) === null || _this$texture === void 0 || _this$texture.destroy();\n // TODO this.mapping\n this.layer.off('remapping', this.mapping);\n }\n registerBuiltinAttributes() {\n // 注册 Position 属性 64 位地位部分,经纬度数据开启双精度,避免大于 20层级以上出现数据偏移\n this.registerPosition64LowAttribute();\n this.styleAttributeService.registerStyleAttribute({\n name: 'textOffsets',\n type: AttributeType.Attribute,\n descriptor: {\n shaderLocation: this.attributeLocation.TEXT_OFFSETS,\n name: 'a_textOffsets',\n // 文字偏移量\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: (feature, featureIdx, vertex) => {\n return [vertex[5], vertex[6]];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'textUv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_tex',\n shaderLocation: this.attributeLocation.UV,\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: (feature, featureIdx, vertex) => {\n return [vertex[3], vertex[4]];\n }\n }\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n size = 12\n } = feature;\n return Array.isArray(size) ? [size[0]] : [size];\n }\n }\n });\n }\n bindEvent() {\n if (!this.layer.isTileLayer) {\n // 重新绑定\n this.layer.on('remapping', this.mapping);\n }\n }\n textExtent() {\n const bounds = this.mapService.getBounds();\n return padBounds(bounds, 0.5);\n }\n /**\n * 生成文字纹理(生成文字纹理字典)\n */\n initTextFont() {\n const {\n fontWeight,\n fontFamily\n } = this.getTextStyle();\n const data = this.rawEncodeData;\n const characterSet = [];\n data.forEach(item => {\n let {\n shape = ''\n } = item;\n shape = shape.toString();\n for (const char of shape) {\n // 去重\n if (characterSet.indexOf(char) === -1) {\n characterSet.push(char);\n }\n }\n });\n this.fontService.setFontOptions({\n characterSet,\n fontWeight,\n fontFamily,\n iconfont: false\n });\n }\n\n /**\n * 生成 iconfont 纹理字典\n */\n initIconFontTex() {\n const {\n fontWeight,\n fontFamily\n } = this.getTextStyle();\n const data = this.rawEncodeData;\n const characterSet = [];\n data.forEach(item => {\n let {\n shape = ''\n } = item;\n shape = `${shape}`;\n if (characterSet.indexOf(shape) === -1) {\n characterSet.push(shape);\n }\n });\n this.fontService.setFontOptions({\n characterSet,\n fontWeight,\n fontFamily,\n iconfont: true\n });\n }\n getTextStyle() {\n const {\n fontWeight = '400',\n fontFamily = 'sans-serif',\n textAllowOverlap = false,\n padding = [0, 0],\n textAnchor = 'center',\n textOffset = [0, 0],\n opacity = 1,\n strokeOpacity = 1,\n strokeWidth = 0,\n stroke = '#000'\n } = this.layer.getLayerConfig();\n return {\n fontWeight,\n fontFamily,\n textAllowOverlap,\n padding,\n textAnchor,\n textOffset,\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke\n };\n }\n\n /**\n * 生成文字布局(对照文字纹理字典提取对应文字的位置很好信息)\n */\n generateGlyphLayout(iconfont) {\n const mapping = this.getFontServiceMapping();\n const {\n spacing = 2,\n textAnchor = 'center',\n textOffset\n } = this.layer.getLayerConfig();\n const data = this.rawEncodeData;\n this.glyphInfo = data.map(feature => {\n const {\n shape = '',\n id,\n size = 1\n } = feature;\n const offset = feature.textOffset ? feature.textOffset : textOffset || [0, 0];\n const anchor = feature.textAnchor ? feature.textAnchor : textAnchor || 'center';\n const shaping = shapeText(shape.toString(), mapping,\n // @ts-ignore\n size, anchor, 'left', spacing, offset,\n //\n iconfont);\n const glyphQuads = getGlyphQuads(shaping, offset, false);\n feature.shaping = shaping;\n feature.glyphQuads = glyphQuads;\n // feature.centroid = calculteCentroid(coordinates);\n\n feature.centroid = calculateCentroid(feature.coordinates);\n this.glyphInfoMap[id] = {\n shaping,\n glyphQuads,\n centroid: calculateCentroid(feature.coordinates)\n };\n return feature;\n });\n }\n getFontServiceMapping() {\n const {\n fontWeight = '400',\n fontFamily = 'sans-serif'\n } = this.layer.getLayerConfig();\n return this.fontService.getMappingByKey(`${fontFamily}_${fontWeight}`);\n }\n getFontServiceCanvas() {\n const {\n fontWeight = '400',\n fontFamily = 'sans-serif'\n } = this.layer.getLayerConfig();\n // 更新文字布局\n return this.fontService.getCanvasByKey(`${fontFamily}_${fontWeight}`);\n }\n\n /**\n * 文字避让 depend on originCentorid\n */\n filterGlyphs() {\n const {\n padding = [0, 0],\n textAllowOverlap = false\n } = this.layer.getLayerConfig();\n if (textAllowOverlap) {\n // 如果允许文本覆盖\n return;\n }\n this.glyphInfoMap = {};\n this.currentZoom = this.mapService.getZoom();\n this.extent = this.textExtent();\n const {\n width,\n height\n } = this.rendererService.getViewportSize();\n const collisionIndex = new CollisionIndex(width, height);\n const filterData = this.glyphInfo.filter(feature => {\n const {\n shaping,\n id = 0\n } = feature;\n const centroid = feature.centroid;\n const size = feature.size;\n const fontScale = size / 16;\n const pixels = this.mapService.lngLatToContainer(centroid);\n const {\n box\n } = collisionIndex.placeCollisionBox({\n x1: shaping.left * fontScale - padding[0],\n x2: shaping.right * fontScale + padding[0],\n y1: shaping.top * fontScale - padding[1],\n y2: shaping.bottom * fontScale + padding[1],\n anchorPointX: pixels.x,\n anchorPointY: pixels.y\n });\n if (box && box.length) {\n collisionIndex.insertCollisionBox(box, id);\n return true;\n } else {\n return false;\n }\n });\n filterData.forEach(item => {\n // @ts-ignore\n this.glyphInfoMap[item.id] = item;\n });\n // this.layer.setEncodedData(filterData);\n }\n /**\n * 初始化文字布局\n */\n initGlyph() {\n const {\n iconfont = false\n } = this.layer.getLayerConfig();\n // 1.生成文字纹理(或是生成 iconfont)\n iconfont ? this.initIconFontTex() : this.initTextFont();\n // 2.生成文字布局\n this.generateGlyphLayout(iconfont);\n }\n /**\n * 更新文字纹理\n */\n updateTexture() {\n const {\n createTexture2D\n } = this.rendererService;\n const canvas = this.getFontServiceCanvas();\n this.textureHeight = canvas.height;\n if (this.texture) {\n this.texture.destroy();\n }\n this.texture = createTexture2D({\n data: canvas,\n mag: gl.LINEAR,\n min: gl.LINEAR,\n width: canvas.width,\n height: canvas.height\n });\n this.textures = [this.texture];\n }\n reBuildModel() {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n _this5.filterGlyphs();\n const model = yield _this5.layer.buildLayerModel({\n moduleName: 'pointText',\n vertexShader: textVert,\n fragmentShader: textFrag,\n triangulation: TextTrianglation.bind(_this5),\n defines: _this5.getDefines(),\n inject: _this5.getInject(),\n depth: {\n enable: false\n }\n });\n // TODO 渲染流程待修改\n _this5.layer.models = [model];\n })();\n }\n}","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\").default;\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.generate = generate;\nexports.getSecondaryColor = getSecondaryColor;\nexports.iconStyles = void 0;\nexports.isIconDefinition = isIconDefinition;\nexports.normalizeAttrs = normalizeAttrs;\nexports.normalizeTwoToneColors = normalizeTwoToneColors;\nexports.useInsertStyles = exports.svgBaseProps = void 0;\nexports.warning = warning;\nvar _objectSpread2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectSpread2\"));\nvar _typeof2 = _interopRequireDefault(require(\"@babel/runtime/helpers/typeof\"));\nvar _colors = require(\"@ant-design/colors\");\nvar _dynamicCSS = require(\"rc-util/lib/Dom/dynamicCSS\");\nvar _shadow = require(\"rc-util/lib/Dom/shadow\");\nvar _warning = _interopRequireDefault(require(\"rc-util/lib/warning\"));\nvar _react = _interopRequireWildcard(require(\"react\"));\nvar _Context = _interopRequireDefault(require(\"./components/Context\"));\nfunction camelCase(input) {\n return input.replace(/-(.)/g, function (match, g) {\n return g.toUpperCase();\n });\n}\nfunction warning(valid, message) {\n (0, _warning.default)(valid, \"[@ant-design/icons] \".concat(message));\n}\nfunction isIconDefinition(target) {\n return (0, _typeof2.default)(target) === 'object' && typeof target.name === 'string' && typeof target.theme === 'string' && ((0, _typeof2.default)(target.icon) === 'object' || typeof target.icon === 'function');\n}\nfunction normalizeAttrs() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return Object.keys(attrs).reduce(function (acc, key) {\n var val = attrs[key];\n switch (key) {\n case 'class':\n acc.className = val;\n delete acc.class;\n break;\n default:\n delete acc[key];\n acc[camelCase(key)] = val;\n }\n return acc;\n }, {});\n}\nfunction generate(node, key, rootProps) {\n if (!rootProps) {\n return /*#__PURE__*/_react.default.createElement(node.tag, (0, _objectSpread2.default)({\n key: key\n }, normalizeAttrs(node.attrs)), (node.children || []).map(function (child, index) {\n return generate(child, \"\".concat(key, \"-\").concat(node.tag, \"-\").concat(index));\n }));\n }\n return /*#__PURE__*/_react.default.createElement(node.tag, (0, _objectSpread2.default)((0, _objectSpread2.default)({\n key: key\n }, normalizeAttrs(node.attrs)), rootProps), (node.children || []).map(function (child, index) {\n return generate(child, \"\".concat(key, \"-\").concat(node.tag, \"-\").concat(index));\n }));\n}\nfunction getSecondaryColor(primaryColor) {\n // choose the second color\n return (0, _colors.generate)(primaryColor)[0];\n}\nfunction normalizeTwoToneColors(twoToneColor) {\n if (!twoToneColor) {\n return [];\n }\n return Array.isArray(twoToneColor) ? twoToneColor : [twoToneColor];\n}\n\n// These props make sure that the SVG behaviours like general text.\n// Reference: https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4\nvar svgBaseProps = exports.svgBaseProps = {\n width: '1em',\n height: '1em',\n fill: 'currentColor',\n 'aria-hidden': 'true',\n focusable: 'false'\n};\nvar iconStyles = exports.iconStyles = \"\\n.anticon {\\n display: inline-flex;\\n align-items: center;\\n color: inherit;\\n font-style: normal;\\n line-height: 0;\\n text-align: center;\\n text-transform: none;\\n vertical-align: -0.125em;\\n text-rendering: optimizeLegibility;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n\\n.anticon > * {\\n line-height: 1;\\n}\\n\\n.anticon svg {\\n display: inline-block;\\n}\\n\\n.anticon::before {\\n display: none;\\n}\\n\\n.anticon .anticon-icon {\\n display: block;\\n}\\n\\n.anticon[tabindex] {\\n cursor: pointer;\\n}\\n\\n.anticon-spin::before,\\n.anticon-spin {\\n display: inline-block;\\n -webkit-animation: loadingCircle 1s infinite linear;\\n animation: loadingCircle 1s infinite linear;\\n}\\n\\n@-webkit-keyframes loadingCircle {\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n\\n@keyframes loadingCircle {\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n\";\nvar useInsertStyles = exports.useInsertStyles = function useInsertStyles(eleRef) {\n var _useContext = (0, _react.useContext)(_Context.default),\n csp = _useContext.csp,\n prefixCls = _useContext.prefixCls,\n layer = _useContext.layer;\n var mergedStyleStr = iconStyles;\n if (prefixCls) {\n mergedStyleStr = mergedStyleStr.replace(/anticon/g, prefixCls);\n }\n if (layer) {\n mergedStyleStr = \"@layer \".concat(layer, \" {\\n\").concat(mergedStyleStr, \"\\n}\");\n }\n (0, _react.useEffect)(function () {\n var ele = eleRef.current;\n var shadowRoot = (0, _shadow.getShadowRoot)(ele);\n (0, _dynamicCSS.updateCSS)(mergedStyleStr, '@ant-design-icons', {\n prepend: !layer,\n csp: csp,\n attachTo: shadowRoot\n });\n }, []);\n};","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nexport function renderExpandIcon(_ref) {\n var prefixCls = _ref.prefixCls,\n record = _ref.record,\n onExpand = _ref.onExpand,\n expanded = _ref.expanded,\n expandable = _ref.expandable;\n var expandClassName = \"\".concat(prefixCls, \"-row-expand-icon\");\n if (!expandable) {\n return /*#__PURE__*/React.createElement(\"span\", {\n className: classNames(expandClassName, \"\".concat(prefixCls, \"-row-spaced\"))\n });\n }\n var onClick = function onClick(event) {\n onExpand(record, event);\n event.stopPropagation();\n };\n return /*#__PURE__*/React.createElement(\"span\", {\n className: classNames(expandClassName, _defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-row-expanded\"), expanded), \"\".concat(prefixCls, \"-row-collapsed\"), !expanded)),\n onClick: onClick\n });\n}\nexport function findAllChildrenKeys(data, getRowKey, childrenColumnName) {\n var keys = [];\n function dig(list) {\n (list || []).forEach(function (item, index) {\n keys.push(getRowKey(item, index));\n dig(item[childrenColumnName]);\n });\n }\n dig(data);\n return keys;\n}\nexport function computedExpandedClassName(cls, record, index, indent) {\n if (typeof cls === 'string') {\n return cls;\n }\n if (typeof cls === 'function') {\n return cls(record, index, indent);\n }\n return '';\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { proTheme, useIntl } from '@ant-design/pro-provider';\nimport { Button, Form } from 'antd';\nimport omit from \"rc-util/es/omit\";\nimport React from 'react';\n\n/** @name 用于配置操作栏 */\nimport { createElement as _createElement } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * FormFooter 的组件,可以自动进行一些配置\n *\n * @param props\n */\n\nvar Submitter = function Submitter(props) {\n var intl = useIntl();\n var form = Form.useFormInstance();\n if (props.render === false) {\n return null;\n }\n var onSubmit = props.onSubmit,\n render = props.render,\n onReset = props.onReset,\n _props$searchConfig = props.searchConfig,\n searchConfig = _props$searchConfig === void 0 ? {} : _props$searchConfig,\n submitButtonProps = props.submitButtonProps,\n resetButtonProps = props.resetButtonProps;\n var _proTheme$useToken = proTheme.useToken(),\n token = _proTheme$useToken.token;\n var submit = function submit() {\n form.submit();\n onSubmit === null || onSubmit === void 0 || onSubmit();\n };\n var reset = function reset() {\n form.resetFields();\n onReset === null || onReset === void 0 || onReset();\n };\n var _searchConfig$submitT = searchConfig.submitText,\n submitText = _searchConfig$submitT === void 0 ? intl.getMessage('tableForm.submit', '提交') : _searchConfig$submitT,\n _searchConfig$resetTe = searchConfig.resetText,\n resetText = _searchConfig$resetTe === void 0 ? intl.getMessage('tableForm.reset', '重置') : _searchConfig$resetTe;\n /** 默认的操作的逻辑 */\n var dom = [];\n if (resetButtonProps !== false) {\n dom.push( /*#__PURE__*/_createElement(Button, _objectSpread(_objectSpread({}, omit(resetButtonProps !== null && resetButtonProps !== void 0 ? resetButtonProps : {}, ['preventDefault'])), {}, {\n key: \"rest\",\n onClick: function onClick(e) {\n var _resetButtonProps$onC;\n if (!(resetButtonProps !== null && resetButtonProps !== void 0 && resetButtonProps.preventDefault)) reset();\n resetButtonProps === null || resetButtonProps === void 0 || (_resetButtonProps$onC = resetButtonProps.onClick) === null || _resetButtonProps$onC === void 0 || _resetButtonProps$onC.call(resetButtonProps, e);\n }\n }), resetText));\n }\n if (submitButtonProps !== false) {\n dom.push( /*#__PURE__*/_createElement(Button, _objectSpread(_objectSpread({\n type: \"primary\"\n }, omit(submitButtonProps || {}, ['preventDefault'])), {}, {\n key: \"submit\",\n onClick: function onClick(e) {\n var _submitButtonProps$on;\n if (!(submitButtonProps !== null && submitButtonProps !== void 0 && submitButtonProps.preventDefault)) submit();\n submitButtonProps === null || submitButtonProps === void 0 || (_submitButtonProps$on = submitButtonProps.onClick) === null || _submitButtonProps$on === void 0 || _submitButtonProps$on.call(submitButtonProps, e);\n }\n }), submitText));\n }\n var renderDom = render ? render(_objectSpread(_objectSpread({}, props), {}, {\n form: form,\n submit: submit,\n reset: reset\n }), dom) : dom;\n if (!renderDom) {\n return null;\n }\n if (Array.isArray(renderDom)) {\n if ((renderDom === null || renderDom === void 0 ? void 0 : renderDom.length) < 1) {\n return null;\n }\n if ((renderDom === null || renderDom === void 0 ? void 0 : renderDom.length) === 1) {\n return renderDom[0];\n }\n return /*#__PURE__*/_jsx(\"div\", {\n style: {\n display: 'flex',\n gap: token.marginXS,\n alignItems: 'center'\n },\n children: renderDom\n });\n }\n return renderDom;\n};\nexport default Submitter;","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { createLayerContainer } from '@antv/l7-core';\nimport { EventEmitter } from 'eventemitter3';\nimport PolygonLayer from \"../../polygon\";\nimport { isNeedMask } from \"./util\";\nexport default class Tile extends EventEmitter {\n constructor(sourceTile, parent) {\n super();\n _defineProperty(this, \"x\", void 0);\n _defineProperty(this, \"y\", void 0);\n _defineProperty(this, \"z\", void 0);\n _defineProperty(this, \"key\", void 0);\n _defineProperty(this, \"parent\", void 0);\n _defineProperty(this, \"sourceTile\", void 0);\n _defineProperty(this, \"visible\", true);\n _defineProperty(this, \"layers\", []);\n _defineProperty(this, \"isLoaded\", false);\n _defineProperty(this, \"tileMaskLayers\", []);\n _defineProperty(this, \"tileMask\", void 0);\n this.parent = parent;\n this.sourceTile = sourceTile;\n this.x = sourceTile.x;\n this.y = sourceTile.y;\n this.z = sourceTile.z;\n this.key = `${this.x}_${this.y}_${this.z}`;\n }\n getLayers() {\n return this.layers;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n styleUpdate(...arg) {\n return;\n }\n lnglatInBounds(lnglat) {\n const [minLng, minLat, maxLng, maxLat] = this.sourceTile.bounds;\n const {\n lng,\n lat\n } = lnglat;\n return lng >= minLng && lng <= maxLng && lat >= minLat && lat <= maxLat;\n }\n getLayerOptions() {\n var _options$maskLayers;\n const options = this.parent.getLayerConfig();\n return _objectSpread(_objectSpread({}, options), {}, {\n textAllowOverlap: true,\n // 文本允许重叠\n autoFit: false,\n maskLayers: this.getMaskLayer(),\n tileMask: isNeedMask(this.parent.type),\n mask: options.mask || ((_options$maskLayers = options.maskLayers) === null || _options$maskLayers === void 0 ? void 0 : _options$maskLayers.length) !== 0 && options.enableMask\n });\n }\n // 获取Mask 图层\n getMaskLayer() {\n const {\n maskLayers\n } = this.parent.getLayerConfig();\n const layers = [];\n maskLayers === null || maskLayers === void 0 || maskLayers.forEach(layer => {\n if (!layer.tileLayer) {\n // 非瓦片图层返回图层本身,瓦片图层返回对应的行列号图层\n layers.push(layer);\n return layer;\n }\n const tileLayer = layer.tileLayer;\n const tile = tileLayer.getTile(this.sourceTile.key);\n const l = tile === null || tile === void 0 ? void 0 : tile.getLayers()[0];\n if (l) {\n layers.push(l);\n }\n });\n return layers;\n }\n addTileMask() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const mask = new PolygonLayer({\n name: 'mask',\n visible: true,\n enablePicking: false\n }).source({\n type: 'FeatureCollection',\n features: [_this.sourceTile.bboxPolygon]\n }, {\n parser: {\n type: 'geojson',\n featureId: 'id'\n }\n }).shape('fill').color('#0f0').style({\n opacity: 0.5\n });\n const container = createLayerContainer(_this.parent.container);\n mask.setContainer(container);\n yield mask.init();\n _this.tileMask = mask;\n const mainLayer = _this.getMainLayer();\n if (mainLayer !== undefined) {\n mainLayer.tileMask = mask;\n }\n return mask;\n })();\n }\n // 全局 Mask\n addMask(layer, mask) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n const container = createLayerContainer(_this2.parent.container);\n mask.setContainer(container);\n yield mask.init();\n layer.addMask(mask);\n _this2.tileMaskLayers.push(mask);\n })();\n }\n addLayer(layer) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n // set flag\n layer.isTileLayer = true;\n const container = createLayerContainer(_this3.parent.container);\n layer.setContainer(container);\n _this3.layers.push(layer);\n yield layer.init();\n })();\n }\n updateVisible(value) {\n this.visible = value;\n this.updateOptions('visible', value);\n }\n updateOptions(key, value) {\n this.layers.forEach(l => {\n l.updateLayerConfig({\n [key]: value\n });\n });\n }\n\n /**\n * 一个 Tile 可能有多个 layer,但是在发生拾取、点击事件的时候只有一个生效\n */\n getMainLayer() {\n return this.layers[0];\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getFeatures(sourceLayer) {\n return [];\n }\n\n /**\n * 在一个 Tile 中可能存在一个相同 ID 的 feature\n * @param id\n * @returns\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getFeatureById(id) {\n return [];\n }\n destroy() {\n var _this$tileMask;\n (_this$tileMask = this.tileMask) === null || _this$tileMask === void 0 || _this$tileMask.destroy();\n this.layers.forEach(layer => layer.destroy());\n }\n}","import LineLayer from \"../../line\";\nimport PointLayer from \"../../point/index\";\nimport PolygonLayer from \"../../polygon\";\nexport function getTileLayer(type) {\n if (type === 'PolygonLayer') {\n return PolygonLayer;\n }\n if (type === 'LineLayer') {\n return LineLayer;\n }\n if (type === 'PointLayer') {\n return PointLayer;\n }\n return PointLayer;\n}\nexport function isNeedMask(type) {\n return ['PolygonLayer', 'LineLayer'].indexOf(type) !== -1;\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport LineLayer from \"../../line\";\nimport PointLayer from \"../../point\";\nimport Tile from \"./Tile\";\nexport default class DebugTile extends Tile {\n initTileLayer() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const sourceOptions = _this.getSourceOption();\n const pointData = sourceOptions.data.features[0].properties;\n const lineLayer = new LineLayer().source(sourceOptions.data, sourceOptions.options).size(1).shape('line').color('red');\n const pointLayer = new PointLayer({\n minZoom: _this.z - 1,\n maxZoom: _this.z + 1,\n textAllowOverlap: true\n }).source([pointData], {\n parser: {\n type: 'json',\n x: 'x',\n y: 'y'\n }\n }).size(20).color('red').shape(_this.key).style({\n stroke: '#fff',\n strokeWidth: 2\n });\n yield _this.addLayer(lineLayer);\n yield _this.addLayer(pointLayer);\n _this.isLoaded = true;\n })();\n }\n getSourceOption() {\n const rawSource = this.parent.getSource();\n const features = this.sourceTile.data.layers.testTile.features;\n return {\n data: {\n type: 'FeatureCollection',\n features\n },\n options: {\n parser: {\n type: 'geojson'\n },\n transforms: rawSource.transforms\n }\n };\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport ImageLayer from \"../../image\";\nimport Tile from \"./Tile\";\nexport default class ImageTile extends Tile {\n initTileLayer() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const attributes = _this.parent.getLayerAttributeConfig();\n const layerOptions = _this.getLayerOptions();\n const sourceOptions = _this.getSourceOption();\n const layer = new ImageLayer(_objectSpread({}, layerOptions)).source(sourceOptions.data, sourceOptions.options);\n\n // 初始化数据映射\n // tslint:disable-next-line: no-unused-expression\n attributes && Object.keys(attributes).forEach(type => {\n var _attributes$attr, _attributes$attr2;\n const attr = type;\n // @ts-ignore\n layer[attr]((_attributes$attr = attributes[attr]) === null || _attributes$attr === void 0 ? void 0 : _attributes$attr.field, (_attributes$attr2 = attributes[attr]) === null || _attributes$attr2 === void 0 ? void 0 : _attributes$attr2.values);\n });\n yield _this.addLayer(layer);\n _this.isLoaded = true;\n })();\n }\n getSourceOption() {\n const rawSource = this.parent.getSource();\n return {\n data: this.sourceTile.data,\n options: {\n parser: {\n type: 'image',\n extent: this.sourceTile.bounds\n },\n transforms: rawSource.transforms\n }\n };\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport MaskLayer from \"../../mask\";\nimport Tile from \"./Tile\";\nexport default class MaskTile extends Tile {\n initTileLayer() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const attributes = _this.parent.getLayerAttributeConfig();\n const layerOptions = _this.getLayerOptions();\n const sourceOptions = _this.getSourceOption();\n const layer = new MaskLayer(_objectSpread({}, layerOptions)).source(sourceOptions.data, sourceOptions.options);\n\n // 初始化数据映射\n // tslint:disable-next-line: no-unused-expression\n attributes && Object.keys(attributes).forEach(type => {\n var _attributes$attr, _attributes$attr2;\n const attr = type;\n // @ts-ignore\n layer[attr]((_attributes$attr = attributes[attr]) === null || _attributes$attr === void 0 ? void 0 : _attributes$attr.field, (_attributes$attr2 = attributes[attr]) === null || _attributes$attr2 === void 0 ? void 0 : _attributes$attr2.values);\n });\n yield _this.addLayer(layer);\n _this.isLoaded = true;\n })();\n }\n getFeatures(sourceLayer) {\n if (!sourceLayer) {\n return [];\n }\n const source = this.sourceTile.data;\n return source.getTileData(sourceLayer);\n }\n getSourceOption() {\n const rawSource = this.parent.getSource();\n const {\n sourceLayer,\n featureId\n } = this.parent.getLayerConfig();\n const features = this.getFeatures(sourceLayer);\n return {\n data: {\n type: 'FeatureCollection',\n features\n },\n options: {\n parser: {\n type: 'geojson',\n featureId\n },\n transforms: rawSource.transforms\n }\n };\n }\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nconst _excluded = [\"rasterData\"];\nimport RasterLayer from \"../../raster\";\nimport Tile from \"./Tile\";\nexport default class RasterTile extends Tile {\n initTileLayer() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const attributes = _this.parent.getLayerAttributeConfig();\n const layerOptions = _this.getLayerOptions();\n const sourceOptions = _this.getSourceOption();\n const layer = new RasterLayer(_objectSpread({}, layerOptions)).source(sourceOptions.data, sourceOptions.options);\n\n // 初始化数据映射\n // tslint:disable-next-line: no-unused-expression\n attributes && Object.keys(attributes).forEach(type => {\n var _attributes$attr, _attributes$attr2;\n const attr = type;\n // @ts-ignore\n layer[attr]((_attributes$attr = attributes[attr]) === null || _attributes$attr === void 0 ? void 0 : _attributes$attr.field, (_attributes$attr2 = attributes[attr]) === null || _attributes$attr2 === void 0 ? void 0 : _attributes$attr2.values);\n });\n yield _this.addLayer(layer);\n _this.isLoaded = true;\n })();\n }\n getSourceOption() {\n const rawSource = this.parent.getSource();\n const _this$sourceTile$data = this.sourceTile.data.data,\n {\n rasterData\n } = _this$sourceTile$data,\n res = _objectWithoutProperties(_this$sourceTile$data, _excluded);\n return {\n data: rasterData,\n // 栅格数\n options: {\n parser: _objectSpread({\n type: 'rasterRgb',\n extent: this.sourceTile.bounds\n }, res),\n transforms: rawSource.transforms\n }\n };\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport RasterLayer from \"../../raster\";\nimport Tile from \"./Tile\";\nexport default class RasterTerrainRGBTile extends Tile {\n initTileLayer() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const attributes = _this.parent.getLayerAttributeConfig();\n const layerOptions = _this.getLayerOptions();\n const sourceOptions = _this.getSourceOption();\n const layer = new RasterLayer(_objectSpread({}, layerOptions)).source(sourceOptions.data, sourceOptions.options);\n\n // 初始化数据映射\n // tslint:disable-next-line: no-unused-expression\n attributes && Object.keys(attributes).forEach(type => {\n var _attributes$attr, _attributes$attr2;\n const attr = type;\n // @ts-ignore\n layer[attr]((_attributes$attr = attributes[attr]) === null || _attributes$attr === void 0 ? void 0 : _attributes$attr.field, (_attributes$attr2 = attributes[attr]) === null || _attributes$attr2 === void 0 ? void 0 : _attributes$attr2.values);\n });\n yield _this.addLayer(layer);\n _this.isLoaded = true;\n })();\n }\n getSourceOption() {\n const rawSource = this.parent.getSource();\n return {\n data: this.sourceTile.data,\n options: {\n parser: {\n type: 'image',\n extent: this.sourceTile.bounds\n },\n transforms: rawSource.transforms\n }\n };\n }\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nconst _excluded = [\"rasterData\"];\nimport { getDefaultDomain } from '@antv/l7-utils';\nimport RasterLayer from \"../../raster\";\nimport Tile from \"./Tile\";\nconst DEFAULT_COLOR_TEXTURE_OPTION = {\n positions: [0, 1],\n colors: ['#000', '#fff']\n};\nexport default class RasterTile extends Tile {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"colorTexture\", void 0);\n }\n initTileLayer() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const attributes = _this.parent.getLayerAttributeConfig();\n const layerOptions = _this.getLayerOptions();\n const sourceOptions = _this.getSourceOption();\n const {\n rampColors,\n domain\n } = _this.getLayerOptions();\n _this.colorTexture = _this.parent.textureService.getColorTexture(rampColors, domain);\n const layer = new RasterLayer(_objectSpread(_objectSpread({}, layerOptions), {}, {\n colorTexture: _this.colorTexture\n })).source(sourceOptions.data, sourceOptions.options);\n\n // 初始化数据映射\n // tslint:disable-next-line: no-unused-expression\n attributes && Object.keys(attributes).forEach(type => {\n var _attributes$attr, _attributes$attr2;\n const attr = type;\n // @ts-ignore\n layer[attr]((_attributes$attr = attributes[attr]) === null || _attributes$attr === void 0 ? void 0 : _attributes$attr.field, (_attributes$attr2 = attributes[attr]) === null || _attributes$attr2 === void 0 ? void 0 : _attributes$attr2.values);\n });\n yield _this.addLayer(layer);\n _this.isLoaded = true;\n })();\n }\n getSourceOption() {\n const rawSource = this.parent.getSource();\n const _this$sourceTile$data = this.sourceTile.data.data,\n {\n rasterData\n } = _this$sourceTile$data,\n res = _objectWithoutProperties(_this$sourceTile$data, _excluded);\n return {\n data: rasterData,\n options: {\n parser: _objectSpread({\n type: 'raster',\n extent: this.sourceTile.bounds\n }, res),\n transforms: rawSource.transforms\n }\n };\n }\n\n /**\n * 用于 style 更新 colorTexture 的优化\n * @param arg\n */\n styleUpdate(...arg) {\n const {\n rampColors = DEFAULT_COLOR_TEXTURE_OPTION,\n domain\n } = arg;\n this.colorTexture = this.parent.textureService.getColorTexture(rampColors, domain || getDefaultDomain(rampColors));\n this.layers.forEach(layer => layer.style({\n colorTexture: this.colorTexture\n }));\n }\n destroy() {\n this.layers.forEach(layer => layer.destroy());\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport Tile from \"./Tile\";\nimport { getTileLayer } from \"./util\";\nexport default class VectorTile extends Tile {\n initTileLayer() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const attributes = _this.parent.getLayerAttributeConfig();\n const layerOptions = _this.getLayerOptions();\n const vectorLayer = getTileLayer(_this.parent.type);\n const sourceOptions = _this.getSourceOption();\n if (!sourceOptions) {\n _this.isLoaded = true;\n _this.emit('loaded');\n return;\n }\n const layer = new vectorLayer(_objectSpread({}, layerOptions)).source(sourceOptions.data, sourceOptions.options);\n\n // 初始化数据映射\n Object.keys(attributes).forEach(type => {\n var _attributes$attr, _attributes$attr2;\n const attr = type;\n // @ts-ignore\n layer[attr]((_attributes$attr = attributes[attr]) === null || _attributes$attr === void 0 ? void 0 : _attributes$attr.field, (_attributes$attr2 = attributes[attr]) === null || _attributes$attr2 === void 0 ? void 0 : _attributes$attr2.values);\n });\n yield _this.addLayer(layer);\n if (layerOptions.tileMask) {\n // 瓦片数据裁剪\n yield _this.addTileMask();\n }\n _this.setLayerMinMaxZoom(layer);\n _this.isLoaded = true;\n _this.emit('loaded');\n })();\n }\n getSourceOption() {\n const rawSource = this.parent.getSource();\n const {\n sourceLayer = 'defaultLayer',\n featureId = 'id'\n } = this.parent.getLayerConfig();\n const features = this.getFeatures(sourceLayer);\n return {\n data: {\n type: 'FeatureCollection',\n features\n },\n options: {\n parser: {\n type: 'geojson',\n featureId\n },\n transforms: rawSource.transforms\n }\n };\n }\n setLayerMinMaxZoom(layer) {\n // 文本图层设置,可见范围\n if (layer.getModelType() === 'text') {\n layer.updateLayerConfig({\n maxZoom: this.z + 1,\n minZoom: this.z - 1\n });\n }\n }\n // 获取瓦片数据\n\n getFeatures(sourceLayer) {\n const source = this.sourceTile.data;\n return source.getTileData(sourceLayer);\n }\n\n /**\n * 在一个 Tile 中可能存在一个相同 ID 的 feature\n * @param id\n * @returns\n */\n getFeatureById(id) {\n const layer = this.getMainLayer();\n if (!layer) {\n return [];\n }\n const res = layer.getSource().data.dataArray.filter(d => d._id === id);\n return res;\n }\n}","import { RasterTileType } from '@antv/l7-core';\nimport DebugTile from \"./DebugTile\";\nimport ImageTile from \"./ImageTile\";\nimport MaskLayer from \"./MaskTile\";\nimport RasterRGBTile from \"./RasterRGBTile\";\nimport RasterTerrainRGBTile from \"./RasterTerrainRGBTile\";\nimport RasterTile from \"./RasterTile\";\nimport VectorTile from \"./VectorTile\";\nexport function getTileFactory(layer) {\n const tileType = layer.type;\n switch (tileType) {\n case 'PolygonLayer':\n return VectorTile;\n case 'LineLayer':\n return VectorTile;\n case 'PointLayer':\n return VectorTile;\n case 'TileDebugLayer':\n return DebugTile;\n case 'MaskLayer':\n return MaskLayer;\n case 'RasterLayer':\n const {\n dataType\n } = layer.getSource().parser;\n switch (dataType) {\n case RasterTileType.RGB:\n case RasterTileType.CUSTOMRGB:\n return RasterRGBTile;\n case RasterTileType.ARRAYBUFFER:\n case RasterTileType.CUSTOMARRAYBUFFER:\n return RasterTile;\n case RasterTileType.TERRAINRGB:\n case RasterTileType.CUSTOMTERRAINRGB:\n return RasterTerrainRGBTile;\n default:\n return ImageTile;\n }\n default:\n return VectorTile;\n }\n}\nexport * from \"../interface\";\nexport * from \"./Tile\";","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","/* MIT license */\nvar colorNames = require('color-name');\nvar swizzle = require('simple-swizzle');\nvar hasOwnProperty = Object.hasOwnProperty;\n\nvar reverseNames = Object.create(null);\n\n// create a list of reverse color names\nfor (var name in colorNames) {\n\tif (hasOwnProperty.call(colorNames, name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nvar cs = module.exports = {\n\tto: {},\n\tget: {}\n};\n\ncs.get = function (string) {\n\tvar prefix = string.substring(0, 3).toLowerCase();\n\tvar val;\n\tvar model;\n\tswitch (prefix) {\n\t\tcase 'hsl':\n\t\t\tval = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\tcase 'hwb':\n\t\t\tval = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tval = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t}\n\n\tif (!val) {\n\t\treturn null;\n\t}\n\n\treturn {model: model, value: val};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar abbr = /^#([a-f0-9]{3,4})$/i;\n\tvar hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;\n\tvar rgba = /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar keyword = /^(\\w+)$/;\n\n\tvar rgb = [0, 0, 0, 1];\n\tvar match;\n\tvar i;\n\tvar hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tvar i2 = i * 2;\n\t\t\trgb[i] = parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i + 1], 0);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\tif (!hasOwnProperty.call(colorNames, match[1])) {\n\t\t\treturn null;\n\t\t}\n\n\t\trgb = colorNames[match[1]];\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*(?:[,|\\/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hsl);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar s = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar l = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hwb);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar w = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar b = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function () {\n\tvar rgba = swizzle(arguments);\n\n\tvar r = Math.round(rgba[0] / 255 * 100);\n\tvar g = Math.round(rgba[1] / 255 * 100);\n\tvar b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function () {\n\tvar hsla = swizzle(arguments);\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function () {\n\tvar hwba = swizzle(arguments);\n\n\tvar a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// helpers\nfunction clamp(num, min, max) {\n\treturn Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n\tvar str = Math.round(num).toString(16).toUpperCase();\n\treturn (str.length < 2) ? '0' + str : str;\n}\n","export let InteractionEvent = /*#__PURE__*/function (InteractionEvent) {\n InteractionEvent[\"Hover\"] = \"hover\";\n InteractionEvent[\"Click\"] = \"click\";\n InteractionEvent[\"Select\"] = \"select\";\n InteractionEvent[\"Active\"] = \"active\";\n InteractionEvent[\"Drag\"] = \"drag\";\n return InteractionEvent;\n}({});","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) { throw t[1]; } return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) { throw new TypeError(\"Generator is already executing.\"); }\r\n while (_) { try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) { return t; }\r\n if (y = 0, t) { op = [op[0] & 2, t.value]; }\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) { _.ops.pop(); }\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } }\r\n if (op[0] & 5) { throw op[1]; } return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) { return o; }\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) { ar.push(r.value); }\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) { m.call(i); }\r\n }\r\n finally { if (e) { throw e.error; } }\r\n }\r\n return ar;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) { for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) { ar = Array.prototype.slice.call(from, 0, i); }\r\n ar[i] = from[i];\r\n }\r\n } }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nvar series$1 = {exports: {}};\n\nvar parallel$2 = {exports: {}};\n\nvar isArrayLike = {exports: {}};\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isArrayLike;\nfunction isArrayLike(value) {\n return value && typeof value.length === 'number' && value.length >= 0 && value.length % 1 === 0;\n}\nmodule.exports = exports['default'];\n}(isArrayLike, isArrayLike.exports));\n\nvar wrapAsync$1 = {};\n\nvar asyncify = {exports: {}};\n\nvar initialParams = {exports: {}};\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (fn) {\n return function (/*, callback*/) {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var callback = args.pop();\n return fn.call(this, args, callback);\n };\n};\n\nmodule.exports = exports[\"default\"];\n}(initialParams, initialParams.exports));\n\nvar setImmediate$1 = {};\n\nObject.defineProperty(setImmediate$1, \"__esModule\", {\n value: true\n});\nsetImmediate$1.fallback = fallback;\nsetImmediate$1.wrap = wrap;\n/* istanbul ignore file */\n\nvar hasQueueMicrotask = setImmediate$1.hasQueueMicrotask = typeof queueMicrotask === 'function' && queueMicrotask;\nvar hasSetImmediate = setImmediate$1.hasSetImmediate = typeof setImmediate === 'function' && setImmediate;\nvar hasNextTick = setImmediate$1.hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';\n\nfunction fallback(fn) {\n setTimeout(fn, 0);\n}\n\nfunction wrap(defer) {\n return function (fn) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n return defer(function () { return fn.apply(void 0, args); });\n };\n}\n\nvar _defer;\n\nif (hasQueueMicrotask) {\n _defer = queueMicrotask;\n} else if (hasSetImmediate) {\n _defer = setImmediate;\n} else if (hasNextTick) {\n _defer = process.nextTick;\n} else {\n _defer = fallback;\n}\n\nsetImmediate$1.default = wrap(_defer);\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = asyncify;\n\nvar _initialParams = initialParams.exports;\n\nvar _initialParams2 = _interopRequireDefault(_initialParams);\n\nvar _setImmediate = setImmediate$1;\n\nvar _setImmediate2 = _interopRequireDefault(_setImmediate);\n\nvar _wrapAsync = wrapAsync$1;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Take a sync function and make it async, passing its return value to a\n * callback. This is useful for plugging sync functions into a waterfall,\n * series, or other async functions. Any arguments passed to the generated\n * function will be passed to the wrapped function (except for the final\n * callback argument). Errors thrown will be passed to the callback.\n *\n * If the function passed to `asyncify` returns a Promise, that promises's\n * resolved/rejected state will be used to call the callback, rather than simply\n * the synchronous return value.\n *\n * This also means you can asyncify ES2017 `async` functions.\n *\n * @name asyncify\n * @static\n * @memberOf module:Utils\n * @method\n * @alias wrapSync\n * @category Util\n * @param {Function} func - The synchronous function, or Promise-returning\n * function to convert to an {@link AsyncFunction}.\n * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be\n * invoked with `(args..., callback)`.\n * @example\n *\n * // passing a regular synchronous function\n * async.waterfall([\n * async.apply(fs.readFile, filename, \"utf8\"),\n * async.asyncify(JSON.parse),\n * function (data, next) {\n * // data is the result of parsing the text.\n * // If there was a parsing error, it would have been caught.\n * }\n * ], callback);\n *\n * // passing a function returning a promise\n * async.waterfall([\n * async.apply(fs.readFile, filename, \"utf8\"),\n * async.asyncify(function (contents) {\n * return db.model.create(contents);\n * }),\n * function (model, next) {\n * // `model` is the instantiated model object.\n * // If there was an error, this function would be skipped.\n * }\n * ], callback);\n *\n * // es2017 example, though `asyncify` is not needed if your JS environment\n * // supports async functions out of the box\n * var q = async.queue(async.asyncify(async function(file) {\n * var intermediateStep = await processFile(file);\n * return await somePromise(intermediateStep)\n * }));\n *\n * q.push(files);\n */\nfunction asyncify(func) {\n if ((0, _wrapAsync.isAsync)(func)) {\n return function (/*, callback*/) {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var callback = args.pop();\n var promise = func.apply(this, args);\n return handlePromise(promise, callback);\n };\n }\n\n return (0, _initialParams2.default)(function (args, callback) {\n var result;\n try {\n result = func.apply(this, args);\n } catch (e) {\n return callback(e);\n }\n // if result is Promise object\n if (result && typeof result.then === 'function') {\n return handlePromise(result, callback);\n } else {\n callback(null, result);\n }\n });\n}\n\nfunction handlePromise(promise, callback) {\n return promise.then(function (value) {\n invokeCallback(callback, null, value);\n }, function (err) {\n invokeCallback(callback, err && err.message ? err : new Error(err));\n });\n}\n\nfunction invokeCallback(callback, error, value) {\n try {\n callback(error, value);\n } catch (err) {\n (0, _setImmediate2.default)(function (e) {\n throw e;\n }, err);\n }\n}\nmodule.exports = exports['default'];\n}(asyncify, asyncify.exports));\n\nObject.defineProperty(wrapAsync$1, \"__esModule\", {\n value: true\n});\nwrapAsync$1.isAsyncIterable = wrapAsync$1.isAsyncGenerator = wrapAsync$1.isAsync = undefined;\n\nvar _asyncify = asyncify.exports;\n\nvar _asyncify2 = _interopRequireDefault(_asyncify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isAsync(fn) {\n return fn[Symbol.toStringTag] === 'AsyncFunction';\n}\n\nfunction isAsyncGenerator(fn) {\n return fn[Symbol.toStringTag] === 'AsyncGenerator';\n}\n\nfunction isAsyncIterable(obj) {\n return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\nfunction wrapAsync(asyncFn) {\n if (typeof asyncFn !== 'function') { throw new Error('expected a function'); }\n return isAsync(asyncFn) ? (0, _asyncify2.default)(asyncFn) : asyncFn;\n}\n\nwrapAsync$1.default = wrapAsync;\nwrapAsync$1.isAsync = isAsync;\nwrapAsync$1.isAsyncGenerator = isAsyncGenerator;\nwrapAsync$1.isAsyncIterable = isAsyncIterable;\n\nvar awaitify = {exports: {}};\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = awaitify;\n// conditionally promisify a function.\n// only return a promise if a callback is omitted\nfunction awaitify(asyncFn, arity) {\n if ( arity === void 0 ) arity = asyncFn.length;\n\n if (!arity) { throw new Error('arity is undefined'); }\n function awaitable() {\n var this$1$1 = this;\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (typeof args[arity - 1] === 'function') {\n return asyncFn.apply(this, args);\n }\n\n return new Promise(function (resolve, reject) {\n args[arity - 1] = function (err) {\n var cbArgs = [], len = arguments.length - 1;\n while ( len-- > 0 ) cbArgs[ len ] = arguments[ len + 1 ];\n\n if (err) { return reject(err); }\n resolve(cbArgs.length > 1 ? cbArgs : cbArgs[0]);\n };\n asyncFn.apply(this$1$1, args);\n });\n }\n\n return awaitable;\n}\nmodule.exports = exports['default'];\n}(awaitify, awaitify.exports));\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _isArrayLike = isArrayLike.exports;\n\nvar _isArrayLike2 = _interopRequireDefault(_isArrayLike);\n\nvar _wrapAsync = wrapAsync$1;\n\nvar _wrapAsync2 = _interopRequireDefault(_wrapAsync);\n\nvar _awaitify = awaitify.exports;\n\nvar _awaitify2 = _interopRequireDefault(_awaitify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = (0, _awaitify2.default)(function (eachfn, tasks, callback) {\n var results = (0, _isArrayLike2.default)(tasks) ? [] : {};\n\n eachfn(tasks, function (task, key, taskCb) {\n (0, _wrapAsync2.default)(task)(function (err) {\n var assign;\n\n var result = [], len = arguments.length - 1;\n while ( len-- > 0 ) result[ len ] = arguments[ len + 1 ];\n if (result.length < 2) {\n (assign = result, result = assign[0]);\n }\n results[key] = result;\n taskCb(err);\n });\n }, function (err) { return callback(err, results); });\n}, 3);\nmodule.exports = exports['default'];\n}(parallel$2, parallel$2.exports));\n\nvar eachOfSeries = {exports: {}};\n\nvar eachOfLimit$1 = {exports: {}};\n\nvar eachOfLimit = {exports: {}};\n\nvar once = {exports: {}};\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = once;\nfunction once(fn) {\n function wrapper() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (fn === null) { return; }\n var callFn = fn;\n fn = null;\n callFn.apply(this, args);\n }\n Object.assign(wrapper, fn);\n return wrapper;\n}\nmodule.exports = exports[\"default\"];\n}(once, once.exports));\n\nvar iterator = {exports: {}};\n\nvar getIterator = {exports: {}};\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (coll) {\n return coll[Symbol.iterator] && coll[Symbol.iterator]();\n};\n\nmodule.exports = exports[\"default\"];\n}(getIterator, getIterator.exports));\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createIterator;\n\nvar _isArrayLike = isArrayLike.exports;\n\nvar _isArrayLike2 = _interopRequireDefault(_isArrayLike);\n\nvar _getIterator = getIterator.exports;\n\nvar _getIterator2 = _interopRequireDefault(_getIterator);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createArrayIterator(coll) {\n var i = -1;\n var len = coll.length;\n return function next() {\n return ++i < len ? { value: coll[i], key: i } : null;\n };\n}\n\nfunction createES2015Iterator(iterator) {\n var i = -1;\n return function next() {\n var item = iterator.next();\n if (item.done) { return null; }\n i++;\n return { value: item.value, key: i };\n };\n}\n\nfunction createObjectIterator(obj) {\n var okeys = obj ? Object.keys(obj) : [];\n var i = -1;\n var len = okeys.length;\n return function next() {\n var key = okeys[++i];\n if (key === '__proto__') {\n return next();\n }\n return i < len ? { value: obj[key], key: key } : null;\n };\n}\n\nfunction createIterator(coll) {\n if ((0, _isArrayLike2.default)(coll)) {\n return createArrayIterator(coll);\n }\n\n var iterator = (0, _getIterator2.default)(coll);\n return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll);\n}\nmodule.exports = exports['default'];\n}(iterator, iterator.exports));\n\nvar onlyOnce = {exports: {}};\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = onlyOnce;\nfunction onlyOnce(fn) {\n return function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (fn === null) { throw new Error(\"Callback was already called.\"); }\n var callFn = fn;\n fn = null;\n callFn.apply(this, args);\n };\n}\nmodule.exports = exports[\"default\"];\n}(onlyOnce, onlyOnce.exports));\n\nvar asyncEachOfLimit = {exports: {}};\n\nvar breakLoop = {exports: {}};\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// A temporary value used to identify if the loop should be broken.\n// See #1064, #1293\nvar breakLoop = {};\nexports.default = breakLoop;\nmodule.exports = exports[\"default\"];\n}(breakLoop, breakLoop.exports));\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = asyncEachOfLimit;\n\nvar _breakLoop = breakLoop.exports;\n\nvar _breakLoop2 = _interopRequireDefault(_breakLoop);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// for async generators\nfunction asyncEachOfLimit(generator, limit, iteratee, callback) {\n var done = false;\n var canceled = false;\n var awaiting = false;\n var running = 0;\n var idx = 0;\n\n function replenish() {\n //console.log('replenish')\n if (running >= limit || awaiting || done) { return; }\n //console.log('replenish awaiting')\n awaiting = true;\n generator.next().then(function (ref) {\n var value = ref.value;\n var iterDone = ref.done;\n\n //console.log('got value', value)\n if (canceled || done) { return; }\n awaiting = false;\n if (iterDone) {\n done = true;\n if (running <= 0) {\n //console.log('done nextCb')\n callback(null);\n }\n return;\n }\n running++;\n iteratee(value, idx, iterateeCallback);\n idx++;\n replenish();\n }).catch(handleError);\n }\n\n function iterateeCallback(err, result) {\n //console.log('iterateeCallback')\n running -= 1;\n if (canceled) { return; }\n if (err) { return handleError(err); }\n\n if (err === false) {\n done = true;\n canceled = true;\n return;\n }\n\n if (result === _breakLoop2.default || done && running <= 0) {\n done = true;\n //console.log('done iterCb')\n return callback(null);\n }\n replenish();\n }\n\n function handleError(err) {\n if (canceled) { return; }\n awaiting = false;\n done = true;\n callback(err);\n }\n\n replenish();\n}\nmodule.exports = exports['default'];\n}(asyncEachOfLimit, asyncEachOfLimit.exports));\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _once = once.exports;\n\nvar _once2 = _interopRequireDefault(_once);\n\nvar _iterator = iterator.exports;\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _onlyOnce = onlyOnce.exports;\n\nvar _onlyOnce2 = _interopRequireDefault(_onlyOnce);\n\nvar _wrapAsync = wrapAsync$1;\n\nvar _asyncEachOfLimit = asyncEachOfLimit.exports;\n\nvar _asyncEachOfLimit2 = _interopRequireDefault(_asyncEachOfLimit);\n\nvar _breakLoop = breakLoop.exports;\n\nvar _breakLoop2 = _interopRequireDefault(_breakLoop);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (limit) {\n return function (obj, iteratee, callback) {\n callback = (0, _once2.default)(callback);\n if (limit <= 0) {\n throw new RangeError('concurrency limit cannot be less than 1');\n }\n if (!obj) {\n return callback(null);\n }\n if ((0, _wrapAsync.isAsyncGenerator)(obj)) {\n return (0, _asyncEachOfLimit2.default)(obj, limit, iteratee, callback);\n }\n if ((0, _wrapAsync.isAsyncIterable)(obj)) {\n return (0, _asyncEachOfLimit2.default)(obj[Symbol.asyncIterator](), limit, iteratee, callback);\n }\n var nextElem = (0, _iterator2.default)(obj);\n var done = false;\n var canceled = false;\n var running = 0;\n var looping = false;\n\n function iterateeCallback(err, value) {\n if (canceled) { return; }\n running -= 1;\n if (err) {\n done = true;\n callback(err);\n } else if (err === false) {\n done = true;\n canceled = true;\n } else if (value === _breakLoop2.default || done && running <= 0) {\n done = true;\n return callback(null);\n } else if (!looping) {\n replenish();\n }\n }\n\n function replenish() {\n looping = true;\n while (running < limit && !done) {\n var elem = nextElem();\n if (elem === null) {\n done = true;\n if (running <= 0) {\n callback(null);\n }\n return;\n }\n running += 1;\n iteratee(elem.value, elem.key, (0, _onlyOnce2.default)(iterateeCallback));\n }\n looping = false;\n }\n\n replenish();\n };\n};\n\nmodule.exports = exports['default'];\n}(eachOfLimit, eachOfLimit.exports));\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _eachOfLimit2 = eachOfLimit.exports;\n\nvar _eachOfLimit3 = _interopRequireDefault(_eachOfLimit2);\n\nvar _wrapAsync = wrapAsync$1;\n\nvar _wrapAsync2 = _interopRequireDefault(_wrapAsync);\n\nvar _awaitify = awaitify.exports;\n\nvar _awaitify2 = _interopRequireDefault(_awaitify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name eachOfLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.eachOf]{@link module:Collections.eachOf}\n * @alias forEachOfLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each\n * item in `coll`. The `key` is the item's key, or index in the case of an\n * array.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachOfLimit$1(coll, limit, iteratee, callback) {\n return (0, _eachOfLimit3.default)(limit)(coll, (0, _wrapAsync2.default)(iteratee), callback);\n}\n\nexports.default = (0, _awaitify2.default)(eachOfLimit$1, 4);\nmodule.exports = exports['default'];\n}(eachOfLimit$1, eachOfLimit$1.exports));\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _eachOfLimit = eachOfLimit$1.exports;\n\nvar _eachOfLimit2 = _interopRequireDefault(_eachOfLimit);\n\nvar _awaitify = awaitify.exports;\n\nvar _awaitify2 = _interopRequireDefault(_awaitify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time.\n *\n * @name eachOfSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.eachOf]{@link module:Collections.eachOf}\n * @alias forEachOfSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */\nfunction eachOfSeries(coll, iteratee, callback) {\n return (0, _eachOfLimit2.default)(coll, 1, iteratee, callback);\n}\nexports.default = (0, _awaitify2.default)(eachOfSeries, 3);\nmodule.exports = exports['default'];\n}(eachOfSeries, eachOfSeries.exports));\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = series;\n\nvar _parallel2 = parallel$2.exports;\n\nvar _parallel3 = _interopRequireDefault(_parallel2);\n\nvar _eachOfSeries = eachOfSeries.exports;\n\nvar _eachOfSeries2 = _interopRequireDefault(_eachOfSeries);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Run the functions in the `tasks` collection in series, each one running once\n * the previous function has completed. If any functions in the series pass an\n * error to its callback, no more functions are run, and `callback` is\n * immediately called with the value of the error. Otherwise, `callback`\n * receives an array of results when `tasks` have completed.\n *\n * It is also possible to use an object instead of an array. Each property will\n * be run as a function, and the results will be passed to the final `callback`\n * as an object instead of an array. This can be a more readable way of handling\n * results from {@link async.series}.\n *\n * **Note** that while many implementations preserve the order of object\n * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6)\n * explicitly states that\n *\n * > The mechanics and order of enumerating the properties is not specified.\n *\n * So if you rely on the order in which your series of functions are executed,\n * and want this to work on all platforms, consider using an array.\n *\n * @name series\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing\n * [async functions]{@link AsyncFunction} to run in series.\n * Each function can complete with any number of optional `result` values.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This function gets a results array (or object)\n * containing all the result arguments passed to the `task` callbacks. Invoked\n * with (err, result).\n * @return {Promise} a promise, if no callback is passed\n * @example\n *\n * //Using Callbacks\n * async.series([\n * function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 'two');\n * }, 100);\n * }\n * ], function(err, results) {\n * console.log(results);\n * // results is equal to ['one','two']\n * });\n *\n * // an example using objects instead of arrays\n * async.series({\n * one: function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 2);\n * }, 100);\n * }\n * }, function(err, results) {\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * });\n *\n * //Using Promises\n * async.series([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ]).then(results => {\n * console.log(results);\n * // results is equal to ['one','two']\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // an example using an object instead of an array\n * async.series({\n * one: function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 2);\n * }, 100);\n * }\n * }).then(results => {\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * //Using async/await\n * async () => {\n * try {\n * let results = await async.series([\n * function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 'two');\n * }, 100);\n * }\n * ]);\n * console.log(results);\n * // results is equal to ['one','two']\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // an example using an object instead of an array\n * async () => {\n * try {\n * let results = await async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * // do some async task\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * // then do another async task\n * callback(null, 2);\n * }, 100);\n * }\n * });\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction series(tasks, callback) {\n return (0, _parallel3.default)(_eachOfSeries2.default, tasks, callback);\n}\nmodule.exports = exports['default'];\n}(series$1, series$1.exports));\n\nvar series = /*@__PURE__*/getDefaultExportFromCjs(series$1.exports);\n\nvar SyncHook = (function () {\n function SyncHook() {\n this.args = [];\n this.tasks = [];\n }\n SyncHook.prototype.call = function () {\n var arguments$1 = arguments;\n\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments$1[_i];\n }\n this.args = args;\n return series(this.tasks);\n };\n SyncHook.prototype.tap = function (name, cb) {\n var _this = this;\n this.tasks.push(function (callback) {\n cb.apply(void 0, __spreadArray([], __read(_this.args), false));\n callback(null, name);\n });\n };\n return SyncHook;\n}());\n\nvar parallel$1 = {exports: {}};\n\nvar eachOf = {exports: {}};\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _isArrayLike = isArrayLike.exports;\n\nvar _isArrayLike2 = _interopRequireDefault(_isArrayLike);\n\nvar _breakLoop = breakLoop.exports;\n\nvar _breakLoop2 = _interopRequireDefault(_breakLoop);\n\nvar _eachOfLimit = eachOfLimit$1.exports;\n\nvar _eachOfLimit2 = _interopRequireDefault(_eachOfLimit);\n\nvar _once = once.exports;\n\nvar _once2 = _interopRequireDefault(_once);\n\nvar _onlyOnce = onlyOnce.exports;\n\nvar _onlyOnce2 = _interopRequireDefault(_onlyOnce);\n\nvar _wrapAsync = wrapAsync$1;\n\nvar _wrapAsync2 = _interopRequireDefault(_wrapAsync);\n\nvar _awaitify = awaitify.exports;\n\nvar _awaitify2 = _interopRequireDefault(_awaitify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// eachOf implementation optimized for array-likes\nfunction eachOfArrayLike(coll, iteratee, callback) {\n callback = (0, _once2.default)(callback);\n var index = 0,\n completed = 0;\n var length = coll.length;\n var canceled = false;\n if (length === 0) {\n callback(null);\n }\n\n function iteratorCallback(err, value) {\n if (err === false) {\n canceled = true;\n }\n if (canceled === true) { return; }\n if (err) {\n callback(err);\n } else if (++completed === length || value === _breakLoop2.default) {\n callback(null);\n }\n }\n\n for (; index < length; index++) {\n iteratee(coll[index], index, (0, _onlyOnce2.default)(iteratorCallback));\n }\n}\n\n// a generic version of eachOf which can handle array, object, and iterator cases.\nfunction eachOfGeneric(coll, iteratee, callback) {\n return (0, _eachOfLimit2.default)(coll, Infinity, iteratee, callback);\n}\n\n/**\n * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument\n * to the iteratee.\n *\n * @name eachOf\n * @static\n * @memberOf module:Collections\n * @method\n * @alias forEachOf\n * @category Collection\n * @see [async.each]{@link module:Collections.each}\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each\n * item in `coll`.\n * The `key` is the item's key, or index in the case of an array.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dev.json is a file containing a valid json object config for dev environment\n * // dev.json is a file containing a valid json object config for test environment\n * // prod.json is a file containing a valid json object config for prod environment\n * // invalid.json is a file with a malformed json object\n *\n * let configs = {}; //global variable\n * let validConfigFileMap = {dev: 'dev.json', test: 'test.json', prod: 'prod.json'};\n * let invalidConfigFileMap = {dev: 'dev.json', test: 'test.json', invalid: 'invalid.json'};\n *\n * // asynchronous function that reads a json file and parses the contents as json object\n * function parseFile(file, key, callback) {\n * fs.readFile(file, \"utf8\", function(err, data) {\n * if (err) return calback(err);\n * try {\n * configs[key] = JSON.parse(data);\n * } catch (e) {\n * return callback(e);\n * }\n * callback();\n * });\n * }\n *\n * // Using callbacks\n * async.forEachOf(validConfigFileMap, parseFile, function (err) {\n * if (err) {\n * console.error(err);\n * } else {\n * console.log(configs);\n * // configs is now a map of JSON data, e.g.\n * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }\n * });\n *\n * //Error handing\n * async.forEachOf(invalidConfigFileMap, parseFile, function (err) {\n * if (err) {\n * console.error(err);\n * // JSON parse error exception\n * } else {\n * console.log(configs);\n * }\n * });\n *\n * // Using Promises\n * async.forEachOf(validConfigFileMap, parseFile)\n * .then( () => {\n * console.log(configs);\n * // configs is now a map of JSON data, e.g.\n * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }).catch( err => {\n * console.error(err);\n * });\n *\n * //Error handing\n * async.forEachOf(invalidConfigFileMap, parseFile)\n * .then( () => {\n * console.log(configs);\n * }).catch( err => {\n * console.error(err);\n * // JSON parse error exception\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.forEachOf(validConfigFileMap, parseFile);\n * console.log(configs);\n * // configs is now a map of JSON data, e.g.\n * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * //Error handing\n * async () => {\n * try {\n * let result = await async.forEachOf(invalidConfigFileMap, parseFile);\n * console.log(configs);\n * }\n * catch (err) {\n * console.log(err);\n * // JSON parse error exception\n * }\n * }\n *\n */\nfunction eachOf(coll, iteratee, callback) {\n var eachOfImplementation = (0, _isArrayLike2.default)(coll) ? eachOfArrayLike : eachOfGeneric;\n return eachOfImplementation(coll, (0, _wrapAsync2.default)(iteratee), callback);\n}\n\nexports.default = (0, _awaitify2.default)(eachOf, 3);\nmodule.exports = exports['default'];\n}(eachOf, eachOf.exports));\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = parallel;\n\nvar _eachOf = eachOf.exports;\n\nvar _eachOf2 = _interopRequireDefault(_eachOf);\n\nvar _parallel2 = parallel$2.exports;\n\nvar _parallel3 = _interopRequireDefault(_parallel2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Run the `tasks` collection of functions in parallel, without waiting until\n * the previous function has completed. If any of the functions pass an error to\n * its callback, the main `callback` is immediately called with the value of the\n * error. Once the `tasks` have completed, the results are passed to the final\n * `callback` as an array.\n *\n * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about\n * parallel execution of code. If your tasks do not use any timers or perform\n * any I/O, they will actually be executed in series. Any synchronous setup\n * sections for each task will happen one after the other. JavaScript remains\n * single-threaded.\n *\n * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the\n * execution of other tasks when a task fails.\n *\n * It is also possible to use an object instead of an array. Each property will\n * be run as a function and the results will be passed to the final `callback`\n * as an object instead of an array. This can be a more readable way of handling\n * results from {@link async.parallel}.\n *\n * @name parallel\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of\n * [async functions]{@link AsyncFunction} to run.\n * Each async function can complete with any number of optional `result` values.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed successfully. This function gets a results array\n * (or object) containing all the result arguments passed to the task callbacks.\n * Invoked with (err, results).\n * @returns {Promise} a promise, if a callback is not passed\n *\n * @example\n *\n * //Using Callbacks\n * async.parallel([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ], function(err, results) {\n * console.log(results);\n * // results is equal to ['one','two'] even though\n * // the second function had a shorter timeout.\n * });\n *\n * // an example using an object instead of an array\n * async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * callback(null, 2);\n * }, 100);\n * }\n * }, function(err, results) {\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * });\n *\n * //Using Promises\n * async.parallel([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ]).then(results => {\n * console.log(results);\n * // results is equal to ['one','two'] even though\n * // the second function had a shorter timeout.\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // an example using an object instead of an array\n * async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * callback(null, 2);\n * }, 100);\n * }\n * }).then(results => {\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * //Using async/await\n * async () => {\n * try {\n * let results = await async.parallel([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ]);\n * console.log(results);\n * // results is equal to ['one','two'] even though\n * // the second function had a shorter timeout.\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // an example using an object instead of an array\n * async () => {\n * try {\n * let results = await async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * callback(null, 2);\n * }, 100);\n * }\n * });\n * console.log(results);\n * // results is equal to: { one: 1, two: 2 }\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */\nfunction parallel(tasks, callback) {\n return (0, _parallel3.default)(_eachOf2.default, tasks, callback);\n}\nmodule.exports = exports['default'];\n}(parallel$1, parallel$1.exports));\n\nvar parallel = /*@__PURE__*/getDefaultExportFromCjs(parallel$1.exports);\n\nvar AsyncParallelHook = (function () {\n function AsyncParallelHook() {\n this.tasks = [];\n }\n AsyncParallelHook.prototype.promise = function () {\n return parallel(this.tasks);\n };\n AsyncParallelHook.prototype.tapPromise = function (name, cb) {\n var _this = this;\n this.tasks.push(function (callback) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4, cb()];\n case 1:\n _a.sent();\n callback(null, name);\n return [2];\n }\n });\n }); });\n };\n return AsyncParallelHook;\n}());\n\nvar waterfall$1 = {exports: {}};\n\n(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _once = once.exports;\n\nvar _once2 = _interopRequireDefault(_once);\n\nvar _onlyOnce = onlyOnce.exports;\n\nvar _onlyOnce2 = _interopRequireDefault(_onlyOnce);\n\nvar _wrapAsync = wrapAsync$1;\n\nvar _wrapAsync2 = _interopRequireDefault(_wrapAsync);\n\nvar _awaitify = awaitify.exports;\n\nvar _awaitify2 = _interopRequireDefault(_awaitify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Runs the `tasks` array of functions in series, each passing their results to\n * the next in the array. However, if any of the `tasks` pass an error to their\n * own callback, the next function is not executed, and the main `callback` is\n * immediately called with the error.\n *\n * @name waterfall\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array of [async functions]{@link AsyncFunction}\n * to run.\n * Each function should complete with any number of `result` values.\n * The `result` values will be passed as arguments, in order, to the next task.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This will be passed the results of the last task's\n * callback. Invoked with (err, [results]).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * async.waterfall([\n * function(callback) {\n * callback(null, 'one', 'two');\n * },\n * function(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * },\n * function(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n *\n * // Or, with named functions:\n * async.waterfall([\n * myFirstFunction,\n * mySecondFunction,\n * myLastFunction,\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n * function myFirstFunction(callback) {\n * callback(null, 'one', 'two');\n * }\n * function mySecondFunction(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * }\n * function myLastFunction(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n */\nfunction waterfall(tasks, callback) {\n callback = (0, _once2.default)(callback);\n if (!Array.isArray(tasks)) { return callback(new Error('First argument to waterfall must be an array of functions')); }\n if (!tasks.length) { return callback(); }\n var taskIndex = 0;\n\n function nextTask(args) {\n var task = (0, _wrapAsync2.default)(tasks[taskIndex++]);\n task.apply(void 0, args.concat( [(0, _onlyOnce2.default)(next)] ));\n }\n\n function next(err) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n if (err === false) { return; }\n if (err || taskIndex === tasks.length) {\n return callback.apply(void 0, [ err ].concat( args ));\n }\n nextTask(args);\n }\n\n nextTask([]);\n}\n\nexports.default = (0, _awaitify2.default)(waterfall);\nmodule.exports = exports['default'];\n}(waterfall$1, waterfall$1.exports));\n\nvar waterfall = /*@__PURE__*/getDefaultExportFromCjs(waterfall$1.exports);\n\nvar ASyncWaterfallHook = (function () {\n function ASyncWaterfallHook() {\n this.tasks = [];\n }\n ASyncWaterfallHook.prototype.call = function () {\n return waterfall(this.tasks);\n };\n ASyncWaterfallHook.prototype.tap = function (name, cb) {\n if (this.tasks.length === 0) {\n this.tasks.push(function (callback) {\n var value = cb();\n callback(value ? null : false, value);\n });\n }\n else {\n this.tasks.push(function (arg, callback) {\n var value = cb.apply(void 0, __spreadArray([], __read(arg), false));\n callback(value ? null : false, name);\n });\n }\n };\n return ASyncWaterfallHook;\n}());\n\nvar SyncBailHook = (function () {\n function SyncBailHook() {\n this.tasks = [];\n }\n SyncBailHook.prototype.call = function () {\n return series(this.tasks);\n };\n SyncBailHook.prototype.tap = function (name, cb) {\n this.tasks.push(function (callback) {\n var err = cb();\n callback(err, name);\n });\n };\n return SyncBailHook;\n}());\n\nvar AsyncSeriesHook = (function () {\n function AsyncSeriesHook() {\n this.args = [];\n this.tasks = [];\n }\n AsyncSeriesHook.prototype.promise = function () {\n var arguments$1 = arguments;\n\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments$1[_i];\n }\n this.args = args;\n return series(this.tasks);\n };\n AsyncSeriesHook.prototype.tapPromise = function (name, cb) {\n var _this = this;\n this.tasks.push(function (callback) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4, cb.apply(void 0, __spreadArray([], __read(this.args), false))];\n case 1:\n _a.sent();\n callback(null, name);\n return [2];\n }\n });\n }); });\n };\n return AsyncSeriesHook;\n}());\n\nvar AsyncSeriesBailHook = (function () {\n function AsyncSeriesBailHook() {\n this.args = [];\n this.tasks = [];\n }\n AsyncSeriesBailHook.prototype.promise = function () {\n var arguments$1 = arguments;\n\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments$1[_i];\n }\n this.args = args;\n return series(this.tasks);\n };\n AsyncSeriesBailHook.prototype.tapPromise = function (name, cb) {\n var _this = this;\n this.tasks.push(function (callback) { return __awaiter(_this, void 0, void 0, function () {\n var err;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4, cb.apply(void 0, __spreadArray([], __read(this.args), false))];\n case 1:\n err = _a.sent();\n callback(err, name);\n return [2];\n }\n });\n }); });\n };\n return AsyncSeriesBailHook;\n}());\n\nvar AsyncWaterfallHook = (function () {\n function AsyncWaterfallHook() {\n this.tasks = [];\n }\n AsyncWaterfallHook.prototype.promise = function () {\n return waterfall(this.tasks);\n };\n AsyncWaterfallHook.prototype.tapPromise = function (name, cb) {\n if (this.tasks.length === 0) {\n this.tasks.push(function (callback) {\n cb()\n .then(function (value) {\n callback(null, value);\n });\n });\n }\n else {\n this.tasks.push(function (arg, callback) {\n cb(arg).then(function (v) {\n callback(null, v);\n });\n });\n }\n };\n return AsyncWaterfallHook;\n}());\n\nexport { AsyncParallelHook, AsyncSeriesBailHook, AsyncSeriesHook, AsyncWaterfallHook, SyncBailHook, SyncHook, ASyncWaterfallHook as SyncWaterfallHook };\n//# sourceMappingURL=index.js.map\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport line from \"./line.js\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","function _extends() {\n return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toString = require('./toString');\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\n\n/**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\nfunction uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n}\n\nmodule.exports = uniqueId;\n","import * as glMatrix from \"./common.js\";\n/**\n * 4 Dimensional Vector\n * @module vec4\n */\n\n/**\n * Creates a new, empty vec4\n *\n * @returns {vec4} a new 4D vector\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n }\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 */\n\nexport function clone(a) {\n var 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 */\n\nexport function fromValues(x, y, z, w) {\n var 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 */\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 */\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 */\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 */\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 */\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 */\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 */\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 */\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 */\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 */\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 * Math.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 */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n out[3] = Math.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 */\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 */\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 */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return Math.hypot(x, y, z, 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 */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var 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 */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return Math.hypot(x, y, z, 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 */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var 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 */\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 */\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 */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n var len = x * x + y * y + z * z + w * w;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\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 */\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 */\n\nexport function cross(out, u, v, w) {\n var A = v[0] * w[1] - v[1] * w[0],\n B = v[0] * w[2] - v[2] * w[0],\n C = v[0] * w[3] - v[3] * w[0],\n D = v[1] * w[2] - v[2] * w[1],\n E = v[1] * w[3] - v[3] * w[1],\n F = v[2] * w[3] - v[3] * w[2];\n var G = u[0];\n var H = u[1];\n var I = u[2];\n var 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 */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var 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 ommitted, a unit vector will be returned\n * @returns {vec4} out\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0; // 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\n var v1, v2, v3, v4;\n var s1, s2;\n\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\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\n var 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 */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2],\n 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 */\n\nexport function transformQuat(out, a, q) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3]; // calculate quat * vec\n\n var ix = qw * x + qy * z - qz * y;\n var iy = qw * y + qz * x - qx * z;\n var iz = qw * z + qx * y - qy * x;\n var iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat\n\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 */\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 */\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 */\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 */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && 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 */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec4.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec4.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec4.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec4.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec4.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec4.squaredLength}\n * @function\n */\n\nexport var 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 */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 4;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\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\n return a;\n };\n}();","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","export default function noop() {}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","import { CustomElement } from '@antv/g';\nexport function createElement(descriptor) {\n const render = typeof descriptor === 'function' ? descriptor : descriptor.render;\n return class extends CustomElement {\n connectedCallback() {\n this.draw();\n }\n attributeChangedCallback() {\n this.draw();\n }\n draw() {\n render(this);\n }\n };\n}\n//# sourceMappingURL=createElement.js.map","import * as React from 'react';\n// recursion (flat tree structure)\nfunction fillRecords(list, record, indent, childrenColumnName, expandedKeys, getRowKey, index) {\n var key = getRowKey(record, index);\n list.push({\n record: record,\n indent: indent,\n index: index,\n rowKey: key\n });\n var expanded = expandedKeys === null || expandedKeys === void 0 ? void 0 : expandedKeys.has(key);\n if (record && Array.isArray(record[childrenColumnName]) && expanded) {\n // expanded state, flat record\n for (var i = 0; i < record[childrenColumnName].length; i += 1) {\n fillRecords(list, record[childrenColumnName][i], indent + 1, childrenColumnName, expandedKeys, getRowKey, i);\n }\n }\n}\n/**\n * flat tree data on expanded state\n *\n * @export\n * @template T\n * @param {*} data : table data\n * @param {string} childrenColumnName : 指定树形结构的列名\n * @param {Set} expandedKeys : 展开的行对应的keys\n * @param {GetRowKey} getRowKey : 获取当前rowKey的方法\n * @returns flattened data\n */\nexport default function useFlattenRecords(data, childrenColumnName, expandedKeys, getRowKey) {\n var arr = React.useMemo(function () {\n if (expandedKeys !== null && expandedKeys !== void 0 && expandedKeys.size) {\n var list = [];\n\n // collect flattened record\n for (var i = 0; i < (data === null || data === void 0 ? void 0 : data.length); i += 1) {\n var record = data[i];\n\n // using array.push or spread operator may cause \"Maximum call stack size exceeded\" exception if array size is big enough.\n fillRecords(list, record, 0, childrenColumnName, expandedKeys, getRowKey, i);\n }\n return list;\n }\n return data === null || data === void 0 ? void 0 : data.map(function (item, index) {\n return {\n record: item,\n indent: 0,\n index: index,\n rowKey: getRowKey(item, index)\n };\n });\n }, [data, childrenColumnName, expandedKeys, getRowKey]);\n return arr;\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport WebMercatorViewport from './web-mercator-viewport';\nimport assert from './assert';\nexport default function fitBounds(_ref) {\n var width = _ref.width,\n height = _ref.height,\n bounds = _ref.bounds,\n _ref$minExtent = _ref.minExtent,\n minExtent = _ref$minExtent === void 0 ? 0 : _ref$minExtent,\n _ref$maxZoom = _ref.maxZoom,\n maxZoom = _ref$maxZoom === void 0 ? 24 : _ref$maxZoom,\n _ref$padding = _ref.padding,\n padding = _ref$padding === void 0 ? 0 : _ref$padding,\n _ref$offset = _ref.offset,\n offset = _ref$offset === void 0 ? [0, 0] : _ref$offset;\n\n var _bounds = _slicedToArray(bounds, 2),\n _bounds$ = _slicedToArray(_bounds[0], 2),\n west = _bounds$[0],\n south = _bounds$[1],\n _bounds$2 = _slicedToArray(_bounds[1], 2),\n east = _bounds$2[0],\n north = _bounds$2[1];\n\n if (Number.isFinite(padding)) {\n var p = padding;\n padding = {\n top: p,\n bottom: p,\n left: p,\n right: p\n };\n } else {\n assert(Number.isFinite(padding.top) && Number.isFinite(padding.bottom) && Number.isFinite(padding.left) && Number.isFinite(padding.right));\n }\n\n var viewport = new WebMercatorViewport({\n width: width,\n height: height,\n longitude: 0,\n latitude: 0,\n zoom: 0\n });\n var nw = viewport.project([west, north]);\n var se = viewport.project([east, south]);\n var size = [Math.max(Math.abs(se[0] - nw[0]), minExtent), Math.max(Math.abs(se[1] - nw[1]), minExtent)];\n var targetSize = [width - padding.left - padding.right - Math.abs(offset[0]) * 2, height - padding.top - padding.bottom - Math.abs(offset[1]) * 2];\n assert(targetSize[0] > 0 && targetSize[1] > 0);\n var scaleX = targetSize[0] / size[0];\n var scaleY = targetSize[1] / size[1];\n var offsetX = (padding.right - padding.left) / 2 / scaleX;\n var offsetY = (padding.bottom - padding.top) / 2 / scaleY;\n var center = [(se[0] + nw[0]) / 2 + offsetX, (se[1] + nw[1]) / 2 + offsetY];\n var centerLngLat = viewport.unproject(center);\n var zoom = viewport.zoom + Math.log2(Math.abs(Math.min(scaleX, scaleY)));\n return {\n longitude: centerLngLat[0],\n latitude: centerLngLat[1],\n zoom: Math.min(zoom, maxZoom)\n };\n}\n//# sourceMappingURL=fit-bounds.js.map","import { BlendType, gl } from '@antv/l7-core';\nexport const BlendTypes = {\n [BlendType.additive]: {\n enable: true,\n func: {\n srcRGB: gl.ONE,\n dstRGB: gl.ONE,\n srcAlpha: 1,\n dstAlpha: 1\n }\n },\n [BlendType.none]: {\n enable: false\n },\n [BlendType.normal]: {\n enable: true,\n func: {\n srcRGB: gl.SRC_ALPHA,\n dstRGB: gl.ONE_MINUS_SRC_ALPHA,\n srcAlpha: 1,\n dstAlpha: 1\n }\n },\n [BlendType.subtractive]: {\n enable: true,\n func: {\n srcRGB: gl.ONE,\n dstRGB: gl.ONE,\n srcAlpha: gl.ZERO,\n dstAlpha: gl.ONE_MINUS_SRC_COLOR\n },\n equation: {\n rgb: gl.FUNC_SUBTRACT,\n alpha: gl.FUNC_SUBTRACT\n }\n },\n [BlendType.max]: {\n enable: true,\n func: {\n srcRGB: gl.ONE,\n dstRGB: gl.ONE\n },\n equation: {\n rgb: gl.MAX_EXT\n }\n },\n [BlendType.min]: {\n enable: true,\n func: {\n srcRGB: gl.ONE,\n dstRGB: gl.ONE\n },\n equation: {\n rgb: gl.MIN_EXT\n }\n }\n};","// This icon file is generated automatically.\nvar CloseCircleOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"fill-rule\": \"evenodd\", \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm0 76c-205.4 0-372 166.6-372 372s166.6 372 372 372 372-166.6 372-372-166.6-372-372-372zm128.01 198.83c.03 0 .05.01.09.06l45.02 45.01a.2.2 0 01.05.09.12.12 0 010 .07c0 .02-.01.04-.05.08L557.25 512l127.87 127.86a.27.27 0 01.05.06v.02a.12.12 0 010 .07c0 .03-.01.05-.05.09l-45.02 45.02a.2.2 0 01-.09.05.12.12 0 01-.07 0c-.02 0-.04-.01-.08-.05L512 557.25 384.14 685.12c-.04.04-.06.05-.08.05a.12.12 0 01-.07 0c-.03 0-.05-.01-.09-.05l-45.02-45.02a.2.2 0 01-.05-.09.12.12 0 010-.07c0-.02.01-.04.06-.08L466.75 512 338.88 384.14a.27.27 0 01-.05-.06l-.01-.02a.12.12 0 010-.07c0-.03.01-.05.05-.09l45.02-45.02a.2.2 0 01.09-.05.12.12 0 01.07 0c.02 0 .04.01.08.06L512 466.75l127.86-127.86c.04-.05.06-.06.08-.06a.12.12 0 01.07 0z\" } }] }, \"name\": \"close-circle\", \"theme\": \"outlined\" };\nexport default CloseCircleOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport CloseCircleOutlinedSvg from \"@ant-design/icons-svg/es/asn/CloseCircleOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar CloseCircleOutlined = function CloseCircleOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: CloseCircleOutlinedSvg\n }));\n};\n\n/**![close-circle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdmlld0JveD0iNjQgNjQgODk2IDg5NiIgZm9jdXNhYmxlPSJmYWxzZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNTEyIDY0YzI0Ny40IDAgNDQ4IDIwMC42IDQ0OCA0NDhTNzU5LjQgOTYwIDUxMiA5NjAgNjQgNzU5LjQgNjQgNTEyIDI2NC42IDY0IDUxMiA2NHptMCA3NmMtMjA1LjQgMC0zNzIgMTY2LjYtMzcyIDM3MnMxNjYuNiAzNzIgMzcyIDM3MiAzNzItMTY2LjYgMzcyLTM3Mi0xNjYuNi0zNzItMzcyLTM3MnptMTI4LjAxIDE5OC44M2MuMDMgMCAuMDUuMDEuMDkuMDZsNDUuMDIgNDUuMDFhLjIuMiAwIDAxLjA1LjA5LjEyLjEyIDAgMDEwIC4wN2MwIC4wMi0uMDEuMDQtLjA1LjA4TDU1Ny4yNSA1MTJsMTI3Ljg3IDEyNy44NmEuMjcuMjcgMCAwMS4wNS4wNnYuMDJhLjEyLjEyIDAgMDEwIC4wN2MwIC4wMy0uMDEuMDUtLjA1LjA5bC00NS4wMiA0NS4wMmEuMi4yIDAgMDEtLjA5LjA1LjEyLjEyIDAgMDEtLjA3IDBjLS4wMiAwLS4wNC0uMDEtLjA4LS4wNUw1MTIgNTU3LjI1IDM4NC4xNCA2ODUuMTJjLS4wNC4wNC0uMDYuMDUtLjA4LjA1YS4xMi4xMiAwIDAxLS4wNyAwYy0uMDMgMC0uMDUtLjAxLS4wOS0uMDVsLTQ1LjAyLTQ1LjAyYS4yLjIgMCAwMS0uMDUtLjA5LjEyLjEyIDAgMDEwLS4wN2MwLS4wMi4wMS0uMDQuMDYtLjA4TDQ2Ni43NSA1MTIgMzM4Ljg4IDM4NC4xNGEuMjcuMjcgMCAwMS0uMDUtLjA2bC0uMDEtLjAyYS4xMi4xMiAwIDAxMC0uMDdjMC0uMDMuMDEtLjA1LjA1LS4wOWw0NS4wMi00NS4wMmEuMi4yIDAgMDEuMDktLjA1LjEyLjEyIDAgMDEuMDcgMGMuMDIgMCAuMDQuMDEuMDguMDZMNTEyIDQ2Ni43NWwxMjcuODYtMTI3Ljg2Yy4wNC0uMDUuMDYtLjA2LjA4LS4wNmEuMTIuMTIgMCAwMS4wNyAweiIgLz48L3N2Zz4=) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(CloseCircleOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'CloseCircleOutlined';\n}\nexport default RefIcon;","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","import { classNames, deepAssign, superStyleProps } from '../../util';\nimport { DEFAULT_HANDLE_CFG } from './continuous/handle';\nexport var LEGEND_BASE_DEFAULT_OPTIONS = {\n showTitle: true,\n padding: 0,\n orientation: 'horizontal',\n backgroundFill: 'transparent',\n titleText: '',\n titleSpacing: 4,\n titlePosition: 'top-left',\n titleFill: '#2C3542',\n titleFontWeight: 'bold',\n titleFontFamily: 'sans-serif',\n titleFontSize: 12,\n};\nexport var CATEGORY_DEFAULT_OPTIONS = deepAssign({}, LEGEND_BASE_DEFAULT_OPTIONS, {});\nexport var CONTINUOUS_DEFAULT_OPTIONS = deepAssign({}, LEGEND_BASE_DEFAULT_OPTIONS, superStyleProps(DEFAULT_HANDLE_CFG, 'handle'), {\n color: [\n '#d0e3fa',\n '#acc7f6',\n '#8daaf2',\n '#6d8eea',\n '#4d73cd',\n '#325bb1',\n '#5a3e75',\n '#8c3c79',\n '#e23455',\n '#e7655b',\n ],\n indicatorBackgroundFill: '#262626',\n indicatorLabelFill: 'white',\n indicatorLabelFontSize: 12,\n indicatorVisibility: 'hidden',\n labelAlign: 'value',\n labelDirection: 'positive',\n labelSpacing: 5,\n showHandle: true,\n showIndicator: true,\n showLabel: true,\n slidable: true,\n titleText: '',\n type: 'continuous',\n});\n// 连续图例步长比例\nexport var STEP_RATIO = 0.01;\n// 分类图例name和value宽度比例\nexport var NAME_VALUE_RATIO = 0.5;\nexport var CLASS_NAMES = classNames({\n title: 'title',\n titleGroup: 'title-group',\n items: 'items',\n itemsGroup: 'items-group',\n contentGroup: 'content-group',\n ribbonGroup: 'ribbon-group',\n ribbon: 'ribbon',\n handlesGroup: 'handles-group',\n handle: 'handle',\n startHandle: 'start-handle',\n endHandle: 'end-handle',\n labelGroup: 'label-group',\n label: 'label',\n indicator: 'indicator',\n}, 'legend');\n//# sourceMappingURL=constant.js.map","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { isArray, isBoolean } from '../utils';\n/** new Chart options */\nexport var CHART_OPTIONS = ['renderer'];\n/** There is only the view layer, no need to pass it down to children */\nexport var VIEW_OPTIONS = [\n 'width',\n 'height',\n 'autoFit',\n 'theme',\n 'inset',\n 'insetLeft',\n 'insetRight',\n 'insetTop',\n 'insetBottom',\n 'padding',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n 'margin',\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n 'depth',\n 'title',\n 'clip',\n 'children',\n 'type',\n 'data',\n 'direction',\n];\n/** 特殊标识,用于标识改配置来自于转换逻辑,而非用户配置 */\nexport var TRANSFORM_SIGN = '__transform__';\n/** 特殊标识,用于跳过 删除已转换的配置项 */\nexport var SKIP_DEL_CUSTOM_SIGN = '__skipDelCustomKeys__';\n/**\n * @title 字段转换逻辑\n * @example\n * 1. xField: 'year' -> encode: {x: 'year'}\n * 2. yField: 'scales' -> encode: {y: 'scales'}\n * 3. shape: 'smooth' -> style: {shape: 'smooth'} shapeField: 'shape' -> encode: { shape: 'shape' }\n * 4. connectNulls: {connect: true} -> style: {connect: true}\n * 5. keyField: 'key' -> encode: { key: 'key' }\n */\nvar commonCallback = function (type, value) {\n if (isBoolean(value)) {\n return {\n type: type,\n available: value,\n };\n }\n return __assign({ type: type }, value);\n};\nexport var TRANSFORM_OPTION_KEY = {\n /** encode */\n xField: 'encode.x',\n yField: 'encode.y',\n colorField: 'encode.color',\n angleField: 'encode.y',\n keyField: 'encode.key',\n y1Field: 'encode.y1',\n sizeField: 'encode.size',\n setsField: 'encode.sets',\n shapeField: 'encode.shape',\n seriesField: 'encode.series',\n positionField: 'encode.position',\n textField: 'encode.text',\n valueField: 'encode.value',\n binField: 'encode.x',\n srcField: 'encode.src',\n linkColorField: 'encode.linkColor',\n fontSizeField: 'encode.fontSize',\n coordinateType: 'coordinate.type',\n radius: 'coordinate.outerRadius',\n innerRadius: 'coordinate.innerRadius',\n startAngle: 'coordinate.startAngle',\n endAngle: 'coordinate.endAngle',\n focusX: 'coordinate.focusX',\n focusY: 'coordinate.focusY',\n distortionX: 'coordinate.distortionX',\n distortionY: 'coordinate.distortionY',\n visual: 'coordinate.visual',\n /**\n * @title 堆叠\n * @example\n * 1. stack: true -> transform: [{type: 'stackY'}]\n */\n stack: {\n target: 'transform',\n value: function (value) {\n return commonCallback('stackY', value);\n },\n },\n /**\n * @title 归一化\n * @example\n * 1. normalize: true -> transform: [{type: 'normalizeY'}]\n */\n normalize: {\n target: 'transform',\n value: function (value) {\n return commonCallback('normalizeY', value);\n },\n },\n /**\n * @title 百分比\n * @description 同 normalize\n * @example\n * 1. percent: true -> transform: [{type: 'normalizeY'}]\n */\n percent: {\n target: 'transform',\n value: function (value) {\n return commonCallback('normalizeY', value);\n },\n },\n /**\n * @title 分组\n * @example\n * 1. group: true -> transform: [{type: 'dodgeX'}]\n */\n group: {\n target: 'transform',\n value: function (value) {\n return commonCallback('dodgeX', value);\n },\n },\n /**\n * @title 排序\n * @example\n * 1. sort: true -> transform: [{type: 'sortX'}]\n */\n sort: {\n target: 'transform',\n value: function (value) {\n return commonCallback('sortX', value);\n },\n },\n /**\n * @title 对称\n * @example\n * 1. symmetry: true -> transform: [{type: 'symmetryY'}]\n */\n symmetry: {\n target: 'transform',\n value: function (value) {\n return commonCallback('symmetryY', value);\n },\n },\n /**\n * @title 对 y 和 y1 通道求差集\n * @example\n * 1. diff: true -> transform: [{type: 'diffY'}]\n */\n diff: {\n target: 'transform',\n value: function (value) {\n return commonCallback('diffY', value);\n },\n },\n meta: {\n target: 'scale',\n value: function (value) {\n return value;\n },\n },\n label: {\n target: 'labels',\n value: function (value) {\n return value;\n },\n },\n /**\n * @title 折线的形状\n * @example\n * 1. shape: 'smooth' -> style: {shape: 'smooth'}\n */\n shape: 'style.shape',\n /**\n * @title 是否链接空值\n * @description 支持 boolean 和 对象类型\n */\n connectNulls: {\n target: 'style',\n value: function (value) {\n if (isBoolean(value)) {\n return {\n connect: value,\n };\n }\n return value;\n },\n },\n /**\n * @title 坐标转换\n * @example\n * 1. transpose: true -> coordinate: { transform: [{ type: 'transpose' }]}\n * 2. transpose: false -> coordinate: { }\n */\n transpose: {\n target: 'transpose',\n value: function (value) {\n return commonCallback('transpose', value);\n },\n },\n};\n/**\n * @title 将 CONFIG_SHAPE 中的配置项, 转换为 children\n * @example\n * 1. annotations: [{type: 'text'}] -> children: [{type: 'text'}]\n * 2. line: {shape: 'hvh'}-> children: [{type: 'line', style: { shape: 'hvh'}}]\n */\nvar EXTENDED_PROPERTIES = [\n 'xField',\n 'yField',\n 'seriesField',\n 'colorField',\n 'shapeField',\n 'keyField',\n 'positionField',\n 'meta',\n 'tooltip',\n 'animate',\n 'stack',\n 'normalize',\n 'percent',\n 'group',\n 'sort',\n 'symmetry',\n 'diff',\n];\nexport var CONFIG_SHAPE = [\n {\n key: 'annotations',\n extendedProperties: [],\n },\n {\n key: 'line',\n type: 'line',\n extendedProperties: EXTENDED_PROPERTIES,\n },\n {\n key: 'connector',\n type: 'connector',\n extendedProperties: [],\n },\n {\n key: 'point',\n type: 'point',\n extendedProperties: EXTENDED_PROPERTIES,\n defaultShapeConfig: {\n shapeField: 'circle',\n },\n },\n {\n key: 'area',\n type: 'area',\n extendedProperties: EXTENDED_PROPERTIES,\n },\n];\n/**\n * @description 一些特殊的配置项,需要自定义转换逻辑\n */\nexport var SPECIAL_OPTIONS = [\n {\n key: 'transform',\n callback: function (origin, key, value) {\n var _a;\n origin[key] = origin[key] || [];\n var _b = value.available, available = _b === void 0 ? true : _b, rest = __rest(value, [\"available\"]);\n if (available) {\n origin[key].push(__assign((_a = {}, _a[TRANSFORM_SIGN] = true, _a), rest));\n }\n else {\n var index = origin[key].indexOf(function (item) { return item.type === value.type; });\n if (index !== -1) {\n origin[key].splice(index, 1);\n }\n }\n },\n },\n {\n key: 'labels',\n callback: function (origin, key, value) {\n var _a;\n /**\n * @description 特殊情况处理\n * 1. 如果 labels 为 false,表示关闭标签\n * 2. 如果 labels 为数组,用于多 label 的场景\n * @example\n * 1. label: false -> labels: []\n * 2. label: [{x}, {xx}] -> labels: [{x}, {xx}]\n */\n if (!value || isArray(value)) {\n origin[key] = value ? value : [];\n return;\n }\n /**\n * @description 填充默认 text 逻辑\n */\n if (!value.text) {\n value['text'] = origin['yField'];\n }\n origin[key] = origin[key] || [];\n origin[key].push(__assign((_a = {}, _a[TRANSFORM_SIGN] = true, _a), value));\n },\n },\n {\n key: 'transpose',\n callback: function (origin, key, value) {\n var _a;\n if (value.available) {\n origin['coordinate'] = {\n transform: [__assign((_a = {}, _a[TRANSFORM_SIGN] = true, _a), value)],\n };\n }\n else {\n origin['coordinate'] = {};\n }\n },\n },\n];\nexport var ANNOTATION_LIST = [\n {\n key: 'conversionTag',\n shape: 'ConversionTag',\n },\n {\n key: 'axisText',\n shape: 'BidirectionalBarAxisText',\n },\n];\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","export var DEFAULT_INDICATOR_STYLE_PROPS = {\n backgroundFill: '#262626',\n backgroundLineCap: 'round',\n backgroundLineWidth: 1,\n backgroundStroke: '#333',\n backgroundZIndex: -1,\n formatter: function (val) { return val.toString(); },\n labelFill: '#fff',\n labelFontSize: 12,\n labelTextBaseline: 'middle',\n padding: [2, 4],\n position: 'right',\n radius: 0,\n zIndex: 999,\n};\n//# sourceMappingURL=constant.js.map","import { __assign, __extends, __read, __rest, __spreadArray } from \"tslib\";\nimport { ElementEvent } from '@antv/g';\nimport { Component } from '../../core';\nimport { Group } from '../../shapes';\nimport { BBox, classNames, hide, isHorizontal, parseSeriesAttr, renderExtDo, select, show, splitStyle, subStyleProps, } from '../../util';\nimport { DEFAULT_INDICATOR_STYLE_PROPS } from './constant';\nvar CLASS_NAMES = classNames({\n background: 'background',\n labelGroup: 'label-group',\n label: 'label',\n}, 'indicator');\nvar Indicator = /** @class */ (function (_super) {\n __extends(Indicator, _super);\n function Indicator(options) {\n var _this = _super.call(this, options, DEFAULT_INDICATOR_STYLE_PROPS) || this;\n _this.point = [0, 0];\n _this.group = _this.appendChild(new Group({}));\n _this.isMutationObserved = true;\n return _this;\n }\n Indicator.prototype.renderBackground = function () {\n if (!this.label)\n return;\n var _a = this.attributes, position = _a.position, padding = _a.padding;\n var _b = __read(parseSeriesAttr(padding), 4), t = _b[0], r = _b[1], b = _b[2], l = _b[3];\n var _c = this.label.node().getLocalBounds(), min = _c.min, max = _c.max;\n var bbox = new BBox(min[0] - l, min[1] - t, max[0] + r - min[0] + l, max[1] + b - min[1] + t);\n var path = this.getPath(position, bbox);\n var style = subStyleProps(this.attributes, 'background');\n this.background = select(this.group)\n .maybeAppendByClassName(CLASS_NAMES.background, 'path')\n .styles(__assign(__assign({}, style), { d: path }));\n this.group.appendChild(this.label.node());\n };\n Indicator.prototype.renderLabel = function () {\n var _a = this.attributes, formatter = _a.formatter, labelText = _a.labelText;\n var style = subStyleProps(this.attributes, 'label');\n var _b = __read(splitStyle(style), 2), _c = _b[0], groupStyle = _b[1], rawText = _c.text, textStyle = __rest(_c, [\"text\"]);\n this.label = select(this.group).maybeAppendByClassName(CLASS_NAMES.labelGroup, 'g').styles(groupStyle);\n if (!labelText)\n return;\n var text = this.label\n .maybeAppendByClassName(CLASS_NAMES.label, function () { return renderExtDo(formatter(labelText)); })\n .style('text', formatter(labelText).toString());\n text.selectAll('text').styles(textStyle);\n };\n Indicator.prototype.adjustLayout = function () {\n var _a = __read(this.point, 2), dx = _a[0], dy = _a[1];\n var _b = this.attributes, x = _b.x, y = _b.y;\n this.group.attr('transform', \"translate(\".concat(x - dx, \", \").concat(y - dy, \")\"));\n };\n Indicator.prototype.getPath = function (position, bbox) {\n var r = this.attributes.radius;\n var x = bbox.x, y = bbox.y, width = bbox.width, height = bbox.height;\n var pathArray = [\n // 0 开始路径\n ['M', x + r, y],\n // 1 上边线\n ['L', x + width - r, y],\n // 2 右上角圆弧\n ['A', r, r, 0, 0, 1, x + width, y + r],\n // 3 右边线\n ['L', x + width, y + height - r],\n // 4 右下角圆弧\n ['A', r, r, 0, 0, 1, x + width - r, y + height],\n // 5 下边线\n ['L', x + r, y + height],\n // 6 左下角圆弧\n ['A', r, r, 0, 0, 1, x, y + height - r],\n // 7 左边线\n ['L', x, y + r],\n // 8 左上角圆弧\n ['A', r, r, 0, 0, 1, x + r, y],\n // 9 关闭路径\n ['Z'],\n ];\n // 将 position 反方向的边线替换为带尖角的边线\n var revertPositionMap = { top: 4, right: 6, bottom: 0, left: 2 };\n var index = revertPositionMap[position];\n var newPath = this.createCorner([pathArray[index].slice(-2), pathArray[index + 1].slice(-2)]);\n // 替换\n pathArray.splice.apply(pathArray, __spreadArray([index + 1, 1], __read(newPath), false));\n pathArray[0][0] = 'M';\n return pathArray;\n };\n Indicator.prototype.createCorner = function (edge, size) {\n if (size === void 0) { size = 10; }\n // intrinsic parameter\n var cornerScale = 0.8;\n var isH = isHorizontal.apply(void 0, __spreadArray([], __read(edge), false));\n var _a = __read(edge, 2), _b = __read(_a[0], 2), x0 = _b[0], y0 = _b[1], _c = __read(_a[1], 2), x1 = _c[0], y1 = _c[1];\n var _d = __read(isH ? [x1 - x0, [x0, x1]] : [y1 - y0, [y0, y1]], 2), len = _d[0], _e = __read(_d[1], 2), b0 = _e[0], b1 = _e[1];\n var hL = len / 2;\n var sign = len / Math.abs(len);\n var cL = size * sign;\n var hCL = cL / 2;\n var cS = ((cL * Math.sqrt(3)) / 2) * cornerScale;\n var _f = __read([b0, b0 + hL - hCL, b0 + hL, b0 + hL + hCL, b1], 5), a0 = _f[0], a1 = _f[1], a2 = _f[2], a3 = _f[3], a4 = _f[4];\n if (isH) {\n this.point = [a2, y0 - cS];\n return [\n ['L', a0, y0],\n ['L', a1, y0],\n ['L', a2, y0 - cS],\n ['L', a3, y0],\n ['L', a4, y0],\n ];\n }\n this.point = [x0 + cS, a2];\n return [\n ['L', x0, a0],\n ['L', x0, a1],\n ['L', x0 + cS, a2],\n ['L', x0, a3],\n ['L', x0, a4],\n ];\n };\n Indicator.prototype.applyVisibility = function () {\n var visibility = this.attributes.visibility;\n if (visibility === 'hidden')\n hide(this);\n else\n show(this);\n };\n Indicator.prototype.bindEvents = function () {\n this.label.on(ElementEvent.BOUNDS_CHANGED, this.renderBackground);\n };\n Indicator.prototype.render = function () {\n this.renderLabel();\n this.renderBackground();\n this.adjustLayout();\n this.applyVisibility();\n };\n return Indicator;\n}(Component));\nexport { Indicator };\n//# sourceMappingURL=indicator.js.map","import { __read } from \"tslib\";\nfunction search(array, value) {\n for (var i = 1; i < array.length; i += 1) {\n var st = array[i - 1];\n var end = array[i];\n if (value >= st && value <= end) {\n return [st, end];\n }\n }\n return [value, value];\n}\nexport function getBlockColor(partition, color, orientation) {\n var colors = Array.from(color);\n var count = partition.length;\n return new Array(count).fill(0).reduce(function (r, v, idx) {\n var c = colors[idx % colors.length];\n return (r += \" \".concat(partition[idx], \":\").concat(c).concat(idx < count - 1 ? \" \".concat(partition[idx + 1], \":\").concat(c) : ''));\n }, \"l(\".concat(orientation === 'horizontal' ? '0' : '270', \")\"));\n}\nexport function getNextTickValue(ticks, value) {\n var _a = __read(search(ticks, value), 2), v1 = _a[0], v2 = _a[1];\n return { tick: value > (v1 + v2) / 2 ? v2 : v1, range: [v1, v2] };\n}\n//# sourceMappingURL=utils.js.map","import { __assign, __extends, __read } from \"tslib\";\nimport { parseColor } from '@antv/g';\nimport { isFunction } from '@antv/util';\nimport { Component } from '../../../core';\nimport { classNames, select, subStyleProps } from '../../../util';\nimport { ifHorizontal } from '../utils';\nimport { getBlockColor } from './utils';\nvar CLASS_NAMES = classNames({\n trackGroup: 'background-group',\n track: 'background',\n selectionGroup: 'ribbon-group',\n selection: 'ribbon',\n clipPath: 'clip-path',\n}, 'ribbon');\nfunction getShape(attr) {\n var orientation = attr.orientation, size = attr.size, length = attr.length;\n return ifHorizontal(orientation, [length, size], [size, length]);\n}\nfunction getTrackPath(attr) {\n var type = attr.type;\n var _a = __read(getShape(attr), 2), cw = _a[0], ch = _a[1];\n if (type === 'size') {\n return [['M', 0, ch], ['L', 0 + cw, 0], ['L', 0 + cw, ch], ['Z']];\n }\n return [['M', 0, ch], ['L', 0, 0], ['L', 0 + cw, 0], ['L', 0 + cw, ch], ['Z']];\n}\nfunction getSelectionPath(attr) {\n return getTrackPath(attr);\n}\nfunction getColor(attr) {\n var orientation = attr.orientation, color = attr.color, block = attr.block, partition = attr.partition;\n var colors;\n if (isFunction(color)) {\n var len = 20;\n colors = new Array(len).fill(0).map(function (_, index, arr) { return color(index / (arr.length - 1)); });\n }\n else\n colors = color;\n var count = colors.length;\n var genericColor = colors.map(function (c) { return parseColor(c).toString(); });\n if (!count)\n return '';\n if (count === 1)\n return genericColor[0];\n if (block)\n return getBlockColor(partition, genericColor, orientation);\n return genericColor.reduce(function (r, c, idx) { return (r += \" \".concat(idx / (count - 1), \":\").concat(c)); }, \"l(\".concat(ifHorizontal(orientation, '0', '270'), \")\"));\n}\nfunction getClipPath(attr) {\n var orientation = attr.orientation, range = attr.range;\n if (!range)\n return [];\n var _a = __read(getShape(attr), 2), width = _a[0], height = _a[1];\n var _b = __read(range, 2), st = _b[0], et = _b[1];\n var x = ifHorizontal(orientation, st * width, 0);\n var y = ifHorizontal(orientation, 0, st * height);\n var w = ifHorizontal(orientation, et * width, width);\n var h = ifHorizontal(orientation, height, et * height);\n return [['M', x, y], ['L', x, h], ['L', w, h], ['L', w, y], ['Z']];\n}\nfunction renderTrack(container, attr) {\n var style = subStyleProps(attr, 'track');\n container.maybeAppendByClassName(CLASS_NAMES.track, 'path').styles(__assign({ d: getTrackPath(attr) }, style));\n}\nfunction renderSelection(container, attr) {\n var style = subStyleProps(attr, 'selection');\n var fill = getColor(attr);\n var ribbon = container\n .maybeAppendByClassName(CLASS_NAMES.selection, 'path')\n .styles(__assign({ d: getSelectionPath(attr), fill: fill }, style));\n var clipPath = ribbon\n .maybeAppendByClassName(CLASS_NAMES.clipPath, 'path')\n .styles({ d: getClipPath(attr) })\n .node();\n ribbon.style('clipPath', clipPath);\n}\nvar Ribbon = /** @class */ (function (_super) {\n __extends(Ribbon, _super);\n function Ribbon(options) {\n return _super.call(this, options, {\n type: 'color',\n orientation: 'horizontal',\n size: 30,\n range: [0, 1],\n length: 200,\n block: false,\n partition: [],\n color: ['#fff', '#000'],\n trackFill: '#e5e5e5',\n }) || this;\n }\n Ribbon.prototype.render = function (attribute, container) {\n var trackGroup = select(container).maybeAppendByClassName(CLASS_NAMES.trackGroup, 'g');\n renderTrack(trackGroup, attribute);\n /**\n * - ribbon group\n * |- ribbon\n * - clip path\n */\n var ribbonGroup = select(container).maybeAppendByClassName(CLASS_NAMES.selectionGroup, 'g');\n renderSelection(ribbonGroup, attribute);\n };\n return Ribbon;\n}(Component));\nexport { Ribbon };\n//# sourceMappingURL=ribbon.js.map","import { __assign, __extends, __read, __spreadArray } from \"tslib\";\nimport { CustomEvent } from '@antv/g';\nimport { Linear } from '@antv/scale';\nimport { clamp, isUndefined } from '@antv/util';\nimport { Component } from '../../core';\nimport { BBox, deepAssign, getEventPos, hide, ifShow, select, show, subStyleProps, superStyleProps, toPrecision, } from '../../util';\nimport { Axis } from '../axis';\nimport { CLASS_NAMES as AXIS_CLASS_NAMES } from '../axis/constant';\nimport { Indicator } from '../indicator';\nimport { Handle as SliderHandle } from '../slider/handle';\nimport { Title } from '../title';\nimport { CLASS_NAMES, CONTINUOUS_DEFAULT_OPTIONS, STEP_RATIO } from './constant';\nimport { Handle } from './continuous/handle';\nimport { Ribbon } from './continuous/ribbon';\nimport { getNextTickValue } from './continuous/utils';\nimport { getSafetySelections, getStepValueByValue, ifHorizontal } from './utils';\nfunction getMinMax(data) {\n return {\n min: Math.min.apply(Math, __spreadArray([], __read(data.map(function (d) { return d.value; })), false)),\n max: Math.max.apply(Math, __spreadArray([], __read(data.map(function (d) { return d.value; })), false)),\n };\n}\nvar Continuous = /** @class */ (function (_super) {\n __extends(Continuous, _super);\n function Continuous(options) {\n var _this = _super.call(this, options, CONTINUOUS_DEFAULT_OPTIONS) || this;\n _this.eventToOffsetScale = new Linear({});\n _this.innerRibbonScale = new Linear({});\n _this.cacheLabelBBox = null;\n _this.cacheHandleBBox = null;\n _this.onHovering = function (e) {\n var _a = _this.attributes, data = _a.data, block = _a.block;\n e.stopPropagation();\n var value = _this.getValueByCanvasPoint(e);\n if (block) {\n var range = getNextTickValue(data.map(function (_a) {\n var value = _a.value;\n return value;\n }), value).range;\n var selection = _this.getRealSelection(range);\n _this.showIndicator((range[0] + range[1]) / 2, \"\".concat(selection[0], \"-\").concat(selection[1]));\n _this.dispatchIndicated(value, range);\n }\n else {\n var safetyValue = _this.getTickValue(value);\n _this.showIndicator(safetyValue, \"\".concat(_this.getRealValue(safetyValue)));\n _this.dispatchIndicated(safetyValue);\n }\n };\n _this.onDragStart = function (target) { return function (e) {\n e.stopPropagation();\n // 关闭滑动\n if (!_this.attributes.slidable)\n return;\n _this.target = target;\n _this.prevValue = _this.getTickValue(_this.getValueByCanvasPoint(e));\n document.addEventListener('mousemove', _this.onDragging);\n document.addEventListener('touchmove', _this.onDragging);\n document.addEventListener('mouseleave', _this.onDragEnd);\n document.addEventListener('mouseup', _this.onDragEnd);\n document.addEventListener('mouseup', _this.onDragEnd);\n document.addEventListener('touchend', _this.onDragEnd);\n }; };\n _this.onDragging = function (e) {\n var target = _this.target;\n _this.updateMouse();\n var _a = __read(_this.selection, 2), start = _a[0], end = _a[1];\n var currValue = _this.getTickValue(_this.getValueByCanvasPoint(e));\n var diffValue = currValue - _this.prevValue;\n if (target === 'start')\n start !== currValue && _this.updateSelection(currValue, end);\n else if (target === 'end')\n end !== currValue && _this.updateSelection(start, currValue);\n else if (target === 'ribbon' && diffValue !== 0) {\n _this.prevValue = currValue;\n _this.updateSelection(diffValue, diffValue, true);\n }\n };\n _this.onDragEnd = function () {\n _this.style.cursor = 'pointer';\n document.removeEventListener('mousemove', _this.onDragging);\n document.removeEventListener('touchmove', _this.onDragging);\n document.removeEventListener('mouseup', _this.onDragEnd);\n document.removeEventListener('touchend', _this.onDragEnd);\n };\n return _this;\n }\n Object.defineProperty(Continuous.prototype, \"handleOffsetRatio\", {\n get: function () {\n return this.ifHorizontal(0.5, 0.5);\n },\n enumerable: false,\n configurable: true\n });\n Continuous.prototype.getBBox = function () {\n var _a = this.attributes, width = _a.width, height = _a.height;\n return new BBox(0, 0, width, height);\n };\n Continuous.prototype.render = function (attributes, container) {\n var _this = this;\n // 渲染顺序\n // 1. 绘制 title, 获得可用空间\n // 2. 绘制 label, handle\n // 3. 基于可用空间、label高度、handle 宽高,计算 ribbon 宽高\n // 4. 绘制 ribbon\n // 5. 调整 label、handle 位置\n var showLabel = attributes.showLabel;\n /** title */\n this.renderTitle(select(container));\n var _a = this.availableSpace, x = _a.x, y = _a.y;\n /** label */\n /** content */\n var contentGroup = select(container)\n .maybeAppendByClassName(CLASS_NAMES.contentGroup, 'g')\n .styles({ transform: \"translate(\".concat(x, \", \").concat(y, \")\") });\n var labelGroup = contentGroup.maybeAppendByClassName(CLASS_NAMES.labelGroup, 'g').styles({ zIndex: 1 });\n ifShow(!!showLabel, labelGroup, function (group) {\n _this.renderLabel(group);\n });\n var ribbonGroup = contentGroup.maybeAppendByClassName(CLASS_NAMES.ribbonGroup, 'g').styles({ zIndex: 0 });\n /** handle */\n this.handlesGroup = contentGroup.maybeAppendByClassName(CLASS_NAMES.handlesGroup, 'g').styles({ zIndex: 2 });\n this.renderHandles();\n /** ribbon */\n this.renderRibbon(ribbonGroup);\n this.renderIndicator(contentGroup);\n /** adjust */\n this.adjustLabel();\n this.adjustHandles();\n // this.adjustTitle();\n };\n Object.defineProperty(Continuous.prototype, \"range\", {\n get: function () {\n var _a = this.attributes, data = _a.data, domain = _a.domain;\n return domain ? { min: domain[0], max: domain[1] } : getMinMax(data);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Continuous.prototype, \"ribbonScale\", {\n get: function () {\n var _a = this.range, min = _a.min, max = _a.max;\n this.innerRibbonScale.update({\n domain: [min, max],\n range: [0, 1],\n });\n return this.innerRibbonScale;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Continuous.prototype, \"ribbonRange\", {\n get: function () {\n var _a = __read(this.selection, 2), min = _a[0], max = _a[1];\n var scale = this.ribbonScale;\n return [scale.map(min), scale.map(max)];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Continuous.prototype, \"selection\", {\n get: function () {\n var _a = this.range, min = _a.min, max = _a.max;\n var _b = this.attributes.defaultValue, _c = _b === void 0 ? [min, max] : _b, _d = __read(_c, 2), start = _d[0], end = _d[1];\n return [start, end];\n },\n enumerable: false,\n configurable: true\n });\n Continuous.prototype.ifHorizontal = function (a, b) {\n return ifHorizontal(this.attributes.orientation, typeof a === 'function' ? a() : a, typeof b === 'function' ? b() : b);\n };\n Continuous.prototype.renderTitle = function (container) {\n var _a = this.attributes, showTitle = _a.showTitle, titleText = _a.titleText, width = _a.width, height = _a.height;\n var style = subStyleProps(this.attributes, 'title');\n var finalTitleStyle = __assign(__assign({}, style), { width: width, height: height, text: titleText });\n var that = this;\n container\n .selectAll(CLASS_NAMES.title.class)\n .data(showTitle ? [titleText] : [])\n .join(function (enter) {\n return enter\n .append(function () { return new Title({ style: finalTitleStyle }); })\n .attr('className', CLASS_NAMES.title.name)\n .each(function () {\n that.title = this;\n });\n }, function (update) { return update.update(finalTitleStyle); }, function (exit) {\n return exit\n .each(function () {\n that.title = undefined;\n })\n .remove();\n });\n };\n Object.defineProperty(Continuous.prototype, \"availableSpace\", {\n get: function () {\n if (this.title)\n return this.title.getAvailableSpace();\n var _a = this.attributes, width = _a.width, height = _a.height;\n return new BBox(0, 0, width, height);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Continuous.prototype, \"labelFixedSpacing\", {\n get: function () {\n var showTick = this.attributes.showTick;\n return showTick ? 5 : 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Continuous.prototype, \"labelPosition\", {\n get: function () {\n var _a = this.attributes, orientation = _a.orientation, labelDirection = _a.labelDirection;\n var positions = {\n vertical: { positive: 'right', negative: 'left' },\n horizontal: { positive: 'bottom', negative: 'top' },\n };\n return positions[orientation][labelDirection];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Continuous.prototype, \"labelBBox\", {\n get: function () {\n var _a;\n var showLabel = this.attributes.showLabel;\n if (!showLabel)\n return new BBox(0, 0, 0, 0);\n if (this.cacheLabelBBox)\n return this.cacheLabelBBox;\n var _b = ((_a = this.label.querySelector(AXIS_CLASS_NAMES.labelGroup.class)) === null || _a === void 0 ? void 0 : _a.children.slice(-1)[0]).getBBox(), width = _b.width, height = _b.height;\n this.cacheLabelBBox = new BBox(0, 0, width, height);\n return this.cacheLabelBBox;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Continuous.prototype, \"labelShape\", {\n get: function () {\n var _a = this.attributes, showLabel = _a.showLabel, _b = _a.labelSpacing, labelSpacing = _b === void 0 ? 0 : _b;\n if (!showLabel)\n return { width: 0, height: 0, size: 0, length: 0 };\n var _c = this.labelBBox, width = _c.width, height = _c.height;\n var size = this.ifHorizontal(height, width) + labelSpacing + this.labelFixedSpacing;\n var length = this.ifHorizontal(width, height);\n return { width: width, height: height, size: size, length: length };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Continuous.prototype, \"ribbonBBox\", {\n get: function () {\n var _a = this.attributes, showHandle = _a.showHandle, userDefinedRibbonSize = _a.ribbonSize;\n var _b = this.availableSpace, availableWidth = _b.width, availableHeight = _b.height;\n var _c = this.labelShape, labelSize = _c.size, labelLength = _c.length;\n var _d = __read(this.ifHorizontal([availableHeight, availableWidth], [availableWidth, availableHeight]), 2), availableSize = _d[0], availableLength = _d[1];\n var _e = showHandle ? this.handleShape : { size: 0, length: 0 }, handleSize = _e.size, handleLength = _e.length;\n var handleRatio = this.handleOffsetRatio;\n var ribbonSize = 0;\n var labelPosition = this.labelPosition;\n if (userDefinedRibbonSize) {\n ribbonSize = userDefinedRibbonSize;\n }\n else if (['bottom', 'right'].includes(labelPosition)) {\n ribbonSize = Math.min(availableSize - labelSize, (availableSize - handleSize) / handleRatio);\n }\n else if (availableSize * (1 - handleRatio) > handleSize) {\n ribbonSize = Math.max(availableSize - labelSize, 0);\n }\n else\n ribbonSize = Math.max((availableSize - labelSize - handleSize) / handleRatio, 0);\n var edgeLength = Math.max(handleLength, labelLength);\n var ribbonLength = availableLength - edgeLength;\n var _f = __read(this.ifHorizontal([ribbonLength, ribbonSize], [ribbonSize, ribbonLength]), 2), width = _f[0], height = _f[1];\n // 需要考虑 handle 的占用空间\n // todo 为了防止因为 handle 文本变化导致的 ribbon 位置变化,handle size 取最大值\n var finalLabelOccupy = ['top', 'left'].includes(labelPosition) ? labelSize : 0;\n var _g = __read(this.ifHorizontal([edgeLength / 2, finalLabelOccupy], [finalLabelOccupy, edgeLength / 2]), 2), x = _g[0], y = _g[1];\n return new BBox(x, y, width, height);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Continuous.prototype, \"ribbonShape\", {\n get: function () {\n var _a = this.ribbonBBox, width = _a.width, height = _a.height;\n return this.ifHorizontal({ size: height, length: width }, { size: width, length: height });\n },\n enumerable: false,\n configurable: true\n });\n Continuous.prototype.renderRibbon = function (container) {\n var _a = this.attributes, data = _a.data, type = _a.type, orientation = _a.orientation, color = _a.color, block = _a.block;\n var ribbonStyle = subStyleProps(this.attributes, 'ribbon');\n var _b = this.range, min = _b.min, max = _b.max;\n var _c = this.ribbonBBox, x = _c.x, y = _c.y;\n var _d = this.ribbonShape, length = _d.length, size = _d.size;\n var style = deepAssign({\n transform: \"translate(\".concat(x, \", \").concat(y, \")\"),\n length: length,\n size: size,\n type: type,\n orientation: orientation,\n color: color,\n block: block,\n partition: data.map(function (d) { return (d.value - min) / (max - min); }),\n range: this.ribbonRange,\n }, ribbonStyle);\n this.ribbon = container.maybeAppendByClassName(CLASS_NAMES.ribbon, function () { return new Ribbon({ style: style }); }).update(style);\n };\n Continuous.prototype.getHandleClassName = function (type) {\n // @ts-ignore\n return \"\".concat(CLASS_NAMES.prefix(\"\".concat(type, \"-handle\")));\n };\n Continuous.prototype.renderHandles = function () {\n var _a = this.attributes, showHandle = _a.showHandle, orientation = _a.orientation;\n var handleStyle = subStyleProps(this.attributes, 'handle');\n var _b = __read(this.selection, 2), min = _b[0], max = _b[1];\n var style = __assign(__assign({}, handleStyle), { orientation: orientation });\n var _c = handleStyle.shape, shape = _c === void 0 ? 'slider' : _c;\n var HandleCtor = shape === 'basic' ? Handle : SliderHandle;\n var that = this;\n this.handlesGroup\n .selectAll(CLASS_NAMES.handle.class)\n .data(showHandle\n ? [\n { value: min, type: 'start' },\n { value: max, type: 'end' },\n ]\n : [], function (d) { return d.type; })\n .join(function (enter) {\n return enter\n .append(function () { return new HandleCtor({ style: style }); })\n .attr('className', function (_a) {\n var type = _a.type;\n return \"\".concat(CLASS_NAMES.handle, \" \").concat(that.getHandleClassName(type));\n })\n .each(function (_a) {\n var type = _a.type, labelText = _a.value;\n this.update({ labelText: labelText });\n var name = \"\".concat(type, \"Handle\");\n that[name] = this;\n this.addEventListener('pointerdown', that.onDragStart(type));\n });\n }, function (update) {\n return update.update(style).each(function (_a) {\n var labelText = _a.value;\n this.update({ labelText: labelText });\n });\n }, function (exit) {\n return exit\n .each(function (_a) {\n var type = _a.type;\n var name = \"\".concat(type, \"Handle\");\n that[name] = undefined;\n })\n .remove();\n });\n };\n Continuous.prototype.adjustHandles = function () {\n var _a = __read(this.selection, 2), min = _a[0], max = _a[1];\n this.setHandlePosition('start', min);\n this.setHandlePosition('end', max);\n };\n Object.defineProperty(Continuous.prototype, \"handleBBox\", {\n get: function () {\n if (this.cacheHandleBBox)\n return this.cacheHandleBBox;\n if (!this.attributes.showHandle)\n return new BBox(0, 0, 0, 0);\n var _a = this.startHandle.getBBox(), startHandleWidth = _a.width, startHandleHeight = _a.height;\n var _b = this.endHandle.getBBox(), endHandleWidth = _b.width, endHandleHeight = _b.height;\n var _c = __read([Math.max(startHandleWidth, endHandleWidth), Math.max(startHandleHeight, endHandleHeight)], 2), width = _c[0], height = _c[1];\n this.cacheHandleBBox = new BBox(0, 0, width, height);\n return this.cacheHandleBBox;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Continuous.prototype, \"handleShape\", {\n /**\n * 因为 handle label 的宽高是动态的,所以 handle bbox 是第一次渲染时的 bbox\n */\n get: function () {\n var _a = this.handleBBox, width = _a.width, height = _a.height;\n var _b = __read(this.ifHorizontal([height, width], [width, height]), 2), size = _b[0], length = _b[1];\n return { width: width, height: height, size: size, length: length };\n },\n enumerable: false,\n configurable: true\n });\n Continuous.prototype.setHandlePosition = function (type, value) {\n var handleFormatter = this.attributes.handleFormatter;\n var _a = this.ribbonBBox, ribbonX = _a.x, ribbonY = _a.y;\n var ribbonSize = this.ribbonShape.size;\n var offset = this.getOffset(value);\n var _b = __read(this.ifHorizontal([ribbonX + offset, ribbonY + ribbonSize * this.handleOffsetRatio], [ribbonX + ribbonSize * this.handleOffsetRatio, ribbonY + offset]), 2), x = _b[0], y = _b[1];\n var handle = this.handlesGroup.select(\".\".concat(this.getHandleClassName(type))).node();\n handle === null || handle === void 0 ? void 0 : handle.update({ transform: \"translate(\".concat(x, \", \").concat(y, \")\"), formatter: handleFormatter });\n };\n Continuous.prototype.renderIndicator = function (container) {\n var style = subStyleProps(this.attributes, 'indicator');\n this.indicator = container.maybeAppendByClassName(CLASS_NAMES.indicator, function () { return new Indicator({}); }).update(style);\n // this.hideIndicator();\n };\n Object.defineProperty(Continuous.prototype, \"labelData\", {\n get: function () {\n var _this = this;\n var data = this.attributes.data;\n return data.reduce(function (acc, curr, index, arr) {\n var _a, _b;\n var id = (_a = curr === null || curr === void 0 ? void 0 : curr.id) !== null && _a !== void 0 ? _a : index.toString();\n acc.push(__assign(__assign({}, curr), { id: id, index: index, type: 'value', label: (_b = curr === null || curr === void 0 ? void 0 : curr.label) !== null && _b !== void 0 ? _b : curr.value.toString(), value: _this.ribbonScale.map(curr.value) }));\n if (index < arr.length - 1) {\n var next = arr[index + 1];\n var _c = __read([curr.value, next.value], 2), cr = _c[0], nx = _c[1];\n var midVal = (cr + nx) / 2;\n acc.push(__assign(__assign({}, curr), { id: id, index: index, type: 'range', range: [cr, nx], label: [cr, nx].join('~'), value: _this.ribbonScale.map(midVal) }));\n }\n return acc;\n }, []);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Continuous.prototype, \"labelStyle\", {\n get: function () {\n var _a = __read(['center', 'middle'], 2), labelTextAlign = _a[0], labelTextBaseline = _a[1];\n var labelPosition = this.labelPosition;\n if (labelPosition === 'top')\n labelTextBaseline = 'bottom';\n else if (labelPosition === 'bottom')\n labelTextBaseline = 'top';\n else if (labelPosition === 'left')\n labelTextAlign = 'end';\n else if (labelPosition === 'right')\n labelTextAlign = 'start';\n return {\n labelTextAlign: labelTextAlign,\n labelTextBaseline: labelTextBaseline,\n };\n },\n enumerable: false,\n configurable: true\n });\n Continuous.prototype.renderLabel = function (container) {\n var _a = this.attributes, _b = _a.showTick, showTick = _b === void 0 ? false : _b, labelFilter = _a.labelFilter, labelFormatter = _a.labelFormatter;\n var tickStyle = subStyleProps(this.attributes, 'tick');\n var labelStyle = subStyleProps(this.attributes, 'label');\n var align = labelStyle.align;\n var style = deepAssign(__assign({ showLine: false, showGrid: false, showTick: showTick, type: 'linear', startPos: [0, 0], endPos: [0, 0], tickDirection: 'negative', labelTransform: 'rotate(0)' }, this.labelStyle), superStyleProps(tickStyle, 'tick'), superStyleProps(labelStyle, 'label'), { data: this.labelData });\n var functionStyle = {\n tickFilter: function (datum, index, data) {\n if ((datum === null || datum === void 0 ? void 0 : datum.type) !== 'value')\n return false;\n if (labelFilter)\n return labelFilter(datum, datum.index, data.filter(function (d) { return d.type !== 'value'; }));\n return true;\n },\n labelFilter: function (datum, index, data) {\n if ((datum === null || datum === void 0 ? void 0 : datum.type) !== align)\n return false;\n if (labelFilter)\n return labelFilter(datum, datum.index, data.filter(function (d) { return d.type === align; }));\n return true;\n },\n labelFormatter: labelFormatter,\n };\n var finalLabelStyle = __assign(__assign(__assign({}, style), functionStyle), { labelOverlap: [{ type: 'hide' }] });\n this.label = container.maybeAppendByClassName(CLASS_NAMES.label, function () { return new Axis({ style: finalLabelStyle }); }).node();\n this.label.update(finalLabelStyle, false);\n };\n Object.defineProperty(Continuous.prototype, \"labelAxisStyle\", {\n get: function () {\n // @ts-ignore\n var _a = this.attributes, showTick = _a.showTick, labelDirection = _a.labelDirection, labelSpacing = _a.labelSpacing, definedTickLength = _a.tickLength;\n var ribbonSize = this.ribbonShape.size;\n var labelPosition = this.labelPosition;\n var labelFixedSpacing = this.labelFixedSpacing;\n var _b = __read([0, 0, 0], 3), offset = _b[0], spacing = _b[1], tickLength = _b[2];\n var internalVal = definedTickLength !== null && definedTickLength !== void 0 ? definedTickLength : ribbonSize;\n if (showTick) {\n tickLength = internalVal;\n spacing = labelFixedSpacing;\n if (labelDirection === 'positive') {\n if (labelPosition === 'right') {\n offset = internalVal;\n tickLength = internalVal;\n }\n else if (labelPosition === 'bottom')\n offset = tickLength;\n }\n else if (labelDirection === 'negative') {\n if (labelPosition === 'top')\n offset = ribbonSize;\n else if (labelPosition === 'left')\n offset = ribbonSize;\n }\n }\n else if (labelDirection === 'positive') {\n if (labelPosition === 'right')\n spacing = internalVal;\n else if (labelPosition === 'bottom') {\n offset = ribbonSize + labelFixedSpacing;\n spacing = labelSpacing;\n }\n }\n else if (labelDirection === 'negative') {\n if (labelPosition === 'left')\n spacing = labelSpacing;\n else if (labelPosition === 'top')\n spacing = labelSpacing;\n }\n return { offset: offset, spacing: spacing, tickLength: tickLength };\n },\n enumerable: false,\n configurable: true\n });\n Continuous.prototype.adjustLabel = function () {\n var showLabel = this.attributes.showLabel;\n if (!showLabel)\n return;\n var _a = this.ribbonBBox, x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n var _b = this.labelAxisStyle, axisOffset = _b.offset, axisSpacing = _b.spacing, axisTickLength = _b.tickLength;\n var _c = __read(this.ifHorizontal([\n [x, y + axisOffset],\n [x + width, y + axisOffset],\n ], [\n [x + axisOffset, y + height],\n [x + axisOffset, y],\n ]), 2), startPos = _c[0], endPos = _c[1];\n this.label.update({\n startPos: startPos,\n endPos: endPos,\n tickLength: axisTickLength,\n labelSpacing: axisSpacing,\n }, false);\n };\n Continuous.prototype.bindEvents = function () {\n this.style.cursor = 'pointer';\n // 绑定 drag 开始事件\n this.ribbon.on('pointerdown', this.onDragStart('ribbon'));\n this.ribbon.on('pointermove', this.onHovering);\n this.addEventListener('pointerout', this.hideIndicator);\n };\n Continuous.prototype.showIndicator = function (value, text) {\n if (text === void 0) { text = \"\".concat(value); }\n var showIndicator = this.attributes.showIndicator;\n if (!showIndicator || typeof value !== 'number') {\n this.hideIndicator();\n return;\n }\n var _a = this.range, min = _a.min, max = _a.max;\n var _b = this.ribbonBBox, x = _b.x, y = _b.y;\n var safeValue = clamp(value, min, max);\n var offset = this.getOffset(safeValue);\n var pos = this.ifHorizontal([offset + x, y], [x, offset + y]);\n this.indicator.update({\n x: pos[0],\n y: pos[1],\n position: this.ifHorizontal('top', 'left'),\n labelText: text,\n });\n show(this.indicator.node());\n };\n Continuous.prototype.hideIndicator = function () {\n hide(this.indicator.node());\n };\n Continuous.prototype.updateMouse = function () {\n if (this.attributes.slidable)\n this.style.cursor = 'grabbing';\n };\n Continuous.prototype.setSelection = function (start, end) {\n this.updateSelection(start, end);\n };\n Continuous.prototype.updateSelection = function (stVal, endVal, isOffset) {\n var _a;\n if (isOffset === void 0) { isOffset = false; }\n var _b = __read(this.selection, 2), currSt = _b[0], currEnd = _b[1];\n var _c = __read([stVal, endVal], 2), start = _c[0], end = _c[1];\n if (isOffset) {\n // 获取当前值\n start += currSt;\n end += currEnd;\n }\n // 值校验\n var _d = this.range, min = _d.min, max = _d.max;\n _a = __read(getSafetySelections([min, max], [start, end], this.selection), 2), start = _a[0], end = _a[1];\n this.update({ defaultValue: [start, end] });\n this.dispatchSelection();\n };\n Object.defineProperty(Continuous.prototype, \"step\", {\n get: function () {\n var _a = this.attributes.step, step = _a === void 0 ? 1 : _a;\n var _b = this.range, min = _b.min, max = _b.max;\n if (isUndefined(step))\n return toPrecision((max - min) * STEP_RATIO, 0);\n return step;\n },\n enumerable: false,\n configurable: true\n });\n Continuous.prototype.getTickValue = function (value) {\n var _a = this.attributes, data = _a.data, block = _a.block;\n var min = this.range.min;\n if (block)\n return getNextTickValue(data.map(function (_a) {\n var value = _a.value;\n return value;\n }), value).tick;\n return getStepValueByValue(value, this.step, min);\n };\n /**\n * 事件触发的位置对应的value值\n */\n Continuous.prototype.getValueByCanvasPoint = function (e) {\n var _a = this.range, min = _a.min, max = _a.max;\n var _b = __read(this.ribbon.node().getPosition(), 2), x = _b[0], y = _b[1];\n var startPos = this.ifHorizontal(x, y);\n var currValue = this.ifHorizontal.apply(this, __spreadArray([], __read(getEventPos(e)), false));\n var offset = currValue - startPos;\n var value = clamp(this.getOffset(offset, true), min, max);\n return value;\n };\n /** reverse: 屏幕偏移量 -> 值 */\n Continuous.prototype.getOffset = function (value, reverse) {\n if (reverse === void 0) { reverse = false; }\n var _a = this.range, min = _a.min, max = _a.max;\n var ribbonLen = this.ribbonShape.length;\n var scale = this.eventToOffsetScale;\n scale.update({ domain: [min, max], range: [0, ribbonLen] });\n if (reverse)\n return scale.invert(value);\n return scale.map(value);\n };\n Continuous.prototype.getRealSelection = function (range) {\n var max = this.range.max;\n var _a = __read(range, 2), start = _a[0], end = _a[1];\n return this.ifHorizontal([start, end], [max - end, max - start]);\n };\n Continuous.prototype.getRealValue = function (value) {\n var max = this.range.max;\n return this.ifHorizontal(value, max - value);\n };\n Continuous.prototype.dispatchSelection = function () {\n var selection = this.getRealSelection(this.selection);\n var evt = new CustomEvent('valuechange', {\n detail: {\n value: selection,\n },\n });\n this.dispatchEvent(evt);\n };\n Continuous.prototype.dispatchIndicated = function (value, range) {\n var _this = this;\n var max = this.range.max;\n var detail = this.ifHorizontal(function () {\n return {\n value: value,\n range: range,\n };\n }, function () {\n return {\n value: max - value,\n range: range ? _this.getRealSelection(range) : undefined,\n };\n });\n var evt = new CustomEvent('indicate', {\n detail: detail,\n });\n this.dispatchEvent(evt);\n };\n return Continuous;\n}(Component));\nexport { Continuous };\n//# sourceMappingURL=continuous.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { parseColor } from '@antv/g';\nimport { Continuous } from '@antv/component';\nimport { Constant, Quantile, Quantize, Threshold } from '@antv/scale';\nimport { format } from '@antv/vendor/d3-format';\nimport { lastOf } from '../utils/array';\nimport { G2Layout, adaptor, inferComponentLayout, inferComponentShape, isHorizontal, scaleOf, titleContent, } from './utils';\nfunction updateShapeDimensions(shape, finalSize, orientation) {\n shape.size = finalSize;\n if (isHorizontal(orientation)) {\n shape.height = finalSize;\n }\n else {\n shape.width = finalSize;\n }\n return shape;\n}\nfunction inferContinuousShape(value, options, component) {\n const { size } = options;\n const shape = inferComponentShape(value, options, component);\n return updateShapeDimensions(shape, size, shape.orientation);\n}\nfunction getFormatter(max) {\n return (value) => ({\n value: value / max,\n label: String(value),\n });\n}\nfunction getQuantizeOrQuantileConfig(shape, colorScale, min, max, range) {\n const thresholds = colorScale.thresholds;\n const formatter = getFormatter(max);\n return Object.assign(Object.assign({}, shape), { color: range, data: [min, ...thresholds, max].map(formatter) });\n}\nfunction getThresholdConfig(shape, colorScale, range) {\n const thresholds = colorScale.thresholds;\n const data = [-Infinity, ...thresholds, Infinity].map((value, index) => ({\n value: index,\n label: value,\n }));\n return Object.assign(Object.assign({}, shape), { data, color: range, labelFilter: (datum, index) => {\n return index > 0 && index < data.length - 1;\n } });\n}\nfunction rangeOf(scale) {\n const { domain } = scale.getOptions();\n const [min, max] = [domain[0], lastOf(domain)];\n return [min, max];\n}\n/**\n * if color scale is not defined, create a constant color scale based on default color\n * @param scale\n * @param theme\n */\nfunction createColorScale(scale, defaultColor) {\n const options = scale.getOptions();\n const newScale = scale.clone();\n newScale.update(Object.assign(Object.assign({}, options), { range: [parseColor(defaultColor).toString()] }));\n return newScale;\n}\nfunction getLinearConfig(shape, colorScale, sizeScale, opacityScale, scales, theme) {\n const { length } = shape;\n const definedScale = sizeScale || opacityScale;\n // Only use defaultColor when there is no color scale\n // in this view.\n const defaultColor = scales.color\n ? theme.legendContinuous.ribbonFill || 'black'\n : theme.color;\n const scale = colorScale || createColorScale(definedScale, defaultColor);\n const [min, max] = rangeOf(scale);\n const [domainMin, domainMax] = rangeOf([colorScale, sizeScale, opacityScale]\n .filter((d) => d !== undefined)\n .find((d) => !(d instanceof Constant)));\n return Object.assign(Object.assign({}, shape), { domain: [domainMin, domainMax], data: scale.getTicks().map((value) => ({ value })), color: new Array(Math.floor(length)).fill(0).map((d, i) => {\n const value = ((max - min) / (length - 1)) * i + min;\n const color = scale.map(value) || defaultColor;\n const opacity = opacityScale ? opacityScale.map(value) : 1;\n return color.replace(/rgb[a]*\\(([\\d]{1,3}) *, *([\\d]{1,3}) *, *([\\d]{1,3})[\\S\\s]*\\)/, (match, p1, p2, p3) => `rgba(${p1}, ${p2}, ${p3}, ${opacity})`);\n }) });\n}\nfunction inferContinuousConfig(scales, scale, value, options, component, theme) {\n const colorScale = scaleOf(scales, 'color');\n const shape = inferContinuousShape(value, options, component);\n if (colorScale instanceof Threshold) {\n const { range } = colorScale.getOptions();\n const [min, max] = rangeOf(colorScale);\n // for quantize, quantile scale\n if (colorScale instanceof Quantize || colorScale instanceof Quantile) {\n return getQuantizeOrQuantileConfig(shape, colorScale, min, max, range);\n }\n // for threshold\n return getThresholdConfig(shape, colorScale, range);\n }\n // for linear, pow, sqrt, log, time, utc scale\n const sizeScale = scaleOf(scales, 'size');\n const opacityScale = scaleOf(scales, 'opacity');\n return getLinearConfig(shape, colorScale, sizeScale, opacityScale, scale, theme);\n}\n/**\n * Guide Component for continuous color scale.\n * @todo Custom style.\n */\nexport const LegendContinuous = (options) => {\n const { labelFormatter, layout, order, orientation, position, size, title, style, crossPadding, padding } = options, rest = __rest(options, [\"labelFormatter\", \"layout\", \"order\", \"orientation\", \"position\", \"size\", \"title\", \"style\", \"crossPadding\", \"padding\"]);\n return ({ scales, value, theme, scale }) => {\n const { bbox } = value;\n const { x, y, width, height } = bbox;\n const finalLayout = inferComponentLayout(position, layout);\n const { legendContinuous: legendTheme = {} } = theme;\n const finalStyle = adaptor(Object.assign({}, legendTheme, Object.assign(Object.assign({ titleText: titleContent(title), labelAlign: 'value', labelFormatter: typeof labelFormatter === 'string'\n ? (d) => format(labelFormatter)(d.label)\n : labelFormatter }, inferContinuousConfig(scales, scale, value, options, LegendContinuous, theme)), style), rest));\n const layoutWrapper = new G2Layout({\n style: Object.assign(Object.assign({ x,\n y,\n width,\n height }, finalLayout), { \n // @ts-ignore\n subOptions: finalStyle }),\n });\n layoutWrapper.appendChild(new Continuous({\n className: 'legend-continuous',\n style: finalStyle,\n }));\n return layoutWrapper;\n };\n};\nLegendContinuous.props = {\n defaultPosition: 'top',\n defaultOrientation: 'vertical',\n defaultOrder: 1,\n defaultSize: 60,\n defaultLength: 200,\n defaultLegendSize: 60,\n defaultPadding: [20, 10],\n defaultCrossPadding: [12, 12], // [horizontal, vertical]\n};\n//# sourceMappingURL=legendContinuous.js.map","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { Form } from 'antd';\nimport React from 'react';\nimport { BaseForm } from \"../../BaseForm\";\nimport { EditOrReadOnlyContext } from \"../../BaseForm/EditOrReadOnlyContext\";\nimport { Group, ProFormItem } from \"../../components\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction ProForm(props) {\n return /*#__PURE__*/_jsx(BaseForm, _objectSpread({\n layout: \"vertical\",\n contentRender: function contentRender(items, submitter) {\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [items, submitter]\n });\n }\n }, props));\n}\nProForm.Group = Group;\nProForm.useForm = Form.useForm;\nProForm.Item = ProFormItem;\nProForm.useWatch = Form.useWatch;\nProForm.ErrorList = Form.ErrorList;\nProForm.Provider = Form.Provider;\nProForm.useFormInstance = Form.useFormInstance;\nProForm.EditOrReadOnlyContext = EditOrReadOnlyContext;\nexport { ProForm };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.pathToRegexp = exports.tokensToRegexp = exports.regexpToFunction = exports.match = exports.tokensToFunction = exports.compile = exports.parse = void 0;\n/**\n * Tokenize input string.\n */\n\nfunction lexer(str) {\n var tokens = [];\n var i = 0;\n\n while (i < str.length) {\n var char = str[i];\n\n if (char === '*' || char === '+' || char === '?') {\n tokens.push({\n type: 'MODIFIER',\n index: i,\n value: str[i++]\n });\n continue;\n }\n\n if (char === '\\\\') {\n tokens.push({\n type: 'ESCAPED_CHAR',\n index: i++,\n value: str[i++]\n });\n continue;\n }\n\n if (char === '{') {\n tokens.push({\n type: 'OPEN',\n index: i,\n value: str[i++]\n });\n continue;\n }\n\n if (char === '}') {\n tokens.push({\n type: 'CLOSE',\n index: i,\n value: str[i++]\n });\n continue;\n }\n\n if (char === ':') {\n var name = '';\n var j = i + 1;\n\n while (j < str.length) {\n var code = str.charCodeAt(j);\n\n if ( // `0-9`\n code >= 48 && code <= 57 || // `A-Z`\n code >= 65 && code <= 90 || // `a-z`\n code >= 97 && code <= 122 || // `_`\n code === 95) {\n name += str[j++];\n continue;\n }\n\n break;\n }\n\n if (!name) throw new TypeError('Missing parameter name at ' + i);\n tokens.push({\n type: 'NAME',\n index: i,\n value: name\n });\n i = j;\n continue;\n }\n\n if (char === '(') {\n var count = 1;\n var pattern = '';\n var j = i + 1;\n\n if (str[j] === '?') {\n throw new TypeError('Pattern cannot start with \"?\" at ' + j);\n }\n\n while (j < str.length) {\n if (str[j] === '\\\\') {\n pattern += str[j++] + str[j++];\n continue;\n }\n\n if (str[j] === ')') {\n count--;\n\n if (count === 0) {\n j++;\n break;\n }\n } else if (str[j] === '(') {\n count++;\n\n if (str[j + 1] !== '?') {\n throw new TypeError('Capturing groups are not allowed at ' + j);\n }\n }\n\n pattern += str[j++];\n }\n\n if (count) throw new TypeError('Unbalanced pattern at ' + i);\n if (!pattern) throw new TypeError('Missing pattern at ' + i);\n tokens.push({\n type: 'PATTERN',\n index: i,\n value: pattern\n });\n i = j;\n continue;\n }\n\n tokens.push({\n type: 'CHAR',\n index: i,\n value: str[i++]\n });\n }\n\n tokens.push({\n type: 'END',\n index: i,\n value: ''\n });\n return tokens;\n}\n/**\n * Parse a string for the raw tokens.\n */\n\n\nfunction parse(str, options) {\n if (options === void 0) {\n // eslint-disable-next-line no-param-reassign\n options = {};\n }\n\n var tokens = lexer(str);\n var _a = options.prefixes,\n prefixes = _a === void 0 ? './' : _a;\n var defaultPattern = '[^' + escapeString(options.delimiter || '/#?') + ']+?';\n var result = [];\n var key = 0;\n var i = 0;\n var path = '';\n\n var tryConsume = function tryConsume(type) {\n if (i < tokens.length && tokens[i].type === type) return tokens[i++].value;\n };\n\n var mustConsume = function mustConsume(type) {\n var value = tryConsume(type);\n if (value !== undefined) return value;\n var _a = tokens[i],\n nextType = _a.type,\n index = _a.index;\n throw new TypeError('Unexpected ' + nextType + ' at ' + index + ', expected ' + type);\n };\n\n var consumeText = function consumeText() {\n var result = '';\n var value; // tslint:disable-next-line\n\n while (value = tryConsume('CHAR') || tryConsume('ESCAPED_CHAR')) {\n result += value;\n }\n\n return result;\n };\n\n while (i < tokens.length) {\n var char = tryConsume('CHAR');\n var name = tryConsume('NAME');\n var pattern = tryConsume('PATTERN');\n\n if (name || pattern) {\n var prefix = char || '';\n\n if (prefixes.indexOf(prefix) === -1) {\n path += prefix;\n prefix = '';\n }\n\n if (path) {\n result.push(path);\n path = '';\n }\n\n result.push({\n name: name || key++,\n prefix: prefix,\n suffix: '',\n pattern: pattern || defaultPattern,\n modifier: tryConsume('MODIFIER') || ''\n });\n continue;\n }\n\n var value = char || tryConsume('ESCAPED_CHAR');\n\n if (value) {\n path += value;\n continue;\n }\n\n if (path) {\n result.push(path);\n path = '';\n }\n\n var open = tryConsume('OPEN');\n\n if (open) {\n var prefix = consumeText();\n var name_1 = tryConsume('NAME') || '';\n var pattern_1 = tryConsume('PATTERN') || '';\n var suffix = consumeText();\n mustConsume('CLOSE');\n result.push({\n name: name_1 || (pattern_1 ? key++ : ''),\n pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1,\n prefix: prefix,\n suffix: suffix,\n modifier: tryConsume('MODIFIER') || ''\n });\n continue;\n }\n\n mustConsume('END');\n }\n\n return result;\n}\n\nexports.parse = parse;\n/**\n * Compile a string to a template function for the path.\n */\n\nfunction compile(str, options) {\n return tokensToFunction(parse(str, options), options);\n}\n\nexports.compile = compile;\n/**\n * Expose a method for transforming tokens into the path function.\n */\n\nfunction tokensToFunction(tokens, options) {\n if (options === void 0) {\n // eslint-disable-next-line no-param-reassign\n options = {};\n }\n\n var reFlags = flags(options);\n var _a = options.encode,\n encode = _a === void 0 ? function (x) {\n return x;\n } : _a,\n _b = options.validate,\n validate = _b === void 0 ? true : _b; // Compile all the tokens into regexps.\n\n var matches = tokens.map(function (token) {\n if (_typeof(token) === 'object') {\n return new RegExp('^(?:' + token.pattern + ')$', reFlags);\n }\n });\n return function (data) {\n var path = '';\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n path += token;\n continue;\n }\n\n var value = data ? data[token.name] : undefined;\n var optional = token.modifier === '?' || token.modifier === '*';\n var repeat = token.modifier === '*' || token.modifier === '+';\n\n if (Array.isArray(value)) {\n if (!repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but got an array');\n }\n\n if (value.length === 0) {\n if (optional) continue;\n throw new TypeError('Expected \"' + token.name + '\" to not be empty');\n }\n\n for (var j = 0; j < value.length; j++) {\n var segment = encode(value[j], token);\n\n if (validate && !matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but got \"' + segment + '\"');\n }\n\n path += token.prefix + segment + token.suffix;\n }\n\n continue;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n var segment = encode(String(value), token);\n\n if (validate && !matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but got \"' + segment + '\"');\n }\n\n path += token.prefix + segment + token.suffix;\n continue;\n }\n\n if (optional) continue;\n var typeOfMessage = repeat ? 'an array' : 'a string';\n throw new TypeError('Expected \"' + token.name + '\" to be ' + typeOfMessage);\n }\n\n return path;\n };\n}\n\nexports.tokensToFunction = tokensToFunction;\n/**\n * Create path match function from `path-to-regexp` spec.\n */\n\nfunction match(str, options) {\n var keys = [];\n var re = pathToRegexp(str, keys, options);\n return regexpToFunction(re, keys, options);\n}\n\nexports.match = match;\n/**\n * Create a path match function from `path-to-regexp` output.\n */\n\nfunction regexpToFunction(re, keys, options) {\n if (options === void 0) {\n // eslint-disable-next-line no-param-reassign\n options = {};\n }\n\n var _a = options.decode,\n decode = _a === void 0 ? function (x) {\n return x;\n } : _a;\n return function (pathname) {\n var m = re.exec(pathname);\n if (!m) return false;\n var path = m[0],\n index = m.index;\n var params = Object.create(null);\n\n var _loop_1 = function _loop_1(i) {\n // tslint:disable-next-line\n if (m[i] === undefined) return 'continue';\n var key = keys[i - 1];\n\n if (key.modifier === '*' || key.modifier === '+') {\n params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) {\n return decode(value, key);\n });\n } else {\n params[key.name] = decode(m[i], key);\n }\n };\n\n for (var i = 1; i < m.length; i++) {\n _loop_1(i);\n }\n\n return {\n path: path,\n index: index,\n params: params\n };\n };\n}\n\nexports.regexpToFunction = regexpToFunction;\n/**\n * Escape a regular expression string.\n */\n\nfunction escapeString(str) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, '\\\\$1');\n}\n/**\n * Get the flags for a regexp from the options.\n */\n\n\nfunction flags(options) {\n return options && options.sensitive ? '' : 'i';\n}\n/**\n * Pull out keys from a regexp.\n */\n\n\nfunction regexpToRegexp(path, keys) {\n if (!keys) return path; // Use a negative lookahead to match only capturing groups.\n\n var groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: '',\n suffix: '',\n modifier: '',\n pattern: ''\n });\n }\n }\n\n return path;\n}\n/**\n * Transform an array into a regexp.\n */\n\n\nfunction arrayToRegexp(paths, keys, options) {\n var parts = paths.map(function (path) {\n return pathToRegexp(path, keys, options).source;\n });\n return new RegExp('(?:' + parts.join('|') + ')', flags(options));\n}\n/**\n * Create a path regexp from string input.\n */\n\n\nfunction stringToRegexp(path, keys, options) {\n return tokensToRegexp(parse(path, options), keys, options);\n}\n/**\n * Expose a function for taking tokens and returning a RegExp.\n */\n\n\nfunction tokensToRegexp(tokens, keys, options) {\n if (options === void 0) {\n // eslint-disable-next-line no-param-reassign\n options = {};\n }\n\n var _a = options.strict,\n strict = _a === void 0 ? false : _a,\n _b = options.start,\n start = _b === void 0 ? true : _b,\n _c = options.end,\n end = _c === void 0 ? true : _c,\n _d = options.encode,\n encode = _d === void 0 ? function (x) {\n return x;\n } : _d;\n var endsWith = '[' + escapeString(options.endsWith || '') + ']|$';\n var delimiter = '[' + escapeString(options.delimiter || '/#?') + ']';\n var route = start ? '^' : ''; // Iterate over the tokens and create our regexp string.\n\n for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n var token = tokens_1[_i];\n\n if (typeof token === 'string') {\n route += escapeString(encode(token));\n } else {\n var prefix = escapeString(encode(token.prefix));\n var suffix = escapeString(encode(token.suffix));\n\n if (token.pattern) {\n if (keys) keys.push(token);\n\n if (prefix || suffix) {\n if (token.modifier === '+' || token.modifier === '*') {\n var mod = token.modifier === '*' ? '?' : '';\n route += '(?:' + prefix + '((?:' + token.pattern + ')(?:' + suffix + prefix + '(?:' + token.pattern + '))*)' + suffix + ')' + mod;\n } else {\n route += '(?:' + prefix + '(' + token.pattern + ')' + suffix + ')' + token.modifier;\n }\n } else {\n route += '(' + token.pattern + ')' + token.modifier;\n }\n } else {\n route += '(?:' + prefix + suffix + ')' + token.modifier;\n }\n }\n }\n\n if (end) {\n if (!strict) route += delimiter + '?';\n route += !options.endsWith ? '$' : '(?=' + endsWith + ')';\n } else {\n var endToken = tokens[tokens.length - 1];\n var isEndDelimited = typeof endToken === 'string' ? delimiter.indexOf(endToken[endToken.length - 1]) > -1 : // tslint:disable-next-line\n endToken === undefined;\n\n if (!strict) {\n route += '(?:' + delimiter + '(?=' + endsWith + '))?';\n }\n\n if (!isEndDelimited) {\n route += '(?=' + delimiter + '|' + endsWith + ')';\n }\n }\n\n return new RegExp(route, flags(options));\n}\n\nexports.tokensToRegexp = tokensToRegexp;\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n */\n\nfunction pathToRegexp(path, keys, options) {\n if (path instanceof RegExp) return regexpToRegexp(path, keys);\n if (Array.isArray(path)) return arrayToRegexp(path, keys, options);\n return stringToRegexp(path, keys, options);\n}\n\nexports.pathToRegexp = pathToRegexp;","import { traverseElements } from './traverse-elements';\nconst defaultStyle = {\n visibility: 'visible',\n opacity: 1,\n fillOpacity: 1,\n strokeOpacity: 1,\n};\nexport function getStyle(element, key) {\n let value;\n traverseElements(element, (el) => {\n var _a;\n if (el.tagName !== 'g' && ((_a = el.style) === null || _a === void 0 ? void 0 : _a[key]) !== undefined) {\n value = el.style[key];\n return true;\n }\n return false;\n });\n return value !== null && value !== void 0 ? value : defaultStyle[key];\n}\nexport function setStyle(element, key, value, recursive) {\n element.style[key] = value;\n if (recursive) {\n element.children.forEach((child) => setStyle(child, key, value, recursive));\n }\n}\nexport function hide(element) {\n setStyle(element, 'visibility', 'hidden', true);\n}\nexport function show(element) {\n setStyle(element, 'visibility', 'visible', true);\n}\n//# sourceMappingURL=style.js.map","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { set, isBoolean } from '../utils';\nimport { CONFIG_SHAPE } from '../constants';\n/**\n * @description 处理堆叠图配置line|point|area时的transform问题\n */\nexport function shapeStack(params) {\n var options = params.options;\n var stack = options.stack, tooltip = options.tooltip, xField = options.xField;\n if (!stack)\n return params;\n var shapes = CONFIG_SHAPE.map(function (item) { return item.type; }).filter(function (item) { return !!item; });\n var hasStack = false;\n shapes.forEach(function (shape) {\n if (options[shape]) {\n hasStack = true;\n /** 堆叠特殊处理,详见https://github.com/antvis/G2/issues/4515 */\n set(options, [shape, 'stack'], __assign({ y1: 'y' }, (typeof stack === 'object' ? stack : {})));\n }\n });\n /** 调整通道,避免多份tooltip */\n if (hasStack && !isBoolean(tooltip) && !tooltip) {\n set(options, 'tooltip', {\n title: xField,\n items: [\n {\n channel: 'y',\n },\n ],\n });\n }\n return params;\n}\n","import { flow } from '../utils';\nimport { shapeStack } from './shape-stack';\n/**\n * 根据图表类型新增一些高阶 Mark\n */\nexport function mark(params) {\n return flow(shapeStack)(params);\n}\n","var isObjectLike = function (value) {\n /**\n * isObjectLike({}) => true\n * isObjectLike([1, 2, 3]) => true\n * isObjectLike(Function) => false\n * isObjectLike(null) => false\n */\n return typeof value === 'object' && value !== null;\n};\nexport default isObjectLike;\n//# sourceMappingURL=is-object-like.js.map","import React from 'react';\nvar FieldContext = /*#__PURE__*/React.createContext({});\nexport { FieldContext };\nexport default FieldContext;","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","import each from './each';\nimport isArray from './is-array';\nimport isPlainObject from './is-plain-object';\nvar reduce = function (arr, fn, init) {\n if (!isArray(arr) && !isPlainObject(arr)) {\n return arr;\n }\n var result = init;\n each(arr, function (data, i) {\n result = fn(result, data, i);\n });\n return result;\n};\nexport default reduce;\n//# sourceMappingURL=reduce.js.map","\"use strict\";\n\nvar utils = require(\"./utils\");\n\nmodule.exports = function batchProcessorMaker(options) {\n options = options || {};\n var reporter = options.reporter;\n var asyncProcess = utils.getOption(options, \"async\", true);\n var autoProcess = utils.getOption(options, \"auto\", true);\n\n if(autoProcess && !asyncProcess) {\n reporter && reporter.warn(\"Invalid options combination. auto=true and async=false is invalid. Setting async=true.\");\n asyncProcess = true;\n }\n\n var batch = Batch();\n var asyncFrameHandler;\n var isProcessing = false;\n\n function addFunction(level, fn) {\n if(!isProcessing && autoProcess && asyncProcess && batch.size() === 0) {\n // Since this is async, it is guaranteed to be executed after that the fn is added to the batch.\n // This needs to be done before, since we're checking the size of the batch to be 0.\n processBatchAsync();\n }\n\n batch.add(level, fn);\n }\n\n function processBatch() {\n // Save the current batch, and create a new batch so that incoming functions are not added into the currently processing batch.\n // Continue processing until the top-level batch is empty (functions may be added to the new batch while processing, and so on).\n isProcessing = true;\n while (batch.size()) {\n var processingBatch = batch;\n batch = Batch();\n processingBatch.process();\n }\n isProcessing = false;\n }\n\n function forceProcessBatch(localAsyncProcess) {\n if (isProcessing) {\n return;\n }\n\n if(localAsyncProcess === undefined) {\n localAsyncProcess = asyncProcess;\n }\n\n if(asyncFrameHandler) {\n cancelFrame(asyncFrameHandler);\n asyncFrameHandler = null;\n }\n\n if(localAsyncProcess) {\n processBatchAsync();\n } else {\n processBatch();\n }\n }\n\n function processBatchAsync() {\n asyncFrameHandler = requestFrame(processBatch);\n }\n\n function clearBatch() {\n batch = {};\n batchSize = 0;\n topLevel = 0;\n bottomLevel = 0;\n }\n\n function cancelFrame(listener) {\n // var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout;\n var cancel = clearTimeout;\n return cancel(listener);\n }\n\n function requestFrame(callback) {\n // var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function(fn) { return window.setTimeout(fn, 20); };\n var raf = function(fn) { return setTimeout(fn, 0); };\n return raf(callback);\n }\n\n return {\n add: addFunction,\n force: forceProcessBatch\n };\n};\n\nfunction Batch() {\n var batch = {};\n var size = 0;\n var topLevel = 0;\n var bottomLevel = 0;\n\n function add(level, fn) {\n if(!fn) {\n fn = level;\n level = 0;\n }\n\n if(level > topLevel) {\n topLevel = level;\n } else if(level < bottomLevel) {\n bottomLevel = level;\n }\n\n if(!batch[level]) {\n batch[level] = [];\n }\n\n batch[level].push(fn);\n size++;\n }\n\n function process() {\n for(var level = bottomLevel; level <= topLevel; level++) {\n var fns = batch[level];\n\n for(var i = 0; i < fns.length; i++) {\n var fn = fns[i];\n fn();\n }\n }\n }\n\n function getSize() {\n return size;\n }\n\n return {\n add: add,\n process: process,\n size: getSize\n };\n}\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n","import each from './each';\nimport isFunction from './is-function';\nvar keys = Object.keys\n ? function (obj) { return Object.keys(obj); }\n : function (obj) {\n var result = [];\n each(obj, function (value, key) {\n if (!(isFunction(obj) && key === 'prototype')) {\n result.push(key);\n }\n });\n return result;\n };\nexport default keys;\n//# sourceMappingURL=keys.js.map","export default function(x) {\n return function() {\n return x;\n };\n}\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","export const MapTheme = {\n light: 'mapbox://styles/zcxduo/ck2ypyb1r3q9o1co1766dex29',\n dark: 'mapbox://styles/zcxduo/ck241p6413s0b1cpayzldv7x7',\n normal: 'mapbox://styles/mapbox/streets-v11',\n blank: {\n version: 8,\n // sprite: 'https://lzxue.github.io/font-glyphs/sprite/sprite',\n // glyphs:\n // 'https://gw.alipayobjects.com/os/antvdemo/assets/mapbox/glyphs/{fontstack}/{range}.pbf',\n sources: {},\n layers: [{\n id: 'background',\n type: 'background',\n layout: {\n visibility: 'none'\n }\n }]\n }\n};","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n/**\n * MapboxService\n */\n\nimport { CoordinateSystem, MapServiceEvent } from '@antv/l7-core';\nimport { DOM } from '@antv/l7-utils';\nimport { EventEmitter } from 'eventemitter3';\nimport { SimpleMapCoord } from \"./simpleMapCoord\";\nimport { MapTheme } from \"./theme\";\nconst EventMap = {\n mapmove: 'move',\n camerachange: 'move',\n zoomchange: 'zoom',\n dragging: 'drag'\n};\nconst LNGLAT_OFFSET_ZOOM_THRESHOLD = 12;\nexport default class BaseMapService {\n constructor(container) {\n _defineProperty(this, \"version\", 'DEFAUlTMAP');\n _defineProperty(this, \"map\", void 0);\n _defineProperty(this, \"simpleMapCoord\", new SimpleMapCoord());\n // 背景色\n _defineProperty(this, \"bgColor\", 'rgba(0.0, 0.0, 0.0, 0.0)');\n _defineProperty(this, \"config\", void 0);\n _defineProperty(this, \"configService\", void 0);\n _defineProperty(this, \"coordinateSystemService\", void 0);\n _defineProperty(this, \"eventEmitter\", void 0);\n _defineProperty(this, \"markerContainer\", void 0);\n _defineProperty(this, \"cameraChangedCallback\", void 0);\n _defineProperty(this, \"$mapContainer\", void 0);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _defineProperty(this, \"handleCameraChanged\", e => {\n const {\n lat,\n lng\n } = this.map.getCenter();\n // Tip: 统一触发地图变化事件\n this.emit('mapchange');\n // resync\n this.viewport.syncWithMapCamera({\n bearing: this.map.getBearing(),\n center: [lng, lat],\n viewportHeight: this.map.transform.height,\n pitch: this.map.getPitch(),\n viewportWidth: this.map.transform.width,\n zoom: this.map.getZoom(),\n // mapbox 中固定相机高度为 viewport 高度的 1.5 倍\n cameraHeight: 0\n });\n this.updateCoordinateSystemService();\n this.cameraChangedCallback(this.viewport);\n });\n this.config = container.mapConfig;\n this.configService = container.globalConfigService;\n this.coordinateSystemService = container.coordinateSystemService;\n this.eventEmitter = new EventEmitter();\n }\n setBgColor(color) {\n this.bgColor = color;\n }\n\n // init\n addMarkerContainer() {\n const container = this.map.getCanvasContainer();\n this.markerContainer = DOM.create('div', 'l7-marker-container', container);\n this.markerContainer.setAttribute('tabindex', '-1');\n }\n getMarkerContainer() {\n return this.markerContainer;\n }\n getOverlayContainer() {\n return undefined;\n }\n getCanvasOverlays() {\n return undefined;\n }\n\n // map event\n on(type, handle) {\n if (MapServiceEvent.indexOf(type) !== -1) {\n this.eventEmitter.on(type, handle);\n } else {\n // 统一事件名称\n this.map.on(EventMap[type] || type, handle);\n }\n }\n off(type, handle) {\n this.map.off(EventMap[type] || type, handle);\n this.eventEmitter.off(type, handle);\n }\n getContainer() {\n return this.map.getContainer();\n }\n getMapCanvasContainer() {\n return this.map.getCanvasContainer();\n }\n getSize() {\n if (this.version === 'SIMPLE') {\n return this.simpleMapCoord.getSize();\n }\n const size = this.map.transform;\n return [size.width, size.height];\n }\n // get mapStatus method\n\n getType() {\n return 'default';\n }\n getZoom() {\n return this.map.getZoom();\n }\n setZoom(zoom) {\n return this.map.setZoom(zoom);\n }\n getCenter() {\n return this.map.getCenter();\n }\n setCenter(lnglat) {\n this.map.setCenter(lnglat);\n }\n getPitch() {\n return this.map.getPitch();\n }\n getRotation() {\n return this.map.getBearing();\n }\n getBounds() {\n return this.map.getBounds().toArray();\n }\n getMinZoom() {\n return this.map.getMinZoom();\n }\n getMaxZoom() {\n return this.map.getMaxZoom();\n }\n setRotation(rotation) {\n this.map.setBearing(rotation);\n }\n zoomIn(option, eventData) {\n this.map.zoomIn(option, eventData);\n }\n zoomOut(option, eventData) {\n this.map.zoomOut(option, eventData);\n }\n setPitch(pitch) {\n return this.map.setPitch(pitch);\n }\n panTo(p) {\n this.map.panTo(p);\n }\n panBy(x = 0, y = 0) {\n this.map.panBy([x, y]);\n }\n fitBounds(bound, fitBoundsOptions) {\n this.map.fitBounds(bound, fitBoundsOptions);\n }\n setMaxZoom(max) {\n this.map.setMaxZoom(max);\n }\n setMinZoom(min) {\n this.map.setMinZoom(min);\n }\n setMapStatus(option) {\n if (option.doubleClickZoom === true) {\n this.map.doubleClickZoom.enable();\n }\n if (option.doubleClickZoom === false) {\n this.map.doubleClickZoom.disable();\n }\n if (option.dragEnable === false) {\n this.map.dragPan.disable();\n }\n if (option.dragEnable === true) {\n this.map.dragPan.enable();\n }\n if (option.rotateEnable === false) {\n this.map.dragRotate.disable();\n }\n if (option.dragEnable === true) {\n this.map.dragRotate.enable();\n }\n if (option.keyboardEnable === false) {\n this.map.keyboard.disable();\n }\n if (option.keyboardEnable === true) {\n this.map.keyboard.enable();\n }\n if (option.zoomEnable === false) {\n this.map.scrollZoom.disable();\n }\n if (option.zoomEnable === true) {\n this.map.scrollZoom.enable();\n }\n }\n setZoomAndCenter(zoom, center) {\n this.map.flyTo({\n zoom,\n center\n });\n }\n setMapStyle(style) {\n var _this$map;\n // @ts-ignore\n (_this$map = this.map) === null || _this$map === void 0 || _this$map.setStyle(this.getMapStyleValue(style));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n meterToCoord(center, outer) {\n return 1.0;\n }\n\n // TODO: 计算像素坐标\n pixelToLngLat(pixel) {\n return this.map.unproject(pixel);\n }\n lngLatToPixel(lnglat) {\n return this.map.project(lnglat);\n }\n containerToLngLat(pixel) {\n return this.map.unproject(pixel);\n }\n lngLatToContainer(lnglat) {\n return this.map.project(lnglat);\n }\n getMapStyle() {\n try {\n var _this$map$getStyle$sp;\n // @ts-ignore\n const styleUrl = (_this$map$getStyle$sp = this.map.getStyle().sprite) !== null && _this$map$getStyle$sp !== void 0 ? _this$map$getStyle$sp : '';\n // 将 Mapbox 返回的样式字符串转成传入 style 保持一致\n if (/^mapbox:\\/\\/sprites\\/zcxduo\\/\\w+\\/\\w+$/.test(styleUrl)) {\n return styleUrl === null || styleUrl === void 0 ? void 0 : styleUrl.replace(/\\/\\w+$/, '').replace(/sprites/, 'styles');\n }\n return styleUrl;\n } catch (e) {\n return '';\n }\n }\n getMapStyleConfig() {\n return MapTheme;\n }\n getMapStyleValue(name) {\n var _this$getMapStyleConf;\n return (_this$getMapStyleConf = this.getMapStyleConfig()[name]) !== null && _this$getMapStyleConf !== void 0 ? _this$getMapStyleConf : name;\n }\n destroy() {\n this.eventEmitter.removeAllListeners();\n if (this.map) {\n this.map.remove();\n this.$mapContainer = null;\n }\n }\n emit(name, ...args) {\n this.eventEmitter.emit(name, ...args);\n }\n once(name, ...args) {\n this.eventEmitter.once(name, ...args);\n }\n getMapContainer() {\n return this.$mapContainer;\n }\n exportMap(type) {\n var _this$map2;\n // @ts-ignore\n const renderCanvas = (_this$map2 = this.map) === null || _this$map2 === void 0 ? void 0 : _this$map2.getCanvas();\n const layersPng = type === 'jpg' ? renderCanvas === null || renderCanvas === void 0 ? void 0 : renderCanvas.toDataURL('image/jpeg') : renderCanvas === null || renderCanvas === void 0 ? void 0 : renderCanvas.toDataURL('image/png');\n return layersPng;\n }\n onCameraChanged(callback) {\n this.cameraChangedCallback = callback;\n }\n creatMapContainer(id) {\n let $wrapper = id;\n if (typeof id === 'string') {\n $wrapper = document.getElementById(id);\n }\n return $wrapper;\n }\n updateView(viewOption) {\n // Tip: 统一触发地图变化事件\n this.emit('mapchange');\n // resync\n this.viewport.syncWithMapCamera({\n bearing: viewOption.bearing,\n center: viewOption.center,\n viewportHeight: viewOption.viewportHeight,\n pitch: viewOption.pitch,\n viewportWidth: viewOption.viewportWidth,\n zoom: viewOption.zoom,\n // mapbox 中固定相机高度为 viewport 高度的 1.5 倍\n cameraHeight: 0\n });\n this.updateCoordinateSystemService();\n this.cameraChangedCallback(this.viewport);\n }\n updateCoordinateSystemService() {\n const {\n offsetCoordinate = true\n } = this.config;\n // set coordinate system\n if (this.viewport.getZoom() > LNGLAT_OFFSET_ZOOM_THRESHOLD && offsetCoordinate) {\n this.coordinateSystemService.setCoordinateSystem(CoordinateSystem.LNGLAT_OFFSET);\n } else {\n this.coordinateSystemService.setCoordinateSystem(CoordinateSystem.LNGLAT);\n }\n }\n}","import { identity } from '@antv/util';\nimport { Base } from './base';\nimport { createInterpolateNumber, createInterpolateRound, createClamp, createNormalize, bisect, compose, d3LinearNice, isValid, } from '../utils';\n/** 当 domain 和 range 只有一段的时候的 map 的 工厂函数 */\nconst createBiMap = (domain, range, createInterpolate) => {\n const [d0, d1] = domain;\n const [r0, r1] = range;\n let normalize;\n let interpolate;\n if (d0 < d1) {\n normalize = createNormalize(d0, d1);\n interpolate = createInterpolate(r0, r1);\n }\n else {\n normalize = createNormalize(d1, d0);\n interpolate = createInterpolate(r1, r0);\n }\n return compose(interpolate, normalize);\n};\n/** 当 domain 和 range 有多段时候的 map 的 工厂函数 */\nconst createPolyMap = (domain, range, createInterpolate) => {\n const len = Math.min(domain.length, range.length) - 1;\n const normalizeList = new Array(len);\n const interpolateList = new Array(len);\n const reverse = domain[0] > domain[len];\n const ascendingDomain = reverse ? [...domain].reverse() : domain;\n const ascendingRange = reverse ? [...range].reverse() : range;\n // 每一段都生成 normalize 和 interpolate\n for (let i = 0; i < len; i += 1) {\n normalizeList[i] = createNormalize(ascendingDomain[i], ascendingDomain[i + 1]);\n interpolateList[i] = createInterpolate(ascendingRange[i], ascendingRange[i + 1]);\n }\n // 二分最右查找到相应的 normalize 和 interpolate\n return (x) => {\n const i = bisect(domain, x, 1, len) - 1;\n const normalize = normalizeList[i];\n const interpolate = interpolateList[i];\n return compose(interpolate, normalize)(x);\n };\n};\n/** 选择一个分段映射的函数 */\nconst choosePiecewise = (domain, range, interpolate, shouldRound) => {\n const n = Math.min(domain.length, range.length);\n const createPiecewise = n > 2 ? createPolyMap : createBiMap;\n const createInterpolate = shouldRound ? createInterpolateRound : interpolate;\n return createPiecewise(domain, range, createInterpolate);\n};\n/**\n * Continuous 比例尺 的输入 x 和输出 y 满足:y = a * f(x) + b\n * 通过函数柯里化和复合函数可以在映射过程中去掉分支,提高性能。\n * 参考:https://github.com/d3/d3-scale/blob/master/src/continuous.js\n */\nexport class Continuous extends Base {\n getDefaultOptions() {\n return {\n domain: [0, 1],\n range: [0, 1],\n nice: false,\n clamp: false,\n round: false,\n interpolate: createInterpolateNumber,\n tickCount: 5,\n };\n }\n /**\n * y = interpolate(normalize(clamp(transform(x))))\n */\n map(x) {\n if (!isValid(x))\n return this.options.unknown;\n return this.output(x);\n }\n /**\n * x = transform(clamp(interpolate(normalize(y))))\n */\n invert(x) {\n if (!isValid(x))\n return this.options.unknown;\n return this.input(x);\n }\n nice() {\n if (!this.options.nice)\n return;\n const [min, max, tickCount, ...rest] = this.getTickMethodOptions();\n this.options.domain = this.chooseNice()(min, max, tickCount, ...rest);\n }\n getTicks() {\n const { tickMethod } = this.options;\n const [min, max, tickCount, ...rest] = this.getTickMethodOptions();\n return tickMethod(min, max, tickCount, ...rest);\n }\n getTickMethodOptions() {\n const { domain, tickCount } = this.options;\n const min = domain[0];\n const max = domain[domain.length - 1];\n return [min, max, tickCount];\n }\n chooseNice() {\n return d3LinearNice;\n }\n rescale() {\n this.nice();\n const [transform, untransform] = this.chooseTransforms();\n this.composeOutput(transform, this.chooseClamp(transform));\n this.composeInput(transform, untransform, this.chooseClamp(untransform));\n }\n chooseClamp(transform) {\n const { clamp: shouldClamp, range } = this.options;\n const domain = this.options.domain.map(transform);\n const n = Math.min(domain.length, range.length);\n return shouldClamp ? createClamp(domain[0], domain[n - 1]) : identity;\n }\n composeOutput(transform, clamp) {\n const { domain, range, round, interpolate } = this.options;\n const piecewise = choosePiecewise(domain.map(transform), range, interpolate, round);\n this.output = compose(piecewise, clamp, transform);\n }\n composeInput(transform, untransform, clamp) {\n const { domain, range } = this.options;\n const piecewise = choosePiecewise(range, domain.map(transform), createInterpolateNumber);\n this.input = compose(untransform, clamp, piecewise);\n }\n}\n//# sourceMappingURL=continuous.js.map","/**\n * 返回一个 clamp 函数,将输入限定在指定范围之内\n * @param a 范围的第一个端点\n * @param b 范围的第二个端点\n * @returns clamp 函数\n */\nexport function createClamp(a, b) {\n const lo = b < a ? b : a;\n const hi = a > b ? a : b;\n return (x) => Math.min(Math.max(lo, x), hi);\n}\n//# sourceMappingURL=clamp.js.map","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","import {shuffle} from \"../array.js\";\nimport lcg from \"../lcg.js\";\n\nexport default function(circles) {\n return packEncloseRandom(circles, lcg());\n}\n\nexport function packEncloseRandom(circles, random) {\n var i = 0, n = (circles = shuffle(Array.from(circles), random)).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TokenData = void 0;\nexports.parse = parse;\nexports.compile = compile;\nexports.match = match;\nexports.pathToRegexp = pathToRegexp;\nexports.stringify = stringify;\nconst DEFAULT_DELIMITER = \"/\";\nconst NOOP_VALUE = (value) => value;\nconst ID_START = /^[$_\\p{ID_Start}]$/u;\nconst ID_CONTINUE = /^[$\\u200c\\u200d\\p{ID_Continue}]$/u;\nconst DEBUG_URL = \"https://git.new/pathToRegexpError\";\nconst SIMPLE_TOKENS = {\n // Groups.\n \"{\": \"{\",\n \"}\": \"}\",\n // Reserved.\n \"(\": \"(\",\n \")\": \")\",\n \"[\": \"[\",\n \"]\": \"]\",\n \"+\": \"+\",\n \"?\": \"?\",\n \"!\": \"!\",\n};\n/**\n * Escape text for stringify to path.\n */\nfunction escapeText(str) {\n return str.replace(/[{}()\\[\\]+?!:*]/g, \"\\\\$&\");\n}\n/**\n * Escape a regular expression string.\n */\nfunction escape(str) {\n return str.replace(/[.+*?^${}()[\\]|/\\\\]/g, \"\\\\$&\");\n}\n/**\n * Tokenize input string.\n */\nfunction* lexer(str) {\n const chars = [...str];\n let i = 0;\n function name() {\n let value = \"\";\n if (ID_START.test(chars[++i])) {\n value += chars[i];\n while (ID_CONTINUE.test(chars[++i])) {\n value += chars[i];\n }\n }\n else if (chars[i] === '\"') {\n let pos = i;\n while (i < chars.length) {\n if (chars[++i] === '\"') {\n i++;\n pos = 0;\n break;\n }\n if (chars[i] === \"\\\\\") {\n value += chars[++i];\n }\n else {\n value += chars[i];\n }\n }\n if (pos) {\n throw new TypeError(`Unterminated quote at ${pos}: ${DEBUG_URL}`);\n }\n }\n if (!value) {\n throw new TypeError(`Missing parameter name at ${i}: ${DEBUG_URL}`);\n }\n return value;\n }\n while (i < chars.length) {\n const value = chars[i];\n const type = SIMPLE_TOKENS[value];\n if (type) {\n yield { type, index: i++, value };\n }\n else if (value === \"\\\\\") {\n yield { type: \"ESCAPED\", index: i++, value: chars[i++] };\n }\n else if (value === \":\") {\n const value = name();\n yield { type: \"PARAM\", index: i, value };\n }\n else if (value === \"*\") {\n const value = name();\n yield { type: \"WILDCARD\", index: i, value };\n }\n else {\n yield { type: \"CHAR\", index: i, value: chars[i++] };\n }\n }\n return { type: \"END\", index: i, value: \"\" };\n}\nclass Iter {\n constructor(tokens) {\n this.tokens = tokens;\n }\n peek() {\n if (!this._peek) {\n const next = this.tokens.next();\n this._peek = next.value;\n }\n return this._peek;\n }\n tryConsume(type) {\n const token = this.peek();\n if (token.type !== type)\n return;\n this._peek = undefined; // Reset after consumed.\n return token.value;\n }\n consume(type) {\n const value = this.tryConsume(type);\n if (value !== undefined)\n return value;\n const { type: nextType, index } = this.peek();\n throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}: ${DEBUG_URL}`);\n }\n text() {\n let result = \"\";\n let value;\n while ((value = this.tryConsume(\"CHAR\") || this.tryConsume(\"ESCAPED\"))) {\n result += value;\n }\n return result;\n }\n}\n/**\n * Tokenized path instance.\n */\nclass TokenData {\n constructor(tokens) {\n this.tokens = tokens;\n }\n}\nexports.TokenData = TokenData;\n/**\n * Parse a string for the raw tokens.\n */\nfunction parse(str, options = {}) {\n const { encodePath = NOOP_VALUE } = options;\n const it = new Iter(lexer(str));\n function consume(endType) {\n const tokens = [];\n while (true) {\n const path = it.text();\n if (path)\n tokens.push({ type: \"text\", value: encodePath(path) });\n const param = it.tryConsume(\"PARAM\");\n if (param) {\n tokens.push({\n type: \"param\",\n name: param,\n });\n continue;\n }\n const wildcard = it.tryConsume(\"WILDCARD\");\n if (wildcard) {\n tokens.push({\n type: \"wildcard\",\n name: wildcard,\n });\n continue;\n }\n const open = it.tryConsume(\"{\");\n if (open) {\n tokens.push({\n type: \"group\",\n tokens: consume(\"}\"),\n });\n continue;\n }\n it.consume(endType);\n return tokens;\n }\n }\n const tokens = consume(\"END\");\n return new TokenData(tokens);\n}\n/**\n * Compile a string to a template function for the path.\n */\nfunction compile(path, options = {}) {\n const { encode = encodeURIComponent, delimiter = DEFAULT_DELIMITER } = options;\n const data = path instanceof TokenData ? path : parse(path, options);\n const fn = tokensToFunction(data.tokens, delimiter, encode);\n return function path(data = {}) {\n const [path, ...missing] = fn(data);\n if (missing.length) {\n throw new TypeError(`Missing parameters: ${missing.join(\", \")}`);\n }\n return path;\n };\n}\nfunction tokensToFunction(tokens, delimiter, encode) {\n const encoders = tokens.map((token) => tokenToFunction(token, delimiter, encode));\n return (data) => {\n const result = [\"\"];\n for (const encoder of encoders) {\n const [value, ...extras] = encoder(data);\n result[0] += value;\n result.push(...extras);\n }\n return result;\n };\n}\n/**\n * Convert a single token into a path building function.\n */\nfunction tokenToFunction(token, delimiter, encode) {\n if (token.type === \"text\")\n return () => [token.value];\n if (token.type === \"group\") {\n const fn = tokensToFunction(token.tokens, delimiter, encode);\n return (data) => {\n const [value, ...missing] = fn(data);\n if (!missing.length)\n return [value];\n return [\"\"];\n };\n }\n const encodeValue = encode || NOOP_VALUE;\n if (token.type === \"wildcard\" && encode !== false) {\n return (data) => {\n const value = data[token.name];\n if (value == null)\n return [\"\", token.name];\n if (!Array.isArray(value) || value.length === 0) {\n throw new TypeError(`Expected \"${token.name}\" to be a non-empty array`);\n }\n return [\n value\n .map((value, index) => {\n if (typeof value !== \"string\") {\n throw new TypeError(`Expected \"${token.name}/${index}\" to be a string`);\n }\n return encodeValue(value);\n })\n .join(delimiter),\n ];\n };\n }\n return (data) => {\n const value = data[token.name];\n if (value == null)\n return [\"\", token.name];\n if (typeof value !== \"string\") {\n throw new TypeError(`Expected \"${token.name}\" to be a string`);\n }\n return [encodeValue(value)];\n };\n}\n/**\n * Transform a path into a match function.\n */\nfunction match(path, options = {}) {\n const { decode = decodeURIComponent, delimiter = DEFAULT_DELIMITER } = options;\n const { regexp, keys } = pathToRegexp(path, options);\n const decoders = keys.map((key) => {\n if (decode === false)\n return NOOP_VALUE;\n if (key.type === \"param\")\n return decode;\n return (value) => value.split(delimiter).map(decode);\n });\n return function match(input) {\n const m = regexp.exec(input);\n if (!m)\n return false;\n const path = m[0];\n const params = Object.create(null);\n for (let i = 1; i < m.length; i++) {\n if (m[i] === undefined)\n continue;\n const key = keys[i - 1];\n const decoder = decoders[i - 1];\n params[key.name] = decoder(m[i]);\n }\n return { path, params };\n };\n}\nfunction pathToRegexp(path, options = {}) {\n const { delimiter = DEFAULT_DELIMITER, end = true, sensitive = false, trailing = true, } = options;\n const keys = [];\n const sources = [];\n const flags = sensitive ? \"\" : \"i\";\n const paths = Array.isArray(path) ? path : [path];\n const items = paths.map((path) => path instanceof TokenData ? path : parse(path, options));\n for (const { tokens } of items) {\n for (const seq of flatten(tokens, 0, [])) {\n const regexp = sequenceToRegExp(seq, delimiter, keys);\n sources.push(regexp);\n }\n }\n let pattern = `^(?:${sources.join(\"|\")})`;\n if (trailing)\n pattern += `(?:${escape(delimiter)}$)?`;\n pattern += end ? \"$\" : `(?=${escape(delimiter)}|$)`;\n const regexp = new RegExp(pattern, flags);\n return { regexp, keys };\n}\n/**\n * Generate a flat list of sequence tokens from the given tokens.\n */\nfunction* flatten(tokens, index, init) {\n if (index === tokens.length) {\n return yield init;\n }\n const token = tokens[index];\n if (token.type === \"group\") {\n const fork = init.slice();\n for (const seq of flatten(token.tokens, 0, fork)) {\n yield* flatten(tokens, index + 1, seq);\n }\n }\n else {\n init.push(token);\n }\n yield* flatten(tokens, index + 1, init);\n}\n/**\n * Transform a flat sequence of tokens into a regular expression.\n */\nfunction sequenceToRegExp(tokens, delimiter, keys) {\n let result = \"\";\n let backtrack = \"\";\n let isSafeSegmentParam = true;\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (token.type === \"text\") {\n result += escape(token.value);\n backtrack += token.value;\n isSafeSegmentParam || (isSafeSegmentParam = token.value.includes(delimiter));\n continue;\n }\n if (token.type === \"param\" || token.type === \"wildcard\") {\n if (!isSafeSegmentParam && !backtrack) {\n throw new TypeError(`Missing text after \"${token.name}\": ${DEBUG_URL}`);\n }\n if (token.type === \"param\") {\n result += `(${negate(delimiter, isSafeSegmentParam ? \"\" : backtrack)}+)`;\n }\n else {\n result += `([\\\\s\\\\S]+)`;\n }\n keys.push(token);\n backtrack = \"\";\n isSafeSegmentParam = false;\n continue;\n }\n }\n return result;\n}\nfunction negate(delimiter, backtrack) {\n if (backtrack.length < 2) {\n if (delimiter.length < 2)\n return `[^${escape(delimiter + backtrack)}]`;\n return `(?:(?!${escape(delimiter)})[^${escape(backtrack)}])`;\n }\n if (delimiter.length < 2) {\n return `(?:(?!${escape(backtrack)})[^${escape(delimiter)}])`;\n }\n return `(?:(?!${escape(backtrack)}|${escape(delimiter)})[\\\\s\\\\S])`;\n}\n/**\n * Stringify token data into a path string.\n */\nfunction stringify(data) {\n return data.tokens\n .map(function stringifyToken(token, index, tokens) {\n if (token.type === \"text\")\n return escapeText(token.value);\n if (token.type === \"group\") {\n return `{${token.tokens.map(stringifyToken).join(\"\")}}`;\n }\n const isSafe = isNameSafe(token.name) && isNextNameSafe(tokens[index + 1]);\n const key = isSafe ? token.name : JSON.stringify(token.name);\n if (token.type === \"param\")\n return `:${key}`;\n if (token.type === \"wildcard\")\n return `*${key}`;\n throw new TypeError(`Unexpected token: ${token}`);\n })\n .join(\"\");\n}\nfunction isNameSafe(name) {\n const [first, ...rest] = name;\n if (!ID_START.test(first))\n return false;\n return rest.every((char) => ID_CONTINUE.test(char));\n}\nfunction isNextNameSafe(token) {\n if ((token === null || token === void 0 ? void 0 : token.type) !== \"text\")\n return true;\n return !ID_CONTINUE.test(token.value[0]);\n}\n//# sourceMappingURL=index.js.map","/**\n * scale a shape to a given size\n */\nexport function scaleToPixel(el, size, applyScale) {\n if (applyScale === void 0) { applyScale = false; }\n var _a = el.getBBox(), width = _a.width, height = _a.height;\n var scale = size / Math.max(width, height);\n if (applyScale) {\n el.style.transform = \"scale(\".concat(scale, \")\");\n }\n return scale;\n}\n//# sourceMappingURL=scale-to-pixel.js.map","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","import * as React from 'react';\nexport var PreviewGroupContext = /*#__PURE__*/React.createContext(null);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Portal from '@rc-component/portal';\nimport classnames from 'classnames';\nimport CSSMotion from 'rc-motion';\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport * as React from 'react';\nimport { useContext } from 'react';\nimport { PreviewGroupContext } from \"./context\";\nvar Operations = function Operations(props) {\n var visible = props.visible,\n maskTransitionName = props.maskTransitionName,\n getContainer = props.getContainer,\n prefixCls = props.prefixCls,\n rootClassName = props.rootClassName,\n icons = props.icons,\n countRender = props.countRender,\n showSwitch = props.showSwitch,\n showProgress = props.showProgress,\n current = props.current,\n transform = props.transform,\n count = props.count,\n scale = props.scale,\n minScale = props.minScale,\n maxScale = props.maxScale,\n closeIcon = props.closeIcon,\n onActive = props.onActive,\n onClose = props.onClose,\n onZoomIn = props.onZoomIn,\n onZoomOut = props.onZoomOut,\n onRotateRight = props.onRotateRight,\n onRotateLeft = props.onRotateLeft,\n onFlipX = props.onFlipX,\n onFlipY = props.onFlipY,\n onReset = props.onReset,\n toolbarRender = props.toolbarRender,\n zIndex = props.zIndex,\n image = props.image;\n var groupContext = useContext(PreviewGroupContext);\n var rotateLeft = icons.rotateLeft,\n rotateRight = icons.rotateRight,\n zoomIn = icons.zoomIn,\n zoomOut = icons.zoomOut,\n close = icons.close,\n left = icons.left,\n right = icons.right,\n flipX = icons.flipX,\n flipY = icons.flipY;\n var toolClassName = \"\".concat(prefixCls, \"-operations-operation\");\n React.useEffect(function () {\n var onKeyDown = function onKeyDown(e) {\n if (e.keyCode === KeyCode.ESC) {\n onClose();\n }\n };\n if (visible) {\n window.addEventListener('keydown', onKeyDown);\n }\n return function () {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [visible]);\n var handleActive = function handleActive(e, offset) {\n e.preventDefault();\n e.stopPropagation();\n onActive(offset);\n };\n var renderOperation = React.useCallback(function (_ref) {\n var type = _ref.type,\n disabled = _ref.disabled,\n onClick = _ref.onClick,\n icon = _ref.icon;\n return /*#__PURE__*/React.createElement(\"div\", {\n key: type,\n className: classnames(toolClassName, \"\".concat(prefixCls, \"-operations-operation-\").concat(type), _defineProperty({}, \"\".concat(prefixCls, \"-operations-operation-disabled\"), !!disabled)),\n onClick: onClick\n }, icon);\n }, [toolClassName, prefixCls]);\n var switchPrevNode = showSwitch ? renderOperation({\n icon: left,\n onClick: function onClick(e) {\n return handleActive(e, -1);\n },\n type: 'prev',\n disabled: current === 0\n }) : undefined;\n var switchNextNode = showSwitch ? renderOperation({\n icon: right,\n onClick: function onClick(e) {\n return handleActive(e, 1);\n },\n type: 'next',\n disabled: current === count - 1\n }) : undefined;\n var flipYNode = renderOperation({\n icon: flipY,\n onClick: onFlipY,\n type: 'flipY'\n });\n var flipXNode = renderOperation({\n icon: flipX,\n onClick: onFlipX,\n type: 'flipX'\n });\n var rotateLeftNode = renderOperation({\n icon: rotateLeft,\n onClick: onRotateLeft,\n type: 'rotateLeft'\n });\n var rotateRightNode = renderOperation({\n icon: rotateRight,\n onClick: onRotateRight,\n type: 'rotateRight'\n });\n var zoomOutNode = renderOperation({\n icon: zoomOut,\n onClick: onZoomOut,\n type: 'zoomOut',\n disabled: scale <= minScale\n });\n var zoomInNode = renderOperation({\n icon: zoomIn,\n onClick: onZoomIn,\n type: 'zoomIn',\n disabled: scale === maxScale\n });\n var toolbarNode = /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-operations\")\n }, flipYNode, flipXNode, rotateLeftNode, rotateRightNode, zoomOutNode, zoomInNode);\n return /*#__PURE__*/React.createElement(CSSMotion, {\n visible: visible,\n motionName: maskTransitionName\n }, function (_ref2) {\n var className = _ref2.className,\n style = _ref2.style;\n return /*#__PURE__*/React.createElement(Portal, {\n open: true,\n getContainer: getContainer !== null && getContainer !== void 0 ? getContainer : document.body\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: classnames(\"\".concat(prefixCls, \"-operations-wrapper\"), className, rootClassName),\n style: _objectSpread(_objectSpread({}, style), {}, {\n zIndex: zIndex\n })\n }, closeIcon === null ? null : /*#__PURE__*/React.createElement(\"button\", {\n className: \"\".concat(prefixCls, \"-close\"),\n onClick: onClose\n }, closeIcon || close), showSwitch && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: classnames(\"\".concat(prefixCls, \"-switch-left\"), _defineProperty({}, \"\".concat(prefixCls, \"-switch-left-disabled\"), current === 0)),\n onClick: function onClick(e) {\n return handleActive(e, -1);\n }\n }, left), /*#__PURE__*/React.createElement(\"div\", {\n className: classnames(\"\".concat(prefixCls, \"-switch-right\"), _defineProperty({}, \"\".concat(prefixCls, \"-switch-right-disabled\"), current === count - 1)),\n onClick: function onClick(e) {\n return handleActive(e, 1);\n }\n }, right)), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-footer\")\n }, showProgress && /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-progress\")\n }, countRender ? countRender(current + 1, count) : /*#__PURE__*/React.createElement(\"bdi\", null, \"\".concat(current + 1, \" / \").concat(count))), toolbarRender ? toolbarRender(toolbarNode, _objectSpread(_objectSpread({\n icons: {\n prevIcon: switchPrevNode,\n nextIcon: switchNextNode,\n flipYIcon: flipYNode,\n flipXIcon: flipXNode,\n rotateLeftIcon: rotateLeftNode,\n rotateRightIcon: rotateRightNode,\n zoomOutIcon: zoomOutNode,\n zoomInIcon: zoomInNode\n },\n actions: {\n onActive: onActive,\n onFlipY: onFlipY,\n onFlipX: onFlipX,\n onRotateLeft: onRotateLeft,\n onRotateRight: onRotateRight,\n onZoomOut: onZoomOut,\n onZoomIn: onZoomIn,\n onReset: onReset,\n onClose: onClose\n },\n transform: transform\n }, groupContext ? {\n current: current,\n total: count\n } : {}), {}, {\n image: image\n })) : toolbarNode)));\n });\n};\nexport default Operations;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { getClientSize } from \"rc-util/es/Dom/css\";\nimport isEqual from \"rc-util/es/isEqual\";\nimport raf from \"rc-util/es/raf\";\nimport { useRef, useState } from 'react';\nvar initialTransform = {\n x: 0,\n y: 0,\n rotate: 0,\n scale: 1,\n flipX: false,\n flipY: false\n};\nexport default function useImageTransform(imgRef, minScale, maxScale, onTransform) {\n var frame = useRef(null);\n var queue = useRef([]);\n var _useState = useState(initialTransform),\n _useState2 = _slicedToArray(_useState, 2),\n transform = _useState2[0],\n setTransform = _useState2[1];\n var resetTransform = function resetTransform(action) {\n setTransform(initialTransform);\n if (!isEqual(initialTransform, transform)) {\n onTransform === null || onTransform === void 0 || onTransform({\n transform: initialTransform,\n action: action\n });\n }\n };\n\n /** Direct update transform */\n var updateTransform = function updateTransform(newTransform, action) {\n if (frame.current === null) {\n queue.current = [];\n frame.current = raf(function () {\n setTransform(function (preState) {\n var memoState = preState;\n queue.current.forEach(function (queueState) {\n memoState = _objectSpread(_objectSpread({}, memoState), queueState);\n });\n frame.current = null;\n onTransform === null || onTransform === void 0 || onTransform({\n transform: memoState,\n action: action\n });\n return memoState;\n });\n });\n }\n queue.current.push(_objectSpread(_objectSpread({}, transform), newTransform));\n };\n\n /** Scale according to the position of centerX and centerY */\n var dispatchZoomChange = function dispatchZoomChange(ratio, action, centerX, centerY, isTouch) {\n var _imgRef$current = imgRef.current,\n width = _imgRef$current.width,\n height = _imgRef$current.height,\n offsetWidth = _imgRef$current.offsetWidth,\n offsetHeight = _imgRef$current.offsetHeight,\n offsetLeft = _imgRef$current.offsetLeft,\n offsetTop = _imgRef$current.offsetTop;\n var newRatio = ratio;\n var newScale = transform.scale * ratio;\n if (newScale > maxScale) {\n newScale = maxScale;\n newRatio = maxScale / transform.scale;\n } else if (newScale < minScale) {\n // For mobile interactions, allow scaling down to the minimum scale.\n newScale = isTouch ? newScale : minScale;\n newRatio = newScale / transform.scale;\n }\n\n /** Default center point scaling */\n var mergedCenterX = centerX !== null && centerX !== void 0 ? centerX : innerWidth / 2;\n var mergedCenterY = centerY !== null && centerY !== void 0 ? centerY : innerHeight / 2;\n var diffRatio = newRatio - 1;\n /** Deviation calculated from image size */\n var diffImgX = diffRatio * width * 0.5;\n var diffImgY = diffRatio * height * 0.5;\n /** The difference between the click position and the edge of the document */\n var diffOffsetLeft = diffRatio * (mergedCenterX - transform.x - offsetLeft);\n var diffOffsetTop = diffRatio * (mergedCenterY - transform.y - offsetTop);\n /** Final positioning */\n var newX = transform.x - (diffOffsetLeft - diffImgX);\n var newY = transform.y - (diffOffsetTop - diffImgY);\n\n /**\n * When zooming the image\n * When the image size is smaller than the width and height of the window, the position is initialized\n */\n if (ratio < 1 && newScale === 1) {\n var mergedWidth = offsetWidth * newScale;\n var mergedHeight = offsetHeight * newScale;\n var _getClientSize = getClientSize(),\n clientWidth = _getClientSize.width,\n clientHeight = _getClientSize.height;\n if (mergedWidth <= clientWidth && mergedHeight <= clientHeight) {\n newX = 0;\n newY = 0;\n }\n }\n updateTransform({\n x: newX,\n y: newY,\n scale: newScale\n }, action);\n };\n return {\n transform: transform,\n resetTransform: resetTransform,\n updateTransform: updateTransform,\n dispatchZoomChange: dispatchZoomChange\n };\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { getClientSize } from \"rc-util/es/Dom/css\";\nfunction fixPoint(key, start, width, clientWidth) {\n var startAddWidth = start + width;\n var offsetStart = (width - clientWidth) / 2;\n if (width > clientWidth) {\n if (start > 0) {\n return _defineProperty({}, key, offsetStart);\n }\n if (start < 0 && startAddWidth < clientWidth) {\n return _defineProperty({}, key, -offsetStart);\n }\n } else if (start < 0 || startAddWidth > clientWidth) {\n return _defineProperty({}, key, start < 0 ? offsetStart : -offsetStart);\n }\n return {};\n}\n\n/**\n * Fix positon x,y point when\n *\n * Ele width && height < client\n * - Back origin\n *\n * - Ele width | height > clientWidth | clientHeight\n * - left | top > 0 -> Back 0\n * - left | top + width | height < clientWidth | clientHeight -> Back left | top + width | height === clientWidth | clientHeight\n *\n * Regardless of other\n */\nexport default function getFixScaleEleTransPosition(width, height, left, top) {\n var _getClientSize = getClientSize(),\n clientWidth = _getClientSize.width,\n clientHeight = _getClientSize.height;\n var fixPos = null;\n if (width <= clientWidth && height <= clientHeight) {\n fixPos = {\n x: 0,\n y: 0\n };\n } else if (width > clientWidth || height > clientHeight) {\n fixPos = _objectSpread(_objectSpread({}, fixPoint('x', left, width, clientWidth)), fixPoint('y', top, height, clientHeight));\n }\n return fixPos;\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useEffect, useRef, useState } from 'react';\nimport { isImageValid } from \"../util\";\nexport default function useStatus(_ref) {\n var src = _ref.src,\n isCustomPlaceholder = _ref.isCustomPlaceholder,\n fallback = _ref.fallback;\n var _useState = useState(isCustomPlaceholder ? 'loading' : 'normal'),\n _useState2 = _slicedToArray(_useState, 2),\n status = _useState2[0],\n setStatus = _useState2[1];\n var isLoaded = useRef(false);\n var isError = status === 'error';\n\n // https://github.com/react-component/image/pull/187\n useEffect(function () {\n var isCurrentSrc = true;\n isImageValid(src).then(function (isValid) {\n // https://github.com/ant-design/ant-design/issues/44948\n // If src changes, the previous setStatus should not be triggered\n if (!isValid && isCurrentSrc) {\n setStatus('error');\n }\n });\n return function () {\n isCurrentSrc = false;\n };\n }, [src]);\n useEffect(function () {\n if (isCustomPlaceholder && !isLoaded.current) {\n setStatus('loading');\n } else if (isError) {\n setStatus('normal');\n }\n }, [src]);\n var onLoad = function onLoad() {\n setStatus('normal');\n };\n var getImgRef = function getImgRef(img) {\n isLoaded.current = false;\n if (status === 'loading' && img !== null && img !== void 0 && img.complete && (img.naturalWidth || img.naturalHeight)) {\n isLoaded.current = true;\n onLoad();\n }\n };\n var srcAndOnload = isError && fallback ? {\n src: fallback\n } : {\n onLoad: onLoad,\n src: src\n };\n return [getImgRef, srcAndOnload, status];\n}","export function isImageValid(src) {\n return new Promise(function (resolve) {\n if (!src) {\n resolve(false);\n return;\n }\n var img = document.createElement('img');\n img.onerror = function () {\n return resolve(false);\n };\n img.onload = function () {\n return resolve(true);\n };\n img.src = src;\n });\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport addEventListener from \"rc-util/es/Dom/addEventListener\";\nimport { useEffect, useRef, useState } from 'react';\nimport getFixScaleEleTransPosition from \"../getFixScaleEleTransPosition\";\nfunction getDistance(a, b) {\n var x = a.x - b.x;\n var y = a.y - b.y;\n return Math.hypot(x, y);\n}\nfunction getCenter(oldPoint1, oldPoint2, newPoint1, newPoint2) {\n // Calculate the distance each point has moved\n var distance1 = getDistance(oldPoint1, newPoint1);\n var distance2 = getDistance(oldPoint2, newPoint2);\n\n // If both distances are 0, return the original points\n if (distance1 === 0 && distance2 === 0) {\n return [oldPoint1.x, oldPoint1.y];\n }\n\n // Calculate the ratio of the distances\n var ratio = distance1 / (distance1 + distance2);\n\n // Calculate the new center point based on the ratio\n var x = oldPoint1.x + ratio * (oldPoint2.x - oldPoint1.x);\n var y = oldPoint1.y + ratio * (oldPoint2.y - oldPoint1.y);\n return [x, y];\n}\nexport default function useTouchEvent(imgRef, movable, visible, minScale, transform, updateTransform, dispatchZoomChange) {\n var rotate = transform.rotate,\n scale = transform.scale,\n x = transform.x,\n y = transform.y;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isTouching = _useState2[0],\n setIsTouching = _useState2[1];\n var touchPointInfo = useRef({\n point1: {\n x: 0,\n y: 0\n },\n point2: {\n x: 0,\n y: 0\n },\n eventType: 'none'\n });\n var updateTouchPointInfo = function updateTouchPointInfo(values) {\n touchPointInfo.current = _objectSpread(_objectSpread({}, touchPointInfo.current), values);\n };\n var onTouchStart = function onTouchStart(event) {\n if (!movable) return;\n event.stopPropagation();\n setIsTouching(true);\n var _event$touches = event.touches,\n touches = _event$touches === void 0 ? [] : _event$touches;\n if (touches.length > 1) {\n // touch zoom\n updateTouchPointInfo({\n point1: {\n x: touches[0].clientX,\n y: touches[0].clientY\n },\n point2: {\n x: touches[1].clientX,\n y: touches[1].clientY\n },\n eventType: 'touchZoom'\n });\n } else {\n // touch move\n updateTouchPointInfo({\n point1: {\n x: touches[0].clientX - x,\n y: touches[0].clientY - y\n },\n eventType: 'move'\n });\n }\n };\n var onTouchMove = function onTouchMove(event) {\n var _event$touches2 = event.touches,\n touches = _event$touches2 === void 0 ? [] : _event$touches2;\n var _touchPointInfo$curre = touchPointInfo.current,\n point1 = _touchPointInfo$curre.point1,\n point2 = _touchPointInfo$curre.point2,\n eventType = _touchPointInfo$curre.eventType;\n if (touches.length > 1 && eventType === 'touchZoom') {\n // touch zoom\n var newPoint1 = {\n x: touches[0].clientX,\n y: touches[0].clientY\n };\n var newPoint2 = {\n x: touches[1].clientX,\n y: touches[1].clientY\n };\n var _getCenter = getCenter(point1, point2, newPoint1, newPoint2),\n _getCenter2 = _slicedToArray(_getCenter, 2),\n centerX = _getCenter2[0],\n centerY = _getCenter2[1];\n var ratio = getDistance(newPoint1, newPoint2) / getDistance(point1, point2);\n dispatchZoomChange(ratio, 'touchZoom', centerX, centerY, true);\n updateTouchPointInfo({\n point1: newPoint1,\n point2: newPoint2,\n eventType: 'touchZoom'\n });\n } else if (eventType === 'move') {\n // touch move\n updateTransform({\n x: touches[0].clientX - point1.x,\n y: touches[0].clientY - point1.y\n }, 'move');\n updateTouchPointInfo({\n eventType: 'move'\n });\n }\n };\n var onTouchEnd = function onTouchEnd() {\n if (!visible) return;\n if (isTouching) {\n setIsTouching(false);\n }\n updateTouchPointInfo({\n eventType: 'none'\n });\n if (minScale > scale) {\n /** When the scaling ratio is less than the minimum scaling ratio, reset the scaling ratio */\n return updateTransform({\n x: 0,\n y: 0,\n scale: minScale\n }, 'touchZoom');\n }\n var width = imgRef.current.offsetWidth * scale;\n var height = imgRef.current.offsetHeight * scale;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n var _imgRef$current$getBo = imgRef.current.getBoundingClientRect(),\n left = _imgRef$current$getBo.left,\n top = _imgRef$current$getBo.top;\n var isRotate = rotate % 180 !== 0;\n var fixState = getFixScaleEleTransPosition(isRotate ? height : width, isRotate ? width : height, left, top);\n if (fixState) {\n updateTransform(_objectSpread({}, fixState), 'dragRebound');\n }\n };\n useEffect(function () {\n var onTouchMoveListener;\n if (visible && movable) {\n onTouchMoveListener = addEventListener(window, 'touchmove', function (e) {\n return e.preventDefault();\n }, {\n passive: false\n });\n }\n return function () {\n var _onTouchMoveListener;\n (_onTouchMoveListener = onTouchMoveListener) === null || _onTouchMoveListener === void 0 || _onTouchMoveListener.remove();\n };\n }, [visible, movable]);\n return {\n isTouching: isTouching,\n onTouchStart: onTouchStart,\n onTouchMove: onTouchMove,\n onTouchEnd: onTouchEnd\n };\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"fallback\", \"src\", \"imgRef\"],\n _excluded2 = [\"prefixCls\", \"src\", \"alt\", \"imageInfo\", \"fallback\", \"movable\", \"onClose\", \"visible\", \"icons\", \"rootClassName\", \"closeIcon\", \"getContainer\", \"current\", \"count\", \"countRender\", \"scaleStep\", \"minScale\", \"maxScale\", \"transitionName\", \"maskTransitionName\", \"imageRender\", \"imgCommonProps\", \"toolbarRender\", \"onTransform\", \"onChange\"];\nimport classnames from 'classnames';\nimport Dialog from 'rc-dialog';\nimport addEventListener from \"rc-util/es/Dom/addEventListener\";\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport React, { useContext, useEffect, useRef, useState } from 'react';\nimport Operations from \"./Operations\";\nimport { PreviewGroupContext } from \"./context\";\nimport useImageTransform from \"./hooks/useImageTransform\";\nimport useMouseEvent from \"./hooks/useMouseEvent\";\nimport useStatus from \"./hooks/useStatus\";\nimport useTouchEvent from \"./hooks/useTouchEvent\";\nimport { BASE_SCALE_RATIO } from \"./previewConfig\";\nvar PreviewImage = function PreviewImage(_ref) {\n var fallback = _ref.fallback,\n src = _ref.src,\n imgRef = _ref.imgRef,\n props = _objectWithoutProperties(_ref, _excluded);\n var _useStatus = useStatus({\n src: src,\n fallback: fallback\n }),\n _useStatus2 = _slicedToArray(_useStatus, 2),\n getImgRef = _useStatus2[0],\n srcAndOnload = _useStatus2[1];\n return /*#__PURE__*/React.createElement(\"img\", _extends({\n ref: function ref(_ref2) {\n imgRef.current = _ref2;\n getImgRef(_ref2);\n }\n }, props, srcAndOnload));\n};\nvar Preview = function Preview(props) {\n var prefixCls = props.prefixCls,\n src = props.src,\n alt = props.alt,\n imageInfo = props.imageInfo,\n fallback = props.fallback,\n _props$movable = props.movable,\n movable = _props$movable === void 0 ? true : _props$movable,\n onClose = props.onClose,\n visible = props.visible,\n _props$icons = props.icons,\n icons = _props$icons === void 0 ? {} : _props$icons,\n rootClassName = props.rootClassName,\n closeIcon = props.closeIcon,\n getContainer = props.getContainer,\n _props$current = props.current,\n current = _props$current === void 0 ? 0 : _props$current,\n _props$count = props.count,\n count = _props$count === void 0 ? 1 : _props$count,\n countRender = props.countRender,\n _props$scaleStep = props.scaleStep,\n scaleStep = _props$scaleStep === void 0 ? 0.5 : _props$scaleStep,\n _props$minScale = props.minScale,\n minScale = _props$minScale === void 0 ? 1 : _props$minScale,\n _props$maxScale = props.maxScale,\n maxScale = _props$maxScale === void 0 ? 50 : _props$maxScale,\n _props$transitionName = props.transitionName,\n transitionName = _props$transitionName === void 0 ? 'zoom' : _props$transitionName,\n _props$maskTransition = props.maskTransitionName,\n maskTransitionName = _props$maskTransition === void 0 ? 'fade' : _props$maskTransition,\n imageRender = props.imageRender,\n imgCommonProps = props.imgCommonProps,\n toolbarRender = props.toolbarRender,\n onTransform = props.onTransform,\n onChange = props.onChange,\n restProps = _objectWithoutProperties(props, _excluded2);\n var imgRef = useRef();\n var groupContext = useContext(PreviewGroupContext);\n var showLeftOrRightSwitches = groupContext && count > 1;\n var showOperationsProgress = groupContext && count >= 1;\n var _useState = useState(true),\n _useState2 = _slicedToArray(_useState, 2),\n enableTransition = _useState2[0],\n setEnableTransition = _useState2[1];\n var _useImageTransform = useImageTransform(imgRef, minScale, maxScale, onTransform),\n transform = _useImageTransform.transform,\n resetTransform = _useImageTransform.resetTransform,\n updateTransform = _useImageTransform.updateTransform,\n dispatchZoomChange = _useImageTransform.dispatchZoomChange;\n var _useMouseEvent = useMouseEvent(imgRef, movable, visible, scaleStep, transform, updateTransform, dispatchZoomChange),\n isMoving = _useMouseEvent.isMoving,\n onMouseDown = _useMouseEvent.onMouseDown,\n onWheel = _useMouseEvent.onWheel;\n var _useTouchEvent = useTouchEvent(imgRef, movable, visible, minScale, transform, updateTransform, dispatchZoomChange),\n isTouching = _useTouchEvent.isTouching,\n onTouchStart = _useTouchEvent.onTouchStart,\n onTouchMove = _useTouchEvent.onTouchMove,\n onTouchEnd = _useTouchEvent.onTouchEnd;\n var rotate = transform.rotate,\n scale = transform.scale;\n var wrapClassName = classnames(_defineProperty({}, \"\".concat(prefixCls, \"-moving\"), isMoving));\n useEffect(function () {\n if (!enableTransition) {\n setEnableTransition(true);\n }\n }, [enableTransition]);\n var onAfterClose = function onAfterClose() {\n resetTransform('close');\n };\n var onZoomIn = function onZoomIn() {\n dispatchZoomChange(BASE_SCALE_RATIO + scaleStep, 'zoomIn');\n };\n var onZoomOut = function onZoomOut() {\n dispatchZoomChange(BASE_SCALE_RATIO / (BASE_SCALE_RATIO + scaleStep), 'zoomOut');\n };\n var onRotateRight = function onRotateRight() {\n updateTransform({\n rotate: rotate + 90\n }, 'rotateRight');\n };\n var onRotateLeft = function onRotateLeft() {\n updateTransform({\n rotate: rotate - 90\n }, 'rotateLeft');\n };\n var onFlipX = function onFlipX() {\n updateTransform({\n flipX: !transform.flipX\n }, 'flipX');\n };\n var onFlipY = function onFlipY() {\n updateTransform({\n flipY: !transform.flipY\n }, 'flipY');\n };\n var onReset = function onReset() {\n resetTransform('reset');\n };\n var onActive = function onActive(offset) {\n var position = current + offset;\n if (!Number.isInteger(position) || position < 0 || position > count - 1) {\n return;\n }\n setEnableTransition(false);\n resetTransform(offset < 0 ? 'prev' : 'next');\n onChange === null || onChange === void 0 || onChange(position, current);\n };\n var onKeyDown = function onKeyDown(event) {\n if (!visible || !showLeftOrRightSwitches) return;\n if (event.keyCode === KeyCode.LEFT) {\n onActive(-1);\n } else if (event.keyCode === KeyCode.RIGHT) {\n onActive(1);\n }\n };\n var onDoubleClick = function onDoubleClick(event) {\n if (visible) {\n if (scale !== 1) {\n updateTransform({\n x: 0,\n y: 0,\n scale: 1\n }, 'doubleClick');\n } else {\n dispatchZoomChange(BASE_SCALE_RATIO + scaleStep, 'doubleClick', event.clientX, event.clientY);\n }\n }\n };\n useEffect(function () {\n var onKeyDownListener = addEventListener(window, 'keydown', onKeyDown, false);\n return function () {\n onKeyDownListener.remove();\n };\n }, [visible, showLeftOrRightSwitches, current]);\n var imgNode = /*#__PURE__*/React.createElement(PreviewImage, _extends({}, imgCommonProps, {\n width: props.width,\n height: props.height,\n imgRef: imgRef,\n className: \"\".concat(prefixCls, \"-img\"),\n alt: alt,\n style: {\n transform: \"translate3d(\".concat(transform.x, \"px, \").concat(transform.y, \"px, 0) scale3d(\").concat(transform.flipX ? '-' : '').concat(scale, \", \").concat(transform.flipY ? '-' : '').concat(scale, \", 1) rotate(\").concat(rotate, \"deg)\"),\n transitionDuration: (!enableTransition || isTouching) && '0s'\n },\n fallback: fallback,\n src: src,\n onWheel: onWheel,\n onMouseDown: onMouseDown,\n onDoubleClick: onDoubleClick,\n onTouchStart: onTouchStart,\n onTouchMove: onTouchMove,\n onTouchEnd: onTouchEnd,\n onTouchCancel: onTouchEnd\n }));\n var image = _objectSpread({\n url: src,\n alt: alt\n }, imageInfo);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Dialog, _extends({\n transitionName: transitionName,\n maskTransitionName: maskTransitionName,\n closable: false,\n keyboard: true,\n prefixCls: prefixCls,\n onClose: onClose,\n visible: visible,\n classNames: {\n wrapper: wrapClassName\n },\n rootClassName: rootClassName,\n getContainer: getContainer\n }, restProps, {\n afterClose: onAfterClose\n }), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-img-wrapper\")\n }, imageRender ? imageRender(imgNode, _objectSpread({\n transform: transform,\n image: image\n }, groupContext ? {\n current: current\n } : {})) : imgNode)), /*#__PURE__*/React.createElement(Operations, {\n visible: visible,\n transform: transform,\n maskTransitionName: maskTransitionName,\n closeIcon: closeIcon,\n getContainer: getContainer,\n prefixCls: prefixCls,\n rootClassName: rootClassName,\n icons: icons,\n countRender: countRender,\n showSwitch: showLeftOrRightSwitches,\n showProgress: showOperationsProgress,\n current: current,\n count: count,\n scale: scale,\n minScale: minScale,\n maxScale: maxScale,\n toolbarRender: toolbarRender,\n onActive: onActive,\n onZoomIn: onZoomIn,\n onZoomOut: onZoomOut,\n onRotateRight: onRotateRight,\n onRotateLeft: onRotateLeft,\n onFlipX: onFlipX,\n onFlipY: onFlipY,\n onClose: onClose,\n onReset: onReset,\n zIndex: restProps.zIndex !== undefined ? restProps.zIndex + 1 : undefined,\n image: image\n }));\n};\nexport default Preview;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport addEventListener from \"rc-util/es/Dom/addEventListener\";\nimport { warning } from \"rc-util/es/warning\";\nimport { useEffect, useRef, useState } from 'react';\nimport getFixScaleEleTransPosition from \"../getFixScaleEleTransPosition\";\nimport { BASE_SCALE_RATIO, WHEEL_MAX_SCALE_RATIO } from \"../previewConfig\";\nexport default function useMouseEvent(imgRef, movable, visible, scaleStep, transform, updateTransform, dispatchZoomChange) {\n var rotate = transform.rotate,\n scale = transform.scale,\n x = transform.x,\n y = transform.y;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isMoving = _useState2[0],\n setMoving = _useState2[1];\n var startPositionInfo = useRef({\n diffX: 0,\n diffY: 0,\n transformX: 0,\n transformY: 0\n });\n var onMouseDown = function onMouseDown(event) {\n // Only allow main button\n if (!movable || event.button !== 0) return;\n event.preventDefault();\n event.stopPropagation();\n startPositionInfo.current = {\n diffX: event.pageX - x,\n diffY: event.pageY - y,\n transformX: x,\n transformY: y\n };\n setMoving(true);\n };\n var onMouseMove = function onMouseMove(event) {\n if (visible && isMoving) {\n updateTransform({\n x: event.pageX - startPositionInfo.current.diffX,\n y: event.pageY - startPositionInfo.current.diffY\n }, 'move');\n }\n };\n var onMouseUp = function onMouseUp() {\n if (visible && isMoving) {\n setMoving(false);\n\n /** No need to restore the position when the picture is not moved, So as not to interfere with the click */\n var _startPositionInfo$cu = startPositionInfo.current,\n transformX = _startPositionInfo$cu.transformX,\n transformY = _startPositionInfo$cu.transformY;\n var hasChangedPosition = x !== transformX && y !== transformY;\n if (!hasChangedPosition) return;\n var width = imgRef.current.offsetWidth * scale;\n var height = imgRef.current.offsetHeight * scale;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n var _imgRef$current$getBo = imgRef.current.getBoundingClientRect(),\n left = _imgRef$current$getBo.left,\n top = _imgRef$current$getBo.top;\n var isRotate = rotate % 180 !== 0;\n var fixState = getFixScaleEleTransPosition(isRotate ? height : width, isRotate ? width : height, left, top);\n if (fixState) {\n updateTransform(_objectSpread({}, fixState), 'dragRebound');\n }\n }\n };\n var onWheel = function onWheel(event) {\n if (!visible || event.deltaY == 0) return;\n // Scale ratio depends on the deltaY size\n var scaleRatio = Math.abs(event.deltaY / 100);\n // Limit the maximum scale ratio\n var mergedScaleRatio = Math.min(scaleRatio, WHEEL_MAX_SCALE_RATIO);\n // Scale the ratio each time\n var ratio = BASE_SCALE_RATIO + mergedScaleRatio * scaleStep;\n if (event.deltaY > 0) {\n ratio = BASE_SCALE_RATIO / ratio;\n }\n dispatchZoomChange(ratio, 'wheel', event.clientX, event.clientY);\n };\n useEffect(function () {\n var onTopMouseUpListener;\n var onTopMouseMoveListener;\n var onMouseUpListener;\n var onMouseMoveListener;\n if (movable) {\n onMouseUpListener = addEventListener(window, 'mouseup', onMouseUp, false);\n onMouseMoveListener = addEventListener(window, 'mousemove', onMouseMove, false);\n try {\n // Resolve if in iframe lost event\n /* istanbul ignore next */\n if (window.top !== window.self) {\n onTopMouseUpListener = addEventListener(window.top, 'mouseup', onMouseUp, false);\n onTopMouseMoveListener = addEventListener(window.top, 'mousemove', onMouseMove, false);\n }\n } catch (error) {\n /* istanbul ignore next */\n warning(false, \"[rc-image] \".concat(error));\n }\n }\n return function () {\n var _onMouseUpListener, _onMouseMoveListener, _onTopMouseUpListener, _onTopMouseMoveListen;\n (_onMouseUpListener = onMouseUpListener) === null || _onMouseUpListener === void 0 || _onMouseUpListener.remove();\n (_onMouseMoveListener = onMouseMoveListener) === null || _onMouseMoveListener === void 0 || _onMouseMoveListener.remove();\n /* istanbul ignore next */\n (_onTopMouseUpListener = onTopMouseUpListener) === null || _onTopMouseUpListener === void 0 || _onTopMouseUpListener.remove();\n /* istanbul ignore next */\n (_onTopMouseMoveListen = onTopMouseMoveListener) === null || _onTopMouseMoveListen === void 0 || _onTopMouseMoveListen.remove();\n };\n }, [visible, isMoving, x, y, rotate, movable]);\n return {\n isMoving: isMoving,\n onMouseDown: onMouseDown,\n onMouseMove: onMouseMove,\n onMouseUp: onMouseUp,\n onWheel: onWheel\n };\n}","/** Scale the ratio base */\nexport var BASE_SCALE_RATIO = 1;\n/** The maximum zoom ratio when the mouse zooms in, adjustable */\nexport var WHEEL_MAX_SCALE_RATIO = 1;","export var COMMON_PROPS = ['crossOrigin', 'decoding', 'draggable', 'loading', 'referrerPolicy', 'sizes', 'srcSet', 'useMap', 'alt'];","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"visible\", \"onVisibleChange\", \"getContainer\", \"current\", \"movable\", \"minScale\", \"maxScale\", \"countRender\", \"closeIcon\", \"onChange\", \"onTransform\", \"toolbarRender\", \"imageRender\"],\n _excluded2 = [\"src\"];\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport * as React from 'react';\nimport { useState } from 'react';\nimport Preview from \"./Preview\";\nimport { PreviewGroupContext } from \"./context\";\nimport usePreviewItems from \"./hooks/usePreviewItems\";\nvar Group = function Group(_ref) {\n var _mergedItems$current;\n var _ref$previewPrefixCls = _ref.previewPrefixCls,\n previewPrefixCls = _ref$previewPrefixCls === void 0 ? 'rc-image-preview' : _ref$previewPrefixCls,\n children = _ref.children,\n _ref$icons = _ref.icons,\n icons = _ref$icons === void 0 ? {} : _ref$icons,\n items = _ref.items,\n preview = _ref.preview,\n fallback = _ref.fallback;\n var _ref2 = _typeof(preview) === 'object' ? preview : {},\n previewVisible = _ref2.visible,\n onVisibleChange = _ref2.onVisibleChange,\n getContainer = _ref2.getContainer,\n currentIndex = _ref2.current,\n movable = _ref2.movable,\n minScale = _ref2.minScale,\n maxScale = _ref2.maxScale,\n countRender = _ref2.countRender,\n closeIcon = _ref2.closeIcon,\n onChange = _ref2.onChange,\n onTransform = _ref2.onTransform,\n toolbarRender = _ref2.toolbarRender,\n imageRender = _ref2.imageRender,\n dialogProps = _objectWithoutProperties(_ref2, _excluded);\n\n // ========================== Items ===========================\n var _usePreviewItems = usePreviewItems(items),\n _usePreviewItems2 = _slicedToArray(_usePreviewItems, 3),\n mergedItems = _usePreviewItems2[0],\n register = _usePreviewItems2[1],\n fromItems = _usePreviewItems2[2];\n\n // ========================= Preview ==========================\n // >>> Index\n var _useMergedState = useMergedState(0, {\n value: currentIndex\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n current = _useMergedState2[0],\n setCurrent = _useMergedState2[1];\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n keepOpenIndex = _useState2[0],\n setKeepOpenIndex = _useState2[1];\n\n // >>> Image\n var _ref3 = ((_mergedItems$current = mergedItems[current]) === null || _mergedItems$current === void 0 ? void 0 : _mergedItems$current.data) || {},\n src = _ref3.src,\n imgCommonProps = _objectWithoutProperties(_ref3, _excluded2);\n // >>> Visible\n var _useMergedState3 = useMergedState(!!previewVisible, {\n value: previewVisible,\n onChange: function onChange(val, prevVal) {\n onVisibleChange === null || onVisibleChange === void 0 || onVisibleChange(val, prevVal, current);\n }\n }),\n _useMergedState4 = _slicedToArray(_useMergedState3, 2),\n isShowPreview = _useMergedState4[0],\n setShowPreview = _useMergedState4[1];\n\n // >>> Position\n var _useState3 = useState(null),\n _useState4 = _slicedToArray(_useState3, 2),\n mousePosition = _useState4[0],\n setMousePosition = _useState4[1];\n var onPreviewFromImage = React.useCallback(function (id, imageSrc, mouseX, mouseY) {\n var index = fromItems ? mergedItems.findIndex(function (item) {\n return item.data.src === imageSrc;\n }) : mergedItems.findIndex(function (item) {\n return item.id === id;\n });\n setCurrent(index < 0 ? 0 : index);\n setShowPreview(true);\n setMousePosition({\n x: mouseX,\n y: mouseY\n });\n setKeepOpenIndex(true);\n }, [mergedItems, fromItems]);\n\n // Reset current when reopen\n React.useEffect(function () {\n if (isShowPreview) {\n if (!keepOpenIndex) {\n setCurrent(0);\n }\n } else {\n setKeepOpenIndex(false);\n }\n }, [isShowPreview]);\n\n // ========================== Events ==========================\n var onInternalChange = function onInternalChange(next, prev) {\n setCurrent(next);\n onChange === null || onChange === void 0 || onChange(next, prev);\n };\n var onPreviewClose = function onPreviewClose() {\n setShowPreview(false);\n setMousePosition(null);\n };\n\n // ========================= Context ==========================\n var previewGroupContext = React.useMemo(function () {\n return {\n register: register,\n onPreview: onPreviewFromImage\n };\n }, [register, onPreviewFromImage]);\n\n // ========================== Render ==========================\n return /*#__PURE__*/React.createElement(PreviewGroupContext.Provider, {\n value: previewGroupContext\n }, children, /*#__PURE__*/React.createElement(Preview, _extends({\n \"aria-hidden\": !isShowPreview,\n movable: movable,\n visible: isShowPreview,\n prefixCls: previewPrefixCls,\n closeIcon: closeIcon,\n onClose: onPreviewClose,\n mousePosition: mousePosition,\n imgCommonProps: imgCommonProps,\n src: src,\n fallback: fallback,\n icons: icons,\n minScale: minScale,\n maxScale: maxScale,\n getContainer: getContainer,\n current: current,\n count: mergedItems.length,\n countRender: countRender,\n onTransform: onTransform,\n toolbarRender: toolbarRender,\n imageRender: imageRender,\n onChange: onInternalChange\n }, dialogProps)));\n};\nexport default Group;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { PreviewGroupContext } from \"../context\";\nvar uid = 0;\nexport default function useRegisterImage(canPreview, data) {\n var _React$useState = React.useState(function () {\n uid += 1;\n return String(uid);\n }),\n _React$useState2 = _slicedToArray(_React$useState, 1),\n id = _React$useState2[0];\n var groupContext = React.useContext(PreviewGroupContext);\n var registerData = {\n data: data,\n canPreview: canPreview\n };\n\n // Keep order start\n // Resolve https://github.com/ant-design/ant-design/issues/28881\n // Only need unRegister when component unMount\n React.useEffect(function () {\n if (groupContext) {\n return groupContext.register(id, registerData);\n }\n }, []);\n React.useEffect(function () {\n if (groupContext) {\n groupContext.register(id, registerData);\n }\n }, [canPreview, data]);\n return id;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"src\", \"alt\", \"onPreviewClose\", \"prefixCls\", \"previewPrefixCls\", \"placeholder\", \"fallback\", \"width\", \"height\", \"style\", \"preview\", \"className\", \"onClick\", \"onError\", \"wrapperClassName\", \"wrapperStyle\", \"rootClassName\"],\n _excluded2 = [\"src\", \"visible\", \"onVisibleChange\", \"getContainer\", \"mask\", \"maskClassName\", \"movable\", \"icons\", \"scaleStep\", \"minScale\", \"maxScale\", \"imageRender\", \"toolbarRender\"];\nimport cn from 'classnames';\nimport { getOffset } from \"rc-util/es/Dom/css\";\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport * as React from 'react';\nimport { useContext, useMemo, useState } from 'react';\nimport Preview from \"./Preview\";\nimport PreviewGroup from \"./PreviewGroup\";\nimport { COMMON_PROPS } from \"./common\";\nimport { PreviewGroupContext } from \"./context\";\nimport useRegisterImage from \"./hooks/useRegisterImage\";\nimport useStatus from \"./hooks/useStatus\";\nvar ImageInternal = function ImageInternal(props) {\n var imgSrc = props.src,\n alt = props.alt,\n onInitialPreviewClose = props.onPreviewClose,\n _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'rc-image' : _props$prefixCls,\n _props$previewPrefixC = props.previewPrefixCls,\n previewPrefixCls = _props$previewPrefixC === void 0 ? \"\".concat(prefixCls, \"-preview\") : _props$previewPrefixC,\n placeholder = props.placeholder,\n fallback = props.fallback,\n width = props.width,\n height = props.height,\n style = props.style,\n _props$preview = props.preview,\n preview = _props$preview === void 0 ? true : _props$preview,\n className = props.className,\n onClick = props.onClick,\n onError = props.onError,\n wrapperClassName = props.wrapperClassName,\n wrapperStyle = props.wrapperStyle,\n rootClassName = props.rootClassName,\n otherProps = _objectWithoutProperties(props, _excluded);\n var isCustomPlaceholder = placeholder && placeholder !== true;\n var _ref = _typeof(preview) === 'object' ? preview : {},\n previewSrc = _ref.src,\n _ref$visible = _ref.visible,\n previewVisible = _ref$visible === void 0 ? undefined : _ref$visible,\n _ref$onVisibleChange = _ref.onVisibleChange,\n onPreviewVisibleChange = _ref$onVisibleChange === void 0 ? onInitialPreviewClose : _ref$onVisibleChange,\n _ref$getContainer = _ref.getContainer,\n getPreviewContainer = _ref$getContainer === void 0 ? undefined : _ref$getContainer,\n previewMask = _ref.mask,\n maskClassName = _ref.maskClassName,\n movable = _ref.movable,\n icons = _ref.icons,\n scaleStep = _ref.scaleStep,\n minScale = _ref.minScale,\n maxScale = _ref.maxScale,\n imageRender = _ref.imageRender,\n toolbarRender = _ref.toolbarRender,\n dialogProps = _objectWithoutProperties(_ref, _excluded2);\n var src = previewSrc !== null && previewSrc !== void 0 ? previewSrc : imgSrc;\n var _useMergedState = useMergedState(!!previewVisible, {\n value: previewVisible,\n onChange: onPreviewVisibleChange\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n isShowPreview = _useMergedState2[0],\n setShowPreview = _useMergedState2[1];\n var _useStatus = useStatus({\n src: imgSrc,\n isCustomPlaceholder: isCustomPlaceholder,\n fallback: fallback\n }),\n _useStatus2 = _slicedToArray(_useStatus, 3),\n getImgRef = _useStatus2[0],\n srcAndOnload = _useStatus2[1],\n status = _useStatus2[2];\n var _useState = useState(null),\n _useState2 = _slicedToArray(_useState, 2),\n mousePosition = _useState2[0],\n setMousePosition = _useState2[1];\n var groupContext = useContext(PreviewGroupContext);\n var canPreview = !!preview;\n var onPreviewClose = function onPreviewClose() {\n setShowPreview(false);\n setMousePosition(null);\n };\n var wrapperClass = cn(prefixCls, wrapperClassName, rootClassName, _defineProperty({}, \"\".concat(prefixCls, \"-error\"), status === 'error'));\n\n // ========================= ImageProps =========================\n var imgCommonProps = useMemo(function () {\n var obj = {};\n COMMON_PROPS.forEach(function (prop) {\n if (props[prop] !== undefined) {\n obj[prop] = props[prop];\n }\n });\n return obj;\n }, COMMON_PROPS.map(function (prop) {\n return props[prop];\n }));\n\n // ========================== Register ==========================\n var registerData = useMemo(function () {\n return _objectSpread(_objectSpread({}, imgCommonProps), {}, {\n src: src\n });\n }, [src, imgCommonProps]);\n var imageId = useRegisterImage(canPreview, registerData);\n\n // ========================== Preview ===========================\n var onPreview = function onPreview(e) {\n var _getOffset = getOffset(e.target),\n left = _getOffset.left,\n top = _getOffset.top;\n if (groupContext) {\n groupContext.onPreview(imageId, src, left, top);\n } else {\n setMousePosition({\n x: left,\n y: top\n });\n setShowPreview(true);\n }\n onClick === null || onClick === void 0 || onClick(e);\n };\n\n // =========================== Render ===========================\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", _extends({}, otherProps, {\n className: wrapperClass,\n onClick: canPreview ? onPreview : onClick,\n style: _objectSpread({\n width: width,\n height: height\n }, wrapperStyle)\n }), /*#__PURE__*/React.createElement(\"img\", _extends({}, imgCommonProps, {\n className: cn(\"\".concat(prefixCls, \"-img\"), _defineProperty({}, \"\".concat(prefixCls, \"-img-placeholder\"), placeholder === true), className),\n style: _objectSpread({\n height: height\n }, style),\n ref: getImgRef\n }, srcAndOnload, {\n width: width,\n height: height,\n onError: onError\n })), status === 'loading' && /*#__PURE__*/React.createElement(\"div\", {\n \"aria-hidden\": \"true\",\n className: \"\".concat(prefixCls, \"-placeholder\")\n }, placeholder), previewMask && canPreview && /*#__PURE__*/React.createElement(\"div\", {\n className: cn(\"\".concat(prefixCls, \"-mask\"), maskClassName),\n style: {\n display: (style === null || style === void 0 ? void 0 : style.display) === 'none' ? 'none' : undefined\n }\n }, previewMask)), !groupContext && canPreview && /*#__PURE__*/React.createElement(Preview, _extends({\n \"aria-hidden\": !isShowPreview,\n visible: isShowPreview,\n prefixCls: previewPrefixCls,\n onClose: onPreviewClose,\n mousePosition: mousePosition,\n src: src,\n alt: alt,\n imageInfo: {\n width: width,\n height: height\n },\n fallback: fallback,\n getContainer: getPreviewContainer,\n icons: icons,\n movable: movable,\n scaleStep: scaleStep,\n minScale: minScale,\n maxScale: maxScale,\n rootClassName: rootClassName,\n imageRender: imageRender,\n imgCommonProps: imgCommonProps,\n toolbarRender: toolbarRender\n }, dialogProps)));\n};\nImageInternal.PreviewGroup = PreviewGroup;\nif (process.env.NODE_ENV !== 'production') {\n ImageInternal.displayName = 'Image';\n}\nexport default ImageInternal;","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { COMMON_PROPS } from \"../common\";\n/**\n * Merge props provided `items` or context collected images\n */\nexport default function usePreviewItems(items) {\n // Context collection image data\n var _React$useState = React.useState({}),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n images = _React$useState2[0],\n setImages = _React$useState2[1];\n var registerImage = React.useCallback(function (id, data) {\n setImages(function (imgs) {\n return _objectSpread(_objectSpread({}, imgs), {}, _defineProperty({}, id, data));\n });\n return function () {\n setImages(function (imgs) {\n var cloneImgs = _objectSpread({}, imgs);\n delete cloneImgs[id];\n return cloneImgs;\n });\n };\n }, []);\n\n // items\n var mergedItems = React.useMemo(function () {\n // use `items` first\n if (items) {\n return items.map(function (item) {\n if (typeof item === 'string') {\n return {\n data: {\n src: item\n }\n };\n }\n var data = {};\n Object.keys(item).forEach(function (key) {\n if (['src'].concat(_toConsumableArray(COMMON_PROPS)).includes(key)) {\n data[key] = item[key];\n }\n });\n return {\n data: data\n };\n });\n }\n\n // use registered images secondly\n return Object.keys(images).reduce(function (total, id) {\n var _images$id = images[id],\n canPreview = _images$id.canPreview,\n data = _images$id.data;\n if (canPreview) {\n total.push({\n data: data,\n id: id\n });\n }\n return total;\n }, []);\n }, [items, images]);\n return [mergedItems, registerImage, !!items];\n}","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // avoid screen readers from reading out loud the text\n mark.ariaHidden = \"true\"\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n","var clamp = function (a, min, max) {\n if (a < min) {\n return min;\n }\n else if (a > max) {\n return max;\n }\n return a;\n};\nexport default clamp;\n//# sourceMappingURL=clamp.js.map","import { Linear, createInterpolateValue } from '@antv/scale';\nimport { extent, max, rollups } from '@antv/vendor/d3-array';\nimport * as d3ScaleChromatic from '@antv/vendor/d3-scale-chromatic';\nimport { deepMix, omit, upperFirst } from '@antv/util';\nimport { firstOf, lastOf, unique } from '../utils/array';\nimport { defined, identity, isStrictObject } from '../utils/helper';\nimport { isTheta } from './coordinate';\nimport { useLibrary } from './library';\nexport function inferScale(name, values, options, coordinates, theme, library) {\n const { guide = {} } = options;\n const type = inferScaleType(name, values, options);\n if (typeof type !== 'string')\n return options;\n const expectedDomain = inferScaleDomain(type, name, values, options);\n const actualDomain = maybeRatio(type, expectedDomain, options);\n return Object.assign(Object.assign(Object.assign({}, options), inferScaleOptions(type, name, values, options, coordinates)), { domain: actualDomain, range: inferScaleRange(type, name, values, options, actualDomain, theme, library), expectedDomain,\n guide,\n name,\n type });\n}\nexport function applyScale(channels, scale) {\n const scaledValue = {};\n for (const channel of channels) {\n const { values, name: scaleName } = channel;\n const scaleInstance = scale[scaleName];\n for (const value of values) {\n const { name, value: V } = value;\n scaledValue[name] = V.map((d) => scaleInstance.map(d));\n }\n }\n return scaledValue;\n}\nexport function groupTransform(markState, uidScale) {\n const channels = Array.from(markState.values()).flatMap((d) => d.channels);\n const scaleGroups = rollups(channels, (channels) => channels.map((d) => uidScale.get(d.scale.uid)), (d) => d.name)\n .filter(([, scales]) => scales.some((d) => typeof d.getOptions().groupTransform === 'function') && // only sync scales with groupTransform options\n scales.every((d) => d.getTicks))\n .map((d) => d[1]);\n scaleGroups.forEach((group) => {\n const groupTransform = group.map((d) => d.getOptions().groupTransform)[0];\n groupTransform(group);\n });\n}\nexport function collectScales(states, options) {\n var _a;\n const { components = [] } = options;\n const NONE_STATIC_KEYS = [\n 'scale',\n 'encode',\n 'axis',\n 'legend',\n 'data',\n 'transform',\n ];\n // From normal marks.\n const scales = Array.from(new Set(states.flatMap((d) => d.channels.map((d) => d.scale))));\n // From static marks.\n const nameScale = new Map(scales.map((scale) => [scale.name, scale]));\n for (const component of components) {\n const channels = inferChannelsForComponent(component);\n for (const channel of channels) {\n const scale = nameScale.get(channel);\n const staticScale = ((_a = component.scale) === null || _a === void 0 ? void 0 : _a[channel]) || {};\n const { independent = false } = staticScale;\n if (scale && !independent) {\n // Merged with exist scales if is not independent.\n const { guide } = scale;\n const guide1 = typeof guide === 'boolean' ? {} : guide;\n scale.guide = deepMix({}, guide1, component);\n Object.assign(scale, staticScale);\n }\n else {\n // Append new scales without exit scales or independent.\n const options1 = Object.assign(Object.assign({}, staticScale), { expectedDomain: staticScale.domain, name: channel, guide: omit(component, NONE_STATIC_KEYS) });\n scales.push(options1);\n }\n }\n }\n return scales;\n}\nexport function useRelation(relations) {\n if (!relations || !Array.isArray(relations))\n return [identity, identity];\n // Store original map and invert.\n let map;\n let invert;\n const conditionalize = (scale) => {\n var _a;\n map = scale.map.bind(scale);\n invert = (_a = scale.invert) === null || _a === void 0 ? void 0 : _a.bind(scale);\n // Distinguish functions[function, output] and value[vale, output] relations.\n const funcRelations = relations.filter(([v]) => typeof v === 'function');\n const valueRelations = relations.filter(([v]) => typeof v !== 'function');\n // Update scale.map\n const valueOutput = new Map(valueRelations);\n scale.map = (x) => {\n for (const [verify, value] of funcRelations) {\n if (verify(x))\n return value;\n }\n if (valueOutput.has(x))\n return valueOutput.get(x);\n return map(x);\n };\n if (!invert)\n return scale;\n // Update scale.invert\n const outputValue = new Map(valueRelations.map(([a, b]) => [b, a]));\n const outputFunc = new Map(funcRelations.map(([a, b]) => [b, a]));\n scale.invert = (x) => {\n if (outputFunc.has(x))\n return x;\n if (outputValue.has(x))\n return outputValue.get(x);\n return invert(x);\n };\n return scale;\n };\n const deconditionalize = (scale) => {\n if (map !== null)\n scale.map = map;\n if (invert !== null)\n scale.invert = invert;\n return scale;\n };\n return [conditionalize, deconditionalize];\n}\nexport function assignScale(target, source) {\n const keys = Object.keys(target);\n for (const scale of Object.values(source)) {\n const { name } = scale.getOptions();\n if (!(name in target))\n target[name] = scale;\n else {\n const I = keys\n .filter((d) => d.startsWith(name))\n // Reg is for extract `1` from `x1`;\n .map((d) => +(d.replace(name, '') || 0));\n const index = max(I) + 1;\n const newKey = `${name}${index}`;\n target[newKey] = scale;\n scale.getOptions().key = newKey;\n }\n }\n return target;\n}\nexport function useRelationScale(options, library) {\n const [useScale] = useLibrary('scale', library);\n const { relations } = options;\n const [conditionalize] = useRelation(relations);\n const scale = useScale(options);\n return conditionalize(scale);\n}\nexport function syncFacetsScales(states) {\n const scales = states\n .flatMap((d) => Array.from(d.values()))\n .flatMap((d) => d.channels.map((d) => d.scale));\n syncFacetsScaleByChannel(scales, 'x');\n syncFacetsScaleByChannel(scales, 'y');\n}\nfunction inferChannelsForComponent(component) {\n const { channels = [], type, scale = {} } = component;\n const L = ['shape', 'color', 'opacity', 'size'];\n if (channels.length !== 0)\n return channels;\n if (type === 'axisX')\n return ['x'];\n if (type === 'axisY')\n return ['y'];\n if (type === 'legends')\n return Object.keys(scale).filter((d) => L.includes(d));\n return [];\n}\nfunction syncFacetsScaleByChannel(scales, channel) {\n const S = scales.filter(({ name, facet = true }) => facet && name === channel);\n const D = S.flatMap((d) => d.domain);\n const syncedD = S.every(isQuantitativeScale)\n ? extent(D)\n : S.every(isDiscreteScale)\n ? Array.from(new Set(D))\n : null;\n if (syncedD === null)\n return;\n for (const scale of S) {\n scale.domain = syncedD;\n }\n}\nfunction maybeRatio(type, domain, options) {\n const { ratio } = options;\n if (ratio === undefined || ratio === null)\n return domain;\n if (isQuantitativeScale({ type })) {\n return clampQuantitativeScale(domain, ratio, type);\n }\n if (isDiscreteScale({ type }))\n return clampDiscreteScale(domain, ratio);\n return domain;\n}\nfunction clampQuantitativeScale(domain, ratio, type) {\n const D = domain.map(Number);\n const scale = new Linear({\n domain: D,\n range: [D[0], D[0] + (D[D.length - 1] - D[0]) * ratio],\n });\n if (type === 'time')\n return domain.map((d) => new Date(scale.map(d)));\n return domain.map((d) => scale.map(d));\n}\nfunction clampDiscreteScale(domain, ratio) {\n const index = Math.round(domain.length * ratio);\n return domain.slice(0, index);\n}\nfunction isQuantitativeScale(scale) {\n const { type } = scale;\n if (typeof type !== 'string')\n return false;\n // Do not take quantize, quantile or threshold scale into account,\n // because they are not for position scales. If they are, there is\n // no need to sync them.\n const names = ['linear', 'log', 'pow', 'time'];\n return names.includes(type);\n}\nfunction isDiscreteScale(scale) {\n const { type } = scale;\n if (typeof type !== 'string')\n return false;\n const names = ['band', 'point', 'ordinal'];\n return names.includes(type);\n}\n// @todo More accurate inference for different cases.\nfunction inferScaleType(name, values, options) {\n const { type, domain, range, quantitative, ordinal } = options;\n if (type !== undefined)\n return type;\n if (isObject(values))\n return 'identity';\n if (typeof range === 'string')\n return 'linear';\n if ((domain || range || []).length > 2)\n return asOrdinalType(name, ordinal);\n if (domain !== undefined) {\n if (isOrdinal([domain]))\n return asOrdinalType(name, ordinal);\n if (isTemporal(values))\n return 'time';\n return asQuantitativeType(name, range, quantitative);\n }\n if (isOrdinal(values))\n return asOrdinalType(name, ordinal);\n if (isTemporal(values))\n return 'time';\n return asQuantitativeType(name, range, quantitative);\n}\nfunction inferScaleDomain(type, name, values, options) {\n const { domain } = options;\n if (domain !== undefined)\n return domain;\n switch (type) {\n case 'linear':\n case 'time':\n case 'log':\n case 'pow':\n case 'sqrt':\n case 'quantize':\n case 'threshold':\n return maybeMinMax(inferDomainQ(values, options), options);\n case 'band':\n case 'ordinal':\n case 'point':\n return inferDomainC(values);\n case 'quantile':\n return inferDomainO(values);\n case 'sequential':\n return maybeMinMax(inferDomainS(values), options);\n default:\n return [];\n }\n}\nfunction inferScaleRange(type, name, values, options, domain, theme, library) {\n const { range } = options;\n if (typeof range === 'string')\n return gradientColors(range);\n if (range !== undefined)\n return range;\n const { rangeMin, rangeMax } = options;\n switch (type) {\n case 'linear':\n case 'time':\n case 'log':\n case 'pow':\n case 'sqrt': {\n const colors = categoricalColors(values, options, domain, theme, library);\n const [r0, r1] = inferRangeQ(name, colors);\n return [rangeMin !== null && rangeMin !== void 0 ? rangeMin : r0, rangeMax !== null && rangeMax !== void 0 ? rangeMax : r1];\n }\n case 'band':\n case 'point': {\n const min = name === 'size' ? 5 : 0;\n const max = name === 'size' ? 10 : 1;\n return [rangeMin !== null && rangeMin !== void 0 ? rangeMin : min, rangeMax !== null && rangeMax !== void 0 ? rangeMax : max];\n }\n case 'ordinal': {\n return categoricalColors(values, options, domain, theme, library);\n }\n case 'sequential':\n return undefined;\n case 'constant':\n return [values[0][0]];\n default:\n return [];\n }\n}\nfunction inferScaleOptions(type, name, values, options, coordinates) {\n switch (type) {\n case 'linear':\n case 'time':\n case 'log':\n case 'pow':\n case 'sqrt':\n return inferOptionsQ(coordinates, options);\n case 'band':\n case 'point':\n return inferOptionsC(type, name, coordinates, options);\n case 'sequential':\n return inferOptionsS(options);\n default:\n return options;\n }\n}\nfunction categoricalColors(values, options, domain, theme, library) {\n const [usePalette] = useLibrary('palette', library);\n const { category10: c10, category20: c20 } = theme;\n const defaultPalette = unique(domain).length <= c10.length ? c10 : c20;\n const { palette = defaultPalette, offset } = options;\n if (Array.isArray(palette))\n return palette;\n // Built-in palettes have higher priority.\n try {\n return usePalette({ type: palette });\n }\n catch (e) {\n const colors = interpolatedColors(palette, domain, offset);\n if (colors)\n return colors;\n throw new Error(`Unknown Component: ${palette} `);\n }\n}\nfunction gradientColors(range) {\n return range.split('-');\n}\nfunction interpolatedColors(palette, domain, offset = (d) => d) {\n if (!palette)\n return null;\n const fullName = upperFirst(palette);\n // If scheme have enough colors, then return pre-defined colors.\n const scheme = d3ScaleChromatic[`scheme${fullName}`];\n const interpolator = d3ScaleChromatic[`interpolate${fullName}`];\n if (!scheme && !interpolator)\n return null;\n if (scheme) {\n // If is a one dimension array, return it.\n if (!scheme.some(Array.isArray))\n return scheme;\n const schemeColors = scheme[domain.length];\n if (schemeColors)\n return schemeColors;\n }\n // Otherwise interpolate to get full colors.\n return domain.map((_, i) => interpolator(offset(i / domain.length)));\n}\nfunction inferOptionsS(options) {\n const { palette = 'ylGnBu', offset } = options;\n const name = upperFirst(palette);\n const interpolator = d3ScaleChromatic[`interpolate${name}`];\n if (!interpolator)\n throw new Error(`Unknown palette: ${name}`);\n return {\n interpolator: offset ? (x) => interpolator(offset(x)) : interpolator,\n };\n}\nfunction inferOptionsQ(coordinates, options) {\n const { interpolate = createInterpolateValue, nice = false, tickCount = 5, } = options;\n return Object.assign(Object.assign({}, options), { interpolate, nice, tickCount });\n}\nfunction inferOptionsC(type, name, coordinates, options) {\n if (options.padding !== undefined ||\n options.paddingInner !== undefined ||\n options.paddingOuter !== undefined) {\n return Object.assign(Object.assign({}, options), { unknown: NaN });\n }\n const padding = inferPadding(type, name, coordinates);\n const { paddingInner = padding, paddingOuter = padding } = options;\n return Object.assign(Object.assign({}, options), { paddingInner,\n paddingOuter,\n padding, unknown: NaN });\n}\nfunction inferPadding(type, name, coordinates) {\n // The scale for enterDelay and enterDuration should has zero padding by default.\n // Because there is no need to add extra delay for the start and the end.\n if (name === 'enterDelay' || name === 'enterDuration')\n return 0;\n if (name === 'size')\n return 0;\n if (type === 'band')\n return isTheta(coordinates) ? 0 : 0.1;\n // Point scale need 0.5 padding to make interval between first and last point\n // equal to other intervals in polar coordinate.\n if (type === 'point')\n return 0.5;\n return 0;\n}\nfunction asOrdinalType(name, defaults) {\n if (defaults)\n return defaults;\n return isQuantitative(name) ? 'point' : 'ordinal';\n}\nfunction asQuantitativeType(name, range, defaults) {\n if (defaults)\n return defaults;\n if (name !== 'color')\n return 'linear';\n return range ? 'linear' : 'sequential';\n}\nfunction maybeMinMax(domain, options) {\n if (domain.length === 0)\n return domain;\n const { domainMin, domainMax } = options;\n const [d0, d1] = domain;\n return [domainMin !== null && domainMin !== void 0 ? domainMin : d0, domainMax !== null && domainMax !== void 0 ? domainMax : d1];\n}\nfunction inferDomainQ(values, options) {\n const { zero = false } = options;\n let min = Infinity;\n let max = -Infinity;\n for (const value of values) {\n for (const d of value) {\n if (defined(d)) {\n min = Math.min(min, +d);\n max = Math.max(max, +d);\n }\n }\n }\n if (min === Infinity)\n return [];\n return zero ? [Math.min(0, min), max] : [min, max];\n}\nfunction inferDomainC(values) {\n return Array.from(new Set(values.flat()));\n}\nfunction inferDomainO(values) {\n return values.flat().sort();\n}\nfunction inferDomainS(values) {\n let min = Infinity;\n let max = -Infinity;\n for (const value of values) {\n for (const d of value) {\n if (defined(d)) {\n min = Math.min(min, +d);\n max = Math.max(max, +d);\n }\n }\n }\n if (min === Infinity)\n return [];\n return [min < 0 ? -max : min, max];\n}\n/**\n * @todo More nice default range for enterDelay and enterDuration.\n * @todo Move these to channel definition.\n */\nfunction inferRangeQ(name, palette) {\n if (name === 'enterDelay')\n return [0, 1000];\n if (name == 'enterDuration')\n return [300, 1000];\n if (name.startsWith('y') || name.startsWith('position'))\n return [1, 0];\n if (name === 'color')\n return [firstOf(palette), lastOf(palette)];\n if (name === 'opacity')\n return [0, 1];\n if (name === 'size')\n return [1, 10];\n return [0, 1];\n}\nfunction isOrdinal(values) {\n return some(values, (d) => {\n const type = typeof d;\n return type === 'string' || type === 'boolean';\n });\n}\nfunction isTemporal(values) {\n return some(values, (d) => d instanceof Date);\n}\nfunction isObject(values) {\n return some(values, isStrictObject);\n}\nfunction some(values, callback) {\n for (const V of values) {\n if (V.some(callback))\n return true;\n }\n return false;\n}\nfunction isQuantitative(name) {\n return (name.startsWith('x') ||\n name.startsWith('y') ||\n name.startsWith('position') ||\n name.startsWith('size'));\n}\n// Spatial and temporal position.\nexport function isPosition(name) {\n return (name.startsWith('x') ||\n name.startsWith('y') ||\n name.startsWith('position') ||\n name === 'enterDelay' ||\n name === 'enterDuration' ||\n name === 'updateDelay' ||\n name === 'updateDuration' ||\n name === 'exitDelay' ||\n name === 'exitDuration');\n}\nexport function isValidScale(scale) {\n if (!scale || !scale.type)\n return false;\n if (typeof scale.type === 'function')\n return true;\n const { type, domain, range, interpolator } = scale;\n const isValidDomain = domain && domain.length > 0;\n const isValidRange = range && range.length > 0;\n if ([\n 'linear',\n 'sqrt',\n 'log',\n 'time',\n 'pow',\n 'threshold',\n 'quantize',\n 'quantile',\n 'ordinal',\n 'band',\n 'point',\n ].includes(type) &&\n isValidDomain &&\n isValidRange) {\n return true;\n }\n if (['sequential'].includes(type) &&\n isValidDomain &&\n (isValidRange || interpolator)) {\n return true;\n }\n if (['constant', 'identity'].includes(type) && isValidRange)\n return true;\n return false;\n}\n//# sourceMappingURL=scale.js.map","import * as glMatrix from \"./common.js\";\n/**\n * 3 Dimensional Vector\n * @module vec3\n */\n\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(3);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\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 */\n\nexport function clone(a) {\n var 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 */\n\nexport function length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return Math.hypot(x, y, 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 */\n\nexport function fromValues(x, y, z) {\n var 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 */\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 */\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 */\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 */\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 */\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 */\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 */\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 */\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 */\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 */\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 * Math.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 */\n\nexport function round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.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 */\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 */\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 */\n\nexport function distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return Math.hypot(x, y, 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 */\n\nexport function squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var 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 */\n\nexport function squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var 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 */\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 */\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 */\n\nexport function normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var len = x * x + y * y + z * z;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\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 */\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 */\n\nexport function cross(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n var bx = b[0],\n by = b[1],\n 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 */\n\nexport function lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var 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 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 */\n\nexport function hermite(out, a, b, c, d, t) {\n var factorTimes2 = t * t;\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\n var factor2 = factorTimes2 * (t - 2) + t;\n var factor3 = factorTimes2 * (t - 1);\n var 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 */\n\nexport function bezier(out, a, b, c, d, t) {\n var inverseFactor = 1 - t;\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n var factorTimes2 = t * t;\n var factor1 = inverseFactorTimesTwo * inverseFactor;\n var factor2 = 3 * t * inverseFactorTimesTwo;\n var factor3 = 3 * factorTimes2 * inverseFactor;\n var 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 ommitted, a unit vector will be returned\n * @returns {vec3} out\n */\n\nexport function random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n var z = glMatrix.RANDOM() * 2.0 - 1.0;\n var 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 */\n\nexport function transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var 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 */\n\nexport function transformMat3(out, a, m) {\n var x = a[0],\n y = a[1],\n 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 */\n\nexport function transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var x = a[0],\n y = a[1],\n z = a[2]; // var qvec = [qx, qy, qz];\n // var uv = vec3.cross([], qvec, a);\n\n var uvx = qy * z - qz * y,\n uvy = qz * x - qx * z,\n uvz = qx * y - qy * x; // var uuv = vec3.cross([], qvec, uv);\n\n var uuvx = qy * uvz - qz * uvy,\n uuvy = qz * uvx - qx * uvz,\n uuvz = qx * uvy - qy * uvx; // vec3.scale(uv, uv, 2 * w);\n\n var w2 = qw * 2;\n uvx *= w2;\n uvy *= w2;\n uvz *= w2; // vec3.scale(uuv, uuv, 2);\n\n uuvx *= 2;\n uuvy *= 2;\n uuvz *= 2; // return vec3.add(out, a, vec3.add(out, uv, uuv));\n\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 */\n\nexport function rotateX(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\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); //translate to correct position\n\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 */\n\nexport function rotateY(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\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); //translate to correct position\n\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 */\n\nexport function rotateZ(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\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]; //translate to correct position\n\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 */\n\nexport function angle(a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n bx = b[0],\n by = b[1],\n bz = b[2],\n mag1 = Math.sqrt(ax * ax + ay * ay + az * az),\n mag2 = Math.sqrt(bx * bx + by * by + bz * bz),\n mag = mag1 * mag2,\n 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 */\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 */\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 */\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 */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && 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 */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec3.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec3.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec3.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec3.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec3.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec3.squaredLength}\n * @function\n */\n\nexport var 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 */\n\nexport var forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 3;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\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\n return a;\n };\n}();","import isArrayLike from './is-array-like';\nexport default function last(o) {\n if (isArrayLike(o)) {\n var arr = o;\n return arr[arr.length - 1];\n }\n return undefined;\n}\n//# sourceMappingURL=last.js.map","import { ProForm } from \"./ProForm\";\nexport { DrawerForm } from \"./DrawerForm\";\nexport { LightFilter } from \"./LightFilter\";\nexport { LoginForm } from \"./LoginForm\";\nexport { LoginFormPage } from \"./LoginFormPage\";\nexport { ModalForm } from \"./ModalForm\";\nexport { QueryFilter } from \"./QueryFilter\";\nexport { StepsForm } from \"./StepsForm\";\nexport { ProForm };\nexport var ProFormGroup = ProForm.Group;","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Axis as AxisComponent } from '@antv/component';\nimport { Linear as LinearScale } from '@antv/scale';\nimport { deepMix, omit, upperFirst } from '@antv/util';\nimport { extent } from '@antv/vendor/d3-array';\nimport { format } from '@antv/vendor/d3-format';\nimport { angleOf, isFisheye, isParallel, isPolar, isRadial, isTheta, isTranspose, radiusOf, } from '../utils/coordinate';\nimport { prettyNumber } from '../utils/number';\nimport { capitalizeFirst } from '../utils/helper';\nimport { adaptor, isVertical, titleContent } from './utils';\nexport function rotateAxis(axis, options) {\n const { eulerAngles, origin } = options;\n if (origin) {\n axis.setOrigin(origin);\n }\n if (eulerAngles) {\n axis.rotate(eulerAngles[0], eulerAngles[1], eulerAngles[2]);\n }\n}\nfunction sizeOf(coordinate) {\n // @ts-ignore\n const { innerWidth, innerHeight, depth } = coordinate.getOptions();\n return [innerWidth, innerHeight, depth];\n}\nfunction createFisheye(position, coordinate) {\n const { width, height } = coordinate.getOptions();\n return (tick) => {\n if (!isFisheye(coordinate))\n return tick;\n const tickPoint = position === 'bottom' ? [tick, 1] : [0, tick];\n const vector = coordinate.map(tickPoint);\n if (position === 'bottom') {\n const v = vector[0];\n const x = new LinearScale({\n domain: [0, width],\n range: [0, 1],\n });\n return x.map(v);\n }\n else if (position === 'left') {\n const v = vector[1];\n const x = new LinearScale({\n domain: [0, height],\n range: [0, 1],\n });\n return x.map(v);\n }\n return tick;\n };\n}\nfunction ticksOf(scale, domain, tickMethod) {\n if (scale.getTicks)\n return scale.getTicks();\n if (!tickMethod)\n return domain;\n const [min, max] = extent(domain, (d) => +d);\n const { tickCount } = scale.getOptions();\n return tickMethod(min, max, tickCount);\n}\n// Set inset for axis.\nfunction createInset(position, coordinate) {\n if (isPolar(coordinate))\n return (d) => d;\n const options = coordinate.getOptions();\n const { innerWidth, innerHeight, insetTop, insetBottom, insetLeft, insetRight, } = options;\n const [start, end, size] = position === 'left' || position === 'right'\n ? [insetTop, insetBottom, innerHeight]\n : [insetLeft, insetRight, innerWidth];\n const x = new LinearScale({\n domain: [0, 1],\n range: [start / size, 1 - end / size],\n });\n return (i) => x.map(i);\n}\n/**\n * Calc ticks based on scale and coordinate.\n */\nfunction getData(scale, domain, tickCount, defaultTickFormatter, tickFilter, tickMethod, position, coordinate) {\n var _a;\n if (tickCount !== undefined || tickMethod !== undefined) {\n scale.update(Object.assign(Object.assign({}, (tickCount && { tickCount })), (tickMethod && { tickMethod })));\n }\n const ticks = ticksOf(scale, domain, tickMethod);\n const filteredTicks = tickFilter ? ticks.filter(tickFilter) : ticks;\n const toString = (d) => d instanceof Date\n ? String(d)\n : typeof d === 'object' && !!d\n ? d\n : String(d);\n const labelFormatter = defaultTickFormatter || ((_a = scale.getFormatter) === null || _a === void 0 ? void 0 : _a.call(scale)) || toString;\n const applyInset = createInset(position, coordinate);\n const applyFisheye = createFisheye(position, coordinate);\n const isHorizontal = (position) => ['top', 'bottom', 'center', 'outer'].includes(position);\n const isVertical = (position) => ['left', 'right'].includes(position);\n // @todo GUI should consider the overlap problem for the first\n // and label of arc axis.\n if (isPolar(coordinate) || isTranspose(coordinate)) {\n return filteredTicks.map((d, i, array) => {\n var _a, _b;\n const offset = ((_a = scale.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(scale, d)) / 2 || 0;\n const tick = applyInset(scale.map(d) + offset);\n const shouldReverse = (isRadial(coordinate) && position === 'center') ||\n (isTranspose(coordinate) &&\n ((_b = scale.getTicks) === null || _b === void 0 ? void 0 : _b.call(scale)) &&\n isHorizontal(position)) ||\n (isTranspose(coordinate) && isVertical(position));\n return {\n value: shouldReverse ? 1 - tick : tick,\n label: toString(labelFormatter(prettyNumber(d), i, array)),\n id: String(i),\n };\n });\n }\n return filteredTicks.map((d, i, array) => {\n var _a;\n const offset = ((_a = scale.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(scale, d)) / 2 || 0;\n const tick = applyFisheye(applyInset(scale.map(d) + offset));\n const shouldReverse = isVertical(position);\n return {\n value: shouldReverse ? 1 - tick : tick,\n label: toString(labelFormatter(prettyNumber(d), i, array)),\n id: String(i),\n };\n });\n}\nfunction inferGridLength(position, coordinate, plane = 'xy') {\n const [width, height, depth] = sizeOf(coordinate);\n if (plane === 'xy') {\n if (position.includes('bottom') || position.includes('top'))\n return height;\n return width;\n }\n else if (plane === 'xz') {\n if (position.includes('bottom') || position.includes('top'))\n return depth;\n return width;\n }\n else {\n if (position.includes('bottom') || position.includes('top'))\n return height;\n return depth;\n }\n}\nfunction inferLabelOverlap(transform = [], style) {\n if (transform.length > 0)\n return transform;\n const { labelAutoRotate, labelAutoHide, labelAutoEllipsis, labelAutoWrap } = style;\n const finalTransforms = [];\n const addToTransforms = (overlap, state) => {\n if (state) {\n finalTransforms.push(Object.assign(Object.assign({}, overlap), state));\n }\n };\n addToTransforms({\n type: 'rotate',\n optionalAngles: [0, 15, 30, 45, 60, 90],\n }, labelAutoRotate);\n addToTransforms({ type: 'ellipsis', minLength: 20 }, labelAutoEllipsis);\n addToTransforms({ type: 'hide' }, labelAutoHide);\n addToTransforms({ type: 'wrap', wordWrapWidth: 100, maxLines: 3, recoveryWhenFail: true }, labelAutoWrap);\n return finalTransforms;\n}\nfunction inferArcStyle(position, bbox, innerRadius, outerRadius, coordinate) {\n const { x, y, width, height } = bbox;\n const center = [x + width / 2, y + height / 2];\n const radius = Math.min(width, height) / 2;\n const [startAngle, endAngle] = angleOf(coordinate);\n const [w, h] = sizeOf(coordinate);\n const r = Math.min(w, h) / 2;\n const common = {\n center,\n radius,\n startAngle,\n endAngle,\n gridLength: (outerRadius - innerRadius) * r,\n };\n if (position === 'inner') {\n // @ts-ignore\n const { insetLeft, insetTop } = coordinate.getOptions();\n return Object.assign(Object.assign({}, common), { center: [center[0] - insetLeft, center[1] - insetTop], labelAlign: 'perpendicular', labelDirection: 'positive', tickDirection: 'positive', gridDirection: 'negative' });\n }\n // arc outer\n return Object.assign(Object.assign({}, common), { labelAlign: 'parallel', labelDirection: 'negative', tickDirection: 'negative', gridDirection: 'positive' });\n}\nfunction inferGrid(value, coordinate, scale) {\n if (isTheta(coordinate) || isParallel(coordinate))\n return false;\n // Display axis grid for non-discrete values.\n return value === undefined ? !!scale.getTicks : value;\n}\nfunction infer3DAxisLinearOverrideStyle(coordinate) {\n // @ts-ignore\n const { depth } = coordinate.getOptions();\n return depth\n ? {\n tickIsBillboard: true,\n lineIsBillboard: true,\n labelIsBillboard: true,\n titleIsBillboard: true,\n gridIsBillboard: true,\n }\n : {};\n}\nfunction inferAxisLinearOverrideStyle(position, orientation, bbox, coordinate, xScale) {\n const { x, y, width, height } = bbox;\n if (position === 'bottom') {\n return { startPos: [x, y], endPos: [x + width, y] };\n }\n if (position === 'left') {\n return { startPos: [x + width, y + height], endPos: [x + width, y] };\n }\n if (position === 'right') {\n return { startPos: [x, y + height], endPos: [x, y] };\n }\n if (position === 'top') {\n return { startPos: [x, y + height], endPos: [x + width, y + height] };\n }\n // linear axis, maybe in parallel, polar, radial or radar systems.\n if (position === 'center') {\n // axisY\n if (orientation === 'vertical') {\n return {\n startPos: [x, y],\n endPos: [x, y + height],\n };\n }\n // axisX\n else if (orientation === 'horizontal') {\n return {\n startPos: [x, y],\n endPos: [x + width, y],\n };\n }\n // axis with rotate\n else if (typeof orientation === 'number') {\n const [cx, cy] = coordinate.getCenter();\n const [innerRadius, outerRadius] = radiusOf(coordinate);\n const [startAngle, endAngle] = angleOf(coordinate);\n const r = Math.min(width, height) / 2;\n // @ts-ignore\n const { insetLeft, insetTop } = coordinate.getOptions();\n const innerR = innerRadius * r;\n const outerR = outerRadius * r;\n const [actualCx, actualCy] = [cx + x - insetLeft, cy + y - insetTop];\n const [cos, sin] = [Math.cos(orientation), Math.sin(orientation)];\n const startPos = [\n actualCx + outerR * cos,\n actualCy + outerR * sin,\n ];\n const endPos = [\n actualCx + innerR * cos,\n actualCy + innerR * sin,\n ];\n const getAxisXDomainLength = () => {\n const { domain } = xScale.getOptions();\n return domain.length;\n };\n const controllAngleCount = isPolar(coordinate) && xScale ? getAxisXDomainLength() : 3;\n return {\n startPos,\n endPos,\n gridClosed: Math.abs(endAngle - startAngle - 360) < 1e-6,\n gridCenter: [actualCx, actualCy],\n gridControlAngles: new Array(controllAngleCount)\n .fill(0)\n .map((d, i, arr) => ((endAngle - startAngle) / controllAngleCount) * i),\n };\n }\n }\n // position is inner or outer for arc axis won't be here\n return {};\n}\nconst ArcAxisComponent = (options) => {\n const { order, size, position, orientation, labelFormatter, tickFilter, tickCount, tickMethod, important = {}, style = {}, indexBBox, title, grid = false } = options, rest = __rest(options, [\"order\", \"size\", \"position\", \"orientation\", \"labelFormatter\", \"tickFilter\", \"tickCount\", \"tickMethod\", \"important\", \"style\", \"indexBBox\", \"title\", \"grid\"]);\n return ({ scales: [scale], value, coordinate, theme }) => {\n const { bbox } = value;\n const { domain } = scale.getOptions();\n const data = getData(scale, domain, tickCount, labelFormatter, tickFilter, tickMethod, position, coordinate);\n // Bind computed bbox if exists.\n const labels = indexBBox\n ? data.map((d, i) => {\n const bbox = indexBBox.get(i);\n if (!bbox)\n return d;\n // bbox: [label, bbox]\n // Make than indexBBox can match current label.\n if (bbox[0] !== d.label)\n return d;\n return Object.assign(Object.assign({}, d), { bbox: bbox[1] });\n })\n : data;\n const [innerRadius, outerRadius] = radiusOf(coordinate);\n const defaultStyle = inferArcStyle(position, bbox, innerRadius, outerRadius, coordinate);\n const { axis: axisTheme, axisArc = {} } = theme;\n const finalStyle = adaptor(deepMix({}, axisTheme, axisArc, defaultStyle, Object.assign(Object.assign({ type: 'arc', data: labels, titleText: titleContent(title), grid }, rest), important)));\n return new AxisComponent({\n // @fixme transform is not valid for arcAxis.\n // @ts-ignore\n style: omit(finalStyle, ['transform']),\n });\n };\n};\nfunction inferThemeStyle(scale, coordinate, theme, direction, position, orientation) {\n const baseStyle = theme.axis;\n const positionStyle = ['top', 'right', 'bottom', 'left'].includes(position)\n ? theme[`axis${capitalizeFirst(position)}`]\n : theme.axisLinear;\n const channel = scale.getOptions().name;\n const channelStyle = theme[`axis${upperFirst(channel)}`] || {};\n return Object.assign({}, baseStyle, positionStyle, channelStyle);\n}\nfunction inferDefaultStyle(scale, coordinate, theme, direction, position, orientation) {\n const themeStyle = inferThemeStyle(scale, coordinate, theme, direction, position, orientation);\n if (position === 'center') {\n return Object.assign(Object.assign(Object.assign(Object.assign({}, themeStyle), { labelDirection: direction === 'right' ? 'negative' : 'positive' }), (direction === 'center'\n ? { labelTransform: 'translate(50%,0)' }\n : null)), { tickDirection: direction === 'right' ? 'negative' : 'positive', labelSpacing: direction === 'center' ? 0 : 4, titleSpacing: isVertical(orientation) ? 10 : 0, tick: direction === 'center' ? false : undefined });\n }\n return themeStyle;\n}\nconst LinearAxisComponent = (options) => {\n const { direction = 'left', important = {}, labelFormatter, order, orientation, actualPosition, position, size, style = {}, title, tickCount, tickFilter, tickMethod, transform, indexBBox } = options, userDefinitions = __rest(options, [\"direction\", \"important\", \"labelFormatter\", \"order\", \"orientation\", \"actualPosition\", \"position\", \"size\", \"style\", \"title\", \"tickCount\", \"tickFilter\", \"tickMethod\", \"transform\", \"indexBBox\"]);\n return ({ scales, value, coordinate, theme }) => {\n const { bbox } = value;\n const [scale] = scales;\n const { domain, xScale } = scale.getOptions();\n const defaultStyle = inferDefaultStyle(scale, coordinate, theme, direction, position, orientation);\n const internalAxisStyle = Object.assign(Object.assign(Object.assign({}, defaultStyle), style), userDefinitions);\n const gridLength = inferGridLength(actualPosition || position, coordinate, options.plane);\n const overrideStyle = inferAxisLinearOverrideStyle(position, orientation, bbox, coordinate, xScale);\n const threeDOverrideStyle = infer3DAxisLinearOverrideStyle(coordinate);\n const data = getData(scale, domain, tickCount, labelFormatter, tickFilter, tickMethod, position, coordinate);\n // Bind computed bbox if exists.\n const labels = indexBBox\n ? data.map((d, i) => {\n const bbox = indexBBox.get(i);\n if (!bbox)\n return d;\n // bbox: [label, bbox]\n // Make than indexBBox can match current label.\n if (bbox[0] !== d.label)\n return d;\n return Object.assign(Object.assign({}, d), { bbox: bbox[1] });\n })\n : data;\n const finalAxisStyle = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, internalAxisStyle), { type: 'linear', data: labels, crossSize: size, titleText: titleContent(title), labelOverlap: inferLabelOverlap(transform, internalAxisStyle), grid: inferGrid(internalAxisStyle.grid, coordinate, scale), gridLength, \n // Always showLine, make title could align the end of axis.\n line: true, indexBBox }), (!internalAxisStyle.line ? { lineOpacity: 0 } : null)), overrideStyle), threeDOverrideStyle), important);\n // For hide overlap, do not set crossSize.\n const hasHide = finalAxisStyle.labelOverlap.find((d) => d.type === 'hide');\n if (hasHide)\n finalAxisStyle.crossSize = false;\n return new AxisComponent({\n className: 'axis',\n style: adaptor(finalAxisStyle),\n });\n };\n};\nconst axisFactor = (axis) => {\n return (options) => {\n const { labelFormatter: useDefinedLabelFormatter, labelFilter: userDefinedLabelFilter = () => true, } = options;\n return (context) => {\n var _a;\n const { scales: [scale], } = context;\n const ticks = ((_a = scale.getTicks) === null || _a === void 0 ? void 0 : _a.call(scale)) || scale.getOptions().domain;\n const labelFormatter = typeof useDefinedLabelFormatter === 'string'\n ? format(useDefinedLabelFormatter)\n : useDefinedLabelFormatter;\n const labelFilter = (datum, index, array) => userDefinedLabelFilter(ticks[index], index, ticks);\n const normalizedOptions = Object.assign(Object.assign({}, options), { labelFormatter,\n labelFilter,\n scale });\n return axis(normalizedOptions)(context);\n };\n };\n};\nexport const LinearAxis = axisFactor(LinearAxisComponent);\nexport const ArcAxis = axisFactor(ArcAxisComponent);\nLinearAxis.props = {\n defaultPosition: 'center',\n defaultSize: 45,\n defaultOrder: 0,\n defaultCrossPadding: [12, 12],\n defaultPadding: [12, 12],\n};\nArcAxis.props = {\n defaultPosition: 'outer',\n defaultOrientation: 'vertical',\n defaultSize: 45,\n defaultOrder: 0,\n defaultCrossPadding: [12, 12],\n defaultPadding: [12, 12],\n};\n//# sourceMappingURL=axis.js.map","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n","var defineProperty = require(\"./defineProperty.js\");\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nmodule.exports = _objectSpread2, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nvar _excluded = [\"show\"];\nimport * as React from 'react';\n/**\n * Cut `value` by the `count.max` prop.\n */\nexport function inCountRange(value, countConfig) {\n if (!countConfig.max) {\n return true;\n }\n var count = countConfig.strategy(value);\n return count <= countConfig.max;\n}\nexport default function useCount(count, showCount) {\n return React.useMemo(function () {\n var mergedConfig = {};\n if (showCount) {\n mergedConfig.show = _typeof(showCount) === 'object' && showCount.formatter ? showCount.formatter : !!showCount;\n }\n mergedConfig = _objectSpread(_objectSpread({}, mergedConfig), count);\n var _ref = mergedConfig,\n show = _ref.show,\n rest = _objectWithoutProperties(_ref, _excluded);\n return _objectSpread(_objectSpread({}, rest), {}, {\n show: !!show,\n showFormatter: typeof show === 'function' ? show : undefined,\n strategy: rest.strategy || function (value) {\n return value.length;\n }\n });\n }, [count, showCount]);\n}","export function column(value, field) {\n if (value === null)\n return undefined;\n return { type: 'column', value, field };\n}\nexport function inferredColumn(value, field) {\n const c = column(value, field);\n return Object.assign(Object.assign({}, c), { inferred: true });\n}\nexport function visualColumn(value, field) {\n if (value === null)\n return undefined;\n return { type: 'column', value, field, visual: true };\n}\nexport function nonConstantColumn(value, field) {\n const c = column(value, field);\n return Object.assign(Object.assign({}, c), { constant: false });\n}\nexport function constant(I, value) {\n const array = [];\n for (const i of I)\n array[i] = value;\n return array;\n}\nexport function columnOf(encode, key) {\n const channel = encode[key];\n if (!channel)\n return [null, null];\n const { value, field = null } = channel;\n return [value, field];\n}\nexport function maybeColumnOf(encode, ...K) {\n for (const key of K) {\n if (typeof key === 'string') {\n const [KV, fv] = columnOf(encode, key);\n if (KV !== null)\n return [KV, fv];\n }\n else {\n return [key, null];\n }\n }\n return [null, null];\n}\nexport function isObject(d) {\n if (d instanceof Date)\n return false;\n return typeof d === 'object';\n}\n//# sourceMappingURL=helper.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { isFunction } from '@antv/util';\nimport { degToRad, getCallbackValue, normalize, vertical } from '../../../util';\nexport function getCallbackStyle(style, params) {\n return Object.fromEntries(Object.entries(style).map(function (_a) {\n var _b = __read(_a, 2), key = _b[0], val = _b[1];\n return [key, getCallbackValue(val, params)];\n }));\n}\nexport function baseDependencies(attr) {\n if (attr.type === 'linear') {\n var startPos = attr.startPos, endPos = attr.endPos;\n return __spreadArray(__spreadArray([], __read(startPos), false), __read(endPos), false);\n }\n var startAngle = attr.startAngle, endAngle = attr.endAngle, center = attr.center, radius = attr.radius;\n return __spreadArray(__spreadArray([startAngle, endAngle], __read(center), false), [radius], false);\n}\nexport function filterExec(data, filter) {\n return !!filter && isFunction(filter) ? data.filter(filter) : data;\n}\n/** ---- to avoid cycle dependency */\nexport function getLineAngle(value, attr) {\n var startAngle = attr.startAngle, endAngle = attr.endAngle;\n return (endAngle - startAngle) * value + startAngle;\n}\nexport function getLineTangentVector(value, attr) {\n if (attr.type === 'linear') {\n var _a = __read(attr.startPos, 2), startX = _a[0], startY = _a[1], _b = __read(attr.endPos, 2), endX = _b[0], endY = _b[1];\n var _c = __read([endX - startX, endY - startY], 2), dx = _c[0], dy = _c[1];\n return normalize([dx, dy]);\n }\n var angle = degToRad(getLineAngle(value, attr));\n return [-Math.sin(angle), Math.cos(angle)];\n}\nexport function getDirectionVector(value, direction, attr) {\n var tangentVector = getLineTangentVector(value, attr);\n return vertical(tangentVector, direction !== 'positive');\n}\nexport function getLabelVector(value, attr) {\n return getDirectionVector(value, attr.labelDirection, attr);\n}\n//# sourceMappingURL=utils.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { resetComponent, useStyle as useAntdStyle } from '@ant-design/pro-utils';\nvar genActiveStyle = function genActiveStyle(token) {\n return {\n backgroundColor: token.controlItemBgActive,\n borderColor: token.controlOutline\n };\n};\nvar genProCardStyle = function genProCardStyle(token) {\n var componentCls = token.componentCls;\n return _defineProperty(_defineProperty(_defineProperty({}, componentCls, _objectSpread(_objectSpread({\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n boxSizing: 'border-box',\n width: '100%',\n marginBlock: 0,\n marginInline: 0,\n paddingBlock: 0,\n paddingInline: 0,\n backgroundColor: token.colorBgContainer,\n borderRadius: token.borderRadius,\n transition: 'all 0.3s'\n }, resetComponent === null || resetComponent === void 0 ? void 0 : resetComponent(token)), {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({\n '&-box-shadow': {\n boxShadow: '0 1px 2px -2px #00000029, 0 3px 6px #0000001f, 0 5px 12px 4px #00000017',\n borderColor: 'transparent'\n },\n '&-col': {\n width: '100%'\n },\n '&-border': {\n border: \"\".concat(token.lineWidth, \"px \").concat(token.lineType, \" \").concat(token.colorSplit)\n },\n '&-hoverable': _defineProperty({\n cursor: 'pointer',\n transition: 'box-shadow 0.3s, border-color 0.3s',\n '&:hover': {\n borderColor: 'transparent',\n boxShadow: '0 1px 2px -2px #00000029, 0 3px 6px #0000001f, 0 5px 12px 4px #00000017'\n }\n }, \"&\".concat(componentCls, \"-checked:hover\"), {\n borderColor: token.controlOutline\n }),\n '&-checked': _objectSpread(_objectSpread({}, genActiveStyle(token)), {}, {\n '&::after': {\n visibility: 'visible',\n position: 'absolute',\n insetBlockStart: 2,\n insetInlineEnd: 2,\n opacity: 1,\n width: 0,\n height: 0,\n border: \"6px solid \".concat(token.colorPrimary),\n borderBlockEnd: '6px solid transparent',\n borderInlineStart: '6px solid transparent',\n borderStartEndRadius: 2,\n content: '\"\"'\n }\n }),\n '&:focus': _objectSpread({}, genActiveStyle(token)),\n '&&-ghost': _defineProperty({\n backgroundColor: 'transparent'\n }, \"> \".concat(componentCls), {\n '&-header': {\n paddingInlineEnd: 0,\n paddingBlockEnd: token.padding,\n paddingInlineStart: 0\n },\n '&-body': {\n paddingBlock: 0,\n paddingInline: 0,\n backgroundColor: 'transparent'\n }\n }),\n '&&-split > &-body': {\n paddingBlock: 0,\n paddingInline: 0\n },\n '&&-contain-card > &-body': {\n display: 'flex'\n }\n }, \"\".concat(componentCls, \"-body-direction-column\"), {\n flexDirection: 'column'\n }), \"\".concat(componentCls, \"-body-wrap\"), {\n flexWrap: 'wrap'\n }), '&&-collapse', _defineProperty({}, \"> \".concat(componentCls), {\n '&-header': {\n paddingBlockEnd: token.padding,\n borderBlockEnd: 0\n },\n '&-body': {\n display: 'none'\n }\n })), \"\".concat(componentCls, \"-header\"), {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingInline: token.paddingLG,\n paddingBlock: token.padding,\n paddingBlockEnd: 0,\n '&-border': {\n '&': {\n paddingBlockEnd: token.padding\n },\n borderBlockEnd: \"\".concat(token.lineWidth, \"px \").concat(token.lineType, \" \").concat(token.colorSplit)\n },\n '&-collapsible': {\n cursor: 'pointer'\n }\n }), \"\".concat(componentCls, \"-title\"), {\n color: token.colorText,\n fontWeight: 500,\n fontSize: token.fontSizeLG,\n lineHeight: token.lineHeight\n }), \"\".concat(componentCls, \"-extra\"), {\n color: token.colorText\n }), \"\".concat(componentCls, \"-type-inner\"), _defineProperty({}, \"\".concat(componentCls, \"-header\"), {\n backgroundColor: token.colorFillAlter\n })), \"\".concat(componentCls, \"-collapsible-icon\"), {\n marginInlineEnd: token.marginXS,\n color: token.colorIconHover,\n ':hover': {\n color: token.colorPrimaryHover\n },\n '& svg': {\n transition: \"transform \".concat(token.motionDurationMid)\n }\n }), \"\".concat(componentCls, \"-body\"), {\n display: 'block',\n boxSizing: 'border-box',\n height: '100%',\n paddingInline: token.paddingLG,\n paddingBlock: token.padding,\n '&-center': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }\n }), '&&-size-small', _defineProperty(_defineProperty({}, componentCls, {\n '&-header': {\n paddingInline: token.paddingSM,\n paddingBlock: token.paddingXS,\n paddingBlockEnd: 0,\n '&-border': {\n paddingBlockEnd: token.paddingXS\n }\n },\n '&-title': {\n fontSize: token.fontSize\n },\n '&-body': {\n paddingInline: token.paddingSM,\n paddingBlock: token.paddingSM\n }\n }), \"\".concat(componentCls, \"-header\").concat(componentCls, \"-header-collapsible\"), {\n paddingBlock: token.paddingXS\n })))), \"\".concat(componentCls, \"-col\"), _defineProperty(_defineProperty({}, \"&\".concat(componentCls, \"-split-vertical\"), {\n borderInlineEnd: \"\".concat(token.lineWidth, \"px \").concat(token.lineType, \" \").concat(token.colorSplit)\n }), \"&\".concat(componentCls, \"-split-horizontal\"), {\n borderBlockEnd: \"\".concat(token.lineWidth, \"px \").concat(token.lineType, \" \").concat(token.colorSplit)\n })), \"\".concat(componentCls, \"-tabs\"), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, \"\".concat(token.antCls, \"-tabs-top > \").concat(token.antCls, \"-tabs-nav\"), _defineProperty({\n marginBlockEnd: 0\n }, \"\".concat(token.antCls, \"-tabs-nav-list\"), {\n marginBlockStart: token.marginXS,\n paddingInlineStart: token.padding\n })), \"\".concat(token.antCls, \"-tabs-bottom > \").concat(token.antCls, \"-tabs-nav\"), _defineProperty({\n marginBlockEnd: 0\n }, \"\".concat(token.antCls, \"-tabs-nav-list\"), {\n paddingInlineStart: token.padding\n })), \"\".concat(token.antCls, \"-tabs-left\"), _defineProperty({}, \"\".concat(token.antCls, \"-tabs-content-holder\"), _defineProperty({}, \"\".concat(token.antCls, \"-tabs-content\"), _defineProperty({}, \"\".concat(token.antCls, \"-tabs-tabpane\"), {\n paddingInlineStart: 0\n })))), \"\".concat(token.antCls, \"-tabs-left > \").concat(token.antCls, \"-tabs-nav\"), _defineProperty({\n marginInlineEnd: 0\n }, \"\".concat(token.antCls, \"-tabs-nav-list\"), {\n paddingBlockStart: token.padding\n })), \"\".concat(token.antCls, \"-tabs-right\"), _defineProperty({}, \"\".concat(token.antCls, \"-tabs-content-holder\"), _defineProperty({}, \"\".concat(token.antCls, \"-tabs-content\"), _defineProperty({}, \"\".concat(token.antCls, \"-tabs-tabpane\"), {\n paddingInlineStart: 0\n })))), \"\".concat(token.antCls, \"-tabs-right > \").concat(token.antCls, \"-tabs-nav\"), _defineProperty({}, \"\".concat(token.antCls, \"-tabs-nav-list\"), {\n paddingBlockStart: token.padding\n })));\n};\nvar GRID_COLUMNS = 24;\nvar genColStyle = function genColStyle(index, token) {\n var componentCls = token.componentCls;\n if (index === 0) {\n return _defineProperty({}, \"\".concat(componentCls, \"-col-0\"), {\n display: 'none'\n });\n }\n return _defineProperty({}, \"\".concat(componentCls, \"-col-\").concat(index), {\n flexShrink: 0,\n width: \"\".concat(index / GRID_COLUMNS * 100, \"%\")\n });\n};\nvar genGridStyle = function genGridStyle(token) {\n return Array(GRID_COLUMNS + 1).fill(1).map(function (_, index) {\n return genColStyle(index, token);\n });\n};\nexport default function useStyle(prefixCls) {\n return useAntdStyle('ProCard', function (token) {\n var proCardToken = _objectSpread(_objectSpread({}, token), {}, {\n componentCls: \".\".concat(prefixCls)\n });\n return [genProCardStyle(proCardToken), genGridStyle(proCardToken)];\n });\n}","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","export function distanceSquareRoot(a, b) {\n return Math.sqrt((a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]));\n}\n//# sourceMappingURL=distance-square-root.js.map","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { path as d3path } from '@antv/vendor/d3-path';\nimport { applyStyle, arrowPoints } from '../utils';\nimport { select } from '../../utils/selection';\n/**\n * Connect 2 points with a single line with arrow.\n * ----->\n */\nexport const Vector = (options, context) => {\n const { arrow = true, arrowSize = '40%' } = options, style = __rest(options, [\"arrow\", \"arrowSize\"]);\n const { document } = context;\n return (points, value, defaults) => {\n const { defaultColor } = defaults, rest = __rest(defaults, [\"defaultColor\"]);\n const { color = defaultColor, transform } = value;\n const [from, to] = points;\n // Draw line\n const path = d3path();\n path.moveTo(...from);\n path.lineTo(...to);\n // Draw 2 arrows.\n if (arrow) {\n // Calculate arrow end point.\n const [arrow1, arrow2] = arrowPoints(from, to, { arrowSize });\n path.moveTo(...arrow1);\n path.lineTo(...to);\n path.lineTo(...arrow2);\n }\n return select(document.createElement('path', {}))\n .call(applyStyle, rest)\n .style('d', path.toString())\n .style('stroke', color)\n .style('transform', transform)\n .call(applyStyle, style)\n .node();\n };\n};\nVector.props = {\n defaultMarker: 'line',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=vector.js.map","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Keyframes } from '@ant-design/cssinjs';\nimport { useStyle as useAntdStyle } from '@ant-design/pro-provider';\nexport var cardLoading = new Keyframes('card-loading', {\n '0%': {\n backgroundPosition: '0 50%'\n },\n '50%': {\n backgroundPosition: '100% 50%'\n },\n '100%': {\n backgroundPosition: '0 50%'\n }\n});\nvar genProStyle = function genProStyle(token) {\n return _defineProperty({}, token.componentCls, _defineProperty(_defineProperty({\n '&-loading': {\n overflow: 'hidden'\n },\n '&-loading &-body': {\n userSelect: 'none'\n }\n }, \"\".concat(token.componentCls, \"-loading-content\"), {\n width: '100%',\n p: {\n marginBlock: 0,\n marginInline: 0\n }\n }), \"\".concat(token.componentCls, \"-loading-block\"), {\n height: '14px',\n marginBlock: '4px',\n background: \"linear-gradient(90deg, rgba(54, 61, 64, 0.2), rgba(54, 61, 64, 0.4), rgba(54, 61, 64, 0.2))\",\n backgroundSize: '600% 600%',\n borderRadius: token.borderRadius,\n animationName: cardLoading,\n animationDuration: '1.4s',\n animationTimingFunction: 'ease',\n animationIterationCount: 'infinite'\n }));\n};\nexport function useStyle(prefixCls) {\n return useAntdStyle('ProCardLoading', function (token) {\n var proToken = _objectSpread(_objectSpread({}, token), {}, {\n componentCls: \".\".concat(prefixCls)\n });\n return [genProStyle(proToken)];\n });\n}","import { Col, Row } from 'antd';\nimport React from 'react';\nimport { useStyle } from \"./style\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar Loading = function Loading(props) {\n var style = props.style,\n prefix = props.prefix;\n var _useStyle = useStyle(prefix || 'ant-pro-card'),\n wrapSSR = _useStyle.wrapSSR;\n return wrapSSR( /*#__PURE__*/_jsxs(\"div\", {\n className: \"\".concat(prefix, \"-loading-content\"),\n style: style,\n children: [/*#__PURE__*/_jsx(Row, {\n gutter: 8,\n children: /*#__PURE__*/_jsx(Col, {\n span: 22,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefix, \"-loading-block\")\n })\n })\n }), /*#__PURE__*/_jsxs(Row, {\n gutter: 8,\n children: [/*#__PURE__*/_jsx(Col, {\n span: 8,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefix, \"-loading-block\")\n })\n }), /*#__PURE__*/_jsx(Col, {\n span: 15,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefix, \"-loading-block\")\n })\n })]\n }), /*#__PURE__*/_jsxs(Row, {\n gutter: 8,\n children: [/*#__PURE__*/_jsx(Col, {\n span: 6,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefix, \"-loading-block\")\n })\n }), /*#__PURE__*/_jsx(Col, {\n span: 18,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefix, \"-loading-block\")\n })\n })]\n }), /*#__PURE__*/_jsxs(Row, {\n gutter: 8,\n children: [/*#__PURE__*/_jsx(Col, {\n span: 13,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefix, \"-loading-block\")\n })\n }), /*#__PURE__*/_jsx(Col, {\n span: 9,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefix, \"-loading-block\")\n })\n })]\n }), /*#__PURE__*/_jsxs(Row, {\n gutter: 8,\n children: [/*#__PURE__*/_jsx(Col, {\n span: 4,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefix, \"-loading-block\")\n })\n }), /*#__PURE__*/_jsx(Col, {\n span: 3,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefix, \"-loading-block\")\n })\n }), /*#__PURE__*/_jsx(Col, {\n span: 16,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefix, \"-loading-block\")\n })\n })]\n })]\n }));\n};\nexport default Loading;","export default function() {}\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","import { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar Embed = function Embed(_ref) {\n var children = _ref.children;\n return /*#__PURE__*/_jsx(_Fragment, {\n children: children\n });\n};\nexport default Embed;","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","export default (function (value) {\n /**\n * isObject({}) => true\n * isObject([1, 2, 3]) => true\n * isObject(Function) => true\n * isObject(null) => false\n */\n var type = typeof value;\n return (value !== null && type === 'object') || type === 'function';\n});\n//# sourceMappingURL=is-object.js.map","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","export function isTranspose(coordinate) {\n const { transformations } = coordinate.getOptions();\n const transposes = transformations\n .map(([type]) => type)\n .filter((type) => type === 'transpose');\n return transposes.length % 2 !== 0;\n}\nexport function isPolar(coordinate) {\n const { transformations } = coordinate.getOptions();\n return transformations.some(([type]) => type === 'polar');\n}\nexport function isRadial(coordinate) {\n const { transformations } = coordinate.getOptions();\n return (\n // distinguish radial from theta.\n transformations.some(([type]) => type === 'reflect') &&\n transformations.some(([type]) => type.startsWith('transpose')));\n}\nexport function isHelix(coordinate) {\n const { transformations } = coordinate.getOptions();\n return transformations.some(([type]) => type === 'helix');\n}\nexport function isParallel(coordinate) {\n const { transformations } = coordinate.getOptions();\n return transformations.some(([type]) => type === 'parallel');\n}\nexport function isFisheye(coordinate) {\n const { transformations } = coordinate.getOptions();\n return transformations.some(([type]) => type === 'fisheye');\n}\nexport function isRadar(coordinate) {\n return isParallel(coordinate) && isPolar(coordinate);\n}\nexport function isCircular(coordinate) {\n return isHelix(coordinate) || isPolar(coordinate);\n}\nexport function isTheta(coordinate) {\n return isPolar(coordinate) && isTranspose(coordinate);\n}\nexport function isNonCartesian(coordinate) {\n return (isPolar(coordinate) ||\n isParallel(coordinate) ||\n isRadial(coordinate) ||\n isTheta(coordinate));\n}\nexport function getRadius(coordinate) {\n if (isCircular(coordinate)) {\n const [width, height] = coordinate.getSize();\n const polar = coordinate\n .getOptions()\n .transformations.find((t) => t[0] === 'polar');\n // coordinate.size * outerRadius.\n if (polar)\n return (Math.max(width, height) / 2) * polar[4];\n }\n return 0;\n}\nexport function radiusOf(coordinate) {\n const { transformations } = coordinate.getOptions();\n const [, , , innerRadius, outerRadius] = transformations.find((d) => d[0] === 'polar');\n return [+innerRadius, +outerRadius];\n}\nexport function angleOf(coordinate, isRadius = true) {\n const { transformations } = coordinate.getOptions();\n const [, startAngle, endAngle] = transformations.find((d) => d[0] === 'polar');\n return isRadius\n ? [(+startAngle * 180) / Math.PI, (+endAngle * 180) / Math.PI]\n : [startAngle, endAngle];\n}\nexport function getTransformOptions(coordinate, type) {\n const { transformations } = coordinate.getOptions();\n const [, ...args] = transformations.find((d) => d[0] === type);\n return args;\n}\n//# sourceMappingURL=coordinate.js.map","import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.hover = undefined;\n\nvar _extends = Object.assign || 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; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar hover = exports.hover = function hover(Component) {\n var Span = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'span';\n\n return function (_React$Component) {\n _inherits(Hover, _React$Component);\n\n function Hover() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Hover);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Hover.__proto__ || Object.getPrototypeOf(Hover)).call.apply(_ref, [this].concat(args))), _this), _this.state = { hover: false }, _this.handleMouseOver = function () {\n return _this.setState({ hover: true });\n }, _this.handleMouseOut = function () {\n return _this.setState({ hover: false });\n }, _this.render = function () {\n return _react2.default.createElement(\n Span,\n { onMouseOver: _this.handleMouseOver, onMouseOut: _this.handleMouseOut },\n _react2.default.createElement(Component, _extends({}, _this.props, _this.state))\n );\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n return Hover;\n }(_react2.default.Component);\n};\n\nexports.default = hover;","import { Linear } from '@antv/scale';\nimport { isNumber, lowerFirst } from '@antv/util';\nimport { extent } from '@antv/vendor/d3-array';\nimport { indexOf } from '../utils/array';\nimport { isPolar, isTranspose } from '../utils/coordinate';\nimport { angle, angleWithQuadrant, dist, sub } from '../utils/vector';\nexport function applyStyle(selection, style) {\n for (const [key, value] of Object.entries(style)) {\n selection.style(key, value);\n }\n}\n/**\n * Draw polygon path with points.\n * @param path\n * @param points\n */\nexport function appendPolygon(path, points) {\n points.forEach((p, idx) => idx === 0 ? path.moveTo(p[0], p[1]) : path.lineTo(p[0], p[1]));\n path.closePath();\n return path;\n}\n/**\n * Draw arrow between `from` and `to`.\n * @param from\n * @param to\n * @returns\n */\nexport function arrowPoints(from, to, options) {\n const { arrowSize } = options;\n const size = typeof arrowSize === 'string'\n ? (+parseFloat(arrowSize) / 100) * dist(from, to)\n : arrowSize;\n // TODO Use config from style.\n // Default arrow rotate is 30°.\n const arrowAngle = Math.PI / 6;\n const angle = Math.atan2(to[1] - from[1], to[0] - from[0]);\n const arrowAngle1 = Math.PI / 2 - angle - arrowAngle;\n const arrow1 = [\n to[0] - size * Math.sin(arrowAngle1),\n to[1] - size * Math.cos(arrowAngle1),\n ];\n const arrowAngle2 = angle - arrowAngle;\n const arrow2 = [\n to[0] - size * Math.cos(arrowAngle2),\n to[1] - size * Math.sin(arrowAngle2),\n ];\n return [arrow1, arrow2];\n}\n/**\n * Draw arc by from -> to, with center and radius.\n * @param path\n * @param from\n * @param to\n * @param center\n * @param radius\n */\nexport function appendArc(path, from, to, center, radius) {\n const startAngle = angle(sub(center, from)) + Math.PI;\n const endAngle = angle(sub(center, to)) + Math.PI;\n path.arc(center[0], center[1], radius, startAngle, endAngle, endAngle - startAngle < 0);\n return path;\n}\n/**\n * @todo Fix wrong key point.\n */\nexport function computeGradient(C, X, Y, from = 'y', mode = 'between', tpShape = false) {\n // The angles of gradients rendering are varies when 'from' and 'tpShape' are different.\n const getTheta = (from, tpShape) => {\n if (from === 'y' || from === true) {\n if (tpShape) {\n return 180;\n }\n else {\n return 90;\n }\n }\n else {\n if (tpShape) {\n return 90;\n }\n else {\n return 0;\n }\n }\n };\n const P = from === 'y' || from === true ? Y : X;\n const theta = getTheta(from, tpShape);\n const I = indexOf(P);\n const [min, max] = extent(I, (i) => P[i]);\n // This need to improve for non-uniform distributed colors.\n const p = new Linear({\n domain: [min, max],\n range: [0, 100],\n });\n const percentage = (i) => isNumber(P[i]) && !Number.isNaN(P[i]) ? p.map(P[i]) : 0;\n const gradientMode = {\n // Interpolate the colors for this segment.\n between: (i) => `${C[i]} ${percentage(i)}%`,\n // Use the color of the start point as the color for this segment.\n start: (i) => i === 0\n ? `${C[i]} ${percentage(i)}%`\n : `${C[i - 1]} ${percentage(i)}%, ${C[i]} ${percentage(i)}%`,\n // Use the color of the end point as the color for this segment.\n end: (i) => i === C.length - 1\n ? `${C[i]} ${percentage(i)}%`\n : `${C[i]} ${percentage(i)}%, ${C[i + 1]} ${percentage(i)}%`,\n };\n const gradient = I.sort((a, b) => percentage(a) - percentage(b))\n .map(gradientMode[mode] || gradientMode['between'])\n .join(',');\n return `linear-gradient(${theta}deg, ${gradient})`;\n}\nexport function reorder(points) {\n const [p0, p1, p2, p3] = points;\n return [p3, p0, p1, p2];\n}\nexport function getArcObject(coordinate, points, Y) {\n const [p0, p1, , p3] = isTranspose(coordinate) ? reorder(points) : points;\n const [y, y1] = Y;\n const center = coordinate.getCenter();\n const a1 = angleWithQuadrant(sub(p0, center));\n const a2 = angleWithQuadrant(sub(p1, center));\n // There are two situations that a2 === a1:\n // 1. a1 - a2 = 0\n // 2. |a1 - a2| = Math.PI * 2\n // Distinguish them by y and y1:\n const a3 = a2 === a1 && y !== y1 ? a2 + Math.PI * 2 : a2;\n return {\n startAngle: a1,\n endAngle: a3 - a1 >= 0 ? a3 : Math.PI * 2 + a3,\n innerRadius: dist(p3, center),\n outerRadius: dist(p0, center),\n };\n}\n/**\n * Pick connectStyle from style.\n * @param style\n */\nexport function getConnectStyle(style) {\n const PREFIX = 'connect';\n return Object.fromEntries(Object.entries(style)\n .filter(([key]) => key.startsWith(PREFIX))\n .map(([key, value]) => [\n lowerFirst(key.replace(PREFIX, '').trim()),\n value,\n ])\n .filter(([key]) => key !== undefined));\n}\nexport function toOpacityKey(options) {\n const { colorAttribute, opacityAttribute = colorAttribute } = options;\n return `${opacityAttribute}Opacity`;\n}\nexport function getTransform(coordinate, value) {\n if (!isPolar(coordinate))\n return '';\n const center = coordinate.getCenter();\n const { transform: suffix } = value;\n return `translate(${center[0]}, ${center[1]}) ${suffix || ''}`;\n}\nexport function getOrigin(points) {\n if (points.length === 1)\n return points[0];\n const [[x0, y0, z0 = 0], [x2, y2, z2 = 0]] = points;\n return [(x0 + x2) / 2, (y0 + y2) / 2, (z0 + z2) / 2];\n}\n//# sourceMappingURL=utils.js.map","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","import { __assign, __extends, __rest } from \"tslib\";\nimport { Text as GText } from '@antv/g';\nimport { createOffscreenGroup } from '../util/offscreen';\nvar Text = /** @class */ (function (_super) {\n __extends(Text, _super);\n function Text(_a) {\n if (_a === void 0) { _a = {}; }\n var style = _a.style, restOptions = __rest(_a, [\"style\"]);\n return _super.call(this, __assign({ style: __assign({ text: '', fill: 'black', fontFamily: 'sans-serif', fontSize: 16, fontStyle: 'normal', fontVariant: 'normal', fontWeight: 'normal', lineWidth: 1, textAlign: 'start', textBaseline: 'middle' }, style) }, restOptions)) || this;\n }\n Object.defineProperty(Text.prototype, \"offscreenGroup\", {\n get: function () {\n if (!this._offscreen)\n this._offscreen = createOffscreenGroup(this);\n return this._offscreen;\n },\n enumerable: false,\n configurable: true\n });\n Text.prototype.disconnectedCallback = function () {\n var _a;\n (_a = this._offscreen) === null || _a === void 0 ? void 0 : _a.destroy();\n };\n return Text;\n}(GText));\nexport { Text };\n//# sourceMappingURL=Text.js.map","var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","'use strict';\n\nvar DEFAULT_SIZE = 50;\nvar DEFAULT_WIDTH = 2;\n\nvar LN_2 = Math.log(2);\nvar self = module.exports;\n\nvar helper = require('./helper');\n\n// Triangle\nfunction kernel(x) {\n return 1 - Math.abs(x);\n}\n\n/**\n * Get min and max value for the pdf, covering all arr data range while respecting options' data\n * @param arr\n * @param options\n * @returns {*}\n */\nmodule.exports.getUnifiedMinMax = function (arr, options) {\n return self.getUnifiedMinMaxMulti([arr], options);\n};\n\nmodule.exports.getUnifiedMinMaxMulti = function (arrMulti, options) {\n options = options || {};\n\n var relaxMin = false;\n var relaxMax = false;\n\n var width = helper.isNumber(options.width) ? options.width : DEFAULT_WIDTH;\n var size = helper.isNumber(options.size) ? options.size : DEFAULT_SIZE;\n var min = helper.isNumber(options.min) ? options.min : (relaxMin = true, helper.findMinMulti(arrMulti));\n var max = helper.isNumber(options.max) ? options.max : (relaxMax = true, helper.findMaxMulti(arrMulti));\n\n var range = max - min;\n var step = range / (size - 1);\n\n // Relax?\n if (relaxMin) {\n min = min - 2 * width * step;\n }\n if (relaxMax) {\n max = max + 2 * width * step;\n }\n\n return {\n min: min,\n max: max\n };\n};\n\nmodule.exports.create = function (arr, options) {\n options = options || {};\n\n if (!arr || (arr.length === 0)) {\n return [];\n }\n\n var size = helper.isNumber(options.size) ? options.size : DEFAULT_SIZE;\n var width = helper.isNumber(options.width) ? options.width : DEFAULT_WIDTH;\n var normalizedMinMax = self.getUnifiedMinMax(arr, {\n size: size,\n width: width,\n min: options.min,\n max: options.max\n });\n\n var min = normalizedMinMax.min;\n var max = normalizedMinMax.max;\n\n var range = max - min;\n var step = range / (size - 1);\n if (range === 0) {\n // Special case...\n return [{x: min, y: 1}];\n }\n\n // Good to go\n\n var buckets = [];\n for (var i = 0; i < size; i++) {\n buckets.push({\n x: min + i * step,\n y: 0\n });\n }\n\n var xToBucket = function (x) {\n return Math.floor((x - min) / step);\n };\n\n var partialArea = generatePartialAreas(kernel, width);\n var fullArea = partialArea[width];\n var c = partialArea[width-1] - partialArea[width-2];\n\n var initalValue = 0;\n arr.forEach(function (x) {\n var bucket = xToBucket(x);\n\n // Totally outside?\n if ((bucket + width < 0) || (bucket - width >= buckets.length)) {\n return;\n }\n\n var start = Math.max(bucket - width, 0);\n var mid = bucket;\n var end = Math.min(bucket + width, buckets.length - 1);\n\n var leftBlockCount = start - (bucket - width);\n var rightBlockCount = (bucket + width) - end;\n var spilledAreaLeft = partialArea[-width-1 + leftBlockCount] || 0;\n var spilledAreaRight = partialArea[-width-1 + rightBlockCount] || 0;\n var weight = fullArea / (fullArea - spilledAreaLeft - spilledAreaRight);\n\n if (leftBlockCount > 0) {\n initalValue += weight * (leftBlockCount - 1) * c;\n }\n\n // Add grads\n var startGradPos = Math.max(0, bucket-width+1);\n if (helper.inside(0, buckets.length-1, startGradPos)) {\n buckets[startGradPos].y += weight * 1 * c;\n }\n if (helper.inside(0, buckets.length-1, mid + 1)) {\n buckets[mid + 1].y -= weight * 2 * c;\n }\n if (helper.inside(0, buckets.length-1, end + 1)) {\n buckets[end + 1].y += weight * 1 * c;\n }\n });\n\n var accumulator = initalValue;\n var gradAccumulator = 0;\n var area = 0;\n buckets.forEach(function (bucket) {\n gradAccumulator += bucket.y;\n accumulator += gradAccumulator;\n\n bucket.y = accumulator;\n area += accumulator;\n });\n\n // Normalize\n if (area > 0) {\n buckets.forEach(function (bucket) {\n bucket.y /= area;\n });\n }\n\n return buckets;\n};\n\nfunction generatePartialAreas(kernel, width) {\n var partialAreas = {};\n\n var accumulator = 0;\n for (var i = -width; i <= width; i++) {\n accumulator += kernel(i/width);\n partialAreas[i] = accumulator;\n }\n\n return partialAreas;\n}\n\nmodule.exports.getExpectedValueFromPdf = function (pdf) {\n if (!pdf || (pdf.length === 0)) {\n return undefined;\n }\n\n var expected = 0;\n\n pdf.forEach(function (obj) {\n expected += obj.x * obj.y;\n });\n\n return expected;\n};\n\nmodule.exports.getXWithLeftTailArea = function (pdf, area) {\n if (!pdf || (pdf.length === 0)) {\n return undefined;\n }\n\n var accumulator = 0;\n var last = 0;\n for (var i = 0; i < pdf.length; i++) {\n last = i;\n accumulator += pdf[i].y;\n\n if (accumulator >= area) {\n break;\n }\n }\n\n return pdf[last].x;\n};\n\nmodule.exports.getPerplexity = function (pdf) {\n if (!pdf || (pdf.length === 0)) {\n return undefined;\n }\n\n var entropy = 0;\n pdf.forEach(function (obj) {\n var ln = Math.log(obj.y);\n\n if (isFinite(ln)) {\n entropy += obj.y * ln;\n }\n });\n entropy = -entropy / LN_2;\n\n return Math.pow(2, entropy);\n};\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","import { coordEach } from \"@turf/meta\";\n/**\n * Takes a set of features, calculates the bbox of all input features, and returns a bounding box.\n *\n * @name bbox\n * @param {GeoJSON} geojson any GeoJSON object\n * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]);\n * var bbox = turf.bbox(line);\n * var bboxPolygon = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [line, bboxPolygon]\n */\nfunction bbox(geojson) {\n var result = [Infinity, Infinity, -Infinity, -Infinity];\n coordEach(geojson, function (coord) {\n if (result[0] > coord[0]) {\n result[0] = coord[0];\n }\n if (result[1] > coord[1]) {\n result[1] = coord[1];\n }\n if (result[2] < coord[0]) {\n result[2] = coord[0];\n }\n if (result[3] < coord[1]) {\n result[3] = coord[1];\n }\n });\n return result;\n}\nbbox[\"default\"] = bbox;\nexport default bbox;\n","// src/geo.ts\nimport bbox from \"@turf/bbox\";\nimport { degreesToRadians, featureCollection, lineString, radiansToLength } from \"@turf/helpers\";\nimport { isNumber } from \"./math\";\nvar originShift = 2 * Math.PI * 6378137 / 2;\nfunction lngLatInExtent(lngLat, bounds) {\n const [minLng, minLat, maxLng, maxLat] = bounds;\n return lngLat.lng > minLng && lngLat.lng <= maxLng && lngLat.lat > minLat && lngLat.lat <= maxLat;\n}\nfunction extent(data) {\n const dataExtent = [Infinity, Infinity, -Infinity, -Infinity];\n data.forEach((item) => {\n const { coordinates } = item;\n caculExtent(dataExtent, coordinates);\n });\n return dataExtent;\n}\nfunction caculExtent(dataExtent, coords) {\n if (Array.isArray(coords[0])) {\n coords.forEach((coord) => {\n caculExtent(dataExtent, coord);\n });\n } else {\n if (dataExtent[0] > coords[0]) {\n dataExtent[0] = coords[0];\n }\n if (dataExtent[1] > coords[1]) {\n dataExtent[1] = coords[1];\n }\n if (dataExtent[2] < coords[0]) {\n dataExtent[2] = coords[0];\n }\n if (dataExtent[3] < coords[1]) {\n dataExtent[3] = coords[1];\n }\n }\n return dataExtent;\n}\nfunction tranfrormCoord(data, cb) {\n return transform(data, cb);\n}\nfunction transform(item, cb) {\n if (Array.isArray(item[0])) {\n return item.map((coord) => {\n return transform(coord, cb);\n });\n }\n return cb(item);\n}\nfunction lngLatToMeters(lnglat, validate = true, accuracy = { enable: true, decimal: 1 }) {\n lnglat = validateLngLat(lnglat, validate);\n const lng = lnglat[0];\n const lat = lnglat[1];\n let x = lng * originShift / 180;\n let y = Math.log(Math.tan((90 + lat) * Math.PI / 360)) / (Math.PI / 180);\n y = y * originShift / 180;\n if (accuracy.enable) {\n x = Number(x.toFixed(accuracy.decimal));\n y = Number(y.toFixed(accuracy.decimal));\n }\n return lnglat.length === 3 ? [x, y, lnglat[2]] : [x, y];\n}\nfunction metersToLngLat(meters, decimal = 6) {\n const x = meters[0];\n const y = meters[1];\n let lng = x / originShift * 180;\n let lat = y / originShift * 180;\n lat = 180 / Math.PI * (2 * Math.atan(Math.exp(lat * Math.PI / 180)) - Math.PI / 2);\n if (decimal !== void 0 && decimal !== null) {\n lng = Number(lng.toFixed(decimal));\n lat = Number(lat.toFixed(decimal));\n }\n return meters.length === 3 ? [lng, lat, meters[2]] : [lng, lat];\n}\nfunction longitude(lng) {\n if (lng === void 0 || lng === null) {\n throw new Error(\"lng is required\");\n }\n if (lng > 180 || lng < -180) {\n lng = lng % 360;\n if (lng > 180) {\n lng = -360 + lng;\n }\n if (lng < -180) {\n lng = 360 + lng;\n }\n if (lng === 0) {\n lng = 0;\n }\n }\n return lng;\n}\nfunction latitude(lat) {\n if (lat === void 0 || lat === null) {\n throw new Error(\"lat is required\");\n }\n if (lat > 90 || lat < -90) {\n lat = lat % 180;\n if (lat > 90) {\n lat = -180 + lat;\n }\n if (lat < -90) {\n lat = 180 + lat;\n }\n if (lat === 0) {\n lat = 0;\n }\n }\n return lat;\n}\nfunction validateLngLat(lnglat, validate) {\n if (validate === false) {\n return lnglat;\n }\n const lng = longitude(lnglat[0]);\n let lat = latitude(lnglat[1]);\n if (lat > 85) {\n lat = 85;\n }\n if (lat < -85) {\n lat = -85;\n }\n return lnglat.length === 3 ? [lng, lat, lnglat[2]] : [lng, lat];\n}\nfunction aProjectFlat(lnglat) {\n const maxs = 85.0511287798;\n const lat = Math.max(Math.min(maxs, lnglat[1]), -maxs);\n const scale = 256 << 20;\n let d = Math.PI / 180;\n let x = lnglat[0] * d;\n let y = lat * d;\n y = Math.log(Math.tan(Math.PI / 4 + y / 2));\n const a = 0.5 / Math.PI;\n const b = 0.5;\n const c = -0.5 / Math.PI;\n d = 0.5;\n x = scale * (a * x + b);\n y = scale * (c * y + d);\n return [Math.floor(x), Math.floor(y)];\n}\nfunction unProjectFlat(px) {\n const a = 0.5 / Math.PI;\n const b = 0.5;\n const c = -0.5 / Math.PI;\n let d = 0.5;\n const scale = 256 << 20;\n let [x, y] = px;\n x = (x / scale - b) / a;\n y = (y / scale - d) / c;\n y = (Math.atan(Math.pow(Math.E, y)) - Math.PI / 4) * 2;\n d = Math.PI / 180;\n const lat = y / d;\n const lng = x / d;\n return [lng, lat];\n}\nfunction amap2Project(lng, lat) {\n const r = 85.0511287798;\n const Rg = Math.PI / 180;\n const Tg = 6378137;\n lat = Math.max(Math.min(r, lat), -r);\n lng *= Rg;\n lat *= Rg;\n lat = Math.log(Math.tan(Math.PI / 4 + lat / 2));\n return [lng * Tg, lat * Tg];\n}\nfunction amap2UnProject(x, y) {\n const Rg = Math.PI / 180;\n const Tg = 6378137;\n const lng = x / Tg / Rg;\n const lat = 2 * (Math.atan(Math.exp(y / Tg)) - Math.PI / 4) / Rg;\n return [lng, lat];\n}\nfunction lnglatDistance(coordinates1, coordinates2, units) {\n const dLat = degreesToRadians(coordinates2[1] - coordinates1[1]);\n const dLon = degreesToRadians(coordinates2[0] - coordinates1[0]);\n const lat1 = degreesToRadians(coordinates1[1]);\n const lat2 = degreesToRadians(coordinates2[1]);\n const a = Math.pow(Math.sin(dLat / 2), 2) + Math.pow(Math.sin(dLon / 2), 2) * Math.cos(lat1) * Math.cos(lat2);\n return radiansToLength(\n 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)),\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n units = \"meters\"\n );\n}\nfunction project(lnglat) {\n const d = Math.PI / 180;\n const max = 85.0511287798;\n const earthRadius = 6378137;\n const lat = Math.max(Math.min(max, lnglat[1]), -max);\n const sin = Math.sin(lat * d);\n const x = earthRadius * lnglat[0] * d;\n const y = earthRadius * Math.log((1 + sin) / (1 - sin)) / 2;\n return [x, y];\n}\nfunction padBounds(b, bufferRatio) {\n const heightBuffer = Math.abs(b[1][1] - b[0][1]) * bufferRatio;\n const widthBuffer = Math.abs(b[1][0] - b[0][0]) * bufferRatio;\n return [\n [b[0][0] - widthBuffer, b[0][1] - heightBuffer],\n [b[1][0] + widthBuffer, b[1][1] + heightBuffer]\n ];\n}\nfunction boundsContains(b1, b2) {\n return b1[0][0] <= b2[0][0] && b1[0][1] <= b2[0][1] && b1[1][0] >= b2[1][0] && b1[1][1] >= b2[1][1];\n}\nfunction bBoxToBounds(b1) {\n return [\n [b1[0], b1[1]],\n [b1[2], b1[3]]\n ];\n}\nfunction normalize(v) {\n const len = calDistance(v, [0, 0]);\n return [v[0] / len, v[1] / len];\n}\nfunction calDistance(p1, p2) {\n return Math.sqrt(Math.pow(p1[0] - p2[0], 2) + Math.pow(p1[1] - p2[1], 2));\n}\nfunction dotMul(v1, v2) {\n return v1[0] * v2[0] + v1[1] * v2[1];\n}\nfunction getMod(v) {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n}\nfunction calAngle(v1, v2) {\n return Math.acos(dotMul(v1, v2) / (getMod(v1) * getMod(v2))) * 180 / Math.PI;\n}\nfunction getAngle(v1, v2) {\n if (v2[0] > 0) {\n if (v2[1] > 0) {\n return 90 - Math.atan(v2[1] / v2[0]) * 180 / Math.PI;\n } else {\n return 90 + Math.atan(-v2[1] / v2[0]) * 180 / Math.PI;\n }\n } else {\n if (v2[1] < 0) {\n return 180 + (90 - Math.atan(v2[1] / v2[0]) * 180 / Math.PI);\n } else {\n return 270 + Math.atan(v2[1] / -v2[0]) * 180 / Math.PI;\n }\n }\n}\nfunction flow(coords, time = 100) {\n if (!coords || coords.length < 2) {\n return;\n }\n const originVec2 = [0, 1];\n let totalDis = 0;\n const path = [];\n for (let i = 0; i < coords.length - 1; i++) {\n const p1 = coords[i];\n const p2 = coords[i + 1];\n const dis = calDistance(p1, p2);\n totalDis += dis;\n const direct = [p1[0] - p2[0], p1[1] - p2[1]];\n let rotation = getAngle(originVec2, direct);\n if (i > 0) {\n const lastRotation = path[i - 1].rotation;\n if (lastRotation - rotation > 360 - lastRotation + rotation) {\n rotation = rotation + 360;\n }\n }\n path.push({\n start: p1,\n end: p2,\n dis,\n rotation,\n duration: 0\n });\n }\n path.map((point) => {\n point.duration = time * (point.dis / totalDis);\n });\n return path;\n}\nfunction calculateCentroid(coord) {\n if (isNumber(coord[0])) {\n return coord;\n } else if (isNumber(coord[0][0])) {\n throw new Error(\"当前数据不支持标注\");\n } else if (isNumber(coord[0][0][0])) {\n const coords = coord;\n let xSum = 0;\n let ySum = 0;\n let len = 0;\n coords.forEach((coor) => {\n coor.forEach((pos) => {\n xSum += pos[0];\n ySum += pos[1];\n len++;\n });\n });\n return [xSum / len, ySum / len, 0];\n } else {\n throw new Error(\"当前数据不支持标注\");\n }\n}\nfunction calculatePointsCenterAndRadius(points) {\n let maxX = points[0];\n let maxY = points[1];\n let minX = points[0];\n let minY = points[1];\n let xCount = 0;\n let yCount = 0;\n let pCount = 0;\n for (let i = 0; i < points.length; i += 2) {\n const x = points[i];\n const y = points[i + 1];\n if (x && y) {\n maxX = Math.max(x, maxX);\n maxY = Math.max(y, maxY);\n minX = Math.min(x, minX);\n minY = Math.min(y, minY);\n xCount += x;\n yCount += y;\n pCount++;\n }\n }\n return {\n center: [xCount / pCount, yCount / pCount],\n radius: Math.sqrt(Math.pow(maxX - minX, 2) + Math.pow(maxY - minY, 2)) / 2\n };\n}\nfunction getBBoxFromPoints(pointList) {\n return bbox(featureCollection([lineString(pointList)]));\n}\nexport {\n aProjectFlat,\n amap2Project,\n amap2UnProject,\n bBoxToBounds,\n boundsContains,\n calAngle,\n calDistance,\n calculateCentroid,\n calculatePointsCenterAndRadius,\n extent,\n flow,\n getAngle,\n getBBoxFromPoints,\n latitude,\n lngLatInExtent,\n lngLatToMeters,\n lnglatDistance,\n longitude,\n metersToLngLat,\n normalize,\n padBounds,\n project,\n tranfrormCoord,\n unProjectFlat,\n validateLngLat\n};\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { useStyle as useAntdStyle } from '@ant-design/pro-provider';\nvar genProStyle = function genProStyle(token) {\n return _defineProperty(_defineProperty({}, \"\".concat(token.antCls, \"-pro\"), _defineProperty({}, \"\".concat(token.antCls, \"-form:not(\").concat(token.antCls, \"-form-horizontal)\"), _defineProperty({}, token.componentCls, _defineProperty({}, \"&-item:not(\".concat(token.componentCls, \"-item-show-label)\"), _defineProperty({}, \"\".concat(token.antCls, \"-form-item-label\"), {\n display: 'none'\n }))))), token.componentCls, _defineProperty(_defineProperty({\n maxWidth: '100%',\n '&-item': {\n '&&-show-label': _defineProperty({}, \"\".concat(token.antCls, \"-form-item-label\"), {\n display: 'inline-block'\n }),\n '&&-default:first-child': {\n 'div:first-of-type': _defineProperty({}, \"\".concat(token.antCls, \"-form-item\"), _defineProperty({}, \"\".concat(token.antCls, \"-form-item-label\"), {\n display: 'inline-block'\n }))\n },\n '&&-default:not(:first-child)': {\n 'div:first-of-type': _defineProperty({}, \"\".concat(token.antCls, \"-form-item\"), _defineProperty({}, \"\".concat(token.antCls, \"-form-item-label\"), {\n display: 'none'\n }))\n }\n },\n '&-action': {\n display: 'flex',\n height: token.controlHeight,\n marginBlockEnd: token.marginLG,\n lineHeight: token.controlHeight + 'px',\n '&-small': {\n height: token.controlHeightSM,\n lineHeight: token.controlHeightSM\n }\n },\n '&-action-icon': {\n marginInlineStart: 8,\n cursor: 'pointer',\n transition: 'color 0.3s ease-in-out',\n '&:hover': {\n color: token.colorPrimaryTextHover\n }\n }\n }, \"\".concat(token.proComponentsCls, \"-card \").concat(token.proComponentsCls, \"-card-extra\"), _defineProperty({}, token.componentCls, {\n '&-action': {\n marginBlockEnd: 0\n }\n })), '&-creator-button-top', {\n marginBlockEnd: 24\n }));\n};\nexport function useStyle(prefixCls) {\n return useAntdStyle('ProFormList', function (token) {\n var proToken = _objectSpread(_objectSpread({}, token), {}, {\n componentCls: \".\".concat(prefixCls)\n });\n return [genProStyle(proToken)];\n });\n}","import { __extends, __rest } from \"tslib\";\nimport { CustomElement } from '../shapes';\nimport { createOffscreenGroup, deepAssign, visibility } from '../util';\nfunction applyVisibility() {\n visibility(this, this.attributes.visibility !== 'hidden');\n}\nvar Component = /** @class */ (function (_super) {\n __extends(Component, _super);\n function Component(options, defaultStyleProps) {\n if (defaultStyleProps === void 0) { defaultStyleProps = {}; }\n var _this = _super.call(this, deepAssign({}, { style: defaultStyleProps }, options)) || this;\n _this.initialized = false;\n _this._defaultOptions = defaultStyleProps;\n return _this;\n }\n Object.defineProperty(Component.prototype, \"offscreenGroup\", {\n get: function () {\n if (!this._offscreen)\n this._offscreen = createOffscreenGroup(this);\n return this._offscreen;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Component.prototype, \"defaultOptions\", {\n get: function () {\n return this._defaultOptions;\n },\n enumerable: false,\n configurable: true\n });\n Component.prototype.connectedCallback = function () {\n this.render(this.attributes, this);\n this.bindEvents(this.attributes, this);\n this.initialized = true;\n };\n Component.prototype.disconnectedCallback = function () {\n var _a;\n (_a = this._offscreen) === null || _a === void 0 ? void 0 : _a.destroy();\n };\n Component.prototype.attributeChangedCallback = function (name) {\n if (name === 'visibility') {\n applyVisibility.call(this);\n }\n };\n Component.prototype.update = function (attr, animate) {\n var _a;\n this.attr(deepAssign({}, this.attributes, attr || {}));\n return (_a = this.render) === null || _a === void 0 ? void 0 : _a.call(this, this.attributes, this, animate);\n };\n Component.prototype.clear = function () {\n this.removeChildren();\n };\n Component.prototype.bindEvents = function (attributes, container) { };\n Component.prototype.getSubShapeStyle = function (attributes) {\n var x = attributes.x, y = attributes.y, transform = attributes.transform, transformOrigin = attributes.transformOrigin, _class = attributes.class, className = attributes.className, zIndex = attributes.zIndex, style = __rest(attributes, [\"x\", \"y\", \"transform\", \"transformOrigin\", \"class\", \"className\", \"zIndex\"]);\n return style;\n };\n return Component;\n}(CustomElement));\nexport { Component };\n//# sourceMappingURL=component.js.map","var PRECISION = 0.00001; // numbers less than this is considered as 0\n/**\n * 判断两个数是否相等\n * @return 是否相等\n */\nexport default function isNumberEqual(a, b, precision) {\n if (precision === void 0) { precision = PRECISION; }\n return a === b || Math.abs(a - b) < precision;\n}\n//# sourceMappingURL=is-number-equal.js.map","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","export default function identity(x) {\n return x;\n}\n","// to prevent users from tampering with internal values.\nexport const ChartEvent = {\n BEFORE_RENDER: 'beforerender',\n AFTER_RENDER: 'afterrender',\n BEFORE_PAINT: 'beforepaint',\n AFTER_PAINT: 'afterpaint',\n BEFORE_CHANGE_DATA: 'beforechangedata',\n AFTER_CHANGE_DATA: 'afterchangedata',\n BEFORE_CLEAR: 'beforeclear',\n AFTER_CLEAR: 'afterclear',\n BEFORE_DESTROY: 'beforedestroy',\n AFTER_DESTROY: 'afterdestroy',\n BEFORE_CHANGE_SIZE: 'beforechangesize',\n AFTER_CHANGE_SIZE: 'afterchangesize',\n POINTER_TAP: 'pointertap',\n POINTER_DOWN: 'pointerdown',\n POINTER_UP: 'pointerup',\n POINTER_OVER: 'pointerover',\n POINTER_OUT: 'pointerout',\n POINTER_MOVE: 'pointermove',\n POINTER_ENTER: 'pointerenter',\n POINTER_LEAVE: 'pointerleave',\n POINTER_UPOUTSIDE: 'pointerupoutside',\n DRAG_START: 'dragstart',\n DRAG: 'drag',\n DRAG_END: 'dragend',\n DRAG_ENTER: 'dragenter',\n DRAG_LEAVE: 'dragleave',\n DRAG_OVER: 'dragover',\n DROP: 'DROP',\n CLICK: 'click',\n DBLCLICK: 'dblclick',\n};\n//# sourceMappingURL=event.js.map","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","\"use strict\";\n\nvar prop = \"_erd\";\n\nfunction initState(element) {\n element[prop] = {};\n return getState(element);\n}\n\nfunction getState(element) {\n return element[prop];\n}\n\nfunction cleanState(element) {\n delete element[prop];\n}\n\nmodule.exports = {\n initState: initState,\n getState: getState,\n cleanState: cleanState\n};\n","export default x => x;\n","var baseRest = require('./_baseRest'),\n pullAll = require('./pullAll');\n\n/**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\nvar pull = baseRest(pullAll);\n\nmodule.exports = pull;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"fieldProps\", \"proFieldProps\"];\nimport { dateArrayFormatter } from '@ant-design/pro-utils';\nimport React, { useContext } from 'react';\nimport FieldContext from \"../../FieldContext\";\nimport ProField from \"../Field\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar valueType = 'dateRange';\n\n/**\n * 日期区间选择组件\n *\n * @param\n */\nvar ProFormDateRangePicker = /*#__PURE__*/React.forwardRef(function (_ref, ref) {\n var fieldProps = _ref.fieldProps,\n proFieldProps = _ref.proFieldProps,\n rest = _objectWithoutProperties(_ref, _excluded);\n var context = useContext(FieldContext);\n return /*#__PURE__*/_jsx(ProField, _objectSpread({\n ref: ref,\n fieldProps: _objectSpread({\n getPopupContainer: context.getPopupContainer\n }, fieldProps),\n valueType: valueType,\n proFieldProps: proFieldProps,\n filedConfig: {\n valueType: valueType,\n customLightMode: true,\n lightFilterLabelFormatter: function lightFilterLabelFormatter(value) {\n return dateArrayFormatter(value, (fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.format) || 'YYYY-MM-DD');\n }\n }\n }, rest));\n});\nexport default ProFormDateRangePicker;","import {optional} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n ambiguous = {},\n imputed = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId,\n path;\n\n function stratify(data) {\n var nodes = Array.from(data),\n currentId = id,\n currentParentId = parentId,\n n,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map;\n\n if (path != null) {\n const I = nodes.map((d, i) => normalize(path(d, i, data)));\n const P = I.map(parentof);\n const S = new Set(I).add(\"\");\n for (const i of P) {\n if (!S.has(i)) {\n S.add(i);\n I.push(i);\n P.push(parentof(i));\n nodes.push(imputed);\n }\n }\n currentId = (_, i) => I[i];\n currentParentId = (_, i) => P[i];\n }\n\n for (i = 0, n = nodes.length; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new Node(d);\n if ((nodeId = currentId(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += \"\")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n\n // When imputing internal nodes, only introduce roots if needed.\n // Then replace the imputed marker data with null.\n if (path != null) {\n while (root.data === imputed && root.children.length === 1) {\n root = root.children[0], --n;\n }\n for (let i = nodes.length - 1; i >= 0; --i) {\n node = nodes[i];\n if (node.data !== imputed) break;\n node.data = null;\n }\n }\n\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = optional(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = optional(x), stratify) : parentId;\n };\n\n stratify.path = function(x) {\n return arguments.length ? (path = optional(x), stratify) : path;\n };\n\n return stratify;\n}\n\n// To normalize a path, we coerce to a string, strip the trailing slash if any\n// (as long as the trailing slash is not immediately preceded by another slash),\n// and add leading slash if missing.\nfunction normalize(path) {\n path = `${path}`;\n let i = path.length;\n if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);\n return path[0] === \"/\" ? path : `/${path}`;\n}\n\n// Walk backwards to find the first slash that is not the leading slash, e.g.:\n// \"/foo/bar\" ⇥ \"/foo\", \"/foo\" ⇥ \"/\", \"/\" ↦ \"\". (The root is special-cased\n// because the id of the root must be a truthy value.)\nfunction parentof(path) {\n let i = path.length;\n if (i < 2) return \"\";\n while (--i > 1) if (slash(path, i)) break;\n return path.slice(0, i);\n}\n\n// Slashes can be escaped; to determine whether a slash is a path delimiter, we\n// count the number of preceding backslashes escaping the forward slash: an odd\n// number indicates an escaped forward slash.\nfunction slash(path, i) {\n if (path[i] === \"/\") {\n let k = 0;\n while (i > 0 && path[--i] === \"\\\\\") ++k;\n if ((k & 1) === 0) return true;\n }\n return false;\n}\n","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n","import { __read, __spreadArray } from \"tslib\";\nimport { isFunction } from '@antv/util';\nexport function getCallbackValue(value, params) {\n return isFunction(value) ? value.apply(void 0, __spreadArray([], __read(params), false)) : value;\n}\n//# sourceMappingURL=callback.js.map","var baseClamp = require('./_baseClamp'),\n toNumber = require('./toNumber');\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n}\n\nmodule.exports = clamp;\n","// This icon file is generated automatically.\nvar EyeOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z\" } }] }, \"name\": \"eye\", \"theme\": \"outlined\" };\nexport default EyeOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport EyeOutlinedSvg from \"@ant-design/icons-svg/es/asn/EyeOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar EyeOutlined = function EyeOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: EyeOutlinedSvg\n }));\n};\n\n/**![eye](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTk0Mi4yIDQ4Ni4yQzg0Ny40IDI4Ni41IDcwNC4xIDE4NiA1MTIgMTg2Yy0xOTIuMiAwLTMzNS40IDEwMC41LTQzMC4yIDMwMC4zYTYwLjMgNjAuMyAwIDAwMCA1MS41QzE3Ni42IDczNy41IDMxOS45IDgzOCA1MTIgODM4YzE5Mi4yIDAgMzM1LjQtMTAwLjUgNDMwLjItMzAwLjMgNy43LTE2LjIgNy43LTM1IDAtNTEuNXpNNTEyIDc2NmMtMTYxLjMgMC0yNzkuNC04MS44LTM2Mi43LTI1NEMyMzIuNiAzMzkuOCAzNTAuNyAyNTggNTEyIDI1OGMxNjEuMyAwIDI3OS40IDgxLjggMzYyLjcgMjU0Qzc5MS41IDY4NC4yIDY3My40IDc2NiA1MTIgNzY2em0tNC00MzBjLTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2czc4LjggMTc2IDE3NiAxNzYgMTc2LTc4LjggMTc2LTE3Ni03OC44LTE3Ni0xNzYtMTc2em0wIDI4OGMtNjEuOSAwLTExMi01MC4xLTExMi0xMTJzNTAuMS0xMTIgMTEyLTExMiAxMTIgNTAuMSAxMTIgMTEyLTUwLjEgMTEyLTExMiAxMTJ6IiAvPjwvc3ZnPg==) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(EyeOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'EyeOutlined';\n}\nexport default RefIcon;","'use strict';\n\nvar VectorTileLayer = require('./vectortilelayer');\n\nmodule.exports = VectorTile;\n\nfunction VectorTile(pbf, end) {\n this.layers = pbf.readFields(readTile, {}, end);\n}\n\nfunction readTile(tag, layers, pbf) {\n if (tag === 3) {\n var layer = new VectorTileLayer(pbf, pbf.readVarint() + pbf.pos);\n if (layer.length) layers[layer.name] = layer;\n }\n}\n\n","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nexport function leftPad(str, length) {\n var fill = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '0';\n var current = String(str);\n while (current.length < length) {\n current = \"\".concat(fill).concat(current);\n }\n return current;\n}\n\n/**\n * Convert `value` to array. Will provide `[]` if is null or undefined.\n */\nexport function toArray(val) {\n if (val === null || val === undefined) {\n return [];\n }\n return Array.isArray(val) ? val : [val];\n}\nexport function fillIndex(ori, index, value) {\n var clone = _toConsumableArray(ori);\n clone[index] = value;\n return clone;\n}\n\n/** Pick props from the key list. Will filter empty value */\nexport function pickProps(props, keys) {\n var clone = {};\n var mergedKeys = keys || Object.keys(props);\n mergedKeys.forEach(function (key) {\n if (props[key] !== undefined) {\n clone[key] = props[key];\n }\n });\n return clone;\n}\nexport function getRowFormat(picker, locale, format) {\n if (format) {\n return format;\n }\n switch (picker) {\n // All from the `locale.fieldXXXFormat` first\n case 'time':\n return locale.fieldTimeFormat;\n case 'datetime':\n return locale.fieldDateTimeFormat;\n case 'month':\n return locale.fieldMonthFormat;\n case 'year':\n return locale.fieldYearFormat;\n case 'quarter':\n return locale.fieldQuarterFormat;\n case 'week':\n return locale.fieldWeekFormat;\n default:\n return locale.fieldDateFormat;\n }\n}\nexport function getFromDate(calendarValues, activeIndexList, activeIndex) {\n var mergedActiveIndex = activeIndex !== undefined ? activeIndex : activeIndexList[activeIndexList.length - 1];\n var firstValuedIndex = activeIndexList.find(function (index) {\n return calendarValues[index];\n });\n return mergedActiveIndex !== firstValuedIndex ? calendarValues[firstValuedIndex] : undefined;\n}","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","/**\n * Clamp number within the inclusive range within the lower and upper bounds.\n */\nexport function clamp(v, lower, upper) {\n return Math.max(lower, Math.min(v, upper));\n}\n/**\n * Precision conversion\n */\nexport function prettyNumber(n, precision = 10) {\n if (typeof n !== 'number')\n return n;\n return Math.abs(n) < 1e-15 ? n : parseFloat(n.toFixed(precision));\n}\n//# sourceMappingURL=number.js.map","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","// This icon file is generated automatically.\nvar EditOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M257.7 752c2 0 4-.2 6-.5L431.9 722c2-.4 3.9-1.3 5.3-2.8l423.9-423.9a9.96 9.96 0 000-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2a33.5 33.5 0 009.4 29.8c6.6 6.4 14.9 9.9 23.8 9.9zm67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z\" } }] }, \"name\": \"edit\", \"theme\": \"outlined\" };\nexport default EditOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport EditOutlinedSvg from \"@ant-design/icons-svg/es/asn/EditOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar EditOutlined = function EditOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: EditOutlinedSvg\n }));\n};\n\n/**![edit](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTI1Ny43IDc1MmMyIDAgNC0uMiA2LS41TDQzMS45IDcyMmMyLS40IDMuOS0xLjMgNS4zLTIuOGw0MjMuOS00MjMuOWE5Ljk2IDkuOTYgMCAwMDAtMTQuMUw2OTQuOSAxMTQuOWMtMS45LTEuOS00LjQtMi45LTcuMS0yLjlzLTUuMiAxLTcuMSAyLjlMMjU2LjggNTM4LjhjLTEuNSAxLjUtMi40IDMuMy0yLjggNS4zbC0yOS41IDE2OC4yYTMzLjUgMzMuNSAwIDAwOS40IDI5LjhjNi42IDYuNCAxNC45IDkuOSAyMy44IDkuOXptNjcuNC0xNzQuNEw2ODcuOCAyMTVsNzMuMyA3My4zLTM2Mi43IDM2Mi42LTg4LjkgMTUuNyAxNS42LTg5ek04ODAgODM2SDE0NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MzZjMCA0LjQgMy42IDggOCA4aDc4NGM0LjQgMCA4LTMuNiA4LTh2LTM2YzAtMTcuNy0xNC4zLTMyLTMyLTMyeiIgLz48L3N2Zz4=) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(EditOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'EditOutlined';\n}\nexport default RefIcon;","var WILDCARD = '*';\n/* event-emitter */\nvar EventEmitter = /** @class */ (function () {\n function EventEmitter() {\n this._events = {};\n }\n /**\n * 监听一个事件\n * @param evt\n * @param callback\n * @param once\n */\n EventEmitter.prototype.on = function (evt, callback, once) {\n if (!this._events[evt]) {\n this._events[evt] = [];\n }\n this._events[evt].push({\n callback: callback,\n once: !!once,\n });\n return this;\n };\n /**\n * 监听一个事件一次\n * @param evt\n * @param callback\n */\n EventEmitter.prototype.once = function (evt, callback) {\n return this.on(evt, callback, true);\n };\n /**\n * 触发一个事件\n * @param evt\n * @param args\n */\n EventEmitter.prototype.emit = function (evt) {\n var _this = this;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var events = this._events[evt] || [];\n var wildcardEvents = this._events[WILDCARD] || [];\n // 实际的处理 emit 方法\n var doEmit = function (es) {\n var length = es.length;\n for (var i = 0; i < length; i++) {\n if (!es[i]) {\n continue;\n }\n var _a = es[i], callback = _a.callback, once = _a.once;\n if (once) {\n es.splice(i, 1);\n if (es.length === 0) {\n delete _this._events[evt];\n }\n length--;\n i--;\n }\n callback.apply(_this, args);\n }\n };\n doEmit(events);\n doEmit(wildcardEvents);\n };\n /**\n * 取消监听一个事件,或者一个channel\n * @param evt\n * @param callback\n */\n EventEmitter.prototype.off = function (evt, callback) {\n if (!evt) {\n // evt 为空全部清除\n this._events = {};\n }\n else {\n if (!callback) {\n // evt 存在,callback 为空,清除事件所有方法\n delete this._events[evt];\n }\n else {\n // evt 存在,callback 存在,清除匹配的\n var events = this._events[evt] || [];\n var length_1 = events.length;\n for (var i = 0; i < length_1; i++) {\n if (events[i].callback === callback) {\n events.splice(i, 1);\n length_1--;\n i--;\n }\n }\n if (events.length === 0) {\n delete this._events[evt];\n }\n }\n }\n return this;\n };\n /* 当前所有的事件 */\n EventEmitter.prototype.getEvents = function () {\n return this._events;\n };\n return EventEmitter;\n}());\nexport default EventEmitter;\n//# sourceMappingURL=index.js.map","import * as React from 'react';\nvar CascaderContext = /*#__PURE__*/React.createContext({});\nexport default CascaderContext;","import { paramsCount } from '../parser/params-count';\n/**\n * Iterates an array to check if it's an actual `PathArray`.\n */\nexport function isPathArray(path) {\n return (Array.isArray(path) &&\n path.every(function (seg) {\n var lk = seg[0].toLowerCase();\n return paramsCount[lk] === seg.length - 1 && 'achlmqstvz'.includes(lk);\n }));\n}\n//# sourceMappingURL=is-path-array.js.map","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"fieldProps\", \"children\", \"labelCol\", \"label\", \"autoFocus\", \"isDefaultDom\", \"render\", \"proFieldProps\", \"renderFormItem\", \"valueType\", \"initialValue\", \"onChange\", \"valueEnum\", \"params\", \"name\", \"dependenciesValues\", \"cacheForSwr\", \"valuePropName\"];\nimport ProField from '@ant-design/pro-field';\nimport { isDeepEqualReact, runFunction, useRefFunction } from '@ant-design/pro-utils';\nimport React, { memo, useContext, useMemo } from 'react';\nimport { EditOrReadOnlyContext } from \"../../BaseForm/EditOrReadOnlyContext\";\nimport { createField } from \"../../BaseForm/createField\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar BaseProFormField = function BaseProFormField(props) {\n var fieldProps = props.fieldProps,\n children = props.children,\n labelCol = props.labelCol,\n label = props.label,\n autoFocus = props.autoFocus,\n isDefaultDom = props.isDefaultDom,\n render = props.render,\n proFieldProps = props.proFieldProps,\n renderFormItem = props.renderFormItem,\n valueType = props.valueType,\n initialValue = props.initialValue,\n _onChange = props.onChange,\n valueEnum = props.valueEnum,\n params = props.params,\n name = props.name,\n dependenciesValues = props.dependenciesValues,\n _props$cacheForSwr = props.cacheForSwr,\n cacheForSwr = _props$cacheForSwr === void 0 ? false : _props$cacheForSwr,\n _props$valuePropName = props.valuePropName,\n valuePropName = _props$valuePropName === void 0 ? 'value' : _props$valuePropName,\n restProps = _objectWithoutProperties(props, _excluded);\n var modeContext = useContext(EditOrReadOnlyContext);\n var propsParams = useMemo(function () {\n // 使用dependencies时 dependenciesValues是有值的\n // 此时如果存在request,注入dependenciesValues\n return dependenciesValues && restProps.request ? _objectSpread(_objectSpread({}, params), dependenciesValues || {}) : params;\n }, [dependenciesValues, params, restProps.request]);\n var memoUnChange = useRefFunction(function () {\n if (fieldProps !== null && fieldProps !== void 0 && fieldProps.onChange) {\n var _fieldProps$onChange;\n for (var _len = arguments.length, restParams = new Array(_len), _key = 0; _key < _len; _key++) {\n restParams[_key] = arguments[_key];\n }\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onChange = fieldProps.onChange) === null || _fieldProps$onChange === void 0 || _fieldProps$onChange.call.apply(_fieldProps$onChange, [fieldProps].concat(restParams));\n return;\n }\n });\n var memoFieldProps = useMemo(function () {\n return _objectSpread(_objectSpread({\n autoFocus: autoFocus\n }, fieldProps), {}, {\n onChange: memoUnChange\n });\n }, [autoFocus, fieldProps, memoUnChange]);\n var childrenRender = useMemo(function () {\n // 防止 formItem 的值被吃掉\n if (children) {\n if ( /*#__PURE__*/React.isValidElement(children)) {\n return /*#__PURE__*/React.cloneElement(children, _objectSpread(_objectSpread({}, restProps), {}, {\n onChange: function onChange() {\n for (var _len2 = arguments.length, restParams = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n restParams[_key2] = arguments[_key2];\n }\n if (fieldProps !== null && fieldProps !== void 0 && fieldProps.onChange) {\n var _fieldProps$onChange2;\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onChange2 = fieldProps.onChange) === null || _fieldProps$onChange2 === void 0 || _fieldProps$onChange2.call.apply(_fieldProps$onChange2, [fieldProps].concat(restParams));\n return;\n }\n _onChange === null || _onChange === void 0 || _onChange.apply(void 0, restParams);\n }\n }, (children === null || children === void 0 ? void 0 : children.props) || {}));\n }\n return /*#__PURE__*/_jsx(_Fragment, {\n children: children\n });\n }\n return;\n }, [children, fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.onChange, _onChange, restProps]);\n if (childrenRender) {\n return childrenRender;\n }\n return /*#__PURE__*/_jsx(ProField, _objectSpread(_objectSpread(_objectSpread({\n text: fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps[valuePropName],\n render: render,\n renderFormItem: renderFormItem,\n valueType: valueType || 'text',\n cacheForSwr: cacheForSwr,\n fieldProps: memoFieldProps,\n valueEnum: runFunction(valueEnum)\n }, proFieldProps), restProps), {}, {\n mode: (proFieldProps === null || proFieldProps === void 0 ? void 0 : proFieldProps.mode) || modeContext.mode || 'edit',\n params: propsParams\n }));\n};\nvar ProFormField = createField( /*#__PURE__*/memo(BaseProFormField, function (prevProps, nextProps) {\n return isDeepEqualReact(nextProps, prevProps, ['onChange', 'onBlur']);\n}));\nexport default ProFormField;","/**\n * 1. 提供各个 Layer 样式属性初始值的注册服务\n * 2. 当 Layer 通过 style() 改变某些样式属性时,需要感知并标记该属性已经失效,\n * 随后当 Layer 重绘时通过 dirty 标记进行脏检查。重新传入 uniform 或者构建顶点数据(更新 Buffer 中的指定位置)。\n * @see https://yuque.antfin-inc.com/yuqi.pyq/fgetpa/qfuzg8\n */\n\nexport let ScaleTypes = /*#__PURE__*/function (ScaleTypes) {\n ScaleTypes[\"LINEAR\"] = \"linear\";\n ScaleTypes[\"SEQUENTIAL\"] = \"sequential\";\n ScaleTypes[\"POWER\"] = \"power\";\n ScaleTypes[\"LOG\"] = \"log\";\n ScaleTypes[\"IDENTITY\"] = \"identity\";\n ScaleTypes[\"TIME\"] = \"time\";\n ScaleTypes[\"QUANTILE\"] = \"quantile\";\n ScaleTypes[\"QUANTIZE\"] = \"quantize\";\n ScaleTypes[\"THRESHOLD\"] = \"threshold\";\n ScaleTypes[\"CAT\"] = \"cat\";\n ScaleTypes[\"DIVERGING\"] = \"diverging\";\n ScaleTypes[\"CUSTOM\"] = \"threshold\";\n return ScaleTypes;\n}({});\nexport let StyleScaleType = /*#__PURE__*/function (StyleScaleType) {\n StyleScaleType[\"CONSTANT\"] = \"constant\";\n StyleScaleType[\"VARIABLE\"] = \"variable\";\n return StyleScaleType;\n}({});\nexport let AttributeType = /*#__PURE__*/function (AttributeType) {\n AttributeType[AttributeType[\"Attribute\"] = 0] = \"Attribute\";\n AttributeType[AttributeType[\"InstancedAttribute\"] = 1] = \"InstancedAttribute\";\n AttributeType[AttributeType[\"Uniform\"] = 2] = \"Uniform\";\n return AttributeType;\n}({});","export let TextureUsage = /*#__PURE__*/function (TextureUsage) {\n TextureUsage[TextureUsage[\"SAMPLED\"] = 0] = \"SAMPLED\";\n TextureUsage[TextureUsage[\"RENDER_TARGET\"] = 1] = \"RENDER_TARGET\";\n return TextureUsage;\n}({});","// 栅格瓦片解析配置项\n\nexport let RasterTileType = /*#__PURE__*/function (RasterTileType) {\n RasterTileType[\"IMAGE\"] = \"image\";\n RasterTileType[\"CUSTOMIMAGE\"] = \"customImage\";\n RasterTileType[\"ARRAYBUFFER\"] = \"arraybuffer\";\n RasterTileType[\"RGB\"] = \"rgb\";\n RasterTileType[\"TERRAINRGB\"] = \"terrainRGB\";\n RasterTileType[\"CUSTOMRGB\"] = \"customRGB\";\n RasterTileType[\"CUSTOMARRAYBUFFER\"] = \"customArrayBuffer\";\n RasterTileType[\"CUSTOMTERRAINRGB\"] = \"customTerrainRGB\";\n return RasterTileType;\n}({});\n\n// 解析后返回数据类型","// 后续传入 Shader 的变量\nexport const CameraUniform = {\n ProjectionMatrix: 'u_ProjectionMatrix',\n ViewMatrix: 'u_ViewMatrix',\n ViewProjectionMatrix: 'u_ViewProjectionMatrix',\n Zoom: 'u_Zoom',\n ZoomScale: 'u_ZoomScale',\n FocalDistance: 'u_FocalDistance',\n CameraPosition: 'u_CameraPosition'\n};","export var IDebugLog = {\n MapInitStart: \"mapInitStart\",\n LayerInitStart: \"layerInitStart\",\n LayerInitEnd: \"layerInitEnd\",\n SourceInitStart: \"sourceInitStart\",\n SourceInitEnd: \"sourceInitEnd\",\n ScaleInitStart: \"scaleInitStart\",\n ScaleInitEnd: \"scaleInitEnd\",\n MappingStart: \"mappingStart\",\n MappingEnd: \"mappingEnd\",\n BuildModelStart: \"buildModelStart\",\n BuildModelEnd: \"buildModelEnd\"\n};","export const MapServiceEvent = ['mapload', 'mapchange', 'mapAfterFrameChange'];\n\n/**\n * 地图初始化配置项\n */\n\n/**\n * 地图相机参数\n * @see\n */","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n/**\n * tiny-sdf 中每个 glyph 的宽度(加上 buffer 24 + 3 + 3 = 30)\n */\nconst glyphSizeInSDF = 30;\nexport function buildMapping({\n characterSet,\n getFontWidth,\n fontHeight,\n buffer,\n maxCanvasWidth,\n mapping = {},\n xOffset = 0,\n yOffset = 0\n}) {\n let row = 0;\n let x = xOffset;\n Array.from(characterSet).forEach((char, i) => {\n if (!mapping[char]) {\n const width = getFontWidth(char, i);\n if (x + glyphSizeInSDF > maxCanvasWidth) {\n x = 0;\n row++;\n }\n mapping[char] = {\n x,\n y: yOffset + row * glyphSizeInSDF,\n width: glyphSizeInSDF,\n height: glyphSizeInSDF,\n advance: width\n };\n x += glyphSizeInSDF;\n }\n });\n const rowHeight = fontHeight + buffer * 2;\n return {\n mapping,\n xOffset: x,\n yOffset: yOffset + row * rowHeight,\n canvasHeight: nextPowOfTwo(yOffset + (row + 1) * rowHeight)\n };\n}\nexport function buildIconMaping(icons, buffer, maxCanvasWidth) {\n let xOffset = 0;\n let yOffset = 0;\n let rowHeight = 0;\n let columns = [];\n const mapping = {};\n for (const icon of icons) {\n if (!mapping[icon.id]) {\n const {\n size\n } = icon;\n\n // fill one row\n if (xOffset + size + buffer > maxCanvasWidth) {\n buildRowMapping(mapping, columns, yOffset);\n xOffset = 0;\n yOffset = rowHeight + yOffset + buffer;\n rowHeight = 0;\n columns = [];\n }\n columns.push({\n icon,\n xOffset\n });\n xOffset = xOffset + size + buffer;\n rowHeight = Math.max(rowHeight, size);\n }\n }\n if (columns.length > 0) {\n buildRowMapping(mapping, columns, yOffset);\n }\n const canvasHeight = nextPowOfTwo(rowHeight + yOffset + buffer);\n return {\n mapping,\n canvasHeight\n };\n}\nfunction buildRowMapping(mapping, columns, yOffset) {\n for (const column of columns) {\n const {\n icon,\n xOffset\n } = column;\n mapping[icon.id] = _objectSpread(_objectSpread({}, icon), {}, {\n x: xOffset,\n y: yOffset,\n image: icon.image,\n width: icon.width,\n height: icon.height\n });\n }\n}\nexport function nextPowOfTwo(num) {\n return Math.pow(2, Math.ceil(Math.log2(num)));\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { LRUCache } from '@antv/l7-utils';\n// @ts-ignore\nimport TinySDF from '@mapbox/tiny-sdf';\nimport { EventEmitter } from 'eventemitter3';\nimport { buildMapping } from \"../../utils/font_util\";\nexport const DEFAULT_CHAR_SET = getDefaultCharacterSet();\nexport const DEFAULT_FONT_FAMILY = 'sans-serif';\nexport const DEFAULT_FONT_WEIGHT = 'normal';\nexport const DEFAULT_FONT_SIZE = 24;\nexport const DEFAULT_BUFFER = 3;\nexport const DEFAULT_CUTOFF = 0.25;\nexport const DEFAULT_RADIUS = 8;\nconst MAX_CANVAS_WIDTH = 1024;\nconst BASELINE_SCALE = 1.0;\nconst HEIGHT_SCALE = 1.0;\nconst CACHE_LIMIT = 3;\nexport const VALID_PROPS = ['fontFamily', 'fontWeight', 'characterSet', 'fontSize', 'sdf', 'buffer', 'cutoff', 'radius'];\nfunction getDefaultCharacterSet() {\n const charSet = [];\n for (let i = 32; i < 128; i++) {\n charSet.push(String.fromCharCode(i));\n }\n return charSet;\n}\nfunction setTextStyle(ctx, fontFamily, fontSize, fontWeight) {\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`;\n ctx.fillStyle = 'black';\n ctx.textBaseline = 'middle';\n // ctx.textAlign = 'left';\n}\nfunction populateAlphaChannel(alphaChannel, imageData) {\n // populate distance value from tinySDF to image alpha channel\n for (let i = 0; i < alphaChannel.length; i++) {\n imageData.data[4 * i + 3] = alphaChannel[i];\n }\n}\nexport default class FontService extends EventEmitter {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"fontAtlas\", void 0);\n // iconFontMap 记录用户设置的 iconfont unicode 和名称的键值关系\n _defineProperty(this, \"iconFontMap\", void 0);\n _defineProperty(this, \"iconFontGlyphs\", {});\n _defineProperty(this, \"fontOptions\", void 0);\n _defineProperty(this, \"key\", void 0);\n _defineProperty(this, \"cache\", new LRUCache(CACHE_LIMIT));\n }\n get scale() {\n return HEIGHT_SCALE;\n }\n get canvas() {\n const data = this.cache.get(this.key);\n return data && data.data;\n }\n get mapping() {\n const data = this.cache.get(this.key);\n return data && data.mapping || {};\n }\n getCanvasByKey(key) {\n const data = this.cache.get(key);\n return data && data.data;\n }\n getMappingByKey(key) {\n const data = this.cache.get(key);\n return data && data.mapping || {};\n }\n init() {\n this.cache.clear();\n this.fontOptions = {\n fontFamily: DEFAULT_FONT_FAMILY,\n fontWeight: DEFAULT_FONT_WEIGHT,\n characterSet: DEFAULT_CHAR_SET,\n fontSize: DEFAULT_FONT_SIZE,\n buffer: DEFAULT_BUFFER,\n sdf: true,\n cutoff: DEFAULT_CUTOFF,\n radius: DEFAULT_RADIUS,\n iconfont: false\n };\n this.key = '';\n this.iconFontMap = new Map();\n }\n addIconGlyphs(glyphs) {\n glyphs.forEach(glyph => {\n this.iconFontGlyphs[glyph.name] = glyph.unicode;\n });\n }\n\n /**\n * 添加对 iconfont unicode 的映射\n * @param fontUnicode\n * @param name\n */\n addIconFont(name, fontUnicode) {\n this.iconFontMap.set(name, fontUnicode);\n }\n\n /**\n * 获取自定义 iconfont 别称对应的 unicode 编码,若是当前的 map 中没有对应的键值对,那么就返回原值\n * @param name\n * @returns\n */\n getIconFontKey(name) {\n return this.iconFontMap.get(name) || name;\n }\n getGlyph(name) {\n if (this.iconFontGlyphs[name]) {\n return String.fromCharCode(parseInt(this.iconFontGlyphs[name], 16));\n }\n return '';\n }\n setFontOptions(option) {\n this.fontOptions = _objectSpread(_objectSpread({}, this.fontOptions), option);\n this.key = this.getKey();\n const charSet = this.getNewChars(this.key, this.fontOptions.characterSet);\n const cachedFontAtlas = this.cache.get(this.key);\n if (cachedFontAtlas && charSet.length === 0) {\n // update texture with cached fontAtlas\n return;\n }\n // update fontAtlas with new settings\n const fontAtlas = this.generateFontAtlas(this.key, charSet, cachedFontAtlas);\n this.fontAtlas = fontAtlas;\n\n // update cache\n this.cache.set(this.key, fontAtlas);\n }\n /**\n * 用户自定义添加第三方字体 (用户使用 layer/point/text/iconfont 的前提需要加载第三方字体文件)\n * @param fontFamily\n * @param fontPath\n */\n addFontFace(fontFamily, fontPath) {\n const style = document.createElement('style');\n style.type = 'text/css';\n style.innerText = `\n @font-face{\n font-family: '${fontFamily}';\n src: url('${fontPath}') format('woff2'),\n url('${fontPath}') format('woff'),\n url('${fontPath}') format('truetype');\n }`;\n style.onload = () => {\n if (document.fonts) {\n try {\n // @ts-ignore\n document.fonts.load(`24px ${fontFamily}`, 'L7text');\n document.fonts.ready.then(() => {\n this.emit('fontloaded', {\n fontFamily\n });\n });\n } catch (e) {\n console.warn('当前环境不支持 document.fonts !');\n console.warn('当前环境不支持 iconfont !');\n console.warn(e);\n }\n }\n };\n document.getElementsByTagName('head')[0].appendChild(style);\n }\n destroy() {\n this.cache.clear();\n this.iconFontMap.clear();\n }\n generateFontAtlas(key, characterSet, cachedFontAtlas) {\n const {\n fontFamily,\n fontWeight,\n fontSize,\n buffer,\n sdf,\n radius,\n cutoff,\n iconfont\n } = this.fontOptions;\n let canvas = cachedFontAtlas && cachedFontAtlas.data;\n if (!canvas) {\n canvas = window.document.createElement('canvas');\n canvas.width = MAX_CANVAS_WIDTH;\n }\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true\n });\n setTextStyle(ctx, fontFamily, fontSize, fontWeight);\n\n // 1. build mapping\n const {\n mapping,\n canvasHeight,\n xOffset,\n yOffset\n } = buildMapping(_objectSpread({\n getFontWidth: char => ctx.measureText(char).width,\n fontHeight: fontSize * HEIGHT_SCALE,\n buffer,\n characterSet,\n maxCanvasWidth: MAX_CANVAS_WIDTH\n }, cachedFontAtlas && {\n mapping: cachedFontAtlas.mapping,\n xOffset: cachedFontAtlas.xOffset,\n yOffset: cachedFontAtlas.yOffset\n }));\n\n // 2. update canvas\n // copy old canvas data to new canvas only when height changed\n // TODO safari 不能正常更新\n const copyImageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n canvas.height = canvasHeight;\n ctx.putImageData(copyImageData, 0, 0);\n setTextStyle(ctx, fontFamily, fontSize, fontWeight);\n\n // 3. layout characters\n if (sdf) {\n const tinySDF = new TinySDF(fontSize, buffer, radius, cutoff, fontFamily, fontWeight);\n // used to store distance values from tinySDF\n // tinySDF.size equals `fontSize + buffer * 2`\n const imageData = ctx.getImageData(0, 0, tinySDF.size, tinySDF.size);\n for (const char of characterSet) {\n if (iconfont) {\n // @ts-ignore\n // const icon = eval(\n // '(\"' + char.replace('&#x', '\\\\u').replace(';', '') + '\")',\n // );\n\n const icon = String.fromCharCode(parseInt(char.replace('&#x', '').replace(';', ''), 16));\n const iconData = tinySDF.draw(icon);\n populateAlphaChannel(iconData, imageData);\n } else {\n populateAlphaChannel(tinySDF.draw(char), imageData);\n }\n // populateAlphaChannel(tinySDF.draw(char), imageData);\n\n // 考虑到描边,需要保留 sdf 的 buffer,不能像 deck.gl 一样直接减去\n ctx.putImageData(imageData, mapping[char].x, mapping[char].y);\n }\n } else {\n for (const char of characterSet) {\n ctx.fillText(char, mapping[char].x, mapping[char].y + fontSize * BASELINE_SCALE);\n }\n }\n return {\n xOffset,\n yOffset,\n mapping,\n data: canvas,\n width: canvas.width,\n height: canvas.height\n };\n }\n getKey() {\n const {\n fontFamily,\n fontWeight\n } = this.fontOptions;\n return `${fontFamily}_${fontWeight}`;\n }\n\n /**\n *\n * @param key\n * @param characterSet\n * @returns\n * 若是相同的 key,那么将字符存储到同同一个字符列表中\n */\n getNewChars(key, characterSet) {\n const cachedFontAtlas = this.cache.get(key);\n if (!cachedFontAtlas) {\n return characterSet;\n }\n const newChars = [];\n const cachedMapping = cachedFontAtlas.mapping;\n const cachedCharSet = new Set(Object.keys(cachedMapping));\n const charSet = new Set(characterSet);\n charSet.forEach(char => {\n if (!cachedCharSet.has(char)) {\n newChars.push(char);\n }\n });\n return newChars;\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { EventEmitter } from 'eventemitter3';\nimport { buildIconMaping } from \"../../utils/font_util\";\nconst BUFFER = 3;\nconst MAX_CANVAS_WIDTH = 1024;\nconst imageSize = 64;\nexport default class IconService extends EventEmitter {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"canvasHeight\", 128);\n _defineProperty(this, \"texture\", void 0);\n _defineProperty(this, \"canvas\", void 0);\n _defineProperty(this, \"iconData\", void 0);\n _defineProperty(this, \"iconMap\", void 0);\n _defineProperty(this, \"ctx\", void 0);\n _defineProperty(this, \"loadingImageCount\", 0);\n }\n isLoading() {\n return this.loadingImageCount === 0;\n }\n init() {\n this.iconData = [];\n this.iconMap = {};\n this.canvas = window.document.createElement('canvas');\n this.canvas.width = 128;\n this.canvas.height = 128;\n this.ctx = this.canvas.getContext('2d');\n }\n addImage(id, image) {\n var _this = this;\n return _asyncToGenerator(function* () {\n let imagedata = new Image();\n _this.loadingImageCount++;\n if (_this.hasImage(id)) {\n console.warn('Image Id already exists');\n } else {\n _this.iconData.push({\n id,\n size: imageSize\n });\n }\n _this.updateIconMap(); // 先存储 ID,\n imagedata = yield _this.loadImage(image);\n const iconImage = _this.iconData.find(icon => {\n return icon.id === id;\n });\n if (iconImage) {\n iconImage.image = imagedata;\n iconImage.width = imagedata.width;\n iconImage.height = imagedata.height;\n }\n _this.update();\n })();\n }\n\n /**\n * 适配小程序\n * @param id\n * @param image\n * @param sceneService\n */\n addImageMini(id, image, sceneService) {\n const canvas = sceneService.getSceneConfig().canvas;\n // @ts-ignore\n let imagedata = canvas.createImage();\n this.loadingImageCount++;\n if (this.hasImage(id)) {\n throw new Error('Image Id already exists');\n }\n this.iconData.push({\n id,\n size: imageSize\n });\n this.updateIconMap();\n this.loadImageMini(image, canvas).then(img => {\n imagedata = img;\n const iconImage = this.iconData.find(icon => {\n return icon.id === id;\n });\n if (iconImage) {\n iconImage.image = imagedata;\n iconImage.width = imagedata.width;\n iconImage.height = imagedata.height;\n }\n this.update();\n });\n }\n getTexture() {\n return this.texture;\n }\n getIconMap() {\n return this.iconMap;\n }\n getCanvas() {\n return this.canvas;\n }\n hasImage(id) {\n return this.iconMap.hasOwnProperty(id);\n }\n removeImage(id) {\n if (this.hasImage(id)) {\n this.iconData = this.iconData.filter(icon => {\n return icon.id !== id;\n });\n delete this.iconMap[id];\n this.update();\n }\n }\n destroy() {\n // 在销毁的时候清除所有注册的监听\n this.removeAllListeners('imageUpdate');\n this.iconData = [];\n this.iconMap = {};\n }\n loadImage(url) {\n return new Promise((resolve, reject) => {\n if (url instanceof HTMLImageElement) {\n resolve(url);\n return;\n }\n const image = new Image();\n image.crossOrigin = 'anonymous';\n image.onload = () => {\n resolve(image);\n };\n image.onerror = () => {\n reject(new Error('Could not load image at ' + url));\n };\n image.src = url instanceof File ? URL.createObjectURL(url) : url;\n });\n }\n update() {\n this.updateIconMap();\n this.updateIconAtlas();\n this.loadingImageCount--;\n if (this.loadingImageCount === 0) {\n this.emit('imageUpdate');\n }\n }\n\n /**\n * 将新增的 icon 图像存储到画布上(正方形)\n */\n updateIconAtlas() {\n this.canvas.width = MAX_CANVAS_WIDTH;\n this.canvas.height = this.canvasHeight;\n Object.keys(this.iconMap).forEach(item => {\n const {\n x,\n y,\n image,\n width = 64,\n height = 64\n } = this.iconMap[item];\n const max = Math.max(width, height);\n const ratio = max / imageSize;\n const drawHeight = height / ratio;\n const drawWidth = width / ratio;\n if (image) {\n this.ctx.drawImage(image, x + (imageSize - drawWidth) / 2, y + (imageSize - drawHeight) / 2, drawWidth, drawHeight);\n }\n });\n }\n\n /**\n * 计算 icon 在画布上的排布(是否需要换行)\n */\n updateIconMap() {\n const {\n mapping,\n canvasHeight\n } = buildIconMaping(this.iconData, BUFFER, MAX_CANVAS_WIDTH);\n this.iconMap = mapping;\n this.canvasHeight = canvasHeight;\n }\n\n /**\n * 适配小程序\n * @param url\n * @returns\n */\n loadImageMini(url, canvas) {\n return new Promise((resolve, reject) => {\n // @ts-ignore\n const image = canvas.createImage();\n image.crossOrigin = 'anonymous';\n image.onload = () => {\n resolve(image);\n };\n image.onerror = () => {\n reject(new Error('Could not load image at ' + url));\n };\n image.src = url;\n });\n }\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { mat4 } from 'gl-matrix';\nexport default class CameraService {\n constructor() {\n _defineProperty(this, \"viewport\", void 0);\n /**\n * 不使用 Viewport 计算的 VP 矩阵,例如偏移坐标系场景\n */\n _defineProperty(this, \"overridedViewProjectionMatrix\", void 0);\n /**\n * ViewMatrix 逆矩阵,用于计算相机位置\n */\n // private viewMatrixInverse: number[];\n _defineProperty(this, \"viewMatrixInverse\", void 0);\n /**\n * 相机位置\n */\n _defineProperty(this, \"cameraPosition\", void 0);\n }\n init() {\n //\n }\n\n /**\n * 同步根据相机参数创建的视口\n */\n update(viewport) {\n this.viewport = viewport;\n\n // 计算逆矩阵\n // this.viewMatrixInverse = (mat4.invert(\n // mat4.create(), (this.getViewMatrix() as unknown) as mat4,\n // ) as unknown) as number[];\n\n this.viewMatrixInverse = mat4.create();\n mat4.invert(this.viewMatrixInverse, viewport.getViewMatrix());\n this.cameraPosition = [this.viewMatrixInverse[12], this.viewMatrixInverse[13], this.viewMatrixInverse[14]];\n }\n getProjectionMatrix() {\n return this.viewport.getProjectionMatrix();\n }\n getModelMatrix() {\n return this.viewport.getModelMatrix();\n }\n getViewMatrix() {\n return this.viewport.getViewMatrix();\n }\n getViewMatrixUncentered() {\n return this.viewport.getViewMatrixUncentered();\n }\n getViewProjectionMatrixUncentered() {\n return this.viewport.getViewProjectionMatrixUncentered();\n }\n getViewProjectionMatrix() {\n return this.overridedViewProjectionMatrix || this.viewport.getViewProjectionMatrix();\n }\n getZoom() {\n return this.viewport.getZoom();\n }\n getZoomScale() {\n return this.viewport.getZoomScale();\n }\n getCenter() {\n const [lng, lat] = this.viewport.getCenter();\n return [lng, lat];\n }\n getFocalDistance() {\n return this.viewport.getFocalDistance();\n }\n getCameraPosition() {\n return this.cameraPosition;\n }\n projectFlat(lngLat, scale) {\n return this.viewport.projectFlat(lngLat, scale);\n }\n\n /**\n * 支持外部计算 VP 矩阵的场景,例如:在偏移坐标系场景中,需要重新计算 VP 矩阵\n */\n setViewProjectionMatrix(viewProjectionMatrix) {\n this.overridedViewProjectionMatrix = viewProjectionMatrix;\n }\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { DOM } from '@antv/l7-utils';\nimport { PositionType } from \"./IControlService\";\nconst ControlDirectionConfig = {\n topleft: 'column',\n topright: 'column',\n bottomright: 'column',\n bottomleft: 'column',\n leftcenter: 'column',\n rightcenter: 'column',\n topcenter: 'row',\n bottomcenter: 'row',\n lefttop: 'row',\n righttop: 'row',\n leftbottom: 'row',\n rightbottom: 'row'\n};\nexport default class ControlService {\n constructor() {\n _defineProperty(this, \"container\", void 0);\n _defineProperty(this, \"controlCorners\", void 0);\n _defineProperty(this, \"controlContainer\", void 0);\n _defineProperty(this, \"scene\", void 0);\n _defineProperty(this, \"mapsService\", void 0);\n _defineProperty(this, \"controls\", []);\n _defineProperty(this, \"unAddControls\", []);\n }\n init(cfg, sceneContainer) {\n this.container = cfg.container;\n this.scene = sceneContainer;\n this.mapsService = sceneContainer.mapService;\n this.initControlPos();\n }\n addControl(ctr, sceneContainer) {\n const mapsService = sceneContainer.mapService;\n if (mapsService.map) {\n ctr.addTo(this.scene); // scene对象\n this.controls.push(ctr);\n } else {\n this.unAddControls.push(ctr);\n }\n }\n getControlByName(name) {\n return this.controls.find(ctr => {\n return ctr.controlOption.name === name;\n });\n }\n removeControl(ctr) {\n const index = this.controls.indexOf(ctr);\n if (index > -1) {\n this.controls.splice(index, 1);\n }\n ctr.remove();\n return this;\n }\n addControls() {\n this.unAddControls.forEach(ctr => {\n ctr.addTo(this.scene); // scene对象\n this.controls.push(ctr);\n });\n this.unAddControls = [];\n }\n destroy() {\n for (const ctr of this.controls) {\n ctr.remove();\n }\n this.controls = [];\n this.clearControlPos();\n }\n initControlPos() {\n const corners = this.controlCorners = {};\n const l = 'l7-';\n const container = this.controlContainer = DOM.create('div', l + 'control-container', this.container);\n function createCorner(vSideList = []) {\n const className = vSideList.map(item => l + item).join(' ');\n corners[vSideList.filter(item => !['row', 'column'].includes(item)).join('')] = DOM.create('div', className, container);\n }\n function getCornerClassList(positionName) {\n const positionList = positionName.replace(/^(top|bottom|left|right|center)/, '$1-').split('-');\n return [...positionList, ControlDirectionConfig[positionName]];\n }\n Object.values(PositionType).forEach(position => {\n createCorner(getCornerClassList(position));\n });\n this.checkCornerOverlap();\n }\n clearControlPos() {\n for (const i in this.controlCorners) {\n if (this.controlCorners[i]) {\n DOM.remove(this.controlCorners[i]);\n }\n }\n if (this.controlContainer) {\n DOM.remove(this.controlContainer);\n }\n }\n checkCornerOverlap() {\n const Observer = window.MutationObserver;\n // 在 jest 或者低版本的浏览器下,如果不支持 MutationObserver 则直接不处理\n if (!Observer) {\n return;\n }\n for (const cornerType of Object.keys(this.controlCorners)) {\n const matchResult = cornerType.match(/^(top|bottom)(left|right)$/);\n if (matchResult) {\n const [, pos1, pos2] = matchResult;\n const dom = this.controlCorners[`${pos1}${pos2}`];\n const observer = new Observer(([{\n target\n }]) => {\n if (dom) {\n // @ts-ignore\n dom.style[pos1] = target.clientHeight + 'px';\n }\n });\n observer.observe(this.controlCorners[`${pos2}${pos1}`], {\n childList: true,\n attributes: true\n });\n }\n }\n }\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class MarkerService {\n constructor() {\n _defineProperty(this, \"container\", void 0);\n _defineProperty(this, \"scene\", void 0);\n _defineProperty(this, \"mapsService\", void 0);\n _defineProperty(this, \"markers\", []);\n _defineProperty(this, \"markerLayers\", []);\n _defineProperty(this, \"unAddMarkers\", []);\n _defineProperty(this, \"unAddMarkerLayers\", []);\n }\n addMarkerLayer(markerLayer) {\n if (this.mapsService.map && this.mapsService.getMarkerContainer()) {\n this.markerLayers.push(markerLayer);\n markerLayer.addTo(this.scene);\n } else {\n this.unAddMarkerLayers.push(markerLayer);\n }\n }\n removeMarkerLayer(layer) {\n layer.destroy();\n this.markerLayers.indexOf(layer);\n const markerIndex = this.markerLayers.indexOf(layer);\n if (markerIndex > -1) {\n this.markerLayers.splice(markerIndex, 1);\n }\n }\n addMarker(marker) {\n if (this.mapsService.map && this.mapsService.getMarkerContainer()) {\n this.markers.push(marker);\n marker.addTo(this.scene);\n } else {\n this.unAddMarkers.push(marker);\n }\n }\n addMarkers() {\n this.unAddMarkers.forEach(marker => {\n marker.addTo(this.scene);\n this.markers.push(marker);\n });\n this.unAddMarkers = [];\n }\n addMarkerLayers() {\n this.unAddMarkerLayers.forEach(markerLayer => {\n this.markerLayers.push(markerLayer);\n markerLayer.addTo(this.scene);\n });\n this.unAddMarkers = [];\n }\n removeMarker(marker) {\n marker.remove();\n this.markers.indexOf(marker);\n const markerIndex = this.markers.indexOf(marker);\n if (markerIndex > -1) {\n this.markers.splice(markerIndex, 1);\n }\n }\n removeAllMarkers() {\n this.destroy();\n }\n init(scene) {\n this.scene = scene;\n this.mapsService = scene.mapService;\n }\n destroy() {\n this.markers.forEach(marker => {\n marker.remove();\n });\n this.markers = [];\n this.markerLayers.forEach(layer => {\n layer.destroy();\n });\n this.markerLayers = [];\n }\n removeMakerLayerMarker(layer) {\n layer.destroy();\n }\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class PopupService {\n constructor() {\n _defineProperty(this, \"scene\", void 0);\n _defineProperty(this, \"mapsService\", void 0);\n _defineProperty(this, \"popups\", []);\n _defineProperty(this, \"unAddPopups\", []);\n }\n get isMarkerReady() {\n return this.mapsService.map && this.mapsService.getMarkerContainer();\n }\n removePopup(popup) {\n if (popup !== null && popup !== void 0 && popup.isOpen()) {\n popup.remove();\n }\n const targetIndex = this.popups.indexOf(popup);\n if (targetIndex > -1) {\n this.popups.splice(targetIndex, 1);\n }\n const targetUnAddIndex = this.unAddPopups.indexOf(popup);\n if (targetUnAddIndex > -1) {\n this.unAddPopups.splice(targetUnAddIndex, 1);\n }\n }\n destroy() {\n this.popups.forEach(popup => popup.remove());\n }\n addPopup(popup) {\n if (popup && popup.getOptions().autoClose) {\n [...this.popups, ...this.unAddPopups].forEach(otherPopup => {\n if (otherPopup.getOptions().autoClose) {\n this.removePopup(otherPopup);\n }\n });\n }\n if (this.isMarkerReady) {\n popup.addTo(this.scene);\n this.popups.push(popup);\n } else {\n this.unAddPopups.push(popup);\n }\n popup.on('close', () => {\n this.removePopup(popup);\n });\n }\n initPopup() {\n if (this.unAddPopups.length) {\n this.unAddPopups.forEach(popup => {\n this.addPopup(popup);\n this.unAddPopups = [];\n });\n }\n }\n init(scene) {\n this.scene = scene;\n this.mapsService = scene.mapService;\n }\n}","const WarnInfo = {\n MapToken: '您正在使用 Demo 测试 Token, 生产环境务必自行注册 Token 确保服务稳定 高德地图申请地址 https://lbs.amap.com/api/javascript-api/guide/abc/prepare Mapbox地图申请地址 https://docs.mapbox.com/help/glossary/access-token/',\n SDK: '请确认引入了mapbox-gl api且在L7之前引入'\n};\nexport default WarnInfo;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { lodashUtil } from '@antv/l7-utils';\nimport { MaskOperation } from \"../layer/ILayerService\";\nimport WarnInfo from \"./warnInfo\";\nconst {\n merge\n} = lodashUtil;\n/**\n * 场景默认配置项\n */\nconst defaultSceneConfig = {\n id: 'map',\n logoPosition: 'bottomleft',\n logoVisible: true,\n antialias: true,\n stencil: true,\n preserveDrawingBuffer: false,\n pickBufferScale: 1.0,\n fitBoundsOptions: {\n animate: false\n }\n};\n\n/**\n * 图层基类默认样式属性\n */\nconst defaultLayerConfig = {\n colors: ['rgb(103,0,31)', 'rgb(178,24,43)', 'rgb(214,96,77)', 'rgb(244,165,130)', 'rgb(253,219,199)', 'rgb(247,247,247)', 'rgb(209,229,240)', 'rgb(146,197,222)', 'rgb(67,147,195)', 'rgb(33,102,172)', 'rgb(5,48,97)'],\n size: 10,\n shape: 'circle',\n scales: {},\n shape2d: ['circle', 'triangle', 'square', 'pentagon', 'hexagon', 'octogon', 'hexagram', 'rhombus', 'vesica'],\n shape3d: ['cylinder', 'triangleColumn', 'hexagonColumn', 'squareColumn'],\n minZoom: -1,\n maxZoom: 24,\n visible: true,\n autoFit: false,\n pickingBuffer: 0,\n enablePropagation: false,\n zIndex: 0,\n blend: 'normal',\n maskLayers: [],\n enableMask: true,\n maskOperation: MaskOperation.AND,\n pickedFeatureID: -1,\n enableMultiPassRenderer: false,\n enablePicking: true,\n active: false,\n activeColor: '#2f54eb',\n enableHighlight: false,\n enableSelect: false,\n highlightColor: '#2f54eb',\n activeMix: 0,\n selectColor: 'blue',\n selectMix: 0,\n enableLighting: false,\n animateOption: {\n enable: false,\n interval: 0.2,\n duration: 4,\n trailLength: 0.15\n },\n forward: true // 默认是正方向\n};\n\n// @see https://github.com/epoberezkin/ajv#options\n// const ajv = new Ajv({\n// allErrors: true,\n// verbose: true,\n// });\n\nexport default class GlobalConfigService {\n constructor() {\n /**\n * 全部场景配置项缓存\n */\n _defineProperty(this, \"sceneConfigCache\", {});\n /**\n * 场景配置项校验器\n */\n // private sceneConfigValidator: Ajv.ValidateFunction;\n /**\n * 地图配置项校验器\n */\n // private mapConfigValidator: Ajv.ValidateFunction;\n /**\n * 全部图层配置项缓存\n */\n _defineProperty(this, \"layerConfigCache\", {});\n /**\n * 数据映射缓存\n */\n _defineProperty(this, \"layerAttributeConfigCache\", {});\n }\n /**\n * 保存每一种 Layer 配置项的校验器\n */\n // private layerConfigValidatorCache: {\n // [layerName: string]: Ajv.ValidateFunction;\n // } = {};\n\n getSceneConfig(sceneId) {\n return this.sceneConfigCache[sceneId];\n }\n getSceneWarninfo(id) {\n return WarnInfo[id];\n }\n setSceneConfig(sceneId, config) {\n this.sceneConfigCache[sceneId] = _objectSpread(_objectSpread({}, defaultSceneConfig), config);\n }\n\n // public validateSceneConfig(data: object) {\n // return this.validate(this.sceneConfigValidator, data);\n // }\n\n // public validateMapConfig(data: object) {\n // return this.validate(this.mapConfigValidator, data);\n // }\n\n getLayerConfig(layerId) {\n // @ts-ignore\n return this.layerConfigCache[layerId];\n }\n setLayerConfig(sceneId, layerId, config) {\n // @ts-ignore\n this.layerConfigCache[layerId] = _objectSpread({}, merge({}, this.sceneConfigCache[sceneId], defaultLayerConfig, config));\n }\n getAttributeConfig(layerId) {\n return this.layerAttributeConfigCache[layerId];\n }\n setAttributeConfig(layerId, attr) {\n // TODO\n this.layerAttributeConfigCache[layerId] = _objectSpread(_objectSpread({}, this.layerAttributeConfigCache[layerId]), attr);\n }\n clean() {\n this.sceneConfigCache = {};\n this.layerConfigCache = {};\n }\n\n // @postConstruct()\n // private registerSceneConfigSchemaValidator() {\n // this.sceneConfigValidator = ajv.compile(sceneConfigSchema);\n // this.mapConfigValidator = ajv.compile(mapConfigSchema);\n // }\n\n // private validate(\n // validateFunc: Ajv.ValidateFunction | undefined,\n // data: object,\n // ) {\n // if (validateFunc) {\n // const valid = validateFunc(data);\n // if (!valid) {\n // return {\n // valid,\n // errors: validateFunc.errors,\n // errorText: ajv.errorsText(validateFunc.errors),\n // };\n // }\n // }\n // return {\n // valid: true,\n // errors: null,\n // errorText: null,\n // };\n // }\n}","const DEGREES_TO_RADIANS = Math.PI / 180;\nconst TILE_SIZE = 512;\n// Average circumference (40075 km equatorial, 40007 km meridional)\nconst EARTH_CIRCUMFERENCE = 40.03e6;\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({\n latitude = 0,\n zoom = 0,\n scale,\n highPrecision = false,\n flipY = false\n}) {\n // Calculate scale from zoom if not provided\n scale = scale !== undefined ? scale : Math.pow(2, zoom);\n\n // @ts-ignore\n const result = {};\n const worldSize = TILE_SIZE * scale;\n const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n\n /**\n * Number of pixels occupied by one degree longitude around current lat/lon:\n * pixelsPerDegreeX = d(lngLatToWorld([lng, lat])[0])/d(lng)\n * = scale * TILE_SIZE * DEGREES_TO_RADIANS / (2 * PI)\n * pixelsPerDegreeY = d(lngLatToWorld([lng, lat])[1])/d(lat)\n * = -scale * TILE_SIZE * DEGREES_TO_RADIANS / cos(lat * DEGREES_TO_RADIANS) / (2 * PI)\n */\n const pixelsPerDegreeX = worldSize / 360;\n const pixelsPerDegreeY = pixelsPerDegreeX / latCosine;\n\n /**\n * Number of pixels occupied by one meter around current lat/lon:\n */\n const altPixelsPerMeter = worldSize / EARTH_CIRCUMFERENCE / latCosine;\n\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 result.pixelsPerMeter = [altPixelsPerMeter, -altPixelsPerMeter, altPixelsPerMeter];\n result.metersPerPixel = [1 / altPixelsPerMeter, -1 / altPixelsPerMeter, 1 / altPixelsPerMeter];\n result.pixelsPerDegree = [pixelsPerDegreeX, -pixelsPerDegreeY, altPixelsPerMeter];\n result.degreesPerPixel = [1 / pixelsPerDegreeX, -1 / pixelsPerDegreeY, 1 / altPixelsPerMeter];\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 pixelsPerDegreeY2 = pixelsPerDegreeX * latCosine2 / 2;\n const altPixelsPerDegree2 = worldSize / EARTH_CIRCUMFERENCE * latCosine2;\n const altPixelsPerMeter2 = altPixelsPerDegree2 / pixelsPerDegreeY * altPixelsPerMeter;\n result.pixelsPerDegree2 = [0, -pixelsPerDegreeY2, altPixelsPerDegree2];\n result.pixelsPerMeter2 = [altPixelsPerMeter2, 0, altPixelsPerMeter2];\n if (flipY) {\n result.pixelsPerDegree2[1] = -result.pixelsPerDegree2[1];\n result.pixelsPerMeter2[1] = -result.pixelsPerMeter2[1];\n }\n }\n if (flipY) {\n result.pixelsPerMeter[1] = -result.pixelsPerMeter[1];\n result.metersPerPixel[1] = -result.metersPerPixel[1];\n result.pixelsPerDegree[1] = -result.pixelsPerDegree[1];\n result.degreesPerPixel[1] = -result.degreesPerPixel[1];\n }\n\n // Main results, used for converting meters to latlng deltas and scaling offsets\n return result;\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { mat4, vec4 } from 'gl-matrix';\nimport { getDistanceScales } from \"../../utils/project\";\nimport { CoordinateSystem } from \"./ICoordinateSystemService\";\nconst VECTOR_TO_POINT_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0];\nexport default class CoordinateSystemService {\n constructor(cameraService) {\n _defineProperty(this, \"needRefresh\", true);\n /**\n * 1. Web 墨卡托坐标系\n * 2. 偏移经纬度,用于解决高精度抖动问题\n * 3. 瓦片坐标,用于数据瓦片\n * 4. 常规世界坐标系,用于常规 2D/3D 可视化场景\n * @see https://yuque.antfin-inc.com/yuqi.pyq/fgetpa/doml91\n */\n _defineProperty(this, \"coordinateSystem\", void 0);\n /**\n * 屏幕中心点 [lng, lat]\n */\n _defineProperty(this, \"viewportCenter\", void 0);\n /**\n * 屏幕中心点的最终投影结果,在 CPU 侧计算后传入 Shader\n * @see https://zhuanlan.zhihu.com/p/57469121\n */\n _defineProperty(this, \"viewportCenterProjection\", void 0);\n /**\n * 像素单位 -> 经纬度 [x, y, z]\n */\n _defineProperty(this, \"pixelsPerDegree\", void 0);\n /**\n * 像素单位 -> 经纬度 [lng, lat] 使用泰勒级数展开\n * 通过墨卡托坐标系下的差值估计世界坐标系下的差值\n * @see https://zhuanlan.zhihu.com/p/57469121\n */\n _defineProperty(this, \"pixelsPerDegree2\", void 0);\n /**\n * 像素单位 -> 米\n */\n _defineProperty(this, \"pixelsPerMeter\", void 0);\n this.cameraService = cameraService;\n }\n /**\n * 重新计算当前坐标系参数\n * TODO: 使用 memoize 缓存参数以及计算结果\n */\n refresh(offsetCenter) {\n // if (!this.needRefresh) {\n // return;\n // }\n const zoom = this.cameraService.getZoom();\n const center = offsetCenter ? offsetCenter : this.cameraService.getCenter();\n\n // 计算像素到米以及经纬度之间的转换\n const {\n pixelsPerMeter,\n pixelsPerDegree\n } = getDistanceScales({\n // longitude: center[0],\n latitude: center[1],\n zoom\n });\n this.viewportCenter = center;\n this.viewportCenterProjection = [0, 0, 0, 0];\n this.pixelsPerMeter = pixelsPerMeter;\n this.pixelsPerDegree = pixelsPerDegree;\n this.pixelsPerDegree2 = [0, 0, 0];\n if (this.coordinateSystem === CoordinateSystem.LNGLAT) {\n // 继续使用相机服务计算的 VP 矩阵\n this.cameraService.setViewProjectionMatrix(undefined);\n } else if (this.coordinateSystem === CoordinateSystem.LNGLAT_OFFSET) {\n this.calculateLnglatOffset(center, zoom);\n }\n this.needRefresh = false;\n\n // TODO: 判断是否应用瓦片 & 常规坐标系\n }\n getCoordinateSystem() {\n return this.coordinateSystem;\n }\n setCoordinateSystem(coordinateSystem) {\n this.coordinateSystem = coordinateSystem;\n }\n getViewportCenter() {\n return this.viewportCenter;\n }\n setViewportCenter(center) {\n this.refresh(center);\n }\n getViewportCenterProjection() {\n return this.viewportCenterProjection;\n }\n getPixelsPerDegree() {\n return this.pixelsPerDegree;\n }\n getPixelsPerDegree2() {\n return this.pixelsPerDegree2;\n }\n getPixelsPerMeter() {\n return this.pixelsPerMeter;\n }\n calculateLnglatOffset(center, zoom, scale, flipY) {\n // http://uber-common.github.io/viewport-mercator-project/docs/api-reference/web-mercator-utils#code-classlanguage-textgetdistancescalesviewportcode\n const {\n pixelsPerMeter: ppm,\n pixelsPerDegree: ppd,\n pixelsPerDegree2\n } = getDistanceScales({\n // longitude: center[0],\n latitude: center[1],\n zoom,\n scale,\n flipY,\n highPrecision: true\n });\n let viewMatrix = this.cameraService.getViewMatrix();\n const projectionMatrix = this.cameraService.getProjectionMatrix();\n let viewProjectionMatrix = mat4.multiply([], projectionMatrix, viewMatrix);\n\n // 经纬度投影到 Web 墨卡托坐标系\n const positionPixels = this.cameraService.projectFlat([Math.fround(center[0]), Math.fround(center[1])], Math.pow(2, zoom));\n\n // Web 墨卡托坐标系通过 VP 矩阵变换到世界坐标系\n this.viewportCenterProjection = vec4.transformMat4([], [positionPixels[0], positionPixels[1], 0.0, 1.0], viewProjectionMatrix);\n\n // Always apply uncentered projection matrix if available (shader adds center)\n viewMatrix = this.cameraService.getViewMatrixUncentered() || viewMatrix;\n\n // Zero out 4th coordinate (\"after\" model matrix\") - avoids further translations\n viewProjectionMatrix = mat4.multiply([], projectionMatrix, viewMatrix);\n viewProjectionMatrix = mat4.multiply([], viewProjectionMatrix, VECTOR_TO_POINT_MATRIX);\n\n // 重新计算相机 VP 矩阵\n this.cameraService.setViewProjectionMatrix(viewProjectionMatrix);\n this.pixelsPerMeter = ppm;\n this.pixelsPerDegree = ppd;\n this.pixelsPerDegree2 = pixelsPerDegree2;\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { guid } from '@antv/l7-utils';\nimport { EventEmitter } from 'eventemitter3';\nexport default class DebugService extends EventEmitter {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"renderMap\", new Map());\n _defineProperty(this, \"enable\", false);\n _defineProperty(this, \"renderEnable\", false);\n _defineProperty(this, \"cacheLogs\", {});\n }\n setEnable(flag) {\n this.enable = !!flag;\n }\n log(key, values) {\n if (!this.enable) {\n return;\n }\n const keys = key.split('.'); // [12, init, layerInitStart]\n let parent = null;\n keys.forEach((k, i) => {\n if (parent !== null) {\n if (!parent[k]) {\n parent[k] = {};\n }\n if (i !== keys.length - 1) {\n parent = parent[k];\n }\n } else {\n if (!this.cacheLogs[k]) {\n this.cacheLogs[k] = {};\n }\n if (i !== keys.length - 1) {\n parent = this.cacheLogs[k];\n }\n }\n if (i === keys.length - 1) {\n parent[k] = _objectSpread(_objectSpread({\n time: Date.now()\n }, parent[k]), values);\n }\n });\n }\n getLog(key) {\n switch (typeof key) {\n case 'string':\n return this.cacheLogs[key];\n case 'object':\n return key.map(k => this.cacheLogs[k]).filter(o => o !== undefined);\n case 'undefined':\n return this.cacheLogs;\n }\n }\n\n /**\n * 删除日志\n * @param key\n */\n removeLog(key) {\n delete this.cacheLogs[key];\n }\n generateRenderUid() {\n if (this.renderEnable) {\n return guid();\n } else {\n return '';\n }\n }\n renderDebug(enable) {\n this.renderEnable = enable;\n }\n renderStart(id) {\n if (!this.renderEnable || !this.enable) {\n return;\n }\n const cacheRenderInfo = this.renderMap.get(id) || {};\n this.renderMap.set(id, _objectSpread(_objectSpread({}, cacheRenderInfo), {}, {\n renderUid: id,\n renderStart: Date.now()\n }));\n }\n renderEnd(id) {\n if (!this.renderEnable || !this.enable) {\n return;\n }\n const cacheRenderInfo = this.renderMap.get(id);\n if (cacheRenderInfo) {\n const renderStart = cacheRenderInfo.renderStart;\n const renderEnd = Date.now();\n this.emit('renderEnd', _objectSpread(_objectSpread({}, cacheRenderInfo), {}, {\n renderEnd,\n renderDuration: renderEnd - renderStart\n }));\n this.renderMap.delete(id);\n }\n }\n destroy() {\n this.cacheLogs = null;\n this.renderMap.clear();\n }\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport EventEmitter from 'eventemitter3';\nimport Hammer from 'hammerjs';\nimport { InteractionEvent } from \"./IInteractionService\";\nconst DragEventMap = {\n panstart: 'dragstart',\n panmove: 'dragging',\n panend: 'dragend',\n pancancel: 'dragcancel'\n};\n/**\n * 由于目前 L7 与地图结合的方案为双 canvas 而非共享 WebGL Context,事件监听注册在地图底图上。\n * 除此之外,后续如果支持非地图场景,事件监听就需要注册在 L7 canvas 上。\n */\nexport default class InteractionService extends EventEmitter {\n get mapService() {\n return this.container.mapService;\n }\n constructor(container) {\n super();\n _defineProperty(this, \"indragging\", false);\n // @ts-ignore\n // private hammertime: HammerManager;\n _defineProperty(this, \"hammertime\", void 0);\n _defineProperty(this, \"lastClickTime\", 0);\n _defineProperty(this, \"lastClickXY\", [-1, -1]);\n _defineProperty(this, \"clickTimer\", void 0);\n _defineProperty(this, \"$containter\", void 0);\n _defineProperty(this, \"onDrag\", target => {\n const interactionTarget = this.interactionEvent(target);\n interactionTarget.type = DragEventMap[interactionTarget.type];\n interactionTarget.type === 'dragging' ? this.indragging = true : this.indragging = false;\n this.emit(InteractionEvent.Drag, interactionTarget);\n });\n _defineProperty(this, \"onHammer\", target => {\n target.srcEvent.stopPropagation();\n const interactionTarget = this.interactionEvent(target);\n this.emit(InteractionEvent.Hover, interactionTarget);\n });\n _defineProperty(this, \"onTouch\", target => {\n const touch = target.touches[0];\n // @ts-ignore\n this.onHover({\n clientX: touch.clientX,\n clientY: touch.clientY,\n type: 'touchstart'\n });\n });\n _defineProperty(this, \"onTouchEnd\", target => {\n if (target.changedTouches.length > 0) {\n const touch = target.changedTouches[0];\n // @ts-ignore\n this.onHover({\n clientX: touch.clientX,\n clientY: touch.clientY,\n type: 'touchend'\n });\n }\n });\n // touch move == drag map 目前会被拦截\n _defineProperty(this, \"onTouchMove\", target => {\n const touch = target.changedTouches[0];\n // @ts-ignore\n this.onHover({\n clientX: touch.clientX,\n clientY: touch.clientY,\n type: 'touchmove'\n });\n });\n _defineProperty(this, \"onHover\", event => {\n const {\n clientX,\n clientY\n } = event;\n let x = clientX;\n let y = clientY;\n const type = event.type;\n const $containter = this.mapService.getMapContainer();\n if ($containter) {\n const {\n top,\n left\n } = $containter.getBoundingClientRect();\n x = x - left - $containter.clientLeft;\n y = y - top - $containter.clientTop;\n }\n const lngLat = this.mapService.containerToLngLat([x, y]);\n if (type === 'click') {\n this.isDoubleTap(x, y, lngLat);\n return;\n }\n if (type === 'touch') {\n this.isDoubleTap(x, y, lngLat);\n return;\n }\n if (type !== 'click' && type !== 'dblclick') {\n this.emit(InteractionEvent.Hover, {\n x,\n y,\n lngLat,\n type,\n target: event\n });\n }\n });\n this.container = container;\n }\n init() {\n // 注册事件在地图底图上\n this.addEventListenerOnMap();\n this.$containter = this.mapService.getMapContainer();\n }\n destroy() {\n if (this.hammertime) {\n this.hammertime.destroy();\n }\n this.removeEventListenerOnMap();\n this.off(InteractionEvent.Hover);\n }\n triggerHover({\n x,\n y\n }) {\n this.emit(InteractionEvent.Hover, {\n x,\n y\n });\n }\n triggerSelect(id) {\n this.emit(InteractionEvent.Select, {\n featureId: id\n });\n }\n triggerActive(id) {\n this.emit(InteractionEvent.Active, {\n featureId: id\n });\n }\n addEventListenerOnMap() {\n const $containter = this.mapService.getMapContainer();\n if ($containter) {\n const hammertime = new Hammer.Manager($containter);\n // $containter.addEventListener('mousemove', this.onHover);\n // $containter.addEventListener('click', this.onHover);\n hammertime.add(new Hammer.Tap({\n event: 'dblclick',\n taps: 2\n }));\n hammertime.add(new Hammer.Tap({\n event: 'click'\n }));\n hammertime.add(new Hammer.Pan({\n threshold: 0,\n pointers: 0\n }));\n hammertime.add(new Hammer.Press({}));\n // hammertime.get('pan').set({ direction: Hammer.DIRECTION_ALL });\n // hammertime.get('pinch').set({ enable: true });\n hammertime.on('dblclick click', this.onHammer);\n hammertime.on('panstart panmove panend pancancel', this.onDrag);\n $containter.addEventListener('touchstart', this.onTouch);\n $containter.addEventListener('touchend', this.onTouchEnd);\n $containter.addEventListener('mousemove', this.onHover);\n $containter.addEventListener('touchmove', this.onTouchMove);\n // $containter.addEventListener('click', this.onHover);\n $containter.addEventListener('mousedown', this.onHover, true);\n $containter.addEventListener('mouseup', this.onHover);\n $containter.addEventListener('contextmenu', this.onHover);\n this.hammertime = hammertime;\n }\n\n // Tip: 根据场景注册事件到 L7 canvas 上\n }\n removeEventListenerOnMap() {\n const $containter = this.mapService.getMapContainer();\n if ($containter) {\n $containter.removeEventListener('mousemove', this.onHover);\n this.hammertime.off('dblclick click', this.onHammer);\n this.hammertime.off('panstart panmove panend pancancel', this.onDrag);\n $containter.removeEventListener('touchstart', this.onTouch);\n $containter.removeEventListener('touchend', this.onTouchEnd);\n $containter.removeEventListener('mousedown', this.onHover);\n $containter.removeEventListener('mouseup', this.onHover);\n // $containter.removeEventListener('dblclick', this.onHover);\n $containter.removeEventListener('contextmenu', this.onHover);\n }\n }\n interactionEvent(target) {\n const {\n type,\n pointerType\n } = target;\n let clientX;\n let clientY;\n if (pointerType === 'touch') {\n clientY = Math.floor(target.pointers[0].clientY);\n clientX = Math.floor(target.pointers[0].clientX);\n } else {\n clientY = Math.floor(target.srcEvent.y);\n clientX = Math.floor(target.srcEvent.x);\n }\n const $containter = this.mapService.getMapContainer();\n if ($containter) {\n const {\n top,\n left\n } = $containter.getBoundingClientRect();\n clientX -= left;\n clientY -= top;\n }\n const lngLat = this.mapService.containerToLngLat([clientX, clientY]);\n return {\n x: clientX,\n y: clientY,\n lngLat,\n type,\n target: target.srcEvent\n };\n }\n isDoubleTap(x, y, lngLat) {\n const nowTime = new Date().getTime();\n let type = 'click';\n if (nowTime - this.lastClickTime < 400 && Math.abs(this.lastClickXY[0] - x) < 10 && Math.abs(this.lastClickXY[1] - y) < 10) {\n this.lastClickTime = 0;\n this.lastClickXY = [-1, -1];\n if (this.clickTimer) {\n clearTimeout(this.clickTimer);\n }\n type = 'dblclick';\n this.emit(InteractionEvent.Hover, {\n x,\n y,\n lngLat,\n type\n });\n } else {\n this.lastClickTime = nowTime;\n this.lastClickXY = [x, y];\n // @ts-ignore\n this.clickTimer = setTimeout(() => {\n type = 'click';\n this.emit(InteractionEvent.Hover, {\n x,\n y,\n lngLat,\n type\n });\n }, 400);\n }\n }\n}","let containerCounter = 0;\nexport function createRendererContainer(domId) {\n let $wrapper = domId;\n if (typeof domId === 'string') {\n $wrapper = document.getElementById(domId);\n }\n if ($wrapper) {\n const $container = document.createElement('div');\n $container.style.cssText += `\n position: absolute;\n z-index:2;\n height: 100%;\n width: 100%;\n pointer-events: none;\n `;\n $container.id = `l7-scene-${containerCounter++}`;\n $container.classList.add('l7-scene');\n $wrapper.appendChild($container);\n return $container;\n }\n return null;\n}\n\n/**\n * 检测触发事件是否是在 marker/popup 上发生,若是则会发生冲突(发生冲突时 marker/popup 事件优先)\n * @param layerEvent\n * @returns\n */\nexport function isEventCrash(layerEvent) {\n var _layerEvent$target;\n let notCrash = true;\n // 获取图层鼠标事件中对应点击的 DOM 元素\n if ((layerEvent === null || layerEvent === void 0 || (_layerEvent$target = layerEvent.target) === null || _layerEvent$target === void 0 ? void 0 : _layerEvent$target.target) instanceof HTMLElement) {\n var _layerEvent$target2;\n let currentElement = layerEvent === null || layerEvent === void 0 || (_layerEvent$target2 = layerEvent.target) === null || _layerEvent$target2 === void 0 ? void 0 : _layerEvent$target2.target;\n while (currentElement) {\n var _currentElement;\n const classList = Array.from(currentElement.classList);\n if (classList.includes('l7-marker') || classList.includes('l7-popup')) {\n notCrash = false;\n break;\n }\n currentElement = (_currentElement = currentElement) === null || _currentElement === void 0 ? void 0 : _currentElement.parentElement;\n }\n }\n return notCrash;\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { decodePickingColor, DOM } from '@antv/l7-utils';\nimport { isEventCrash } from \"../../utils/dom\";\nimport { InteractionEvent } from \"../interaction/IInteractionService\";\nimport { TextureUsage } from \"../renderer/ITexture2D\";\nexport default class PickingService {\n constructor(container) {\n var _this = this;\n _defineProperty(this, \"pickedColors\", void 0);\n _defineProperty(this, \"pickedTileLayers\", []);\n _defineProperty(this, \"pickingFBO\", void 0);\n _defineProperty(this, \"width\", 0);\n _defineProperty(this, \"height\", 0);\n _defineProperty(this, \"alreadyInPicking\", false);\n _defineProperty(this, \"pickBufferScale\", 1.0);\n _defineProperty(this, \"pickFromPickingFBO\", /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (layer, {\n x,\n y,\n lngLat,\n type,\n target\n }) {\n var _pickedColors;\n let isPicked = false;\n const {\n readPixels,\n readPixelsAsync,\n getViewportSize,\n queryVerdorInfo\n } = _this.rendererService;\n const {\n width,\n height\n } = getViewportSize();\n const {\n enableHighlight,\n enableSelect\n } = layer.getLayerConfig();\n const xInDevicePixel = x * DOM.DPR;\n const yInDevicePixel = y * DOM.DPR;\n if (xInDevicePixel > width - 1 * DOM.DPR || xInDevicePixel < 0 || yInDevicePixel > height - 1 * DOM.DPR || yInDevicePixel < 0) {\n return false;\n }\n let pickedColors;\n\n // readPixelsAsync 比 readPixels 慢,会造成拾取事件冒泡延迟,优先使用 readPixelsAsync,WebGPU 只支持 readPixelsAsync API\n const isWebGPU = queryVerdorInfo() === 'WebGPU';\n if (isWebGPU) {\n pickedColors = yield readPixelsAsync({\n x: Math.floor(xInDevicePixel / _this.pickBufferScale),\n // 视口坐标系原点在左上,而 WebGL 在左下,需要翻转 Y 轴\n y: Math.floor((height - (y + 1) * DOM.DPR) / _this.pickBufferScale),\n width: 1,\n height: 1,\n data: new Uint8Array(1 * 1 * 4),\n framebuffer: _this.pickingFBO\n });\n } else {\n pickedColors = readPixels({\n x: Math.floor(xInDevicePixel / _this.pickBufferScale),\n // 视口坐标系原点在左上,而 WebGL 在左下,需要翻转 Y 轴\n y: Math.floor((height - (y + 1) * DOM.DPR) / _this.pickBufferScale),\n width: 1,\n height: 1,\n data: new Uint8Array(1 * 1 * 4),\n framebuffer: _this.pickingFBO\n });\n }\n _this.pickedColors = pickedColors;\n if (pickedColors[0] !== 0 || pickedColors[1] !== 0 || pickedColors[2] !== 0) {\n const pickedFeatureIdx = decodePickingColor(pickedColors);\n // 瓦片数据获取性能问题需要优化\n const rawFeature = layer.layerPickService.getFeatureById(pickedFeatureIdx);\n if (pickedFeatureIdx !== layer.getCurrentPickId() && type === 'mousemove') {\n type = 'mouseenter';\n }\n const layerTarget = {\n x,\n y,\n type,\n lngLat,\n featureId: pickedFeatureIdx,\n feature: rawFeature,\n target\n };\n if (!rawFeature) {\n // this.logger.error(\n // '未找到颜色编码解码后的原始 feature,请检查 fragment shader 中末尾是否添加了 `gl_FragColor = filterColor(gl_FragColor);`',\n // );\n } else {\n // trigger onHover/Click callback on layer\n isPicked = true;\n layer.setCurrentPickId(pickedFeatureIdx);\n _this.triggerHoverOnLayer(layer, layerTarget); // 触发拾取事件\n }\n } else {\n // 未选中\n const layerTarget = {\n x,\n y,\n lngLat,\n type: layer.getCurrentPickId() !== null && type === 'mousemove' ? 'mouseout' : 'un' + type,\n featureId: null,\n target,\n feature: null\n };\n _this.triggerHoverOnLayer(layer, _objectSpread(_objectSpread({}, layerTarget), {}, {\n type: 'unpick'\n }));\n _this.triggerHoverOnLayer(layer, layerTarget);\n layer.setCurrentPickId(null);\n }\n if (enableHighlight) {\n layer.layerPickService.highlightPickedFeature(pickedColors);\n }\n if (enableSelect && type === 'click' && ((_pickedColors = pickedColors) === null || _pickedColors === void 0 ? void 0 : _pickedColors.toString()) !== [0, 0, 0, 0].toString()) {\n const selectedId = decodePickingColor(pickedColors);\n if (layer.getCurrentSelectedId() === null || selectedId !== layer.getCurrentSelectedId()) {\n layer.layerPickService.selectFeature(pickedColors);\n layer.setCurrentSelectedId(selectedId);\n } else {\n layer.layerPickService.selectFeature(new Uint8Array([0, 0, 0, 0])); // toggle select\n layer.setCurrentSelectedId(null);\n }\n }\n return isPicked;\n });\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }());\n this.container = container;\n }\n get mapService() {\n return this.container.mapService;\n }\n get rendererService() {\n return this.container.rendererService;\n }\n get configService() {\n return this.container.globalConfigService;\n }\n get interactionService() {\n return this.container.interactionService;\n }\n get layerService() {\n return this.container.layerService;\n }\n init(id) {\n const {\n createTexture2D,\n createFramebuffer,\n getViewportSize\n } = this.rendererService;\n let {\n width,\n height\n } = getViewportSize();\n this.pickBufferScale = this.configService.getSceneConfig(id).pickBufferScale || 1;\n width = Math.round(width / this.pickBufferScale);\n height = Math.round(height / this.pickBufferScale);\n // 创建 picking framebuffer,后续实时 resize\n const pickingColorTexture = createTexture2D({\n width,\n height,\n // wrapS: gl.CLAMP_TO_EDGE,\n // wrapT: gl.CLAMP_TO_EDGE,\n usage: TextureUsage.RENDER_TARGET,\n label: 'Picking Texture'\n });\n this.pickingFBO = createFramebuffer({\n color: pickingColorTexture,\n depth: true,\n width,\n height\n });\n\n // 监听 hover 事件\n this.interactionService.on(InteractionEvent.Hover, this.pickingAllLayer.bind(this));\n }\n boxPickLayer(layer, box, cb) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n const {\n useFramebufferAsync,\n clear\n } = _this2.rendererService;\n _this2.resizePickingFBO();\n layer.hooks.beforePickingEncode.call();\n yield useFramebufferAsync(_this2.pickingFBO, /*#__PURE__*/_asyncToGenerator(function* () {\n clear({\n framebuffer: _this2.pickingFBO,\n color: [0, 0, 0, 0],\n stencil: 0,\n depth: 1\n });\n layer.renderModels({\n ispick: true\n });\n }));\n layer.hooks.afterPickingEncode.call();\n const features = yield _this2.pickBox(layer, box);\n cb(features);\n })();\n }\n pickBox(layer, box) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n const [xMin, yMin, xMax, yMax] = box.map(v => {\n const tmpV = v < 0 ? 0 : v;\n return Math.floor(tmpV * DOM.DPR / _this3.pickBufferScale);\n });\n const {\n readPixelsAsync,\n getViewportSize\n } = _this3.rendererService;\n const {\n width,\n height\n } = getViewportSize();\n if (xMin > (width - 1) * DOM.DPR / _this3.pickBufferScale || xMax < 0 || yMin > (height - 1) * DOM.DPR / _this3.pickBufferScale || yMax < 0) {\n return [];\n }\n const w = Math.min(width / _this3.pickBufferScale, xMax) - xMin;\n const h = Math.min(height / _this3.pickBufferScale, yMax) - yMin;\n const pickedColors = yield readPixelsAsync({\n x: xMin,\n // 视口坐标系原点在左上,而 WebGL 在左下,需要翻转 Y 轴\n y: Math.floor(height / _this3.pickBufferScale - (yMax + 1)),\n width: w,\n height: h,\n data: new Uint8Array(w * h * 4),\n framebuffer: _this3.pickingFBO\n });\n const features = [];\n const featuresIdMap = {};\n for (let i = 0; i < pickedColors.length / 4; i = i + 1) {\n const color = pickedColors.slice(i * 4, i * 4 + 4);\n const pickedFeatureIdx = decodePickingColor(color);\n if (pickedFeatureIdx !== -1 && !featuresIdMap[pickedFeatureIdx]) {\n const rawFeature = layer.layerPickService.getFeatureById(pickedFeatureIdx);\n features.push(_objectSpread(_objectSpread({}, rawFeature), {}, {\n pickedFeatureIdx\n }));\n featuresIdMap[pickedFeatureIdx] = true;\n }\n }\n return features;\n })();\n }\n\n // 动态设置鼠标光标\n handleCursor(layer, type) {\n const {\n cursor = '',\n cursorEnabled\n } = layer.getLayerConfig();\n if (cursorEnabled) {\n const mapType = this.mapService.getType();\n const domContainer = mapType === 'amap' ? this.mapService.getMapContainer() : this.mapService.getMarkerContainer();\n // const domContainer = this.mapService.getMarkerContainer();\n // const domContainer = this.mapService.getMapContainer();\n const defaultCursor = domContainer === null || domContainer === void 0 ? void 0 : domContainer.style.getPropertyValue('cursor');\n if (type === 'unmousemove' && defaultCursor !== '') {\n domContainer === null || domContainer === void 0 || domContainer.style.setProperty('cursor', '');\n } else if (type === 'mousemove') {\n domContainer === null || domContainer === void 0 || domContainer.style.setProperty('cursor', cursor);\n }\n }\n // const domContainer = this.mapService.getMapContainer()\n // domContainer?.style.setProperty('cursor', 'move');\n }\n destroy() {\n this.pickingFBO.destroy();\n // this.pickingFBO = null; 清除对 webgl 实例的引用\n // @ts-ignore\n this.pickingFBO = null;\n }\n pickingAllLayer(target) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n // 判断是否进行拾取操作\n if (!_this4.layerService.needPick(target.type) || !_this4.isPickingAllLayer()) {\n return;\n }\n _this4.alreadyInPicking = true;\n yield _this4.pickingLayers(target);\n _this4.layerService.renderLayers();\n _this4.alreadyInPicking = false;\n })();\n }\n isPickingAllLayer() {\n // this.alreadyInPicking 避免多次重复拾取\n\n if (this.alreadyInPicking) {\n return false;\n }\n // this.layerService.alreadyInRendering 一个渲染序列中只进行一次拾取操作\n if (this.layerService.alreadyInRendering) {\n return false;\n }\n // this.interactionService.dragging amap2 在点击操作的时候同时会触发 dragging 的情况(避免舍去)\n if (this.interactionService.indragging) {\n return false;\n }\n\n // 判断当前进行 shader pick 拾取判断\n if (!this.layerService.getShaderPickStat()) {\n return false;\n }\n\n // 进行拾取\n return true;\n }\n resizePickingFBO() {\n const {\n getViewportSize\n } = this.rendererService;\n const {\n width,\n height\n } = getViewportSize();\n if (this.width !== width || this.height !== height) {\n this.pickingFBO.resize({\n width: Math.round(width / this.pickBufferScale),\n height: Math.round(height / this.pickBufferScale)\n });\n this.width = width;\n this.height = height;\n }\n }\n pickingLayers(target) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n const {\n clear,\n useFramebufferAsync\n } = _this5.rendererService;\n _this5.resizePickingFBO();\n const layers = _this5.layerService.getRenderList();\n for (const layer of layers.filter(layer => layer.needPick(target.type)).reverse()) {\n yield useFramebufferAsync(_this5.pickingFBO, /*#__PURE__*/_asyncToGenerator(function* () {\n clear({\n framebuffer: _this5.pickingFBO,\n color: [0, 0, 0, 0],\n stencil: 0,\n depth: 1\n });\n // 渲染需要拾取的图层\n layer.layerPickService.pickRender(target);\n }));\n const isPicked = yield _this5.pickFromPickingFBO(layer, target);\n _this5.layerService.pickedLayerId = isPicked ? +layer.id : -1;\n if (isPicked && !layer.getLayerConfig().enablePropagation) {\n break;\n }\n }\n })();\n }\n triggerHoverOnLayer(layer, target) {\n // layer.emit(target.type, target);\n // 判断是否发生事件冲突\n if (isEventCrash(target)) {\n // Tip: 允许用户动态设置鼠标光标\n this.handleCursor(layer, target.type);\n layer.emit(target.type, target);\n }\n }\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n// https://github.com/mrdoob/three.js/blob/master/src/core/Clock.js\nexport default class Clock {\n constructor(autoStart = true) {\n _defineProperty(this, \"autoStart\", void 0);\n _defineProperty(this, \"startTime\", 0);\n _defineProperty(this, \"oldTime\", 0);\n _defineProperty(this, \"running\", false);\n _defineProperty(this, \"elapsedTime\", 0);\n this.autoStart = autoStart;\n }\n start() {\n this.startTime = (typeof performance === 'undefined' ? Date : performance).now();\n this.oldTime = this.startTime;\n this.elapsedTime = 0;\n this.running = true;\n }\n stop() {\n this.getElapsedTime();\n this.running = false;\n this.autoStart = false;\n }\n getElapsedTime() {\n this.getDelta();\n return this.elapsedTime;\n }\n getDelta() {\n let diff = 0;\n if (this.autoStart && !this.running) {\n this.start();\n return 0;\n }\n if (this.running) {\n const newTime = (typeof performance === 'undefined' ? Date : performance).now();\n diff = (newTime - this.oldTime) / 1000;\n this.oldTime = newTime;\n this.elapsedTime += diff;\n }\n return diff;\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { lodashUtil, rgb2arr } from '@antv/l7-utils';\nimport { EventEmitter } from 'eventemitter3';\nimport Clock from \"../../utils/clock\";\nimport { MaskOperation, StencilType } from \"./ILayerService\";\nconst {\n throttle\n} = lodashUtil;\nexport default class LayerService extends EventEmitter {\n get renderService() {\n return this.container.rendererService;\n }\n get mapService() {\n return this.container.mapService;\n }\n get debugService() {\n return this.container.debugService;\n }\n constructor(container) {\n super();\n // pickedLayerId 参数用于指定当前存在被选中的 layer\n _defineProperty(this, \"pickedLayerId\", -1);\n _defineProperty(this, \"clock\", new Clock());\n _defineProperty(this, \"alreadyInRendering\", false);\n _defineProperty(this, \"layers\", []);\n _defineProperty(this, \"layerList\", []);\n _defineProperty(this, \"layerRenderID\", void 0);\n _defineProperty(this, \"sceneInited\", false);\n _defineProperty(this, \"animateInstanceCount\", 0);\n // TODO: 是否开启 shader 中的颜色拾取计算\n _defineProperty(this, \"shaderPicking\", true);\n _defineProperty(this, \"enableRender\", true);\n _defineProperty(this, \"reRender\", throttle(() => {\n this.renderLayers();\n }, 32));\n _defineProperty(this, \"throttleRenderLayers\", throttle(() => {\n this.renderLayers();\n }, 16));\n this.container = container;\n }\n needPick(type) {\n this.updateLayerRenderList();\n return this.layerList.some(layer => layer.needPick(type));\n }\n add(layer) {\n this.layers.push(layer);\n if (this.sceneInited) {\n layer.init().then(() => {\n this.renderLayers();\n });\n }\n }\n addMask(mask) {\n if (this.sceneInited) {\n mask.init().then(() => {\n this.renderLayers();\n });\n }\n }\n initLayers() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.sceneInited = true;\n _this.layers.forEach( /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (layer) {\n if (!layer.startInit) {\n yield layer.init();\n _this.updateLayerRenderList();\n }\n });\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n })();\n }\n getSceneInited() {\n return this.sceneInited;\n }\n getRenderList() {\n return this.layerList;\n }\n getLayers() {\n return this.layers;\n }\n getLayer(id) {\n return this.layers.find(layer => layer.id === id);\n }\n getLayerByName(name) {\n return this.layers.find(layer => layer.name === name);\n }\n remove(layer, parentLayer) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n if (parentLayer) {\n if (!parentLayer.layerChildren) {\n parentLayer.layerChildren = [];\n }\n const index = parentLayer.layerChildren.findIndex(item => item.id === layer.id);\n if (index > -1) {\n parentLayer.layerChildren.splice(index, 1);\n }\n } else {\n const index = _this2.layers.findIndex(item => item.id === layer.id);\n if (index > -1) {\n _this2.layers.splice(index, 1);\n }\n }\n layer.destroy();\n _this2.reRender();\n _this2.emit('layerChange', _this2.layers);\n })();\n }\n removeAllLayers() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n _this3.destroy();\n _this3.reRender();\n })();\n }\n setEnableRender(flag) {\n this.enableRender = flag;\n }\n renderLayers() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n if (_this4.alreadyInRendering || !_this4.enableRender) {\n return;\n }\n _this4.updateLayerRenderList();\n const renderUid = _this4.debugService.generateRenderUid();\n _this4.debugService.renderStart(renderUid);\n _this4.alreadyInRendering = true;\n _this4.clear();\n for (const layer of _this4.layerList) {\n layer.prerender();\n }\n\n // The main render pass, all layers in a whole.\n _this4.renderService.beginFrame();\n for (const layer of _this4.layerList) {\n const {\n enableMask\n } = layer.getLayerConfig();\n if (layer.masks.filter(m => m.inited).length > 0 && enableMask) {\n // 清除上一次的模版缓存\n _this4.renderMask(layer.masks);\n }\n if (layer.getLayerConfig().enableMultiPassRenderer) {\n // multiPassRender 不是同步渲染完成的\n yield layer.renderMultiPass();\n } else {\n layer.render();\n }\n }\n _this4.renderService.endFrame();\n _this4.debugService.renderEnd(renderUid);\n _this4.alreadyInRendering = false;\n })();\n }\n renderMask(masks) {\n let maskIndex = 0;\n this.renderService.clear({\n stencil: 0,\n depth: 1,\n framebuffer: null\n });\n const stencilType = masks.length > 1 ? StencilType.MULTIPLE : StencilType.SINGLE;\n for (const layer of masks) {\n // 清除上一次的模版缓存\n layer.render({\n isStencil: true,\n stencilType,\n stencilIndex: maskIndex++\n });\n }\n }\n beforeRenderData(layer) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n const flag = yield layer.hooks.beforeRenderData.promise();\n if (flag) {\n _this5.renderLayers();\n }\n })();\n }\n renderTileLayerMask(layer) {\n let maskindex = 0;\n const {\n enableMask = true\n } = layer.getLayerConfig();\n let maskCount = layer.tileMask ? 1 : 0; // 瓦片裁剪 线图层或者面图层\n const masklayers = layer.masks.filter(m => m.inited);\n maskCount = maskCount + (enableMask ? masklayers.length : 1);\n const stencilType = maskCount > 1 ? StencilType.MULTIPLE : StencilType.SINGLE;\n // 兼容MaskLayer MaskLayer的掩模不能clear\n if (layer.tileMask || masklayers.length && enableMask) {\n this.renderService.clear({\n stencil: 0,\n depth: 1,\n framebuffer: null\n });\n }\n if (masklayers.length && enableMask) {\n for (const mask of masklayers) {\n mask.render({\n isStencil: true,\n stencilType,\n stencilIndex: maskindex++\n });\n }\n }\n // // 瓦片裁剪\n if (layer.tileMask) {\n layer.tileMask.render({\n isStencil: true,\n stencilType,\n stencilIndex: maskindex++,\n stencilOperation: MaskOperation.OR\n });\n }\n }\n // 瓦片图层渲染\n renderTileLayer(layer) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n _this6.renderTileLayerMask(layer);\n if (layer.getLayerConfig().enableMultiPassRenderer) {\n // multiPassRender 不是同步渲染完成的\n yield layer.renderMultiPass();\n } else {\n yield layer.render();\n }\n })();\n }\n updateLayerRenderList() {\n // Tip: 每次更新都是从 layers 重新构建\n this.layerList = [];\n this.layers.filter(layer => layer.inited).filter(layer => layer.isVisible()).sort((pre, next) => {\n // 根据 zIndex 对渲染顺序进行排序\n return pre.zIndex - next.zIndex;\n }).forEach(layer => {\n this.layerList.push(layer);\n });\n }\n destroy() {\n this.layers.forEach(layer => {\n layer.destroy();\n });\n this.layers = [];\n this.layerList = [];\n this.emit('layerChange', this.layers);\n }\n startAnimate() {\n if (this.animateInstanceCount++ === 0) {\n this.clock.start();\n this.runRender();\n }\n }\n stopAnimate() {\n if (--this.animateInstanceCount === 0) {\n this.stopRender();\n this.clock.stop();\n }\n }\n getOESTextureFloat() {\n return this.renderService.extensionObject.OES_texture_float;\n }\n\n // 控制着色器颜色拾取计算\n enableShaderPick() {\n this.shaderPicking = true;\n }\n disableShaderPick() {\n this.shaderPicking = false;\n }\n getShaderPickStat() {\n return this.shaderPicking;\n }\n clear() {\n const color = rgb2arr(this.mapService.bgColor);\n this.renderService.clear({\n color,\n depth: 1,\n stencil: 0,\n framebuffer: null\n });\n }\n runRender() {\n this.renderLayers();\n this.layerRenderID = window.requestAnimationFrame(this.runRender.bind(this));\n }\n stopRender() {\n window.cancelAnimationFrame(this.layerRenderID);\n }\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { lodashUtil } from '@antv/l7-utils';\nconst {\n isNil\n} = lodashUtil;\nexport default class StyleAttribute {\n constructor(options) {\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"type\", void 0);\n _defineProperty(this, \"scale\", void 0);\n _defineProperty(this, \"descriptor\", void 0);\n _defineProperty(this, \"featureBufferLayout\", []);\n _defineProperty(this, \"needRescale\", false);\n _defineProperty(this, \"needRemapping\", false);\n _defineProperty(this, \"needRegenerateVertices\", false);\n _defineProperty(this, \"featureRange\", {\n startIndex: 0,\n endIndex: Infinity\n });\n _defineProperty(this, \"vertexAttribute\", void 0);\n _defineProperty(this, \"defaultCallback\", params => {\n // 没有 params 的情况,是指没有指定 fields,直接返回配置的 values 常量\n if (params.length === 0) {\n var _this$scale;\n return ((_this$scale = this.scale) === null || _this$scale === void 0 ? void 0 : _this$scale.defaultValues) || [];\n }\n return params.map((param, idx) => {\n var _this$scale2;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const scaleFunc = (_this$scale2 = this.scale) === null || _this$scale2 === void 0 ? void 0 : _this$scale2.scalers[idx].func;\n // @ts-ignore // TODO 支持双变量映射\n const value = scaleFunc(param);\n return value;\n });\n });\n this.setProps(options);\n }\n setProps(options) {\n Object.assign(this, options);\n }\n mapping(params) {\n var _this$scale3;\n /**\n * 当用户设置的 callback 返回 null 时, 应该返回默认 callback 中的值\n */\n if ((_this$scale3 = this.scale) !== null && _this$scale3 !== void 0 && _this$scale3.callback) {\n var _this$scale4;\n // 使用用户返回的值处理\n const ret = (_this$scale4 = this.scale) === null || _this$scale4 === void 0 ? void 0 : _this$scale4.callback(...params);\n if (!isNil(ret)) {\n return [ret];\n }\n }\n\n // 没有 callback 或者用户 callback 返回值为空,则使用默认的逻辑处理\n return this.defaultCallback(params);\n }\n resetDescriptor() {\n if (this.descriptor) {\n this.descriptor.buffer.data = [];\n }\n }\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nconst _excluded = [\"buffer\", \"update\", \"name\"],\n _excluded2 = [\"buffer\", \"update\", \"name\"];\nimport { gl } from \"../renderer/gl\";\nimport StyleAttribute from \"./StyleAttribute\";\nconst bytesPerElementMap = {\n [gl.FLOAT]: 4,\n [gl.UNSIGNED_BYTE]: 1,\n [gl.UNSIGNED_SHORT]: 2\n};\n\n/**\n * 每个 Layer 都拥有一个,用于管理样式属性的注册和更新\n */\nexport default class StyleAttributeService {\n constructor(rendererService) {\n _defineProperty(this, \"attributesAndIndices\", void 0);\n _defineProperty(this, \"attributes\", []);\n _defineProperty(this, \"triangulation\", void 0);\n _defineProperty(this, \"featureLayout\", {\n sizePerElement: 0,\n elements: []\n });\n this.rendererService = rendererService;\n }\n registerStyleAttribute(options) {\n let attributeToUpdate = this.getLayerStyleAttribute(options.name || '');\n if (attributeToUpdate) {\n attributeToUpdate.setProps(options);\n } else {\n attributeToUpdate = new StyleAttribute(options);\n this.attributes.push(attributeToUpdate);\n }\n return attributeToUpdate;\n }\n unRegisterStyleAttribute(name) {\n const attributeIndex = this.attributes.findIndex(attribute => attribute.name === name);\n if (attributeIndex > -1) {\n this.attributes.splice(attributeIndex, 1);\n }\n }\n updateScaleAttribute(scaleOption) {\n this.attributes.forEach(attr => {\n var _attr$scale;\n const name = attr.name;\n const field = (_attr$scale = attr.scale) === null || _attr$scale === void 0 ? void 0 : _attr$scale.field;\n if (scaleOption[name] || field && scaleOption[field]) {\n // 字段类型和映射类型\n attr.needRescale = true;\n attr.needRemapping = true;\n attr.needRegenerateVertices = true;\n }\n });\n }\n updateStyleAttribute(attributeName, options, updateOptions) {\n let attributeToUpdate = this.getLayerStyleAttribute(attributeName);\n if (!attributeToUpdate) {\n attributeToUpdate = this.registerStyleAttribute(_objectSpread(_objectSpread({}, options), {}, {\n name: attributeName\n }));\n }\n const {\n scale\n } = options;\n if (scale && attributeToUpdate) {\n // TODO: 需要比较新旧值确定是否需要 rescale\n // 需要重新 scale,肯定也需要重新进行数据映射\n attributeToUpdate.scale = scale;\n attributeToUpdate.needRescale = true;\n attributeToUpdate.needRemapping = true;\n attributeToUpdate.needRegenerateVertices = true;\n if (updateOptions && updateOptions.featureRange) {\n attributeToUpdate.featureRange = updateOptions.featureRange;\n }\n }\n }\n getLayerStyleAttributes() {\n return this.attributes;\n }\n getLayerStyleAttribute(attributeName) {\n return this.attributes.find(attribute => attribute.name === attributeName);\n }\n getLayerAttributeScale(name) {\n var _attribute$scale;\n const attribute = this.getLayerStyleAttribute(name);\n const scale = attribute === null || attribute === void 0 || (_attribute$scale = attribute.scale) === null || _attribute$scale === void 0 ? void 0 : _attribute$scale.scalers;\n if (scale && scale[0]) {\n return scale[0].func;\n }\n return null;\n }\n updateAttributeByFeatureRange(attributeName, features, startFeatureIdx = 0, endFeatureIdx, layer) {\n const attributeToUpdate = this.attributes.find(attribute => attribute.name === attributeName);\n if (attributeToUpdate && attributeToUpdate.descriptor) {\n const {\n descriptor\n } = attributeToUpdate;\n const {\n update,\n buffer,\n size = 0\n } = descriptor;\n const bytesPerElement = bytesPerElementMap[buffer.type || gl.FLOAT];\n if (update) {\n const {\n elements,\n sizePerElement\n } = this.featureLayout;\n // 截取待更新的 feature 范围\n const featuresToUpdate = elements.slice(startFeatureIdx, endFeatureIdx);\n // [n, n] 中断更新\n if (!featuresToUpdate.length) {\n return;\n }\n const {\n offset\n } = featuresToUpdate[0];\n // 以 byte 为单位计算 buffer 中的偏移\n const bufferOffsetInBytes = offset * size * bytesPerElement;\n const updatedBufferData = featuresToUpdate.map(({\n featureIdx,\n vertices,\n normals\n }, attributeIdx) => {\n const verticesNumForCurrentFeature = vertices.length / sizePerElement;\n const featureData = [];\n for (let vertexIdx = 0; vertexIdx < verticesNumForCurrentFeature; vertexIdx++) {\n const normal = normals ?\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n normals.slice(vertexIdx * 3, vertexIdx * 3 + 3) : [];\n featureData.push(...update(features[featureIdx], featureIdx, vertices.slice(vertexIdx * sizePerElement, vertexIdx * sizePerElement + sizePerElement), attributeIdx, normal));\n }\n return featureData;\n }).flat();\n\n // 更新底层 IAttribute 中包含的 IBuffer,使用 subdata\n attributeToUpdate.vertexAttribute.updateBuffer({\n data: updatedBufferData,\n offset: bufferOffsetInBytes\n });\n // size color 触发更新事件\n layer === null || layer === void 0 || layer.emit(`legend:${attributeName}`, layer.getLegend(attributeName));\n }\n }\n }\n createAttributesAndIndices(features, triangulation, styleOption, layer) {\n // 每次创建的初始化化 LayerOut\n this.featureLayout = {\n sizePerElement: 0,\n elements: []\n };\n if (triangulation) {\n this.triangulation = triangulation;\n }\n const descriptors = this.attributes.map(attr => {\n attr.resetDescriptor();\n return attr.descriptor;\n });\n let verticesNum = 0;\n let vecticesCount = 0; // 在不使用 element 的时候记录顶点、图层所有顶点的总数\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const indices = [];\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let size = 3;\n features.forEach((feature, featureIdx) => {\n // 逐 feature 进行三角化\n const {\n indices: indicesForCurrentFeature,\n vertices: verticesForCurrentFeature,\n normals: normalsForCurrentFeature,\n size: vertexSize,\n indexes,\n count\n } = this.triangulation(feature, styleOption);\n if (typeof count === 'number') {\n // 顶点数\n vecticesCount += count;\n }\n indicesForCurrentFeature.forEach(i => {\n indices.push(i + verticesNum);\n });\n size = vertexSize;\n const verticesNumForCurrentFeature = verticesForCurrentFeature.length / vertexSize;\n\n // 记录三角化结果,用于后续精确更新指定 feature\n this.featureLayout.sizePerElement = size;\n this.featureLayout.elements.push({\n featureIdx,\n vertices: verticesForCurrentFeature,\n normals: normalsForCurrentFeature,\n offset: verticesNum\n });\n verticesNum += verticesNumForCurrentFeature;\n // 根据 position 顶点生成其他顶点数据 // color/size/ui\n for (let vertexIdx = 0; vertexIdx < verticesNumForCurrentFeature; vertexIdx++) {\n const normal = (normalsForCurrentFeature === null || normalsForCurrentFeature === void 0 ? void 0 : normalsForCurrentFeature.slice(vertexIdx * 3, vertexIdx * 3 + 3)) || [];\n const vertice = verticesForCurrentFeature.slice(vertexIdx * vertexSize, vertexIdx * vertexSize + vertexSize);\n let vertexIndex = 0;\n if (indexes && indexes[vertexIdx] !== undefined) {\n vertexIndex = indexes[vertexIdx];\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n descriptors.forEach((descriptor, attributeIdx) => {\n if (descriptor && descriptor.update) {\n descriptor.buffer.data.push(...descriptor.update(feature, featureIdx, vertice, vertexIdx,\n // 当前顶点所在feature索引\n normal, vertexIndex\n // 传入顶点索引 vertexIdx\n ));\n } // end if\n }); // end for each\n } // end for\n }); // end features for Each\n const {\n createAttribute,\n createBuffer,\n createElements\n } = this.rendererService;\n const attributes = {};\n descriptors.forEach((descriptor, attributeIdx) => {\n if (descriptor) {\n // IAttribute 参数透传\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n buffer,\n update,\n name\n } = descriptor,\n rest = _objectWithoutProperties(descriptor, _excluded);\n const vertexAttribute = createAttribute(_objectSpread({\n // IBuffer 参数透传\n buffer: createBuffer(buffer)\n }, rest));\n attributes[descriptor.name || ''] = vertexAttribute;\n\n // 在 StyleAttribute 上保存对 VertexAttribute 的引用\n this.attributes[attributeIdx].vertexAttribute = vertexAttribute;\n }\n });\n const elements = createElements({\n data: indices,\n type: gl.UNSIGNED_INT,\n count: indices.length\n });\n this.attributesAndIndices = {\n attributes,\n elements,\n count: vecticesCount\n };\n Object.values(this.attributes).filter(attribute => attribute.scale).forEach(attribute => {\n const attributeName = attribute.name;\n // size color 触发更新事件\n layer === null || layer === void 0 || layer.emit(`legend:${attributeName}`, layer.getLegend(attributeName));\n });\n return this.attributesAndIndices;\n }\n createAttributes(features, triangulation) {\n // 每次创建的初始化化 LayerOut\n this.featureLayout = {\n sizePerElement: 0,\n elements: []\n };\n if (triangulation) {\n this.triangulation = triangulation;\n }\n const descriptors = this.attributes.map(attr => {\n attr.resetDescriptor();\n return attr.descriptor;\n });\n let verticesNum = 0;\n const indices = [];\n let size = 3;\n features.forEach((feature, featureIdx) => {\n // 逐 feature 进行三角化\n const {\n indices: indicesForCurrentFeature,\n vertices: verticesForCurrentFeature,\n normals: normalsForCurrentFeature,\n size: vertexSize,\n indexes\n } = this.triangulation(feature);\n indicesForCurrentFeature.forEach(i => {\n indices.push(i + verticesNum);\n });\n size = vertexSize;\n const verticesNumForCurrentFeature = verticesForCurrentFeature.length / vertexSize;\n\n // 记录三角化结果,用于后续精确更新指定 feature\n this.featureLayout.sizePerElement = size;\n this.featureLayout.elements.push({\n featureIdx,\n vertices: verticesForCurrentFeature,\n normals: normalsForCurrentFeature,\n offset: verticesNum\n });\n verticesNum += verticesNumForCurrentFeature;\n // 根据 position 顶点生成其他顶点数据\n for (let vertexIdx = 0; vertexIdx < verticesNumForCurrentFeature; vertexIdx++) {\n const normal = (normalsForCurrentFeature === null || normalsForCurrentFeature === void 0 ? void 0 : normalsForCurrentFeature.slice(vertexIdx * 3, vertexIdx * 3 + 3)) || [];\n const vertice = verticesForCurrentFeature.slice(vertexIdx * vertexSize, vertexIdx * vertexSize + vertexSize);\n let vertexIndex = 0;\n if (indexes && indexes[vertexIdx] !== undefined) {\n vertexIndex = indexes[vertexIdx];\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n descriptors.forEach((descriptor, attributeIdx) => {\n if (descriptor && descriptor.update) {\n descriptor.buffer.data.push(...descriptor.update(feature, featureIdx, vertice, vertexIdx,\n // 当前顶点所在feature索引\n normal, vertexIndex\n // 传入顶点索引 vertexIdx\n ));\n } // end if\n }); // end for each\n } // end for\n }); // end features for Each\n const {\n createAttribute,\n createBuffer\n } = this.rendererService;\n const attributes = {};\n descriptors.forEach((descriptor, attributeIdx) => {\n if (descriptor) {\n // IAttribute 参数透传\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n buffer,\n update,\n name\n } = descriptor,\n rest = _objectWithoutProperties(descriptor, _excluded2);\n const vertexAttribute = createAttribute(_objectSpread({\n // IBuffer 参数透传\n buffer: createBuffer(buffer)\n }, rest));\n attributes[descriptor.name || ''] = vertexAttribute;\n\n // 在 StyleAttribute 上保存对 VertexAttribute 的引用\n this.attributes[attributeIdx].vertexAttribute = vertexAttribute;\n }\n });\n return {\n attributes\n };\n }\n clearAllAttributes() {\n var _this$attributesAndIn;\n // 销毁关联的 vertex attribute buffer objects\n this.attributes.forEach(attribute => {\n if (attribute.vertexAttribute) {\n attribute.vertexAttribute.destroy();\n }\n });\n (_this$attributesAndIn = this.attributesAndIndices) === null || _this$attributesAndIn === void 0 || _this$attributesAndIn.elements.destroy();\n this.attributes = [];\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n// @ts-ignore\nimport { AsyncSeriesHook } from '@antv/async-hook';\nimport { DOM } from '@antv/l7-utils';\nimport elementResizeDetectorMaker from 'element-resize-detector';\nimport { EventEmitter } from 'eventemitter3';\nimport { createRendererContainer } from \"../../utils/dom\";\nimport { InteractionEvent } from \"../interaction/IInteractionService\";\n/**\n * will emit `loaded` `resize` `destroy` event panstart panmove panend\n */\nexport default class Scene extends EventEmitter {\n /**\n * 使用各种 Service\n */\n get iconService() {\n return this.container.iconService;\n }\n get fontService() {\n return this.container.fontService;\n }\n get controlService() {\n return this.container.controlService;\n }\n get configService() {\n return this.container.globalConfigService;\n }\n get map() {\n return this.container.mapService;\n }\n get coordinateSystemService() {\n return this.container.coordinateSystemService;\n }\n get rendererService() {\n return this.container.rendererService;\n }\n get layerService() {\n return this.container.layerService;\n }\n get debugService() {\n return this.container.debugService;\n }\n get cameraService() {\n return this.container.cameraService;\n }\n get interactionService() {\n return this.container.interactionService;\n }\n get pickingService() {\n return this.container.pickingService;\n }\n get shaderModuleService() {\n return this.container.shaderModuleService;\n }\n get markerService() {\n return this.container.markerService;\n }\n get popupService() {\n return this.container.popupService;\n }\n\n /**\n * 是否首次渲染\n */\n\n constructor(container) {\n super();\n // @see https://github.com/webpack/tapable#usage\n _defineProperty(this, \"destroyed\", false);\n _defineProperty(this, \"loaded\", false);\n _defineProperty(this, \"id\", void 0);\n _defineProperty(this, \"inited\", false);\n // TODO: 改成状态机\n _defineProperty(this, \"rendering\", false);\n /**\n * canvas 容器\n */\n _defineProperty(this, \"$container\", void 0);\n _defineProperty(this, \"canvas\", void 0);\n _defineProperty(this, \"markerContainer\", void 0);\n _defineProperty(this, \"resizeDetector\", void 0);\n _defineProperty(this, \"hooks\", void 0);\n _defineProperty(this, \"handleWindowResized\", () => {\n this.emit('resize');\n // @ts-check\n if (this.$container) {\n this.initContainer();\n // 触发 Map, canvas\n // DOM.triggerResize();\n this.coordinateSystemService.needRefresh = true;\n // repaint layers\n this.render();\n }\n });\n _defineProperty(this, \"handleMapCameraChanged\", viewport => {\n this.cameraService.update(viewport);\n this.render();\n });\n this.container = container;\n this.hooks = {\n /**\n * 初始化异步任务,可并行:\n * 1. initMap:初始化地图底图、相机\n * 2. initRenderer:初始化渲染引擎\n * 3. initWorker:初始化 Worker\n */\n init: new AsyncSeriesHook()\n };\n this.id = container.id;\n }\n init(sceneConfig) {\n var _this = this;\n // 设置场景配置项\n this.configService.setSceneConfig(this.id, sceneConfig);\n // 初始化 ShaderModule\n this.shaderModuleService.registerBuiltinModules();\n\n // 初始化资源管理 图片\n this.iconService.init();\n this.iconService.on('imageUpdate', () => this.render());\n // 字体资源\n this.fontService.init();\n /**\n * 初始化底图\n */\n this.hooks.init.tapPromise('initMap', /*#__PURE__*/_asyncToGenerator(function* () {\n _this.debugService.log('map.mapInitStart', {\n type: _this.map.version\n });\n // 等待首次相机同步\n yield new Promise(resolve => {\n _this.map.onCameraChanged(viewport => {\n _this.cameraService.init();\n _this.cameraService.update(viewport);\n resolve();\n });\n _this.map.init();\n });\n\n // 重新绑定非首次相机更新事件\n _this.map.onCameraChanged(_this.handleMapCameraChanged);\n _this.map.addMarkerContainer();\n // 初始化未加载的marker;\n _this.markerService.addMarkers();\n _this.markerService.addMarkerLayers();\n _this.popupService.initPopup();\n // 地图初始化之后 才能初始化 container 上的交互\n _this.interactionService.init();\n _this.interactionService.on(InteractionEvent.Drag, _this.addSceneEvent.bind(_this));\n }));\n\n /**\n * 初始化渲染引擎\n */\n this.hooks.init.tapPromise('initRenderer', /*#__PURE__*/_asyncToGenerator(function* () {\n var _this$map;\n // https://github.com/antvis/L7/issues/1459#issuecomment-1709481920 不确定我什么会报错先兼容一下\n const renderContainer = ((_this$map = _this.map) === null || _this$map === void 0 ? void 0 : _this$map.getOverlayContainer()) || undefined;\n if (renderContainer) {\n _this.$container = renderContainer;\n } else {\n _this.$container = createRendererContainer(_this.configService.getSceneConfig(_this.id).id || '');\n }\n\n // 创建底图之上的 container\n if (_this.$container) {\n const {\n canvas\n } = sceneConfig;\n _this.canvas = canvas ? canvas : DOM.create('canvas', '', _this.$container);\n _this.setCanvas();\n yield _this.rendererService.init(\n // @ts-ignore\n _this.canvas, _this.configService.getSceneConfig(_this.id), sceneConfig.gl);\n _this.registerContextLost();\n _this.initContainer();\n _this.resizeDetector = elementResizeDetectorMaker({\n strategy: 'scroll' //<- For ultra performance.\n });\n _this.resizeDetector.listenTo(_this.$container, _this.handleWindowResized);\n if (window.matchMedia) {\n var _window$matchMedia;\n (_window$matchMedia = window.matchMedia('screen and (-webkit-min-device-pixel-ratio: 1.5)')) === null || _window$matchMedia === void 0 || _window$matchMedia.addListener(_this.handleWindowResized.bind('screen'));\n }\n } else {\n console.error('容器 id 不存在');\n }\n _this.pickingService.init(_this.id);\n }));\n this.render();\n }\n registerContextLost() {\n const canvas = this.rendererService.getCanvas();\n if (canvas) {\n canvas.addEventListener('webglcontextlost', () => this.emit('webglcontextlost'));\n }\n }\n addLayer(layer) {\n this.layerService.sceneService = this;\n this.layerService.add(layer);\n }\n addMask(mask) {\n this.layerService.sceneService = this;\n this.layerService.addMask(mask);\n }\n render() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n if (_this2.rendering || _this2.destroyed) {\n return;\n }\n _this2.rendering = true;\n // 首次初始化,或者地图的容器被强制销毁的需要重新初始化\n if (!_this2.inited) {\n // 还未初始化完成需要等待\n\n yield _this2.hooks.init.promise(); // 初始化地图和渲染\n if (_this2.destroyed) {\n _this2.destroy();\n }\n // FIXME: 初始化 marker 容器,可以放到 map 初始化方法中?\n yield _this2.layerService.initLayers();\n _this2.layerService.renderLayers();\n _this2.controlService.addControls();\n _this2.loaded = true;\n _this2.emit('loaded');\n _this2.inited = true;\n } else {\n // 尝试初始化未初始化的图层\n yield _this2.layerService.initLayers();\n yield _this2.layerService.renderLayers();\n }\n\n // 组件需要等待layer 初始化完成之后添加\n _this2.rendering = false;\n })();\n }\n\n /**\n * 用户自定义添加第三方字体 (用户使用 layer/point/text/iconfont 的前提需要加载第三方字体文件)\n * @param fontFamily\n * @param fontPath\n */\n addFontFace(fontFamily, fontPath) {\n this.fontService.addFontFace(fontFamily, fontPath);\n }\n getSceneContainer() {\n return this.$container;\n }\n exportPng(type) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n var _this3$$container;\n const renderCanvas = (_this3$$container = _this3.$container) === null || _this3$$container === void 0 ? void 0 : _this3$$container.getElementsByTagName('canvas')[0];\n yield _this3.render();\n const layersPng = type === 'jpg' ? renderCanvas === null || renderCanvas === void 0 ? void 0 : renderCanvas.toDataURL('image/jpeg') : renderCanvas === null || renderCanvas === void 0 ? void 0 : renderCanvas.toDataURL('image/png');\n return layersPng;\n })();\n }\n getSceneConfig() {\n return this.configService.getSceneConfig(this.id);\n }\n\n // get point size info\n getPointSizeRange() {\n return this.rendererService.getPointSizeRange();\n }\n addMarkerContainer() {\n // @ts-ignore\n const mapContainer = this.$container.parentElement;\n if (mapContainer !== null) {\n this.markerContainer = DOM.create('div', 'l7-marker-container', mapContainer);\n }\n }\n getMarkerContainer() {\n return this.markerContainer;\n }\n destroy() {\n var _this$$container2;\n if (!this.inited) {\n this.destroyed = true;\n return;\n }\n this.resizeDetector.removeListener(this.$container, this.handleWindowResized);\n this.pickingService.destroy();\n this.layerService.destroy();\n\n // this.rendererService.destroy();\n\n this.interactionService.destroy();\n this.controlService.destroy();\n this.markerService.destroy();\n this.fontService.destroy();\n this.iconService.destroy();\n this.removeAllListeners();\n this.inited = false;\n this.map.destroy();\n setTimeout(() => {\n var _this$$container;\n (_this$$container = this.$container) === null || _this$$container === void 0 || _this$$container.removeChild(this.canvas);\n // this.canvas = null 清除对 webgl 实例的引用\n // @ts-ignore\n this.canvas = null;\n // Tip: 把这一部分销毁放到写下一个事件循环中执行,兼容 L7React 中 scene 和 layer 同时销毁的情况\n this.rendererService.destroy();\n });\n // 销毁 container 容器\n (_this$$container2 = this.$container) === null || _this$$container2 === void 0 || (_this$$container2 = _this$$container2.parentNode) === null || _this$$container2 === void 0 || _this$$container2.removeChild(this.$container);\n this.emit('destroy');\n }\n initContainer() {\n var _this$$container3, _this$$container4;\n const pixelRatio = DOM.DPR;\n const w = ((_this$$container3 = this.$container) === null || _this$$container3 === void 0 ? void 0 : _this$$container3.clientWidth) || 400;\n const h = ((_this$$container4 = this.$container) === null || _this$$container4 === void 0 ? void 0 : _this$$container4.clientHeight) || 300;\n const canvas = this.canvas;\n if (canvas) {\n canvas.width = w * pixelRatio;\n canvas.height = h * pixelRatio;\n }\n this.rendererService.viewport({\n x: 0,\n y: 0,\n width: pixelRatio * w,\n height: pixelRatio * h\n });\n }\n setCanvas() {\n var _this$$container5, _this$$container6;\n const pixelRatio = DOM.DPR;\n const w = ((_this$$container5 = this.$container) === null || _this$$container5 === void 0 ? void 0 : _this$$container5.clientWidth) || 400;\n const h = ((_this$$container6 = this.$container) === null || _this$$container6 === void 0 ? void 0 : _this$$container6.clientHeight) || 300;\n const canvas = this.canvas;\n canvas.width = w * pixelRatio;\n canvas.height = h * pixelRatio;\n canvas.style.width = '100%';\n canvas.style.height = '100%';\n }\n addSceneEvent(target) {\n this.emit(target.type, target);\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { lodashUtil } from '@antv/l7-utils';\nimport { extractUniforms } from \"../../utils/shader-module\";\nconst {\n uniq\n} = lodashUtil;\n/* babel-plugin-inline-import '../../shaders/common.glsl' */\nconst common = \"#define PI 3.14159265359\";\n/* babel-plugin-inline-import '../../shaders/common_light.glsl' */\nconst light = \"#define ambientRatio 0.5\\n#define diffuseRatio 0.3\\n#define specularRatio 0.2\\n\\n\\nfloat calc_lighting(vec4 pos) {\\n\\n vec3 worldPos = vec3(pos * u_ModelMatrix);\\n\\n vec3 worldNormal = a_Normal;\\n // //cal light weight\\n vec3 viewDir = normalize(u_CameraPosition - worldPos);\\n\\n vec3 lightDir = normalize(vec3(1, -10.5, 12));\\n\\n vec3 halfDir = normalize(viewDir+lightDir);\\n // //lambert\\n float lambert = dot(worldNormal, lightDir);\\n //specular\\n float specular = pow(max(0.0, dot(worldNormal, halfDir)), 32.0);\\n //sum to light weight\\n float lightWeight = ambientRatio + diffuseRatio * lambert + specularRatio * specular;\\n\\n return lightWeight;\\n}\\n\";\n/* babel-plugin-inline-import '../../shaders/decode.glsl' */\nconst decode = \"#define SHIFT_RIGHT17 1.0 / 131072.0\\n#define SHIFT_RIGHT18 1.0 / 262144.0\\n#define SHIFT_RIGHT19 1.0 / 524288.0\\n#define SHIFT_RIGHT20 1.0 / 1048576.0\\n#define SHIFT_RIGHT21 1.0 / 2097152.0\\n#define SHIFT_RIGHT22 1.0 / 4194304.0\\n#define SHIFT_RIGHT23 1.0 / 8388608.0\\n#define SHIFT_RIGHT24 1.0 / 16777216.0\\n\\n#define SHIFT_LEFT17 131072.0\\n#define SHIFT_LEFT18 262144.0\\n#define SHIFT_LEFT19 524288.0\\n#define SHIFT_LEFT20 1048576.0\\n#define SHIFT_LEFT21 2097152.0\\n#define SHIFT_LEFT22 4194304.0\\n#define SHIFT_LEFT23 8388608.0\\n#define SHIFT_LEFT24 16777216.0\\n\\nvec2 unpack_float(float packedValue) {\\n int packedIntValue = int(packedValue);\\n int v0 = packedIntValue / 256;\\n return vec2(v0, packedIntValue - v0 * 256);\\n}\\n\\nvec4 decode_color(vec2 encodedColor) {\\n return vec4(\\n unpack_float(encodedColor[0]) / 255.0,\\n unpack_float(encodedColor[1]) / 255.0\\n );\\n}\\n\";\n/* babel-plugin-inline-import '../../shaders/lighting.glsl' */\nconst lighting = \"// Blinn-Phong model\\n// apply lighting in vertex shader instead of fragment shader\\n// @see https://learnopengl.com/Advanced-Lighting/Advanced-Lighting\\nuniform float u_Ambient : 1.0;\\nuniform float u_Diffuse : 1.0;\\nuniform float u_Specular : 1.0;\\nuniform int u_NumOfDirectionalLights : 1;\\nuniform int u_NumOfSpotLights : 0;\\n\\n#define SHININESS 32.0\\n#define MAX_NUM_OF_DIRECTIONAL_LIGHTS 3\\n#define MAX_NUM_OF_SPOT_LIGHTS 3\\n\\nstruct DirectionalLight {\\n vec3 direction;\\n vec3 ambient;\\n vec3 diffuse;\\n vec3 specular;\\n};\\n\\nstruct SpotLight {\\n vec3 position;\\n vec3 direction;\\n vec3 ambient;\\n vec3 diffuse;\\n vec3 specular;\\n float constant;\\n float linear;\\n float quadratic;\\n float angle;\\n float blur;\\n float exponent;\\n};\\n\\nuniform DirectionalLight u_DirectionalLights[MAX_NUM_OF_DIRECTIONAL_LIGHTS];\\nuniform SpotLight u_SpotLights[MAX_NUM_OF_SPOT_LIGHTS];\\n\\nvec3 calc_directional_light(DirectionalLight light, vec3 normal, vec3 viewDir) {\\n vec3 lightDir = normalize(light.direction);\\n // diffuse shading\\n float diff = max(dot(normal, lightDir), 0.0);\\n // Blinn-Phong specular shading\\n vec3 halfwayDir = normalize(lightDir + viewDir);\\n float spec = pow(max(dot(normal, halfwayDir), 0.0), SHININESS);\\n\\n vec3 ambient = light.ambient * u_Ambient;\\n vec3 diffuse = light.diffuse * diff * u_Diffuse;\\n vec3 specular = light.specular * spec * u_Specular;\\n\\n return ambient + diffuse + specular;\\n}\\n\\n\\nvec3 calc_lighting(vec3 position, vec3 normal, vec3 viewDir) {\\n vec3 weight = vec3(0.0);\\n for (int i = 0; i < MAX_NUM_OF_DIRECTIONAL_LIGHTS; i++) {\\n if (i >= u_NumOfDirectionalLights) {\\n break;\\n }\\n weight += calc_directional_light(u_DirectionalLights[i], normal, viewDir);\\n }\\n return weight;\\n}\\n\";\n/* babel-plugin-inline-import '../../shaders/picking.frag.glsl' */\nconst pickingFrag = \"\\nin vec4 v_PickingResult;\\n\\n#pragma include \\\"picking_uniforms\\\"\\n\\n#define PICKING_NONE 0.0\\n#define PICKING_ENCODE 1.0\\n#define PICKING_HIGHLIGHT 2.0\\n#define COLOR_SCALE 1. / 255.\\n\\n#define HIGHLIGHT 1.0\\n#define SELECT 2.0\\n\\n/*\\n * Returns highlight color if this item is selected.\\n */\\nvec4 filterHighlightColor(vec4 color, float weight) {\\n float activeType = v_PickingResult.a;\\n if(activeType > 0.0) {\\n vec4 highLightColor = activeType > 1.5 ? u_SelectColor : u_HighlightColor;\\n highLightColor = highLightColor * COLOR_SCALE;\\n float highLightAlpha = highLightColor.a;\\n float highLightRatio = highLightAlpha / (highLightAlpha + color.a * (1.0 - highLightAlpha));\\n vec3 resultRGB = mix(color.rgb, highLightColor.rgb, highLightRatio);\\n return vec4(mix(resultRGB * weight, color.rgb, u_activeMix), color.a);\\n }\\n else {\\n return color;\\n }\\n\\n \\n}\\n\\n/*\\n * Returns picking color if picking enabled else unmodified argument.\\n */\\nvec4 filterPickingColor(vec4 color) {\\n vec3 pickingColor = v_PickingResult.rgb;\\n if (u_PickingStage == PICKING_ENCODE && length(pickingColor) < 0.001) {\\n discard;\\n }\\n return u_PickingStage == PICKING_ENCODE ? vec4(pickingColor, step(0.001,color.a)): color;\\n}\\n\\n/*\\n * Returns picking color if picking is enabled if not\\n * highlight color if this item is selected, otherwise unmodified argument.\\n */\\nvec4 filterColor(vec4 color) {\\n // \\u8FC7\\u6EE4\\u591A\\u4F59\\u7684 shader \\u8BA1\\u7B97\\n // return color;\\n if(u_shaderPick < 0.5) {\\n return color; // \\u6682\\u65F6\\u53BB\\u9664 \\u76F4\\u63A5\\u53D6\\u6D88\\u8BA1\\u7B97\\u5728\\u9009\\u4E2D\\u65F6\\u62D6\\u62FD\\u5730\\u56FE\\u4F1A\\u6709\\u95EE\\u9898\\n } else {\\n return filterPickingColor(filterHighlightColor(color, 1.0));\\n }\\n \\n}\\n\\nvec4 filterColorAlpha(vec4 color, float alpha) {\\n // \\u8FC7\\u6EE4\\u591A\\u4F59\\u7684 shader \\u8BA1\\u7B97\\n // return color;\\n if(u_shaderPick < 0.5) {\\n return color; // \\u6682\\u65F6\\u53BB\\u9664 \\u76F4\\u63A5\\u53D6\\u6D88\\u8BA1\\u7B97\\u5728\\u9009\\u4E2D\\u65F6\\u62D6\\u62FD\\u5730\\u56FE\\u4F1A\\u6709\\u95EE\\u9898\\n } else {\\n return filterPickingColor(filterHighlightColor(color, alpha));\\n }\\n}\\n\\n\";\n/* babel-plugin-inline-import '../../shaders/picking.vert.glsl' */\nconst pickingVert = \"layout(location = ATTRIBUTE_LOCATION_PICKING_COLOR) in vec3 a_PickingColor;\\nout vec4 v_PickingResult;\\n\\n#pragma include \\\"picking_uniforms\\\"\\n\\n#define PICKING_NONE 0.0\\n#define PICKING_ENCODE 1.0\\n#define PICKING_HIGHLIGHT 2.0\\n#define COLOR_SCALE 1. / 255.\\n\\n#define NORMAL 0.0\\n#define HIGHLIGHT 1.0\\n#define SELECT 2.0\\n\\nbool isVertexPicked(vec3 vertexColor) {\\n return distance(vertexColor,u_PickingColor.rgb) < 0.01;\\n}\\n\\n// \\u5224\\u65AD\\u5F53\\u524D\\u70B9\\u662F\\u5426\\u5DF2\\u7ECF\\u88AB select \\u9009\\u4E2D\\nbool isVertexSelected(vec3 vertexColor) {\\n return distance(vertexColor,u_CurrentSelectedId.rgb) < 0.01;\\n}\\n\\nvoid setPickingColor(vec3 pickingColor) {\\n if(u_shaderPick < 0.5) {\\n return;\\n }\\n // compares only in highlight stage\\n\\n if(u_PickingStage == PICKING_HIGHLIGHT) {\\n if(isVertexPicked(pickingColor)) {\\n v_PickingResult = vec4(pickingColor.rgb * COLOR_SCALE,HIGHLIGHT);\\n return;\\n }\\n if(isVertexSelected(pickingColor)) {\\n v_PickingResult = vec4(u_CurrentSelectedId.rgb * COLOR_SCALE,SELECT);\\n return;\\n }\\n\\n } else {\\n v_PickingResult= vec4(pickingColor.rgb * COLOR_SCALE,NORMAL);\\n return;\\n }\\n\\n // // v_PickingResult.a = float((u_PickingStage == PICKING_HIGHLIGHT) && (isVertexPicked(pickingColor) || isVertexPicked(u_CurrentSelectedId)));\\n\\n // // Stores the picking color so that the fragment shader can render it during picking\\n // v_PickingResult.rgb = pickingColor * COLOR_SCALE;\\n}\\n\\nfloat setPickingSize(float x) {\\n return u_PickingStage == PICKING_ENCODE ? x + u_PickingBuffer : x;\\n}\\n\\nfloat setPickingOrder(float z) {\\n bool selected = bool(v_PickingResult.a);\\n return selected ? z + 1. : 0.;\\n}\\n\";\n/* babel-plugin-inline-import '../../shaders/picking_uniforms.glsl' */\nconst picking_uniforms = \"layout(std140) uniform PickingUniforms {\\n vec4 u_HighlightColor;\\n vec4 u_SelectColor;\\n vec3 u_PickingColor;\\n float u_PickingStage;\\n vec3 u_CurrentSelectedId;\\n float u_PickingThreshold;\\n float u_PickingBuffer;\\n float u_shaderPick;\\n float u_activeMix;\\n};\";\n/* babel-plugin-inline-import '../../shaders/project.glsl' */\nconst project = \"\\n#define E 2.718281828459045\\nvec2 ProjectFlat(vec2 lnglat){\\n float maxs=85.0511287798;\\n float lat=max(min(maxs,lnglat.y),-maxs);\\n float scale= 268435456.;\\n float d=PI/180.;\\n float x=lnglat.x*d;\\n float y=lat*d;\\n y=log(tan((PI/4.)+(y/2.)));\\n\\n float a=.5/PI,\\n b=.5,\\n c=-.5/PI;\\n d=.5;\\n x=scale*(a*x+b);\\n y=scale*(c*y+d);\\n return vec2(x,y);\\n}\\n\\nvec2 unProjectFlat(vec2 px){\\n float a=.5/PI;\\n float b=.5;\\n float c=-.5/PI;\\n float d=.5;\\n float scale = 268435456.;\\n float x=(px.x/scale-b)/a;\\n float y=(px.y/scale-d)/c;\\n y=(atan(pow(E,y))-(PI/4.))*2.;\\n d=PI/180.;\\n float lat=y/d;\\n float lng=x/d;\\n return vec2(lng,lat);\\n}\\n\\nfloat pixelDistance(vec2 from, vec2 to) {\\n vec2 a1 = ProjectFlat(from);\\n vec2 b1 = ProjectFlat(to);\\n return distance(a1, b1);\\n}\\n\\n// gaode2.0\\nvec2 customProject(vec2 lnglat) { // \\u7ECF\\u7EAC\\u5EA6 => \\u5E73\\u9762\\u5750\\u6807\\n float t = lnglat.x;\\n float e = lnglat.y;\\n float Sm = 180.0 / PI;\\n float Tm = 6378137.0;\\n float Rm = PI / 180.0;\\n float r = 85.0511287798;\\n e = max(min(r, e), -r);\\n t *= Rm;\\n e *= Rm;\\n e = log(tan(PI / 4.0 + e / 2.0));\\n return vec2(t * Tm, e * Tm);\\n}\\n\\nvec2 unProjCustomCoord(vec2 point) { // \\u5E73\\u9762\\u5750\\u6807 => \\u7ECF\\u7EAC\\u5EA6\\n float Sm = 57.29577951308232; //180 / Math.PI\\n float Tm = 6378137.0;\\n float t = point.x;\\n float e = point.y;\\n return vec2(t / Tm * Sm, (2.0 * atan(exp(e / Tm)) - PI / 2.0) * Sm);\\n}\\n\\n\\nfloat customPixelDistance(vec2 from, vec2 to) {\\n vec2 a1 = ProjectFlat(from);\\n vec2 b1 = ProjectFlat(to);\\n return distance(a1, b1);\\n}\";\n/* babel-plugin-inline-import '../../shaders/projection.glsl' */\nconst projection = \"#define TILE_SIZE (512.0)\\n#define PI (3.1415926536)\\n#define WORLD_SCALE (TILE_SIZE / (PI * 2.0))\\n#define EARTH_CIRCUMFERENCE (40.03e6)\\n\\n#define COORDINATE_SYSTEM_LNGLAT (1.0) // mapbox\\n#define COORDINATE_SYSTEM_LNGLAT_OFFSET (2.0) // mapbox offset\\n#define COORDINATE_SYSTEM_VECTOR_TILE (3.0)\\n#define COORDINATE_SYSTEM_IDENTITY (4.0)\\n#define COORDINATE_SYSTEM_METER_OFFSET (5.0)\\n\\n#pragma include \\\"scene_uniforms\\\"\\n\\nconst vec2 ZERO_64_XY_LOW = vec2(0.0, 0.0);\\n\\n// web mercator coords -> world coords\\nvec2 project_mercator(vec2 lnglat) {\\n float x = lnglat.x;\\n return vec2(radians(x) + PI, PI - log(tan(PI * 0.25 + radians(lnglat.y) * 0.5)));\\n}\\n\\nfloat project_scale(float meters) {\\n return meters * u_PixelsPerMeter.z;\\n}\\n\\n// offset coords -> world coords\\nvec4 project_offset(vec4 offset) {\\n float dy = offset.y;\\n dy = clamp(dy, -1.0, 1.0);\\n vec3 pixels_per_unit = u_PixelsPerDegree + u_PixelsPerDegree2 * dy;\\n return vec4(offset.xyz * pixels_per_unit, offset.w);\\n}\\n\\nvec3 project_normal(vec3 normal) {\\n vec4 normal_modelspace = u_ModelMatrix * vec4(normal, 0.0);\\n return normalize(normal_modelspace.xyz * u_PixelsPerMeter);\\n}\\n\\nvec3 project_offset_normal(vec3 vector) {\\n if (\\n u_CoordinateSystem < COORDINATE_SYSTEM_LNGLAT + 0.01 &&\\n u_CoordinateSystem > COORDINATE_SYSTEM_LNGLAT - 0.01 ||\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\\n ) {\\n // normals generated by the polygon tesselator are in lnglat offsets instead of meters\\n return normalize(vector * u_PixelsPerDegree);\\n }\\n return project_normal(vector);\\n}\\n\\nvec4 project_position(vec4 position, vec2 position64xyLow) {\\n if (u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\\n float X = position.x - u_ViewportCenter.x;\\n float Y = position.y - u_ViewportCenter.y;\\n return project_offset(\\n vec4(X + position64xyLow.x, Y + position64xyLow.y, position.z, position.w)\\n );\\n }\\n if (\\n u_CoordinateSystem < COORDINATE_SYSTEM_LNGLAT + 0.01 &&\\n u_CoordinateSystem > COORDINATE_SYSTEM_LNGLAT - 0.01\\n ) {\\n return vec4(\\n project_mercator(position.xy) * WORLD_SCALE * u_ZoomScale,\\n project_scale(position.z),\\n position.w\\n );\\n }\\n\\n return position;\\n}\\n\\nvec4 project_position(vec4 position) {\\n return project_position(position, ZERO_64_XY_LOW);\\n}\\n\\nvec2 project_pixel_size_to_clipspace(vec2 pixels) {\\n vec2 offset = pixels / u_ViewportSize * u_DevicePixelRatio * 2.0;\\n return offset * u_FocalDistance;\\n}\\n\\n// \\u9002\\u914D\\u7EB9\\u7406\\u8D34\\u56FE\\u7684\\u7B49\\u50CF\\u7D20\\u5927\\u5C0F\\nfloat project_pixel_texture(float pixel) {\\n // mapbox zoom > 12\\n if (u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\\n return pixel * pow(0.5, u_Zoom) * u_FocalDistance;\\n }\\n\\n return pixel * 2.0 * u_FocalDistance;\\n}\\n\\n// \\u5728\\u4E0D\\u8BBA\\u4EC0\\u4E48\\u5E95\\u56FE\\u4E0B\\u9700\\u8981\\u7EDF\\u4E00\\u5904\\u7406\\u7684\\u65F6\\u5019\\u4F7F\\u7528\\nfloat project_float_pixel(float pixel) {\\n if (\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\\n ) {\\n // mapbox \\u5750\\u6807\\u7CFB\\u4E0B\\uFF0C\\u4E3A\\u4E86\\u548C Web \\u58A8\\u5361\\u6258\\u5750\\u6807\\u7CFB\\u7EDF\\u4E00\\uFF0Czoom \\u9ED8\\u8BA4\\u51CF1\\n return pixel * pow(2.0, 19.0 - u_Zoom) * u_FocalDistance;\\n }\\n\\n return pixel * u_FocalDistance;\\n}\\n\\n// Project meter into the unit of pixel which used in the camera world space\\nfloat project_float_meter(float meter) {\\n if (\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\\n ) {\\n // Since the zoom level uniform is updated by mapservice and it's alread been subtracted by 1\\n // Not sure if we are supposed to do that again\\n return meter;\\n } else {\\n return project_float_pixel(meter);\\n }\\n\\n // TODO: change the following code to make adaptations for amap\\n // return u_FocalDistance * TILE_SIZE * pow(2.0, u_Zoom) * meter / EARTH_CIRCUMFERENCE;\\n\\n}\\n\\nfloat project_pixel(float pixel) {\\n return pixel * u_FocalDistance;\\n}\\n\\nvec2 project_pixel(vec2 pixel) {\\n return pixel * -1.0 * u_FocalDistance;\\n}\\n\\nvec3 project_pixel(vec3 pixel) {\\n return pixel * -1.0 * u_FocalDistance;\\n}\\n\\nvec4 project_common_position_to_clipspace(vec4 position, mat4 viewProjectionMatrix, vec4 center) {\\n if (\\n u_CoordinateSystem == COORDINATE_SYSTEM_METER_OFFSET ||\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\\n ) {\\n // Needs to be divided with project_uCommonUnitsPerMeter\\n position.w *= u_PixelsPerMeter.z;\\n }\\n\\n return viewProjectionMatrix * position + center;\\n}\\n\\n// Projects from common space coordinates to clip space\\nvec4 project_common_position_to_clipspace(vec4 position) {\\n return project_common_position_to_clipspace(\\n position,\\n u_ViewProjectionMatrix,\\n u_ViewportCenterProjection\\n );\\n}\\n\\nvec4 unproject_clipspace_to_position(vec4 clipspacePos, mat4 u_InverseViewProjectionMatrix) {\\n vec4 pos = u_InverseViewProjectionMatrix * (clipspacePos - u_ViewportCenterProjection);\\n\\n if (\\n u_CoordinateSystem == COORDINATE_SYSTEM_METER_OFFSET ||\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\\n ) {\\n // Needs to be divided with project_uCommonUnitsPerMeter\\n pos.w = pos.w / u_PixelsPerMeter.z;\\n }\\n return pos;\\n}\\n\\nbool isEqual(float a, float b) {\\n return a < b + 0.001 && a > b - 0.001;\\n}\\n\\n\";\n/* babel-plugin-inline-import '../../shaders/rotation_2d.glsl' */\nconst rotation_2d = \"vec2 rotate_matrix(vec2 v, float a) {\\n float b = a / 180.0 * 3.1415926535897932384626433832795;\\n float s = sin(b);\\n float c = cos(b);\\n mat2 m = mat2(c, s, -s, c);\\n return m * v;\\n}\";\n/* babel-plugin-inline-import '../../shaders/scene_uniforms.glsl' */\nconst scene_uniforms = \"layout(std140) uniform SceneUniforms {\\n mat4 u_ViewMatrix;\\n mat4 u_ProjectionMatrix;\\n mat4 u_ViewProjectionMatrix;\\n mat4 u_ModelMatrix;\\n vec4 u_ViewportCenterProjection;\\n vec3 u_PixelsPerDegree;\\n float u_Zoom;\\n vec3 u_PixelsPerDegree2;\\n float u_ZoomScale;\\n vec3 u_PixelsPerMeter;\\n float u_CoordinateSystem;\\n vec3 u_CameraPosition;\\n float u_DevicePixelRatio;\\n vec2 u_ViewportCenter;\\n vec2 u_ViewportSize;\\n float u_FocalDistance;\\n};\\n\";\n/* babel-plugin-inline-import '../../shaders/sdf_2d.glsl' */\nconst sdf2d = \"/**\\n * 2D signed distance field functions\\n * @see http://www.iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm\\n */\\n\\nfloat ndot(vec2 a, vec2 b ) { return a.x*b.x - a.y*b.y; }\\n\\nfloat sdCircle(vec2 p, float r) {\\n return length(p) - r;\\n}\\n\\nfloat sdEquilateralTriangle(vec2 p) {\\n float k = sqrt(3.0);\\n p.x = abs(p.x) - 1.0;\\n p.y = p.y + 1.0/k;\\n if( p.x + k*p.y > 0.0 ) p = vec2(p.x-k*p.y,-k*p.x-p.y)/2.0;\\n p.x -= clamp( p.x, -2.0, 0.0 );\\n return -length(p)*sign(p.y);\\n}\\n\\nfloat sdBox(vec2 p, vec2 b) {\\n vec2 d = abs(p)-b;\\n return length(max(d,vec2(0))) + min(max(d.x,d.y),0.0);\\n}\\n\\nfloat sdPentagon(vec2 p, float r) {\\n vec3 k = vec3(0.809016994,0.587785252,0.726542528);\\n p.x = abs(p.x);\\n p -= 2.0*min(dot(vec2(-k.x,k.y),p),0.0)*vec2(-k.x,k.y);\\n p -= 2.0*min(dot(vec2( k.x,k.y),p),0.0)*vec2( k.x,k.y);\\n p -= vec2(clamp(p.x,-r*k.z,r*k.z),r);\\n return length(p)*sign(p.y);\\n}\\n\\nfloat sdHexagon(vec2 p, float r) {\\n vec3 k = vec3(-0.866025404,0.5,0.577350269);\\n p = abs(p);\\n p -= 2.0*min(dot(k.xy,p),0.0)*k.xy;\\n p -= vec2(clamp(p.x, -k.z*r, k.z*r), r);\\n return length(p)*sign(p.y);\\n}\\n\\nfloat sdOctogon(vec2 p, float r) {\\n vec3 k = vec3(-0.9238795325, 0.3826834323, 0.4142135623 );\\n p = abs(p);\\n p -= 2.0*min(dot(vec2( k.x,k.y),p),0.0)*vec2( k.x,k.y);\\n p -= 2.0*min(dot(vec2(-k.x,k.y),p),0.0)*vec2(-k.x,k.y);\\n p -= vec2(clamp(p.x, -k.z*r, k.z*r), r);\\n return length(p)*sign(p.y);\\n}\\n\\nfloat sdHexagram(vec2 p, float r) {\\n vec4 k=vec4(-0.5,0.8660254038,0.5773502692,1.7320508076);\\n p = abs(p);\\n p -= 2.0*min(dot(k.xy,p),0.0)*k.xy;\\n p -= 2.0*min(dot(k.yx,p),0.0)*k.yx;\\n p -= vec2(clamp(p.x,r*k.z,r*k.w),r);\\n return length(p)*sign(p.y);\\n}\\n\\nfloat sdRhombus(vec2 p, vec2 b) {\\n vec2 q = abs(p);\\n float h = clamp((-2.0*ndot(q,b)+ndot(b,b))/dot(b,b),-1.0,1.0);\\n float d = length( q - 0.5*b*vec2(1.0-h,1.0+h) );\\n return d * sign( q.x*b.y + q.y*b.x - b.x*b.y );\\n}\\n\\nfloat sdVesica(vec2 p, float r, float d) {\\n p = abs(p);\\n float b = sqrt(r*r-d*d); // can delay this sqrt\\n return ((p.y-b)*d>p.x*b)\\n ? length(p-vec2(0.0,b))\\n : length(p-vec2(-d,0.0))-r;\\n}\\n\";\nconst precisionRegExp = /precision\\s+(high|low|medium)p\\s+float/;\nconst globalDefaultprecision = '#ifdef GL_FRAGMENT_PRECISION_HIGH\\n precision highp float;\\n #else\\n precision mediump float;\\n#endif\\n';\nconst includeRegExp = /#pragma include ([\"^+\"]?[\"[a-zA-Z_0-9](.*)\"]*?)/g;\nconst REGEX_START_OF_MAIN = /void\\s+main\\s*\\([^)]*\\)\\s*\\{\\n?/; // Beginning of main\n\nexport default class ShaderModuleService {\n constructor() {\n _defineProperty(this, \"moduleCache\", {});\n _defineProperty(this, \"rawContentCache\", {});\n }\n registerBuiltinModules() {\n this.destroy();\n this.registerModule('common', {\n vs: common,\n fs: common\n });\n this.registerModule('decode', {\n vs: decode,\n fs: ''\n });\n this.registerModule('scene_uniforms', {\n vs: scene_uniforms,\n fs: scene_uniforms\n });\n this.registerModule('picking_uniforms', {\n vs: picking_uniforms,\n fs: picking_uniforms\n });\n this.registerModule('projection', {\n vs: projection,\n fs: projection\n });\n this.registerModule('project', {\n vs: project,\n fs: ''\n });\n this.registerModule('sdf_2d', {\n vs: '',\n fs: sdf2d\n });\n this.registerModule('lighting', {\n vs: lighting,\n fs: ''\n });\n this.registerModule('light', {\n vs: light,\n fs: ''\n });\n this.registerModule('picking', {\n vs: pickingVert,\n fs: pickingFrag\n });\n this.registerModule('rotation_2d', {\n vs: rotation_2d,\n fs: ''\n });\n }\n registerModule(moduleName, moduleParams) {\n // prevent registering the same module multiple times\n // if (this.rawContentCache[moduleName]) {\n // return;\n // }\n\n moduleParams.vs = moduleParams.vs.replace(/\\r\\n/g, '\\n'); // 将所有的\\r\\n替换为\\n\n moduleParams.fs = moduleParams.fs.replace(/\\r\\n/g, '\\n'); // 将所有的\\r\\n替换为\\n\n const {\n vs,\n fs,\n uniforms: declaredUniforms,\n defines,\n inject\n } = moduleParams;\n const {\n content: extractedVS,\n uniforms: vsUniforms\n } = extractUniforms(vs);\n const {\n content: extractedFS,\n uniforms: fsUniforms\n } = extractUniforms(fs);\n this.rawContentCache[moduleName] = {\n fs: extractedFS,\n defines,\n inject,\n uniforms: _objectSpread(_objectSpread(_objectSpread({}, vsUniforms), fsUniforms), declaredUniforms),\n vs: extractedVS\n };\n }\n getModule(moduleName) {\n // TODO: cache module\n // if (this.moduleCache[moduleName]) {\n // return this.moduleCache[moduleName];\n // }\n\n let rawVS = this.rawContentCache[moduleName].vs;\n let rawFS = this.rawContentCache[moduleName].fs;\n const {\n defines = {},\n inject = {}\n } = this.rawContentCache[moduleName];\n let declaredUniforms = {};\n\n // vs 头部注入\n if (inject['vs:#decl']) {\n rawVS = inject['vs:#decl'] + rawVS;\n declaredUniforms = extractUniforms(inject['vs:#decl']).uniforms;\n }\n\n // vs main\n if (inject['vs:#main-start']) {\n rawVS = rawVS.replace(REGEX_START_OF_MAIN, match => {\n return match + inject['vs:#main-start'];\n });\n }\n\n // fs 头部注入\n if (inject['fs:#decl']) {\n rawFS = inject['fs:#decl'] + rawFS;\n }\n const injectDefines = getInjectDefines(defines);\n\n // 注入定义的宏\n rawVS = injectDefines + rawVS;\n const {\n content: vs,\n includeList: vsIncludeList\n } = this.processModule(rawVS, [], 'vs');\n const {\n content: fs,\n includeList: fsIncludeList\n } = this.processModule(rawFS, [], 'fs');\n\n // TODO: extract uniforms and their default values from GLSL\n const uniforms = uniq(vsIncludeList.concat(fsIncludeList).concat(moduleName)).reduce((prev, cur) => {\n return _objectSpread(_objectSpread({}, prev), this.rawContentCache[cur].uniforms);\n }, _objectSpread({}, declaredUniforms));\n\n /**\n * set default precision for fragment shader\n * https://stackoverflow.com/questions/28540290/why-it-is-necessary-to-set-precision-for-the-fragment-shader\n */\n const compiledVs = (precisionRegExp.test(fs) ? '' : globalDefaultprecision) + vs;\n const compiledFs = (precisionRegExp.test(fs) ? '' : globalDefaultprecision) + fs;\n this.moduleCache[moduleName] = {\n vs: compiledVs.trim(),\n fs: compiledFs.trim(),\n uniforms\n };\n return this.moduleCache[moduleName];\n }\n destroy() {\n this.moduleCache = {};\n this.rawContentCache = {};\n }\n\n /**\n *\n * 解析定义的内联模块\n * like: #pragma include \"projection\"\n */\n processModule(rawContent, includeList, type) {\n const compiled = rawContent.replace(includeRegExp, (_, strMatch) => {\n const includeOpt = strMatch.split(' ');\n const includeName = includeOpt[0].replace(/\"/g, '');\n if (includeList.indexOf(includeName) > -1) {\n return '';\n }\n const txt = this.rawContentCache[includeName][type];\n includeList.push(includeName);\n const {\n content\n } = this.processModule(txt, includeList, type);\n return content;\n });\n return {\n content: compiled,\n includeList\n };\n }\n}\n\n/** Generates defines from an object of key value pairs */\nfunction getInjectDefines(defines) {\n const defineStr = Object.keys(defines).reduce((prev, cur) => {\n return prev + `#define ${cur.toUpperCase()} ${defines[cur]}\\n`;\n }, '\\n');\n return defineStr;\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { PassType } from \"../IMultiPassRenderer\";\n/**\n * 常规 Pass 基类\n */\nexport default class BaseNormalPass {\n constructor() {\n _defineProperty(this, \"shaderModuleService\", void 0);\n _defineProperty(this, \"rendererService\", void 0);\n _defineProperty(this, \"cameraService\", void 0);\n _defineProperty(this, \"mapService\", void 0);\n _defineProperty(this, \"interactionService\", void 0);\n _defineProperty(this, \"layerService\", void 0);\n _defineProperty(this, \"config\", void 0);\n }\n getName() {\n return '';\n }\n getType() {\n return PassType.Normal;\n }\n init(layer, config) {\n this.config = config;\n this.rendererService = layer.getContainer().rendererService;\n this.cameraService = layer.getContainer().cameraService;\n this.mapService = layer.getContainer().mapService;\n this.interactionService = layer.getContainer().interactionService;\n this.layerService = layer.getContainer().layerService;\n this.shaderModuleService = layer.getContainer().shaderModuleService;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n render(layer) {\n //\n }\n}","import BaseNormalPass from \"./BaseNormalPass\";\n\n/**\n * ClearPass\n */\nexport default class ClearPass extends BaseNormalPass {\n getName() {\n return 'clear';\n }\n init(layer, config) {\n super.init(layer, config);\n }\n render() {\n this.rendererService.clear({\n color: [0, 0, 0, 0],\n depth: 1,\n framebuffer: null\n });\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { PassType } from \"../IMultiPassRenderer\";\n\n/**\n * ported from Three.js EffectComposer\n * @example\n * const renderer = new MultiPassRenderer([\n * new ClearPass(),\n * new RenderPass({\n * models: [\n * new Model(),\n * new Model(),\n * ],\n * }),\n * new CopyPass({\n * renderToScreen: true,\n * }),\n * new TAAPass(),\n * ]);\n * renderer.render();\n * @see https://yuque.antfin-inc.com/yuqi.pyq/fgetpa/apuvbf#dRM8W\n */\nexport default class MultiPassRenderer {\n constructor(postProcessor) {\n _defineProperty(this, \"passes\", []);\n _defineProperty(this, \"layer\", void 0);\n _defineProperty(this, \"renderFlag\", void 0);\n _defineProperty(this, \"width\", 0);\n _defineProperty(this, \"height\", 0);\n this.postProcessor = postProcessor;\n }\n setLayer(layer) {\n this.layer = layer;\n }\n setRenderFlag(renderFlag) {\n this.renderFlag = renderFlag;\n }\n getRenderFlag() {\n return this.renderFlag;\n }\n getPostProcessor() {\n return this.postProcessor;\n }\n render() {\n var _this = this;\n return _asyncToGenerator(function* () {\n for (const pass of _this.passes) {\n yield pass.render(_this.layer);\n }\n // this.layer.renderModels();\n yield _this.postProcessor.render(_this.layer);\n })();\n }\n resize(width, height) {\n if (this.width !== width || this.height !== height) {\n this.postProcessor.resize(width, height);\n this.width = width;\n this.height = height;\n }\n }\n add(pass, config) {\n if (pass.getType() === PassType.PostProcessing) {\n this.postProcessor.add(pass, this.layer, config);\n } else {\n pass.init(this.layer, config);\n this.passes.push(pass);\n }\n }\n insert(pass, config, index) {\n pass.init(this.layer, config);\n this.passes.splice(index, 0, pass);\n }\n destroy() {\n this.passes.length = 0;\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { decodePickingColor, DOM, encodePickingColor } from '@antv/l7-utils';\nimport { InteractionEvent } from \"../../interaction/IInteractionService\";\nimport { gl } from \"../gl\";\nimport { PassType } from \"../IMultiPassRenderer\";\nimport BaseNormalPass from \"./BaseNormalPass\";\n\n/**\n * color-based PixelPickingPass\n * @see https://github.com/antvis/L7/blob/next/dev-docs/PixelPickingEngine.md\n * @deprecated\n * 目前未使用\n */\nexport default class PixelPickingPass extends BaseNormalPass {\n constructor(...args) {\n var _this;\n super(...args);\n _this = this;\n /**\n * picking framebuffer,供 attributes 颜色编码后输出\n */\n _defineProperty(this, \"pickingFBO\", void 0);\n /**\n * 保存 layer 引用\n */\n _defineProperty(this, \"layer\", void 0);\n _defineProperty(this, \"width\", 0);\n _defineProperty(this, \"height\", 0);\n /**\n * 简单的 throttle,防止连续触发 hover 时导致频繁渲染到 picking framebuffer\n */\n _defineProperty(this, \"alreadyInRendering\", false);\n /**\n * 拾取视口指定坐标属于的要素\n * TODO:支持区域拾取\n */\n _defineProperty(this, \"pickFromPickingFBO\", ({\n x,\n y,\n lngLat,\n type\n }) => {\n if (!this.layer.isVisible() || !this.layer.needPick(type)) {\n return;\n }\n const {\n getViewportSize,\n readPixelsAsync,\n useFramebuffer\n } = this.rendererService;\n const {\n width,\n height\n } = getViewportSize();\n const {\n enableHighlight,\n enableSelect\n } = this.layer.getLayerConfig();\n const xInDevicePixel = x * DOM.DPR;\n const yInDevicePixel = y * DOM.DPR;\n if (xInDevicePixel > width || xInDevicePixel < 0 || yInDevicePixel > height || yInDevicePixel < 0) {\n return;\n }\n let pickedColors;\n useFramebuffer(this.pickingFBO, /*#__PURE__*/_asyncToGenerator(function* () {\n var _pickedColors;\n // avoid realloc\n pickedColors = yield readPixelsAsync({\n x: Math.round(xInDevicePixel),\n // 视口坐标系原点在左上,而 WebGL 在左下,需要翻转 Y 轴\n y: Math.round(height - (y + 1) * DOM.DPR),\n width: 1,\n height: 1,\n data: new Uint8Array(1 * 1 * 4),\n framebuffer: _this.pickingFBO\n });\n if (pickedColors[0] !== 0 || pickedColors[1] !== 0 || pickedColors[2] !== 0) {\n const pickedFeatureIdx = decodePickingColor(pickedColors);\n const rawFeature = _this.layer.getSource().getFeatureById(pickedFeatureIdx);\n const target = {\n x,\n y,\n type,\n lngLat,\n featureId: pickedFeatureIdx,\n feature: rawFeature\n };\n if (!rawFeature) {\n // this.logger.error(\n // '未找到颜色编码解码后的原始 feature,请检查 fragment shader 中末尾是否添加了 `gl_FragColor = filterColor(gl_FragColor);`',\n // );\n } else {\n // trigger onHover/Click callback on layer\n _this.layer.setCurrentPickId(pickedFeatureIdx);\n _this.triggerHoverOnLayer(target);\n }\n } else {\n const target = {\n x,\n y,\n lngLat,\n type: _this.layer.getCurrentPickId() === null ? 'un' + type : 'mouseout',\n featureId: null,\n feature: null\n };\n _this.triggerHoverOnLayer(_objectSpread(_objectSpread({}, target), {}, {\n type: 'unpick'\n }));\n _this.triggerHoverOnLayer(target);\n _this.layer.setCurrentPickId(null);\n }\n if (enableHighlight) {\n _this.highlightPickedFeature(pickedColors);\n }\n if (enableSelect && type === 'click' && ((_pickedColors = pickedColors) === null || _pickedColors === void 0 ? void 0 : _pickedColors.toString()) !== [0, 0, 0, 0].toString()) {\n _this.selectFeature(pickedColors);\n }\n }));\n });\n }\n getType() {\n return PassType.Normal;\n }\n getName() {\n return 'pixelPicking';\n }\n init(layer, config) {\n super.init(layer, config);\n this.layer = layer;\n const {\n createTexture2D,\n createFramebuffer,\n getViewportSize\n } = this.rendererService;\n const {\n width,\n height\n } = getViewportSize();\n // 创建 picking framebuffer,后续实时 resize\n const pickingColorTexture = createTexture2D({\n width,\n height,\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n label: 'Picking Texture'\n });\n this.pickingFBO = createFramebuffer({\n color: pickingColorTexture\n });\n\n // 监听 hover 事件\n this.interactionService.on(InteractionEvent.Hover, this.pickFromPickingFBO);\n this.interactionService.on(InteractionEvent.Select, this.selectFeatureHandle.bind(this));\n this.interactionService.on(InteractionEvent.Active, this.highlightFeatureHandle.bind(this));\n }\n render(layer) {\n if (this.alreadyInRendering) {\n return;\n }\n const {\n getViewportSize,\n useFramebuffer,\n clear\n } = this.rendererService;\n const {\n width,\n height\n } = getViewportSize();\n\n // throttled\n this.alreadyInRendering = true;\n\n // resize first, fbo can't be resized in use\n if (this.width !== width || this.height !== height) {\n this.pickingFBO.resize({\n width,\n height\n });\n this.width = width;\n this.height = height;\n }\n useFramebuffer(this.pickingFBO, () => {\n clear({\n framebuffer: this.pickingFBO,\n color: [0, 0, 0, 0],\n stencil: 0,\n depth: 1\n });\n\n /**\n * picking pass 不需要 multipass,原因如下:\n * 1. 已经 clear,无需 ClearPass\n * 2. 只需要 RenderPass\n * 3. 后处理 pass 需要跳过\n */\n const originRenderFlag = this.layer.multiPassRenderer.getRenderFlag();\n this.layer.multiPassRenderer.setRenderFlag(false);\n // trigger hooks\n layer.hooks.beforePickingEncode.call();\n layer.render();\n layer.hooks.afterPickingEncode.call();\n this.layer.multiPassRenderer.setRenderFlag(originRenderFlag);\n this.alreadyInRendering = false;\n });\n }\n triggerHoverOnLayer(target) {\n this.layer.emit(target.type, target);\n }\n\n /**\n * highlight 如果直接修改选中 feature 的 buffer,存在两个问题:\n * 1. 鼠标移走时无法恢复\n * 2. 无法实现高亮颜色与原始原色的 alpha 混合\n * 因此高亮还是放在 shader 中做比较好\n * @example\n * this.layer.color('name', ['#000000'], {\n * featureRange: {\n * startIndex: pickedFeatureIdx,\n * endIndex: pickedFeatureIdx + 1,\n * },\n * });\n */\n highlightPickedFeature(pickedColors) {\n // @ts-ignore\n const [r, g, b] = pickedColors;\n this.layer.hooks.beforeHighlight.call([r, g, b]);\n this.layerService.renderLayers();\n }\n selectFeature(pickedColors) {\n // @ts-ignore\n const [r, g, b] = pickedColors;\n this.layer.hooks.beforeSelect.call([r, g, b]);\n this.layerService.renderLayers();\n }\n selectFeatureHandle({\n featureId\n }) {\n const pickedColors = encodePickingColor(featureId);\n this.selectFeature(new Uint8Array(pickedColors));\n }\n highlightFeatureHandle({\n featureId\n }) {\n const pickedColors = encodePickingColor(featureId);\n this.highlightPickedFeature(new Uint8Array(pickedColors));\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { TextureUsage } from \"../ITexture2D\";\nimport { gl } from \"../gl\";\n\n/**\n * ported from Three.js EffectComposer\n * 后处理负责 pingpong read/write framebuffer,最后一个 pass 默认输出到屏幕\n */\nexport default class PostProcessor {\n constructor(rendererService) {\n _defineProperty(this, \"passes\", []);\n _defineProperty(this, \"readFBO\", void 0);\n _defineProperty(this, \"writeFBO\", void 0);\n this.rendererService = rendererService;\n this.init();\n }\n getReadFBO() {\n return this.readFBO;\n }\n getWriteFBO() {\n return this.writeFBO;\n }\n\n /**\n * 从当前的 framebuffer 中获取贴图\n * @returns\n */\n getCurrentFBOTex() {\n const {\n getViewportSize,\n createTexture2D\n } = this.rendererService;\n const {\n width,\n height\n } = getViewportSize();\n return createTexture2D({\n x: 0,\n y: 0,\n width,\n height,\n copy: true\n });\n }\n\n /**\n * 从 readFBO 中获取贴图\n * @returns\n */\n getReadFBOTex() {\n var _this = this;\n const {\n useFramebuffer\n } = this.rendererService;\n return new Promise(resolve => {\n useFramebuffer(this.readFBO, /*#__PURE__*/_asyncToGenerator(function* () {\n resolve(_this.getCurrentFBOTex());\n }));\n });\n }\n renderBloomPass(layer, pass) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n const tex = yield _this2.getReadFBOTex();\n // count 定义 bloom 交替绘制的次数\n let count = 0;\n while (count < 4) {\n yield pass.render(layer, tex);\n _this2.swap();\n count++;\n }\n })();\n }\n render(layer) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n for (let i = 0; i < _this3.passes.length; i++) {\n const pass = _this3.passes[i];\n // last pass should render to screen\n pass.setRenderToScreen(_this3.isLastEnabledPass(i));\n\n // await pass.render(layer);\n // // pingpong\n // if (i !== this.passes.length - 1) {\n // this.swap();\n // }\n if (pass.getName() === 'bloom') {\n yield _this3.renderBloomPass(layer, pass);\n } else {\n yield pass.render(layer);\n // pingpong\n if (i !== _this3.passes.length - 1) {\n _this3.swap();\n }\n }\n }\n })();\n }\n resize(width, height) {\n this.readFBO.resize({\n width,\n height\n });\n this.writeFBO.resize({\n width,\n height\n });\n }\n add(pass, layer, config) {\n pass.init(layer, config);\n this.passes.push(pass);\n }\n insert(pass, index, layer, config) {\n pass.init(layer, config);\n this.passes.splice(index, 0, pass);\n }\n getPostProcessingPassByName(name) {\n return this.passes.find(p => p.getName() === name);\n }\n init() {\n const {\n createFramebuffer,\n createTexture2D\n } = this.rendererService;\n this.readFBO = createFramebuffer({\n color: createTexture2D({\n width: 1,\n height: 1,\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n usage: TextureUsage.RENDER_TARGET\n })\n });\n this.writeFBO = createFramebuffer({\n color: createTexture2D({\n width: 1,\n height: 1,\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n usage: TextureUsage.RENDER_TARGET\n })\n });\n }\n isLastEnabledPass(index) {\n for (let i = index + 1; i < this.passes.length; i++) {\n if (this.passes[i].isEnabled()) {\n return false;\n }\n }\n return true;\n }\n swap() {\n const tmp = this.readFBO;\n this.readFBO = this.writeFBO;\n this.writeFBO = tmp;\n }\n}","import { PassType } from \"../IMultiPassRenderer\";\nimport BaseNormalPass from \"./BaseNormalPass\";\n\n/**\n * RenderPass,负责输出到后续 PostProcessor 的 readFBO 中\n */\nexport default class RenderPass extends BaseNormalPass {\n getType() {\n return PassType.Normal;\n }\n getName() {\n return 'render';\n }\n init(layer, config) {\n super.init(layer, config);\n }\n render(layer) {\n const {\n useFramebuffer,\n clear\n } = this.rendererService;\n const readFBO = layer.multiPassRenderer.getPostProcessor().getReadFBO();\n useFramebuffer(readFBO, () => {\n clear({\n color: [0, 0, 0, 0],\n depth: 1,\n stencil: 0,\n framebuffer: readFBO\n });\n // render to post processor\n layer.multiPassRenderer.setRenderFlag(false);\n // layer.render();\n\n layer.models.forEach(model => {\n model.draw({\n uniforms: layer.layerModel.getUninforms()\n });\n });\n layer.multiPassRenderer.setRenderFlag(true);\n });\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { lodashUtil } from '@antv/l7-utils';\n/* babel-plugin-inline-import '../../../../shaders/post-processing/bloom.glsl' */\nconst blur = \"varying vec2 v_UV;\\n\\nuniform float u_BloomFinal: 0.0;\\nuniform sampler2D u_Texture;\\nuniform sampler2D u_Texture2;\\n\\nuniform vec2 u_ViewportSize: [1.0, 1.0];\\nuniform float u_radius: 5.0;\\nuniform float u_intensity: 0.3;\\nuniform float u_baseRadio: 0.5;\\n\\n// https://github.com/Jam3/glsl-fast-gaussian-blur/blob/master/9.glsl\\nvec4 blur9(sampler2D image, vec2 uv, vec2 resolution, vec2 direction) {\\n vec4 color = vec4(0.0);\\n vec2 off1 = vec2(1.3846153846) * direction;\\n vec2 off2 = vec2(3.2307692308) * direction;\\n color += texture2D(image, uv) * 0.2270270270;\\n color += texture2D(image, uv + (off1 / resolution)) * 0.3162162162;\\n color += texture2D(image, uv - (off1 / resolution)) * 0.3162162162;\\n color += texture2D(image, uv + (off2 / resolution)) * 0.0702702703;\\n color += texture2D(image, uv - (off2 / resolution)) * 0.0702702703;\\n return color;\\n}\\n\\nfloat luminance(vec4 color) {\\n return 0.2125 * color.r + 0.7154 * color.g + 0.0721 * color.b;\\n}\\n\\nvoid main() {\\n // vec4 baseColor = texture2D(u_Texture, v_UV);\\n\\n float r = sqrt(u_radius);\\n\\n vec4 c1 = blur9(u_Texture, v_UV, u_ViewportSize, vec2(u_radius, 0.0));\\n // c1 *= luminance(c1);\\n vec4 c2 = blur9(u_Texture, v_UV, u_ViewportSize, vec2(0.0, u_radius));\\n // c2 *= luminance(c2);\\n vec4 c3 = blur9(u_Texture, v_UV, u_ViewportSize, vec2(r, r));\\n // c3 *= luminance(c3);\\n vec4 c4 = blur9(u_Texture, v_UV, u_ViewportSize, vec2(r, -r));\\n // c4 *= luminance(c4);\\n vec4 inbloomColor = (c1 + c2 + c3 + c4) * 0.25;\\n\\n // float lum = luminance(inbloomColor);\\n // inbloomColor.rgb *= lum;\\n\\n if(u_BloomFinal > 0.0) {\\n vec4 baseColor = texture2D(u_Texture2, v_UV);\\n float baselum = luminance(baseColor);\\n gl_FragColor = mix(inbloomColor, baseColor, u_baseRadio);\\n if(baselum <= 0.2) {\\n gl_FragColor = inbloomColor * u_intensity;\\n }\\n } else {\\n gl_FragColor = inbloomColor;\\n }\\n}\";\n/* babel-plugin-inline-import '../../../../shaders/post-processing/quad.glsl' */\nconst quad = \"attribute vec2 a_Position;\\n\\nvarying vec2 v_UV;\\n\\nvoid main() {\\n v_UV = 0.5 * (a_Position + 1.0);\\n gl_Position = vec4(a_Position, 0., 1.);\\n}\";\nimport BasePostProcessingPass from \"../BasePostProcessingPass\";\nconst {\n isNil\n} = lodashUtil;\nexport default class BloomPass extends BasePostProcessingPass {\n setupShaders() {\n this.shaderModuleService.registerModule('blur-pass', {\n vs: quad,\n fs: blur\n });\n const {\n vs,\n fs,\n uniforms\n } = this.shaderModuleService.getModule('blur-pass');\n const {\n width,\n height\n } = this.rendererService.getViewportSize();\n return {\n vs,\n fs,\n uniforms: _objectSpread(_objectSpread({}, uniforms), {}, {\n u_ViewportSize: [width, height]\n })\n };\n }\n convertOptionsToUniforms(options) {\n const uniforms = {};\n if (!isNil(options.bloomRadius)) {\n uniforms.u_radius = options.bloomRadius;\n }\n if (!isNil(options.bloomIntensity)) {\n uniforms.u_intensity = options.bloomIntensity;\n }\n if (!isNil(options.bloomBaseRadio)) {\n uniforms.u_baseRadio = options.bloomBaseRadio;\n }\n return uniforms;\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { lodashUtil } from '@antv/l7-utils';\n/* babel-plugin-inline-import '../../../../shaders/post-processing/blur.glsl' */\nconst blur = \"varying vec2 v_UV;\\n\\nuniform sampler2D u_Texture;\\n\\nuniform vec2 u_ViewportSize: [1.0, 1.0];\\nuniform vec2 u_BlurDir: [1.0, 0.0];\\n\\n// https://github.com/Jam3/glsl-fast-gaussian-blur/blob/master/9.glsl\\nvec4 blur9(sampler2D image, vec2 uv, vec2 resolution, vec2 direction) {\\n vec4 color = vec4(0.0);\\n vec2 off1 = vec2(1.3846153846) * direction;\\n vec2 off2 = vec2(3.2307692308) * direction;\\n color += texture2D(image, uv) * 0.2270270270;\\n color += texture2D(image, uv + (off1 / resolution)) * 0.3162162162;\\n color += texture2D(image, uv - (off1 / resolution)) * 0.3162162162;\\n color += texture2D(image, uv + (off2 / resolution)) * 0.0702702703;\\n color += texture2D(image, uv - (off2 / resolution)) * 0.0702702703;\\n return color;\\n}\\n\\nvoid main() {\\n gl_FragColor = blur9(u_Texture, v_UV, u_ViewportSize, u_BlurDir);\\n}\";\n/* babel-plugin-inline-import '../../../../shaders/post-processing/quad.glsl' */\nconst quad = \"attribute vec2 a_Position;\\n\\nvarying vec2 v_UV;\\n\\nvoid main() {\\n v_UV = 0.5 * (a_Position + 1.0);\\n gl_Position = vec4(a_Position, 0., 1.);\\n}\";\nimport BasePostProcessingPass from \"../BasePostProcessingPass\";\nconst {\n isNil\n} = lodashUtil;\nexport default class BlurHPass extends BasePostProcessingPass {\n setupShaders() {\n this.shaderModuleService.registerModule('blur-pass', {\n vs: quad,\n fs: blur\n });\n const {\n vs,\n fs,\n uniforms\n } = this.shaderModuleService.getModule('blur-pass');\n const {\n width,\n height\n } = this.rendererService.getViewportSize();\n return {\n vs,\n fs,\n uniforms: _objectSpread(_objectSpread({}, uniforms), {}, {\n u_ViewportSize: [width, height]\n })\n };\n }\n convertOptionsToUniforms(options) {\n const uniforms = {};\n if (!isNil(options.blurRadius)) {\n uniforms.u_BlurDir = [options.blurRadius, 0];\n }\n return uniforms;\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { lodashUtil } from '@antv/l7-utils';\n/* babel-plugin-inline-import '../../../../shaders/post-processing/blur.glsl' */\nconst blur = \"varying vec2 v_UV;\\n\\nuniform sampler2D u_Texture;\\n\\nuniform vec2 u_ViewportSize: [1.0, 1.0];\\nuniform vec2 u_BlurDir: [1.0, 0.0];\\n\\n// https://github.com/Jam3/glsl-fast-gaussian-blur/blob/master/9.glsl\\nvec4 blur9(sampler2D image, vec2 uv, vec2 resolution, vec2 direction) {\\n vec4 color = vec4(0.0);\\n vec2 off1 = vec2(1.3846153846) * direction;\\n vec2 off2 = vec2(3.2307692308) * direction;\\n color += texture2D(image, uv) * 0.2270270270;\\n color += texture2D(image, uv + (off1 / resolution)) * 0.3162162162;\\n color += texture2D(image, uv - (off1 / resolution)) * 0.3162162162;\\n color += texture2D(image, uv + (off2 / resolution)) * 0.0702702703;\\n color += texture2D(image, uv - (off2 / resolution)) * 0.0702702703;\\n return color;\\n}\\n\\nvoid main() {\\n gl_FragColor = blur9(u_Texture, v_UV, u_ViewportSize, u_BlurDir);\\n}\";\n/* babel-plugin-inline-import '../../../../shaders/post-processing/quad.glsl' */\nconst quad = \"attribute vec2 a_Position;\\n\\nvarying vec2 v_UV;\\n\\nvoid main() {\\n v_UV = 0.5 * (a_Position + 1.0);\\n gl_Position = vec4(a_Position, 0., 1.);\\n}\";\nimport BasePostProcessingPass from \"../BasePostProcessingPass\";\nconst {\n isNil\n} = lodashUtil;\nexport default class BlurVPass extends BasePostProcessingPass {\n setupShaders() {\n this.shaderModuleService.registerModule('blur-pass', {\n vs: quad,\n fs: blur\n });\n const {\n vs,\n fs,\n uniforms\n } = this.shaderModuleService.getModule('blur-pass');\n const {\n width,\n height\n } = this.rendererService.getViewportSize();\n return {\n vs,\n fs,\n uniforms: _objectSpread(_objectSpread({}, uniforms), {}, {\n u_ViewportSize: [width, height]\n })\n };\n }\n convertOptionsToUniforms(options) {\n const uniforms = {};\n if (!isNil(options.blurRadius)) {\n uniforms.u_BlurDir = [0, options.blurRadius];\n }\n return uniforms;\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n/* babel-plugin-inline-import '../../../../shaders/post-processing/colorhalftone.glsl' */\nconst colorHalftone = \"varying vec2 v_UV;\\n\\nuniform sampler2D u_Texture;\\nuniform vec2 u_ViewportSize: [1.0, 1.0];\\nuniform vec2 u_Center : [0.5, 0.5];\\nuniform float u_Angle : 0;\\nuniform float u_Size : 8;\\n\\n#pragma include \\\"common\\\"\\n\\nfloat scale = PI / u_Size;\\n\\nfloat pattern(float u_Angle, vec2 texSize, vec2 texCoord) {\\n float s = sin(u_Angle), c = cos(u_Angle);\\n vec2 tex = texCoord * texSize - u_Center * texSize;\\n vec2 point = vec2(\\n c * tex.x - s * tex.y,\\n s * tex.x + c * tex.y\\n ) * scale;\\n return (sin(point.x) * sin(point.y)) * 4.0;\\n}\\n\\n// https://github.com/evanw/glfx.js/blob/master/src/filters/fun/colorhalftone.js\\nvec4 colorHalftone_filterColor(vec4 color, vec2 texSize, vec2 texCoord) {\\n vec3 cmy = 1.0 - color.rgb;\\n float k = min(cmy.x, min(cmy.y, cmy.z));\\n cmy = (cmy - k) / (1.0 - k);\\n cmy = clamp(\\n cmy * 10.0 - 3.0 + vec3(\\n pattern(u_Angle + 0.26179, texSize, texCoord),\\n pattern(u_Angle + 1.30899, texSize, texCoord),\\n pattern(u_Angle, texSize, texCoord)\\n ),\\n 0.0,\\n 1.0\\n );\\n k = clamp(k * 10.0 - 5.0 + pattern(u_Angle + 0.78539, texSize, texCoord), 0.0, 1.0);\\n return vec4(1.0 - cmy - k, color.a);\\n}\\n\\nvoid main() {\\n gl_FragColor = vec4(texture2D(u_Texture, v_UV));\\n gl_FragColor = colorHalftone_filterColor(gl_FragColor, u_ViewportSize, v_UV);\\n}\";\n/* babel-plugin-inline-import '../../../../shaders/post-processing/quad.glsl' */\nconst quad = \"attribute vec2 a_Position;\\n\\nvarying vec2 v_UV;\\n\\nvoid main() {\\n v_UV = 0.5 * (a_Position + 1.0);\\n gl_Position = vec4(a_Position, 0., 1.);\\n}\";\nimport BasePostProcessingPass from \"../BasePostProcessingPass\";\nexport default class ColorHalftonePass extends BasePostProcessingPass {\n setupShaders() {\n this.shaderModuleService.registerModule('colorhalftone-pass', {\n vs: quad,\n fs: colorHalftone\n });\n const {\n vs,\n fs,\n uniforms\n } = this.shaderModuleService.getModule('colorhalftone-pass');\n const {\n width,\n height\n } = this.rendererService.getViewportSize();\n return {\n vs,\n fs,\n uniforms: _objectSpread(_objectSpread({}, uniforms), {}, {\n u_ViewportSize: [width, height]\n })\n };\n }\n}","/* babel-plugin-inline-import '../../../../shaders/post-processing/copy.glsl' */\nconst copy = \"varying vec2 v_UV;\\n\\nuniform sampler2D u_Texture;\\n\\nvoid main() {\\n gl_FragColor = vec4(texture2D(u_Texture, v_UV));\\n}\";\n/* babel-plugin-inline-import '../../../../shaders/post-processing/quad.glsl' */\nconst quad = \"attribute vec2 a_Position;\\n\\nvarying vec2 v_UV;\\n\\nvoid main() {\\n v_UV = 0.5 * (a_Position + 1.0);\\n gl_Position = vec4(a_Position, 0., 1.);\\n}\";\nimport BasePostProcessingPass from \"../BasePostProcessingPass\";\nexport default class CopyPass extends BasePostProcessingPass {\n setupShaders() {\n this.shaderModuleService.registerModule('copy-pass', {\n vs: quad,\n fs: copy\n });\n return this.shaderModuleService.getModule('copy-pass');\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n/* babel-plugin-inline-import '../../../../shaders/post-processing/hexagonalpixelate.glsl' */\nconst hexagonalPixelate = \"varying vec2 v_UV;\\n\\nuniform sampler2D u_Texture;\\nuniform vec2 u_ViewportSize: [1.0, 1.0];\\nuniform vec2 u_Center : [0.5, 0.5];\\nuniform float u_Scale : 10;\\n\\n// https://github.com/evanw/glfx.js/blob/master/src/filters/fun/hexagonalpixelate.js\\nvec4 hexagonalPixelate_sampleColor(sampler2D texture, vec2 texSize, vec2 texCoord) {\\n vec2 tex = (texCoord * texSize - u_Center * texSize) / u_Scale;\\n tex.y /= 0.866025404;\\n tex.x -= tex.y * 0.5;\\n vec2 a;\\n if (tex.x + tex.y - floor(tex.x) - floor(tex.y) < 1.0) {\\n a = vec2(floor(tex.x), floor(tex.y));\\n }\\n else a = vec2(ceil(tex.x), ceil(tex.y));\\n vec2 b = vec2(ceil(tex.x), floor(tex.y));\\n vec2 c = vec2(floor(tex.x), ceil(tex.y));\\n vec3 TEX = vec3(tex.x, tex.y, 1.0 - tex.x - tex.y);\\n vec3 A = vec3(a.x, a.y, 1.0 - a.x - a.y);\\n vec3 B = vec3(b.x, b.y, 1.0 - b.x - b.y);\\n vec3 C = vec3(c.x, c.y, 1.0 - c.x - c.y);\\n float alen = length(TEX - A);\\n float blen = length(TEX - B);\\n float clen = length(TEX - C);\\n vec2 choice;\\n if (alen < blen) {\\n if (alen < clen) choice = a;\\n else choice = c;\\n } else {\\n if (blen < clen) choice = b;\\n else choice = c;\\n }\\n choice.x += choice.y * 0.5;\\n choice.y *= 0.866025404;\\n choice *= u_Scale / texSize;\\n return texture2D(texture, choice + u_Center);\\n}\\n\\nvoid main() {\\n gl_FragColor = vec4(texture2D(u_Texture, v_UV));\\n gl_FragColor = hexagonalPixelate_sampleColor(u_Texture, u_ViewportSize, v_UV);\\n}\";\n/* babel-plugin-inline-import '../../../../shaders/post-processing/quad.glsl' */\nconst quad = \"attribute vec2 a_Position;\\n\\nvarying vec2 v_UV;\\n\\nvoid main() {\\n v_UV = 0.5 * (a_Position + 1.0);\\n gl_Position = vec4(a_Position, 0., 1.);\\n}\";\nimport BasePostProcessingPass from \"../BasePostProcessingPass\";\nexport default class HexagonalPixelatePass extends BasePostProcessingPass {\n setupShaders() {\n this.shaderModuleService.registerModule('hexagonalpixelate-pass', {\n vs: quad,\n fs: hexagonalPixelate\n });\n const {\n vs,\n fs,\n uniforms\n } = this.shaderModuleService.getModule('hexagonalpixelate-pass');\n const {\n width,\n height\n } = this.rendererService.getViewportSize();\n return {\n vs,\n fs,\n uniforms: _objectSpread(_objectSpread({}, uniforms), {}, {\n u_ViewportSize: [width, height]\n })\n };\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n/* babel-plugin-inline-import '../../../../shaders/post-processing/ink.glsl' */\nconst ink = \"varying vec2 v_UV;\\n\\nuniform sampler2D u_Texture;\\nuniform vec2 u_ViewportSize: [1.0, 1.0];\\nuniform float u_Strength : 0.6;\\n\\nvec4 ink_sampleColor(sampler2D texture, vec2 texSize, vec2 texCoord) {\\n vec2 dx = vec2(1.0 / texSize.x, 0.0);\\n vec2 dy = vec2(0.0, 1.0 / texSize.y);\\n vec4 color = texture2D(texture, texCoord);\\n float bigTotal = 0.0;\\n float smallTotal = 0.0;\\n vec3 bigAverage = vec3(0.0);\\n vec3 smallAverage = vec3(0.0);\\n for (float x = -2.0; x <= 2.0; x += 1.0) {\\n for (float y = -2.0; y <= 2.0; y += 1.0) {\\n vec3 sample = texture2D(texture, texCoord + dx * x + dy * y).rgb;\\n bigAverage += sample;\\n bigTotal += 1.0;\\n if (abs(x) + abs(y) < 2.0) {\\n smallAverage += sample;\\n smallTotal += 1.0;\\n }\\n }\\n }\\n vec3 edge = max(vec3(0.0), bigAverage / bigTotal - smallAverage / smallTotal);\\n float power = u_Strength * u_Strength * u_Strength * u_Strength * u_Strength;\\n return vec4(color.rgb - dot(edge, edge) * power * 100000.0, color.a);\\n}\\n\\nvoid main() {\\n gl_FragColor = vec4(texture2D(u_Texture, v_UV));\\n gl_FragColor = ink_sampleColor(u_Texture, u_ViewportSize, v_UV);\\n}\";\n/* babel-plugin-inline-import '../../../../shaders/post-processing/quad.glsl' */\nconst quad = \"attribute vec2 a_Position;\\n\\nvarying vec2 v_UV;\\n\\nvoid main() {\\n v_UV = 0.5 * (a_Position + 1.0);\\n gl_Position = vec4(a_Position, 0., 1.);\\n}\";\nimport BasePostProcessingPass from \"../BasePostProcessingPass\";\nexport default class InkPass extends BasePostProcessingPass {\n setupShaders() {\n this.shaderModuleService.registerModule('ink-pass', {\n vs: quad,\n fs: ink\n });\n const {\n vs,\n fs,\n uniforms\n } = this.shaderModuleService.getModule('ink-pass');\n const {\n width,\n height\n } = this.rendererService.getViewportSize();\n return {\n vs,\n fs,\n uniforms: _objectSpread(_objectSpread({}, uniforms), {}, {\n u_ViewportSize: [width, height]\n })\n };\n }\n}","/* babel-plugin-inline-import '../../../../shaders/post-processing/noise.glsl' */\nconst noise = \"varying vec2 v_UV;\\n\\nuniform sampler2D u_Texture;\\nuniform float u_Amount : 0.5;\\n\\nfloat rand(vec2 co) {\\n return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);\\n}\\n\\n// https://github.com/evanw/glfx.js/blob/master/src/filters/adjust/noise.js\\nvec4 noise_filterColor(vec4 color, vec2 texCoord) {\\n float diff = (rand(texCoord) - 0.5) * u_Amount;\\n color.r += diff;\\n color.g += diff;\\n color.b += diff;\\n return color;\\n}\\n\\nvoid main() {\\n gl_FragColor = vec4(texture2D(u_Texture, v_UV));\\n gl_FragColor = noise_filterColor(gl_FragColor, v_UV);\\n}\";\n/* babel-plugin-inline-import '../../../../shaders/post-processing/quad.glsl' */\nconst quad = \"attribute vec2 a_Position;\\n\\nvarying vec2 v_UV;\\n\\nvoid main() {\\n v_UV = 0.5 * (a_Position + 1.0);\\n gl_Position = vec4(a_Position, 0., 1.);\\n}\";\nimport BasePostProcessingPass from \"../BasePostProcessingPass\";\nexport default class NoisePass extends BasePostProcessingPass {\n setupShaders() {\n this.shaderModuleService.registerModule('noise-pass', {\n vs: quad,\n fs: noise\n });\n return this.shaderModuleService.getModule('noise-pass');\n }\n}","/* babel-plugin-inline-import '../../../../shaders/post-processing/quad.glsl' */\nconst quad = \"attribute vec2 a_Position;\\n\\nvarying vec2 v_UV;\\n\\nvoid main() {\\n v_UV = 0.5 * (a_Position + 1.0);\\n gl_Position = vec4(a_Position, 0., 1.);\\n}\";\n/* babel-plugin-inline-import '../../../../shaders/post-processing/sepia.glsl' */\nconst sepia = \"varying vec2 v_UV;\\n\\nuniform sampler2D u_Texture;\\n\\nuniform float u_Amount : 0.5;\\n\\n// https://github.com/evanw/glfx.js/blob/master/src/filters/adjust/sepia.js\\nvec4 sepia_filterColor(vec4 color) {\\n float r = color.r;\\n float g = color.g;\\n float b = color.b;\\n color.r =\\n min(1.0, (r * (1.0 - (0.607 * u_Amount))) + (g * (0.769 * u_Amount)) + (b * (0.189 * u_Amount)));\\n color.g = min(1.0, (r * 0.349 * u_Amount) + (g * (1.0 - (0.314 * u_Amount))) + (b * 0.168 * u_Amount));\\n color.b = min(1.0, (r * 0.272 * u_Amount) + (g * 0.534 * u_Amount) + (b * (1.0 - (0.869 * u_Amount))));\\n return color;\\n}\\n\\nvoid main() {\\n gl_FragColor = vec4(texture2D(u_Texture, v_UV));\\n gl_FragColor = sepia_filterColor(gl_FragColor);\\n}\";\nimport BasePostProcessingPass from \"../BasePostProcessingPass\";\nexport default class SepiaPass extends BasePostProcessingPass {\n setupShaders() {\n this.shaderModuleService.registerModule('sepia-pass', {\n vs: quad,\n fs: sepia\n });\n return this.shaderModuleService.getModule('sepia-pass');\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n/** Service interfaces */\n\n/** Service implements */\nimport FontService from \"./services/asset/FontService\";\nimport IconService from \"./services/asset/IconService\";\nimport CameraService from \"./services/camera/CameraService\";\nimport ControlService from \"./services/component/ControlService\";\nimport MarkerService from \"./services/component/MarkerService\";\nimport PopupService from \"./services/component/PopupService\";\nimport GlobalConfigService from \"./services/config/ConfigService\";\nimport CoordinateSystemService from \"./services/coordinate/CoordinateSystemService\";\nimport DebugService from \"./services/debug/DebugService\";\nimport InteractionService from \"./services/interaction/InteractionService\";\nimport PickingService from \"./services/interaction/PickingService\";\nimport LayerService from \"./services/layer/LayerService\";\nimport StyleAttributeService from \"./services/layer/StyleAttributeService\";\nimport SceneService from \"./services/scene/SceneService\";\nimport ShaderModuleService from \"./services/shader/ShaderModuleService\";\n\n/** PostProcessing passes */\n\nimport ClearPass from \"./services/renderer/passes/ClearPass\";\nimport MultiPassRenderer from \"./services/renderer/passes/MultiPassRenderer\";\nimport PixelPickingPass from \"./services/renderer/passes/PixelPickingPass\";\nimport PostProcessor from \"./services/renderer/passes/PostProcessor\";\nimport RenderPass from \"./services/renderer/passes/RenderPass\";\nimport BloomPass from \"./services/renderer/passes/post-processing/BloomPass\";\nimport BlurHPass from \"./services/renderer/passes/post-processing/BlurHPass\";\nimport BlurVPass from \"./services/renderer/passes/post-processing/BlurVPass\";\nimport ColorHalfTonePass from \"./services/renderer/passes/post-processing/ColorHalfTonePass\";\nimport CopyPass from \"./services/renderer/passes/post-processing/CopyPass\";\nimport HexagonalPixelatePass from \"./services/renderer/passes/post-processing/HexagonalPixelatePass\";\nimport InkPass from \"./services/renderer/passes/post-processing/InkPass\";\nimport NoisePass from \"./services/renderer/passes/post-processing/NoisePass\";\nimport SepiaPass from \"./services/renderer/passes/post-processing/SepiaPass\";\nexport const globalConfigService = new GlobalConfigService();\nlet sceneIdCounter = 0;\nexport function createSceneContainer() {\n const shaderModuleService = new ShaderModuleService();\n const debugService = new DebugService();\n const cameraService = new CameraService();\n const coordinateSystemService = new CoordinateSystemService(cameraService);\n const fontService = new FontService();\n const iconService = new IconService();\n const markerService = new MarkerService();\n const popupService = new PopupService();\n const controlService = new ControlService();\n\n // @ts-ignore\n const container = {\n id: `${sceneIdCounter++}`,\n globalConfigService,\n shaderModuleService,\n debugService,\n cameraService,\n coordinateSystemService,\n fontService,\n iconService,\n markerService,\n popupService,\n controlService,\n customRenderService: {}\n };\n\n // lazy binding\n const layerService = new LayerService(container);\n container.layerService = layerService;\n const sceneService = new SceneService(container);\n container.sceneService = sceneService;\n const interactionService = new InteractionService(container);\n container.interactionService = interactionService;\n const pickingService = new PickingService(container);\n container.pickingService = pickingService;\n const normalPass = {\n clear: new ClearPass(),\n pixelPicking: new PixelPickingPass(),\n render: new RenderPass()\n };\n container.normalPassFactory = named => {\n return normalPass[named];\n };\n const postProcessingPass = {\n copy: new CopyPass(),\n bloom: new BloomPass(),\n blurH: new BlurHPass(),\n blurV: new BlurVPass(),\n noise: new NoisePass(),\n sepia: new SepiaPass(),\n colorHalftone: new ColorHalfTonePass(),\n hexagonalPixelate: new HexagonalPixelatePass(),\n ink: new InkPass()\n };\n container.postProcessingPass = postProcessingPass;\n container.postProcessingPassFactory = named => {\n return postProcessingPass[named];\n };\n return container;\n}\nexport function createLayerContainer(sceneContainer) {\n const layerContainer = _objectSpread({}, sceneContainer);\n layerContainer.postProcessor = new PostProcessor(layerContainer.rendererService);\n layerContainer.multiPassRenderer = new MultiPassRenderer(layerContainer.postProcessor);\n layerContainer.styleAttributeService = new StyleAttributeService(layerContainer.rendererService);\n return layerContainer;\n}","// scene 事件\nexport const SceneEventList = ['loaded', 'fontloaded', 'maploaded', 'resize', 'destroy', 'dragstart', 'dragging', 'dragend', 'dragcancel'];","export function degToRad(deg) {\n return (deg * Math.PI) / 180;\n}\nexport function radToDeg(rad) {\n return Number(((rad * 180) / Math.PI).toPrecision(5));\n}\n//# sourceMappingURL=angle-converter.js.map","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","import { __assign, __extends, __read, __rest } from \"tslib\";\nimport { Component } from '../../../core';\nimport { classNames, ifShow, select, subStyleProps } from '../../../util';\nimport { Marker } from '../../marker';\nimport { ifHorizontal } from '../utils';\nvar CLASS_NAMES = classNames({\n markerGroup: 'marker-group',\n marker: 'marker',\n labelGroup: 'label-group',\n label: 'label',\n}, 'handle');\n// todo @xiaoiver, 配置 TEXT_INHERITABLE_PROPS 后文本包围盒依旧不准确\nexport var DEFAULT_HANDLE_CFG = {\n showLabel: true,\n formatter: function (val) { return val.toString(); },\n markerSize: 25,\n markerStroke: '#c5c5c5',\n markerFill: '#fff',\n markerLineWidth: 1,\n labelFontSize: 12,\n labelFill: '#c5c5c5',\n labelText: '',\n orientation: 'vertical',\n spacing: 0,\n};\nvar Handle = /** @class */ (function (_super) {\n __extends(Handle, _super);\n function Handle(options) {\n return _super.call(this, options, DEFAULT_HANDLE_CFG) || this;\n }\n Handle.prototype.render = function (attributes, container) {\n var markerGroup = select(container).maybeAppendByClassName(CLASS_NAMES.markerGroup, 'g');\n this.renderMarker(markerGroup);\n var labelGroup = select(container).maybeAppendByClassName(CLASS_NAMES.labelGroup, 'g');\n this.renderLabel(labelGroup);\n };\n Handle.prototype.renderMarker = function (container) {\n var _this = this;\n var _a = this.attributes, orientation = _a.orientation, _b = _a.markerSymbol, markerSymbol = _b === void 0 ? ifHorizontal(orientation, 'horizontalHandle', 'verticalHandle') : _b;\n ifShow(!!markerSymbol, container, function (group) {\n var handleStyle = subStyleProps(_this.attributes, 'marker');\n var markerStyle = __assign({ symbol: markerSymbol }, handleStyle);\n _this.marker = group\n .maybeAppendByClassName(CLASS_NAMES.marker, function () { return new Marker({ style: markerStyle }); })\n .update(markerStyle);\n });\n };\n Handle.prototype.renderLabel = function (container) {\n var _this = this;\n var _a = this.attributes, showLabel = _a.showLabel, orientation = _a.orientation, _b = _a.spacing, spacing = _b === void 0 ? 0 : _b, formatter = _a.formatter;\n ifShow(showLabel, container, function (group) {\n var _a;\n var _b = subStyleProps(_this.attributes, 'label'), text = _b.text, labelStyle = __rest(_b, [\"text\"]);\n // adjust layout\n var _c = ((_a = group.select(CLASS_NAMES.marker.class)) === null || _a === void 0 ? void 0 : _a.node().getBBox()) || {}, _d = _c.width, width = _d === void 0 ? 0 : _d, _e = _c.height, height = _e === void 0 ? 0 : _e;\n var _f = __read(ifHorizontal(orientation, [0, height + spacing, 'center', 'top'], [width + spacing, 0, 'start', 'middle']), 4), x = _f[0], y = _f[1], textAlign = _f[2], textBaseline = _f[3];\n group\n .maybeAppendByClassName(CLASS_NAMES.label, 'text')\n .styles(__assign(__assign({}, labelStyle), { x: x, y: y, text: formatter(text).toString(), textAlign: textAlign, textBaseline: textBaseline }));\n });\n };\n return Handle;\n}(Component));\nexport { Handle };\n//# sourceMappingURL=handle.js.map","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","export var paramsParser = {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n x: 0,\n y: 0,\n qx: null,\n qy: null,\n};\n//# sourceMappingURL=params-parser.js.map","import * as glMatrix from \"./common.js\";\nimport * as mat3 from \"./mat3.js\";\nimport * as vec3 from \"./vec3.js\";\nimport * as vec4 from \"./vec4.js\";\n/**\n * Quaternion\n * @module quat\n */\n\n/**\n * Creates a new identity quat\n *\n * @returns {quat} a new quaternion\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(4);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n out[3] = 1;\n return out;\n}\n/**\n * Set a quat to the identity quaternion\n *\n * @param {quat} out the receiving quaternion\n * @returns {quat} out\n */\n\nexport function identity(out) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n}\n/**\n * Sets a quat from the given angle and rotation axis,\n * then returns it.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyVec3} axis the axis around which to rotate\n * @param {Number} rad the angle in radians\n * @returns {quat} out\n **/\n\nexport function setAxisAngle(out, axis, rad) {\n rad = rad * 0.5;\n var s = Math.sin(rad);\n out[0] = s * axis[0];\n out[1] = s * axis[1];\n out[2] = s * axis[2];\n out[3] = Math.cos(rad);\n return out;\n}\n/**\n * Gets the rotation axis and angle for a given\n * quaternion. If a quaternion is created with\n * setAxisAngle, this method will return the same\n * values as providied in the original parameter list\n * OR functionally equivalent values.\n * Example: The quaternion formed by axis [0, 0, 1] and\n * angle -90 is the same as the quaternion formed by\n * [0, 0, 1] and 270. This method favors the latter.\n * @param {vec3} out_axis Vector receiving the axis of rotation\n * @param {ReadonlyQuat} q Quaternion to be decomposed\n * @return {Number} Angle, in radians, of the rotation\n */\n\nexport function getAxisAngle(out_axis, q) {\n var rad = Math.acos(q[3]) * 2.0;\n var s = Math.sin(rad / 2.0);\n\n if (s > glMatrix.EPSILON) {\n out_axis[0] = q[0] / s;\n out_axis[1] = q[1] / s;\n out_axis[2] = q[2] / s;\n } else {\n // If s is zero, return any axis (no rotation - axis does not matter)\n out_axis[0] = 1;\n out_axis[1] = 0;\n out_axis[2] = 0;\n }\n\n return rad;\n}\n/**\n * Gets the angular distance between two unit quaternions\n *\n * @param {ReadonlyQuat} a Origin unit quaternion\n * @param {ReadonlyQuat} b Destination unit quaternion\n * @return {Number} Angle, in radians, between the two quaternions\n */\n\nexport function getAngle(a, b) {\n var dotproduct = dot(a, b);\n return Math.acos(2 * dotproduct * dotproduct - 1);\n}\n/**\n * Multiplies two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {quat} out\n */\n\nexport function multiply(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n out[0] = ax * bw + aw * bx + ay * bz - az * by;\n out[1] = ay * bw + aw * by + az * bx - ax * bz;\n out[2] = az * bw + aw * bz + ax * by - ay * bx;\n out[3] = aw * bw - ax * bx - ay * by - az * bz;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the X axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateX(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw + aw * bx;\n out[1] = ay * bw + az * bx;\n out[2] = az * bw - ay * bx;\n out[3] = aw * bw - ax * bx;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the Y axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateY(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var by = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw - az * by;\n out[1] = ay * bw + aw * by;\n out[2] = az * bw + ax * by;\n out[3] = aw * bw - ay * by;\n return out;\n}\n/**\n * Rotates a quaternion by the given angle about the Z axis\n *\n * @param {quat} out quat receiving operation result\n * @param {ReadonlyQuat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\n\nexport function rotateZ(out, a, rad) {\n rad *= 0.5;\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bz = Math.sin(rad),\n bw = Math.cos(rad);\n out[0] = ax * bw + ay * bz;\n out[1] = ay * bw - ax * bz;\n out[2] = az * bw + aw * bz;\n out[3] = aw * bw - az * bz;\n return out;\n}\n/**\n * Calculates the W component of a quat from the X, Y, and Z components.\n * Assumes that quaternion is 1 unit in length.\n * Any existing W component will be ignored.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate W component of\n * @returns {quat} out\n */\n\nexport function calculateW(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));\n return out;\n}\n/**\n * Calculate the exponential of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @returns {quat} out\n */\n\nexport function exp(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n var r = Math.sqrt(x * x + y * y + z * z);\n var et = Math.exp(w);\n var s = r > 0 ? et * Math.sin(r) / r : 0;\n out[0] = x * s;\n out[1] = y * s;\n out[2] = z * s;\n out[3] = et * Math.cos(r);\n return out;\n}\n/**\n * Calculate the natural logarithm of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @returns {quat} out\n */\n\nexport function ln(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n var r = Math.sqrt(x * x + y * y + z * z);\n var t = r > 0 ? Math.atan2(r, w) / r : 0;\n out[0] = x * t;\n out[1] = y * t;\n out[2] = z * t;\n out[3] = 0.5 * Math.log(x * x + y * y + z * z + w * w);\n return out;\n}\n/**\n * Calculate the scalar power of a unit quaternion.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate the exponential of\n * @param {Number} b amount to scale the quaternion by\n * @returns {quat} out\n */\n\nexport function pow(out, a, b) {\n ln(out, a);\n scale(out, out, b);\n exp(out, out);\n return out;\n}\n/**\n * Performs a spherical linear interpolation between two quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n */\n\nexport function slerp(out, a, b, t) {\n // benchmarks:\n // http://jsperf.com/quaternion-slerp-implementations\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n var bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n var omega, cosom, sinom, scale0, scale1; // calc cosine\n\n cosom = ax * bx + ay * by + az * bz + aw * bw; // adjust signs (if necessary)\n\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n } // calculate coefficients\n\n\n if (1.0 - cosom > glMatrix.EPSILON) {\n // standard case (slerp)\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n // \"from\" and \"to\" quaternions are very close\n // ... so we can do a linear interpolation\n scale0 = 1.0 - t;\n scale1 = t;\n } // calculate final values\n\n\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n}\n/**\n * Generates a random unit quaternion\n *\n * @param {quat} out the receiving quaternion\n * @returns {quat} out\n */\n\nexport function random(out) {\n // Implementation of http://planning.cs.uiuc.edu/node198.html\n // TODO: Calling random 3 times is probably not the fastest solution\n var u1 = glMatrix.RANDOM();\n var u2 = glMatrix.RANDOM();\n var u3 = glMatrix.RANDOM();\n var sqrt1MinusU1 = Math.sqrt(1 - u1);\n var sqrtU1 = Math.sqrt(u1);\n out[0] = sqrt1MinusU1 * Math.sin(2.0 * Math.PI * u2);\n out[1] = sqrt1MinusU1 * Math.cos(2.0 * Math.PI * u2);\n out[2] = sqrtU1 * Math.sin(2.0 * Math.PI * u3);\n out[3] = sqrtU1 * Math.cos(2.0 * Math.PI * u3);\n return out;\n}\n/**\n * Calculates the inverse of a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate inverse of\n * @returns {quat} out\n */\n\nexport function invert(out, a) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3;\n var invDot = dot ? 1.0 / dot : 0; // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\n\n out[0] = -a0 * invDot;\n out[1] = -a1 * invDot;\n out[2] = -a2 * invDot;\n out[3] = a3 * invDot;\n return out;\n}\n/**\n * Calculates the conjugate of a quat\n * If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quat to calculate conjugate of\n * @returns {quat} out\n */\n\nexport function conjugate(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 * Creates a quaternion from the given 3x3 rotation matrix.\n *\n * NOTE: The resultant quaternion is not normalized, so you should be sure\n * to renormalize the quaternion yourself where necessary.\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyMat3} m rotation matrix\n * @returns {quat} out\n * @function\n */\n\nexport function fromMat3(out, m) {\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n var fTrace = m[0] + m[4] + m[8];\n var fRoot;\n\n if (fTrace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n fRoot = Math.sqrt(fTrace + 1.0); // 2w\n\n out[3] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot; // 1/(4w)\n\n out[0] = (m[5] - m[7]) * fRoot;\n out[1] = (m[6] - m[2]) * fRoot;\n out[2] = (m[1] - m[3]) * fRoot;\n } else {\n // |w| <= 1/2\n var i = 0;\n if (m[4] > m[0]) i = 1;\n if (m[8] > m[i * 3 + i]) i = 2;\n var j = (i + 1) % 3;\n var k = (i + 2) % 3;\n fRoot = Math.sqrt(m[i * 3 + i] - m[j * 3 + j] - m[k * 3 + k] + 1.0);\n out[i] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot;\n out[3] = (m[j * 3 + k] - m[k * 3 + j]) * fRoot;\n out[j] = (m[j * 3 + i] + m[i * 3 + j]) * fRoot;\n out[k] = (m[k * 3 + i] + m[i * 3 + k]) * fRoot;\n }\n\n return out;\n}\n/**\n * Creates a quaternion from the given euler angle x, y, z.\n *\n * @param {quat} out the receiving quaternion\n * @param {x} Angle to rotate around X axis in degrees.\n * @param {y} Angle to rotate around Y axis in degrees.\n * @param {z} Angle to rotate around Z axis in degrees.\n * @returns {quat} out\n * @function\n */\n\nexport function fromEuler(out, x, y, z) {\n var halfToRad = 0.5 * Math.PI / 180.0;\n x *= halfToRad;\n y *= halfToRad;\n z *= halfToRad;\n var sx = Math.sin(x);\n var cx = Math.cos(x);\n var sy = Math.sin(y);\n var cy = Math.cos(y);\n var sz = Math.sin(z);\n var cz = Math.cos(z);\n out[0] = sx * cy * cz - cx * sy * sz;\n out[1] = cx * sy * cz + sx * cy * sz;\n out[2] = cx * cy * sz - sx * sy * cz;\n out[3] = cx * cy * cz + sx * sy * sz;\n return out;\n}\n/**\n * Returns a string representation of a quatenion\n *\n * @param {ReadonlyQuat} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n return \"quat(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n/**\n * Creates a new quat initialized with values from an existing quaternion\n *\n * @param {ReadonlyQuat} a quaternion to clone\n * @returns {quat} a new quaternion\n * @function\n */\n\nexport var clone = vec4.clone;\n/**\n * Creates a new quat 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 {quat} a new quaternion\n * @function\n */\n\nexport var fromValues = vec4.fromValues;\n/**\n * Copy the values from one quat to another\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the source quaternion\n * @returns {quat} out\n * @function\n */\n\nexport var copy = vec4.copy;\n/**\n * Set the components of a quat to the given values\n *\n * @param {quat} out the receiving quaternion\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 {quat} out\n * @function\n */\n\nexport var set = vec4.set;\n/**\n * Adds two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {quat} out\n * @function\n */\n\nexport var add = vec4.add;\n/**\n * Alias for {@link quat.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Scales a quat by a scalar number\n *\n * @param {quat} out the receiving vector\n * @param {ReadonlyQuat} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {quat} out\n * @function\n */\n\nexport var scale = vec4.scale;\n/**\n * Calculates the dot product of two quat's\n *\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @returns {Number} dot product of a and b\n * @function\n */\n\nexport var dot = vec4.dot;\n/**\n * Performs a linear interpolation between two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n * @function\n */\n\nexport var lerp = vec4.lerp;\n/**\n * Calculates the length of a quat\n *\n * @param {ReadonlyQuat} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport var length = vec4.length;\n/**\n * Alias for {@link quat.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Calculates the squared length of a quat\n *\n * @param {ReadonlyQuat} a vector to calculate squared length of\n * @returns {Number} squared length of a\n * @function\n */\n\nexport var squaredLength = vec4.squaredLength;\n/**\n * Alias for {@link quat.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Normalize a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a quaternion to normalize\n * @returns {quat} out\n * @function\n */\n\nexport var normalize = vec4.normalize;\n/**\n * Returns whether or not the quaternions have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyQuat} a The first quaternion.\n * @param {ReadonlyQuat} b The second quaternion.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport var exactEquals = vec4.exactEquals;\n/**\n * Returns whether or not the quaternions have approximately the same elements in the same position.\n *\n * @param {ReadonlyQuat} a The first vector.\n * @param {ReadonlyQuat} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport var equals = vec4.equals;\n/**\n * Sets a quaternion to represent the shortest rotation from one\n * vector to another.\n *\n * Both vectors are assumed to be unit length.\n *\n * @param {quat} out the receiving quaternion.\n * @param {ReadonlyVec3} a the initial vector\n * @param {ReadonlyVec3} b the destination vector\n * @returns {quat} out\n */\n\nexport var rotationTo = function () {\n var tmpvec3 = vec3.create();\n var xUnitVec3 = vec3.fromValues(1, 0, 0);\n var yUnitVec3 = vec3.fromValues(0, 1, 0);\n return function (out, a, b) {\n var dot = vec3.dot(a, b);\n\n if (dot < -0.999999) {\n vec3.cross(tmpvec3, xUnitVec3, a);\n if (vec3.len(tmpvec3) < 0.000001) vec3.cross(tmpvec3, yUnitVec3, a);\n vec3.normalize(tmpvec3, tmpvec3);\n setAxisAngle(out, tmpvec3, Math.PI);\n return out;\n } else if (dot > 0.999999) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n } else {\n vec3.cross(tmpvec3, a, b);\n out[0] = tmpvec3[0];\n out[1] = tmpvec3[1];\n out[2] = tmpvec3[2];\n out[3] = 1 + dot;\n return normalize(out, out);\n }\n };\n}();\n/**\n * Performs a spherical linear interpolation with two control points\n *\n * @param {quat} out the receiving quaternion\n * @param {ReadonlyQuat} a the first operand\n * @param {ReadonlyQuat} b the second operand\n * @param {ReadonlyQuat} c the third operand\n * @param {ReadonlyQuat} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {quat} out\n */\n\nexport var sqlerp = function () {\n var temp1 = create();\n var temp2 = create();\n return function (out, a, b, c, d, t) {\n slerp(temp1, a, d, t);\n slerp(temp2, b, c, t);\n slerp(out, temp1, temp2, 2 * t * (1 - t));\n return out;\n };\n}();\n/**\n * Sets the specified quaternion with values corresponding to the given\n * axes. Each axis is a vec3 and is expected to be unit length and\n * perpendicular to all other specified axes.\n *\n * @param {ReadonlyVec3} view the vector representing the viewing direction\n * @param {ReadonlyVec3} right the vector representing the local \"right\" direction\n * @param {ReadonlyVec3} up the vector representing the local \"up\" direction\n * @returns {quat} out\n */\n\nexport var setAxes = function () {\n var matr = mat3.create();\n return function (out, view, right, up) {\n matr[0] = right[0];\n matr[3] = right[1];\n matr[6] = right[2];\n matr[1] = up[0];\n matr[4] = up[1];\n matr[7] = up[2];\n matr[2] = -view[0];\n matr[5] = -view[1];\n matr[8] = -view[2];\n return normalize(out, fromMat3(out, matr));\n };\n}();","/**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseIndexOfWith;\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","import * as React from 'react';\n/** Used for each single Panel. e.g. DatePanel */\nexport var PanelContext = /*#__PURE__*/React.createContext(null);\nexport function usePanelContext() {\n return React.useContext(PanelContext);\n}\n\n/**\n * Get shared props for the SharedPanelProps interface.\n */\nexport function useInfo(props, panelType) {\n var prefixCls = props.prefixCls,\n generateConfig = props.generateConfig,\n locale = props.locale,\n disabledDate = props.disabledDate,\n minDate = props.minDate,\n maxDate = props.maxDate,\n cellRender = props.cellRender,\n hoverValue = props.hoverValue,\n hoverRangeValue = props.hoverRangeValue,\n onHover = props.onHover,\n values = props.values,\n pickerValue = props.pickerValue,\n onSelect = props.onSelect,\n prevIcon = props.prevIcon,\n nextIcon = props.nextIcon,\n superPrevIcon = props.superPrevIcon,\n superNextIcon = props.superNextIcon;\n\n // ========================= MISC =========================\n var now = generateConfig.getNow();\n\n // ========================= Info =========================\n var info = {\n now: now,\n values: values,\n pickerValue: pickerValue,\n prefixCls: prefixCls,\n disabledDate: disabledDate,\n minDate: minDate,\n maxDate: maxDate,\n cellRender: cellRender,\n hoverValue: hoverValue,\n hoverRangeValue: hoverRangeValue,\n onHover: onHover,\n locale: locale,\n generateConfig: generateConfig,\n onSelect: onSelect,\n panelType: panelType,\n // Icons\n prevIcon: prevIcon,\n nextIcon: nextIcon,\n superPrevIcon: superPrevIcon,\n superNextIcon: superNextIcon\n };\n return [info, now];\n}\n\n// ============================== Internal ==============================\n\n/**\n * Internal usage for RangePicker to not to show the operation arrow\n */\nexport var PickerHackContext = /*#__PURE__*/React.createContext({});\nif (process.env.NODE_ENV !== 'production') {\n PickerHackContext.displayName = 'PickerHackContext';\n}","// src/tileset-manager/types.ts\nvar UpdateTileStrategy = /* @__PURE__ */ ((UpdateTileStrategy2) => {\n UpdateTileStrategy2[\"Realtime\"] = \"realtime\";\n UpdateTileStrategy2[\"Overlap\"] = \"overlap\";\n UpdateTileStrategy2[\"Replace\"] = \"replace\";\n return UpdateTileStrategy2;\n})(UpdateTileStrategy || {});\nvar LoadTileDataStatus = /* @__PURE__ */ ((LoadTileDataStatus2) => {\n LoadTileDataStatus2[\"Loading\"] = \"Loading\";\n LoadTileDataStatus2[\"Loaded\"] = \"Loaded\";\n LoadTileDataStatus2[\"Failure\"] = \"Failure\";\n LoadTileDataStatus2[\"Cancelled\"] = \"Cancelled\";\n return LoadTileDataStatus2;\n})(LoadTileDataStatus || {});\nexport {\n LoadTileDataStatus,\n UpdateTileStrategy\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/tileset-manager/tileset-manager.ts\nimport EventEmitter from \"eventemitter3\";\nimport { lodashUtil } from \"../lodash-adapter\";\nimport {\n BOUNDS_BUFFER_SCALE,\n DEFAULT_CACHE_SCALE,\n DEFAULT_EXTENT,\n NOOP,\n UPDATE_TILE_STRATEGIES\n} from \"./const\";\nimport { SourceTile } from \"./tile\";\nimport { UpdateTileStrategy } from \"./types\";\nimport { getLatLonBoundsBuffer, isLatLonBoundsContains } from \"./utils/bound-buffer\";\nimport { getTileIndices, osmLonLat2TileXY } from \"./utils/lonlat-tile\";\nvar { throttle } = lodashUtil;\nvar TileEventType = /* @__PURE__ */ ((TileEventType2) => {\n TileEventType2[\"TilesLoadStart\"] = \"tiles-load-start\";\n TileEventType2[\"TileLoaded\"] = \"tile-loaded\";\n TileEventType2[\"TileError\"] = \"tile-error\";\n TileEventType2[\"TileUnload\"] = \"tile-unload\";\n TileEventType2[\"TileUpdate\"] = \"tile-update\";\n TileEventType2[\"TilesLoadFinished\"] = \"tiles-load-finished\";\n return TileEventType2;\n})(TileEventType || {});\nvar TilesetManager = class extends EventEmitter {\n constructor(options) {\n super();\n // 当前层级的瓦片\n this.currentTiles = [];\n // 缓存的瓦片,key 为 {z}-{x}-{y}\n this.cacheTiles = /* @__PURE__ */ new Map();\n this.throttleUpdate = throttle((zoom, latLonBounds) => {\n this.update(zoom, latLonBounds);\n }, 16);\n // 瓦片加载成功回调\n this.onTileLoad = (tile) => {\n this.emit(\"tile-loaded\" /* TileLoaded */, tile);\n this.updateTileVisible();\n this.loadFinished();\n };\n // 瓦片加载失败回调\n this.onTileError = (error, tile) => {\n this.emit(\"tile-error\" /* TileError */, { error, tile });\n this.updateTileVisible();\n this.loadFinished();\n };\n // 瓦片被删除回调\n this.onTileUnload = (tile) => {\n this.emit(\"tile-unload\" /* TileUnload */, tile);\n this.loadFinished();\n };\n this.options = {\n tileSize: 256,\n minZoom: 0,\n maxZoom: Infinity,\n zoomOffset: 0,\n extent: DEFAULT_EXTENT,\n getTileData: NOOP,\n warp: true,\n // TODO 更新策略\n updateStrategy: UpdateTileStrategy.Replace\n };\n this.updateOptions(options);\n }\n get isLoaded() {\n return this.currentTiles.every((tile) => tile.isDone);\n }\n // 缓存的瓦片数组\n get tiles() {\n const tiles = Array.from(this.cacheTiles.values()).sort((t1, t2) => t1.z - t2.z);\n return tiles;\n }\n // 更新配置项\n updateOptions(options) {\n const minZoom = options.minZoom === void 0 ? this.options.minZoom : Math.ceil(options.minZoom);\n const maxZoom = options.maxZoom === void 0 ? this.options.maxZoom : Math.floor(options.maxZoom);\n this.options = __spreadProps(__spreadValues(__spreadValues({}, this.options), options), { minZoom, maxZoom });\n }\n // 更新\n // 1.瓦片序号发生改变 2.瓦片新增 3.瓦片显隐控制\n update(zoom, latLonBounds) {\n const verifyZoom = Math.max(0, Math.ceil(zoom));\n if (this.lastViewStates && this.lastViewStates.zoom === verifyZoom && isLatLonBoundsContains(this.lastViewStates.latLonBoundsBuffer, latLonBounds)) {\n return;\n }\n const latLonBoundsBuffer = getLatLonBoundsBuffer(latLonBounds, BOUNDS_BUFFER_SCALE);\n this.lastViewStates = {\n zoom: verifyZoom,\n latLonBounds,\n latLonBoundsBuffer\n };\n this.currentZoom = verifyZoom;\n let isAddTile = false;\n const tileIndices = this.getTileIndices(verifyZoom, latLonBoundsBuffer).filter((tile) => {\n return this.options.warp || tile.x >= 0 && tile.x < Math.pow(2, verifyZoom);\n });\n this.emit(\"tiles-load-start\" /* TilesLoadStart */);\n this.currentTiles = tileIndices.map(({ x, y, z }) => {\n let tile = this.getTile(x, y, z);\n if (tile) {\n const needsReload = (tile == null ? void 0 : tile.isFailure) || (tile == null ? void 0 : tile.isCancelled);\n if (needsReload) {\n tile.loadData({\n getData: this.options.getTileData,\n onLoad: this.onTileLoad,\n onError: this.onTileError\n });\n }\n return tile;\n }\n tile = this.createTile(x, y, z);\n isAddTile = true;\n return tile;\n });\n if (isAddTile) {\n this.resizeCacheTiles();\n }\n this.updateTileVisible();\n this.pruneRequests();\n }\n // 重新加载瓦片\n reloadAll() {\n for (const [tileId, tile] of this.cacheTiles) {\n if (!this.currentTiles.includes(tile)) {\n this.cacheTiles.delete(tileId);\n this.onTileUnload(tile);\n return;\n }\n this.onTileUnload(tile);\n tile.loadData({\n getData: this.options.getTileData,\n onLoad: this.onTileLoad,\n onError: this.onTileError\n });\n }\n }\n reloadTileById(z, x, y) {\n const tile = this.cacheTiles.get(`${x},${y},${z}`);\n if (tile) {\n this.onTileUnload(tile);\n tile.loadData({\n getData: this.options.getTileData,\n onLoad: this.onTileLoad,\n onError: this.onTileError\n });\n }\n }\n reloadTileByLnglat(lng, lat, z) {\n const tile = this.getTileByLngLat(lng, lat, z);\n if (tile) {\n this.reloadTileById(tile.z, tile.x, tile.y);\n }\n }\n reloadTileByExtent(extent, z) {\n const tiles = this.getTileIndices(z, extent);\n tiles.forEach((tile) => {\n this.reloadTileById(tile.z, tile.x, tile.y);\n });\n }\n // 取消滞留请求中的瓦片\n pruneRequests() {\n const abortCandidates = [];\n for (const tile of this.cacheTiles.values()) {\n if (tile.isLoading) {\n if (!tile.isCurrent && !tile.isVisible) {\n abortCandidates.push(tile);\n }\n }\n }\n while (abortCandidates.length > 0) {\n const tile = abortCandidates.shift();\n tile.abortLoad();\n }\n }\n getTileByLngLat(lng, lat, zoom) {\n const { zoomOffset } = this.options;\n const z = Math.ceil(zoom) + zoomOffset;\n const xy = osmLonLat2TileXY(lng, lat, z);\n const tiles = this.tiles.filter((t) => t.key === `${xy[0]}_${xy[1]}_${z}`);\n return tiles[0];\n }\n getTileExtent(extent, zoom) {\n return this.getTileIndices(zoom, extent);\n }\n getTileByZXY(z, x, y) {\n const tile = this.tiles.filter((t) => t.key === `${x}_${y}_${z}`);\n return tile[0];\n }\n // 摧毁\n clear() {\n for (const tile of this.cacheTiles.values()) {\n if (tile.isLoading) {\n tile.abortLoad();\n } else {\n this.onTileUnload(tile);\n }\n }\n this.lastViewStates = void 0;\n this.cacheTiles.clear();\n this.currentTiles = [];\n }\n // 摧毁\n destroy() {\n this.clear();\n this.removeAllListeners();\n }\n // 更新瓦片显隐状态\n updateTileVisible() {\n const updateStrategy = this.options.updateStrategy;\n const beforeVisible = /* @__PURE__ */ new Map();\n for (const tile of this.cacheTiles.values()) {\n beforeVisible.set(tile.key, tile.isVisible);\n tile.isCurrent = false;\n tile.isVisible = false;\n }\n for (const tile of this.currentTiles) {\n tile.isCurrent = true;\n tile.isVisible = true;\n }\n const tiles = Array.from(this.cacheTiles.values());\n if (typeof updateStrategy === \"function\") {\n updateStrategy(tiles);\n } else {\n UPDATE_TILE_STRATEGIES[updateStrategy](tiles);\n }\n let isVisibleChange = false;\n Array.from(this.cacheTiles.values()).forEach((tile) => {\n if (tile.isVisible !== beforeVisible.get(tile.key)) {\n tile.isVisibleChange = true;\n isVisibleChange = true;\n } else {\n tile.isVisibleChange = false;\n }\n });\n if (isVisibleChange) {\n this.emit(\"tile-update\" /* TileUpdate */);\n }\n }\n // 获取当前视野层级瓦片的所有索引\n getTileIndices(zoom, latLonBounds) {\n const { tileSize, extent, zoomOffset } = this.options;\n const maxZoom = Math.floor(this.options.maxZoom);\n const minZoom = Math.ceil(this.options.minZoom);\n const indices = getTileIndices({\n maxZoom,\n minZoom,\n zoomOffset,\n tileSize,\n zoom,\n latLonBounds,\n extent\n });\n return indices;\n }\n // 获取瓦片 ID\n getTileId(x, y, z) {\n const tileId = `${x},${y},${z}`;\n return tileId;\n }\n loadFinished() {\n const finish = !this.currentTiles.some((t) => !t.isDone);\n if (finish) {\n this.emit(\"tiles-load-finished\" /* TilesLoadFinished */);\n }\n return finish;\n }\n // 获取瓦片\n getTile(x, y, z) {\n const tileId = this.getTileId(x, y, z);\n const tile = this.cacheTiles.get(tileId);\n return tile;\n }\n // 创建瓦片\n createTile(x, y, z) {\n const tileId = this.getTileId(x, y, z);\n const tile = new SourceTile({\n x,\n y,\n z,\n tileSize: this.options.tileSize,\n warp: this.options.warp\n });\n this.cacheTiles.set(tileId, tile);\n tile.loadData({\n getData: this.options.getTileData,\n onLoad: this.onTileLoad,\n onError: this.onTileError\n });\n return tile;\n }\n // 当缓存超过最大值时,清除不可见的瓦片\n resizeCacheTiles() {\n const maxCacheSize = DEFAULT_CACHE_SCALE * this.currentTiles.length;\n const overflown = this.cacheTiles.size > maxCacheSize;\n if (overflown) {\n for (const [tileId, tile] of this.cacheTiles) {\n if (!tile.isVisible && !this.currentTiles.includes(tile)) {\n this.cacheTiles.delete(tileId);\n this.onTileUnload(tile);\n }\n if (this.cacheTiles.size <= maxCacheSize) {\n break;\n }\n }\n }\n this.rebuildTileTree();\n }\n // 重新计算瓦片树\n rebuildTileTree() {\n for (const tile of this.cacheTiles.values()) {\n tile.parent = null;\n tile.children.length = 0;\n }\n for (const tile of this.cacheTiles.values()) {\n const parent = this.getNearestAncestor(tile.x, tile.y, tile.z);\n tile.parent = parent;\n if (parent == null ? void 0 : parent.children) {\n parent.children.push(tile);\n }\n }\n }\n // 获取瓦片的最近上级的瓦片\n getNearestAncestor(x, y, z) {\n while (z > this.options.minZoom) {\n x = Math.floor(x / 2);\n y = Math.floor(y / 2);\n z = z - 1;\n const parent = this.getTile(x, y, z);\n if (parent) {\n return parent;\n }\n }\n return null;\n }\n};\nexport {\n TileEventType,\n TilesetManager\n};\n","// src/tileset-manager/utils/strategies.ts\nvar TILE_STATE_DEFAULT = 0;\nvar TILE_STATE_VISITED = 1;\nvar TILE_STATE_VISIBLE = 2;\nfunction updateTileStateRealtime(tiles) {\n tiles.forEach((tile) => {\n if (tile.isCurrent) {\n tile.isVisible = tile.isLoaded;\n }\n });\n}\nfunction updateTileStateOverlap(tiles) {\n tiles.forEach((tile) => {\n tile.properties.state = TILE_STATE_DEFAULT;\n });\n tiles.forEach((tile) => {\n if (tile.isCurrent && !getPlaceholderInAncestors(tile)) {\n getPlaceholderInChildren(tile);\n }\n });\n tiles.forEach((tile) => {\n tile.isVisible = Boolean(tile.properties.state & TILE_STATE_VISIBLE);\n });\n}\nfunction updateTileStateReplace(tiles) {\n tiles.forEach((tile) => {\n tile.properties.state = TILE_STATE_DEFAULT;\n });\n tiles.forEach((tile) => {\n if (tile.isCurrent) {\n getPlaceholderInAncestors(tile);\n }\n });\n const sortedTiles = tiles.slice().sort((t1, t2) => t1.z - t2.z);\n sortedTiles.forEach((tile) => {\n tile.isVisible = Boolean(tile.properties.state & TILE_STATE_VISIBLE);\n if (tile.children.length && (tile.isVisible || tile.properties.state & TILE_STATE_VISITED)) {\n tile.children.forEach((child) => {\n child.properties.state = TILE_STATE_VISITED;\n });\n } else if (tile.isCurrent) {\n getPlaceholderInChildren(tile);\n }\n });\n}\nfunction getPlaceholderInAncestors(tile) {\n while (tile) {\n if (tile.isLoaded) {\n tile.properties.state |= TILE_STATE_VISIBLE;\n return true;\n }\n tile = tile.parent;\n }\n return false;\n}\nfunction getPlaceholderInChildren(tile) {\n tile.children.forEach((child) => {\n if (child.isLoaded) {\n child.properties.state |= TILE_STATE_VISIBLE;\n } else {\n getPlaceholderInChildren(child);\n }\n });\n}\nexport {\n updateTileStateOverlap,\n updateTileStateRealtime,\n updateTileStateReplace\n};\n","// src/tileset-manager/const.ts\nimport { UpdateTileStrategy } from \"./types\";\nimport {\n updateTileStateOverlap,\n updateTileStateRealtime,\n updateTileStateReplace\n} from \"./utils/strategies\";\nvar TILE_SIZE = 256;\nvar DEFAULT_EXTENT = [-Infinity, -Infinity, Infinity, Infinity];\nvar BOUNDS_BUFFER_SCALE = 0.2;\nvar DEFAULT_CACHE_SCALE = 5;\nvar UPDATE_TILE_STRATEGIES = {\n [UpdateTileStrategy.Realtime]: updateTileStateRealtime,\n [UpdateTileStrategy.Overlap]: updateTileStateOverlap,\n [UpdateTileStrategy.Replace]: updateTileStateReplace\n};\nvar NOOP = () => {\n};\nexport {\n BOUNDS_BUFFER_SCALE,\n DEFAULT_CACHE_SCALE,\n DEFAULT_EXTENT,\n NOOP,\n TILE_SIZE,\n UPDATE_TILE_STRATEGIES\n};\n","// src/tileset-manager/utils/lonlat-tile.ts\nimport { DEFAULT_EXTENT } from \"../const\";\nfunction osmLonLat2TileXY(lon, lat, zoom) {\n const x = Math.floor((lon + 180) / 360 * Math.pow(2, zoom));\n const y = Math.floor(\n (1 - Math.log(Math.tan(lat * Math.PI / 180) + 1 / Math.cos(lat * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, zoom)\n );\n return [x, y];\n}\nfunction osmTileXY2LonLat(x, y, zoom) {\n const lon = x / Math.pow(2, zoom) * 360 - 180;\n const n = Math.PI - 2 * Math.PI * y / Math.pow(2, zoom);\n const lat = 180 / Math.PI * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));\n return [lon, lat];\n}\nvar tileToBounds = (x, y, z) => {\n const [minLng, maxLat] = osmTileXY2LonLat(x, y, z);\n const [maxLng, minLat] = osmTileXY2LonLat(x + 1, y + 1, z);\n return [minLng, minLat, maxLng, maxLat];\n};\nfunction getTileIndices({\n zoom,\n latLonBounds,\n maxZoom = Infinity,\n minZoom = 0,\n zoomOffset = 0,\n extent = DEFAULT_EXTENT\n}) {\n let z = Math.ceil(zoom) + zoomOffset;\n if (Number.isFinite(minZoom) && z < minZoom) {\n return [];\n }\n if (Number.isFinite(maxZoom) && z > maxZoom) {\n z = maxZoom;\n }\n const [minLng, minLat, maxLng, maxLat] = latLonBounds;\n const bounds = [\n Math.max(minLng, extent[0]),\n Math.max(minLat, extent[1]),\n Math.min(maxLng, extent[2]),\n Math.min(maxLat, extent[3])\n ];\n const indices = [];\n const [minX, maxY] = osmLonLat2TileXY(bounds[0], bounds[1], z);\n const [maxX, minY] = osmLonLat2TileXY(bounds[2], bounds[3], z);\n for (let x = minX; x <= maxX; x++) {\n for (let y = minY; y <= maxY; y++) {\n indices.push({ x, y, z });\n }\n }\n const centerX = (maxX + minX) / 2;\n const centerY = (maxY + minY) / 2;\n const distance = (x, y) => Math.abs(x - centerX) + Math.abs(y - centerY);\n indices.sort((a, b) => distance(a.x, a.y) - distance(b.x, b.y));\n return indices;\n}\nvar getTileWarpXY = (x, y, z, wrap = true) => {\n const scale = Math.pow(2, z);\n const maxIndex = scale - 1;\n const distance = scale;\n let warpX = x;\n const warpY = y;\n if (wrap) {\n if (warpX < 0) {\n warpX = warpX + distance;\n } else if (warpX > maxIndex) {\n warpX = warpX % distance;\n }\n }\n return { warpX, warpY };\n};\nexport {\n getTileIndices,\n getTileWarpXY,\n osmLonLat2TileXY,\n osmTileXY2LonLat,\n tileToBounds\n};\n","var __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n// src/tileset-manager/tile.ts\nimport bboxPolygon from \"@turf/bbox-polygon\";\nimport { EventEmitter } from \"eventemitter3\";\nimport { LoadTileDataStatus } from \"./types\";\nimport { getTileWarpXY, tileToBounds } from \"./utils/lonlat-tile\";\nvar SourceTile = class extends EventEmitter {\n constructor(options) {\n super();\n // 瓦片大小\n this.tileSize = 256;\n // 是否可以见\n this.isVisible = false;\n // 是否是当前层级的瓦片\n this.isCurrent = false;\n // 是否可以见发生变化\n this.isVisibleChange = false;\n this.loadedLayers = 0;\n this.isLayerLoaded = false;\n this.isLoad = false;\n this.isChildLoad = false;\n // 瓦片的父级瓦片\n this.parent = null;\n // 瓦片的子级瓦片\n this.children = [];\n // 瓦片数据\n this.data = null;\n // 瓦片属性\n this.properties = {};\n // 瓦片序号\n this.loadDataId = 0;\n const { x, y, z, tileSize, warp = true } = options;\n this.x = x;\n this.y = y;\n this.z = z;\n this.warp = warp || true;\n this.tileSize = tileSize;\n }\n // 是否正在请求瓦片\n get isLoading() {\n return this.loadStatus === LoadTileDataStatus.Loading;\n }\n // 是否瓦片请求成功\n get isLoaded() {\n return this.loadStatus === LoadTileDataStatus.Loaded;\n }\n // 是否瓦片请求失败\n get isFailure() {\n return this.loadStatus === LoadTileDataStatus.Failure;\n }\n setTileLayerLoaded() {\n this.isLayerLoaded = true;\n }\n // 是否瓦片请求被取消\n get isCancelled() {\n return this.loadStatus === LoadTileDataStatus.Cancelled;\n }\n // 是否数据请求结束\n get isDone() {\n return [\n LoadTileDataStatus.Loaded,\n LoadTileDataStatus.Cancelled,\n LoadTileDataStatus.Failure\n ].includes(this.loadStatus);\n }\n // 瓦片的经纬度边界\n get bounds() {\n return tileToBounds(this.x, this.y, this.z);\n }\n // 瓦片边界面\n get bboxPolygon() {\n const [minLng, minLat, maxLng, maxLat] = this.bounds;\n const center = [(maxLng - minLng) / 2, (maxLat - minLat) / 2];\n const polygon = bboxPolygon(this.bounds, {\n properties: {\n key: this.key,\n id: this.key,\n bbox: this.bounds,\n center,\n meta: `\n ${this.key}\n `\n // ${this.bbox.slice(0, 2)}\n // ${this.bbox.slice(2)}\n }\n });\n return polygon;\n }\n // 瓦片的 key\n get key() {\n const key = `${this.x}_${this.y}_${this.z}`;\n return key;\n }\n layerLoad() {\n this.loadedLayers++;\n this.emit(\"layerLoaded\");\n }\n // 请求瓦片数据\n loadData(_0) {\n return __async(this, arguments, function* ({ getData, onLoad, onError }) {\n this.loadDataId++;\n const loadDataId = this.loadDataId;\n if (this.isLoading) {\n this.abortLoad();\n }\n this.abortController = new AbortController();\n this.loadStatus = LoadTileDataStatus.Loading;\n let tileData = null;\n let error;\n try {\n const { x, y, z, bounds, tileSize, warp } = this;\n const { warpX, warpY } = getTileWarpXY(x, y, z, warp);\n const { signal } = this.abortController;\n const params = { x: warpX, y: warpY, z, bounds, tileSize, signal, warp };\n tileData = yield getData(params, this);\n } catch (err) {\n error = err;\n }\n if (loadDataId !== this.loadDataId) {\n return;\n }\n if (this.isCancelled && !tileData) {\n return;\n }\n if (error || !tileData) {\n this.loadStatus = LoadTileDataStatus.Failure;\n onError(error, this);\n return;\n }\n this.loadStatus = LoadTileDataStatus.Loaded;\n this.data = tileData;\n onLoad(this);\n });\n }\n // 重新请求瓦片数据\n reloadData(params) {\n if (this.isLoading) {\n this.abortLoad();\n }\n this.loadData(params);\n }\n // 取消请求瓦片数据\n abortLoad() {\n if (this.isLoaded || this.isCancelled) {\n return;\n }\n this.loadStatus = LoadTileDataStatus.Cancelled;\n this.abortController.abort();\n if (this.xhrCancel) {\n this.xhrCancel();\n }\n }\n};\nexport {\n SourceTile\n};\n","import { polygon } from \"@turf/helpers\";\n/**\n * Takes a bbox and returns an equivalent {@link Polygon|polygon}.\n *\n * @name bboxPolygon\n * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @param {Object} [options={}] Optional parameters\n * @param {Properties} [options.properties={}] Translate properties to Polygon\n * @param {string|number} [options.id={}] Translate Id to Polygon\n * @returns {Feature} a Polygon representation of the bounding box\n * @example\n * var bbox = [0, 0, 10, 10];\n *\n * var poly = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [poly]\n */\nexport default function bboxPolygon(bbox, options) {\n if (options === void 0) { options = {}; }\n // Convert BBox positions to Numbers\n // No performance loss for including Number()\n // https://github.com/Turfjs/turf/issues/1119\n var west = Number(bbox[0]);\n var south = Number(bbox[1]);\n var east = Number(bbox[2]);\n var north = Number(bbox[3]);\n if (bbox.length === 6) {\n throw new Error(\"@turf/bbox-polygon does not support BBox with 6 positions\");\n }\n var lowLeft = [west, south];\n var topLeft = [west, north];\n var topRight = [east, north];\n var lowRight = [east, south];\n return polygon([[lowLeft, lowRight, topRight, topLeft, lowLeft]], options.properties, { bbox: bbox, id: options.id });\n}\n","// src/tileset-manager/utils/bound-buffer.ts\nimport { bBoxToBounds, boundsContains, padBounds } from \"../../geo\";\nvar getLatLonBoundsBuffer = (latLonBounds, bufferRatio) => {\n const bounds = bBoxToBounds(latLonBounds);\n const newBounds = padBounds(bounds, bufferRatio);\n const maxLngExtent = 360 * 3 - 180;\n const maxLatExtent = 85.0511287798065;\n const latLonBoundsBuffer = [\n Math.max(newBounds[0][0], -maxLngExtent),\n Math.max(newBounds[0][1], -maxLatExtent),\n Math.min(newBounds[1][0], maxLngExtent),\n Math.min(newBounds[1][1], maxLatExtent)\n ];\n return latLonBoundsBuffer;\n};\nvar isLatLonBoundsContains = (latLonBoundsBuffer, latLonBounds) => {\n const boundsBuffer = bBoxToBounds(latLonBoundsBuffer);\n const bounds = bBoxToBounds(latLonBounds);\n const isContains = boundsContains(boundsBuffer, bounds);\n return isContains;\n};\nexport {\n getLatLonBoundsBuffer,\n isLatLonBoundsContains\n};\n","// src/tileset-manager/utils/tile-url.ts\nimport { getProtocolAction } from \"../../ajax\";\nimport { tileToBounds } from \"./lonlat-tile\";\nfunction isURLTemplate(s) {\n return /(?=.*{box})(?=.*{z})(?=.*{x})(?=.*({y}|{-y}))/.test(s);\n}\nfunction expandUrl(url) {\n const urls = [];\n let match = /\\{([a-z])-([a-z])\\}/.exec(url);\n if (match) {\n const startCharCode = match[1].charCodeAt(0);\n const stopCharCode = match[2].charCodeAt(0);\n let charCode;\n for (charCode = startCharCode; charCode <= stopCharCode; ++charCode) {\n urls.push(url.replace(match[0], String.fromCharCode(charCode)));\n }\n return urls;\n }\n match = /\\{(\\d+)-(\\d+)\\}/.exec(url);\n if (match) {\n const stop = parseInt(match[2], 10);\n for (let i = parseInt(match[1], 10); i <= stop; i++) {\n urls.push(url.replace(match[0], i.toString()));\n }\n return urls;\n }\n urls.push(url);\n return urls;\n}\nfunction getURLFromTemplate(template, properties) {\n if (!template || !template.length) {\n throw new Error(\"url is not allowed to be empty\");\n }\n const { x, y, z } = properties;\n const urls = expandUrl(template);\n const index = Math.abs(x + y) % urls.length;\n const url = getProtocolAction(urls[index]) ? `${urls[index]}/{z}/{x}/{y}` : urls[index];\n return url.replace(/\\{x\\}/g, x.toString()).replace(/\\{y\\}/g, y.toString()).replace(/\\{z\\}/g, z.toString()).replace(/\\{bbox\\}/g, tileToBounds(x, y, z).join(\",\")).replace(/\\{-y\\}/g, (Math.pow(2, z) - y - 1).toString());\n}\nfunction getWMTSURLFromTemplate(template, properties) {\n const {\n x,\n y,\n z,\n layer,\n version = \"1.0.0\",\n style = \"default\",\n format,\n service = \"WMTS\",\n tileMatrixset\n } = properties;\n const urls = expandUrl(template);\n const index = Math.abs(x + y) % urls.length;\n const url = `${urls[index]}&SERVICE=${service}&REQUEST=GetTile&VERSION=${version}&LAYER=${layer}&STYLE=${style}&TILEMATRIXSET=${tileMatrixset}&FORMAT=${format}&TILECOL=${x}&TILEROW=${y}&TILEMATRIX=${z}`;\n return url;\n}\nexport {\n expandUrl,\n getURLFromTemplate,\n getWMTSURLFromTemplate,\n isURLTemplate\n};\n","import { Threshold } from './threshold';\nimport { wilkinsonExtended } from '../tick-methods/wilkinson-extended';\nimport { createQuartile } from '../utils/create-quartile';\n/**\n * 类似 Threshold 比例尺,区别在于分位数比例尺 (Quantile) 将一个离散的输入域映射到一个离散的输出域\n * 输入域被指定为一组离散的样本值,输出域中的值的数量决定了分位数的数量。\n */\nexport class Quantile extends Threshold {\n getDefaultOptions() {\n return {\n domain: [],\n range: [],\n tickCount: 5,\n unknown: undefined,\n tickMethod: wilkinsonExtended,\n };\n }\n constructor(options) {\n super(options);\n }\n rescale() {\n const { domain, range } = this.options;\n this.n = range.length - 1;\n this.thresholds = createQuartile(domain, this.n + 1, false);\n }\n /**\n * 如果是在第一段后或者最后一段就把两端的值添加上\n */\n invert(y) {\n const [a, b] = super.invert(y);\n const { domain } = this.options;\n const dMin = domain[0];\n const dMax = domain[domain.length - 1];\n return a === undefined && b === undefined ? [a, b] : [a || dMin, b || dMax];\n }\n getThresholds() {\n return this.thresholds;\n }\n clone() {\n return new Quantile(this.options);\n }\n getTicks() {\n const { tickCount, domain, tickMethod } = this.options;\n const lastIndex = domain.length - 1;\n const min = domain[0];\n const max = domain[lastIndex];\n return tickMethod(min, max, tickCount);\n }\n}\n//# sourceMappingURL=quantile.js.map","/**\n * 给予一个排序好的数组,分位数\n *\n * @param arr 排序好的数组\n * @param percentage 百分比\n * @returns {number} 计算结果\n */\nfunction quantileSorted(arr, percentage) {\n const len = arr.length;\n if (!len) {\n return undefined;\n }\n if (len < 2) {\n return arr[len - 1];\n }\n const i = (len - 1) * percentage;\n const i0 = Math.floor(i);\n const v0 = arr[i0];\n const v1 = arr[i0 + 1];\n return v0 + (v1 - v0) * (i - i0);\n}\n/**\n * 给定一个数组, 创建分位数数组\n *\n * @param arr 排序好的数组\n * @param n 分位数数组长度\n * @param isSorted 数组是否排序好\n * @returns {number[]} 分位数数组\n */\nexport function createQuartile(arr, n, isSorted = false) {\n const numberArr = arr;\n if (!isSorted) {\n numberArr.sort((a, b) => a - b);\n }\n const tmp = [];\n for (let i = 1; i < n; i += 1) {\n tmp.push(quantileSorted(numberArr, i / n));\n }\n return tmp;\n}\n//# sourceMappingURL=create-quartile.js.map","import { makeChartComp } from '../../util/makeChartComp';\nvar AreaChart = makeChartComp('Area');\nexport default AreaChart;\n","import { makeChartComp } from '../../util/makeChartComp';\nvar ColumnChart = makeChartComp('Column');\nexport default ColumnChart;\n","import { makeChartComp } from '../../util/makeChartComp';\nvar LineChart = makeChartComp('Line');\nexport default LineChart;\n","import { makeChartComp } from '../../util/makeChartComp';\nvar PieChart = makeChartComp('Pie');\nexport default PieChart;\n","import { makeChartComp } from '../../util/makeChartComp';\nvar RadarChart = makeChartComp('Radar');\nexport default RadarChart;\n","import { makeChartComp } from '../../util/makeChartComp';\nvar GaugeChart = makeChartComp('Gauge');\nexport default GaugeChart;\n","import { makeChartComp } from '../../util/makeChartComp';\nvar LiquidChart = makeChartComp('Liquid');\nexport default LiquidChart;\n","import { makeChartComp } from '../../util/makeChartComp';\nvar WordCloudChart = makeChartComp('WordCloud');\nexport default WordCloudChart;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","export const MAIN_LAYER_CLASS_NAME = 'main-layer';\nexport const LABEL_LAYER_CLASS_NAME = 'label-layer';\nexport const ELEMENT_CLASS_NAME = 'element';\nexport const VIEW_CLASS_NAME = 'view';\nexport const PLOT_CLASS_NAME = 'plot';\nexport const COMPONENT_CLASS_NAME = 'component';\nexport const LABEL_CLASS_NAME = 'label';\nexport const AREA_CLASS_NAME = 'area';\nexport const MASK_CLASS_NAME = 'mask';\n//# sourceMappingURL=constant.js.map","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\").default;\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\nvar React = _interopRequireWildcard(require(\"react\"));\nvar _ArrowLeftOutlined = _interopRequireDefault(require(\"@ant-design/icons-svg/lib/asn/ArrowLeftOutlined\"));\nvar _AntdIcon = _interopRequireDefault(require(\"../components/AntdIcon\"));\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nvar ArrowLeftOutlined = function ArrowLeftOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(_AntdIcon.default, (0, _extends2.default)({}, props, {\n ref: ref,\n icon: _ArrowLeftOutlined.default\n }));\n};\n\n/**![arrow-left](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg3MiA0NzRIMjg2LjlsMzUwLjItMzA0YzUuNi00LjkgMi4yLTE0LTUuMi0xNGgtODguNWMtMy45IDAtNy42IDEuNC0xMC41IDMuOUwxNTUgNDg3LjhhMzEuOTYgMzEuOTYgMCAwMDAgNDguM0w1MzUuMSA4NjZjMS41IDEuMyAzLjMgMiA1LjIgMmg5MS41YzcuNCAwIDEwLjgtOS4yIDUuMi0xNEwyODYuOSA1NTBIODcyYzQuNCAwIDgtMy42IDgtOHYtNjBjMC00LjQtMy42LTgtOC04eiIgLz48L3N2Zz4=) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(ArrowLeftOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'ArrowLeftOutlined';\n}\nvar _default = exports.default = RefIcon;","import isArray from './is-array';\nimport isObject from './is-object';\nfunction each(elements, func) {\n if (!elements) {\n return;\n }\n var rst;\n if (isArray(elements)) {\n for (var i = 0, len = elements.length; i < len; i++) {\n rst = func(elements[i], i);\n if (rst === false) {\n break;\n }\n }\n }\n else if (isObject(elements)) {\n for (var k in elements) {\n if (elements.hasOwnProperty(k)) {\n rst = func(elements[k], k);\n if (rst === false) {\n break;\n }\n }\n }\n }\n}\nexport default each;\n//# sourceMappingURL=each.js.map","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\", \"trigger\", \"onVisibleChange\", \"drawerProps\", \"onFinish\", \"submitTimeout\", \"title\", \"width\", \"resize\", \"onOpenChange\", \"visible\", \"open\"];\nimport { isBrowser, omitUndefined, openVisibleCompatible, useRefFunction } from '@ant-design/pro-utils';\nimport { ConfigProvider, Drawer } from 'antd';\nimport classNames from 'classnames';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport { merge } from \"rc-util/es/utils/set\";\nimport { noteOnce } from \"rc-util/es/warning\";\nimport React, { useCallback, useContext, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { BaseForm } from \"../../BaseForm\";\nimport { useStyle } from \"./style\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction DrawerForm(_ref) {\n var _context$locale3, _context$locale4;\n var children = _ref.children,\n trigger = _ref.trigger,\n onVisibleChange = _ref.onVisibleChange,\n drawerProps = _ref.drawerProps,\n onFinish = _ref.onFinish,\n submitTimeout = _ref.submitTimeout,\n title = _ref.title,\n width = _ref.width,\n resize = _ref.resize,\n onOpenChange = _ref.onOpenChange,\n propVisible = _ref.visible,\n propsOpen = _ref.open,\n rest = _objectWithoutProperties(_ref, _excluded);\n noteOnce(\n // eslint-disable-next-line @typescript-eslint/dot-notation\n !rest['footer'] || !(drawerProps !== null && drawerProps !== void 0 && drawerProps.footer), 'DrawerForm 是一个 ProForm 的特殊布局,如果想自定义按钮,请使用 submit.render 自定义。');\n var resizeInfo = React.useMemo(function () {\n var _resize$onResize, _resize$maxWidth, _resize$minWidth;\n var defaultResize = {\n onResize: function onResize() {},\n maxWidth: isBrowser() ? window.innerWidth * 0.8 : undefined,\n minWidth: 300\n };\n if (typeof resize === 'boolean') {\n if (resize) {\n return defaultResize;\n } else {\n return {};\n }\n }\n return omitUndefined({\n onResize: (_resize$onResize = resize === null || resize === void 0 ? void 0 : resize.onResize) !== null && _resize$onResize !== void 0 ? _resize$onResize : defaultResize.onResize,\n maxWidth: (_resize$maxWidth = resize === null || resize === void 0 ? void 0 : resize.maxWidth) !== null && _resize$maxWidth !== void 0 ? _resize$maxWidth : defaultResize.maxWidth,\n minWidth: (_resize$minWidth = resize === null || resize === void 0 ? void 0 : resize.minWidth) !== null && _resize$minWidth !== void 0 ? _resize$minWidth : defaultResize.minWidth\n });\n }, [resize]);\n var context = useContext(ConfigProvider.ConfigContext);\n var baseClassName = context.getPrefixCls('pro-form-drawer');\n var _useStyle = useStyle(baseClassName),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n var getCls = function getCls(className) {\n return \"\".concat(baseClassName, \"-\").concat(className, \" \").concat(hashId);\n };\n var _useState = useState([]),\n _useState2 = _slicedToArray(_useState, 2),\n forceUpdate = _useState2[1];\n var _useState3 = useState(false),\n _useState4 = _slicedToArray(_useState3, 2),\n loading = _useState4[0],\n setLoading = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n resizableDrawer = _useState6[0],\n setResizableDrawer = _useState6[1];\n var _useState7 = useState(width ? width : resize ? resizeInfo === null || resizeInfo === void 0 ? void 0 : resizeInfo.minWidth : 800),\n _useState8 = _slicedToArray(_useState7, 2),\n drawerWidth = _useState8[0],\n setDrawerWidth = _useState8[1];\n var _useMergedState = useMergedState(!!propVisible, {\n value: propsOpen || propVisible,\n onChange: onOpenChange || onVisibleChange\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n open = _useMergedState2[0],\n setOpen = _useMergedState2[1];\n var footerRef = useRef(null);\n var footerDomRef = useCallback(function (element) {\n if (footerRef.current === null && element) {\n forceUpdate([]);\n }\n footerRef.current = element;\n }, []);\n var formRef = useRef();\n var resetFields = useCallback(function () {\n var _ref2, _rest$formRef$current, _rest$formRef;\n var form = (_ref2 = (_rest$formRef$current = (_rest$formRef = rest.formRef) === null || _rest$formRef === void 0 ? void 0 : _rest$formRef.current) !== null && _rest$formRef$current !== void 0 ? _rest$formRef$current : rest.form) !== null && _ref2 !== void 0 ? _ref2 : formRef.current;\n // 重置表单\n if (form && drawerProps !== null && drawerProps !== void 0 && drawerProps.destroyOnClose) {\n form.resetFields();\n }\n }, [drawerProps === null || drawerProps === void 0 ? void 0 : drawerProps.destroyOnClose, rest.form, rest.formRef]);\n useEffect(function () {\n if (open && (propsOpen || propVisible)) {\n onOpenChange === null || onOpenChange === void 0 || onOpenChange(true);\n onVisibleChange === null || onVisibleChange === void 0 || onVisibleChange(true);\n }\n if (resizableDrawer) {\n setDrawerWidth(resizeInfo === null || resizeInfo === void 0 ? void 0 : resizeInfo.minWidth);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [propVisible, open, resizableDrawer]);\n useImperativeHandle(rest.formRef, function () {\n return formRef.current;\n }, [formRef.current]);\n var triggerDom = useMemo(function () {\n if (!trigger) {\n return null;\n }\n return /*#__PURE__*/React.cloneElement(trigger, _objectSpread(_objectSpread({\n key: 'trigger'\n }, trigger.props), {}, {\n onClick: function () {\n var _onClick = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(e) {\n var _trigger$props, _trigger$props$onClic;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n setOpen(!open);\n setResizableDrawer(!Object.keys(resizeInfo));\n (_trigger$props = trigger.props) === null || _trigger$props === void 0 || (_trigger$props$onClic = _trigger$props.onClick) === null || _trigger$props$onClic === void 0 || _trigger$props$onClic.call(_trigger$props, e);\n case 3:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n function onClick(_x) {\n return _onClick.apply(this, arguments);\n }\n return onClick;\n }()\n }));\n }, [setOpen, trigger, open, setResizableDrawer, resizableDrawer]);\n var submitterConfig = useMemo(function () {\n var _context$locale$Modal, _context$locale, _context$locale$Modal2, _context$locale2, _rest$submitter;\n if (rest.submitter === false) {\n return false;\n }\n return merge({\n searchConfig: {\n submitText: (_context$locale$Modal = (_context$locale = context.locale) === null || _context$locale === void 0 || (_context$locale = _context$locale.Modal) === null || _context$locale === void 0 ? void 0 : _context$locale.okText) !== null && _context$locale$Modal !== void 0 ? _context$locale$Modal : '确认',\n resetText: (_context$locale$Modal2 = (_context$locale2 = context.locale) === null || _context$locale2 === void 0 || (_context$locale2 = _context$locale2.Modal) === null || _context$locale2 === void 0 ? void 0 : _context$locale2.cancelText) !== null && _context$locale$Modal2 !== void 0 ? _context$locale$Modal2 : '取消'\n },\n resetButtonProps: {\n preventDefault: true,\n // 提交表单loading时,不可关闭弹框\n disabled: submitTimeout ? loading : undefined,\n onClick: function onClick(e) {\n var _drawerProps$onClose;\n setOpen(false);\n // fix: #6006 点击取消按钮时,那么必然会触发抽屉关闭,我们无需在 此处重置表单,只需在抽屉关闭时重置即可\n drawerProps === null || drawerProps === void 0 || (_drawerProps$onClose = drawerProps.onClose) === null || _drawerProps$onClose === void 0 || _drawerProps$onClose.call(drawerProps, e);\n }\n }\n }, (_rest$submitter = rest.submitter) !== null && _rest$submitter !== void 0 ? _rest$submitter : {});\n }, [rest.submitter, (_context$locale3 = context.locale) === null || _context$locale3 === void 0 || (_context$locale3 = _context$locale3.Modal) === null || _context$locale3 === void 0 ? void 0 : _context$locale3.okText, (_context$locale4 = context.locale) === null || _context$locale4 === void 0 || (_context$locale4 = _context$locale4.Modal) === null || _context$locale4 === void 0 ? void 0 : _context$locale4.cancelText, submitTimeout, loading, setOpen, drawerProps]);\n var contentRender = useCallback(function (formDom, submitter) {\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [formDom, footerRef.current && submitter ? /*#__PURE__*/_jsx(React.Fragment, {\n children: /*#__PURE__*/createPortal(submitter, footerRef.current)\n }, \"submitter\") : submitter]\n });\n }, []);\n var onFinishHandle = useRefFunction( /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(values) {\n var response, timer, result;\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n response = onFinish === null || onFinish === void 0 ? void 0 : onFinish(values);\n if (submitTimeout && response instanceof Promise) {\n setLoading(true);\n timer = setTimeout(function () {\n return setLoading(false);\n }, submitTimeout);\n response.finally(function () {\n clearTimeout(timer);\n setLoading(false);\n });\n }\n _context2.next = 4;\n return response;\n case 4:\n result = _context2.sent;\n // 返回真值,关闭弹框\n if (result) {\n setOpen(false);\n }\n return _context2.abrupt(\"return\", result);\n case 7:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n return function (_x2) {\n return _ref3.apply(this, arguments);\n };\n }());\n var drawerOpenProps = openVisibleCompatible(open, onVisibleChange);\n var cbHandleMouseMove = useCallback(function (e) {\n var _resizeInfo$minWidth, _resizeInfo$maxWidth;\n var offsetRight = (document.body.offsetWidth || 1000) - (e.clientX - document.body.offsetLeft);\n var minWidth = (_resizeInfo$minWidth = resizeInfo === null || resizeInfo === void 0 ? void 0 : resizeInfo.minWidth) !== null && _resizeInfo$minWidth !== void 0 ? _resizeInfo$minWidth : width || 800;\n var maxWidth = (_resizeInfo$maxWidth = resizeInfo === null || resizeInfo === void 0 ? void 0 : resizeInfo.maxWidth) !== null && _resizeInfo$maxWidth !== void 0 ? _resizeInfo$maxWidth : window.innerWidth * 0.8;\n if (offsetRight < minWidth) {\n setDrawerWidth(minWidth);\n return;\n }\n if (offsetRight > maxWidth) {\n setDrawerWidth(maxWidth);\n return;\n }\n setDrawerWidth(offsetRight);\n }, [resizeInfo === null || resizeInfo === void 0 ? void 0 : resizeInfo.maxWidth, resizeInfo === null || resizeInfo === void 0 ? void 0 : resizeInfo.minWidth, width]);\n var cbHandleMouseUp = useCallback(function () {\n document.removeEventListener('mousemove', cbHandleMouseMove);\n document.removeEventListener('mouseup', cbHandleMouseUp);\n }, [cbHandleMouseMove]);\n return wrapSSR( /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsxs(Drawer, _objectSpread(_objectSpread(_objectSpread({\n title: title,\n width: drawerWidth\n }, drawerProps), drawerOpenProps), {}, {\n afterOpenChange: function afterOpenChange(e) {\n var _drawerProps$afterOpe;\n if (!e) resetFields();\n drawerProps === null || drawerProps === void 0 || (_drawerProps$afterOpe = drawerProps.afterOpenChange) === null || _drawerProps$afterOpe === void 0 || _drawerProps$afterOpe.call(drawerProps, e);\n },\n onClose: function onClose(e) {\n var _drawerProps$onClose2;\n // 提交表单loading时,阻止弹框关闭\n if (submitTimeout && loading) return;\n setOpen(false);\n drawerProps === null || drawerProps === void 0 || (_drawerProps$onClose2 = drawerProps.onClose) === null || _drawerProps$onClose2 === void 0 || _drawerProps$onClose2.call(drawerProps, e);\n },\n footer: rest.submitter !== false && /*#__PURE__*/_jsx(\"div\", {\n ref: footerDomRef,\n style: {\n display: 'flex',\n justifyContent: 'flex-end'\n }\n }),\n children: [resize ? /*#__PURE__*/_jsx(\"div\", {\n className: classNames(getCls('sidebar-dragger'), hashId, _defineProperty(_defineProperty({}, getCls('sidebar-dragger-min-disabled'), drawerWidth === (resizeInfo === null || resizeInfo === void 0 ? void 0 : resizeInfo.minWidth)), getCls('sidebar-dragger-max-disabled'), drawerWidth === (resizeInfo === null || resizeInfo === void 0 ? void 0 : resizeInfo.maxWidth))),\n onMouseDown: function onMouseDown(e) {\n var _resizeInfo$onResize;\n resizeInfo === null || resizeInfo === void 0 || (_resizeInfo$onResize = resizeInfo.onResize) === null || _resizeInfo$onResize === void 0 || _resizeInfo$onResize.call(resizeInfo);\n e.stopPropagation();\n e.preventDefault();\n document.addEventListener('mousemove', cbHandleMouseMove);\n document.addEventListener('mouseup', cbHandleMouseUp);\n setResizableDrawer(true);\n }\n }) : null, /*#__PURE__*/_jsx(_Fragment, {\n children: /*#__PURE__*/_jsx(BaseForm, _objectSpread(_objectSpread({\n formComponentType: \"DrawerForm\",\n layout: \"vertical\"\n }, rest), {}, {\n formRef: formRef,\n onInit: function onInit(_, form) {\n var _rest$onInit;\n if (rest.formRef) {\n rest.formRef.current = form;\n }\n rest === null || rest === void 0 || (_rest$onInit = rest.onInit) === null || _rest$onInit === void 0 || _rest$onInit.call(rest, _, form);\n formRef.current = form;\n },\n submitter: submitterConfig,\n onFinish: ( /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(values) {\n var result;\n return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return onFinishHandle(values);\n case 2:\n result = _context3.sent;\n return _context3.abrupt(\"return\", result);\n case 4:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }));\n return function (_x3) {\n return _ref4.apply(this, arguments);\n };\n }()),\n contentRender: contentRender,\n children: children\n }))\n })]\n })), triggerDom]\n }));\n}\nexport { DrawerForm };","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { useStyle as useAntdStyle } from '@ant-design/pro-provider';\nvar genDrawerFormStyle = function genDrawerFormStyle(token) {\n return _defineProperty({}, token.componentCls, {\n '&-sidebar-dragger': {\n width: '5px',\n cursor: 'ew-resize',\n padding: '4px 0 0',\n borderTop: '1px solid transparent',\n position: 'absolute',\n top: 0,\n left: 0,\n bottom: 0,\n zIndex: 100,\n backgroundColor: 'transparent',\n '&-min-disabled': {\n cursor: 'w-resize'\n },\n '&-max-disabled': {\n cursor: 'e-resize'\n }\n }\n });\n};\nexport function useStyle(prefixCls) {\n return useAntdStyle('DrawerForm', function (token) {\n var drawerFormToken = _objectSpread(_objectSpread({}, token), {}, {\n componentCls: \".\".concat(prefixCls)\n });\n return [genDrawerFormStyle(drawerFormToken)];\n });\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { createMat4, transformVector } from './math-utils';\nimport * as mat4 from 'gl-matrix/mat4';\nimport * as vec2 from 'gl-matrix/vec2';\nimport * as vec3 from 'gl-matrix/vec3';\nimport assert from './assert';\nvar PI = Math.PI;\nvar PI_4 = PI / 4;\nvar DEGREES_TO_RADIANS = PI / 180;\nvar RADIANS_TO_DEGREES = 180 / PI;\nvar TILE_SIZE = 512;\nvar EARTH_CIRCUMFERENCE = 40.03e6;\nvar DEFAULT_ALTITUDE = 1.5;\nexport function zoomToScale(zoom) {\n return Math.pow(2, zoom);\n}\nexport function scaleToZoom(scale) {\n return Math.log2(scale);\n}\nexport function lngLatToWorld(_ref, scale) {\n var _ref2 = _slicedToArray(_ref, 2),\n lng = _ref2[0],\n lat = _ref2[1];\n\n assert(Number.isFinite(lng) && Number.isFinite(scale));\n assert(Number.isFinite(lat) && lat >= -90 && lat <= 90, 'invalid latitude');\n scale *= TILE_SIZE;\n var lambda2 = lng * DEGREES_TO_RADIANS;\n var phi2 = lat * DEGREES_TO_RADIANS;\n var x = scale * (lambda2 + PI) / (2 * PI);\n var y = scale * (PI - Math.log(Math.tan(PI_4 + phi2 * 0.5))) / (2 * PI);\n return [x, y];\n}\nexport function worldToLngLat(_ref3, scale) {\n var _ref4 = _slicedToArray(_ref3, 2),\n x = _ref4[0],\n y = _ref4[1];\n\n scale *= TILE_SIZE;\n var lambda2 = x / scale * (2 * PI) - PI;\n var phi2 = 2 * (Math.atan(Math.exp(PI - y / scale * (2 * PI))) - PI_4);\n return [lambda2 * RADIANS_TO_DEGREES, phi2 * RADIANS_TO_DEGREES];\n}\nexport function getMeterZoom(_ref5) {\n var latitude = _ref5.latitude;\n assert(Number.isFinite(latitude));\n var latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n return scaleToZoom(EARTH_CIRCUMFERENCE * latCosine) - 9;\n}\nexport function getDistanceScales(_ref6) {\n var latitude = _ref6.latitude,\n longitude = _ref6.longitude,\n zoom = _ref6.zoom,\n scale = _ref6.scale,\n _ref6$highPrecision = _ref6.highPrecision,\n highPrecision = _ref6$highPrecision === void 0 ? false : _ref6$highPrecision;\n scale = scale !== undefined ? scale : zoomToScale(zoom);\n assert(Number.isFinite(latitude) && Number.isFinite(longitude) && Number.isFinite(scale));\n var result = {};\n var worldSize = TILE_SIZE * scale;\n var latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n var pixelsPerDegreeX = worldSize / 360;\n var pixelsPerDegreeY = pixelsPerDegreeX / latCosine;\n var altPixelsPerMeter = worldSize / EARTH_CIRCUMFERENCE / latCosine;\n result.pixelsPerMeter = [altPixelsPerMeter, -altPixelsPerMeter, altPixelsPerMeter];\n result.metersPerPixel = [1 / altPixelsPerMeter, -1 / altPixelsPerMeter, 1 / altPixelsPerMeter];\n result.pixelsPerDegree = [pixelsPerDegreeX, -pixelsPerDegreeY, altPixelsPerMeter];\n result.degreesPerPixel = [1 / pixelsPerDegreeX, -1 / pixelsPerDegreeY, 1 / altPixelsPerMeter];\n\n if (highPrecision) {\n var latCosine2 = DEGREES_TO_RADIANS * Math.tan(latitude * DEGREES_TO_RADIANS) / latCosine;\n var pixelsPerDegreeY2 = pixelsPerDegreeX * latCosine2 / 2;\n var altPixelsPerDegree2 = worldSize / EARTH_CIRCUMFERENCE * latCosine2;\n var altPixelsPerMeter2 = altPixelsPerDegree2 / pixelsPerDegreeY * altPixelsPerMeter;\n result.pixelsPerDegree2 = [0, -pixelsPerDegreeY2, altPixelsPerDegree2];\n result.pixelsPerMeter2 = [altPixelsPerMeter2, 0, altPixelsPerMeter2];\n }\n\n return result;\n}\nexport function addMetersToLngLat(lngLatZ, xyz) {\n var _lngLatZ = _slicedToArray(lngLatZ, 3),\n longitude = _lngLatZ[0],\n latitude = _lngLatZ[1],\n z0 = _lngLatZ[2];\n\n var _xyz = _slicedToArray(xyz, 3),\n x = _xyz[0],\n y = _xyz[1],\n z = _xyz[2];\n\n var scale = 1;\n\n var _getDistanceScales = getDistanceScales({\n longitude: longitude,\n latitude: latitude,\n scale: scale,\n highPrecision: true\n }),\n pixelsPerMeter = _getDistanceScales.pixelsPerMeter,\n pixelsPerMeter2 = _getDistanceScales.pixelsPerMeter2;\n\n var worldspace = lngLatToWorld(lngLatZ, scale);\n worldspace[0] += x * (pixelsPerMeter[0] + pixelsPerMeter2[0] * y);\n worldspace[1] += y * (pixelsPerMeter[1] + pixelsPerMeter2[1] * y);\n var newLngLat = worldToLngLat(worldspace, scale);\n var newZ = (z0 || 0) + (z || 0);\n return Number.isFinite(z0) || Number.isFinite(z) ? [newLngLat[0], newLngLat[1], newZ] : newLngLat;\n}\nexport function getViewMatrix(_ref7) {\n var height = _ref7.height,\n pitch = _ref7.pitch,\n bearing = _ref7.bearing,\n altitude = _ref7.altitude,\n _ref7$center = _ref7.center,\n center = _ref7$center === void 0 ? null : _ref7$center,\n _ref7$flipY = _ref7.flipY,\n flipY = _ref7$flipY === void 0 ? false : _ref7$flipY;\n var vm = createMat4();\n mat4.translate(vm, vm, [0, 0, -altitude]);\n mat4.scale(vm, vm, [1, 1, 1 / height]);\n mat4.rotateX(vm, vm, -pitch * DEGREES_TO_RADIANS);\n mat4.rotateZ(vm, vm, bearing * DEGREES_TO_RADIANS);\n\n if (flipY) {\n mat4.scale(vm, vm, [1, -1, 1]);\n }\n\n if (center) {\n mat4.translate(vm, vm, vec3.negate([], center));\n }\n\n return vm;\n}\nexport function getProjectionParameters(_ref8) {\n var width = _ref8.width,\n height = _ref8.height,\n _ref8$altitude = _ref8.altitude,\n altitude = _ref8$altitude === void 0 ? DEFAULT_ALTITUDE : _ref8$altitude,\n _ref8$pitch = _ref8.pitch,\n pitch = _ref8$pitch === void 0 ? 0 : _ref8$pitch,\n _ref8$nearZMultiplier = _ref8.nearZMultiplier,\n nearZMultiplier = _ref8$nearZMultiplier === void 0 ? 1 : _ref8$nearZMultiplier,\n _ref8$farZMultiplier = _ref8.farZMultiplier,\n farZMultiplier = _ref8$farZMultiplier === void 0 ? 1 : _ref8$farZMultiplier;\n var pitchRadians = pitch * DEGREES_TO_RADIANS;\n var halfFov = Math.atan(0.5 / altitude);\n var topHalfSurfaceDistance = Math.sin(halfFov) * altitude / Math.sin(Math.PI / 2 - pitchRadians - halfFov);\n var farZ = Math.cos(Math.PI / 2 - pitchRadians) * topHalfSurfaceDistance + altitude;\n return {\n fov: 2 * Math.atan(height / 2 / altitude),\n aspect: width / height,\n focalDistance: altitude,\n near: nearZMultiplier,\n far: farZ * farZMultiplier\n };\n}\nexport function getProjectionMatrix(_ref9) {\n var width = _ref9.width,\n height = _ref9.height,\n pitch = _ref9.pitch,\n altitude = _ref9.altitude,\n nearZMultiplier = _ref9.nearZMultiplier,\n farZMultiplier = _ref9.farZMultiplier;\n\n var _getProjectionParamet = getProjectionParameters({\n width: width,\n height: height,\n altitude: altitude,\n pitch: pitch,\n nearZMultiplier: nearZMultiplier,\n farZMultiplier: farZMultiplier\n }),\n fov = _getProjectionParamet.fov,\n aspect = _getProjectionParamet.aspect,\n near = _getProjectionParamet.near,\n far = _getProjectionParamet.far;\n\n var projectionMatrix = mat4.perspective([], fov, aspect, near, far);\n return projectionMatrix;\n}\nexport function worldToPixels(xyz, pixelProjectionMatrix) {\n var _xyz2 = _slicedToArray(xyz, 3),\n x = _xyz2[0],\n y = _xyz2[1],\n _xyz2$ = _xyz2[2],\n z = _xyz2$ === void 0 ? 0 : _xyz2$;\n\n assert(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(z));\n return transformVector(pixelProjectionMatrix, [x, y, z, 1]);\n}\nexport function pixelsToWorld(xyz, pixelUnprojectionMatrix) {\n var targetZ = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n var _xyz3 = _slicedToArray(xyz, 3),\n x = _xyz3[0],\n y = _xyz3[1],\n z = _xyz3[2];\n\n assert(Number.isFinite(x) && Number.isFinite(y), 'invalid pixel coordinate');\n\n if (Number.isFinite(z)) {\n var coord = transformVector(pixelUnprojectionMatrix, [x, y, z, 1]);\n return coord;\n }\n\n var coord0 = transformVector(pixelUnprojectionMatrix, [x, y, 0, 1]);\n var coord1 = transformVector(pixelUnprojectionMatrix, [x, y, 1, 1]);\n var z0 = coord0[2];\n var z1 = coord1[2];\n var t = z0 === z1 ? 0 : ((targetZ || 0) - z0) / (z1 - z0);\n return vec2.lerp([], coord0, coord1, t);\n}\n//# sourceMappingURL=web-mercator-utils.js.map","/*!\n * @antv/g-dom-mutation-observer-api\n * @description A simple implementation of DOM MutationObserver API.\n * @version 2.0.35\n * @date 5/9/2025, 8:19:26 AM\n * @author AntVis\n * @docs https://g.antv.antgroup.com/\n */\nimport _classCallCheck from '@babel/runtime/helpers/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/createClass';\nimport { ElementEvent, MutationEvent, runtime } from '@antv/g-lite';\n\nvar MutationRecord = /*#__PURE__*/function () {\n function MutationRecord(type, target) {\n _classCallCheck(this, MutationRecord);\n this.addedNodes = [];\n this.attributeName = null;\n this.attributeNamespace = null;\n this.nextSibling = null;\n this.oldValue = null;\n this.previousSibling = null;\n this.removedNodes = [];\n this.type = type;\n this.target = target;\n }\n return _createClass(MutationRecord, null, [{\n key: \"copy\",\n value: function copy(original) {\n var record = new MutationRecord(original.type, original.target);\n record.addedNodes = original.addedNodes.slice();\n record.removedNodes = original.removedNodes.slice();\n record.previousSibling = original.previousSibling;\n record.nextSibling = original.nextSibling;\n record.attributeName = original.attributeName;\n record.attributeNamespace = original.attributeNamespace;\n record.oldValue = original.oldValue;\n return record;\n }\n }]);\n}();\n\nvar uidCounter = 0;\nvar registrationsTable = new WeakMap();\nvar Registration = /*#__PURE__*/function () {\n function Registration(observer, target, options) {\n _classCallCheck(this, Registration);\n this.transientObservedNodes = [];\n this.observer = observer;\n this.target = target;\n this.options = options;\n }\n return _createClass(Registration, [{\n key: \"enqueue\",\n value: function enqueue(record) {\n var records = this.observer.records;\n var length = records.length;\n\n // There are cases where we replace the last record with the new record.\n // For example if the record represents the same mutation we need to use\n // the one with the oldValue. If we get same record (this can happen as we\n // walk up the tree) we ignore the new record.\n if (records.length > 0) {\n var lastRecord = records[length - 1];\n var recordToReplaceLast = selectRecord(lastRecord, record);\n if (recordToReplaceLast) {\n records[length - 1] = recordToReplaceLast;\n return;\n }\n } else {\n scheduleCallback(this.observer);\n }\n records[length] = record;\n }\n }, {\n key: \"addListeners\",\n value: function addListeners() {\n this.addListeners_(this.target);\n }\n }, {\n key: \"addListeners_\",\n value: function addListeners_(node) {\n var options = this.options;\n if (options.attributes) node.addEventListener(ElementEvent.ATTR_MODIFIED, this, true);\n\n // if (options.characterData) node.addEventListener('DOMCharacterDataModified', this, true);\n\n if (options.childList) node.addEventListener(ElementEvent.INSERTED, this, true);\n if (options.childList || options.subtree) node.addEventListener(ElementEvent.REMOVED, this, true);\n }\n }, {\n key: \"removeListeners\",\n value: function removeListeners() {\n this.removeListeners_(this.target);\n }\n }, {\n key: \"removeListeners_\",\n value: function removeListeners_(node) {\n var options = this.options;\n if (options.attributes) node.removeEventListener(ElementEvent.ATTR_MODIFIED, this, true);\n\n // if (options.characterData) node.removeEventListener('DOMCharacterDataModified', this, true);\n\n if (options.childList) node.removeEventListener(ElementEvent.INSERTED, this, true);\n if (options.childList || options.subtree) node.removeEventListener(ElementEvent.REMOVED, this, true);\n }\n\n /**\n * Adds a transient observer on node. The transient observer gets removed\n * next time we deliver the change records.\n */\n // addTransientObserver(node: IElement) {\n // // Don't add transient observers on the target itself. We already have all\n // // the required listeners set up on the target.\n // if (node === this.target) return;\n\n // this.addListeners_(node);\n // this.transientObservedNodes.push(node);\n // let registrations = registrationsTable.get(node);\n // if (!registrations) registrationsTable.set(node, (registrations = []));\n\n // // We know that registrations does not contain this because we already\n // // checked if node === this.target.\n // registrations.push(this);\n // }\n }, {\n key: \"removeTransientObservers\",\n value: function removeTransientObservers() {\n var transientObservedNodes = this.transientObservedNodes;\n this.transientObservedNodes = [];\n transientObservedNodes.forEach(function (node) {\n // Transient observers are never added to the target.\n this.removeListeners_(node);\n var registrations = registrationsTable.get(node);\n for (var i = 0; i < registrations.length; i++) {\n if (registrations[i] === this) {\n registrations.splice(i, 1);\n // Each node can only have one registered observer associated with\n // this observer.\n break;\n }\n }\n }, this);\n }\n }, {\n key: \"handleEvent\",\n value: function handleEvent(e) {\n // Stop propagation since we are managing the propagation manually.\n // This means that other mutation events on the page will not work\n // correctly but that is by design.\n e.stopImmediatePropagation();\n var record;\n var target;\n switch (e.type) {\n case ElementEvent.ATTR_MODIFIED:\n // http://dom.spec.whatwg.org/#concept-mo-queue-attributes\n\n var name = e.attrName;\n // @ts-ignore\n var namespace = e.relatedNode.namespaceURI;\n target = e.target;\n\n // 1.\n record = getRecord('attributes', target);\n record.attributeName = name;\n record.attributeNamespace = namespace;\n\n // 2.\n var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue;\n forEachAncestorAndObserverEnqueueRecord(target, function (options) {\n // 3.1, 4.2\n if (!options.attributes) return;\n\n // 3.2, 4.3\n if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) {\n return;\n }\n // 3.3, 4.4\n if (options.attributeOldValue) return getRecordWithOldValue(oldValue);\n\n // 3.4, 4.5\n return record;\n });\n break;\n\n // case 'DOMCharacterDataModified':\n // // http://dom.spec.whatwg.org/#concept-mo-queue-characterdata\n // var target = e.target;\n\n // // 1.\n // var record = getRecord('characterData', target);\n\n // // 2.\n // var oldValue = e.prevValue;\n\n // forEachAncestorAndObserverEnqueueRecord(target, function(options) {\n // // 3.1, 4.2\n // if (!options.characterData)\n // return;\n\n // // 3.2, 4.3\n // if (options.characterDataOldValue)\n // return getRecordWithOldValue(oldValue);\n\n // // 3.3, 4.4\n // return record;\n // });\n\n // break;\n\n case ElementEvent.REMOVED:\n // this.addTransientObserver(e.target as IElement);\n // Fall through.\n case ElementEvent.INSERTED:\n // http://dom.spec.whatwg.org/#concept-mo-queue-childlist\n target = e.relatedNode;\n var changedNode = e.target;\n var addedNodes;\n var removedNodes;\n if (e.type === ElementEvent.INSERTED) {\n addedNodes = [changedNode];\n removedNodes = [];\n } else {\n addedNodes = [];\n removedNodes = [changedNode];\n }\n var previousSibling = changedNode.previousSibling;\n var nextSibling = changedNode.nextSibling;\n\n // 1.\n record = getRecord('childList', target);\n record.addedNodes = addedNodes;\n record.removedNodes = removedNodes;\n record.previousSibling = previousSibling;\n record.nextSibling = nextSibling;\n forEachAncestorAndObserverEnqueueRecord(target, function (options) {\n // 2.1, 3.2\n if (!options.childList) return;\n\n // 2.2, 3.3\n return record;\n });\n }\n clearRecords();\n }\n }]);\n}();\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver\n * @see https://github.com/googlearchive/MutationObservers/blob/master/MutationObserver.js\n */\nvar MutationObserver = /*#__PURE__*/function () {\n function MutationObserver(callback) {\n _classCallCheck(this, MutationObserver);\n this.nodes = [];\n this.records = [];\n this.uid = uidCounter++;\n this.callback = callback;\n }\n return _createClass(MutationObserver, [{\n key: \"observe\",\n value: function observe(target, options) {\n // 1.1\n if (!options.childList && !options.attributes && !options.characterData ||\n // 1.2\n options.attributeOldValue && !options.attributes ||\n // 1.3\n options.attributeFilter && options.attributeFilter.length && !options.attributes ||\n // 1.4\n options.characterDataOldValue && !options.characterData) {\n throw new SyntaxError();\n }\n var registrations = registrationsTable.get(target);\n if (!registrations) registrationsTable.set(target, registrations = []);\n\n // 2\n // If target's list of registered observers already includes a registered\n // observer associated with the context object, replace that registered\n // observer's options with options.\n var registration;\n for (var i = 0; i < registrations.length; i++) {\n if (registrations[i].observer === this) {\n registration = registrations[i];\n registration.removeListeners();\n registration.options = options;\n break;\n }\n }\n\n // 3.\n // Otherwise, add a new registered observer to target's list of registered\n // observers with the context object as the observer and options as the\n // options, and add target to context object's list of nodes on which it\n // is registered.\n if (!registration) {\n registration = new Registration(this, target, options);\n registrations.push(registration);\n this.nodes.push(target);\n }\n registration.addListeners();\n }\n }, {\n key: \"disconnect\",\n value: function disconnect() {\n var _this = this;\n this.nodes.forEach(function (node) {\n var registrations = registrationsTable.get(node);\n for (var i = 0; i < registrations.length; i++) {\n var registration = registrations[i];\n if (registration.observer === _this) {\n registration.removeListeners();\n registrations.splice(i, 1);\n // Each node can only have one registered observer associated with\n // this observer.\n break;\n }\n }\n }, this);\n this.records = [];\n }\n }, {\n key: \"takeRecords\",\n value: function takeRecords() {\n var copyOfRecords = this.records;\n this.records = [];\n return copyOfRecords;\n }\n }]);\n}();\n\n// We keep track of the two (possibly one) records used in a single mutation.\nvar currentRecord;\nvar recordWithOldValue;\n\n/**\n * Creates a record without |oldValue| and caches it as |currentRecord| for\n * later use.\n */\nfunction getRecord(type, target) {\n return currentRecord = new MutationRecord(type, target);\n}\n\n/**\n * Gets or creates a record with |oldValue| based in the |currentRecord|\n */\nfunction getRecordWithOldValue(oldValue) {\n if (recordWithOldValue) return recordWithOldValue;\n recordWithOldValue = MutationRecord.copy(currentRecord);\n recordWithOldValue.oldValue = oldValue;\n return recordWithOldValue;\n}\nfunction clearRecords() {\n currentRecord = recordWithOldValue = undefined;\n}\n\n/**\n * Whether the record represents a record from the current\n * mutation event.\n */\nfunction recordRepresentsCurrentMutation(record) {\n return record === recordWithOldValue || record === currentRecord;\n}\n\n/**\n * Selects which record, if any, to replace the last record in the queue.\n * This returns |null| if no record should be replaced.\n */\nfunction selectRecord(lastRecord, newRecord) {\n if (lastRecord === newRecord) return lastRecord;\n\n // Check if the the record we are adding represents the same record. If\n // so, we keep the one with the oldValue in it.\n if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) return recordWithOldValue;\n return null;\n}\nfunction removeTransientObserversFor(observer) {\n observer.nodes.forEach(function (node) {\n var registrations = registrationsTable.get(node);\n if (!registrations) return;\n registrations.forEach(function (registration) {\n if (registration.observer === observer) registration.removeTransientObservers();\n });\n });\n}\n\n/**\n * This function is used for the \"For each registered observer observer (with\n * observer's options as options) in target's list of registered observers,\n * run these substeps:\" and the \"For each ancestor ancestor of target, and for\n * each registered observer observer (with options options) in ancestor's list\n * of registered observers, run these substeps:\" part of the algorithms. The\n * |options.subtree| is checked to ensure that the callback is called\n * correctly.\n *\n * @param {Node} target\n * @param {function(MutationObserverInit):MutationRecord} callback\n */\nfunction forEachAncestorAndObserverEnqueueRecord(target, callback) {\n for (var node = target; node; node = node.parentNode) {\n var registrations = registrationsTable.get(node);\n if (registrations) {\n for (var j = 0; j < registrations.length; j++) {\n var registration = registrations[j];\n var _options = registration.options;\n\n // Only target ignores subtree.\n if (node !== target && !_options.subtree) continue;\n var record = callback(_options);\n if (record) registration.enqueue(record);\n }\n }\n }\n}\n\n// This is used to ensure that we never schedule 2 callas to setImmediate\nvar isScheduled = false;\n\n// Keep track of observers that needs to be notified next time.\nvar scheduledObservers = [];\n\n/**\n * Schedules |dispatchCallback| to be called in the future.\n */\nfunction scheduleCallback(observer) {\n scheduledObservers.push(observer);\n if (!isScheduled) {\n isScheduled = true;\n // setImmediate(dispatchCallbacks);\n if (typeof runtime.globalThis !== 'undefined') {\n runtime.globalThis.setTimeout(dispatchCallbacks);\n } else {\n dispatchCallbacks();\n }\n }\n}\nfunction dispatchCallbacks() {\n // http://dom.spec.whatwg.org/#mutation-observers\n\n isScheduled = false; // Used to allow a new setImmediate call above.\n\n var observers = scheduledObservers;\n scheduledObservers = [];\n // Sort observers based on their creation UID (incremental).\n observers.sort(function (o1, o2) {\n return o1.uid - o2.uid;\n });\n var anyNonEmpty = false;\n observers.forEach(function (observer) {\n // 2.1, 2.2\n var queue = observer.takeRecords();\n // 2.3. Remove all transient registered observers whose observer is mo.\n removeTransientObserversFor(observer);\n\n // 2.4\n if (queue.length) {\n // @ts-ignore\n observer.callback(queue, observer);\n anyNonEmpty = true;\n }\n });\n\n // 3.\n if (anyNonEmpty) dispatchCallbacks();\n}\n\nexport { MutationObserver, MutationRecord, Registration };\n//# sourceMappingURL=index.esm.js.map\n","/*!\n * @antv/g-camera-api\n * @description A simple implementation of Camera API.\n * @version 2.0.38\n * @date 5/9/2025, 8:19:12 AM\n * @author AntVis\n * @docs https://g.antv.antgroup.com/\n */\nimport { getAngle, CameraType, deg2rad, createVec3, runtime, Camera } from '@antv/g-lite';\nimport _classCallCheck from '@babel/runtime/helpers/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/createClass';\nimport _callSuper from '@babel/runtime/helpers/callSuper';\nimport _inherits from '@babel/runtime/helpers/inherits';\nimport { isString, isNumber } from '@antv/util';\nimport { quat, mat4, vec3 } from 'gl-matrix';\n\n/**\n * Provides camera action & animation.\n */\nvar AdvancedCamera = /*#__PURE__*/function (_Camera) {\n function AdvancedCamera() {\n var _this;\n _classCallCheck(this, AdvancedCamera);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _callSuper(this, AdvancedCamera, [].concat(args));\n /**\n * switch between multiple landmarks\n */\n _this.landmarks = [];\n return _this;\n }\n _inherits(AdvancedCamera, _Camera);\n return _createClass(AdvancedCamera, [{\n key: \"rotate\",\n value:\n /**\n * Changes the azimuth and elevation with respect to the current camera axes\n * @param {Number} azimuth the relative azimuth\n * @param {Number} elevation the relative elevation\n * @param {Number} roll the relative roll\n */\n function rotate(azimuth, elevation, roll) {\n this.relElevation = getAngle(elevation);\n this.relAzimuth = getAngle(azimuth);\n this.relRoll = getAngle(roll);\n this.elevation += this.relElevation;\n this.azimuth += this.relAzimuth;\n this.roll += this.relRoll;\n if (this.type === CameraType.EXPLORING) {\n var rotX = quat.setAxisAngle(quat.create(), [1, 0, 0], deg2rad((this.rotateWorld ? 1 : -1) * this.relElevation));\n var rotY = quat.setAxisAngle(quat.create(), [0, 1, 0], deg2rad((this.rotateWorld ? 1 : -1) * this.relAzimuth));\n var rotZ = quat.setAxisAngle(quat.create(), [0, 0, 1], deg2rad(this.relRoll));\n var rotQ = quat.multiply(quat.create(), rotY, rotX);\n rotQ = quat.multiply(quat.create(), rotQ, rotZ);\n var rotMatrix = mat4.fromQuat(mat4.create(), rotQ);\n mat4.translate(this.matrix, this.matrix, [0, 0, -this.distance]);\n mat4.multiply(this.matrix, this.matrix, rotMatrix);\n mat4.translate(this.matrix, this.matrix, [0, 0, this.distance]);\n } else {\n if (Math.abs(this.elevation) > 90) {\n return this;\n }\n this.computeMatrix();\n }\n this._getAxes();\n if (this.type === CameraType.ORBITING || this.type === CameraType.EXPLORING) {\n this._getPosition();\n } else if (this.type === CameraType.TRACKING) {\n this._getFocalPoint();\n }\n this._update();\n return this;\n }\n\n /**\n * 沿水平(right) & 垂直(up)平移相机\n */\n }, {\n key: \"pan\",\n value: function pan(tx, ty) {\n var coords = createVec3(tx, ty, 0);\n var pos = vec3.clone(this.position);\n vec3.add(pos, pos, vec3.scale(vec3.create(), this.right, coords[0]));\n vec3.add(pos, pos, vec3.scale(vec3.create(), this.up, coords[1]));\n this._setPosition(pos);\n this.triggerUpdate();\n return this;\n }\n\n /**\n * 沿 n 轴移动,当距离视点远时移动速度较快,离视点越近速度越慢\n */\n }, {\n key: \"dolly\",\n value: function dolly(value) {\n var n = this.forward;\n var pos = vec3.clone(this.position);\n var step = value * this.dollyingStep;\n var updatedDistance = this.distance + value * this.dollyingStep;\n\n // 限制视点距离范围\n step = Math.max(Math.min(updatedDistance, this.maxDistance), this.minDistance) - this.distance;\n pos[0] += step * n[0];\n pos[1] += step * n[1];\n pos[2] += step * n[2];\n this._setPosition(pos);\n if (this.type === CameraType.ORBITING || this.type === CameraType.EXPLORING) {\n // 重新计算视点距离\n this._getDistance();\n } else if (this.type === CameraType.TRACKING) {\n // 保持视距,移动视点位置\n vec3.add(this.focalPoint, pos, this.distanceVector);\n }\n this.triggerUpdate();\n return this;\n }\n }, {\n key: \"cancelLandmarkAnimation\",\n value: function cancelLandmarkAnimation() {\n if (this.landmarkAnimationID !== undefined) {\n this.canvas.cancelAnimationFrame(this.landmarkAnimationID);\n }\n }\n }, {\n key: \"createLandmark\",\n value: function createLandmark(name) {\n var _position$, _position$2, _focalPoint$, _focalPoint$2;\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$position = params.position,\n position = _params$position === void 0 ? this.position : _params$position,\n _params$focalPoint = params.focalPoint,\n focalPoint = _params$focalPoint === void 0 ? this.focalPoint : _params$focalPoint,\n roll = params.roll,\n zoom = params.zoom;\n var camera = new runtime.CameraContribution();\n camera.setType(this.type, undefined);\n camera.setPosition(position[0], (_position$ = position[1]) !== null && _position$ !== void 0 ? _position$ : this.position[1], (_position$2 = position[2]) !== null && _position$2 !== void 0 ? _position$2 : this.position[2]);\n camera.setFocalPoint(focalPoint[0], (_focalPoint$ = focalPoint[1]) !== null && _focalPoint$ !== void 0 ? _focalPoint$ : this.focalPoint[1], (_focalPoint$2 = focalPoint[2]) !== null && _focalPoint$2 !== void 0 ? _focalPoint$2 : this.focalPoint[2]);\n camera.setRoll(roll !== null && roll !== void 0 ? roll : this.roll);\n camera.setZoom(zoom !== null && zoom !== void 0 ? zoom : this.zoom);\n var landmark = {\n name: name,\n matrix: mat4.clone(camera.getWorldTransform()),\n right: vec3.clone(camera.right),\n up: vec3.clone(camera.up),\n forward: vec3.clone(camera.forward),\n position: vec3.clone(camera.getPosition()),\n focalPoint: vec3.clone(camera.getFocalPoint()),\n distanceVector: vec3.clone(camera.getDistanceVector()),\n distance: camera.getDistance(),\n dollyingStep: camera.getDollyingStep(),\n azimuth: camera.getAzimuth(),\n elevation: camera.getElevation(),\n roll: camera.getRoll(),\n relAzimuth: camera.relAzimuth,\n relElevation: camera.relElevation,\n relRoll: camera.relRoll,\n zoom: camera.getZoom()\n };\n this.landmarks.push(landmark);\n return landmark;\n }\n }, {\n key: \"gotoLandmark\",\n value: function gotoLandmark(name) {\n var _this2 = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var landmark = isString(name) ? this.landmarks.find(function (l) {\n return l.name === name;\n }) : name;\n if (landmark) {\n var _ref = isNumber(options) ? {\n duration: options\n } : options,\n _ref$easing = _ref.easing,\n easing = _ref$easing === void 0 ? 'linear' : _ref$easing,\n _ref$duration = _ref.duration,\n duration = _ref$duration === void 0 ? 100 : _ref$duration,\n _ref$easingFunction = _ref.easingFunction,\n easingFunction = _ref$easingFunction === void 0 ? undefined : _ref$easingFunction,\n _ref$onfinish = _ref.onfinish,\n onfinish = _ref$onfinish === void 0 ? undefined : _ref$onfinish,\n _ref$onframe = _ref.onframe,\n onframe = _ref$onframe === void 0 ? undefined : _ref$onframe;\n var epsilon = 0.01;\n\n // cancel ongoing animation\n this.cancelLandmarkAnimation();\n var destPosition = landmark.position;\n var destFocalPoint = landmark.focalPoint;\n var destZoom = landmark.zoom;\n var destRoll = landmark.roll;\n var easingFunc = easingFunction || runtime.EasingFunction(easing);\n var timeStart;\n var end = function end() {\n _this2.setFocalPoint(destFocalPoint);\n _this2.setPosition(destPosition);\n _this2.setRoll(destRoll);\n _this2.setZoom(destZoom);\n _this2.computeMatrix();\n _this2.triggerUpdate();\n onfinish === null || onfinish === void 0 || onfinish();\n };\n if (duration === 0) return end();\n var _animate = function animate(timestamp) {\n if (timeStart === undefined) {\n timeStart = timestamp;\n }\n var elapsed = timestamp - timeStart;\n if (elapsed >= duration) {\n end();\n return;\n }\n // use the same ease function in animation system\n var t = easingFunc(elapsed / duration);\n var interFocalPoint = vec3.create();\n var interPosition = vec3.create();\n var interZoom = 1;\n var interRoll = 0;\n vec3.lerp(interFocalPoint, _this2.focalPoint, destFocalPoint, t);\n vec3.lerp(interPosition, _this2.position, destPosition, t);\n interRoll = _this2.roll * (1 - t) + destRoll * t;\n interZoom = _this2.zoom * (1 - t) + destZoom * t;\n _this2.setFocalPoint(interFocalPoint);\n _this2.setPosition(interPosition);\n _this2.setRoll(interRoll);\n _this2.setZoom(interZoom);\n var dist = vec3.dist(interFocalPoint, destFocalPoint) + vec3.dist(interPosition, destPosition);\n if (dist <= epsilon && destZoom === undefined && destRoll === undefined) {\n return end();\n }\n _this2.computeMatrix();\n _this2.triggerUpdate();\n if (elapsed < duration) {\n onframe === null || onframe === void 0 || onframe(t);\n _this2.landmarkAnimationID = _this2.canvas.requestAnimationFrame(_animate);\n }\n };\n this.canvas.requestAnimationFrame(_animate);\n }\n }\n\n /**\n * Sets the camera to a distance such that the area covered by the bounding box is viewed.\n */\n // shot(displayObject: DisplayObject) {\n // const aabb = displayObject.getBounds();\n\n // if (!AABB.isEmpty(aabb)) {\n // this.setElevation(0);\n // this.setAzimuth(0);\n // this.setRoll(0);\n\n // const { halfExtents, center } = aabb;\n // const maxDim = Math.max(halfExtents[0] * 2, halfExtents[1] * 2);\n\n // const cc = center.map((c: number) => Math.round(c * 1000) / 1000) as [number, number, number];\n\n // if (maxDim !== 0) {\n // const d = (1.5 * maxDim) / Math.tan(this.fov * DEG_2_RAD);\n // this.setPosition([cc[0], cc[1], cc[2] + d]);\n // }\n\n // this.setFocalPoint(cc);\n // }\n // }\n }]);\n}(Camera);\n\nruntime.CameraContribution = AdvancedCamera;\n\nexport { AdvancedCamera };\n//# sourceMappingURL=index.esm.js.map\n","/*!\n * @antv/g-web-animations-api\n * @description A simple implementation of Web Animations API.\n * @version 2.1.25\n * @date 5/23/2025, 7:01:32 AM\n * @author AntVis\n * @docs https://g.antv.antgroup.com/\n */\nimport { FederatedEvent, ERROR_MSG_METHOD_NOT_IMPLEMENTED, propertyMetadataCache, runtime } from '@antv/g-lite';\nimport _classCallCheck from '@babel/runtime/helpers/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/createClass';\nimport _callSuper from '@babel/runtime/helpers/callSuper';\nimport _inherits from '@babel/runtime/helpers/inherits';\nimport _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';\nimport _slicedToArray from '@babel/runtime/helpers/slicedToArray';\nimport { clamp, isNumber, isNil } from '@antv/util';\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationPlaybackEvent\n */\n// @ts-ignore\nvar AnimationEvent = /*#__PURE__*/function (_FederatedEvent) {\n function AnimationEvent(manager, target, currentTime, timelineTime) {\n var _this;\n _classCallCheck(this, AnimationEvent);\n _this = _callSuper(this, AnimationEvent, [manager]);\n\n // @ts-ignore\n _this.currentTime = currentTime;\n _this.timelineTime = timelineTime;\n _this.target = target;\n _this.type = 'finish';\n _this.bubbles = false;\n // @ts-ignore\n _this.currentTarget = target;\n _this.defaultPrevented = false;\n _this.eventPhase = _this.AT_TARGET;\n _this.timeStamp = Date.now();\n _this.currentTime = currentTime;\n _this.timelineTime = timelineTime;\n return _this;\n }\n _inherits(AnimationEvent, _FederatedEvent);\n return _createClass(AnimationEvent);\n}(FederatedEvent);\n\nvar sequenceNumber = 0;\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Animation/Animation\n */\nvar Animation = /*#__PURE__*/function () {\n function Animation(effect, timeline) {\n var _this$effect;\n _classCallCheck(this, Animation);\n this.currentTimePending = false;\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Animation/playState\n */\n // playState: AnimationPlayState;\n this._idle = true;\n this._paused = false;\n this._finishedFlag = true;\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Animation/currentTime\n */\n this._currentTime = 0;\n this._playbackRate = 1;\n this._inTimeline = true;\n this.effect = effect;\n effect.animation = this;\n this.timeline = timeline;\n this.id = \"\".concat(sequenceNumber++);\n this._inEffect = !!this.effect.update(0);\n this._totalDuration = Number((_this$effect = this.effect) === null || _this$effect === void 0 ? void 0 : _this$effect.getComputedTiming().endTime);\n this._holdTime = 0;\n this._paused = false;\n this.oldPlayState = 'idle';\n this.updatePromises();\n }\n\n /**\n * state machine,\n * resolve/reject ready/finished Promise according to current state\n */\n return _createClass(Animation, [{\n key: \"pending\",\n get:\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Animation/effect\n */\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Animation/timeline\n */\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Animation/id\n */\n\n // animation: InternalAnimation | null;\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Animation/pending\n */\n function get() {\n return this._startTime === null && !this._paused && this.playbackRate !== 0 || this.currentTimePending;\n }\n }, {\n key: \"playState\",\n get: function get() {\n if (this._idle) return 'idle';\n if (this._isFinished) return 'finished';\n if (this._paused) return 'paused';\n return 'running';\n }\n\n /**\n * record previos state\n */\n }, {\n key: \"ready\",\n get:\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Animation/ready\n * @example\n animation.pause();\n animation.ready.then(function() {\n // Displays 'running'\n alert(animation.playState);\n });\n animation.play();\n */\n function get() {\n var _this = this;\n if (!this.readyPromise) {\n if (this.timeline.animationsWithPromises.indexOf(this) === -1) {\n this.timeline.animationsWithPromises.push(this);\n }\n this.readyPromise = new Promise(function (resolve, reject) {\n _this.resolveReadyPromise = function () {\n resolve(_this);\n };\n _this.rejectReadyPromise = function () {\n reject(new Error());\n };\n });\n if (!this.pending) {\n this.resolveReadyPromise();\n }\n }\n return this.readyPromise;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Animation/finished\n * @example\n Promise.all(\n elem.getAnimations().map(\n function(animation) {\n return animation.finished\n }\n )\n ).then(\n function() {\n return elem.remove();\n }\n );\n */\n }, {\n key: \"finished\",\n get: function get() {\n var _this2 = this;\n if (!this.finishedPromise) {\n if (this.timeline.animationsWithPromises.indexOf(this) === -1) {\n this.timeline.animationsWithPromises.push(this);\n }\n this.finishedPromise = new Promise(function (resolve, reject) {\n _this2.resolveFinishedPromise = function () {\n resolve(_this2);\n };\n _this2.rejectFinishedPromise = function () {\n reject(new Error());\n };\n });\n if (this.playState === 'finished') {\n this.resolveFinishedPromise();\n }\n }\n return this.finishedPromise;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Animation/onfinish\n */\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Animation/oncancel\n */\n\n /**\n * get called after each frame when running\n */\n }, {\n key: \"currentTime\",\n get: function get() {\n this.updatePromises();\n return this._idle || this.currentTimePending ? null : this._currentTime;\n },\n set: function set(newTime) {\n newTime = Number(newTime);\n if (isNaN(newTime)) return;\n this.timeline.restart();\n if (!this._paused && this._startTime !== null) {\n var _this$timeline;\n this._startTime = Number((_this$timeline = this.timeline) === null || _this$timeline === void 0 ? void 0 : _this$timeline.currentTime) - newTime / this.playbackRate;\n }\n this.currentTimePending = false;\n if (this._currentTime === newTime) {\n return;\n }\n if (this._idle) {\n this._idle = false;\n this._paused = true;\n }\n this.tickCurrentTime(newTime, true);\n this.timeline.applyDirtiedAnimation(this);\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Animation/startTime\n */\n }, {\n key: \"startTime\",\n get: function get() {\n return this._startTime;\n },\n set: function set(newTime) {\n if (newTime !== null) {\n this.updatePromises();\n newTime = Number(newTime);\n if (isNaN(newTime)) return;\n if (this._paused || this._idle) return;\n this._startTime = newTime;\n this.tickCurrentTime((Number(this.timeline.currentTime) - this._startTime) * this.playbackRate);\n this.timeline.applyDirtiedAnimation(this);\n this.updatePromises();\n }\n }\n }, {\n key: \"playbackRate\",\n get: function get() {\n return this._playbackRate;\n },\n set: function set(value) {\n if (value === this._playbackRate) {\n return;\n }\n this.updatePromises();\n var oldCurrentTime = this.currentTime;\n this._playbackRate = value;\n this.startTime = null;\n if (this.playState !== 'paused' && this.playState !== 'idle') {\n this._finishedFlag = false;\n this._idle = false;\n this.ensureAlive();\n this.timeline.applyDirtiedAnimation(this);\n }\n if (oldCurrentTime !== null) {\n this.currentTime = oldCurrentTime;\n }\n this.updatePromises();\n }\n }, {\n key: \"_isFinished\",\n get: function get() {\n return !this._idle && (this._playbackRate > 0 && Number(this._currentTime) >= this._totalDuration || this._playbackRate < 0 && Number(this._currentTime) <= 0);\n }\n }, {\n key: \"totalDuration\",\n get: function get() {\n return this._totalDuration;\n }\n }, {\n key: \"_needsTick\",\n get: function get() {\n return this.pending || this.playState === 'running' || !this._finishedFlag;\n }\n }, {\n key: \"updatePromises\",\n value: function updatePromises() {\n var _this$effect$target;\n if ((_this$effect$target = this.effect.target) !== null && _this$effect$target !== void 0 && _this$effect$target.destroyed) {\n this.readyPromise = undefined;\n this.finishedPromise = undefined;\n return false;\n }\n var oldPlayState = this.oldPlayState;\n var newPlayState = this.pending ? 'pending' : this.playState;\n if (this.readyPromise && newPlayState !== oldPlayState) {\n if (newPlayState === 'idle') {\n this.rejectReadyPromise();\n this.readyPromise = undefined;\n } else if (oldPlayState === 'pending') {\n this.resolveReadyPromise();\n } else if (newPlayState === 'pending') {\n this.readyPromise = undefined;\n }\n }\n if (this.finishedPromise && newPlayState !== oldPlayState) {\n if (newPlayState === 'idle') {\n this.rejectFinishedPromise();\n this.finishedPromise = undefined;\n } else if (newPlayState === 'finished') {\n this.resolveFinishedPromise();\n } else if (oldPlayState === 'finished') {\n this.finishedPromise = undefined;\n }\n }\n this.oldPlayState = newPlayState;\n return this.readyPromise || this.finishedPromise;\n }\n }, {\n key: \"play\",\n value: function play() {\n this.updatePromises();\n this._paused = false;\n if (this._isFinished || this._idle) {\n this.rewind();\n this._startTime = null;\n }\n this._finishedFlag = false;\n this._idle = false;\n this.ensureAlive();\n this.timeline.applyDirtiedAnimation(this);\n if (this.timeline.animations.indexOf(this) === -1) {\n this.timeline.animations.push(this);\n }\n this.updatePromises();\n }\n }, {\n key: \"pause\",\n value: function pause() {\n this.updatePromises();\n if (this.currentTime) {\n this._holdTime = this.currentTime;\n }\n if (!this._isFinished && !this._paused && !this._idle) {\n this.currentTimePending = true;\n } else if (this._idle) {\n this.rewind();\n this._idle = false;\n }\n this._startTime = null;\n this._paused = true;\n this.updatePromises();\n }\n }, {\n key: \"finish\",\n value: function finish() {\n this.updatePromises();\n if (this._idle) return;\n this.currentTime = this._playbackRate > 0 ? this._totalDuration : 0;\n this._startTime = this._totalDuration - this.currentTime;\n this.currentTimePending = false;\n this.timeline.applyDirtiedAnimation(this);\n this.updatePromises();\n }\n }, {\n key: \"cancel\",\n value: function cancel() {\n var _this3 = this;\n this.updatePromises();\n if (!this._inEffect) return;\n this._inEffect = false;\n this._idle = true;\n this._paused = false;\n this._finishedFlag = true;\n this._currentTime = 0;\n this._startTime = null;\n this.effect.update(null);\n // effects are invalid after cancellation as the animation state\n // needs to un-apply.\n this.timeline.applyDirtiedAnimation(this);\n this.updatePromises();\n\n /**\n * 1. Reject the current finished promise with a DOMException named \"AbortError\".\n * 2. Let current finished promise be a new promise\n * @see https://w3c.github.io/csswg-drafts/web-animations-1/#canceling-an-animation-section\n */\n // if (this.finishedPromise) {\n // this.rejectFinishedPromise();\n // this.finishedPromise = undefined;\n // }\n\n if (this.oncancel) {\n var event = new AnimationEvent(null, this, this.currentTime, null);\n setTimeout(function () {\n _this3.oncancel(event);\n });\n }\n }\n }, {\n key: \"reverse\",\n value: function reverse() {\n this.updatePromises();\n var oldCurrentTime = this.currentTime;\n this.playbackRate *= -1;\n this.play();\n if (oldCurrentTime !== null) {\n this.currentTime = oldCurrentTime;\n }\n this.updatePromises();\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Animation/updatePlaybackRate\n */\n }, {\n key: \"updatePlaybackRate\",\n value: function updatePlaybackRate(playbackRate) {\n this.playbackRate = playbackRate;\n }\n }, {\n key: \"targetAnimations\",\n value: function targetAnimations() {\n var _this$effect2;\n var target = (_this$effect2 = this.effect) === null || _this$effect2 === void 0 ? void 0 : _this$effect2.target;\n return target.getAnimations();\n }\n }, {\n key: \"markTarget\",\n value: function markTarget() {\n var animations = this.targetAnimations();\n if (animations.indexOf(this) === -1) {\n animations.push(this);\n }\n }\n }, {\n key: \"unmarkTarget\",\n value: function unmarkTarget() {\n var animations = this.targetAnimations();\n var index = animations.indexOf(this);\n if (index !== -1) {\n animations.splice(index, 1);\n }\n }\n }, {\n key: \"tick\",\n value: function tick(timelineTime, isAnimationFrame) {\n if (!this._idle && !this._paused) {\n if (this._startTime === null) {\n if (isAnimationFrame) {\n this.startTime = timelineTime - this._currentTime / this.playbackRate;\n }\n } else if (!this._isFinished) {\n this.tickCurrentTime((timelineTime - this._startTime) * this.playbackRate);\n }\n }\n if (isAnimationFrame) {\n this.currentTimePending = false;\n this.fireEvents(timelineTime);\n }\n }\n }, {\n key: \"rewind\",\n value: function rewind() {\n if (this.playbackRate >= 0) {\n this.currentTime = 0;\n } else if (this._totalDuration < Infinity) {\n this.currentTime = this._totalDuration;\n } else {\n throw new Error('Unable to rewind negative playback rate animation with infinite duration');\n }\n }\n }, {\n key: \"persist\",\n value: function persist() {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"addEventListener\",\n value: function addEventListener(type, listener, options) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"removeEventListener\",\n value: function removeEventListener(type, listener, options) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"dispatchEvent\",\n value: function dispatchEvent(event) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"commitStyles\",\n value:\n // replaceState: AnimationReplaceState;\n function commitStyles() {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"ensureAlive\",\n value: function ensureAlive() {\n // If an animation is playing backwards and is not fill backwards/both\n // then it should go out of effect when it reaches the start of its\n // active interval (currentTime === 0).\n if (this.playbackRate < 0 && this.currentTime === 0) {\n var _this$effect3;\n this._inEffect = !!((_this$effect3 = this.effect) !== null && _this$effect3 !== void 0 && _this$effect3.update(-1));\n } else {\n var _this$effect4;\n this._inEffect = !!((_this$effect4 = this.effect) !== null && _this$effect4 !== void 0 && _this$effect4.update(this.currentTime));\n }\n if (!this._inTimeline && (this._inEffect || !this._finishedFlag)) {\n this._inTimeline = true;\n this.timeline.animations.push(this);\n }\n }\n }, {\n key: \"tickCurrentTime\",\n value: function tickCurrentTime(newTime, ignoreLimit) {\n if (newTime !== this._currentTime) {\n this._currentTime = newTime;\n if (this._isFinished && !ignoreLimit) {\n this._currentTime = this._playbackRate > 0 ? this._totalDuration : 0;\n }\n this.ensureAlive();\n }\n }\n }, {\n key: \"fireEvents\",\n value: function fireEvents(baseTime) {\n var _this4 = this;\n if (this._isFinished) {\n if (!this._finishedFlag) {\n if (this.onfinish) {\n var event = new AnimationEvent(null, this, this.currentTime, baseTime);\n setTimeout(function () {\n if (_this4.onfinish) {\n _this4.onfinish(event);\n }\n });\n }\n this._finishedFlag = true;\n }\n } else {\n if (this.onframe && this.playState === 'running') {\n var _event = new AnimationEvent(null, this, this.currentTime, baseTime);\n this.onframe(_event);\n }\n this._finishedFlag = false;\n }\n }\n }]);\n}();\n\n/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\nvar float32ArraySupported = typeof Float32Array === 'function';\nvar A = function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n};\nvar B = function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n};\nvar C = function C(aA1) {\n return 3.0 * aA1;\n};\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nvar calcBezier = function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n};\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nvar getSlope = function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n};\nvar binarySubdivide = function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX;\n var currentT;\n var i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) aB = currentT;else aA = currentT;\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n};\nvar newtonRaphsonIterate = function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) return aGuessT;\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n};\nvar bezier = function bezier(mX1, mY1, mX2, mY2) {\n if (!(mX1 >= 0 && mX1 <= 1 && mX2 >= 0 && mX2 <= 1)) throw new Error('bezier x values must be in [0, 1] range');\n if (mX1 === mY1 && mX2 === mY2) return function (t) {\n return t;\n };\n\n // Precompute samples table\n var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n var getTForX = function getTForX(aX) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) intervalStart += kSampleStepSize;\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n if (initialSlope === 0.0) return guessForT;\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n };\n return function (t) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (t === 0 || t === 1) return t;\n return calcBezier(getTForX(t), mY1, mY2);\n };\n};\n\nvar convertToDash = function convertToDash(str) {\n str = str.replace(/([A-Z])/g, function (letter) {\n return \"-\".concat(letter.toLowerCase());\n });\n\n // Remove first dash\n return str.charAt(0) === '-' ? str.substring(1) : str;\n};\n/**\n Easing Functions from anime.js, they are tried and true, so, its better to use them instead of other alternatives\n*/\nvar Quad = function Quad(t) {\n return Math.pow(t, 2);\n};\nvar Cubic = function Cubic(t) {\n return Math.pow(t, 3);\n};\nvar Quart = function Quart(t) {\n return Math.pow(t, 4);\n};\nvar Quint = function Quint(t) {\n return Math.pow(t, 5);\n};\nvar Expo = function Expo(t) {\n return Math.pow(t, 6);\n};\nvar Sine = function Sine(t) {\n return 1 - Math.cos(t * Math.PI / 2);\n};\nvar Circ = function Circ(t) {\n return 1 - Math.sqrt(1 - t * t);\n};\nvar Back = function Back(t) {\n return t * t * (3 * t - 2);\n};\nvar Bounce = function Bounce(t) {\n var pow2;\n var b = 4;\n while (t < ((pow2 = Math.pow(2, --b)) - 1) / 11) {}\n return 1 / Math.pow(4, 3 - b) - 7.5625 * Math.pow((pow2 * 3 - 2) / 22 - t, 2);\n};\nvar Elastic = function Elastic(t) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var _params = _slicedToArray(params, 2),\n _params$ = _params[0],\n amplitude = _params$ === void 0 ? 1 : _params$,\n _params$2 = _params[1],\n period = _params$2 === void 0 ? 0.5 : _params$2;\n var a = clamp(Number(amplitude), 1, 10);\n var p = clamp(Number(period), 0.1, 2);\n if (t === 0 || t === 1) return t;\n return -a * Math.pow(2, 10 * (t - 1)) * Math.sin((t - 1 - p / (Math.PI * 2) * Math.asin(1 / a)) * (Math.PI * 2) / p);\n};\nvar Spring = function Spring(t) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var duration = arguments.length > 2 ? arguments[2] : undefined;\n var _params2 = _slicedToArray(params, 4),\n _params2$ = _params2[0],\n mass = _params2$ === void 0 ? 1 : _params2$,\n _params2$2 = _params2[1],\n stiffness = _params2$2 === void 0 ? 100 : _params2$2,\n _params2$3 = _params2[2],\n damping = _params2$3 === void 0 ? 10 : _params2$3,\n _params2$4 = _params2[3],\n velocity = _params2$4 === void 0 ? 0 : _params2$4;\n mass = clamp(mass, 0.1, 1000);\n stiffness = clamp(stiffness, 0.1, 1000);\n damping = clamp(damping, 0.1, 1000);\n velocity = clamp(velocity, 0.1, 1000);\n var w0 = Math.sqrt(stiffness / mass);\n var zeta = damping / (2 * Math.sqrt(stiffness * mass));\n var wd = zeta < 1 ? w0 * Math.sqrt(1 - zeta * zeta) : 0;\n var a = 1;\n var b = zeta < 1 ? (zeta * w0 + -velocity) / wd : -velocity + w0;\n var progress = duration ? duration * t / 1000 : t;\n if (zeta < 1) {\n progress = Math.exp(-progress * zeta * w0) * (a * Math.cos(wd * progress) + b * Math.sin(wd * progress));\n } else {\n progress = (a + b * progress) * Math.exp(-progress * w0);\n }\n if (t === 0 || t === 1) return t;\n return 1 - progress;\n};\n\n/**\n * Cache the durations at set easing parameters\n */\n// export const EasingDurationCache: Map = new Map();\n\n/**\n * The threshold for an infinite loop\n */\n// const INTINITE_LOOP_LIMIT = 10000;\n\n/** Convert easing parameters to Array of numbers, e.g. \"spring(2, 500)\" to [2, 500] */\n// export const parseEasingParameters = (str: string) => {\n// const match = /(\\(|\\s)([^)]+)\\)?/.exec(str);\n// return match\n// ? match[2].split(',').map((value) => {\n// const num = parseFloat(value);\n// return !Number.isNaN(num) ? num : value.trim();\n// })\n// : [];\n// };\n\n/**\n * The spring easing function will only look smooth at certain durations, with certain parameters.\n * This functions returns the optimal duration to create a smooth springy animation based on physics\n *\n * Note: it can also be used to determine the optimal duration of other types of easing function, but be careful of 'in-'\n * easing functions, because of the nature of the function it can sometimes create an infinite loop, I suggest only using\n * `getEasingDuration` for `spring`, specifically 'out-spring' and 'spring'\n */\n// export const getEasingDuration = (easing: string | TypeEasingFunction = 'spring') => {\n// if (EasingDurationCache.has(easing)) return EasingDurationCache.get(easing);\n\n// // eslint-disable-next-line @typescript-eslint/no-use-before-define\n// const easingFunction = typeof easing == 'function' ? easing : getEasingFunction(easing as string);\n// const params = typeof easing == 'function' ? [] : parseEasingParameters(easing);\n// const frame = 1 / 6;\n\n// let elapsed = 0;\n// let rest = 0;\n// let count = 0;\n\n// while (++count < INTINITE_LOOP_LIMIT) {\n// elapsed += frame;\n// if (easingFunction(elapsed, params, undefined) === 1) {\n// rest++;\n// if (rest >= 16) break;\n// } else {\n// rest = 0;\n// }\n// }\n\n// const duration = elapsed * frame * 1000;\n// EasingDurationCache.set(easing, duration);\n// return duration;\n// };\n\n/**\n These Easing Functions are based off of the Sozi Project's easing functions\n https://github.com/sozi-projects/Sozi/blob/d72e44ebd580dc7579d1e177406ad41e632f961d/src/js/player/Timing.js\n*/\nvar Steps = function Steps(t) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var _ref = params,\n _ref2 = _slicedToArray(_ref, 2),\n _ref2$ = _ref2[0],\n steps = _ref2$ === void 0 ? 10 : _ref2$,\n type = _ref2[1];\n var trunc = type === 'start' ? Math.ceil : Math.floor;\n return trunc(clamp(t, 0, 1) * steps) / steps;\n};\n\n// @ts-ignore\nvar Bezier = function Bezier(t) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var _params3 = _slicedToArray(params, 4),\n mX1 = _params3[0],\n mY1 = _params3[1],\n mX2 = _params3[2],\n mY2 = _params3[3];\n return bezier(mX1, mY1, mX2, mY2)(t);\n};\n\n/** The default `ease-in` easing function */\nvar easein = bezier(0.42, 0.0, 1.0, 1.0);\n\n/** Converts easing functions to their `out`counter parts */\nvar EaseOut = function EaseOut(ease) {\n return function (t) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var duration = arguments.length > 2 ? arguments[2] : undefined;\n return 1 - ease(1 - t, params, duration);\n };\n};\n\n/** Converts easing functions to their `in-out` counter parts */\nvar EaseInOut = function EaseInOut(ease) {\n return function (t) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var duration = arguments.length > 2 ? arguments[2] : undefined;\n return t < 0.5 ? ease(t * 2, params, duration) / 2 : 1 - ease(t * -2 + 2, params, duration) / 2;\n };\n};\n\n/** Converts easing functions to their `out-in` counter parts */\nvar EaseOutIn = function EaseOutIn(ease) {\n return function (t) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var duration = arguments.length > 2 ? arguments[2] : undefined;\n return t < 0.5 ? (1 - ease(1 - t * 2, params, duration)) / 2 : (ease(t * 2 - 1, params, duration) + 1) / 2;\n };\n};\n\n/**\n * The default list of easing functions, do note this is different from {@link EASING}\n */\n\nvar EasingFunctions = {\n steps: Steps,\n 'step-start': function stepStart(t) {\n return Steps(t, [1, 'start']);\n },\n 'step-end': function stepEnd(t) {\n return Steps(t, [1, 'end']);\n },\n linear: function linear(t) {\n return t;\n },\n 'cubic-bezier': Bezier,\n ease: function ease(t) {\n return Bezier(t, [0.25, 0.1, 0.25, 1.0]);\n },\n \"in\": easein,\n out: EaseOut(easein),\n 'in-out': EaseInOut(easein),\n 'out-in': EaseOutIn(easein),\n 'in-quad': Quad,\n 'out-quad': EaseOut(Quad),\n 'in-out-quad': EaseInOut(Quad),\n 'out-in-quad': EaseOutIn(Quad),\n 'in-cubic': Cubic,\n 'out-cubic': EaseOut(Cubic),\n 'in-out-cubic': EaseInOut(Cubic),\n 'out-in-cubic': EaseOutIn(Cubic),\n 'in-quart': Quart,\n 'out-quart': EaseOut(Quart),\n 'in-out-quart': EaseInOut(Quart),\n 'out-in-quart': EaseOutIn(Quart),\n 'in-quint': Quint,\n 'out-quint': EaseOut(Quint),\n 'in-out-quint': EaseInOut(Quint),\n 'out-in-quint': EaseOutIn(Quint),\n 'in-expo': Expo,\n 'out-expo': EaseOut(Expo),\n 'in-out-expo': EaseInOut(Expo),\n 'out-in-expo': EaseOutIn(Expo),\n 'in-sine': Sine,\n 'out-sine': EaseOut(Sine),\n 'in-out-sine': EaseInOut(Sine),\n 'out-in-sine': EaseOutIn(Sine),\n 'in-circ': Circ,\n 'out-circ': EaseOut(Circ),\n 'in-out-circ': EaseInOut(Circ),\n 'out-in-circ': EaseOutIn(Circ),\n 'in-back': Back,\n 'out-back': EaseOut(Back),\n 'in-out-back': EaseInOut(Back),\n 'out-in-back': EaseOutIn(Back),\n 'in-bounce': Bounce,\n 'out-bounce': EaseOut(Bounce),\n 'in-out-bounce': EaseInOut(Bounce),\n 'out-in-bounce': EaseOutIn(Bounce),\n 'in-elastic': Elastic,\n 'out-elastic': EaseOut(Elastic),\n 'in-out-elastic': EaseInOut(Elastic),\n 'out-in-elastic': EaseOutIn(Elastic),\n spring: Spring,\n 'spring-in': Spring,\n 'spring-out': EaseOut(Spring),\n 'spring-in-out': EaseInOut(Spring),\n 'spring-out-in': EaseOutIn(Spring)\n};\n\n/**\n * Convert string easing to their proper form\n */\nvar complexEasingSyntax = function complexEasingSyntax(ease) {\n return convertToDash(ease).replace(/^ease-/, '') // Remove the \"ease-\" keyword\n .replace(/(\\(|\\s).+/, '') // Remove the function brackets and parameters\n .toLowerCase().trim();\n};\n\n/** Re-maps a number from one range to another. Numbers outside the range are not clamped to 0 and 1, because out-of-range values are often intentional and useful. */\nvar getEasingFunction = function getEasingFunction(ease) {\n return EasingFunctions[complexEasingSyntax(ease)] || EasingFunctions.linear;\n};\n\n// /**\n// * Allows you to register new easing functions\n// */\n// export const registerEasingFunction = (key: string, fn: TypeEasingFunction) => {\n// Object.assign(EasingFunctions, {\n// [key]: fn,\n// });\n// };\n\n// /**\n// * Allows you to register multiple new easing functions\n// */\n// export const registerEasingFunctions = (...obj: typeof EasingFunctions[]) => {\n// Object.assign(EasingFunctions, ...obj);\n// };\n\nvar linear = function linear(x) {\n return x;\n};\nvar Start = 1;\nvar Middle = 0.5;\nvar End = 0;\nfunction step(count, pos) {\n return function (x) {\n if (x >= 1) {\n return 1;\n }\n var stepSize = 1 / count;\n x += pos * stepSize;\n return x - x % stepSize;\n };\n}\nvar numberString = '\\\\s*(-?\\\\d+\\\\.?\\\\d*|-?\\\\.\\\\d+)\\\\s*';\nvar cubicBezierRe = new RegExp(\"cubic-bezier\\\\(\".concat(numberString, \",\").concat(numberString, \",\").concat(numberString, \",\").concat(numberString, \"\\\\)\"));\nvar step1Re = /steps\\(\\s*(\\d+)\\s*\\)/;\nvar step2Re = /steps\\(\\s*(\\d+)\\s*,\\s*(start|middle|end)\\s*\\)/;\nfunction parseEasingFunction(normalizedEasing) {\n var cubicData = cubicBezierRe.exec(normalizedEasing);\n if (cubicData) {\n // @ts-ignore\n return bezier.apply(void 0, _toConsumableArray(cubicData.slice(1).map(Number)));\n }\n var step1Data = step1Re.exec(normalizedEasing);\n if (step1Data) {\n return step(Number(step1Data[1]), End);\n }\n var step2Data = step2Re.exec(normalizedEasing);\n if (step2Data) {\n // @ts-ignore\n return step(Number(step2Data[1]), {\n start: Start,\n middle: Middle,\n end: End\n }[step2Data[2]]);\n }\n return getEasingFunction(normalizedEasing);\n}\nfunction calculateActiveDuration(timing) {\n // @ts-ignore\n return Math.abs(repeatedDuration(timing) / (timing.playbackRate || 1));\n}\nfunction repeatedDuration(timing) {\n var _timing$iterations;\n // https://drafts.csswg.org/web-animations/#calculating-the-active-duration\n if (timing.duration === 0 || timing.iterations === 0) {\n return 0;\n }\n\n // @see https://developer.mozilla.org/en-US/docs/Web/API/EffectTiming/duration#value\n // if (timing.duration === 'auto') {\n // timing.duration = 0;\n // }\n\n return (timing.duration === 'auto' ? 0 : Number(timing.duration)) * ((_timing$iterations = timing.iterations) !== null && _timing$iterations !== void 0 ? _timing$iterations : 1);\n}\nvar PhaseNone = 0;\nvar PhaseBefore = 1;\nvar PhaseAfter = 2;\nvar PhaseActive = 3;\nfunction calculatePhase(activeDuration, localTime, timing) {\n // https://drafts.csswg.org/web-animations/#animation-effect-phases-and-states\n if (localTime === null) {\n return PhaseNone;\n }\n var endTime = timing.endTime;\n if (localTime < Math.min(timing.delay, endTime)) {\n return PhaseBefore;\n }\n if (localTime >= Math.min(timing.delay + activeDuration + timing.endDelay, endTime)) {\n return PhaseAfter;\n }\n return PhaseActive;\n}\nfunction calculateActiveTime(activeDuration, fillMode, localTime, phase, delay) {\n // https://drafts.csswg.org/web-animations/#calculating-the-active-time\n switch (phase) {\n case PhaseBefore:\n if (fillMode === 'backwards' || fillMode === 'both') return 0;\n return null;\n case PhaseActive:\n return localTime - delay;\n case PhaseAfter:\n if (fillMode === 'forwards' || fillMode === 'both') return activeDuration;\n return null;\n case PhaseNone:\n return null;\n }\n}\nfunction calculateOverallProgress(iterationDuration, phase, iterations, activeTime, iterationStart) {\n // https://drafts.csswg.org/web-animations/#calculating-the-overall-progress\n var overallProgress = iterationStart;\n if (iterationDuration === 0) {\n if (phase !== PhaseBefore) {\n overallProgress += iterations;\n }\n } else {\n overallProgress += activeTime / iterationDuration;\n }\n return overallProgress;\n}\nfunction calculateSimpleIterationProgress(overallProgress, iterationStart, phase, iterations, activeTime, iterationDuration) {\n // https://drafts.csswg.org/web-animations/#calculating-the-simple-iteration-progress\n\n var simpleIterationProgress = overallProgress === Infinity ? iterationStart % 1 : overallProgress % 1;\n if (simpleIterationProgress === 0 && phase === PhaseAfter && iterations !== 0 && (activeTime !== 0 || iterationDuration === 0)) {\n simpleIterationProgress = 1;\n }\n return simpleIterationProgress;\n}\nfunction calculateCurrentIteration(phase, iterations, simpleIterationProgress, overallProgress) {\n // https://drafts.csswg.org/web-animations/#calculating-the-current-iteration\n if (phase === PhaseAfter && iterations === Infinity) {\n return Infinity;\n }\n if (simpleIterationProgress === 1) {\n return Math.floor(overallProgress) - 1;\n }\n return Math.floor(overallProgress);\n}\nfunction calculateDirectedProgress(playbackDirection, currentIteration, simpleIterationProgress) {\n // https://drafts.csswg.org/web-animations/#calculating-the-directed-progress\n var currentDirection = playbackDirection;\n if (playbackDirection !== 'normal' && playbackDirection !== 'reverse') {\n var d = currentIteration;\n if (playbackDirection === 'alternate-reverse') {\n d += 1;\n }\n currentDirection = 'normal';\n if (d !== Infinity && d % 2 !== 0) {\n currentDirection = 'reverse';\n }\n }\n if (currentDirection === 'normal') {\n return simpleIterationProgress;\n }\n return 1 - simpleIterationProgress;\n}\nfunction calculateIterationProgress(activeDuration, localTime, timing) {\n var phase = calculatePhase(activeDuration, localTime, timing);\n var activeTime = calculateActiveTime(activeDuration, timing.fill, localTime, phase, timing.delay);\n if (activeTime === null) return null;\n var duration = timing.duration === 'auto' ? 0 : timing.duration;\n var overallProgress = calculateOverallProgress(duration, phase, timing.iterations, activeTime, timing.iterationStart);\n var simpleIterationProgress = calculateSimpleIterationProgress(overallProgress, timing.iterationStart, phase, timing.iterations, activeTime, duration);\n var currentIteration = calculateCurrentIteration(phase, timing.iterations, simpleIterationProgress, overallProgress);\n var directedProgress = calculateDirectedProgress(timing.direction, currentIteration, simpleIterationProgress);\n timing.currentIteration = currentIteration;\n timing.progress = directedProgress;\n\n // https://drafts.csswg.org/web-animations/#calculating-the-transformed-progress\n // https://drafts.csswg.org/web-animations/#calculating-the-iteration-progress\n return timing.easingFunction(directedProgress);\n}\n\nfunction convertEffectInput(keyframes, timing, target) {\n var propertySpecificKeyframeGroups = makePropertySpecificKeyframeGroups(keyframes, timing);\n var interpolations = makeInterpolations(propertySpecificKeyframeGroups, target);\n return function (target, fraction) {\n if (fraction !== null) {\n interpolations.filter(function (interpolation) {\n return fraction >= interpolation.applyFrom && fraction < interpolation.applyTo;\n }).forEach(function (interpolation) {\n var offsetFraction = fraction - interpolation.startOffset;\n var localDuration = interpolation.endOffset - interpolation.startOffset;\n var scaledLocalTime = localDuration === 0 ? 0 : offsetFraction / localDuration;\n // apply updated attribute\n target.setAttribute(interpolation.property, interpolation.interpolation(scaledLocalTime), false, false // disable memoize\n );\n\n // if (interpolation.property === 'visibility') {\n // console.log(\n // scaledLocalTime,\n // interpolation.interpolation(scaledLocalTime),\n // );\n // }\n });\n } else {\n for (var property in propertySpecificKeyframeGroups) if (isNotReservedWord(property)) {\n // clear attribute\n target.setAttribute(property, null);\n }\n }\n };\n}\nfunction isNotReservedWord(member) {\n return member !== 'offset' && member !== 'easing' && member !== 'composite' && member !== 'computedOffset';\n}\nfunction makePropertySpecificKeyframeGroups(keyframes, timing) {\n var propertySpecificKeyframeGroups = {};\n for (var i = 0; i < keyframes.length; i++) {\n for (var member in keyframes[i]) {\n if (isNotReservedWord(member)) {\n var propertySpecificKeyframe = {\n offset: keyframes[i].offset,\n computedOffset: keyframes[i].computedOffset,\n easing: keyframes[i].easing,\n easingFunction: parseEasingFunction(keyframes[i].easing) || timing.easingFunction,\n value: keyframes[i][member]\n };\n propertySpecificKeyframeGroups[member] = propertySpecificKeyframeGroups[member] || [];\n propertySpecificKeyframeGroups[member].push(propertySpecificKeyframe);\n }\n }\n }\n return propertySpecificKeyframeGroups;\n}\nfunction makeInterpolations(propertySpecificKeyframeGroups, target) {\n var interpolations = [];\n for (var groupName in propertySpecificKeyframeGroups) {\n var keyframes = propertySpecificKeyframeGroups[groupName];\n for (var i = 0; i < keyframes.length - 1; i++) {\n var startIndex = i;\n var endIndex = i + 1;\n var startOffset = keyframes[startIndex].computedOffset;\n var endOffset = keyframes[endIndex].computedOffset;\n var applyFrom = startOffset;\n var applyTo = endOffset;\n if (i === 0) {\n applyFrom = -Infinity;\n if (endOffset === 0) {\n endIndex = startIndex;\n }\n }\n if (i === keyframes.length - 2) {\n applyTo = Infinity;\n if (startOffset === 1) {\n startIndex = endIndex;\n }\n }\n interpolations.push({\n applyFrom: applyFrom,\n applyTo: applyTo,\n startOffset: keyframes[startIndex].computedOffset,\n endOffset: keyframes[endIndex].computedOffset,\n easingFunction: keyframes[startIndex].easingFunction,\n property: groupName,\n interpolation: propertyInterpolation(groupName, keyframes[startIndex].value, keyframes[endIndex].value, target)\n });\n }\n }\n interpolations.sort(function (leftInterpolation, rightInterpolation) {\n return leftInterpolation.startOffset - rightInterpolation.startOffset;\n });\n return interpolations;\n}\nvar InterpolationFactory = function InterpolationFactory(from, to, convertToString) {\n return function (f) {\n var interpolated = interpolate(from, to, f);\n return isNumber(interpolated) ? interpolated : convertToString(interpolated);\n };\n};\nfunction propertyInterpolation(property, left, right, target) {\n var metadata = propertyMetadataCache[property];\n if (metadata && metadata.syntax && metadata[\"int\"]) {\n var propertyHandler = runtime.styleValueRegistry.getPropertySyntax(metadata.syntax);\n if (propertyHandler) {\n var parser = propertyHandler.parser;\n var usedLeft = parser ? parser(left, target) : left;\n var usedRight = parser ? parser(right, target) : right;\n\n // merger [left, right, n2string()]\n var interpolationArgs = propertyHandler.mixer(usedLeft, usedRight, target);\n if (interpolationArgs) {\n var interp = InterpolationFactory.apply(void 0, _toConsumableArray(interpolationArgs));\n return function (t) {\n if (t === 0) return left;\n if (t === 1) return right;\n return interp(t);\n };\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return InterpolationFactory(false, true, function (bool) {\n return bool ? right : left;\n });\n}\n\n/**\n * interpolate with number, boolean, number[], boolean[]\n */\nfunction interpolate(from, to, f) {\n if (typeof from === 'number' && typeof to === 'number') {\n return from * (1 - f) + to * f;\n }\n if (typeof from === 'boolean' && typeof to === 'boolean' || typeof from === 'string' && typeof to === 'string' // skip string, eg. path ['M', 10, 10]\n ) {\n return f < 0.5 ? from : to;\n }\n if (Array.isArray(from) && Array.isArray(to)) {\n // interpolate arrays/matrix\n var fromLength = from.length;\n var toLength = to.length;\n var length = Math.max(fromLength, toLength);\n var r = [];\n for (var i = 0; i < length; i++) {\n r.push(interpolate(from[i < fromLength ? i : fromLength - 1], to[i < toLength ? i : toLength - 1], f));\n }\n return r;\n }\n throw new Error(\"Mismatched interpolation arguments \".concat(from, \":\").concat(to));\n}\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EffectTiming\n */\nvar AnimationEffectTiming = /*#__PURE__*/function () {\n function AnimationEffectTiming() {\n _classCallCheck(this, AnimationEffectTiming);\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EffectTiming/delay\n */\n this.delay = 0;\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EffectTiming/direction\n */\n this.direction = 'normal';\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EffectTiming/duration\n */\n this.duration = 'auto';\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EffectTiming/easing\n */\n this._easing = 'linear';\n this.easingFunction = linear;\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EffectTiming/endDelay\n */\n this.endDelay = 0;\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EffectTiming/fill\n */\n this.fill = 'auto';\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EffectTiming/iterationStart\n */\n this.iterationStart = 0;\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EffectTiming/iterations\n */\n this.iterations = 1;\n this.currentIteration = null;\n this.progress = null;\n }\n return _createClass(AnimationEffectTiming, [{\n key: \"easing\",\n get: function get() {\n return this._easing;\n },\n set: function set(value) {\n this.easingFunction = parseEasingFunction(value);\n this._easing = value;\n }\n }]);\n}();\n\n/**\n * @example\n {\n translateY: [200, 300],\n scale: [1, 10],\n }\n\n * groups' length can be different, the following config should generate 3 frames:\n @example\n {\n translateY: [200, 300, 400],\n scale: [1, 10],\n }\n */\nfunction convertToArrayForm(effectInput) {\n var normalizedEffectInput = [];\n for (var property in effectInput) {\n // skip reserved props\n if (property in ['easing', 'offset', 'composite']) {\n continue;\n }\n\n // @ts-ignore\n var values = effectInput[property];\n if (!Array.isArray(values)) {\n values = [values];\n }\n var numKeyframes = values.length;\n for (var i = 0; i < numKeyframes; i++) {\n if (!normalizedEffectInput[i]) {\n var keyframe = {};\n if ('offset' in effectInput) {\n keyframe.offset = Number(effectInput.offset);\n }\n if ('easing' in effectInput) {\n // @ts-ignore\n keyframe.easing = effectInput.easing;\n }\n if ('composite' in effectInput) {\n // @ts-ignore\n keyframe.composite = effectInput.composite;\n }\n normalizedEffectInput[i] = keyframe;\n }\n if (values[i] !== undefined && values[i] !== null) {\n normalizedEffectInput[i][property] = values[i];\n }\n }\n }\n normalizedEffectInput.sort(function (a, b) {\n return (a.computedOffset || 0) - (b.computedOffset || 0);\n });\n return normalizedEffectInput;\n}\nfunction normalizeKeyframes(effectInput, timing) {\n if (effectInput === null) {\n return [];\n }\n if (!Array.isArray(effectInput)) {\n effectInput = convertToArrayForm(effectInput);\n }\n var keyframes = effectInput.map(function (originalKeyframe) {\n var keyframe = {};\n if (timing !== null && timing !== void 0 && timing.composite) {\n // This will be auto if the composite operation specified on the effect is being used.\n // @see https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API/Keyframe_Formats\n keyframe.composite = 'auto';\n }\n for (var member in originalKeyframe) {\n var memberValue = originalKeyframe[member];\n if (member === 'offset') {\n if (memberValue !== null) {\n memberValue = Number(memberValue);\n if (!isFinite(memberValue)) throw new Error('Keyframe offsets must be numbers.');\n if (memberValue < 0 || memberValue > 1) throw new Error('Keyframe offsets must be between 0 and 1.');\n keyframe.computedOffset = memberValue;\n }\n } else if (member === 'composite') {\n // TODO: Support add & accumulate in KeyframeEffect.composite\n // @see https://developer.mozilla.org/en-US/docs/Web/API/KeyframeEffect/composite\n if (['replace', 'add', 'accumulate', 'auto'].indexOf(memberValue) === -1) {\n throw new Error(\"\".concat(memberValue, \" compositing is not supported\"));\n }\n } else ;\n\n // assign to keyframe, no need to parse shorthand value\n keyframe[member] = memberValue;\n }\n if (keyframe.offset === undefined) {\n keyframe.offset = null;\n }\n if (keyframe.easing === undefined) {\n // override with timing.easing\n keyframe.easing = (timing === null || timing === void 0 ? void 0 : timing.easing) || 'linear';\n }\n if (keyframe.composite === undefined) {\n keyframe.composite = 'auto';\n }\n return keyframe;\n });\n var everyFrameHasOffset = true;\n var previousOffset = -Infinity;\n for (var i = 0; i < keyframes.length; i++) {\n var offset = keyframes[i].offset;\n if (!isNil(offset)) {\n if (offset < previousOffset) {\n throw new TypeError('Keyframes are not loosely sorted by offset. Sort or specify offsets.');\n }\n previousOffset = offset;\n } else {\n everyFrameHasOffset = false;\n }\n }\n keyframes = keyframes.filter(function (keyframe) {\n return Number(keyframe.offset) >= 0 && Number(keyframe.offset) <= 1;\n });\n function spaceKeyframes() {\n var _keyframes$offset;\n var _keyframes = keyframes,\n length = _keyframes.length;\n keyframes[length - 1].computedOffset = Number((_keyframes$offset = keyframes[length - 1].offset) !== null && _keyframes$offset !== void 0 ? _keyframes$offset : 1);\n if (length > 1) {\n var _keyframes$0$offset;\n keyframes[0].computedOffset = Number((_keyframes$0$offset = keyframes[0].offset) !== null && _keyframes$0$offset !== void 0 ? _keyframes$0$offset : 0);\n }\n var previousIndex = 0;\n var previousOffset = Number(keyframes[0].computedOffset);\n for (var _i = 1; _i < length; _i++) {\n var _offset = keyframes[_i].computedOffset;\n if (!isNil(_offset) && !isNil(previousOffset)) {\n for (var j = 1; j < _i - previousIndex; j++) keyframes[previousIndex + j].computedOffset = previousOffset + (Number(_offset) - previousOffset) * j / (_i - previousIndex);\n previousIndex = _i;\n previousOffset = Number(_offset);\n }\n }\n }\n if (!everyFrameHasOffset) spaceKeyframes();\n return keyframes;\n}\n\nvar fills = 'backwards|forwards|both|none'.split('|');\nvar directions = 'reverse|alternate|alternate-reverse'.split('|');\nfunction makeTiming(timingInput, forGroup) {\n var timing = new AnimationEffectTiming();\n if (forGroup) {\n timing.fill = 'both';\n timing.duration = 'auto';\n }\n if (typeof timingInput === 'number' && !isNaN(timingInput)) {\n timing.duration = timingInput;\n } else if (timingInput !== undefined) {\n Object.keys(timingInput).forEach(function (property) {\n if (timingInput[property] !== undefined && timingInput[property] !== null && timingInput[property] !== 'auto') {\n if (typeof timing[property] === 'number' || property === 'duration') {\n if (typeof timingInput[property] !== 'number' || isNaN(timingInput[property])) {\n return;\n }\n }\n if (property === 'fill' && fills.indexOf(timingInput[property]) === -1) {\n return;\n }\n if (property === 'direction' && directions.indexOf(timingInput[property]) === -1) {\n return;\n }\n // @ts-ignore\n timing[property] = timingInput[property];\n }\n });\n }\n return timing;\n}\nfunction normalizeTimingInput(timingInput, forGroup) {\n timingInput = numericTimingToObject(timingInput !== null && timingInput !== void 0 ? timingInput : {\n duration: 'auto'\n });\n return makeTiming(timingInput, forGroup);\n}\nfunction numericTimingToObject(timingInput) {\n if (typeof timingInput === 'number') {\n if (isNaN(timingInput)) {\n timingInput = {\n duration: 'auto'\n };\n } else {\n timingInput = {\n duration: timingInput\n };\n }\n }\n return timingInput;\n}\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyframeEffect\n * @example\n const circleDownKeyframes = new KeyframeEffect(\n circle, // element to animate\n [\n { transform: 'translateY(0)' }, // keyframe\n { transform: 'translateY(100)' } // keyframe\n ],\n { duration: 3000, fill: 'forwards' } // keyframe options\n );\n *\n */\nvar KeyframeEffect = /*#__PURE__*/function () {\n // pseudoElement: string | null;\n\n function KeyframeEffect(target, effectInput, timingInput) {\n var _this = this;\n _classCallCheck(this, KeyframeEffect);\n this.composite = 'replace';\n this.iterationComposite = 'replace';\n this.target = target;\n this.timing = normalizeTimingInput(timingInput, false);\n this.timing.effect = this;\n this.timing.activeDuration = calculateActiveDuration(this.timing);\n this.timing.endTime = Math.max(0, this.timing.delay + this.timing.activeDuration + this.timing.endDelay);\n this.normalizedKeyframes = normalizeKeyframes(effectInput, this.timing);\n this.interpolations = convertEffectInput(this.normalizedKeyframes, this.timing, this.target);\n\n // 不支持 proxy 时降级成 this.timing\n var Proxy = runtime.globalThis.Proxy;\n this.computedTiming = Proxy ? new Proxy(this.timing, {\n get: function get(target, prop) {\n if (prop === 'duration') {\n return target.duration === 'auto' ? 0 : target.duration;\n }\n if (prop === 'fill') {\n return target.fill === 'auto' ? 'none' : target.fill;\n }\n if (prop === 'localTime') {\n return _this.animation && _this.animation.currentTime || null;\n }\n if (prop === 'currentIteration') {\n if (!_this.animation || _this.animation.playState !== 'running') {\n return null;\n }\n return target.currentIteration || 0;\n }\n if (prop === 'progress') {\n if (!_this.animation || _this.animation.playState !== 'running') {\n return null;\n }\n return target.progress || 0;\n }\n return target[prop];\n },\n set: function set() {\n return true;\n }\n }) : this.timing;\n }\n return _createClass(KeyframeEffect, [{\n key: \"applyInterpolations\",\n value: function applyInterpolations() {\n this.interpolations(this.target, Number(this.timeFraction));\n }\n }, {\n key: \"update\",\n value: function update(localTime) {\n if (localTime === null) {\n return false;\n }\n this.timeFraction = calculateIterationProgress(this.timing.activeDuration, localTime, this.timing);\n return this.timeFraction !== null;\n }\n }, {\n key: \"getKeyframes\",\n value: function getKeyframes() {\n return this.normalizedKeyframes;\n }\n }, {\n key: \"setKeyframes\",\n value: function setKeyframes(keyframes) {\n this.normalizedKeyframes = normalizeKeyframes(keyframes);\n }\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEffect/getComputedTiming\n */\n }, {\n key: \"getComputedTiming\",\n value: function getComputedTiming() {\n return this.computedTiming;\n }\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEffect/getTiming\n */\n }, {\n key: \"getTiming\",\n value: function getTiming() {\n return this.timing;\n }\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEffect/updateTiming\n */\n }, {\n key: \"updateTiming\",\n value: function updateTiming(timing) {\n var _this2 = this;\n Object.keys(timing || {}).forEach(function (name) {\n _this2.timing[name] = timing[name];\n });\n }\n }]);\n}();\n\nfunction compareAnimations(leftAnimation, rightAnimation) {\n return Number(leftAnimation.id) - Number(rightAnimation.id);\n}\n\n/**\n * @see https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/web-animations-js/index.d.ts\n */\nvar AnimationTimeline = /*#__PURE__*/function () {\n function AnimationTimeline(document) {\n var _this = this;\n _classCallCheck(this, AnimationTimeline);\n /**\n * all active animations\n */\n this.animations = [];\n this.ticking = false;\n this.timelineTicking = false;\n this.hasRestartedThisFrame = false;\n this.animationsWithPromises = [];\n this.inTick = false;\n this.pendingEffects = [];\n this.currentTime = null;\n this.rafId = 0;\n this.rafCallbacks = [];\n this.webAnimationsNextTick = function (t) {\n _this.currentTime = t;\n _this.discardAnimations();\n if (_this.animations.length === 0) {\n _this.timelineTicking = false;\n } else {\n _this.requestAnimationFrame(_this.webAnimationsNextTick);\n }\n };\n this.processRafCallbacks = function (t) {\n var processing = _this.rafCallbacks;\n _this.rafCallbacks = [];\n if (t < Number(_this.currentTime)) t = Number(_this.currentTime);\n _this.animations.sort(compareAnimations);\n _this.animations = _this.tick(t, true, _this.animations)[0];\n processing.forEach(function (entry) {\n entry[1](t);\n });\n _this.applyPendingEffects();\n };\n this.document = document;\n }\n return _createClass(AnimationTimeline, [{\n key: \"getAnimations\",\n value: function getAnimations() {\n this.discardAnimations();\n return this.animations.slice();\n }\n }, {\n key: \"isTicking\",\n value: function isTicking() {\n return this.inTick;\n }\n }, {\n key: \"play\",\n value: function play(target, keyframes, options) {\n var effect = new KeyframeEffect(target, keyframes, options);\n var animation = new Animation(effect, this);\n this.animations.push(animation);\n this.restartWebAnimationsNextTick();\n animation.updatePromises();\n animation.play();\n animation.updatePromises();\n return animation;\n }\n\n // RAF is supposed to be the last script to occur before frame rendering but not\n // all browsers behave like this. This function is for synchonously updating an\n // animation's effects whenever its state is mutated by script to work around\n // incorrect script execution ordering by the browser.\n }, {\n key: \"applyDirtiedAnimation\",\n value: function applyDirtiedAnimation(animation) {\n var _this2 = this;\n if (this.inTick) {\n return;\n }\n // update active animations in displayobject\n animation.markTarget();\n var animations = animation.targetAnimations();\n animations.sort(compareAnimations);\n\n // clear inactive animations\n var inactiveAnimations = this.tick(Number(this.currentTime), false, animations.slice())[1];\n inactiveAnimations.forEach(function (animation) {\n var index = _this2.animations.indexOf(animation);\n if (index !== -1) {\n _this2.animations.splice(index, 1);\n }\n });\n this.applyPendingEffects();\n }\n }, {\n key: \"restart\",\n value: function restart() {\n if (!this.ticking) {\n this.ticking = true;\n this.requestAnimationFrame(function () {});\n this.hasRestartedThisFrame = true;\n }\n return this.hasRestartedThisFrame;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.document.defaultView.cancelAnimationFrame(this.frameId);\n }\n }, {\n key: \"applyPendingEffects\",\n value: function applyPendingEffects() {\n this.pendingEffects.forEach(function (effect) {\n effect === null || effect === void 0 || effect.applyInterpolations();\n });\n this.pendingEffects = [];\n }\n }, {\n key: \"updateAnimationsPromises\",\n value: function updateAnimationsPromises() {\n this.animationsWithPromises = this.animationsWithPromises.filter(function (animation) {\n return animation.updatePromises();\n });\n }\n }, {\n key: \"discardAnimations\",\n value: function discardAnimations() {\n this.updateAnimationsPromises();\n this.animations = this.animations.filter(function (animation) {\n return animation.playState !== 'finished' && animation.playState !== 'idle';\n });\n }\n }, {\n key: \"restartWebAnimationsNextTick\",\n value: function restartWebAnimationsNextTick() {\n if (!this.timelineTicking) {\n this.timelineTicking = true;\n this.requestAnimationFrame(this.webAnimationsNextTick);\n }\n }\n }, {\n key: \"rAF\",\n value: function rAF(f) {\n var id = this.rafId++;\n if (this.rafCallbacks.length === 0) {\n this.frameId = this.document.defaultView.requestAnimationFrame(this.processRafCallbacks);\n }\n this.rafCallbacks.push([id, f]);\n return id;\n }\n }, {\n key: \"requestAnimationFrame\",\n value: function requestAnimationFrame(f) {\n var _this3 = this;\n return this.rAF(function (x) {\n _this3.updateAnimationsPromises();\n f(x);\n _this3.updateAnimationsPromises();\n });\n }\n }, {\n key: \"tick\",\n value: function tick(t, isAnimationFrame, updatingAnimations) {\n var _this4 = this,\n _this$pendingEffects,\n _this$pendingEffects2;\n this.inTick = true;\n this.hasRestartedThisFrame = false;\n this.currentTime = t;\n this.ticking = false;\n var newPendingClears = [];\n var newPendingEffects = [];\n var activeAnimations = [];\n var inactiveAnimations = [];\n updatingAnimations.forEach(function (animation) {\n animation.tick(t, isAnimationFrame);\n if (!animation._inEffect) {\n newPendingClears.push(animation.effect);\n animation.unmarkTarget();\n } else {\n newPendingEffects.push(animation.effect);\n animation.markTarget();\n }\n if (animation._needsTick) _this4.ticking = true;\n var alive = animation._inEffect || animation._needsTick;\n animation._inTimeline = alive;\n if (alive) {\n activeAnimations.push(animation);\n } else {\n inactiveAnimations.push(animation);\n }\n });\n (_this$pendingEffects = this.pendingEffects).push.apply(_this$pendingEffects, newPendingClears);\n (_this$pendingEffects2 = this.pendingEffects).push.apply(_this$pendingEffects2, newPendingEffects);\n if (this.ticking) this.requestAnimationFrame(function () {});\n this.inTick = false;\n return [activeAnimations, inactiveAnimations];\n }\n }]);\n}();\n\nruntime.EasingFunction = parseEasingFunction;\nruntime.AnimationTimeline = AnimationTimeline;\n\nexport { Animation, AnimationEvent, AnimationTimeline, EasingFunctions, KeyframeEffect, compareAnimations, makeTiming, normalizeKeyframes, normalizeTimingInput, numericTimingToObject };\n//# sourceMappingURL=index.esm.js.map\n","// This icon file is generated automatically.\nvar DingdingOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M573.7 252.5C422.5 197.4 201.3 96.7 201.3 96.7c-15.7-4.1-17.9 11.1-17.9 11.1-5 61.1 33.6 160.5 53.6 182.8 19.9 22.3 319.1 113.7 319.1 113.7S326 357.9 270.5 341.9c-55.6-16-37.9 17.8-37.9 17.8 11.4 61.7 64.9 131.8 107.2 138.4 42.2 6.6 220.1 4 220.1 4s-35.5 4.1-93.2 11.9c-42.7 5.8-97 12.5-111.1 17.8-33.1 12.5 24 62.6 24 62.6 84.7 76.8 129.7 50.5 129.7 50.5 33.3-10.7 61.4-18.5 85.2-24.2L565 743.1h84.6L603 928l205.3-271.9H700.8l22.3-38.7c.3.5.4.8.4.8S799.8 496.1 829 433.8l.6-1h-.1c5-10.8 8.6-19.7 10-25.8 17-71.3-114.5-99.4-265.8-154.5z\" } }] }, \"name\": \"dingding\", \"theme\": \"outlined\" };\nexport default DingdingOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport DingdingOutlinedSvg from \"@ant-design/icons-svg/es/asn/DingdingOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar DingdingOutlined = function DingdingOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: DingdingOutlinedSvg\n }));\n};\n\n/**![dingding](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTU3My43IDI1Mi41QzQyMi41IDE5Ny40IDIwMS4zIDk2LjcgMjAxLjMgOTYuN2MtMTUuNy00LjEtMTcuOSAxMS4xLTE3LjkgMTEuMS01IDYxLjEgMzMuNiAxNjAuNSA1My42IDE4Mi44IDE5LjkgMjIuMyAzMTkuMSAxMTMuNyAzMTkuMSAxMTMuN1MzMjYgMzU3LjkgMjcwLjUgMzQxLjljLTU1LjYtMTYtMzcuOSAxNy44LTM3LjkgMTcuOCAxMS40IDYxLjcgNjQuOSAxMzEuOCAxMDcuMiAxMzguNCA0Mi4yIDYuNiAyMjAuMSA0IDIyMC4xIDRzLTM1LjUgNC4xLTkzLjIgMTEuOWMtNDIuNyA1LjgtOTcgMTIuNS0xMTEuMSAxNy44LTMzLjEgMTIuNSAyNCA2Mi42IDI0IDYyLjYgODQuNyA3Ni44IDEyOS43IDUwLjUgMTI5LjcgNTAuNSAzMy4zLTEwLjcgNjEuNC0xOC41IDg1LjItMjQuMkw1NjUgNzQzLjFoODQuNkw2MDMgOTI4bDIwNS4zLTI3MS45SDcwMC44bDIyLjMtMzguN2MuMy41LjQuOC40LjhTNzk5LjggNDk2LjEgODI5IDQzMy44bC42LTFoLS4xYzUtMTAuOCA4LjYtMTkuNyAxMC0yNS44IDE3LTcxLjMtMTE0LjUtOTkuNC0yNjUuOC0xNTQuNXoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(DingdingOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'DingdingOutlined';\n}\nexport default RefIcon;","import ReactDOM from 'react-dom';\nexport default function addEventListenerWrap(target, eventType, cb, option) {\n /* eslint camelcase: 2 */\n var callback = ReactDOM.unstable_batchedUpdates ? function run(e) {\n ReactDOM.unstable_batchedUpdates(cb, e);\n } : cb;\n if (target !== null && target !== void 0 && target.addEventListener) {\n target.addEventListener(eventType, callback, option);\n }\n return {\n remove: function remove() {\n if (target !== null && target !== void 0 && target.removeEventListener) {\n target.removeEventListener(eventType, callback, option);\n }\n }\n };\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport Viewport from './viewport';\nimport { zoomToScale, pixelsToWorld, lngLatToWorld, worldToLngLat, getProjectionMatrix, getDistanceScales, getViewMatrix } from './web-mercator-utils';\nimport _fitBounds from './fit-bounds';\nimport * as vec2 from 'gl-matrix/vec2';\n\nvar WebMercatorViewport = function (_Viewport) {\n _inherits(WebMercatorViewport, _Viewport);\n\n function WebMercatorViewport() {\n var _this;\n\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n width = _ref.width,\n height = _ref.height,\n _ref$latitude = _ref.latitude,\n latitude = _ref$latitude === void 0 ? 0 : _ref$latitude,\n _ref$longitude = _ref.longitude,\n longitude = _ref$longitude === void 0 ? 0 : _ref$longitude,\n _ref$zoom = _ref.zoom,\n zoom = _ref$zoom === void 0 ? 0 : _ref$zoom,\n _ref$pitch = _ref.pitch,\n pitch = _ref$pitch === void 0 ? 0 : _ref$pitch,\n _ref$bearing = _ref.bearing,\n bearing = _ref$bearing === void 0 ? 0 : _ref$bearing,\n _ref$altitude = _ref.altitude,\n altitude = _ref$altitude === void 0 ? 1.5 : _ref$altitude,\n nearZMultiplier = _ref.nearZMultiplier,\n farZMultiplier = _ref.farZMultiplier;\n\n _classCallCheck(this, WebMercatorViewport);\n\n width = width || 1;\n height = height || 1;\n var scale = zoomToScale(zoom);\n altitude = Math.max(0.75, altitude);\n var center = lngLatToWorld([longitude, latitude], scale);\n center[2] = 0;\n var projectionMatrix = getProjectionMatrix({\n width: width,\n height: height,\n pitch: pitch,\n bearing: bearing,\n altitude: altitude,\n nearZMultiplier: nearZMultiplier || 1 / height,\n farZMultiplier: farZMultiplier || 1.01\n });\n var viewMatrix = getViewMatrix({\n height: height,\n center: center,\n pitch: pitch,\n bearing: bearing,\n altitude: altitude,\n flipY: true\n });\n _this = _possibleConstructorReturn(this, _getPrototypeOf(WebMercatorViewport).call(this, {\n width: width,\n height: height,\n viewMatrix: viewMatrix,\n projectionMatrix: projectionMatrix\n }));\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.scale = scale;\n _this.center = center;\n _this.pixelsPerMeter = getDistanceScales(_assertThisInitialized(_assertThisInitialized(_this))).pixelsPerMeter[2];\n Object.freeze(_assertThisInitialized(_assertThisInitialized(_this)));\n return _this;\n }\n\n _createClass(WebMercatorViewport, [{\n key: \"projectFlat\",\n value: function projectFlat(lngLat) {\n var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.scale;\n return lngLatToWorld(lngLat, scale);\n }\n }, {\n key: \"unprojectFlat\",\n value: function unprojectFlat(xy) {\n var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.scale;\n return worldToLngLat(xy, scale);\n }\n }, {\n key: \"getMapCenterByLngLatPosition\",\n value: function getMapCenterByLngLatPosition(_ref2) {\n var lngLat = _ref2.lngLat,\n pos = _ref2.pos;\n var fromLocation = pixelsToWorld(pos, this.pixelUnprojectionMatrix);\n var toLocation = lngLatToWorld(lngLat, this.scale);\n var translate = vec2.add([], toLocation, vec2.negate([], fromLocation));\n var newCenter = vec2.add([], this.center, translate);\n return worldToLngLat(newCenter, this.scale);\n }\n }, {\n key: \"getLocationAtPoint\",\n value: function getLocationAtPoint(_ref3) {\n var lngLat = _ref3.lngLat,\n pos = _ref3.pos;\n return this.getMapCenterByLngLatPosition({\n lngLat: lngLat,\n pos: pos\n });\n }\n }, {\n key: \"fitBounds\",\n value: function fitBounds(bounds) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = this.width,\n height = this.height;\n\n var _fitBounds2 = _fitBounds(Object.assign({\n width: width,\n height: height,\n bounds: bounds\n }, options)),\n longitude = _fitBounds2.longitude,\n latitude = _fitBounds2.latitude,\n zoom = _fitBounds2.zoom;\n\n return new WebMercatorViewport({\n width: width,\n height: height,\n longitude: longitude,\n latitude: latitude,\n zoom: zoom\n });\n }\n }]);\n\n return WebMercatorViewport;\n}(Viewport);\n\nexport { WebMercatorViewport as default };\n//# sourceMappingURL=web-mercator-viewport.js.map","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import toString from './to-string';\nvar lowerFirst = function (value) {\n var str = toString(value);\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\nexport default lowerFirst;\n//# sourceMappingURL=lower-first.js.map","function debounce(func, wait, immediate) {\n var timeout;\n return function () {\n var context = this, args = arguments;\n var later = function () {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n}\nexport default debounce;\n//# sourceMappingURL=debounce.js.map","import { bisectLeft, sort } from '@antv/vendor/d3-array';\nfunction constrain(x, lo, hi) {\n return Math.min(hi, Math.max(lo, x));\n}\nexport function isOrdinalScale(scale) {\n return !!scale.getBandWidth;\n}\nexport function invert(scale, x, start) {\n if (!isOrdinalScale(scale))\n return scale.invert(x);\n const { adjustedRange } = scale;\n const { domain } = scale.getOptions();\n const offset = start ? -1 : 0;\n const step = scale.getStep();\n const range = start ? adjustedRange : adjustedRange.map((d) => d + step);\n // R[i0 - 1] < x <= R[i0]\n const i0 = bisectLeft(range, x);\n const i1 = constrain(i0 + offset, 0, domain.length - 1);\n return domain[i1];\n}\nexport function domainOf(scale, values, ratioX) {\n if (!values)\n return scale.getOptions().domain;\n if (!isOrdinalScale(scale)) {\n const sortedDomain = sort(values);\n if (!ratioX)\n return sortedDomain;\n const [d] = sortedDomain;\n const { range } = scale.getOptions();\n const [r0, r1] = range;\n const v = r0 > r1 ? -1 : 1;\n const d1 = scale.invert(scale.map(d) + v * ratioX);\n return [d, d1];\n }\n const { domain } = scale.getOptions();\n const v1 = values[0];\n const start = domain.indexOf(v1);\n if (ratioX) {\n const end = start + Math.round(domain.length * ratioX);\n return domain.slice(start, end);\n }\n const v2 = values[values.length - 1];\n const end = domain.indexOf(v2);\n return domain.slice(start, end + 1);\n}\nexport function selectionOf(x, y, x1, y1, scale, coordinate) {\n const { x: scaleX, y: scaleY } = scale;\n const abstractDomain = (point, start) => {\n const [x, y] = coordinate.invert(point);\n return [invert(scaleX, x, start), invert(scaleY, y, start)];\n };\n const p0 = abstractDomain([x, y], true);\n const p1 = abstractDomain([x1, y1], false);\n const domainX = domainOf(scaleX, [p0[0], p1[0]]);\n const domainY = domainOf(scaleY, [p0[1], p1[1]]);\n return [domainX, domainY];\n}\nexport function abstractOf(domain, scale) {\n const [d0, d1] = domain;\n const maybeStep = (scale) => (scale.getStep ? scale.getStep() : 0);\n return [scale.map(d0), scale.map(d1) + maybeStep(scale)];\n}\nexport function pixelsOf(selection, scale, coordinate) {\n const { x: scaleX, y: scaleY } = scale;\n const [X, Y] = selection;\n const AX = abstractOf(X, scaleX);\n const AY = abstractOf(Y, scaleY);\n const p0 = [AX[0], AY[0]];\n const p1 = [AX[1], AY[1]];\n const [x, y] = coordinate.map(p0);\n const [x1, y1] = coordinate.map(p1);\n return [x, y, x1, y1];\n}\n//# sourceMappingURL=scale.js.map","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","import { isNumber, isString } from '@antv/util';\nimport { Text } from '../shapes';\nexport function renderExtDo(el) {\n if (typeof el === 'function')\n return el();\n return isString(el) || isNumber(el) ? new Text({ style: { text: String(el) } }) : el;\n}\n//# sourceMappingURL=extend-display-object.js.map","function _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"fieldProps\", \"proFieldProps\"],\n _excluded2 = [\"fieldProps\", \"proFieldProps\"];\nimport { useMountMergeState } from '@ant-design/pro-utils';\nimport { Form, Popover } from 'antd';\nimport omit from \"rc-util/es/omit\";\nimport React, { useState } from 'react';\nimport ProField from \"../Field\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar valueType = 'text';\n/**\n * 文本组件\n *\n * @param\n */\nvar ProFormText = function ProFormText(_ref) {\n var fieldProps = _ref.fieldProps,\n proFieldProps = _ref.proFieldProps,\n rest = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/_jsx(ProField, _objectSpread({\n valueType: valueType,\n fieldProps: fieldProps,\n filedConfig: {\n valueType: valueType\n },\n proFieldProps: proFieldProps\n }, rest));\n};\nvar PassWordStrength = function PassWordStrength(props) {\n var _useMountMergeState = useMountMergeState(props.open || false, {\n value: props.open,\n onChange: props.onOpenChange\n }),\n _useMountMergeState2 = _slicedToArray(_useMountMergeState, 2),\n open = _useMountMergeState2[0],\n setOpen = _useMountMergeState2[1];\n return /*#__PURE__*/_jsx(Form.Item, {\n shouldUpdate: true,\n noStyle: true,\n children: function children(form) {\n var _props$statusRender;\n var value = form.getFieldValue(props.name || []);\n return /*#__PURE__*/_jsx(Popover, _objectSpread(_objectSpread({\n getPopupContainer: function getPopupContainer(node) {\n if (node && node.parentNode) {\n return node.parentNode;\n }\n return node;\n },\n onOpenChange: function onOpenChange(e) {\n return setOpen(e);\n },\n content: /*#__PURE__*/_jsxs(\"div\", {\n style: {\n padding: '4px 0'\n },\n children: [(_props$statusRender = props.statusRender) === null || _props$statusRender === void 0 ? void 0 : _props$statusRender.call(props, value), props.strengthText ? /*#__PURE__*/_jsx(\"div\", {\n style: {\n marginTop: 10\n },\n children: /*#__PURE__*/_jsx(\"span\", {\n children: props.strengthText\n })\n }) : null]\n }),\n overlayStyle: {\n width: 240\n },\n placement: \"rightTop\"\n }, props.popoverProps), {}, {\n open: open,\n children: props.children\n }));\n }\n });\n};\nvar Password = function Password(_ref2) {\n var fieldProps = _ref2.fieldProps,\n proFieldProps = _ref2.proFieldProps,\n rest = _objectWithoutProperties(_ref2, _excluded2);\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n open = _useState2[0],\n setOpen = _useState2[1];\n if (fieldProps !== null && fieldProps !== void 0 && fieldProps.statusRender && rest.name) {\n return /*#__PURE__*/_jsx(PassWordStrength, {\n name: rest.name,\n statusRender: fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.statusRender,\n popoverProps: fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.popoverProps,\n strengthText: fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.strengthText,\n open: open,\n onOpenChange: setOpen,\n children: /*#__PURE__*/_jsx(\"div\", {\n children: /*#__PURE__*/_jsx(ProField, _objectSpread({\n valueType: \"password\",\n fieldProps: _objectSpread(_objectSpread({}, omit(fieldProps, ['statusRender', 'popoverProps', 'strengthText'])), {}, {\n onBlur: function onBlur(e) {\n var _fieldProps$onBlur;\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onBlur = fieldProps.onBlur) === null || _fieldProps$onBlur === void 0 || _fieldProps$onBlur.call(fieldProps, e);\n setOpen(false);\n },\n onClick: function onClick(e) {\n var _fieldProps$onClick;\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onClick = fieldProps.onClick) === null || _fieldProps$onClick === void 0 || _fieldProps$onClick.call(fieldProps, e);\n setOpen(true);\n }\n }),\n proFieldProps: proFieldProps,\n filedConfig: {\n valueType: valueType\n }\n }, rest))\n })\n });\n }\n return /*#__PURE__*/_jsx(ProField, _objectSpread({\n valueType: \"password\",\n fieldProps: fieldProps,\n proFieldProps: proFieldProps,\n filedConfig: {\n valueType: valueType\n }\n }, rest));\n};\nvar WrappedProFormText = ProFormText;\nWrappedProFormText.Password = Password;\n\n// @ts-ignore\n// eslint-disable-next-line no-param-reassign\nWrappedProFormText.displayName = 'ProFormComponent';\nexport default WrappedProFormText;","import { __read } from \"tslib\";\n/**\n * @param vec\n * @param s\n */\nexport function scale(vec, s) {\n return [vec[0] * s, vec[1] * s];\n}\nexport function add(vec1, vec2) {\n return [vec1[0] + vec2[0], vec1[1] + vec2[1]];\n}\nexport function sub(vec1, vec2) {\n return [vec1[0] - vec2[0], vec1[1] - vec2[1]];\n}\nexport function min(vec1, vec2) {\n return [Math.min(vec1[0], vec2[0]), Math.min(vec1[1], vec2[1])];\n}\nexport function max(vec1, vec2) {\n return [Math.max(vec1[0], vec2[0]), Math.max(vec1[1], vec2[1])];\n}\nexport function distance(vec1, vec2) {\n return Math.sqrt(Math.pow((vec1[0] - vec2[0]), 2) + Math.pow((vec1[1] - vec2[1]), 2));\n}\nexport function normalize(vec) {\n if (vec[0] === 0 && vec[1] === 0)\n return [0, 0];\n var len = Math.sqrt(Math.pow(vec[0], 2) + Math.pow(vec[1], 2));\n return [vec[0] / len, vec[1] / len];\n}\n/**\n * 将给定向量围绕指定点旋转指定角度\n * @param vec\n * @param origin 旋转中心\n * @param angle 旋转角度,弧度制\n */\nexport function rotate(vec, origin, angle) {\n var _a = __read(vec, 2), x = _a[0], y = _a[1];\n var _b = __read(origin, 2), ox = _b[0], oy = _b[1];\n var dx = x - ox;\n var dy = y - oy;\n var sin = Math.sin(angle);\n var cos = Math.cos(angle);\n return [dx * cos - dy * sin + ox, dx * sin + dy * cos + oy];\n}\nexport function vertical(vec, flag) {\n return flag ? [vec[1], -vec[0]] : [-vec[1], vec[0]];\n}\n//# sourceMappingURL=matrix.js.map","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","var isArrayLike = function (value) {\n /**\n * isArrayLike([1, 2, 3]) => true\n * isArrayLike(document.body.children) => true\n * isArrayLike('abc') => true\n * isArrayLike(Function) => false\n */\n return value !== null && typeof value !== 'function' && isFinite(value.length);\n};\nexport default isArrayLike;\n//# sourceMappingURL=is-array-like.js.map","import { Base } from './base';\nexport const defaultUnknown = Symbol('defaultUnknown');\n/**\n * 更新 indexMap\n *\n * @param arr 初始的数组\n * @param target 目标 map\n * @returns {Map} 生成的 indexMap\n */\nfunction updateIndexMap(target, arr, key) {\n for (let i = 0; i < arr.length; i += 1) {\n if (!target.has(arr[i])) {\n target.set(key(arr[i]), i);\n }\n }\n}\n/**\n * 基于 indexMap 进行映射\n *\n * @param options 相关选项\n * @see MapBetweenArrOptions\n * @return {any} 映射结果\n */\nfunction mapBetweenArrByMapIndex(options) {\n const { value, from, to, mapper, notFoundReturn } = options;\n let mappedIndex = mapper.get(value);\n // index 不存在时,\n // 如果用户显式设置了 unknown 的值,那么就返回 unknown 的值\n // 否者我们将 value 添加到原数组, 并更新 Map\n if (mappedIndex === undefined) {\n if (notFoundReturn !== defaultUnknown) {\n return notFoundReturn;\n }\n mappedIndex = from.push(value) - 1;\n mapper.set(value, mappedIndex);\n }\n return to[mappedIndex % to.length];\n}\nfunction createKey(d) {\n if (d instanceof Date)\n return (d) => `${d}`;\n if (typeof d === 'object')\n return (d) => JSON.stringify(d);\n return (d) => d;\n}\n/**\n * Ordinal 比例尺\n *\n * 该比例尺具有离散的域和范围,例如将一组命名类别映射到一组颜色\n *\n * - 使用 for 替代一些基于 map 的遍历,for 循环性能远高于 forEach, map\n * - 阻止无意义的更新,只有到用户调用 map、invert 或者 update 之后才会进行相应的更新\n * - 两个 map 只初始化一次,在之后的更新中复用他们,这样我们避免了重复 new Map 带来的性能问题\n * 在大量调用 update 函数场景下,较 d3-scale 效率有质的提高\n */\nexport class Ordinal extends Base {\n // 覆盖默认配置\n getDefaultOptions() {\n return {\n domain: [],\n range: [],\n unknown: defaultUnknown,\n };\n }\n // 显示指定 options 的类型为 OrdinalOptions,从而推断出 O 的类型\n constructor(options) {\n super(options);\n }\n map(x) {\n if (this.domainIndexMap.size === 0) {\n updateIndexMap(this.domainIndexMap, this.getDomain(), this.domainKey);\n }\n return mapBetweenArrByMapIndex({\n value: this.domainKey(x),\n mapper: this.domainIndexMap,\n from: this.getDomain(),\n to: this.getRange(),\n notFoundReturn: this.options.unknown,\n });\n }\n invert(y) {\n if (this.rangeIndexMap.size === 0) {\n updateIndexMap(this.rangeIndexMap, this.getRange(), this.rangeKey);\n }\n return mapBetweenArrByMapIndex({\n value: this.rangeKey(y),\n mapper: this.rangeIndexMap,\n from: this.getRange(),\n to: this.getDomain(),\n notFoundReturn: this.options.unknown,\n });\n }\n // 因为 ordinal 比例尺更新内部状态的开销较大,所以按需更新\n rescale(options) {\n const [d] = this.options.domain;\n const [r] = this.options.range;\n this.domainKey = createKey(d);\n this.rangeKey = createKey(r);\n // 如果 rangeIndexMap 没有初始化,说明是在初始化阶段\n if (!this.rangeIndexMap) {\n this.rangeIndexMap = new Map();\n this.domainIndexMap = new Map();\n return;\n }\n // 否者是在更新阶段\n if (!options || options.range) {\n this.rangeIndexMap.clear();\n }\n if (!options || options.domain || options.compare) {\n this.domainIndexMap.clear();\n this.sortedDomain = undefined;\n }\n }\n clone() {\n return new Ordinal(this.options);\n }\n getRange() {\n return this.options.range;\n }\n getDomain() {\n // 如果设置了比较器,就排序\n if (this.sortedDomain)\n return this.sortedDomain;\n const { domain, compare } = this.options;\n this.sortedDomain = compare ? [...domain].sort(compare) : domain;\n return this.sortedDomain;\n }\n}\n//# sourceMappingURL=ordinal.js.map","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","import array from \"../array.js\";\nimport lcg from \"../lcg.js\";\nimport {packEncloseRandom} from \"./enclose.js\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packSiblingsRandom(circles, random) {\n if (!(n = (circles = array(circles)).length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = packEncloseRandom(a, random);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packSiblingsRandom(circles, lcg());\n return circles;\n}\n","/**\n * @module helpers\n */\n/**\n * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.\n *\n * @memberof helpers\n * @type {number}\n */\nexport var earthRadius = 6371008.8;\n/**\n * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var factors = {\n centimeters: earthRadius * 100,\n centimetres: earthRadius * 100,\n degrees: earthRadius / 111325,\n feet: earthRadius * 3.28084,\n inches: earthRadius * 39.37,\n kilometers: earthRadius / 1000,\n kilometres: earthRadius / 1000,\n meters: earthRadius,\n metres: earthRadius,\n miles: earthRadius / 1609.344,\n millimeters: earthRadius * 1000,\n millimetres: earthRadius * 1000,\n nauticalmiles: earthRadius / 1852,\n radians: 1,\n yards: earthRadius * 1.0936,\n};\n/**\n * Units of measurement factors based on 1 meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var unitsFactors = {\n centimeters: 100,\n centimetres: 100,\n degrees: 1 / 111325,\n feet: 3.28084,\n inches: 39.37,\n kilometers: 1 / 1000,\n kilometres: 1 / 1000,\n meters: 1,\n metres: 1,\n miles: 1 / 1609.344,\n millimeters: 1000,\n millimetres: 1000,\n nauticalmiles: 1 / 1852,\n radians: 1 / earthRadius,\n yards: 1.0936133,\n};\n/**\n * Area of measurement factors based on 1 square meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var areaFactors = {\n acres: 0.000247105,\n centimeters: 10000,\n centimetres: 10000,\n feet: 10.763910417,\n hectares: 0.0001,\n inches: 1550.003100006,\n kilometers: 0.000001,\n kilometres: 0.000001,\n meters: 1,\n metres: 1,\n miles: 3.86e-7,\n millimeters: 1000000,\n millimetres: 1000000,\n yards: 1.195990046,\n};\n/**\n * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.\n *\n * @name feature\n * @param {Geometry} geometry input geometry\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON Feature\n * @example\n * var geometry = {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 50]\n * };\n *\n * var feature = turf.feature(geometry);\n *\n * //=feature\n */\nexport function feature(geom, properties, options) {\n if (options === void 0) { options = {}; }\n var feat = { type: \"Feature\" };\n if (options.id === 0 || options.id) {\n feat.id = options.id;\n }\n if (options.bbox) {\n feat.bbox = options.bbox;\n }\n feat.properties = properties || {};\n feat.geometry = geom;\n return feat;\n}\n/**\n * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.\n * For GeometryCollection type use `helpers.geometryCollection`\n *\n * @name geometry\n * @param {string} type Geometry Type\n * @param {Array} coordinates Coordinates\n * @param {Object} [options={}] Optional Parameters\n * @returns {Geometry} a GeoJSON Geometry\n * @example\n * var type = \"Point\";\n * var coordinates = [110, 50];\n * var geometry = turf.geometry(type, coordinates);\n * // => geometry\n */\nexport function geometry(type, coordinates, _options) {\n if (_options === void 0) { _options = {}; }\n switch (type) {\n case \"Point\":\n return point(coordinates).geometry;\n case \"LineString\":\n return lineString(coordinates).geometry;\n case \"Polygon\":\n return polygon(coordinates).geometry;\n case \"MultiPoint\":\n return multiPoint(coordinates).geometry;\n case \"MultiLineString\":\n return multiLineString(coordinates).geometry;\n case \"MultiPolygon\":\n return multiPolygon(coordinates).geometry;\n default:\n throw new Error(type + \" is invalid\");\n }\n}\n/**\n * Creates a {@link Point} {@link Feature} from a Position.\n *\n * @name point\n * @param {Array} coordinates longitude, latitude position (each in decimal degrees)\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a Point feature\n * @example\n * var point = turf.point([-75.343, 39.984]);\n *\n * //=point\n */\nexport function point(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n if (!coordinates) {\n throw new Error(\"coordinates is required\");\n }\n if (!Array.isArray(coordinates)) {\n throw new Error(\"coordinates must be an Array\");\n }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be at least 2 numbers long\");\n }\n if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n throw new Error(\"coordinates must contain numbers\");\n }\n var geom = {\n type: \"Point\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.\n *\n * @name points\n * @param {Array>} coordinates an array of Points\n * @param {Object} [properties={}] Translate these properties to each Feature\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} Point Feature\n * @example\n * var points = turf.points([\n * [-75, 39],\n * [-80, 45],\n * [-78, 50]\n * ]);\n *\n * //=points\n */\nexport function points(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return point(coords, properties);\n }), options);\n}\n/**\n * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.\n *\n * @name polygon\n * @param {Array>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} Polygon Feature\n * @example\n * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });\n *\n * //=polygon\n */\nexport function polygon(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {\n var ring = coordinates_1[_i];\n if (ring.length < 4) {\n throw new Error(\"Each LinearRing of a Polygon must have 4 or more Positions.\");\n }\n for (var j = 0; j < ring[ring.length - 1].length; j++) {\n // Check if first point of Polygon contains two numbers\n if (ring[ring.length - 1][j] !== ring[0][j]) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n }\n }\n var geom = {\n type: \"Polygon\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.\n *\n * @name polygons\n * @param {Array>>>} coordinates an array of Polygon coordinates\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} Polygon FeatureCollection\n * @example\n * var polygons = turf.polygons([\n * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],\n * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],\n * ]);\n *\n * //=polygons\n */\nexport function polygons(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return polygon(coords, properties);\n }), options);\n}\n/**\n * Creates a {@link LineString} {@link Feature} from an Array of Positions.\n *\n * @name lineString\n * @param {Array>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} LineString Feature\n * @example\n * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});\n * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});\n *\n * //=linestring1\n * //=linestring2\n */\nexport function lineString(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be an array of two or more positions\");\n }\n var geom = {\n type: \"LineString\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.\n *\n * @name lineStrings\n * @param {Array>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} LineString FeatureCollection\n * @example\n * var linestrings = turf.lineStrings([\n * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],\n * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]\n * ]);\n *\n * //=linestrings\n */\nexport function lineStrings(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return lineString(coords, properties);\n }), options);\n}\n/**\n * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.\n *\n * @name featureCollection\n * @param {Feature[]} features input features\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {FeatureCollection} FeatureCollection of Features\n * @example\n * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});\n * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});\n * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});\n *\n * var collection = turf.featureCollection([\n * locationA,\n * locationB,\n * locationC\n * ]);\n *\n * //=collection\n */\nexport function featureCollection(features, options) {\n if (options === void 0) { options = {}; }\n var fc = { type: \"FeatureCollection\" };\n if (options.id) {\n fc.id = options.id;\n }\n if (options.bbox) {\n fc.bbox = options.bbox;\n }\n fc.features = features;\n return fc;\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiLineString\n * @param {Array>>} coordinates an array of LineStrings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a MultiLineString feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);\n *\n * //=multiLine\n */\nexport function multiLineString(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiLineString\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPoint\n * @param {Array>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a MultiPoint feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPt = turf.multiPoint([[0,0],[10,10]]);\n *\n * //=multiPt\n */\nexport function multiPoint(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiPoint\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPolygon\n * @param {Array>>>} coordinates an array of Polygons\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a multipolygon feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);\n *\n * //=multiPoly\n *\n */\nexport function multiPolygon(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiPolygon\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name geometryCollection\n * @param {Array} geometries an array of GeoJSON Geometries\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON GeometryCollection Feature\n * @example\n * var pt = turf.geometry(\"Point\", [100, 0]);\n * var line = turf.geometry(\"LineString\", [[101, 0], [102, 1]]);\n * var collection = turf.geometryCollection([pt, line]);\n *\n * // => collection\n */\nexport function geometryCollection(geometries, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"GeometryCollection\",\n geometries: geometries,\n };\n return feature(geom, properties, options);\n}\n/**\n * Round number to precision\n *\n * @param {number} num Number\n * @param {number} [precision=0] Precision\n * @returns {number} rounded number\n * @example\n * turf.round(120.4321)\n * //=120\n *\n * turf.round(120.4321, 2)\n * //=120.43\n */\nexport function round(num, precision) {\n if (precision === void 0) { precision = 0; }\n if (precision && !(precision >= 0)) {\n throw new Error(\"precision must be a positive number\");\n }\n var multiplier = Math.pow(10, precision || 0);\n return Math.round(num * multiplier) / multiplier;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name radiansToLength\n * @param {number} radians in radians across the sphere\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} distance\n */\nexport function radiansToLength(radians, units) {\n if (units === void 0) { units = \"kilometers\"; }\n var factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return radians * factor;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name lengthToRadians\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} radians\n */\nexport function lengthToRadians(distance, units) {\n if (units === void 0) { units = \"kilometers\"; }\n var factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return distance / factor;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet\n *\n * @name lengthToDegrees\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} degrees\n */\nexport function lengthToDegrees(distance, units) {\n return radiansToDegrees(lengthToRadians(distance, units));\n}\n/**\n * Converts any bearing angle from the north line direction (positive clockwise)\n * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line\n *\n * @name bearingToAzimuth\n * @param {number} bearing angle, between -180 and +180 degrees\n * @returns {number} angle between 0 and 360 degrees\n */\nexport function bearingToAzimuth(bearing) {\n var angle = bearing % 360;\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n}\n/**\n * Converts an angle in radians to degrees\n *\n * @name radiansToDegrees\n * @param {number} radians angle in radians\n * @returns {number} degrees between 0 and 360 degrees\n */\nexport function radiansToDegrees(radians) {\n var degrees = radians % (2 * Math.PI);\n return (degrees * 180) / Math.PI;\n}\n/**\n * Converts an angle in degrees to radians\n *\n * @name degreesToRadians\n * @param {number} degrees angle between 0 and 360 degrees\n * @returns {number} angle in radians\n */\nexport function degreesToRadians(degrees) {\n var radians = degrees % 360;\n return (radians * Math.PI) / 180;\n}\n/**\n * Converts a length to the requested unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @param {number} length to be converted\n * @param {Units} [originalUnit=\"kilometers\"] of the length\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted length\n */\nexport function convertLength(length, originalUnit, finalUnit) {\n if (originalUnit === void 0) { originalUnit = \"kilometers\"; }\n if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n if (!(length >= 0)) {\n throw new Error(\"length must be a positive number\");\n }\n return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\n/**\n * Converts a area to the requested unit.\n * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches, hectares\n * @param {number} area to be converted\n * @param {Units} [originalUnit=\"meters\"] of the distance\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted area\n */\nexport function convertArea(area, originalUnit, finalUnit) {\n if (originalUnit === void 0) { originalUnit = \"meters\"; }\n if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n if (!(area >= 0)) {\n throw new Error(\"area must be a positive number\");\n }\n var startFactor = areaFactors[originalUnit];\n if (!startFactor) {\n throw new Error(\"invalid original units\");\n }\n var finalFactor = areaFactors[finalUnit];\n if (!finalFactor) {\n throw new Error(\"invalid final units\");\n }\n return (area / startFactor) * finalFactor;\n}\n/**\n * isNumber\n *\n * @param {*} num Number to validate\n * @returns {boolean} true/false\n * @example\n * turf.isNumber(123)\n * //=true\n * turf.isNumber('foo')\n * //=false\n */\nexport function isNumber(num) {\n return !isNaN(num) && num !== null && !Array.isArray(num);\n}\n/**\n * isObject\n *\n * @param {*} input variable to validate\n * @returns {boolean} true/false\n * @example\n * turf.isObject({elevation: 10})\n * //=true\n * turf.isObject('foo')\n * //=false\n */\nexport function isObject(input) {\n return !!input && input.constructor === Object;\n}\n/**\n * Validate BBox\n *\n * @private\n * @param {Array} bbox BBox to validate\n * @returns {void}\n * @throws Error if BBox is not valid\n * @example\n * validateBBox([-180, -40, 110, 50])\n * //=OK\n * validateBBox([-180, -40])\n * //=Error\n * validateBBox('Foo')\n * //=Error\n * validateBBox(5)\n * //=Error\n * validateBBox(null)\n * //=Error\n * validateBBox(undefined)\n * //=Error\n */\nexport function validateBBox(bbox) {\n if (!bbox) {\n throw new Error(\"bbox is required\");\n }\n if (!Array.isArray(bbox)) {\n throw new Error(\"bbox must be an Array\");\n }\n if (bbox.length !== 4 && bbox.length !== 6) {\n throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n }\n bbox.forEach(function (num) {\n if (!isNumber(num)) {\n throw new Error(\"bbox must only contain numbers\");\n }\n });\n}\n/**\n * Validate Id\n *\n * @private\n * @param {string|number} id Id to validate\n * @returns {void}\n * @throws Error if Id is not valid\n * @example\n * validateId([-180, -40, 110, 50])\n * //=Error\n * validateId([-180, -40])\n * //=Error\n * validateId('Foo')\n * //=OK\n * validateId(5)\n * //=OK\n * validateId(null)\n * //=Error\n * validateId(undefined)\n * //=Error\n */\nexport function validateId(id) {\n if (!id) {\n throw new Error(\"id is required\");\n }\n if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n throw new Error(\"id must be a number or a string\");\n }\n}\n","function _objectDestructuringEmpty(t) {\n if (null == t) throw new TypeError(\"Cannot destructure \" + t);\n}\nexport { _objectDestructuringEmpty as default };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectDestructuringEmpty from \"@babel/runtime/helpers/esm/objectDestructuringEmpty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"className\", \"style\", \"motion\", \"motionNodes\", \"motionType\", \"onMotionStart\", \"onMotionEnd\", \"active\", \"treeNodeRequiredProps\"];\nimport classNames from 'classnames';\nimport CSSMotion from 'rc-motion';\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport * as React from 'react';\nimport { TreeContext } from \"./contextTypes\";\nimport TreeNode from \"./TreeNode\";\nimport useUnmount from \"./useUnmount\";\nimport { getTreeNodeProps } from \"./utils/treeUtil\";\nvar MotionTreeNode = /*#__PURE__*/React.forwardRef(function (oriProps, ref) {\n var className = oriProps.className,\n style = oriProps.style,\n motion = oriProps.motion,\n motionNodes = oriProps.motionNodes,\n motionType = oriProps.motionType,\n onOriginMotionStart = oriProps.onMotionStart,\n onOriginMotionEnd = oriProps.onMotionEnd,\n active = oriProps.active,\n treeNodeRequiredProps = oriProps.treeNodeRequiredProps,\n props = _objectWithoutProperties(oriProps, _excluded);\n var _React$useState = React.useState(true),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n visible = _React$useState2[0],\n setVisible = _React$useState2[1];\n var _React$useContext = React.useContext(TreeContext),\n prefixCls = _React$useContext.prefixCls;\n\n // Calculate target visible here.\n // And apply in effect to make `leave` motion work.\n var targetVisible = motionNodes && motionType !== 'hide';\n useLayoutEffect(function () {\n if (motionNodes) {\n if (targetVisible !== visible) {\n setVisible(targetVisible);\n }\n }\n }, [motionNodes]);\n var triggerMotionStart = function triggerMotionStart() {\n if (motionNodes) {\n onOriginMotionStart();\n }\n };\n\n // Should only trigger once\n var triggerMotionEndRef = React.useRef(false);\n var triggerMotionEnd = function triggerMotionEnd() {\n if (motionNodes && !triggerMotionEndRef.current) {\n triggerMotionEndRef.current = true;\n onOriginMotionEnd();\n }\n };\n\n // Effect if unmount\n useUnmount(triggerMotionStart, triggerMotionEnd);\n\n // Motion end event\n var onVisibleChanged = function onVisibleChanged(nextVisible) {\n if (targetVisible === nextVisible) {\n triggerMotionEnd();\n }\n };\n if (motionNodes) {\n return /*#__PURE__*/React.createElement(CSSMotion, _extends({\n ref: ref,\n visible: visible\n }, motion, {\n motionAppear: motionType === 'show',\n onVisibleChanged: onVisibleChanged\n }), function (_ref, motionRef) {\n var motionClassName = _ref.className,\n motionStyle = _ref.style;\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: motionRef,\n className: classNames(\"\".concat(prefixCls, \"-treenode-motion\"), motionClassName),\n style: motionStyle\n }, motionNodes.map(function (treeNode) {\n var restProps = Object.assign({}, (_objectDestructuringEmpty(treeNode.data), treeNode.data)),\n title = treeNode.title,\n key = treeNode.key,\n isStart = treeNode.isStart,\n isEnd = treeNode.isEnd;\n delete restProps.children;\n var treeNodeProps = getTreeNodeProps(key, treeNodeRequiredProps);\n return /*#__PURE__*/React.createElement(TreeNode, _extends({}, restProps, treeNodeProps, {\n title: title,\n active: active,\n data: treeNode.data,\n key: key,\n isStart: isStart,\n isEnd: isEnd\n }));\n }));\n });\n }\n return /*#__PURE__*/React.createElement(TreeNode, _extends({\n domRef: ref,\n className: className,\n style: style\n }, props, {\n active: active\n }));\n});\nif (process.env.NODE_ENV !== 'production') {\n MotionTreeNode.displayName = 'MotionTreeNode';\n}\nexport default MotionTreeNode;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\n\n/**\n * Trigger only when component unmount\n */\nfunction useUnmount(triggerStart, triggerEnd) {\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n firstMount = _React$useState2[0],\n setFirstMount = _React$useState2[1];\n useLayoutEffect(function () {\n if (firstMount) {\n triggerStart();\n return function () {\n triggerEnd();\n };\n }\n }, [firstMount]);\n useLayoutEffect(function () {\n setFirstMount(true);\n return function () {\n setFirstMount(false);\n };\n }, []);\n}\nexport default useUnmount;","export function findExpandedKeys() {\n var prev = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var next = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var prevLen = prev.length;\n var nextLen = next.length;\n if (Math.abs(prevLen - nextLen) !== 1) {\n return {\n add: false,\n key: null\n };\n }\n function find(shorter, longer) {\n var cache = new Map();\n shorter.forEach(function (key) {\n cache.set(key, true);\n });\n var keys = longer.filter(function (key) {\n return !cache.has(key);\n });\n return keys.length === 1 ? keys[0] : null;\n }\n if (prevLen < nextLen) {\n return {\n add: true,\n key: find(prev, next)\n };\n }\n return {\n add: false,\n key: find(next, prev)\n };\n}\nexport function getExpandRange(shorter, longer, key) {\n var shorterStartIndex = shorter.findIndex(function (data) {\n return data.key === key;\n });\n var shorterEndNode = shorter[shorterStartIndex + 1];\n var longerStartIndex = longer.findIndex(function (data) {\n return data.key === key;\n });\n if (shorterEndNode) {\n var longerEndIndex = longer.findIndex(function (data) {\n return data.key === shorterEndNode.key;\n });\n return longer.slice(longerStartIndex + 1, longerEndIndex);\n }\n return longer.slice(longerStartIndex + 1);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectDestructuringEmpty from \"@babel/runtime/helpers/esm/objectDestructuringEmpty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"prefixCls\", \"data\", \"selectable\", \"checkable\", \"expandedKeys\", \"selectedKeys\", \"checkedKeys\", \"loadedKeys\", \"loadingKeys\", \"halfCheckedKeys\", \"keyEntities\", \"disabled\", \"dragging\", \"dragOverNodeKey\", \"dropPosition\", \"motion\", \"height\", \"itemHeight\", \"virtual\", \"scrollWidth\", \"focusable\", \"activeItem\", \"focused\", \"tabIndex\", \"onKeyDown\", \"onFocus\", \"onBlur\", \"onActiveChange\", \"onListChangeStart\", \"onListChangeEnd\"];\n/**\n * Handle virtual list of the TreeNodes.\n */\n\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport VirtualList from 'rc-virtual-list';\nimport * as React from 'react';\nimport MotionTreeNode from \"./MotionTreeNode\";\nimport { findExpandedKeys, getExpandRange } from \"./utils/diffUtil\";\nimport { getKey, getTreeNodeProps } from \"./utils/treeUtil\";\nvar HIDDEN_STYLE = {\n width: 0,\n height: 0,\n display: 'flex',\n overflow: 'hidden',\n opacity: 0,\n border: 0,\n padding: 0,\n margin: 0\n};\nvar noop = function noop() {};\nexport var MOTION_KEY = \"RC_TREE_MOTION_\".concat(Math.random());\nvar MotionNode = {\n key: MOTION_KEY\n};\nexport var MotionEntity = {\n key: MOTION_KEY,\n level: 0,\n index: 0,\n pos: '0',\n node: MotionNode,\n nodes: [MotionNode]\n};\nvar MotionFlattenData = {\n parent: null,\n children: [],\n pos: MotionEntity.pos,\n data: MotionNode,\n title: null,\n key: MOTION_KEY,\n /** Hold empty list here since we do not use it */\n isStart: [],\n isEnd: []\n};\n/**\n * We only need get visible content items to play the animation.\n */\nexport function getMinimumRangeTransitionRange(list, virtual, height, itemHeight) {\n if (virtual === false || !height) {\n return list;\n }\n return list.slice(0, Math.ceil(height / itemHeight) + 1);\n}\nfunction itemKey(item) {\n var key = item.key,\n pos = item.pos;\n return getKey(key, pos);\n}\nfunction getAccessibilityPath(item) {\n var path = String(item.data.key);\n var current = item;\n while (current.parent) {\n current = current.parent;\n path = \"\".concat(current.data.key, \" > \").concat(path);\n }\n return path;\n}\nvar NodeList = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var prefixCls = props.prefixCls,\n data = props.data,\n selectable = props.selectable,\n checkable = props.checkable,\n expandedKeys = props.expandedKeys,\n selectedKeys = props.selectedKeys,\n checkedKeys = props.checkedKeys,\n loadedKeys = props.loadedKeys,\n loadingKeys = props.loadingKeys,\n halfCheckedKeys = props.halfCheckedKeys,\n keyEntities = props.keyEntities,\n disabled = props.disabled,\n dragging = props.dragging,\n dragOverNodeKey = props.dragOverNodeKey,\n dropPosition = props.dropPosition,\n motion = props.motion,\n height = props.height,\n itemHeight = props.itemHeight,\n virtual = props.virtual,\n scrollWidth = props.scrollWidth,\n focusable = props.focusable,\n activeItem = props.activeItem,\n focused = props.focused,\n tabIndex = props.tabIndex,\n onKeyDown = props.onKeyDown,\n onFocus = props.onFocus,\n onBlur = props.onBlur,\n onActiveChange = props.onActiveChange,\n onListChangeStart = props.onListChangeStart,\n onListChangeEnd = props.onListChangeEnd,\n domProps = _objectWithoutProperties(props, _excluded);\n\n // =============================== Ref ================================\n var listRef = React.useRef(null);\n var indentMeasurerRef = React.useRef(null);\n React.useImperativeHandle(ref, function () {\n return {\n scrollTo: function scrollTo(scroll) {\n listRef.current.scrollTo(scroll);\n },\n getIndentWidth: function getIndentWidth() {\n return indentMeasurerRef.current.offsetWidth;\n }\n };\n });\n\n // ============================== Motion ==============================\n var _React$useState = React.useState(expandedKeys),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n prevExpandedKeys = _React$useState2[0],\n setPrevExpandedKeys = _React$useState2[1];\n var _React$useState3 = React.useState(data),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n prevData = _React$useState4[0],\n setPrevData = _React$useState4[1];\n var _React$useState5 = React.useState(data),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n transitionData = _React$useState6[0],\n setTransitionData = _React$useState6[1];\n var _React$useState7 = React.useState([]),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n transitionRange = _React$useState8[0],\n setTransitionRange = _React$useState8[1];\n var _React$useState9 = React.useState(null),\n _React$useState10 = _slicedToArray(_React$useState9, 2),\n motionType = _React$useState10[0],\n setMotionType = _React$useState10[1];\n\n // When motion end but data change, this will makes data back to previous one\n var dataRef = React.useRef(data);\n dataRef.current = data;\n function onMotionEnd() {\n var latestData = dataRef.current;\n setPrevData(latestData);\n setTransitionData(latestData);\n setTransitionRange([]);\n setMotionType(null);\n onListChangeEnd();\n }\n\n // Do animation if expanded keys changed\n // layoutEffect here to avoid blink of node removing\n useLayoutEffect(function () {\n setPrevExpandedKeys(expandedKeys);\n var diffExpanded = findExpandedKeys(prevExpandedKeys, expandedKeys);\n if (diffExpanded.key !== null) {\n if (diffExpanded.add) {\n var keyIndex = prevData.findIndex(function (_ref) {\n var key = _ref.key;\n return key === diffExpanded.key;\n });\n var rangeNodes = getMinimumRangeTransitionRange(getExpandRange(prevData, data, diffExpanded.key), virtual, height, itemHeight);\n var newTransitionData = prevData.slice();\n newTransitionData.splice(keyIndex + 1, 0, MotionFlattenData);\n setTransitionData(newTransitionData);\n setTransitionRange(rangeNodes);\n setMotionType('show');\n } else {\n var _keyIndex = data.findIndex(function (_ref2) {\n var key = _ref2.key;\n return key === diffExpanded.key;\n });\n var _rangeNodes = getMinimumRangeTransitionRange(getExpandRange(data, prevData, diffExpanded.key), virtual, height, itemHeight);\n var _newTransitionData = data.slice();\n _newTransitionData.splice(_keyIndex + 1, 0, MotionFlattenData);\n setTransitionData(_newTransitionData);\n setTransitionRange(_rangeNodes);\n setMotionType('hide');\n }\n } else if (prevData !== data) {\n // If whole data changed, we just refresh the list\n setPrevData(data);\n setTransitionData(data);\n }\n }, [expandedKeys, data]);\n\n // We should clean up motion if is changed by dragging\n React.useEffect(function () {\n if (!dragging) {\n onMotionEnd();\n }\n }, [dragging]);\n var mergedData = motion ? transitionData : data;\n var treeNodeRequiredProps = {\n expandedKeys: expandedKeys,\n selectedKeys: selectedKeys,\n loadedKeys: loadedKeys,\n loadingKeys: loadingKeys,\n checkedKeys: checkedKeys,\n halfCheckedKeys: halfCheckedKeys,\n dragOverNodeKey: dragOverNodeKey,\n dropPosition: dropPosition,\n keyEntities: keyEntities\n };\n return /*#__PURE__*/React.createElement(React.Fragment, null, focused && activeItem && /*#__PURE__*/React.createElement(\"span\", {\n style: HIDDEN_STYLE,\n \"aria-live\": \"assertive\"\n }, getAccessibilityPath(activeItem)), /*#__PURE__*/React.createElement(\"div\", null, /*#__PURE__*/React.createElement(\"input\", {\n style: HIDDEN_STYLE,\n disabled: focusable === false || disabled,\n tabIndex: focusable !== false ? tabIndex : null,\n onKeyDown: onKeyDown,\n onFocus: onFocus,\n onBlur: onBlur,\n value: \"\",\n onChange: noop,\n \"aria-label\": \"for screen reader\"\n })), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-treenode\"),\n \"aria-hidden\": true,\n style: {\n position: 'absolute',\n pointerEvents: 'none',\n visibility: 'hidden',\n height: 0,\n overflow: 'hidden',\n border: 0,\n padding: 0\n }\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-indent\")\n }, /*#__PURE__*/React.createElement(\"div\", {\n ref: indentMeasurerRef,\n className: \"\".concat(prefixCls, \"-indent-unit\")\n }))), /*#__PURE__*/React.createElement(VirtualList, _extends({}, domProps, {\n data: mergedData,\n itemKey: itemKey,\n height: height,\n fullHeight: false,\n virtual: virtual,\n itemHeight: itemHeight,\n scrollWidth: scrollWidth,\n prefixCls: \"\".concat(prefixCls, \"-list\"),\n ref: listRef,\n role: \"tree\",\n onVisibleChange: function onVisibleChange(originList) {\n // The best match is using `fullList` - `originList` = `restList`\n // and check the `restList` to see if has the MOTION_KEY node\n // but this will cause performance issue for long list compare\n // we just check `originList` and repeat trigger `onMotionEnd`\n if (originList.every(function (item) {\n return itemKey(item) !== MOTION_KEY;\n })) {\n onMotionEnd();\n }\n }\n }), function (treeNode) {\n var pos = treeNode.pos,\n restProps = Object.assign({}, (_objectDestructuringEmpty(treeNode.data), treeNode.data)),\n title = treeNode.title,\n key = treeNode.key,\n isStart = treeNode.isStart,\n isEnd = treeNode.isEnd;\n var mergedKey = getKey(key, pos);\n delete restProps.key;\n delete restProps.children;\n var treeNodeProps = getTreeNodeProps(mergedKey, treeNodeRequiredProps);\n return /*#__PURE__*/React.createElement(MotionTreeNode, _extends({}, restProps, treeNodeProps, {\n title: title,\n active: !!activeItem && key === activeItem.key,\n pos: pos,\n data: treeNode.data,\n isStart: isStart,\n isEnd: isEnd,\n motion: motion,\n motionNodes: key === MOTION_KEY ? transitionRange : null,\n motionType: motionType,\n onMotionStart: onListChangeStart,\n onMotionEnd: onMotionEnd,\n treeNodeRequiredProps: treeNodeRequiredProps,\n onMouseMove: function onMouseMove() {\n onActiveChange(null);\n }\n }));\n }));\n});\nif (process.env.NODE_ENV !== 'production') {\n NodeList.displayName = 'NodeList';\n}\nexport default NodeList;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n// TODO: https://www.w3.org/TR/2017/NOTE-wai-aria-practices-1.1-20171214/examples/treeview/treeview-2/treeview-2a.html\n// Fully accessibility support\n\nimport classNames from 'classnames';\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport pickAttrs from \"rc-util/es/pickAttrs\";\nimport warning from \"rc-util/es/warning\";\nimport * as React from 'react';\nimport { TreeContext } from \"./contextTypes\";\nimport DropIndicator from \"./DropIndicator\";\nimport NodeList, { MOTION_KEY, MotionEntity } from \"./NodeList\";\nimport TreeNode from \"./TreeNode\";\nimport { arrAdd, arrDel, calcDropPosition, calcSelectedKeys, conductExpandParent, getDragChildrenKeys, parseCheckedKeys, posToArr } from \"./util\";\nimport { conductCheck } from \"./utils/conductUtil\";\nimport getEntity from \"./utils/keyUtil\";\nimport { convertDataToEntities, convertNodePropsToEventData, convertTreeToData, fillFieldNames, flattenTreeData, getTreeNodeProps, warningWithoutKey } from \"./utils/treeUtil\";\nvar MAX_RETRY_TIMES = 10;\nvar Tree = /*#__PURE__*/function (_React$Component) {\n _inherits(Tree, _React$Component);\n var _super = _createSuper(Tree);\n function Tree() {\n var _this;\n _classCallCheck(this, Tree);\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(_args));\n _defineProperty(_assertThisInitialized(_this), \"destroyed\", false);\n _defineProperty(_assertThisInitialized(_this), \"delayedDragEnterLogic\", void 0);\n _defineProperty(_assertThisInitialized(_this), \"loadingRetryTimes\", {});\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n keyEntities: {},\n indent: null,\n selectedKeys: [],\n checkedKeys: [],\n halfCheckedKeys: [],\n loadedKeys: [],\n loadingKeys: [],\n expandedKeys: [],\n draggingNodeKey: null,\n dragChildrenKeys: [],\n // dropTargetKey is the key of abstract-drop-node\n // the abstract-drop-node is the real drop node when drag and drop\n // not the DOM drag over node\n dropTargetKey: null,\n dropPosition: null,\n // the drop position of abstract-drop-node, inside 0, top -1, bottom 1\n dropContainerKey: null,\n // the container key of abstract-drop-node if dropPosition is -1 or 1\n dropLevelOffset: null,\n // the drop level offset of abstract-drag-over-node\n dropTargetPos: null,\n // the pos of abstract-drop-node\n dropAllowed: true,\n // if drop to abstract-drop-node is allowed\n // the abstract-drag-over-node\n // if mouse is on the bottom of top dom node or no the top of the bottom dom node\n // abstract-drag-over-node is the top node\n dragOverNodeKey: null,\n treeData: [],\n flattenNodes: [],\n focused: false,\n activeKey: null,\n listChanging: false,\n prevProps: null,\n fieldNames: fillFieldNames()\n });\n _defineProperty(_assertThisInitialized(_this), \"dragStartMousePosition\", null);\n _defineProperty(_assertThisInitialized(_this), \"dragNodeProps\", null);\n _defineProperty(_assertThisInitialized(_this), \"currentMouseOverDroppableNodeKey\", null);\n _defineProperty(_assertThisInitialized(_this), \"listRef\", /*#__PURE__*/React.createRef());\n _defineProperty(_assertThisInitialized(_this), \"onNodeDragStart\", function (event, nodeProps) {\n var _this$state = _this.state,\n expandedKeys = _this$state.expandedKeys,\n keyEntities = _this$state.keyEntities;\n var onDragStart = _this.props.onDragStart;\n var eventKey = nodeProps.eventKey;\n _this.dragNodeProps = nodeProps;\n _this.dragStartMousePosition = {\n x: event.clientX,\n y: event.clientY\n };\n var newExpandedKeys = arrDel(expandedKeys, eventKey);\n _this.setState({\n draggingNodeKey: eventKey,\n dragChildrenKeys: getDragChildrenKeys(eventKey, keyEntities),\n indent: _this.listRef.current.getIndentWidth()\n });\n _this.setExpandedKeys(newExpandedKeys);\n window.addEventListener('dragend', _this.onWindowDragEnd);\n onDragStart === null || onDragStart === void 0 || onDragStart({\n event: event,\n node: convertNodePropsToEventData(nodeProps)\n });\n });\n /**\n * [Legacy] Select handler is smaller than node,\n * so that this will trigger when drag enter node or select handler.\n * This is a little tricky if customize css without padding.\n * Better for use mouse move event to refresh drag state.\n * But let's just keep it to avoid event trigger logic change.\n */\n _defineProperty(_assertThisInitialized(_this), \"onNodeDragEnter\", function (event, nodeProps) {\n var _this$state2 = _this.state,\n expandedKeys = _this$state2.expandedKeys,\n keyEntities = _this$state2.keyEntities,\n dragChildrenKeys = _this$state2.dragChildrenKeys,\n flattenNodes = _this$state2.flattenNodes,\n indent = _this$state2.indent;\n var _this$props = _this.props,\n onDragEnter = _this$props.onDragEnter,\n onExpand = _this$props.onExpand,\n allowDrop = _this$props.allowDrop,\n direction = _this$props.direction;\n var pos = nodeProps.pos,\n eventKey = nodeProps.eventKey;\n\n // record the key of node which is latest entered, used in dragleave event.\n if (_this.currentMouseOverDroppableNodeKey !== eventKey) {\n _this.currentMouseOverDroppableNodeKey = eventKey;\n }\n if (!_this.dragNodeProps) {\n _this.resetDragState();\n return;\n }\n var _calcDropPosition = calcDropPosition(event, _this.dragNodeProps, nodeProps, indent, _this.dragStartMousePosition, allowDrop, flattenNodes, keyEntities, expandedKeys, direction),\n dropPosition = _calcDropPosition.dropPosition,\n dropLevelOffset = _calcDropPosition.dropLevelOffset,\n dropTargetKey = _calcDropPosition.dropTargetKey,\n dropContainerKey = _calcDropPosition.dropContainerKey,\n dropTargetPos = _calcDropPosition.dropTargetPos,\n dropAllowed = _calcDropPosition.dropAllowed,\n dragOverNodeKey = _calcDropPosition.dragOverNodeKey;\n if (\n // don't allow drop inside its children\n dragChildrenKeys.includes(dropTargetKey) ||\n // don't allow drop when drop is not allowed caculated by calcDropPosition\n !dropAllowed) {\n _this.resetDragState();\n return;\n }\n\n // Side effect for delay drag\n if (!_this.delayedDragEnterLogic) {\n _this.delayedDragEnterLogic = {};\n }\n Object.keys(_this.delayedDragEnterLogic).forEach(function (key) {\n clearTimeout(_this.delayedDragEnterLogic[key]);\n });\n if (_this.dragNodeProps.eventKey !== nodeProps.eventKey) {\n // hoist expand logic here\n // since if logic is on the bottom\n // it will be blocked by abstract dragover node check\n // => if you dragenter from top, you mouse will still be consider as in the top node\n event.persist();\n _this.delayedDragEnterLogic[pos] = window.setTimeout(function () {\n if (_this.state.draggingNodeKey === null) {\n return;\n }\n var newExpandedKeys = _toConsumableArray(expandedKeys);\n var entity = getEntity(keyEntities, nodeProps.eventKey);\n if (entity && (entity.children || []).length) {\n newExpandedKeys = arrAdd(expandedKeys, nodeProps.eventKey);\n }\n if (!_this.props.hasOwnProperty('expandedKeys')) {\n _this.setExpandedKeys(newExpandedKeys);\n }\n onExpand === null || onExpand === void 0 || onExpand(newExpandedKeys, {\n node: convertNodePropsToEventData(nodeProps),\n expanded: true,\n nativeEvent: event.nativeEvent\n });\n }, 800);\n }\n\n // Skip if drag node is self\n if (_this.dragNodeProps.eventKey === dropTargetKey && dropLevelOffset === 0) {\n _this.resetDragState();\n return;\n }\n\n // Update drag over node and drag state\n _this.setState({\n dragOverNodeKey: dragOverNodeKey,\n dropPosition: dropPosition,\n dropLevelOffset: dropLevelOffset,\n dropTargetKey: dropTargetKey,\n dropContainerKey: dropContainerKey,\n dropTargetPos: dropTargetPos,\n dropAllowed: dropAllowed\n });\n onDragEnter === null || onDragEnter === void 0 || onDragEnter({\n event: event,\n node: convertNodePropsToEventData(nodeProps),\n expandedKeys: expandedKeys\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeDragOver\", function (event, nodeProps) {\n var _this$state3 = _this.state,\n dragChildrenKeys = _this$state3.dragChildrenKeys,\n flattenNodes = _this$state3.flattenNodes,\n keyEntities = _this$state3.keyEntities,\n expandedKeys = _this$state3.expandedKeys,\n indent = _this$state3.indent;\n var _this$props2 = _this.props,\n onDragOver = _this$props2.onDragOver,\n allowDrop = _this$props2.allowDrop,\n direction = _this$props2.direction;\n if (!_this.dragNodeProps) {\n return;\n }\n var _calcDropPosition2 = calcDropPosition(event, _this.dragNodeProps, nodeProps, indent, _this.dragStartMousePosition, allowDrop, flattenNodes, keyEntities, expandedKeys, direction),\n dropPosition = _calcDropPosition2.dropPosition,\n dropLevelOffset = _calcDropPosition2.dropLevelOffset,\n dropTargetKey = _calcDropPosition2.dropTargetKey,\n dropContainerKey = _calcDropPosition2.dropContainerKey,\n dropTargetPos = _calcDropPosition2.dropTargetPos,\n dropAllowed = _calcDropPosition2.dropAllowed,\n dragOverNodeKey = _calcDropPosition2.dragOverNodeKey;\n if (dragChildrenKeys.includes(dropTargetKey) || !dropAllowed) {\n // don't allow drop inside its children\n // don't allow drop when drop is not allowed calculated by calcDropPosition\n return;\n }\n\n // Update drag position\n\n if (_this.dragNodeProps.eventKey === dropTargetKey && dropLevelOffset === 0) {\n if (!(_this.state.dropPosition === null && _this.state.dropLevelOffset === null && _this.state.dropTargetKey === null && _this.state.dropContainerKey === null && _this.state.dropTargetPos === null && _this.state.dropAllowed === false && _this.state.dragOverNodeKey === null)) {\n _this.resetDragState();\n }\n } else if (!(dropPosition === _this.state.dropPosition && dropLevelOffset === _this.state.dropLevelOffset && dropTargetKey === _this.state.dropTargetKey && dropContainerKey === _this.state.dropContainerKey && dropTargetPos === _this.state.dropTargetPos && dropAllowed === _this.state.dropAllowed && dragOverNodeKey === _this.state.dragOverNodeKey)) {\n _this.setState({\n dropPosition: dropPosition,\n dropLevelOffset: dropLevelOffset,\n dropTargetKey: dropTargetKey,\n dropContainerKey: dropContainerKey,\n dropTargetPos: dropTargetPos,\n dropAllowed: dropAllowed,\n dragOverNodeKey: dragOverNodeKey\n });\n }\n onDragOver === null || onDragOver === void 0 || onDragOver({\n event: event,\n node: convertNodePropsToEventData(nodeProps)\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeDragLeave\", function (event, nodeProps) {\n // if it is outside the droppable area\n // currentMouseOverDroppableNodeKey will be updated in dragenter event when into another droppable receiver.\n if (_this.currentMouseOverDroppableNodeKey === nodeProps.eventKey && !event.currentTarget.contains(event.relatedTarget)) {\n _this.resetDragState();\n _this.currentMouseOverDroppableNodeKey = null;\n }\n var onDragLeave = _this.props.onDragLeave;\n onDragLeave === null || onDragLeave === void 0 || onDragLeave({\n event: event,\n node: convertNodePropsToEventData(nodeProps)\n });\n });\n // since stopPropagation() is called in treeNode\n // if onWindowDrag is called, whice means state is keeped, drag state should be cleared\n _defineProperty(_assertThisInitialized(_this), \"onWindowDragEnd\", function (event) {\n _this.onNodeDragEnd(event, null, true);\n window.removeEventListener('dragend', _this.onWindowDragEnd);\n });\n // if onNodeDragEnd is called, onWindowDragEnd won't be called since stopPropagation() is called\n _defineProperty(_assertThisInitialized(_this), \"onNodeDragEnd\", function (event, nodeProps) {\n var onDragEnd = _this.props.onDragEnd;\n _this.setState({\n dragOverNodeKey: null\n });\n _this.cleanDragState();\n onDragEnd === null || onDragEnd === void 0 || onDragEnd({\n event: event,\n node: convertNodePropsToEventData(nodeProps)\n });\n _this.dragNodeProps = null;\n window.removeEventListener('dragend', _this.onWindowDragEnd);\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeDrop\", function (event, _) {\n var _this$getActiveItem;\n var outsideTree = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var _this$state4 = _this.state,\n dragChildrenKeys = _this$state4.dragChildrenKeys,\n dropPosition = _this$state4.dropPosition,\n dropTargetKey = _this$state4.dropTargetKey,\n dropTargetPos = _this$state4.dropTargetPos,\n dropAllowed = _this$state4.dropAllowed;\n if (!dropAllowed) {\n return;\n }\n var onDrop = _this.props.onDrop;\n _this.setState({\n dragOverNodeKey: null\n });\n _this.cleanDragState();\n if (dropTargetKey === null) return;\n var abstractDropNodeProps = _objectSpread(_objectSpread({}, getTreeNodeProps(dropTargetKey, _this.getTreeNodeRequiredProps())), {}, {\n active: ((_this$getActiveItem = _this.getActiveItem()) === null || _this$getActiveItem === void 0 ? void 0 : _this$getActiveItem.key) === dropTargetKey,\n data: getEntity(_this.state.keyEntities, dropTargetKey).node\n });\n var dropToChild = dragChildrenKeys.includes(dropTargetKey);\n warning(!dropToChild, \"Can not drop to dragNode's children node. This is a bug of rc-tree. Please report an issue.\");\n var posArr = posToArr(dropTargetPos);\n var dropResult = {\n event: event,\n node: convertNodePropsToEventData(abstractDropNodeProps),\n dragNode: _this.dragNodeProps ? convertNodePropsToEventData(_this.dragNodeProps) : null,\n dragNodesKeys: [_this.dragNodeProps.eventKey].concat(dragChildrenKeys),\n dropToGap: dropPosition !== 0,\n dropPosition: dropPosition + Number(posArr[posArr.length - 1])\n };\n if (!outsideTree) {\n onDrop === null || onDrop === void 0 || onDrop(dropResult);\n }\n _this.dragNodeProps = null;\n });\n _defineProperty(_assertThisInitialized(_this), \"cleanDragState\", function () {\n var draggingNodeKey = _this.state.draggingNodeKey;\n if (draggingNodeKey !== null) {\n _this.setState({\n draggingNodeKey: null,\n dropPosition: null,\n dropContainerKey: null,\n dropTargetKey: null,\n dropLevelOffset: null,\n dropAllowed: true,\n dragOverNodeKey: null\n });\n }\n _this.dragStartMousePosition = null;\n _this.currentMouseOverDroppableNodeKey = null;\n });\n _defineProperty(_assertThisInitialized(_this), \"triggerExpandActionExpand\", function (e, treeNode) {\n var _this$state5 = _this.state,\n expandedKeys = _this$state5.expandedKeys,\n flattenNodes = _this$state5.flattenNodes;\n var expanded = treeNode.expanded,\n key = treeNode.key,\n isLeaf = treeNode.isLeaf;\n if (isLeaf || e.shiftKey || e.metaKey || e.ctrlKey) {\n return;\n }\n var node = flattenNodes.filter(function (nodeItem) {\n return nodeItem.key === key;\n })[0];\n var eventNode = convertNodePropsToEventData(_objectSpread(_objectSpread({}, getTreeNodeProps(key, _this.getTreeNodeRequiredProps())), {}, {\n data: node.data\n }));\n _this.setExpandedKeys(expanded ? arrDel(expandedKeys, key) : arrAdd(expandedKeys, key));\n _this.onNodeExpand(e, eventNode);\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeClick\", function (e, treeNode) {\n var _this$props3 = _this.props,\n onClick = _this$props3.onClick,\n expandAction = _this$props3.expandAction;\n if (expandAction === 'click') {\n _this.triggerExpandActionExpand(e, treeNode);\n }\n onClick === null || onClick === void 0 || onClick(e, treeNode);\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeDoubleClick\", function (e, treeNode) {\n var _this$props4 = _this.props,\n onDoubleClick = _this$props4.onDoubleClick,\n expandAction = _this$props4.expandAction;\n if (expandAction === 'doubleClick') {\n _this.triggerExpandActionExpand(e, treeNode);\n }\n onDoubleClick === null || onDoubleClick === void 0 || onDoubleClick(e, treeNode);\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeSelect\", function (e, treeNode) {\n var selectedKeys = _this.state.selectedKeys;\n var _this$state6 = _this.state,\n keyEntities = _this$state6.keyEntities,\n fieldNames = _this$state6.fieldNames;\n var _this$props5 = _this.props,\n onSelect = _this$props5.onSelect,\n multiple = _this$props5.multiple;\n var selected = treeNode.selected;\n var key = treeNode[fieldNames.key];\n var targetSelected = !selected;\n\n // Update selected keys\n if (!targetSelected) {\n selectedKeys = arrDel(selectedKeys, key);\n } else if (!multiple) {\n selectedKeys = [key];\n } else {\n selectedKeys = arrAdd(selectedKeys, key);\n }\n\n // [Legacy] Not found related usage in doc or upper libs\n var selectedNodes = selectedKeys.map(function (selectedKey) {\n var entity = getEntity(keyEntities, selectedKey);\n return entity ? entity.node : null;\n }).filter(Boolean);\n _this.setUncontrolledState({\n selectedKeys: selectedKeys\n });\n onSelect === null || onSelect === void 0 || onSelect(selectedKeys, {\n event: 'select',\n selected: targetSelected,\n node: treeNode,\n selectedNodes: selectedNodes,\n nativeEvent: e.nativeEvent\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeCheck\", function (e, treeNode, checked) {\n var _this$state7 = _this.state,\n keyEntities = _this$state7.keyEntities,\n oriCheckedKeys = _this$state7.checkedKeys,\n oriHalfCheckedKeys = _this$state7.halfCheckedKeys;\n var _this$props6 = _this.props,\n checkStrictly = _this$props6.checkStrictly,\n onCheck = _this$props6.onCheck;\n var key = treeNode.key;\n\n // Prepare trigger arguments\n var checkedObj;\n var eventObj = {\n event: 'check',\n node: treeNode,\n checked: checked,\n nativeEvent: e.nativeEvent\n };\n if (checkStrictly) {\n var checkedKeys = checked ? arrAdd(oriCheckedKeys, key) : arrDel(oriCheckedKeys, key);\n var halfCheckedKeys = arrDel(oriHalfCheckedKeys, key);\n checkedObj = {\n checked: checkedKeys,\n halfChecked: halfCheckedKeys\n };\n eventObj.checkedNodes = checkedKeys.map(function (checkedKey) {\n return getEntity(keyEntities, checkedKey);\n }).filter(Boolean).map(function (entity) {\n return entity.node;\n });\n _this.setUncontrolledState({\n checkedKeys: checkedKeys\n });\n } else {\n // Always fill first\n var _conductCheck = conductCheck([].concat(_toConsumableArray(oriCheckedKeys), [key]), true, keyEntities),\n _checkedKeys = _conductCheck.checkedKeys,\n _halfCheckedKeys = _conductCheck.halfCheckedKeys;\n\n // If remove, we do it again to correction\n if (!checked) {\n var keySet = new Set(_checkedKeys);\n keySet.delete(key);\n var _conductCheck2 = conductCheck(Array.from(keySet), {\n checked: false,\n halfCheckedKeys: _halfCheckedKeys\n }, keyEntities);\n _checkedKeys = _conductCheck2.checkedKeys;\n _halfCheckedKeys = _conductCheck2.halfCheckedKeys;\n }\n checkedObj = _checkedKeys;\n\n // [Legacy] This is used for `rc-tree-select`\n eventObj.checkedNodes = [];\n eventObj.checkedNodesPositions = [];\n eventObj.halfCheckedKeys = _halfCheckedKeys;\n _checkedKeys.forEach(function (checkedKey) {\n var entity = getEntity(keyEntities, checkedKey);\n if (!entity) return;\n var node = entity.node,\n pos = entity.pos;\n eventObj.checkedNodes.push(node);\n eventObj.checkedNodesPositions.push({\n node: node,\n pos: pos\n });\n });\n _this.setUncontrolledState({\n checkedKeys: _checkedKeys\n }, false, {\n halfCheckedKeys: _halfCheckedKeys\n });\n }\n onCheck === null || onCheck === void 0 || onCheck(checkedObj, eventObj);\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeLoad\", function (treeNode) {\n var _entity$children;\n var key = treeNode.key;\n var keyEntities = _this.state.keyEntities;\n\n // Skip if has children already\n var entity = getEntity(keyEntities, key);\n if (entity !== null && entity !== void 0 && (_entity$children = entity.children) !== null && _entity$children !== void 0 && _entity$children.length) {\n return;\n }\n var loadPromise = new Promise(function (resolve, reject) {\n // We need to get the latest state of loading/loaded keys\n _this.setState(function (_ref) {\n var _ref$loadedKeys = _ref.loadedKeys,\n loadedKeys = _ref$loadedKeys === void 0 ? [] : _ref$loadedKeys,\n _ref$loadingKeys = _ref.loadingKeys,\n loadingKeys = _ref$loadingKeys === void 0 ? [] : _ref$loadingKeys;\n var _this$props7 = _this.props,\n loadData = _this$props7.loadData,\n onLoad = _this$props7.onLoad;\n if (!loadData || loadedKeys.includes(key) || loadingKeys.includes(key)) {\n return null;\n }\n\n // Process load data\n var promise = loadData(treeNode);\n promise.then(function () {\n var currentLoadedKeys = _this.state.loadedKeys;\n var newLoadedKeys = arrAdd(currentLoadedKeys, key);\n\n // onLoad should trigger before internal setState to avoid `loadData` trigger twice.\n // https://github.com/ant-design/ant-design/issues/12464\n onLoad === null || onLoad === void 0 || onLoad(newLoadedKeys, {\n event: 'load',\n node: treeNode\n });\n _this.setUncontrolledState({\n loadedKeys: newLoadedKeys\n });\n _this.setState(function (prevState) {\n return {\n loadingKeys: arrDel(prevState.loadingKeys, key)\n };\n });\n resolve();\n }).catch(function (e) {\n _this.setState(function (prevState) {\n return {\n loadingKeys: arrDel(prevState.loadingKeys, key)\n };\n });\n\n // If exceed max retry times, we give up retry\n _this.loadingRetryTimes[key] = (_this.loadingRetryTimes[key] || 0) + 1;\n if (_this.loadingRetryTimes[key] >= MAX_RETRY_TIMES) {\n var currentLoadedKeys = _this.state.loadedKeys;\n warning(false, 'Retry for `loadData` many times but still failed. No more retry.');\n _this.setUncontrolledState({\n loadedKeys: arrAdd(currentLoadedKeys, key)\n });\n resolve();\n }\n reject(e);\n });\n return {\n loadingKeys: arrAdd(loadingKeys, key)\n };\n });\n });\n\n // Not care warning if we ignore this\n loadPromise.catch(function () {});\n return loadPromise;\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeMouseEnter\", function (event, node) {\n var onMouseEnter = _this.props.onMouseEnter;\n onMouseEnter === null || onMouseEnter === void 0 || onMouseEnter({\n event: event,\n node: node\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeMouseLeave\", function (event, node) {\n var onMouseLeave = _this.props.onMouseLeave;\n onMouseLeave === null || onMouseLeave === void 0 || onMouseLeave({\n event: event,\n node: node\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeContextMenu\", function (event, node) {\n var onRightClick = _this.props.onRightClick;\n if (onRightClick) {\n event.preventDefault();\n onRightClick({\n event: event,\n node: node\n });\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"onFocus\", function () {\n var onFocus = _this.props.onFocus;\n _this.setState({\n focused: true\n });\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n onFocus === null || onFocus === void 0 || onFocus.apply(void 0, args);\n });\n _defineProperty(_assertThisInitialized(_this), \"onBlur\", function () {\n var onBlur = _this.props.onBlur;\n _this.setState({\n focused: false\n });\n _this.onActiveChange(null);\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n onBlur === null || onBlur === void 0 || onBlur.apply(void 0, args);\n });\n _defineProperty(_assertThisInitialized(_this), \"getTreeNodeRequiredProps\", function () {\n var _this$state8 = _this.state,\n expandedKeys = _this$state8.expandedKeys,\n selectedKeys = _this$state8.selectedKeys,\n loadedKeys = _this$state8.loadedKeys,\n loadingKeys = _this$state8.loadingKeys,\n checkedKeys = _this$state8.checkedKeys,\n halfCheckedKeys = _this$state8.halfCheckedKeys,\n dragOverNodeKey = _this$state8.dragOverNodeKey,\n dropPosition = _this$state8.dropPosition,\n keyEntities = _this$state8.keyEntities;\n return {\n expandedKeys: expandedKeys || [],\n selectedKeys: selectedKeys || [],\n loadedKeys: loadedKeys || [],\n loadingKeys: loadingKeys || [],\n checkedKeys: checkedKeys || [],\n halfCheckedKeys: halfCheckedKeys || [],\n dragOverNodeKey: dragOverNodeKey,\n dropPosition: dropPosition,\n keyEntities: keyEntities\n };\n });\n // =========================== Expanded ===========================\n /** Set uncontrolled `expandedKeys`. This will also auto update `flattenNodes`. */\n _defineProperty(_assertThisInitialized(_this), \"setExpandedKeys\", function (expandedKeys) {\n var _this$state9 = _this.state,\n treeData = _this$state9.treeData,\n fieldNames = _this$state9.fieldNames;\n var flattenNodes = flattenTreeData(treeData, expandedKeys, fieldNames);\n _this.setUncontrolledState({\n expandedKeys: expandedKeys,\n flattenNodes: flattenNodes\n }, true);\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeExpand\", function (e, treeNode) {\n var expandedKeys = _this.state.expandedKeys;\n var _this$state10 = _this.state,\n listChanging = _this$state10.listChanging,\n fieldNames = _this$state10.fieldNames;\n var _this$props8 = _this.props,\n onExpand = _this$props8.onExpand,\n loadData = _this$props8.loadData;\n var expanded = treeNode.expanded;\n var key = treeNode[fieldNames.key];\n\n // Do nothing when motion is in progress\n if (listChanging) {\n return;\n }\n\n // Update selected keys\n var certain = expandedKeys.includes(key);\n var targetExpanded = !expanded;\n warning(expanded && certain || !expanded && !certain, 'Expand state not sync with index check');\n expandedKeys = targetExpanded ? arrAdd(expandedKeys, key) : arrDel(expandedKeys, key);\n _this.setExpandedKeys(expandedKeys);\n onExpand === null || onExpand === void 0 || onExpand(expandedKeys, {\n node: treeNode,\n expanded: targetExpanded,\n nativeEvent: e.nativeEvent\n });\n\n // Async Load data\n if (targetExpanded && loadData) {\n var loadPromise = _this.onNodeLoad(treeNode);\n if (loadPromise) {\n loadPromise.then(function () {\n // [Legacy] Refresh logic\n var newFlattenTreeData = flattenTreeData(_this.state.treeData, expandedKeys, fieldNames);\n _this.setUncontrolledState({\n flattenNodes: newFlattenTreeData\n });\n }).catch(function () {\n var currentExpandedKeys = _this.state.expandedKeys;\n var expandedKeysToRestore = arrDel(currentExpandedKeys, key);\n _this.setExpandedKeys(expandedKeysToRestore);\n });\n }\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"onListChangeStart\", function () {\n _this.setUncontrolledState({\n listChanging: true\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"onListChangeEnd\", function () {\n setTimeout(function () {\n _this.setUncontrolledState({\n listChanging: false\n });\n });\n });\n // =========================== Keyboard ===========================\n _defineProperty(_assertThisInitialized(_this), \"onActiveChange\", function (newActiveKey) {\n var activeKey = _this.state.activeKey;\n var _this$props9 = _this.props,\n onActiveChange = _this$props9.onActiveChange,\n _this$props9$itemScro = _this$props9.itemScrollOffset,\n itemScrollOffset = _this$props9$itemScro === void 0 ? 0 : _this$props9$itemScro;\n if (activeKey === newActiveKey) {\n return;\n }\n _this.setState({\n activeKey: newActiveKey\n });\n if (newActiveKey !== null) {\n _this.scrollTo({\n key: newActiveKey,\n offset: itemScrollOffset\n });\n }\n onActiveChange === null || onActiveChange === void 0 || onActiveChange(newActiveKey);\n });\n _defineProperty(_assertThisInitialized(_this), \"getActiveItem\", function () {\n var _this$state11 = _this.state,\n activeKey = _this$state11.activeKey,\n flattenNodes = _this$state11.flattenNodes;\n if (activeKey === null) {\n return null;\n }\n return flattenNodes.find(function (_ref2) {\n var key = _ref2.key;\n return key === activeKey;\n }) || null;\n });\n _defineProperty(_assertThisInitialized(_this), \"offsetActiveKey\", function (offset) {\n var _this$state12 = _this.state,\n flattenNodes = _this$state12.flattenNodes,\n activeKey = _this$state12.activeKey;\n var index = flattenNodes.findIndex(function (_ref3) {\n var key = _ref3.key;\n return key === activeKey;\n });\n\n // Align with index\n if (index === -1 && offset < 0) {\n index = flattenNodes.length;\n }\n index = (index + offset + flattenNodes.length) % flattenNodes.length;\n var item = flattenNodes[index];\n if (item) {\n var _key4 = item.key;\n _this.onActiveChange(_key4);\n } else {\n _this.onActiveChange(null);\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"onKeyDown\", function (event) {\n var _this$state13 = _this.state,\n activeKey = _this$state13.activeKey,\n expandedKeys = _this$state13.expandedKeys,\n checkedKeys = _this$state13.checkedKeys,\n fieldNames = _this$state13.fieldNames;\n var _this$props10 = _this.props,\n onKeyDown = _this$props10.onKeyDown,\n checkable = _this$props10.checkable,\n selectable = _this$props10.selectable;\n\n // >>>>>>>>>> Direction\n switch (event.which) {\n case KeyCode.UP:\n {\n _this.offsetActiveKey(-1);\n event.preventDefault();\n break;\n }\n case KeyCode.DOWN:\n {\n _this.offsetActiveKey(1);\n event.preventDefault();\n break;\n }\n }\n\n // >>>>>>>>>> Expand & Selection\n var activeItem = _this.getActiveItem();\n if (activeItem && activeItem.data) {\n var treeNodeRequiredProps = _this.getTreeNodeRequiredProps();\n var expandable = activeItem.data.isLeaf === false || !!(activeItem.data[fieldNames.children] || []).length;\n var eventNode = convertNodePropsToEventData(_objectSpread(_objectSpread({}, getTreeNodeProps(activeKey, treeNodeRequiredProps)), {}, {\n data: activeItem.data,\n active: true\n }));\n switch (event.which) {\n // >>> Expand\n case KeyCode.LEFT:\n {\n // Collapse if possible\n if (expandable && expandedKeys.includes(activeKey)) {\n _this.onNodeExpand({}, eventNode);\n } else if (activeItem.parent) {\n _this.onActiveChange(activeItem.parent.key);\n }\n event.preventDefault();\n break;\n }\n case KeyCode.RIGHT:\n {\n // Expand if possible\n if (expandable && !expandedKeys.includes(activeKey)) {\n _this.onNodeExpand({}, eventNode);\n } else if (activeItem.children && activeItem.children.length) {\n _this.onActiveChange(activeItem.children[0].key);\n }\n event.preventDefault();\n break;\n }\n\n // Selection\n case KeyCode.ENTER:\n case KeyCode.SPACE:\n {\n if (checkable && !eventNode.disabled && eventNode.checkable !== false && !eventNode.disableCheckbox) {\n _this.onNodeCheck({}, eventNode, !checkedKeys.includes(activeKey));\n } else if (!checkable && selectable && !eventNode.disabled && eventNode.selectable !== false) {\n _this.onNodeSelect({}, eventNode);\n }\n break;\n }\n }\n }\n onKeyDown === null || onKeyDown === void 0 || onKeyDown(event);\n });\n /**\n * Only update the value which is not in props\n */\n _defineProperty(_assertThisInitialized(_this), \"setUncontrolledState\", function (state) {\n var atomic = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var forceState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n if (!_this.destroyed) {\n var needSync = false;\n var allPassed = true;\n var newState = {};\n Object.keys(state).forEach(function (name) {\n if (_this.props.hasOwnProperty(name)) {\n allPassed = false;\n return;\n }\n needSync = true;\n newState[name] = state[name];\n });\n if (needSync && (!atomic || allPassed)) {\n _this.setState(_objectSpread(_objectSpread({}, newState), forceState));\n }\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"scrollTo\", function (scroll) {\n _this.listRef.current.scrollTo(scroll);\n });\n return _this;\n }\n _createClass(Tree, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.destroyed = false;\n this.onUpdated();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.onUpdated();\n }\n }, {\n key: \"onUpdated\",\n value: function onUpdated() {\n var _this$props11 = this.props,\n activeKey = _this$props11.activeKey,\n _this$props11$itemScr = _this$props11.itemScrollOffset,\n itemScrollOffset = _this$props11$itemScr === void 0 ? 0 : _this$props11$itemScr;\n if (activeKey !== undefined && activeKey !== this.state.activeKey) {\n this.setState({\n activeKey: activeKey\n });\n if (activeKey !== null) {\n this.scrollTo({\n key: activeKey,\n offset: itemScrollOffset\n });\n }\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n window.removeEventListener('dragend', this.onWindowDragEnd);\n this.destroyed = true;\n }\n }, {\n key: \"resetDragState\",\n value: function resetDragState() {\n this.setState({\n dragOverNodeKey: null,\n dropPosition: null,\n dropLevelOffset: null,\n dropTargetKey: null,\n dropContainerKey: null,\n dropTargetPos: null,\n dropAllowed: false\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$state14 = this.state,\n focused = _this$state14.focused,\n flattenNodes = _this$state14.flattenNodes,\n keyEntities = _this$state14.keyEntities,\n draggingNodeKey = _this$state14.draggingNodeKey,\n activeKey = _this$state14.activeKey,\n dropLevelOffset = _this$state14.dropLevelOffset,\n dropContainerKey = _this$state14.dropContainerKey,\n dropTargetKey = _this$state14.dropTargetKey,\n dropPosition = _this$state14.dropPosition,\n dragOverNodeKey = _this$state14.dragOverNodeKey,\n indent = _this$state14.indent;\n var _this$props12 = this.props,\n prefixCls = _this$props12.prefixCls,\n className = _this$props12.className,\n style = _this$props12.style,\n showLine = _this$props12.showLine,\n focusable = _this$props12.focusable,\n _this$props12$tabInde = _this$props12.tabIndex,\n tabIndex = _this$props12$tabInde === void 0 ? 0 : _this$props12$tabInde,\n selectable = _this$props12.selectable,\n showIcon = _this$props12.showIcon,\n icon = _this$props12.icon,\n switcherIcon = _this$props12.switcherIcon,\n draggable = _this$props12.draggable,\n checkable = _this$props12.checkable,\n checkStrictly = _this$props12.checkStrictly,\n disabled = _this$props12.disabled,\n motion = _this$props12.motion,\n loadData = _this$props12.loadData,\n filterTreeNode = _this$props12.filterTreeNode,\n height = _this$props12.height,\n itemHeight = _this$props12.itemHeight,\n scrollWidth = _this$props12.scrollWidth,\n virtual = _this$props12.virtual,\n titleRender = _this$props12.titleRender,\n dropIndicatorRender = _this$props12.dropIndicatorRender,\n onContextMenu = _this$props12.onContextMenu,\n onScroll = _this$props12.onScroll,\n direction = _this$props12.direction,\n rootClassName = _this$props12.rootClassName,\n rootStyle = _this$props12.rootStyle;\n var domProps = pickAttrs(this.props, {\n aria: true,\n data: true\n });\n\n // It's better move to hooks but we just simply keep here\n var draggableConfig;\n if (draggable) {\n if (_typeof(draggable) === 'object') {\n draggableConfig = draggable;\n } else if (typeof draggable === 'function') {\n draggableConfig = {\n nodeDraggable: draggable\n };\n } else {\n draggableConfig = {};\n }\n }\n var contextValue = {\n prefixCls: prefixCls,\n selectable: selectable,\n showIcon: showIcon,\n icon: icon,\n switcherIcon: switcherIcon,\n draggable: draggableConfig,\n draggingNodeKey: draggingNodeKey,\n checkable: checkable,\n checkStrictly: checkStrictly,\n disabled: disabled,\n keyEntities: keyEntities,\n dropLevelOffset: dropLevelOffset,\n dropContainerKey: dropContainerKey,\n dropTargetKey: dropTargetKey,\n dropPosition: dropPosition,\n dragOverNodeKey: dragOverNodeKey,\n indent: indent,\n direction: direction,\n dropIndicatorRender: dropIndicatorRender,\n loadData: loadData,\n filterTreeNode: filterTreeNode,\n titleRender: titleRender,\n onNodeClick: this.onNodeClick,\n onNodeDoubleClick: this.onNodeDoubleClick,\n onNodeExpand: this.onNodeExpand,\n onNodeSelect: this.onNodeSelect,\n onNodeCheck: this.onNodeCheck,\n onNodeLoad: this.onNodeLoad,\n onNodeMouseEnter: this.onNodeMouseEnter,\n onNodeMouseLeave: this.onNodeMouseLeave,\n onNodeContextMenu: this.onNodeContextMenu,\n onNodeDragStart: this.onNodeDragStart,\n onNodeDragEnter: this.onNodeDragEnter,\n onNodeDragOver: this.onNodeDragOver,\n onNodeDragLeave: this.onNodeDragLeave,\n onNodeDragEnd: this.onNodeDragEnd,\n onNodeDrop: this.onNodeDrop\n };\n return /*#__PURE__*/React.createElement(TreeContext.Provider, {\n value: contextValue\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: classNames(prefixCls, className, rootClassName, _defineProperty(_defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-show-line\"), showLine), \"\".concat(prefixCls, \"-focused\"), focused), \"\".concat(prefixCls, \"-active-focused\"), activeKey !== null)),\n style: rootStyle\n }, /*#__PURE__*/React.createElement(NodeList, _extends({\n ref: this.listRef,\n prefixCls: prefixCls,\n style: style,\n data: flattenNodes,\n disabled: disabled,\n selectable: selectable,\n checkable: !!checkable,\n motion: motion,\n dragging: draggingNodeKey !== null,\n height: height,\n itemHeight: itemHeight,\n virtual: virtual,\n focusable: focusable,\n focused: focused,\n tabIndex: tabIndex,\n activeItem: this.getActiveItem(),\n onFocus: this.onFocus,\n onBlur: this.onBlur,\n onKeyDown: this.onKeyDown,\n onActiveChange: this.onActiveChange,\n onListChangeStart: this.onListChangeStart,\n onListChangeEnd: this.onListChangeEnd,\n onContextMenu: onContextMenu,\n onScroll: onScroll,\n scrollWidth: scrollWidth\n }, this.getTreeNodeRequiredProps(), domProps))));\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(props, prevState) {\n var prevProps = prevState.prevProps;\n var newState = {\n prevProps: props\n };\n function needSync(name) {\n return !prevProps && props.hasOwnProperty(name) || prevProps && prevProps[name] !== props[name];\n }\n\n // ================== Tree Node ==================\n var treeData;\n\n // fieldNames\n var fieldNames = prevState.fieldNames;\n if (needSync('fieldNames')) {\n fieldNames = fillFieldNames(props.fieldNames);\n newState.fieldNames = fieldNames;\n }\n\n // Check if `treeData` or `children` changed and save into the state.\n if (needSync('treeData')) {\n treeData = props.treeData;\n } else if (needSync('children')) {\n warning(false, '`children` of Tree is deprecated. Please use `treeData` instead.');\n treeData = convertTreeToData(props.children);\n }\n\n // Save flatten nodes info and convert `treeData` into keyEntities\n if (treeData) {\n newState.treeData = treeData;\n var entitiesMap = convertDataToEntities(treeData, {\n fieldNames: fieldNames\n });\n newState.keyEntities = _objectSpread(_defineProperty({}, MOTION_KEY, MotionEntity), entitiesMap.keyEntities);\n\n // Warning if treeNode not provide key\n if (process.env.NODE_ENV !== 'production') {\n warningWithoutKey(treeData, fieldNames);\n }\n }\n var keyEntities = newState.keyEntities || prevState.keyEntities;\n\n // ================ expandedKeys =================\n if (needSync('expandedKeys') || prevProps && needSync('autoExpandParent')) {\n newState.expandedKeys = props.autoExpandParent || !prevProps && props.defaultExpandParent ? conductExpandParent(props.expandedKeys, keyEntities) : props.expandedKeys;\n } else if (!prevProps && props.defaultExpandAll) {\n var cloneKeyEntities = _objectSpread({}, keyEntities);\n delete cloneKeyEntities[MOTION_KEY];\n\n // Only take the key who has the children to enhance the performance\n var nextExpandedKeys = [];\n Object.keys(cloneKeyEntities).forEach(function (key) {\n var entity = cloneKeyEntities[key];\n if (entity.children && entity.children.length) {\n nextExpandedKeys.push(entity.key);\n }\n });\n newState.expandedKeys = nextExpandedKeys;\n } else if (!prevProps && props.defaultExpandedKeys) {\n newState.expandedKeys = props.autoExpandParent || props.defaultExpandParent ? conductExpandParent(props.defaultExpandedKeys, keyEntities) : props.defaultExpandedKeys;\n }\n if (!newState.expandedKeys) {\n delete newState.expandedKeys;\n }\n\n // ================ flattenNodes =================\n if (treeData || newState.expandedKeys) {\n var flattenNodes = flattenTreeData(treeData || prevState.treeData, newState.expandedKeys || prevState.expandedKeys, fieldNames);\n newState.flattenNodes = flattenNodes;\n }\n\n // ================ selectedKeys =================\n if (props.selectable) {\n if (needSync('selectedKeys')) {\n newState.selectedKeys = calcSelectedKeys(props.selectedKeys, props);\n } else if (!prevProps && props.defaultSelectedKeys) {\n newState.selectedKeys = calcSelectedKeys(props.defaultSelectedKeys, props);\n }\n }\n\n // ================= checkedKeys =================\n if (props.checkable) {\n var checkedKeyEntity;\n if (needSync('checkedKeys')) {\n checkedKeyEntity = parseCheckedKeys(props.checkedKeys) || {};\n } else if (!prevProps && props.defaultCheckedKeys) {\n checkedKeyEntity = parseCheckedKeys(props.defaultCheckedKeys) || {};\n } else if (treeData) {\n // If `treeData` changed, we also need check it\n checkedKeyEntity = parseCheckedKeys(props.checkedKeys) || {\n checkedKeys: prevState.checkedKeys,\n halfCheckedKeys: prevState.halfCheckedKeys\n };\n }\n if (checkedKeyEntity) {\n var _checkedKeyEntity = checkedKeyEntity,\n _checkedKeyEntity$che = _checkedKeyEntity.checkedKeys,\n checkedKeys = _checkedKeyEntity$che === void 0 ? [] : _checkedKeyEntity$che,\n _checkedKeyEntity$hal = _checkedKeyEntity.halfCheckedKeys,\n halfCheckedKeys = _checkedKeyEntity$hal === void 0 ? [] : _checkedKeyEntity$hal;\n if (!props.checkStrictly) {\n var conductKeys = conductCheck(checkedKeys, true, keyEntities);\n checkedKeys = conductKeys.checkedKeys;\n halfCheckedKeys = conductKeys.halfCheckedKeys;\n }\n newState.checkedKeys = checkedKeys;\n newState.halfCheckedKeys = halfCheckedKeys;\n }\n }\n\n // ================= loadedKeys ==================\n if (needSync('loadedKeys')) {\n newState.loadedKeys = props.loadedKeys;\n }\n return newState;\n }\n }]);\n return Tree;\n}(React.Component);\n_defineProperty(Tree, \"defaultProps\", {\n prefixCls: 'rc-tree',\n showLine: false,\n showIcon: true,\n selectable: true,\n multiple: false,\n checkable: false,\n disabled: false,\n checkStrictly: false,\n draggable: false,\n defaultExpandParent: true,\n autoExpandParent: false,\n defaultExpandAll: false,\n defaultExpandedKeys: [],\n defaultCheckedKeys: [],\n defaultSelectedKeys: [],\n dropIndicatorRender: DropIndicator,\n allowDrop: function allowDrop() {\n return true;\n },\n expandAction: false\n});\n_defineProperty(Tree, \"TreeNode\", TreeNode);\nexport default Tree;","import React from 'react';\nvar DropIndicator = function DropIndicator(props) {\n var dropPosition = props.dropPosition,\n dropLevelOffset = props.dropLevelOffset,\n indent = props.indent;\n var style = {\n pointerEvents: 'none',\n position: 'absolute',\n right: 0,\n backgroundColor: 'red',\n height: 2\n };\n switch (dropPosition) {\n case -1:\n style.top = 0;\n style.left = -dropLevelOffset * indent;\n break;\n case 1:\n style.bottom = 0;\n style.left = -dropLevelOffset * indent;\n break;\n case 0:\n style.bottom = 0;\n style.left = indent;\n break;\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n style: style\n });\n};\nif (process.env.NODE_ENV !== 'production') {\n DropIndicator.displayName = 'DropIndicator';\n}\nexport default DropIndicator;","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys'),\n keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n","/**\n * 将多个单个参数的函数合成为一个函数,执行顺序为从右到左\n * @param fn 第一个函数\n * @param rest 剩余函数\n * @returns 复合后的函数\n */\nexport function compose(fn, ...rest) {\n return rest.reduce((pre, cur) => (x) => pre(cur(x)), fn);\n}\n//# sourceMappingURL=compose.js.map","'use strict'\n\nconst { hasOwnProperty } = Object.prototype\n\nconst stringify = configure()\n\n// @ts-expect-error\nstringify.configure = configure\n// @ts-expect-error\nstringify.stringify = stringify\n\n// @ts-expect-error\nstringify.default = stringify\n\n// @ts-expect-error used for named export\nexports.stringify = stringify\n// @ts-expect-error used for named export\nexports.configure = configure\n\nmodule.exports = stringify\n\n// eslint-disable-next-line no-control-regex\nconst strEscapeSequencesRegExp = /[\\u0000-\\u001f\\u0022\\u005c\\ud800-\\udfff]/\n\n// Escape C0 control characters, double quotes, the backslash and every code\n// unit with a numeric value in the inclusive range 0xD800 to 0xDFFF.\nfunction strEscape (str) {\n // Some magic numbers that worked out fine while benchmarking with v8 8.0\n if (str.length < 5000 && !strEscapeSequencesRegExp.test(str)) {\n return `\"${str}\"`\n }\n return JSON.stringify(str)\n}\n\nfunction sort (array, comparator) {\n // Insertion sort is very efficient for small input sizes, but it has a bad\n // worst case complexity. Thus, use native array sort for bigger values.\n if (array.length > 2e2 || comparator) {\n return array.sort(comparator)\n }\n for (let i = 1; i < array.length; i++) {\n const currentValue = array[i]\n let position = i\n while (position !== 0 && array[position - 1] > currentValue) {\n array[position] = array[position - 1]\n position--\n }\n array[position] = currentValue\n }\n return array\n}\n\nconst typedArrayPrototypeGetSymbolToStringTag =\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(\n Object.getPrototypeOf(\n new Int8Array()\n )\n ),\n Symbol.toStringTag\n ).get\n\nfunction isTypedArrayWithEntries (value) {\n return typedArrayPrototypeGetSymbolToStringTag.call(value) !== undefined && value.length !== 0\n}\n\nfunction stringifyTypedArray (array, separator, maximumBreadth) {\n if (array.length < maximumBreadth) {\n maximumBreadth = array.length\n }\n const whitespace = separator === ',' ? '' : ' '\n let res = `\"0\":${whitespace}${array[0]}`\n for (let i = 1; i < maximumBreadth; i++) {\n res += `${separator}\"${i}\":${whitespace}${array[i]}`\n }\n return res\n}\n\nfunction getCircularValueOption (options) {\n if (hasOwnProperty.call(options, 'circularValue')) {\n const circularValue = options.circularValue\n if (typeof circularValue === 'string') {\n return `\"${circularValue}\"`\n }\n if (circularValue == null) {\n return circularValue\n }\n if (circularValue === Error || circularValue === TypeError) {\n return {\n toString () {\n throw new TypeError('Converting circular structure to JSON')\n }\n }\n }\n throw new TypeError('The \"circularValue\" argument must be of type string or the value null or undefined')\n }\n return '\"[Circular]\"'\n}\n\nfunction getDeterministicOption (options) {\n let value\n if (hasOwnProperty.call(options, 'deterministic')) {\n value = options.deterministic\n if (typeof value !== 'boolean' && typeof value !== 'function') {\n throw new TypeError('The \"deterministic\" argument must be of type boolean or comparator function')\n }\n }\n return value === undefined ? true : value\n}\n\nfunction getBooleanOption (options, key) {\n let value\n if (hasOwnProperty.call(options, key)) {\n value = options[key]\n if (typeof value !== 'boolean') {\n throw new TypeError(`The \"${key}\" argument must be of type boolean`)\n }\n }\n return value === undefined ? true : value\n}\n\nfunction getPositiveIntegerOption (options, key) {\n let value\n if (hasOwnProperty.call(options, key)) {\n value = options[key]\n if (typeof value !== 'number') {\n throw new TypeError(`The \"${key}\" argument must be of type number`)\n }\n if (!Number.isInteger(value)) {\n throw new TypeError(`The \"${key}\" argument must be an integer`)\n }\n if (value < 1) {\n throw new RangeError(`The \"${key}\" argument must be >= 1`)\n }\n }\n return value === undefined ? Infinity : value\n}\n\nfunction getItemCount (number) {\n if (number === 1) {\n return '1 item'\n }\n return `${number} items`\n}\n\nfunction getUniqueReplacerSet (replacerArray) {\n const replacerSet = new Set()\n for (const value of replacerArray) {\n if (typeof value === 'string' || typeof value === 'number') {\n replacerSet.add(String(value))\n }\n }\n return replacerSet\n}\n\nfunction getStrictOption (options) {\n if (hasOwnProperty.call(options, 'strict')) {\n const value = options.strict\n if (typeof value !== 'boolean') {\n throw new TypeError('The \"strict\" argument must be of type boolean')\n }\n if (value) {\n return (value) => {\n let message = `Object can not safely be stringified. Received type ${typeof value}`\n if (typeof value !== 'function') message += ` (${value.toString()})`\n throw new Error(message)\n }\n }\n }\n}\n\nfunction configure (options) {\n options = { ...options }\n const fail = getStrictOption(options)\n if (fail) {\n if (options.bigint === undefined) {\n options.bigint = false\n }\n if (!('circularValue' in options)) {\n options.circularValue = Error\n }\n }\n const circularValue = getCircularValueOption(options)\n const bigint = getBooleanOption(options, 'bigint')\n const deterministic = getDeterministicOption(options)\n const comparator = typeof deterministic === 'function' ? deterministic : undefined\n const maximumDepth = getPositiveIntegerOption(options, 'maximumDepth')\n const maximumBreadth = getPositiveIntegerOption(options, 'maximumBreadth')\n\n function stringifyFnReplacer (key, parent, stack, replacer, spacer, indentation) {\n let value = parent[key]\n\n if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n }\n value = replacer.call(parent, key, value)\n\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n let res = ''\n let join = ','\n const originalIndentation = indentation\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n if (spacer !== '') {\n indentation += spacer\n res += `\\n${indentation}`\n join = `,\\n${indentation}`\n }\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n if (spacer !== '') {\n res += `\\n${originalIndentation}`\n }\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n let whitespace = ''\n let separator = ''\n if (spacer !== '') {\n indentation += spacer\n join = `,\\n${indentation}`\n whitespace = ' '\n }\n const maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (deterministic && !isTypedArrayWithEntries(value)) {\n keys = sort(keys, comparator)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifyFnReplacer(key, value, stack, replacer, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n separator = join\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\":${whitespace}\"${getItemCount(removedKeys)} not stringified\"`\n separator = join\n }\n if (spacer !== '' && separator.length > 1) {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifyArrayReplacer (key, value, stack, replacer, spacer, indentation) {\n if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n }\n\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n const originalIndentation = indentation\n let res = ''\n let join = ','\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n if (spacer !== '') {\n indentation += spacer\n res += `\\n${indentation}`\n join = `,\\n${indentation}`\n }\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n if (spacer !== '') {\n res += `\\n${originalIndentation}`\n }\n stack.pop()\n return `[${res}]`\n }\n stack.push(value)\n let whitespace = ''\n if (spacer !== '') {\n indentation += spacer\n join = `,\\n${indentation}`\n whitespace = ' '\n }\n let separator = ''\n for (const key of replacer) {\n const tmp = stringifyArrayReplacer(key, value[key], stack, replacer, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n separator = join\n }\n }\n if (spacer !== '' && separator.length > 1) {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifyIndent (key, value, stack, spacer, indentation) {\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n // Prevent calling `toJSON` again.\n if (typeof value !== 'object') {\n return stringifyIndent(key, value, stack, spacer, indentation)\n }\n if (value === null) {\n return 'null'\n }\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n const originalIndentation = indentation\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n indentation += spacer\n let res = `\\n${indentation}`\n const join = `,\\n${indentation}`\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n res += `\\n${originalIndentation}`\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n indentation += spacer\n const join = `,\\n${indentation}`\n let res = ''\n let separator = ''\n let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (isTypedArrayWithEntries(value)) {\n res += stringifyTypedArray(value, join, maximumBreadth)\n keys = keys.slice(value.length)\n maximumPropertiesToStringify -= value.length\n separator = join\n }\n if (deterministic) {\n keys = sort(keys, comparator)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifyIndent(key, value[key], stack, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}: ${tmp}`\n separator = join\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\": \"${getItemCount(removedKeys)} not stringified\"`\n separator = join\n }\n if (separator !== '') {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifySimple (key, value, stack) {\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n // Prevent calling `toJSON` again\n if (typeof value !== 'object') {\n return stringifySimple(key, value, stack)\n }\n if (value === null) {\n return 'null'\n }\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n let res = ''\n\n const hasLength = value.length !== undefined\n if (hasLength && Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifySimple(String(i), value[i], stack)\n res += tmp !== undefined ? tmp : 'null'\n res += ','\n }\n const tmp = stringifySimple(String(i), value[i], stack)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `,\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n let separator = ''\n let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (hasLength && isTypedArrayWithEntries(value)) {\n res += stringifyTypedArray(value, ',', maximumBreadth)\n keys = keys.slice(value.length)\n maximumPropertiesToStringify -= value.length\n separator = ','\n }\n if (deterministic) {\n keys = sort(keys, comparator)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifySimple(key, value[key], stack)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${tmp}`\n separator = ','\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\":\"${getItemCount(removedKeys)} not stringified\"`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringify (value, replacer, space) {\n if (arguments.length > 1) {\n let spacer = ''\n if (typeof space === 'number') {\n spacer = ' '.repeat(Math.min(space, 10))\n } else if (typeof space === 'string') {\n spacer = space.slice(0, 10)\n }\n if (replacer != null) {\n if (typeof replacer === 'function') {\n return stringifyFnReplacer('', { '': value }, [], replacer, spacer, '')\n }\n if (Array.isArray(replacer)) {\n return stringifyArrayReplacer('', value, [], getUniqueReplacerSet(replacer), spacer, '')\n }\n }\n if (spacer.length !== 0) {\n return stringifyIndent('', value, [], spacer, '')\n }\n }\n return stringifySimple('', value, [])\n }\n\n return stringify\n}\n","import { MaskOperation, StencilType, gl } from '@antv/l7-core';\n// 掩模配置\nexport function getStencil(mask, maskInside) {\n return {\n enable: mask,\n mask: 0xff,\n func: {\n cmp: gl.EQUAL,\n // gl.EQUAL,\n ref: maskInside ? 1 : 0,\n mask: 1\n }\n };\n}\n// 模版配置\nexport function getStencilMask(option) {\n if (option.maskOperation === MaskOperation.OR) {\n return {\n enable: true,\n mask: 0xff,\n func: {\n cmp: gl.ALWAYS,\n ref: 1,\n mask: 0xff\n },\n opFront: {\n fail: gl.KEEP,\n zfail: gl.REPLACE,\n zpass: gl.REPLACE\n }\n };\n }\n return {\n enable: true,\n mask: 0xff,\n func: {\n cmp: option.stencilType === StencilType.SINGLE // 单层\n ? gl.ALWAYS : option.stencilIndex === 0 // 多层\n ? gl.ALWAYS : gl.LESS,\n ref: option.stencilType === StencilType.SINGLE ? 1 : option.stencilIndex === 0 ? 2 : 1,\n mask: 0xff\n },\n opFront: {\n fail: gl.KEEP,\n zfail: gl.REPLACE,\n zpass: gl.REPLACE\n }\n };\n}","export const DefaultUniformStyleValue = {\n opacity: 1,\n stroke: [1, 0, 0, 1],\n offsets: [0, 0],\n rotation: 0,\n extrusionBase: 0,\n strokeOpacity: 1,\n thetaOffset: 0.314\n};\nexport const DefaultUniformStyleType = {\n opacity: 'float',\n stroke: 'vec4',\n offsets: 'vec2',\n textOffset: 'vec2',\n rotation: 'float',\n extrusionBase: 'float',\n strokeOpacity: 'float',\n thetaOffset: 'float'\n};","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, BlendType, MaskOperation, StencilType, gl } from '@antv/l7-core';\nimport { fp64LowPart, rgb2arr } from '@antv/l7-utils';\nimport { BlendTypes } from \"../utils/blend\";\nimport { getStencil, getStencilMask } from \"../utils/stencil\";\nimport { COMMON_ATTRIBUTE_LOCATION, getCommonStyleAttributeOptions } from \"./CommonStyleAttribute\";\nimport { DefaultUniformStyleType, DefaultUniformStyleValue } from \"./constant\";\nimport { MultipleOfFourNumber } from \"./utils\";\n// 属性索引宏定义前缀,使用命名空间避免 define 名称重复情况\nconst DEFINE_ATTRIBUTE_LOCATION_PREFIX = 'ATTRIBUTE_LOCATION_';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport default class BaseModel {\n /**\n * Attribute Layout Location in Shader\n */\n get attributeLocation() {\n return _objectSpread({}, COMMON_ATTRIBUTE_LOCATION);\n }\n\n // style texture data mapping\n\n // 不支持数据映射的buffer\n\n // style texture data mapping\n\n constructor(layer) {\n _defineProperty(this, \"triangulation\", void 0);\n _defineProperty(this, \"uniformBuffers\", []);\n _defineProperty(this, \"textures\", []);\n _defineProperty(this, \"createTexture2D\", void 0);\n _defineProperty(this, \"preStyleAttribute\", {});\n _defineProperty(this, \"encodeStyleAttribute\", {});\n _defineProperty(this, \"layer\", void 0);\n _defineProperty(this, \"dataTexture\", void 0);\n // 用于数据传递的数据纹理\n _defineProperty(this, \"DATA_TEXTURE_WIDTH\", void 0);\n // 默认有多少列(宽度)\n _defineProperty(this, \"dataTextureTest\", void 0);\n _defineProperty(this, \"configService\", void 0);\n _defineProperty(this, \"shaderModuleService\", void 0);\n _defineProperty(this, \"rendererService\", void 0);\n _defineProperty(this, \"iconService\", void 0);\n _defineProperty(this, \"fontService\", void 0);\n _defineProperty(this, \"styleAttributeService\", void 0);\n _defineProperty(this, \"mapService\", void 0);\n _defineProperty(this, \"cameraService\", void 0);\n _defineProperty(this, \"layerService\", void 0);\n _defineProperty(this, \"pickingService\", void 0);\n _defineProperty(this, \"attributeUnifoms\", void 0);\n // 支持数据映射的buffer\n _defineProperty(this, \"commonUnifoms\", void 0);\n this.layer = layer;\n this.configService = layer.getContainer().globalConfigService;\n this.rendererService = layer.getContainer().rendererService;\n this.pickingService = layer.getContainer().pickingService;\n this.shaderModuleService = layer.getContainer().shaderModuleService;\n this.styleAttributeService = layer.getContainer().styleAttributeService;\n this.mapService = layer.getContainer().mapService;\n this.iconService = layer.getContainer().iconService;\n this.fontService = layer.getContainer().fontService;\n this.cameraService = layer.getContainer().cameraService;\n this.layerService = layer.getContainer().layerService;\n // 初始化支持数据映射的 Style 属性\n\n this.registerStyleAttribute();\n // 注册 Attribute\n this.registerBuiltinAttributes();\n // 开启动画\n this.startModelAnimate();\n const {\n createTexture2D\n } = this.rendererService;\n this.createTexture2D = createTexture2D;\n }\n\n // style datatexture mapping\n\n getBlend() {\n const {\n blend = 'normal'\n } = this.layer.getLayerConfig();\n return BlendTypes[BlendType[blend]];\n }\n getStencil(option) {\n const {\n mask = false,\n maskInside = true,\n enableMask,\n maskOperation = MaskOperation.AND\n } = this.layer.getLayerConfig();\n // TODO 临时处理,后期移除MaskLayer\n if (this.layer.type === 'MaskLayer') {\n return getStencilMask({\n isStencil: true,\n stencilType: StencilType.SINGLE\n }); // 用于遮罩的stencil 参数\n }\n if (option.isStencil) {\n return getStencilMask(_objectSpread(_objectSpread({}, option), {}, {\n maskOperation\n })); // 用于遮罩的stencil 参数\n }\n const maskflag = mask ||\n // mask 兼容历史写法\n enableMask && this.layer.masks.length !== 0 ||\n // 外部图层的mask\n this.layer.tileMask !== undefined; // 瓦片图层\n // !!(mask || enableMask || this.layer.tileMask);\n return getStencil(maskflag, maskInside);\n }\n getDefaultStyle() {\n return {};\n }\n // public getUninforms(): IModelUniform {\n // throw new Error('Method not implemented.');\n // }\n getUninforms() {\n const commoninfo = this.getCommonUniformsInfo();\n const attributeInfo = this.getUniformsBufferInfo(this.getStyleAttribute());\n this.updateStyleUnifoms();\n const result = _objectSpread(_objectSpread({}, attributeInfo.uniformsOption), commoninfo.uniformsOption);\n // 兼容 Regl Boolean 类型\n Object.keys(result).forEach(key => {\n if (typeof result[key] === 'boolean') {\n result[key] = result[key] ? 1 : 0;\n }\n });\n //如果是regl渲染 需要在uniform中带上u_texture 暂时用this.rendererService.device判断\n if (!this.rendererService.hasOwnProperty('device') && this.textures && this.textures.length === 1) {\n result['u_texture'] = this.textures[0];\n }\n return result;\n }\n getAnimateUniforms() {\n return {};\n }\n needUpdate() {\n return _asyncToGenerator(function* () {\n return false;\n })();\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n buildModels() {\n return _asyncToGenerator(function* () {\n throw new Error('Method not implemented.');\n })();\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n initModels() {\n return _asyncToGenerator(function* () {\n throw new Error('Method not implemented.');\n })();\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n clearModels(refresh = true) {\n return;\n }\n getAttribute() {\n throw new Error('Method not implemented.');\n }\n prerender() {}\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n render(renderOptions) {\n throw new Error('Method not implemented.');\n }\n registerBuiltinAttributes() {\n throw new Error('Method not implemented.');\n }\n animateOption2Array(option) {\n return [option.enable ? 0 : 1.0, option.duration || 4.0, option.interval || 0.2, option.trailLength || 0.1];\n }\n startModelAnimate() {\n const {\n animateOption\n } = this.layer.getLayerConfig();\n if (animateOption.enable) {\n this.layer.setAnimateStartTime();\n }\n }\n getInject() {\n const shaderInject = getDynamicStyleInject(this.layer.enableShaderEncodeStyles, this.layer.encodeStyleAttribute);\n return shaderInject;\n }\n getDefines() {\n // define atribute Layout Location\n const atributeLocationDefines = Object.keys(this.attributeLocation).reduce((result, key) => {\n const normalizedKey = DEFINE_ATTRIBUTE_LOCATION_PREFIX + key;\n result[normalizedKey] = this.attributeLocation[key];\n return result;\n }, {});\n return _objectSpread({}, atributeLocationDefines);\n }\n\n // 获取数据映射样式\n getStyleAttribute() {\n const options = {};\n // TODO: 优化\n this.layer.enableShaderEncodeStyles.forEach(key => {\n if (!this.layer.encodeStyleAttribute[key]) {\n // 没有设置样式映射\n // @ts-ignore\n const keyValue = this.layer.getLayerConfig()[key];\n let value = typeof keyValue === 'undefined' ? DefaultUniformStyleValue[key] : keyValue;\n if (key === 'stroke') {\n value = rgb2arr(value);\n }\n options['u_' + key] = value;\n }\n });\n return options;\n }\n\n // 注册数据映射样式\n registerStyleAttribute() {\n Object.keys(this.layer.encodeStyleAttribute).forEach(key => {\n const options = getCommonStyleAttributeOptions(key);\n if (options) {\n this.styleAttributeService.registerStyleAttribute(options);\n }\n });\n }\n\n /**\n * 注册 Position 属性 64 位地位部分,当经纬度数据开启双精度浮点数使用,\n * 避免大于 20层级以上出现数据偏移\n */\n registerPosition64LowAttribute(enable64bitPosition = true) {\n // save low part for enabled double precision POSITION attribute\n this.styleAttributeService.registerStyleAttribute({\n name: 'position64Low',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Position64Low',\n shaderLocation: this.attributeLocation.POSITION_64LOW,\n buffer: {\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: (feature, featureIdx, vertex) => {\n return enable64bitPosition ? [fp64LowPart(vertex[0]), fp64LowPart(vertex[1])] : [0, 0];\n }\n }\n });\n }\n updateEncodeAttribute(type, flag) {\n this.encodeStyleAttribute[type] = flag;\n }\n initUniformsBuffer() {\n const attrUniforms = this.getUniformsBufferInfo(this.getStyleAttribute());\n const commonUniforms = this.getCommonUniformsInfo();\n if (attrUniforms.uniformsLength !== 0) {\n this.attributeUnifoms = this.rendererService.createBuffer({\n data: new Float32Array(MultipleOfFourNumber(attrUniforms.uniformsLength)).fill(0),\n // 长度需要大于等于 4\n isUBO: true,\n label: 'layerModelAttributeUnifoms'\n });\n this.uniformBuffers.push(this.attributeUnifoms);\n }\n if (commonUniforms.uniformsLength !== 0) {\n this.commonUnifoms = this.rendererService.createBuffer({\n data: new Float32Array(MultipleOfFourNumber(commonUniforms.uniformsLength)).fill(0),\n isUBO: true,\n label: 'layerModelCommonUnifoms'\n });\n this.uniformBuffers.push(this.commonUnifoms);\n }\n }\n // 获取数据映射 uniform 信息\n getUniformsBufferInfo(uniformsOption) {\n let uniformsLength = 0;\n const uniformsArray = [];\n Object.values(uniformsOption).forEach(value => {\n if (Array.isArray(value)) {\n uniformsArray.push(...value);\n uniformsLength += value.length;\n } else if (typeof value === 'number') {\n // 排除纹理\n uniformsArray.push(value);\n uniformsLength += 1;\n } else if (typeof value === 'boolean') {\n uniformsArray.push(Number(value));\n uniformsLength += 1;\n }\n });\n return {\n uniformsOption,\n uniformsLength,\n uniformsArray\n };\n }\n getCommonUniformsInfo() {\n return {\n uniformsLength: 0,\n uniformsArray: [],\n uniformsOption: {}\n };\n }\n\n // 更新支持数据映射的uniform\n updateStyleUnifoms() {\n var _this$attributeUnifom, _this$commonUnifoms;\n const {\n uniformsArray\n } = this.getUniformsBufferInfo(this.getStyleAttribute());\n const {\n uniformsArray: commonUniformsArray\n } = this.getCommonUniformsInfo();\n (_this$attributeUnifom = this.attributeUnifoms) === null || _this$attributeUnifom === void 0 || _this$attributeUnifom.subData({\n offset: 0,\n data: new Uint8Array(new Float32Array(uniformsArray).buffer)\n });\n (_this$commonUnifoms = this.commonUnifoms) === null || _this$commonUnifoms === void 0 || _this$commonUnifoms.subData({\n offset: 0,\n data: new Uint8Array(new Float32Array(commonUniformsArray).buffer)\n });\n }\n}\n\n/**\n * 获取动态注入参与数据映射 uniform/attribute\n */\nfunction getDynamicStyleInject(shaderEncodeStyles, styleAttribute) {\n const uniforms = [];\n let vsDeclInjection = '';\n\n // 支持数据映射的类型\n shaderEncodeStyles.forEach(key => {\n const upperCaseKey = key.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase();\n const shaderDefineName = DEFINE_ATTRIBUTE_LOCATION_PREFIX + upperCaseKey;\n if (styleAttribute[key]) {\n // 配置了数据映射的类型\n vsDeclInjection += `#define USE_ATTRIBUTE_${upperCaseKey} 0.0 \\n`;\n } else {\n uniforms.push(` ${DefaultUniformStyleType[key]} u_${key};`);\n }\n vsDeclInjection += `\n#ifdef USE_ATTRIBUTE_${upperCaseKey}\nlayout(location = ${shaderDefineName}) in ${DefaultUniformStyleType[key]} a_${key.charAt(0).toUpperCase() + key.slice(1)};\n#endif \\n`;\n });\n const fsDeclInjection = uniforms.length ? `\nlayout(std140) uniform AttributeUniforms {\n ${uniforms.join('\\n')}\n};\\n` : '';\n vsDeclInjection += fsDeclInjection;\n let vsMainInjection = '';\n shaderEncodeStyles.forEach(key => {\n const upperCaseKey = key.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase();\n vsMainInjection += `\n #ifdef USE_ATTRIBUTE_${upperCaseKey}\n ${DefaultUniformStyleType[key]} ${key} = a_${key.charAt(0).toUpperCase() + key.slice(1)};\n #else\n ${DefaultUniformStyleType[key]} ${key} = u_${key};\n #endif\n `;\n });\n return {\n 'vs:#decl': vsDeclInjection,\n 'fs:#decl': fsDeclInjection,\n 'vs:#main-start': vsMainInjection\n };\n}","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Path } from '@antv/g';\nconst point = (x, y, r) => {\n return [\n ['M', x - r, y],\n ['A', r, r, 0, 1, 0, x + r, y],\n ['A', r, r, 0, 1, 0, x - r, y],\n ['Z'],\n ];\n};\npoint.style = ['fill'];\nconst hollowPoint = point.bind(undefined);\nhollowPoint.style = ['stroke', 'lineWidth'];\nconst square = (x, y, r) => {\n return [\n ['M', x - r, y - r],\n ['L', x + r, y - r],\n ['L', x + r, y + r],\n ['L', x - r, y + r],\n ['Z'],\n ];\n};\nsquare.style = ['fill'];\nconst rect = square.bind(undefined);\nrect.style = ['fill'];\nconst hollowSquare = square.bind(undefined);\nhollowSquare.style = ['stroke', 'lineWidth'];\nconst diamond = (x, y, r) => {\n const hr = r * 0.618;\n return [\n ['M', x - hr, y],\n ['L', x, y - r],\n ['L', x + hr, y],\n ['L', x, y + r],\n ['Z'],\n ];\n};\ndiamond.style = ['fill'];\nconst hollowDiamond = diamond.bind(undefined);\nhollowDiamond.style = ['stroke', 'lineWidth'];\nconst triangle = (x, y, r) => {\n const diffY = r * Math.sin((1 / 3) * Math.PI);\n return [\n ['M', x - r, y + diffY],\n ['L', x, y - diffY],\n ['L', x + r, y + diffY],\n ['Z'],\n ];\n};\ntriangle.style = ['fill'];\nconst hollowTriangle = triangle.bind(undefined);\nhollowTriangle.style = ['stroke', 'lineWidth'];\nconst triangleDown = (x, y, r) => {\n const diffY = r * Math.sin((1 / 3) * Math.PI);\n return [\n ['M', x - r, y - diffY],\n ['L', x + r, y - diffY],\n ['L', x, y + diffY],\n ['Z'],\n ];\n};\ntriangleDown.style = ['fill'];\nconst hollowTriangleDown = triangleDown.bind(undefined);\nhollowTriangleDown.style = ['stroke', 'lineWidth'];\nconst hexagon = (x, y, r) => {\n const diffX = (r / 2) * Math.sqrt(3);\n return [\n ['M', x, y - r],\n ['L', x + diffX, y - r / 2],\n ['L', x + diffX, y + r / 2],\n ['L', x, y + r],\n ['L', x - diffX, y + r / 2],\n ['L', x - diffX, y - r / 2],\n ['Z'],\n ];\n};\nhexagon.style = ['fill'];\nconst hollowHexagon = hexagon.bind(undefined);\nhollowHexagon.style = ['stroke', 'lineWidth'];\nconst bowtie = (x, y, r) => {\n const diffY = r - 1.5;\n return [\n ['M', x - r, y - diffY],\n ['L', x + r, y + diffY],\n ['L', x + r, y - diffY],\n ['L', x - r, y + diffY],\n ['Z'],\n ];\n};\nbowtie.style = ['fill'];\nconst hollowBowtie = bowtie.bind(undefined);\nhollowBowtie.style = ['stroke', 'lineWidth'];\nconst line = (x, y, r) => {\n return [\n ['M', x, y + r],\n ['L', x, y - r],\n ];\n};\nline.style = ['stroke', 'lineWidth'];\nconst cross = (x, y, r) => {\n return [\n ['M', x - r, y - r],\n ['L', x + r, y + r],\n ['M', x + r, y - r],\n ['L', x - r, y + r],\n ];\n};\ncross.style = ['stroke', 'lineWidth'];\nconst tick = (x, y, r) => {\n return [\n ['M', x - r / 2, y - r],\n ['L', x + r / 2, y - r],\n ['M', x, y - r],\n ['L', x, y + r],\n ['M', x - r / 2, y + r],\n ['L', x + r / 2, y + r],\n ];\n};\ntick.style = ['stroke', 'lineWidth'];\nconst plus = (x, y, r) => {\n return [\n ['M', x - r, y],\n ['L', x + r, y],\n ['M', x, y - r],\n ['L', x, y + r],\n ];\n};\nplus.style = ['stroke', 'lineWidth'];\nconst hyphen = (x, y, r) => {\n return [\n ['M', x - r, y],\n ['L', x + r, y],\n ];\n};\nhyphen.style = ['stroke', 'lineWidth'];\nconst dot = (x, y, r) => {\n return [\n ['M', x - r, y],\n ['L', x + r, y],\n ];\n};\ndot.style = ['stroke', 'lineWidth'];\nconst dash = dot.bind(undefined);\ndash.style = ['stroke', 'lineWidth'];\nconst smooth = (x, y, r) => {\n return [\n ['M', x - r, y],\n ['A', r / 2, r / 2, 0, 1, 1, x, y],\n ['A', r / 2, r / 2, 0, 1, 0, x + r, y],\n ];\n};\nsmooth.style = ['stroke', 'lineWidth'];\nconst hv = (x, y, r) => {\n return [\n ['M', x - r - 1, y - 2.5],\n ['L', x, y - 2.5],\n ['L', x, y + 2.5],\n ['L', x + r + 1, y + 2.5],\n ];\n};\nhv.style = ['stroke', 'lineWidth'];\nconst vh = (x, y, r) => {\n return [\n ['M', x - r - 1, y + 2.5],\n ['L', x, y + 2.5],\n ['L', x, y - 2.5],\n ['L', x + r + 1, y - 2.5],\n ];\n};\nvh.style = ['stroke', 'lineWidth'];\nconst hvh = (x, y, r) => {\n return [\n ['M', x - (r + 1), y + 2.5],\n ['L', x - r / 2, y + 2.5],\n ['L', x - r / 2, y - 2.5],\n ['L', x + r / 2, y - 2.5],\n ['L', x + r / 2, y + 2.5],\n ['L', x + r + 1, y + 2.5],\n ];\n};\nhvh.style = ['stroke', 'lineWidth'];\nconst vhv = (x, y, r) => {\n return [\n ['M', x - 5, y + 2.5],\n ['L', x - 5, y],\n ['L', x, y],\n ['L', x, y - 3],\n ['L', x, y + 3],\n ['L', x + 6.5, y + 3],\n ];\n};\nvhv.style = ['stroke', 'lineWidth'];\nexport const Symbols = new Map([\n ['bowtie', bowtie],\n ['cross', cross],\n ['dash', dash],\n ['diamond', diamond],\n ['dot', dot],\n ['hexagon', hexagon],\n ['hollowBowtie', hollowBowtie],\n ['hollowDiamond', hollowDiamond],\n ['hollowHexagon', hollowHexagon],\n ['hollowPoint', hollowPoint],\n ['hollowSquare', hollowSquare],\n ['hollowTriangle', hollowTriangle],\n ['hollowTriangleDown', hollowTriangleDown],\n ['hv', hv],\n ['hvh', hvh],\n ['hyphen', hyphen],\n ['line', line],\n ['plus', plus],\n ['point', point],\n ['rect', rect],\n ['smooth', smooth],\n ['square', square],\n ['tick', tick],\n ['triangleDown', triangleDown],\n ['triangle', triangle],\n ['vh', vh],\n ['vhv', vhv],\n]);\nexport function useMarker(type, _a) {\n var { d, fill, lineWidth, path, stroke, color } = _a, style = __rest(_a, [\"d\", \"fill\", \"lineWidth\", \"path\", \"stroke\", \"color\"]);\n const symbol = Symbols.get(type) || Symbols.get('point');\n return (...args) => {\n const path = new Path({\n style: Object.assign(Object.assign({}, style), { d: symbol(...args), stroke: symbol.style.includes('stroke') ? color || stroke : '', fill: symbol.style.includes('fill') ? color || fill : '', lineWidth: symbol.style.includes('lineWidth')\n ? lineWidth || lineWidth || 2\n : 0 }),\n });\n return path;\n };\n}\nexport function registerSymbol(type, marker) {\n Symbols.set(type, marker);\n}\nexport function unregisterSymbol(type) {\n Symbols.delete(type);\n}\n//# sourceMappingURL=marker.js.map","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nmodule.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { createContext } from 'react';\nexport var ConfigContext = createContext({});\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport React, { forwardRef } from 'react';\nimport { BaseChart } from '../components/base';\nimport useConfig from '../hooks/useConfig';\nexport function makeChartComp(chartType) {\n var configKey = chartType.charAt(0).toLowerCase() + chartType.slice(1);\n return forwardRef(function (props, ref) {\n var config = useConfig();\n return React.createElement(BaseChart, __assign({}, config.common, config[configKey], props, { chartType: chartType, ref: ref }));\n });\n}\n","import { useContext } from 'react';\nimport { ConfigContext } from '../context';\nexport default function useConfig() {\n return useContext(ConfigContext);\n}\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"fieldProps\", \"proFieldProps\"];\nimport React from 'react';\nimport ProField from \"../Field\";\n\n/**\n * 文本选择组件\n *\n * @param\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar ProFormTextArea = function ProFormTextArea(_ref, ref) {\n var fieldProps = _ref.fieldProps,\n proFieldProps = _ref.proFieldProps,\n rest = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/_jsx(ProField, _objectSpread({\n ref: ref,\n valueType: \"textarea\",\n fieldProps: fieldProps,\n proFieldProps: proFieldProps\n }, rest));\n};\nexport default /*#__PURE__*/React.forwardRef(ProFormTextArea);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport WebMercatorViewport from 'viewport-mercator-project';\nexport default class Viewport {\n constructor() {\n _defineProperty(this, \"viewport\", new WebMercatorViewport());\n }\n syncWithMapCamera(mapCamera) {\n const {\n center,\n zoom,\n pitch,\n bearing,\n viewportHeight,\n viewportWidth\n } = mapCamera;\n const preView = {\n width: this.viewport.width,\n height: this.viewport.height,\n longitude: this.viewport.center[0],\n latitude: this.viewport.center[1],\n zoom: this.viewport.zoom,\n pitch: this.viewport.pitch,\n bearing: this.viewport.bearing\n };\n this.viewport = new WebMercatorViewport(_objectSpread(_objectSpread({}, preView), {}, {\n width: viewportWidth,\n height: viewportHeight,\n longitude: center && center[0],\n latitude: center && center[1],\n zoom,\n pitch,\n bearing\n }));\n }\n getZoom() {\n return this.viewport.zoom;\n }\n getZoomScale() {\n return Math.pow(2, this.getZoom());\n }\n getCenter() {\n return [this.viewport.longitude, this.viewport.latitude];\n }\n getProjectionMatrix() {\n return this.viewport.projectionMatrix;\n }\n getModelMatrix() {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n }\n getViewMatrix() {\n return this.viewport.viewMatrix;\n }\n getViewMatrixUncentered() {\n // @ts-ignore\n return this.viewport.viewMatrixUncentered;\n }\n getViewProjectionMatrix() {\n // @ts-ignore\n return this.viewport.viewProjectionMatrix;\n }\n getViewProjectionMatrixUncentered() {\n // @ts-ignore\n return this.viewport.viewProjectionMatrix;\n }\n getFocalDistance() {\n return 1;\n }\n projectFlat(lngLat, scale) {\n return this.viewport.projectFlat(lngLat, scale);\n }\n}","export * from './test';\nexport function getFactor() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var fn = function (str) { return (str === 'positive' ? -1 : 1); };\n return args.reduce(function (acc, cur) { return acc * fn(cur); }, 1);\n}\n//# sourceMappingURL=index.js.map","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","var arrayEach = require('./_arrayEach'),\n baseEach = require('./_baseEach'),\n castFunction = require('./_castFunction'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","var baseEach = require('./_baseEach'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nmodule.exports = baseMap;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","var isUndefined = function (value) {\n return value === undefined;\n};\nexport default isUndefined;\n//# sourceMappingURL=is-undefined.js.map","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"expandable\"];\nimport warning from \"rc-util/es/warning\";\nexport var INTERNAL_COL_DEFINE = 'RC_TABLE_INTERNAL_COL_DEFINE';\nexport function getExpandableProps(props) {\n var expandable = props.expandable,\n legacyExpandableConfig = _objectWithoutProperties(props, _excluded);\n var config;\n if ('expandable' in props) {\n config = _objectSpread(_objectSpread({}, legacyExpandableConfig), expandable);\n } else {\n if (process.env.NODE_ENV !== 'production' && ['indentSize', 'expandedRowKeys', 'defaultExpandedRowKeys', 'defaultExpandAllRows', 'expandedRowRender', 'expandRowByClick', 'expandIcon', 'onExpand', 'onExpandedRowsChange', 'expandedRowClassName', 'expandIconColumnIndex', 'showExpandColumn', 'title'].some(function (prop) {\n return prop in props;\n })) {\n warning(false, 'expanded related props have been moved into `expandable`.');\n }\n config = legacyExpandableConfig;\n }\n if (config.showExpandColumn === false) {\n config.expandIconColumnIndex = -1;\n }\n return config;\n}","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nvar _excluded = [\"label\", \"prefixCls\", \"onChange\", \"value\", \"mode\", \"children\", \"defaultValue\", \"size\", \"showSearch\", \"disabled\", \"style\", \"className\", \"bordered\", \"options\", \"onSearch\", \"allowClear\", \"labelInValue\", \"fieldNames\", \"lightLabel\", \"labelTrigger\", \"optionFilterProp\", \"optionLabelProp\", \"valueMaxLength\", \"fetchDataOnSearch\", \"fetchData\"];\nimport { SearchOutlined } from '@ant-design/icons';\nimport { FieldLabel, compatibleBorder, useStyle } from '@ant-design/pro-utils';\nimport { ConfigProvider, Input, Select } from 'antd';\nimport classNames from 'classnames';\nimport toArray from \"rc-util/es/Children/toArray\";\nimport React, { useContext, useMemo, useState } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * 如果有 label 就优先使用 label\n *\n * @param valueMap\n * @param v\n */\nvar getValueOrLabel = function getValueOrLabel(valueMap, v) {\n if (_typeof(v) !== 'object') {\n return valueMap[v] || v;\n }\n return valueMap[v === null || v === void 0 ? void 0 : v.value] || v.label;\n};\nvar LightSelect = function LightSelect(props, ref) {\n var label = props.label,\n customizePrefixCls = props.prefixCls,\n _onChange = props.onChange,\n value = props.value,\n mode = props.mode,\n children = props.children,\n defaultValue = props.defaultValue,\n size = props.size,\n showSearch = props.showSearch,\n disabled = props.disabled,\n style = props.style,\n className = props.className,\n bordered = props.bordered,\n options = props.options,\n onSearch = props.onSearch,\n allowClear = props.allowClear,\n labelInValue = props.labelInValue,\n fieldNames = props.fieldNames,\n lightLabel = props.lightLabel,\n labelTrigger = props.labelTrigger,\n optionFilterProp = props.optionFilterProp,\n _props$optionLabelPro = props.optionLabelProp,\n optionLabelProp = _props$optionLabelPro === void 0 ? '' : _props$optionLabelPro,\n _props$valueMaxLength = props.valueMaxLength,\n valueMaxLength = _props$valueMaxLength === void 0 ? 41 : _props$valueMaxLength,\n _props$fetchDataOnSea = props.fetchDataOnSearch,\n fetchDataOnSearch = _props$fetchDataOnSea === void 0 ? false : _props$fetchDataOnSea,\n fetchData = props.fetchData,\n restProps = _objectWithoutProperties(props, _excluded);\n var _props$placeholder = props.placeholder,\n placeholder = _props$placeholder === void 0 ? label : _props$placeholder;\n var _ref = fieldNames || {},\n _ref$label = _ref.label,\n labelPropsName = _ref$label === void 0 ? 'label' : _ref$label,\n _ref$value = _ref.value,\n valuePropsName = _ref$value === void 0 ? 'value' : _ref$value;\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var prefixCls = getPrefixCls('pro-field-select-light-select');\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n open = _useState2[0],\n setOpen = _useState2[1];\n var _useState3 = useState(''),\n _useState4 = _slicedToArray(_useState3, 2),\n keyword = _useState4[0],\n setKeyword = _useState4[1];\n\n // css\n var _useStyle = useStyle('LightSelect', function (token) {\n return _defineProperty({}, \".\".concat(prefixCls), _defineProperty(_defineProperty({}, \"\".concat(token.antCls, \"-select\"), {\n position: 'absolute',\n width: '153px',\n height: '28px',\n visibility: 'hidden',\n '&-selector': {\n height: 28\n }\n }), \"&.\".concat(prefixCls, \"-searchable\"), _defineProperty({}, \"\".concat(token.antCls, \"-select\"), {\n width: '200px',\n '&-selector': {\n height: 28\n }\n })));\n }),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n var valueMap = useMemo(function () {\n var values = {};\n options === null || options === void 0 || options.forEach(function (item) {\n var optionLabel = item[optionLabelProp] || item[labelPropsName];\n var optionValue = item[valuePropsName];\n values[optionValue] = optionLabel || optionValue;\n });\n return values;\n }, [labelPropsName, options, valuePropsName, optionLabelProp]);\n\n // 修复用户在使用ProFormSelect组件时,在fieldProps中使用open属性,不生效。\n // ProComponents文档中写到“与select相同,且fieldProps同antd组件中的props”描述方案不相符\n var mergeOpen = useMemo(function () {\n if (Reflect.has(restProps, 'open')) {\n return restProps === null || restProps === void 0 ? void 0 : restProps.open;\n }\n return open;\n }, [open, restProps]);\n var filterValue = Array.isArray(value) ? value.map(function (v) {\n return getValueOrLabel(valueMap, v);\n }) : getValueOrLabel(valueMap, value);\n return wrapSSR( /*#__PURE__*/_jsxs(\"div\", {\n className: classNames(prefixCls, hashId, _defineProperty({}, \"\".concat(prefixCls, \"-searchable\"), showSearch), \"\".concat(prefixCls, \"-container-\").concat(restProps.placement || 'bottomLeft'), className),\n style: style,\n onClick: function onClick(e) {\n var _lightLabel$current;\n if (disabled) return;\n // 点击label切换下拉菜单\n var isLabelClick = lightLabel === null || lightLabel === void 0 || (_lightLabel$current = lightLabel.current) === null || _lightLabel$current === void 0 || (_lightLabel$current = _lightLabel$current.labelRef) === null || _lightLabel$current === void 0 || (_lightLabel$current = _lightLabel$current.current) === null || _lightLabel$current === void 0 ? void 0 : _lightLabel$current.contains(e.target);\n if (isLabelClick) {\n setOpen(!open);\n } else {\n // 这里注释掉\n /**\n * 因为这里与代码\n * if (mode !== 'multiple') {\n * setOpen(false);\n * }\n * 冲突了,导致这段代码不生效\n */\n // setOpen(true);\n }\n },\n children: [/*#__PURE__*/_jsx(Select\n /**\n * popupMatchSelectWidth写死false会关闭虚拟滚动,数量量过大时,影响组件性能\n * 将此属性注释掉,变成灵活的动态配置\n */\n // popupMatchSelectWidth={false}\n , _objectSpread(_objectSpread(_objectSpread({}, restProps), {}, {\n allowClear: allowClear,\n value: value,\n mode: mode,\n labelInValue: labelInValue,\n size: size,\n disabled: disabled,\n onChange: function onChange(v, option) {\n _onChange === null || _onChange === void 0 || _onChange(v, option);\n if (mode !== 'multiple') {\n setOpen(false);\n }\n }\n }, compatibleBorder(bordered)), {}, {\n showSearch: showSearch,\n onSearch: showSearch ? function (keyValue) {\n if (fetchDataOnSearch && fetchData) {\n fetchData(keyValue);\n }\n onSearch === null || onSearch === void 0 || onSearch(keyValue);\n } : void 0,\n style: style,\n dropdownRender: function dropdownRender(menuNode) {\n return /*#__PURE__*/_jsxs(\"div\", {\n ref: ref,\n children: [showSearch && /*#__PURE__*/_jsx(\"div\", {\n style: {\n margin: '4px 8px'\n },\n children: /*#__PURE__*/_jsx(Input, {\n value: keyword,\n allowClear: !!allowClear,\n onChange: function onChange(e) {\n setKeyword(e.target.value);\n if (fetchDataOnSearch && fetchData) {\n fetchData(e.target.value);\n }\n onSearch === null || onSearch === void 0 || onSearch(e.target.value);\n },\n onKeyDown: function onKeyDown(e) {\n // 避免按下删除键把选项也删除了\n if (e.key === 'Backspace') {\n e.stopPropagation();\n return;\n }\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n }\n },\n style: {\n width: '100%'\n },\n prefix: /*#__PURE__*/_jsx(SearchOutlined, {})\n })\n }), menuNode]\n });\n },\n open: mergeOpen,\n onDropdownVisibleChange: function onDropdownVisibleChange(isOpen) {\n var _restProps$onDropdown;\n if (!isOpen) {\n // 测试环境下直接跑\n setKeyword('');\n }\n if (!labelTrigger) {\n setOpen(isOpen);\n }\n restProps === null || restProps === void 0 || (_restProps$onDropdown = restProps.onDropdownVisibleChange) === null || _restProps$onDropdown === void 0 || _restProps$onDropdown.call(restProps, isOpen);\n },\n prefixCls: customizePrefixCls,\n options: onSearch || !keyword ? options : options === null || options === void 0 ? void 0 : options.filter(function (o) {\n var _String, _o$valuePropsName;\n if (optionFilterProp) {\n return toArray(o[optionFilterProp]).join('').toLowerCase().includes(keyword);\n }\n return ((_String = String(o[labelPropsName])) === null || _String === void 0 || (_String = _String.toLowerCase()) === null || _String === void 0 ? void 0 : _String.includes(keyword === null || keyword === void 0 ? void 0 : keyword.toLowerCase())) || ((_o$valuePropsName = o[valuePropsName]) === null || _o$valuePropsName === void 0 || (_o$valuePropsName = _o$valuePropsName.toString()) === null || _o$valuePropsName === void 0 || (_o$valuePropsName = _o$valuePropsName.toLowerCase()) === null || _o$valuePropsName === void 0 ? void 0 : _o$valuePropsName.includes(keyword === null || keyword === void 0 ? void 0 : keyword.toLowerCase()));\n })\n })), /*#__PURE__*/_jsx(FieldLabel, {\n ellipsis: true,\n label: label,\n placeholder: placeholder,\n disabled: disabled,\n bordered: bordered,\n allowClear: !!allowClear,\n value: filterValue || (value === null || value === void 0 ? void 0 : value.label) || value,\n onClear: function onClear() {\n _onChange === null || _onChange === void 0 || _onChange(undefined, undefined);\n },\n ref: lightLabel,\n valueMaxLength: valueMaxLength\n })]\n }));\n};\nexport default /*#__PURE__*/React.forwardRef(LightSelect);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"optionItemRender\", \"mode\", \"onSearch\", \"onFocus\", \"onChange\", \"autoClearSearchValue\", \"searchOnFocus\", \"resetAfterSelect\", \"fetchDataOnSearch\", \"optionFilterProp\", \"optionLabelProp\", \"className\", \"disabled\", \"options\", \"fetchData\", \"resetData\", \"prefixCls\", \"onClear\", \"searchValue\", \"showSearch\", \"fieldNames\", \"defaultSearchValue\", \"preserveOriginalLabel\"],\n _excluded2 = [\"className\", \"optionType\"];\nimport { nanoid } from '@ant-design/pro-utils';\nimport { ConfigProvider, Select } from 'antd';\nimport classNames from 'classnames';\nimport React, { useContext, useEffect, useImperativeHandle, useRef, useState } from 'react';\n\n// 支持 key, value, label,兼容 UserSearch 中只填写了 key 的情况。\n\n/** 用户扩展数据后的值类型 */\n\n/** 可能单选,可能多选 */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar SearchSelect = function SearchSelect(props, ref) {\n var optionItemRender = props.optionItemRender,\n mode = props.mode,\n onSearch = props.onSearch,\n _onFocus = props.onFocus,\n _onChange = props.onChange,\n _props$autoClearSearc = props.autoClearSearchValue,\n autoClearSearchValue = _props$autoClearSearc === void 0 ? true : _props$autoClearSearc,\n _props$searchOnFocus = props.searchOnFocus,\n searchOnFocus = _props$searchOnFocus === void 0 ? false : _props$searchOnFocus,\n _props$resetAfterSele = props.resetAfterSelect,\n resetAfterSelect = _props$resetAfterSele === void 0 ? false : _props$resetAfterSele,\n _props$fetchDataOnSea = props.fetchDataOnSearch,\n fetchDataOnSearch = _props$fetchDataOnSea === void 0 ? true : _props$fetchDataOnSea,\n _props$optionFilterPr = props.optionFilterProp,\n optionFilterProp = _props$optionFilterPr === void 0 ? 'label' : _props$optionFilterPr,\n _props$optionLabelPro = props.optionLabelProp,\n optionLabelProp = _props$optionLabelPro === void 0 ? 'label' : _props$optionLabelPro,\n className = props.className,\n disabled = props.disabled,\n options = props.options,\n fetchData = props.fetchData,\n resetData = props.resetData,\n customizePrefixCls = props.prefixCls,\n _onClear = props.onClear,\n propsSearchValue = props.searchValue,\n showSearch = props.showSearch,\n fieldNames = props.fieldNames,\n defaultSearchValue = props.defaultSearchValue,\n _props$preserveOrigin = props.preserveOriginalLabel,\n preserveOriginalLabel = _props$preserveOrigin === void 0 ? false : _props$preserveOrigin,\n restProps = _objectWithoutProperties(props, _excluded);\n var _ref = fieldNames || {},\n _ref$label = _ref.label,\n labelPropsName = _ref$label === void 0 ? 'label' : _ref$label,\n _ref$value = _ref.value,\n valuePropsName = _ref$value === void 0 ? 'value' : _ref$value,\n _ref$options = _ref.options,\n optionsPropsName = _ref$options === void 0 ? 'options' : _ref$options;\n var _useState = useState(propsSearchValue !== null && propsSearchValue !== void 0 ? propsSearchValue : defaultSearchValue),\n _useState2 = _slicedToArray(_useState, 2),\n searchValue = _useState2[0],\n setSearchValue = _useState2[1];\n var selectRef = useRef();\n useImperativeHandle(ref, function () {\n return selectRef.current;\n });\n useEffect(function () {\n if (restProps.autoFocus) {\n var _selectRef$current;\n selectRef === null || selectRef === void 0 || (_selectRef$current = selectRef.current) === null || _selectRef$current === void 0 || _selectRef$current.focus();\n }\n }, [restProps.autoFocus]);\n useEffect(function () {\n setSearchValue(propsSearchValue);\n }, [propsSearchValue]);\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var prefixCls = getPrefixCls('pro-filed-search-select', customizePrefixCls);\n\n // 兼容 renderXXX API。\n\n var classString = classNames(prefixCls, className, _defineProperty({}, \"\".concat(prefixCls, \"-disabled\"), disabled));\n var getMergeValue = function getMergeValue(value, option) {\n if (Array.isArray(value) && Array.isArray(option) && value.length > 0) {\n // 多选情况且用户有选择\n return value.map(function (item, index) {\n var optionItem = option === null || option === void 0 ? void 0 : option[index];\n var dataItem = (optionItem === null || optionItem === void 0 ? void 0 : optionItem['data-item']) || {};\n return _objectSpread(_objectSpread(_objectSpread({}, dataItem), item), {}, {\n label: preserveOriginalLabel ? dataItem.label : item.label\n });\n });\n }\n return [];\n };\n var genOptions = function genOptions(mapOptions) {\n return mapOptions.map(function (item, index) {\n var _item$optionsPropsNam;\n var _ref2 = item,\n itemClassName = _ref2.className,\n optionType = _ref2.optionType,\n resetItem = _objectWithoutProperties(_ref2, _excluded2);\n var label = item[labelPropsName];\n var value = item[valuePropsName];\n var itemOptions = (_item$optionsPropsNam = item[optionsPropsName]) !== null && _item$optionsPropsNam !== void 0 ? _item$optionsPropsNam : [];\n if (optionType === 'optGroup' || item.options) {\n return _objectSpread(_objectSpread({\n label: label\n }, resetItem), {}, {\n data_title: label,\n title: label,\n key: value !== null && value !== void 0 ? value : \"\".concat(label === null || label === void 0 ? void 0 : label.toString(), \"-\").concat(index, \"-\").concat(nanoid()),\n // 防止因key相同导致虚拟滚动出问题\n children: genOptions(itemOptions)\n });\n }\n return _objectSpread(_objectSpread({\n title: label\n }, resetItem), {}, {\n data_title: label,\n value: value !== null && value !== void 0 ? value : index,\n key: value !== null && value !== void 0 ? value : \"\".concat(label === null || label === void 0 ? void 0 : label.toString(), \"-\").concat(index, \"-\").concat(nanoid()),\n 'data-item': item,\n className: \"\".concat(prefixCls, \"-option \").concat(itemClassName || '').trim(),\n label: (optionItemRender === null || optionItemRender === void 0 ? void 0 : optionItemRender(item)) || label\n });\n });\n };\n return /*#__PURE__*/_jsx(Select, _objectSpread(_objectSpread({\n ref: selectRef,\n className: classString,\n allowClear: true,\n autoClearSearchValue: autoClearSearchValue,\n disabled: disabled,\n mode: mode,\n showSearch: showSearch,\n searchValue: searchValue,\n optionFilterProp: optionFilterProp,\n optionLabelProp: optionLabelProp,\n onClear: function onClear() {\n _onClear === null || _onClear === void 0 || _onClear();\n fetchData(undefined);\n if (showSearch) {\n setSearchValue(undefined);\n }\n }\n }, restProps), {}, {\n filterOption: restProps.filterOption == false ? false : function (inputValue, option) {\n var _option$data_title, _option$label, _option$value;\n if (restProps.filterOption && typeof restProps.filterOption === 'function') {\n return restProps.filterOption(inputValue, _objectSpread(_objectSpread({}, option), {}, {\n label: option === null || option === void 0 ? void 0 : option.data_title\n }));\n }\n return !!(option !== null && option !== void 0 && (_option$data_title = option.data_title) !== null && _option$data_title !== void 0 && _option$data_title.toString().toLowerCase().includes(inputValue.toLowerCase()) || option !== null && option !== void 0 && (_option$label = option.label) !== null && _option$label !== void 0 && _option$label.toString().toLowerCase().includes(inputValue.toLowerCase()) || option !== null && option !== void 0 && (_option$value = option.value) !== null && _option$value !== void 0 && _option$value.toString().toLowerCase().includes(inputValue.toLowerCase()));\n } // 这里使用pro-components的过滤逻辑\n ,\n onSearch: showSearch ? function (value) {\n if (fetchDataOnSearch) {\n fetchData(value);\n }\n onSearch === null || onSearch === void 0 || onSearch(value);\n setSearchValue(value);\n } : undefined,\n onChange: function onChange(value, optionList) {\n // 将搜索框置空 和 antd 行为保持一致\n if (showSearch && autoClearSearchValue) {\n fetchData(undefined);\n onSearch === null || onSearch === void 0 || onSearch('');\n setSearchValue(undefined);\n }\n for (var _len = arguments.length, rest = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n rest[_key - 2] = arguments[_key];\n }\n if (!props.labelInValue) {\n _onChange === null || _onChange === void 0 || _onChange.apply(void 0, [value, optionList].concat(rest));\n return;\n }\n if (mode !== 'multiple' && !Array.isArray(optionList)) {\n // 单选情况且用户选择了选项\n var dataItem = optionList && optionList['data-item'];\n // 如果value值为空则是清空时产生的回调,直接传值就可以了\n if (!value || !dataItem) {\n var changedValue = value ? _objectSpread(_objectSpread({}, value), {}, {\n // 这里有一种情况,如果用户使用了 request和labelInValue,保存之后,刷新页面,正常回显,但是再次添加会出现 label 丢失的情况。所以需要兼容\n label: preserveOriginalLabel ? (dataItem === null || dataItem === void 0 ? void 0 : dataItem.label) || value.label : value.label\n }) : value;\n _onChange === null || _onChange === void 0 || _onChange.apply(void 0, [changedValue, optionList].concat(rest));\n } else {\n _onChange === null || _onChange === void 0 || _onChange.apply(void 0, [_objectSpread(_objectSpread(_objectSpread({}, value), dataItem), {}, {\n label: preserveOriginalLabel ? dataItem.label : value.label\n }), optionList].concat(rest));\n }\n return;\n }\n // 合并值\n var mergeValue = getMergeValue(value, optionList);\n _onChange === null || _onChange === void 0 || _onChange.apply(void 0, [mergeValue, optionList].concat(rest));\n\n // 将搜索结果置空,重新搜索\n if (resetAfterSelect) resetData();\n },\n onFocus: function onFocus(e) {\n if (searchOnFocus) {\n fetchData(searchValue);\n }\n _onFocus === null || _onFocus === void 0 || _onFocus(e);\n },\n options: genOptions(options || [])\n }));\n};\nexport default /*#__PURE__*/React.forwardRef(SearchSelect);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar _excluded = [\"value\", \"text\"],\n _excluded2 = [\"mode\", \"valueEnum\", \"render\", \"renderFormItem\", \"request\", \"fieldProps\", \"plain\", \"children\", \"light\", \"proFieldKey\", \"params\", \"label\", \"bordered\", \"id\", \"lightLabel\", \"labelTrigger\"];\nimport { useIntl } from '@ant-design/pro-provider';\nimport { compatibleBorder, nanoid, objectToMap, proFieldParsingText, useDebounceValue, useDeepCompareEffect, useDeepCompareMemo, useMountMergeState, useRefFunction, useStyle } from '@ant-design/pro-utils';\nimport { ConfigProvider, Spin } from 'antd';\nimport React, { useContext, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport useSWR from 'swr';\nimport LightSelect from \"./LightSelect\";\nimport SearchSelect from \"./SearchSelect\";\n\n// 兼容代码-----------\nimport \"antd/es/select/style\";\n//------------\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar Highlight = function Highlight(_ref) {\n var label = _ref.label,\n words = _ref.words;\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var lightCls = getPrefixCls('pro-select-item-option-content-light');\n var optionCls = getPrefixCls('pro-select-item-option-content');\n\n // css\n var _useStyle = useStyle('Highlight', function (token) {\n return _defineProperty(_defineProperty({}, \".\".concat(lightCls), {\n color: token.colorPrimary\n }), \".\".concat(optionCls), {\n flex: 'auto',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n });\n }),\n wrapSSR = _useStyle.wrapSSR;\n var matchKeywordsRE = new RegExp(words.map(function (word) {\n return word.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&');\n }).join('|'), 'gi');\n var matchText = label;\n var elements = [];\n while (matchText.length) {\n var match = matchKeywordsRE.exec(matchText);\n if (!match) {\n elements.push(matchText);\n break;\n }\n var start = match.index;\n var matchLength = match[0].length + start;\n elements.push(matchText.slice(0, start), /*#__PURE__*/React.createElement('span', {\n className: lightCls\n }, matchText.slice(start, matchLength)));\n matchText = matchText.slice(matchLength);\n }\n return wrapSSR( /*#__PURE__*/React.createElement.apply(React, ['div', {\n title: label,\n className: optionCls\n }].concat(elements)));\n};\n\n/**\n * 递归筛选 item\n *\n * @param item\n * @param keyWords\n * @returns\n */\nfunction filerByItem(item, keyWords) {\n var _item$label, _item$value;\n if (!keyWords) return true;\n if (item !== null && item !== void 0 && (_item$label = item.label) !== null && _item$label !== void 0 && _item$label.toString().toLowerCase().includes(keyWords.toLowerCase()) || item !== null && item !== void 0 && (_item$value = item.value) !== null && _item$value !== void 0 && _item$value.toString().toLowerCase().includes(keyWords.toLowerCase())) {\n return true;\n }\n if (item.children || item.options) {\n var findItem = [].concat(_toConsumableArray(item.children || []), [item.options || []]).find(function (mapItem) {\n return filerByItem(mapItem, keyWords);\n });\n if (findItem) return true;\n }\n return false;\n}\n\n/**\n * 把 value 的枚举转化为数组\n *\n * @param valueEnum\n */\nexport var proFieldParsingValueEnumToArray = function proFieldParsingValueEnumToArray(valueEnumParams) {\n var enumArray = [];\n var valueEnum = objectToMap(valueEnumParams);\n valueEnum.forEach(function (_, key) {\n var value = valueEnum.get(key) || valueEnum.get(\"\".concat(key));\n if (!value) {\n return;\n }\n if (_typeof(value) === 'object' && value !== null && value !== void 0 && value.text) {\n enumArray.push({\n text: value === null || value === void 0 ? void 0 : value.text,\n value: key,\n label: value === null || value === void 0 ? void 0 : value.text,\n disabled: value.disabled\n });\n return;\n }\n enumArray.push({\n text: value,\n value: key\n });\n });\n return enumArray;\n};\nexport var useFieldFetchData = function useFieldFetchData(props) {\n var _ref5, _props$debounceTime, _props$fieldProps3, _props$fieldProps6;\n var cacheForSwr = props.cacheForSwr,\n fieldProps = props.fieldProps;\n var _useState = useState(props.defaultKeyWords),\n _useState2 = _slicedToArray(_useState, 2),\n keyWords = _useState2[0],\n setKeyWords = _useState2[1];\n /** Key 是用来缓存请求的,如果不在是有问题 */\n var _useState3 = useState(function () {\n if (props.proFieldKey) {\n return props.proFieldKey.toString();\n }\n if (props.request) {\n return nanoid();\n }\n return 'no-fetch';\n }),\n _useState4 = _slicedToArray(_useState3, 1),\n cacheKey = _useState4[0];\n var proFieldKeyRef = useRef(cacheKey);\n var getOptionsFormValueEnum = useRefFunction(function (coverValueEnum) {\n return proFieldParsingValueEnumToArray(objectToMap(coverValueEnum)).map(function (_ref3) {\n var value = _ref3.value,\n text = _ref3.text,\n rest = _objectWithoutProperties(_ref3, _excluded);\n return _objectSpread({\n label: text,\n value: value,\n key: value\n }, rest);\n });\n });\n var defaultOptions = useDeepCompareMemo(function () {\n if (!fieldProps) return undefined;\n var data = (fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.options) || (fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.treeData);\n if (!data) return undefined;\n var _ref4 = fieldProps.fieldNames || {},\n children = _ref4.children,\n label = _ref4.label,\n value = _ref4.value;\n var traverseFieldKey = function traverseFieldKey(_options, type) {\n if (!(_options !== null && _options !== void 0 && _options.length)) return;\n var length = _options.length;\n var i = 0;\n while (i < length) {\n var cur = _options[i++];\n if (cur[children] || cur[label] || cur[value]) {\n cur[type] = cur[type === 'children' ? children : type === 'label' ? label : value];\n traverseFieldKey(cur[children], type);\n }\n }\n };\n if (children) traverseFieldKey(data, 'children');\n if (label) traverseFieldKey(data, 'label');\n if (value) traverseFieldKey(data, 'value');\n return data;\n }, [fieldProps]);\n var _useMountMergeState = useMountMergeState(function () {\n if (props.valueEnum) {\n return getOptionsFormValueEnum(props.valueEnum);\n }\n return [];\n }, {\n value: defaultOptions\n }),\n _useMountMergeState2 = _slicedToArray(_useMountMergeState, 2),\n options = _useMountMergeState2[0],\n setOptions = _useMountMergeState2[1];\n useDeepCompareEffect(function () {\n var _props$fieldProps, _props$fieldProps2;\n // 优先使用 fieldProps?.options\n if (!props.valueEnum || (_props$fieldProps = props.fieldProps) !== null && _props$fieldProps !== void 0 && _props$fieldProps.options || (_props$fieldProps2 = props.fieldProps) !== null && _props$fieldProps2 !== void 0 && _props$fieldProps2.treeData) return;\n setOptions(getOptionsFormValueEnum(props.valueEnum));\n }, [props.valueEnum]);\n var swrKey = useDebounceValue([proFieldKeyRef.current, props.params, keyWords], (_ref5 = (_props$debounceTime = props.debounceTime) !== null && _props$debounceTime !== void 0 ? _props$debounceTime : props === null || props === void 0 || (_props$fieldProps3 = props.fieldProps) === null || _props$fieldProps3 === void 0 ? void 0 : _props$fieldProps3.debounceTime) !== null && _ref5 !== void 0 ? _ref5 : 0, [props.params, keyWords]);\n var _useSWR = useSWR(function () {\n if (!props.request) {\n return null;\n }\n return swrKey;\n }, function (_ref6) {\n var _ref7 = _slicedToArray(_ref6, 3),\n params = _ref7[1],\n kw = _ref7[2];\n return props.request(_objectSpread(_objectSpread({}, params), {}, {\n keyWords: kw\n }), props);\n }, {\n revalidateIfStale: !cacheForSwr,\n // 打开 cacheForSwr 的时候才应该支持两个功能\n revalidateOnReconnect: cacheForSwr,\n shouldRetryOnError: false,\n // @todo 这个功能感觉应该搞个API出来\n revalidateOnFocus: false\n }),\n data = _useSWR.data,\n setLocaleData = _useSWR.mutate,\n isValidating = _useSWR.isValidating;\n var resOptions = useMemo(function () {\n var _props$fieldProps4, _props$fieldProps5;\n var opt = options === null || options === void 0 ? void 0 : options.map(function (item) {\n if (typeof item === 'string') {\n return {\n label: item,\n value: item\n };\n }\n if (item.children || item.options) {\n var childrenOptions = [].concat(_toConsumableArray(item.children || []), _toConsumableArray(item.options || [])).filter(function (mapItem) {\n return filerByItem(mapItem, keyWords);\n });\n return _objectSpread(_objectSpread({}, item), {}, {\n children: childrenOptions,\n options: childrenOptions\n });\n }\n return item;\n });\n\n // filterOption 为 true 时 filter数据, filterOption 默认为true\n if (((_props$fieldProps4 = props.fieldProps) === null || _props$fieldProps4 === void 0 ? void 0 : _props$fieldProps4.filterOption) === true || ((_props$fieldProps5 = props.fieldProps) === null || _props$fieldProps5 === void 0 ? void 0 : _props$fieldProps5.filterOption) === undefined) {\n return opt === null || opt === void 0 ? void 0 : opt.filter(function (item) {\n if (!item) return false;\n if (!keyWords) return true;\n return filerByItem(item, keyWords);\n });\n }\n return opt;\n }, [options, keyWords, (_props$fieldProps6 = props.fieldProps) === null || _props$fieldProps6 === void 0 ? void 0 : _props$fieldProps6.filterOption]);\n return [isValidating, props.request ? data : resOptions, function (fetchKeyWords) {\n setKeyWords(fetchKeyWords);\n }, function () {\n setKeyWords(undefined);\n setLocaleData([], false);\n }];\n};\n\n/**\n * 可以根据 valueEnum 来进行类型的设置\n *\n * @param\n */\nvar FieldSelect = function FieldSelect(props, ref) {\n var _ConfigProvider$useCo;\n var mode = props.mode,\n valueEnum = props.valueEnum,\n render = props.render,\n renderFormItem = props.renderFormItem,\n request = props.request,\n fieldProps = props.fieldProps,\n plain = props.plain,\n children = props.children,\n light = props.light,\n proFieldKey = props.proFieldKey,\n params = props.params,\n label = props.label,\n bordered = props.bordered,\n id = props.id,\n lightLabel = props.lightLabel,\n labelTrigger = props.labelTrigger,\n rest = _objectWithoutProperties(props, _excluded2);\n var inputRef = useRef();\n var intl = useIntl();\n var keyWordsRef = useRef('');\n var fieldNames = fieldProps.fieldNames;\n useEffect(function () {\n keyWordsRef.current = fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.searchValue;\n }, [fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.searchValue]);\n var _useFieldFetchData = useFieldFetchData(props),\n _useFieldFetchData2 = _slicedToArray(_useFieldFetchData, 4),\n loading = _useFieldFetchData2[0],\n options = _useFieldFetchData2[1],\n _fetchData = _useFieldFetchData2[2],\n resetData = _useFieldFetchData2[3];\n var _ref8 = (ConfigProvider === null || ConfigProvider === void 0 || (_ConfigProvider$useCo = ConfigProvider.useConfig) === null || _ConfigProvider$useCo === void 0 ? void 0 : _ConfigProvider$useCo.call(ConfigProvider)) || {\n componentSize: 'middle'\n },\n componentSize = _ref8.componentSize;\n useImperativeHandle(ref, function () {\n return _objectSpread(_objectSpread({}, inputRef.current || {}), {}, {\n fetchData: function fetchData(keyWord) {\n return _fetchData(keyWord);\n }\n });\n }, [_fetchData]);\n var optionsValueEnum = useMemo(function () {\n if (mode !== 'read') return;\n var _ref9 = fieldNames || {},\n _ref9$label = _ref9.label,\n labelPropsName = _ref9$label === void 0 ? 'label' : _ref9$label,\n _ref9$value = _ref9.value,\n valuePropsName = _ref9$value === void 0 ? 'value' : _ref9$value,\n _ref9$options = _ref9.options,\n optionsPropsName = _ref9$options === void 0 ? 'options' : _ref9$options;\n var valuesMap = new Map();\n var traverseOptions = function traverseOptions(_options) {\n if (!(_options !== null && _options !== void 0 && _options.length)) {\n return valuesMap;\n }\n var length = _options.length;\n var i = 0;\n while (i < length) {\n var cur = _options[i++];\n valuesMap.set(cur[valuePropsName], cur[labelPropsName]);\n traverseOptions(cur[optionsPropsName]);\n }\n return valuesMap;\n };\n return traverseOptions(options);\n }, [fieldNames, mode, options]);\n if (mode === 'read') {\n var dom = /*#__PURE__*/_jsx(_Fragment, {\n children: proFieldParsingText(rest.text, objectToMap(valueEnum || optionsValueEnum))\n });\n if (render) {\n var _render;\n return (_render = render(dom, _objectSpread(_objectSpread({\n mode: mode\n }, fieldProps), {}, {\n options: options\n }), dom)) !== null && _render !== void 0 ? _render : null;\n }\n return dom;\n }\n if (mode === 'edit' || mode === 'update') {\n var renderDom = function renderDom() {\n if (light) {\n return /*#__PURE__*/_jsx(LightSelect, _objectSpread(_objectSpread({}, compatibleBorder(bordered)), {}, {\n id: id,\n loading: loading,\n ref: inputRef,\n allowClear: true,\n size: componentSize,\n options: options,\n label: label,\n placeholder: intl.getMessage('tableForm.selectPlaceholder', '请选择'),\n lightLabel: lightLabel,\n labelTrigger: labelTrigger,\n fetchData: _fetchData\n }, fieldProps));\n }\n return /*#__PURE__*/_jsx(SearchSelect, _objectSpread(_objectSpread(_objectSpread({\n className: rest.className,\n style: _objectSpread({\n minWidth: 100\n }, rest.style)\n }, compatibleBorder(bordered)), {}, {\n id: id,\n loading: loading,\n ref: inputRef,\n allowClear: true,\n defaultSearchValue: props.defaultKeyWords,\n notFoundContent: loading ? /*#__PURE__*/_jsx(Spin, {\n size: \"small\"\n }) : fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.notFoundContent,\n fetchData: function fetchData(keyWord) {\n keyWordsRef.current = keyWord !== null && keyWord !== void 0 ? keyWord : '';\n _fetchData(keyWord);\n },\n resetData: resetData,\n preserveOriginalLabel: true,\n optionItemRender: function optionItemRender(item) {\n if (typeof item.label === 'string' && keyWordsRef.current) {\n return /*#__PURE__*/_jsx(Highlight, {\n label: item.label,\n words: [keyWordsRef.current]\n });\n }\n return item.label;\n },\n placeholder: intl.getMessage('tableForm.selectPlaceholder', '请选择'),\n label: label\n }, fieldProps), {}, {\n options: options\n }), \"SearchSelect\");\n };\n var _dom = renderDom();\n if (renderFormItem) {\n var _renderFormItem;\n return (_renderFormItem = renderFormItem(rest.text, _objectSpread(_objectSpread({\n mode: mode\n }, fieldProps), {}, {\n options: options,\n loading: loading\n }), _dom)) !== null && _renderFormItem !== void 0 ? _renderFormItem : null;\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldSelect);","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseMerge = require('./_baseMerge'),\n createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\nvar mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n});\n\nmodule.exports = mergeWith;\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n// lodashUtil\nimport { lodashUtil } from '@antv/l7-utils';\n/* babel-plugin-inline-import '../../../shaders/post-processing/quad.glsl' */\nconst quad = \"attribute vec2 a_Position;\\n\\nvarying vec2 v_UV;\\n\\nvoid main() {\\n v_UV = 0.5 * (a_Position + 1.0);\\n gl_Position = vec4(a_Position, 0., 1.);\\n}\";\nimport { PassType } from \"../IMultiPassRenderer\";\nimport { gl } from \"../gl\";\nconst {\n camelCase,\n isNil,\n upperFirst\n} = lodashUtil;\n\n/**\n * 后处理 Pass 基类,通过 PostProcessor 驱动。\n *\n * 约定使用 u_Texture 传递渲染纹理。\n */\nexport default class BasePostProcessingPass {\n constructor() {\n _defineProperty(this, \"shaderModuleService\", void 0);\n _defineProperty(this, \"rendererService\", void 0);\n _defineProperty(this, \"config\", void 0);\n _defineProperty(this, \"quad\", quad);\n /**\n * 启用开关\n */\n _defineProperty(this, \"enabled\", true);\n /**\n * 是否渲染到屏幕\n */\n _defineProperty(this, \"renderToScreen\", false);\n /**\n * 渲染命令\n */\n _defineProperty(this, \"model\", void 0);\n /**\n * 效果名,便于在图层中引用\n */\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"optionsToUpdate\", {});\n }\n getName() {\n return this.name;\n }\n setName(name) {\n this.name = name;\n }\n getType() {\n return PassType.PostProcessing;\n }\n init(layer, config) {\n this.config = config;\n this.rendererService = layer.getContainer().rendererService;\n this.shaderModuleService = layer.getContainer().shaderModuleService;\n const {\n createAttribute,\n createBuffer,\n createModel\n } = this.rendererService;\n const {\n vs,\n fs,\n uniforms\n } = this.setupShaders();\n this.model = createModel({\n vs,\n fs,\n attributes: {\n // 使用一个全屏三角形,相比 Quad 顶点数目更少\n a_Position: createAttribute({\n buffer: createBuffer({\n data: [-4, -4, 4, -4, 0, 4],\n type: gl.FLOAT\n }),\n size: 2\n })\n },\n // @ts-ignore\n uniforms: _objectSpread(_objectSpread({\n // @ts-ignore\n u_Texture: null\n }, uniforms), this.config && this.convertOptionsToUniforms(this.config)),\n depth: {\n enable: false\n },\n count: 3,\n blend: {\n // copy pass 需要混合\n enable: this.getName() === 'copy'\n }\n });\n }\n render(layer, tex) {\n const postProcessor = layer.multiPassRenderer.getPostProcessor();\n const {\n useFramebuffer,\n getViewportSize,\n clear\n } = this.rendererService;\n const {\n width,\n height\n } = getViewportSize();\n useFramebuffer(this.renderToScreen ? null : postProcessor.getWriteFBO(), () => {\n clear({\n framebuffer: postProcessor.getWriteFBO(),\n color: [0, 0, 0, 0],\n depth: 1,\n stencil: 0\n });\n const uniformOptions = _objectSpread({\n u_BloomFinal: 0.0,\n u_Texture: postProcessor.getReadFBO(),\n // u_Texture: tex ? tex : postProcessor.getReadFBO(),\n u_ViewportSize: [width, height]\n }, this.convertOptionsToUniforms(this.optionsToUpdate));\n if (tex) {\n uniformOptions.u_BloomFinal = 1.0;\n uniformOptions.u_Texture2 = tex;\n }\n this.model.draw({\n uniforms: uniformOptions\n });\n });\n }\n isEnabled() {\n return this.enabled;\n }\n setEnabled(enabled) {\n this.enabled = enabled;\n }\n setRenderToScreen(renderToScreen) {\n this.renderToScreen = renderToScreen;\n }\n updateOptions(config) {\n this.optionsToUpdate = _objectSpread(_objectSpread({}, this.optionsToUpdate), config);\n }\n setupShaders() {\n throw new Error('Method not implemented.');\n }\n convertOptionsToUniforms(options) {\n const uniforms = {};\n Object.keys(options).forEach(optionName => {\n // @ts-ignore\n if (!isNil(options[optionName])) {\n uniforms[`u_${upperFirst(camelCase(optionName))}`] =\n // @ts-ignore\n options[optionName];\n }\n });\n return uniforms;\n }\n}","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport { fp64LowPart, rgb2arr } from '@antv/l7-utils';\nimport BaseModel from \"../../core/BaseModel\";\nimport { LineArcTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/arc/line_arc_frag.glsl' */\nconst arc_line_frag = \"\\n#define Animate 0.0\\n#define LineTexture 1.0\\nuniform sampler2D u_texture;\\nlayout(std140) uniform commonUniorm {\\n vec4 u_animate: [ 1., 2., 1.0, 0.2 ];\\n vec4 u_dash_array;\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n vec2 u_textSize;\\n float segmentNumber;\\n float u_lineDir: 1.0;\\n float u_icon_step: 100;\\n float u_line_texture: 0.0;\\n float u_textureBlend;\\n float u_blur : 0.9;\\n float u_line_type: 0.0;\\n float u_time;\\n float u_linearColor: 0.0;\\n};\\n\\nin vec4 v_color;\\nin vec2 v_iconMapUV;\\nin vec4 v_lineData;\\n//dash\\nin vec4 v_dash_array;\\nin float v_distance_ratio;\\n\\nout vec4 outputColor;\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n if(u_dash_array!=vec4(0.0)){\\n float dashLength = mod(v_distance_ratio, v_dash_array.x + v_dash_array.y + v_dash_array.z + v_dash_array.w);\\n if(!(dashLength < v_dash_array.x || (dashLength > (v_dash_array.x + v_dash_array.y) && dashLength < v_dash_array.x + v_dash_array.y + v_dash_array.z))) {\\n discard;\\n };\\n }\\n float animateSpeed = 0.0; // \\u8FD0\\u52A8\\u901F\\u5EA6\\n outputColor = v_color;\\n if(u_animate.x == Animate && u_line_texture != LineTexture) {\\n animateSpeed = u_time / u_animate.y;\\n float alpha =1.0 - fract( mod(1.0- v_lineData.b, u_animate.z)* (1.0/ u_animate.z) + u_time / u_animate.y);\\n alpha = (alpha + u_animate.w -1.0) / u_animate.w;\\n // alpha = smoothstep(0., 1., alpha);\\n alpha = clamp(alpha, 0.0, 1.0);\\n outputColor.a *= alpha;\\n }\\n\\n // \\u5F53\\u5B58\\u5728\\u8D34\\u56FE\\u65F6\\u5728\\u5E95\\u8272\\u4E0A\\u8D34\\u4E0A\\u8D34\\u56FE\\n if(u_line_texture == LineTexture) { // while load texture\\n float arcRadio = smoothstep( 0.0, 1.0, (v_lineData.r / segmentNumber));\\n // float arcRadio = smoothstep( 0.0, 1.0, d_distance_ratio);\\n\\n float count = v_lineData.g; // \\u8D34\\u56FE\\u5728\\u5F27\\u7EBF\\u4E0A\\u91CD\\u590D\\u7684\\u6570\\u91CF\\n\\n float time = 0.0;\\n if(u_animate.x == Animate) {\\n time = u_time / u_animate.y;\\n }\\n float redioCount = arcRadio * count;\\n\\n float u = fract(redioCount - time);\\n float v = v_lineData.a; // \\u6A2A\\u5411 v\\n vec2 uv= v_iconMapUV / u_textSize + vec2(u, v) / u_textSize * 64.;\\n\\n vec4 pattern = texture(SAMPLER_2D(u_texture), uv);\\n\\n if(u_animate.x == Animate) {\\n float currentPlane = floor(redioCount - time);\\n float textureStep = floor(count * u_animate.z);\\n float a = mod(currentPlane, textureStep);\\n if(a < textureStep - 1.0) {\\n pattern = vec4(0.0);\\n }\\n }\\n\\n if(u_textureBlend == 0.0) { // normal\\n pattern.a = 0.0;\\n outputColor = filterColor(outputColor + pattern);\\n } else { // replace\\n pattern.a *= v_color.a;\\n if(outputColor.a <= 0.0) {\\n pattern.a = 0.0;\\n }\\n outputColor = filterColor(pattern);\\n }\\n \\n } else {\\n outputColor = filterColor(outputColor);\\n }\\n}\";\n/* babel-plugin-inline-import '../shaders/arc/line_arc_vert.glsl' */\nconst arc_line_vert = \"#define Animate (0.0)\\n#define LineTexture (1.0)\\n\\nlayout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_INSTANCE) in vec4 a_Instance;\\nlayout(location = ATTRIBUTE_LOCATION_INSTANCE_64LOW) in vec4 a_Instance64Low;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_iconMapUV;\\n\\nlayout(std140) uniform commonUniorm {\\n vec4 u_animate: [ 1., 2., 1.0, 0.2 ];\\n vec4 u_dash_array;\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n vec2 u_textSize;\\n float segmentNumber;\\n float u_lineDir: 1.0;\\n float u_icon_step: 100;\\n float u_line_texture: 0.0;\\n float u_textureBlend;\\n float u_blur : 0.9;\\n float u_line_type: 0.0;\\n float u_time;\\n float u_linearColor: 0.0;\\n};\\n\\nout vec4 v_color;\\nout vec2 v_iconMapUV;\\nout vec4 v_lineData;\\n//dash\\nout vec4 v_dash_array;\\nout float v_distance_ratio;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"project\\\"\\n#pragma include \\\"picking\\\"\\n\\nfloat bezier3(vec3 arr, float t) {\\n float ut = 1.0 - t;\\n return (arr.x * ut + arr.y * t) * ut + (arr.y * ut + arr.z * t) * t;\\n}\\nvec2 midPoint(vec2 source, vec2 target, float arcThetaOffset) {\\n vec2 center = target - source;\\n float r = length(center);\\n float theta = atan(center.y, center.x);\\n float thetaOffset = arcThetaOffset;\\n float r2 = r / 2.0 / cos(thetaOffset);\\n float theta2 = theta + thetaOffset;\\n vec2 mid = vec2(r2 * cos(theta2) + source.x, r2 * sin(theta2) + source.y);\\n if (u_lineDir == 1.0) {\\n // \\u6B63\\u5411\\n return mid;\\n } else {\\n // \\u9006\\u5411\\n // (mid + vmin)/2 = (s + t)/2\\n vec2 vmid = source + target - mid;\\n return vmid;\\n }\\n // return mid;\\n}\\nfloat getSegmentRatio(float index) {\\n // dash: index / (segmentNumber - 1.);\\n // normal: smoothstep(0.0, 1.0, index / (segmentNumber - 1.));\\n return smoothstep(0.0, 1.0, index / (segmentNumber - 1.0));\\n // return index / (segmentNumber - 1.);\\n}\\nvec2 interpolate(vec2 source, vec2 target, float t, float arcThetaOffset) {\\n // if the angularDist is PI, linear interpolation is applied. otherwise, use spherical interpolation\\n vec2 mid = midPoint(source, target, arcThetaOffset);\\n vec3 x = vec3(source.x, mid.x, target.x);\\n vec3 y = vec3(source.y, mid.y, target.y);\\n return vec2(bezier3(x, t), bezier3(y, t));\\n}\\nvec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction) {\\n // normalized direction of the line\\n vec2 dir_screenspace = normalize(line_clipspace);\\n // rotate by 90 degrees\\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\\n vec2 offset = dir_screenspace * offset_direction * setPickingSize(a_Size) / 2.0;\\n return offset;\\n}\\nvec2 getNormal(vec2 line_clipspace, float offset_direction) {\\n // normalized direction of the line\\n vec2 dir_screenspace = normalize(line_clipspace);\\n // rotate by 90 degrees\\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\\n return dir_screenspace.xy * sign(offset_direction);\\n}\\n\\nvoid main() {\\n //vs\\u4E2D\\u8BA1\\u7B97\\u6E10\\u53D8\\u8272\\n if (u_linearColor == 1.0) {\\n float d_segmentIndex = a_Position.x + 1.0; // \\u5F53\\u524D\\u9876\\u70B9\\u5728\\u5F27\\u7EBF\\u4E2D\\u6240\\u5904\\u7684\\u5206\\u6BB5\\u4F4D\\u7F6E\\n v_color = mix(u_sourceColor, u_targetColor, d_segmentIndex / segmentNumber);\\n } else {\\n v_color = a_Color;\\n }\\n v_color.a = v_color.a * opacity;\\n\\n vec2 source_world = a_Instance.rg; // \\u8D77\\u59CB\\u70B9\\n vec2 target_world = a_Instance.ba; // \\u7EC8\\u70B9\\n\\n float segmentIndex = a_Position.x;\\n float segmentRatio = getSegmentRatio(segmentIndex);\\n\\n // \\u8BA1\\u7B97 dashArray \\u548C distanceRatio \\u8F93\\u51FA\\u5230\\u7247\\u5143\\n float total_Distance = pixelDistance(source_world, target_world) / 2.0 * PI;\\n v_dash_array = pow(2.0, 20.0 - u_Zoom) * u_dash_array / total_Distance;\\n v_distance_ratio = segmentIndex / segmentNumber;\\n\\n float indexDir = mix(-1.0, 1.0, step(segmentIndex, 0.0));\\n float nextSegmentRatio = getSegmentRatio(segmentIndex + indexDir);\\n float d_distance_ratio;\\n\\n if(u_animate.x == Animate) {\\n d_distance_ratio = segmentIndex / segmentNumber;\\n if(u_lineDir != 1.0) {\\n d_distance_ratio = 1.0 - d_distance_ratio;\\n }\\n }\\n\\n v_lineData.b = d_distance_ratio;\\n\\n vec4 source = project_position(vec4(source_world, 0, 1.), a_Instance64Low.xy);\\n vec4 target = project_position(vec4(target_world, 0, 1.), a_Instance64Low.zw);\\n\\n vec2 currPos = interpolate(source.xy, target.xy, segmentRatio, thetaOffset);\\n vec2 nextPos = interpolate(source.xy, target.xy, nextSegmentRatio, thetaOffset);\\n\\n vec2 offset = project_pixel(\\n getExtrusionOffset((nextPos.xy - currPos.xy) * indexDir, a_Position.y)\\n );\\n\\n float d_segmentIndex = a_Position.x + 1.0; // \\u5F53\\u524D\\u9876\\u70B9\\u5728\\u5F27\\u7EBF\\u4E2D\\u6240\\u5904\\u7684\\u5206\\u6BB5\\u4F4D\\u7F6E\\n v_lineData.r = d_segmentIndex;\\n\\n if(LineTexture == u_line_texture) { // \\u5F00\\u542F\\u8D34\\u56FE\\u6A21\\u5F0F\\n float arcDistrance = length(source - target); // \\u8D77\\u59CB\\u70B9\\u548C\\u7EC8\\u70B9\\u7684\\u8DDD\\u79BB\\n arcDistrance = project_pixel(arcDistrance);\\n\\n v_iconMapUV = a_iconMapUV;\\n\\n float pixelLen = project_pixel_texture(u_icon_step); // \\u8D34\\u56FE\\u6CBF\\u5F27\\u7EBF\\u65B9\\u5411\\u7684\\u957F\\u5EA6 - \\u968F\\u5730\\u56FE\\u7F29\\u653E\\u6539\\u53D8\\n float texCount = floor(arcDistrance / pixelLen); // \\u8D34\\u56FE\\u5728\\u5F27\\u7EBF\\u4E0A\\u91CD\\u590D\\u7684\\u6570\\u91CF\\n v_lineData.g = texCount;\\n\\n float lineOffsetWidth = length(offset + offset * sign(a_Position.y)); // \\u7EBF\\u6A2A\\u5411\\u504F\\u79FB\\u7684\\u8DDD\\u79BB\\n float linePixelSize = project_pixel(a_Size); // \\u5B9A\\u70B9\\u4F4D\\u7F6E\\u504F\\u79FB\\n v_lineData.a = lineOffsetWidth / linePixelSize; // \\u7EBF\\u56FE\\u5C42\\u8D34\\u56FE\\u90E8\\u5206\\u7684 v \\u5750\\u6807\\u503C\\n }\\n\\n gl_Position = project_common_position_to_clipspace(vec4(currPos.xy + offset, 0, 1.0));\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nconst lineStyleObj = {\n solid: 0.0,\n dash: 1.0\n};\nexport default class ArcModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"texture\", void 0);\n _defineProperty(this, \"updateTexture\", () => {\n const {\n createTexture2D\n } = this.rendererService;\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas()\n });\n this.layer.render();\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.NEAREST,\n min: gl.NEAREST,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128\n });\n this.textures = [this.texture];\n });\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n INSTANCE: 10,\n INSTANCE_64LOW: 11,\n UV: 12,\n THETA_OFFSET: 13\n });\n }\n getCommonUniformsInfo() {\n const {\n sourceColor,\n targetColor,\n textureBlend = 'normal',\n lineType = 'solid',\n dashArray = [10, 5],\n forward = true,\n lineTexture = false,\n iconStep = 100,\n segmentNumber = 30\n // thetaOffset = 0.314,\n } = this.layer.getLayerConfig();\n const {\n animateOption\n } = this.layer.getLayerConfig();\n let u_dash_array = dashArray;\n if (lineType !== 'dash') {\n u_dash_array = [0, 0];\n }\n if (u_dash_array.length === 2) {\n u_dash_array.push(0, 0);\n }\n\n // 转化渐变色\n let useLinearColor = 0; // 默认不生效\n let sourceColorArr = [0, 0, 0, 0];\n let targetColorArr = [0, 0, 0, 0];\n if (sourceColor && targetColor) {\n sourceColorArr = rgb2arr(sourceColor);\n targetColorArr = rgb2arr(targetColor);\n useLinearColor = 1;\n }\n if (this.rendererService.getDirty()) {\n var _this$texture;\n (_this$texture = this.texture) === null || _this$texture === void 0 || _this$texture.bind();\n }\n const commonOptions = {\n u_animate: this.animateOption2Array(animateOption),\n u_dash_array,\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n segmentNumber,\n u_lineDir: forward ? 1 : -1,\n u_icon_step: iconStep,\n u_line_texture: lineTexture ? 1.0 : 0.0,\n // 传入线的标识\n u_textureBlend: textureBlend === 'normal' ? 0.0 : 1.0,\n u_blur: 0.9,\n u_line_type: lineStyleObj[lineType || 'solid'],\n u_time: this.layer.getLayerAnimateTime() || 0,\n // // 纹理支持参数\n // u_texture: this.texture, // 贴图\n // 渐变色支持参数\n u_linearColor: useLinearColor\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n\n // public getAnimateUniforms(): IModelUniform {\n // const { animateOption } = this.layer.getLayerConfig() as ILayerConfig;\n // return {\n // u_animate: this.animateOption2Array(animateOption as IAnimateOption),\n // u_time: this.layer.getLayerAnimateTime(),\n // };\n // }\n\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.updateTexture();\n _this.iconService.on('imageUpdate', _this.updateTexture);\n return _this.buildModels();\n })();\n }\n clearModels() {\n var _this$texture2;\n (_this$texture2 = this.texture) === null || _this$texture2 === void 0 || _this$texture2.destroy();\n this.iconService.off('imageUpdate', this.updateTexture);\n }\n getShaders() {\n return {\n frag: arc_line_frag,\n vert: arc_line_vert,\n type: ''\n };\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.initUniformsBuffer();\n const {\n segmentNumber = 30\n } = _this2.layer.getLayerConfig();\n const {\n frag,\n vert,\n type\n } = _this2.getShaders();\n //\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'lineArc2d' + type,\n vertexShader: vert,\n fragmentShader: frag,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n triangulation: LineArcTriangulation,\n depth: {\n enable: false\n },\n styleOption: {\n segmentNumber\n }\n });\n return [model];\n })();\n }\n registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n size = 1\n } = feature;\n return Array.isArray(size) ? [size[0]] : [size];\n }\n }\n });\n\n // 弧线起始点信息\n this.styleAttributeService.registerStyleAttribute({\n name: 'instance',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Instance',\n shaderLocation: this.attributeLocation.INSTANCE,\n buffer: {\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 4,\n update: (feature, featureIdx, vertex) => {\n return [vertex[3], vertex[4], vertex[5], vertex[6]];\n }\n }\n });\n\n // save low part for enabled double precision INSTANCE attribute\n this.styleAttributeService.registerStyleAttribute({\n name: 'instance64Low',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Instance64Low',\n shaderLocation: this.attributeLocation.INSTANCE_64LOW,\n buffer: {\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 4,\n update: (feature, featureIdx, vertex) => {\n return [fp64LowPart(vertex[3]), fp64LowPart(vertex[4]), fp64LowPart(vertex[5]), fp64LowPart(vertex[6])];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_iconMapUV',\n shaderLocation: this.attributeLocation.UV,\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: feature => {\n const iconMap = this.iconService.getIconMap();\n const {\n texture\n } = feature;\n const {\n x,\n y\n } = iconMap[texture] || {\n x: 0,\n y: 0\n };\n return [x, y];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'thetaOffset',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_ThetaOffset',\n shaderLocation: this.attributeLocation.THETA_OFFSET,\n buffer: {\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n thetaOffset: op = 1\n } = feature;\n return [op];\n }\n }\n });\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport { fp64LowPart, rgb2arr } from '@antv/l7-utils';\nimport BaseModel from \"../../core/BaseModel\";\nimport { LineArcTriangulation } from \"../../core/triangulation\";\nimport { EARTH_RADIUS } from \"../../earth/utils\";\n// arc3d line layer\n/* babel-plugin-inline-import '../shaders/arc3d/line_arc_3d_frag.glsl' */\nconst arc3d_line_frag = \"#define LineTypeSolid 0.0\\n#define LineTypeDash 1.0\\n#define Animate 0.0\\n#define LineTexture 1.0\\n\\nuniform sampler2D u_texture;\\n\\nlayout(std140) uniform commonUniorm {\\n vec4 u_animate: [ 1., 2., 1.0, 0.2 ];\\n vec4 u_dash_array: [10.0, 5., 0, 0];\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n vec2 u_textSize;\\n float u_globel;\\n float u_globel_radius;\\n float u_global_height: 10;\\n float segmentNumber;\\n float u_line_type: 0.0;\\n float u_icon_step: 100;\\n float u_line_texture: 0.0;\\n float u_textureBlend;\\n float u_time;\\n float u_linearColor: 0.0;\\n};\\n\\nin vec4 v_color;\\nin vec4 v_dash_array;\\nin float v_segmentIndex;\\nin vec2 v_iconMapUV;\\nin vec4 v_line_data;\\n\\nout vec4 outputColor;\\n\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n float animateSpeed = 0.0; // \\u8FD0\\u52A8\\u901F\\u5EA6\\n float d_distance_ratio = v_line_data.g; // \\u5F53\\u524D\\u70B9\\u4F4D\\u8DDD\\u79BB\\u5360\\u7EBF\\u603B\\u957F\\u7684\\u6BD4\\u4F8B\\n outputColor = v_color;\\n\\n if(u_line_type == LineTypeDash) {\\n float flag = 0.;\\n float dashLength = mod(d_distance_ratio, v_dash_array.x + v_dash_array.y + v_dash_array.z + v_dash_array.w);\\n if(dashLength < v_dash_array.x || (dashLength > (v_dash_array.x + v_dash_array.y) && dashLength < v_dash_array.x + v_dash_array.y + v_dash_array.z)) {\\n flag = 1.;\\n }\\n outputColor.a *=flag;\\n }\\n\\n if(u_animate.x == Animate && u_line_texture != LineTexture) {\\n animateSpeed = u_time / u_animate.y;\\n float alpha =1.0 - fract( mod(1.0- d_distance_ratio, u_animate.z)* (1.0/ u_animate.z) + u_time / u_animate.y);\\n\\n alpha = (alpha + u_animate.w -1.0) / u_animate.w;\\n // alpha = smoothstep(0., 1., alpha);\\n alpha = clamp(alpha, 0.0, 1.0);\\n outputColor.a *= alpha;\\n\\n // u_animate\\n // x enable\\n // y duration\\n // z interval\\n // w trailLength\\n }\\n\\n if(u_line_texture == LineTexture && u_line_type != LineTypeDash) { // while load texture\\n // float arcRadio = smoothstep( 0.0, 1.0, (v_segmentIndex / segmentNumber));\\n float arcRadio = v_segmentIndex / (segmentNumber - 1.0);\\n float count = v_line_data.b; // // \\u8D34\\u56FE\\u5728\\u5F27\\u7EBF\\u4E0A\\u91CD\\u590D\\u7684\\u6570\\u91CF\\n\\n float time = 0.0;\\n if(u_animate.x == Animate) {\\n time = u_time / u_animate.y;\\n }\\n float redioCount = arcRadio * count;\\n\\n float u = fract(redioCount - time);\\n\\n float v = v_line_data.a; // \\u7EBF\\u56FE\\u5C42\\u8D34\\u56FE\\u90E8\\u5206\\u7684 v \\u5750\\u6807\\u503C\\n vec2 uv= v_iconMapUV / u_textSize + vec2(u, v) / u_textSize * 64.;\\n vec4 pattern = texture(SAMPLER_2D(u_texture), uv);\\n\\n if(u_animate.x == Animate) {\\n float currentPlane = floor(redioCount - time);\\n float textureStep = floor(count * u_animate.z);\\n float a = mod(currentPlane, textureStep);\\n if(a < textureStep - 1.0) {\\n pattern = vec4(0.0);\\n }\\n }\\n\\n if(u_textureBlend == 0.0) { // normal\\n pattern.a = 0.0;\\n outputColor = filterColor(outputColor + pattern);\\n } else { // replace\\n pattern.a *= v_color.a;\\n if(outputColor.a <= 0.0) {\\n pattern.a = 0.0;\\n discard;\\n } else {\\n outputColor = filterColor(pattern);\\n }\\n }\\n\\n } else {\\n outputColor = filterColor(outputColor);\\n }\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/arc3d/line_arc_3d_vert.glsl' */\nconst arc3d_line_vert = \"#define LineTypeSolid 0.0\\n#define LineTypeDash 1.0\\n#define Animate 0.0\\n#define LineTexture 1.0\\n\\nlayout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_INSTANCE) in vec4 a_Instance;\\nlayout(location = ATTRIBUTE_LOCATION_INSTANCE_64LOW) in vec4 a_Instance64Low;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_iconMapUV;\\n\\n\\nlayout(std140) uniform commonUniorm {\\n vec4 u_animate: [ 1., 2., 1.0, 0.2 ];\\n vec4 u_dash_array: [10.0, 5., 0, 0];\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n vec2 u_textSize;\\n float u_globel;\\n float u_globel_radius;\\n float u_global_height: 10;\\n float segmentNumber;\\n float u_line_type: 0.0;\\n float u_icon_step: 100;\\n float u_line_texture: 0.0;\\n float u_textureBlend;\\n float u_time;\\n float u_linearColor: 0.0;\\n};\\nout vec4 v_color;\\nout vec4 v_dash_array;\\nout float v_segmentIndex;\\nout vec2 v_iconMapUV;\\nout vec4 v_line_data;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"project\\\"\\n#pragma include \\\"picking\\\"\\n\\nfloat maps (float value, float start1, float stop1, float start2, float stop2) {\\n return start2 + (stop2 - start2) * ((value - start1) / (stop1 - start1));\\n}\\n\\nfloat getSegmentRatio(float index) {\\n return smoothstep(0.0, 1.0, index / (segmentNumber - 1.0));\\n}\\n\\nfloat paraboloid(vec2 source, vec2 target, float ratio) {\\n vec2 x = mix(source, target, ratio);\\n vec2 center = mix(source, target, 0.5);\\n float dSourceCenter = distance(source, center);\\n float dXCenter = distance(x, center);\\n return (dSourceCenter + dXCenter) * (dSourceCenter - dXCenter);\\n}\\n\\nvec3 getPos(vec2 source, vec2 target, float segmentRatio) {\\n float vertex_height = paraboloid(source, target, segmentRatio);\\n\\n return vec3(\\n mix(source, target, segmentRatio),\\n sqrt(max(0.0, vertex_height))\\n );\\n}\\nvec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction) {\\n // normalized direction of the line\\n vec2 dir_screenspace = normalize(line_clipspace);\\n // rotate by 90 degrees\\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\\n\\n vec2 offset = dir_screenspace * offset_direction * setPickingSize(a_Size) / 2.0;\\n\\n return offset;\\n}\\nvec2 getNormal(vec2 line_clipspace, float offset_direction) {\\n // normalized direction of the line\\n vec2 dir_screenspace = normalize(line_clipspace);\\n // rotate by 90 degrees\\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\\n return dir_screenspace.xy * sign(offset_direction);\\n}\\n\\nfloat torad(float deg) {\\n return (deg / 180.0) * acos(-1.0);\\n}\\n\\nvec3 lglt2xyz(vec2 lnglat) {\\n float pi = 3.1415926;\\n // + Math.PI/2 \\u662F\\u4E3A\\u4E86\\u5BF9\\u9F50\\u5750\\u6807\\n float lng = torad(lnglat.x) + pi / 2.0;\\n float lat = torad(lnglat.y);\\n\\n // \\u624B\\u52A8\\u589E\\u52A0\\u4E00\\u4E9B\\u504F\\u79FB\\uFF0C\\u51CF\\u8F7B\\u9762\\u7684\\u51B2\\u7A81\\n float radius = u_globel_radius;\\n\\n float z = radius * cos(lat) * cos(lng);\\n float x = radius * cos(lat) * sin(lng);\\n float y = radius * sin(lat);\\n return vec3(x, y, z);\\n}\\n\\nvoid main() {\\n //vs\\u4E2D\\u8BA1\\u7B97\\u6E10\\u53D8\\u8272\\n if(u_linearColor==1.0){\\n float d_segmentIndex = a_Position.x + 1.0; // \\u5F53\\u524D\\u9876\\u70B9\\u5728\\u5F27\\u7EBF\\u4E2D\\u6240\\u5904\\u7684\\u5206\\u6BB5\\u4F4D\\u7F6E\\n v_color = mix(u_sourceColor, u_targetColor, d_segmentIndex/segmentNumber);\\n }\\n else{\\n v_color = a_Color;\\n }\\n v_color.a = v_color.a * opacity;\\n vec2 source = project_position(vec4(a_Instance.rg, 0, 0), a_Instance64Low.xy).xy;\\n vec2 target = project_position(vec4(a_Instance.ba, 0, 0), a_Instance64Low.zw).xy;\\n float segmentIndex = a_Position.x;\\n float segmentRatio = getSegmentRatio(segmentIndex);\\n float indexDir = mix(-1.0, 1.0, step(segmentIndex, 0.0));\\n\\n float d_distance_ratio;\\n if(u_line_type == LineTypeDash) {\\n d_distance_ratio = segmentIndex / segmentNumber;\\n float total_Distance = pixelDistance(source, target) / 2.0 * PI;\\n v_dash_array = pow(2.0, 20.0 - u_Zoom) * u_dash_array / (total_Distance / segmentNumber * segmentIndex);\\n }\\n if(u_animate.x == Animate) {\\n d_distance_ratio = segmentIndex / segmentNumber;\\n }\\n v_line_data.g = d_distance_ratio; // \\u5F53\\u524D\\u70B9\\u4F4D\\u8DDD\\u79BB\\u5360\\u7EBF\\u603B\\u957F\\u7684\\u6BD4\\u4F8B\\n\\n float nextSegmentRatio = getSegmentRatio(segmentIndex + indexDir);\\n vec3 curr = getPos(source, target, segmentRatio);\\n vec3 next = getPos(source, target, nextSegmentRatio);\\n vec2 offset = getExtrusionOffset((next.xy - curr.xy) * indexDir, a_Position.y);\\n // v_normal = getNormal((next.xy - curr.xy) * indexDir, a_Position.y);\\n\\n\\n v_segmentIndex = a_Position.x;\\n if(LineTexture == u_line_texture && u_line_type != LineTypeDash) { // \\u5F00\\u542F\\u8D34\\u56FE\\u6A21\\u5F0F\\n\\n float arcDistrance = length(source - target);\\n float pixelLen = project_pixel_texture(u_icon_step);\\n v_line_data.b = floor(arcDistrance/pixelLen); // \\u8D34\\u56FE\\u5728\\u5F27\\u7EBF\\u4E0A\\u91CD\\u590D\\u7684\\u6570\\u91CF\\n\\n vec2 projectOffset = project_pixel(offset);\\n float lineOffsetWidth = length(projectOffset + projectOffset * sign(a_Position.y)); // \\u7EBF\\u6A2A\\u5411\\u504F\\u79FB\\u7684\\u8DDD\\u79BB\\n float linePixelSize = project_pixel(a_Size); // \\u5B9A\\u70B9\\u4F4D\\u7F6E\\u504F\\u79FB\\uFF0C\\u6309\\u5730\\u56FE\\u7B49\\u7EA7\\u7F29\\u653E\\u540E\\u7684\\u8DDD\\u79BB\\n v_line_data.a = lineOffsetWidth/linePixelSize; // \\u7EBF\\u56FE\\u5C42\\u8D34\\u56FE\\u90E8\\u5206\\u7684 v \\u5750\\u6807\\u503C\\n\\n v_iconMapUV = a_iconMapUV;\\n }\\n\\n\\n gl_Position = project_common_position_to_clipspace(vec4(curr.xy + project_pixel(offset), curr.z * thetaOffset, 1.0));\\n\\n // \\u5730\\u7403\\u6A21\\u5F0F\\n if(u_globel > 0.0) {\\n vec3 startLngLat = lglt2xyz(a_Instance.rg);\\n vec3 endLngLat = lglt2xyz(a_Instance.ba);\\n float globalRadius = length(startLngLat);\\n\\n vec3 lineDir = normalize(endLngLat - startLngLat);\\n vec3 midPointDir = normalize((startLngLat + endLngLat)/2.0);\\n\\n // \\u7EBF\\u7684\\u504F\\u79FB\\n vec3 lnglatOffset = cross(lineDir, midPointDir) * a_Position.y;\\n // \\u8BA1\\u7B97\\u8D77\\u59CB\\u70B9\\u548C\\u7EC8\\u6B62\\u70B9\\u7684\\u8DDD\\u79BB\\n float lnglatLength = length(a_Instance.rg - a_Instance.ba)/50.0;\\n // \\u8BA1\\u7B97\\u98DE\\u7EBF\\u5404\\u4E2A\\u8282\\u70B9\\u76F8\\u5E94\\u7684\\u9AD8\\u5EA6\\n float lineHeight = u_global_height * (-4.0*segmentRatio*segmentRatio + 4.0 * segmentRatio) * lnglatLength;\\n // \\u5730\\u7403\\u70B9\\u4F4D\\n vec3 globalPoint = normalize(mix(startLngLat, endLngLat, segmentRatio)) * (globalRadius + lineHeight) + lnglatOffset * a_Size;\\n\\n gl_Position = u_ViewProjectionMatrix * vec4(globalPoint, 1.0);\\n }\\n\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nconst lineStyleObj = {\n solid: 0.0,\n dash: 1.0\n};\nexport default class Arc3DModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"texture\", void 0);\n _defineProperty(this, \"updateTexture\", () => {\n const {\n createTexture2D\n } = this.rendererService;\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas()\n });\n this.layer.render();\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.NEAREST,\n min: gl.NEAREST,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128\n });\n this.textures = [this.texture];\n });\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n INSTANCE: 10,\n INSTANCE_64LOW: 11,\n UV: 12,\n THETA_OFFSET: 13\n });\n }\n // public enableShaderEncodeStyles = ['opacity'];\n getCommonUniformsInfo() {\n const {\n sourceColor,\n targetColor,\n textureBlend = 'normal',\n lineType = 'solid',\n dashArray = [10, 5],\n lineTexture = false,\n iconStep = 100,\n segmentNumber = 30,\n globalArcHeight = 10\n } = this.layer.getLayerConfig();\n const {\n animateOption\n } = this.layer.getLayerConfig();\n if (dashArray.length === 2) {\n dashArray.push(0, 0);\n }\n // 转化渐变色\n let useLinearColor = 0; // 默认不生效\n let sourceColorArr = [0, 0, 0, 0];\n let targetColorArr = [0, 0, 0, 0];\n if (sourceColor && targetColor) {\n sourceColorArr = rgb2arr(sourceColor);\n targetColorArr = rgb2arr(targetColor);\n useLinearColor = 1;\n }\n if (this.rendererService.getDirty()) {\n var _this$texture;\n (_this$texture = this.texture) === null || _this$texture === void 0 || _this$texture.bind();\n }\n const commonOptions = {\n u_animate: this.animateOption2Array(animateOption),\n u_dash_array: dashArray,\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n u_globel: this.mapService.version === 'GLOBEL' ? 1 : 0,\n u_globel_radius: EARTH_RADIUS,\n // 地球半径\n u_global_height: globalArcHeight,\n segmentNumber,\n u_line_type: lineStyleObj[lineType] || 0.0,\n u_icon_step: iconStep,\n u_line_texture: lineTexture ? 1.0 : 0.0,\n // 传入线的标识\n u_textureBlend: textureBlend === 'normal' ? 0.0 : 1.0,\n u_time: this.layer.getLayerAnimateTime() || 0,\n u_linearColor: useLinearColor //是否使用渐变色\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n\n // public getAnimateUniforms(): IModelUniform {\n // const { animateOption } = this.layer.getLayerConfig() as ILayerConfig;\n // return {\n // u_animate: this.animateOption2Array(animateOption as IAnimateOption),\n // u_time: this.layer.getLayerAnimateTime(),\n // };\n // }\n\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.initUniformsBuffer();\n _this.updateTexture();\n _this.iconService.on('imageUpdate', _this.updateTexture);\n return _this.buildModels();\n })();\n }\n clearModels() {\n var _this$texture2;\n (_this$texture2 = this.texture) === null || _this$texture2 === void 0 || _this$texture2.destroy();\n this.iconService.off('imageUpdate', this.updateTexture);\n }\n getShaders() {\n return {\n frag: arc3d_line_frag,\n vert: arc3d_line_vert,\n type: ''\n };\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n const {\n segmentNumber = 30\n } = _this2.layer.getLayerConfig();\n const {\n frag,\n vert,\n type\n } = _this2.getShaders();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'lineArc3d' + type,\n vertexShader: vert,\n fragmentShader: frag,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n triangulation: LineArcTriangulation,\n styleOption: {\n segmentNumber\n }\n });\n return [model];\n })();\n }\n registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n size = 1\n } = feature;\n return Array.isArray(size) ? [size[0]] : [size];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'instance',\n // 弧线起始点信息\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Instance',\n shaderLocation: this.attributeLocation.INSTANCE,\n buffer: {\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 4,\n update: (feature, featureIdx, vertex) => {\n return [vertex[3], vertex[4], vertex[5], vertex[6]];\n }\n }\n });\n\n // save low part for enabled double precision INSTANCE attribute\n this.styleAttributeService.registerStyleAttribute({\n name: 'instance64Low',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Instance64Low',\n shaderLocation: this.attributeLocation.INSTANCE_64LOW,\n buffer: {\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 4,\n update: (feature, featureIdx, vertex) => {\n return [fp64LowPart(vertex[3]), fp64LowPart(vertex[4]), fp64LowPart(vertex[5]), fp64LowPart(vertex[6])];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_iconMapUV',\n shaderLocation: this.attributeLocation.UV,\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: feature => {\n const iconMap = this.iconService.getIconMap();\n const {\n texture\n } = feature;\n const {\n x,\n y\n } = iconMap[texture] || {\n x: 0,\n y: 0\n };\n return [x, y];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'thetaOffset',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_ThetaOffset',\n shaderLocation: this.attributeLocation.THETA_OFFSET,\n buffer: {\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n thetaOffset: op = 1\n } = feature;\n return [op];\n }\n }\n });\n }\n}","import earcut from 'earcut';\nimport { circle } from \"./Path\";\nconst maxArrowWidthMap = {\n circle: 2,\n triangle: 2,\n diamond: 4,\n rect: 2,\n classic: 3,\n halfTriangle: 2,\n none: 0\n};\nconst PathHeight = 1 / 2;\nexport function halfTriangleArrow(dir, options) {\n const {\n width = 2,\n height = 1\n } = options;\n return {\n vertices: [0, PathHeight * dir, 1 * dir * width, -(height + PathHeight) * dir, 1 * dir * width, (height - PathHeight) * dir, 0, PathHeight * dir, 1 * dir * width, -(height + PathHeight) * dir, 1 * dir * width, (height - PathHeight) * dir],\n indices: [3, 4, 5],\n outLineIndices: [0, 1, 2],\n normals: [1 * dir, -2 * dir, 1,\n // y,x\n -2 * dir, 1.5 * dir, 1, 1 * dir, 1.5 * dir, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n dimensions: 2\n };\n}\nexport function triangleArrow(dir, options) {\n const {\n width = 2,\n height = 3\n } = options;\n return {\n vertices: [0, 0, 1 * dir * width, 1 * height, 1 * dir * width, -1 * height, 0, 0, 1 * dir * width, 1 * height, 1 * dir * width, -1 * height],\n outLineIndices: [0, 1, 2],\n indices: [3, 4, 5],\n normals: [0, -1.5 * dir, 1, 2, 1 * dir, 1, -2, 1 * dir, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n dimensions: 2\n };\n}\nexport function rectArrow(dir, options) {\n const {\n width = 2,\n height = 2\n } = options;\n return {\n vertices: [0, height / 2, dir * width * 1, height / 2, dir * width * 1, -height / 2, 0, -height / 2, 0, height / 2, dir * width * 1, height / 2, dir * width * 1, -height / 2, 0, -height / 2],\n dimensions: 2,\n indices: [4, 5, 6, 4, 6, 7],\n outLineIndices: [0, 1, 2, 0, 2, 3],\n normals: [0, -dir, 1, 1, 0, 1, 0, -dir, 1, -1, -0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n };\n}\nexport function diamondArrow(dir, options) {\n const {\n width = 2,\n height = 3\n } = options;\n return {\n vertices: [0, 0, 1 * width * dir, 0.5 * height, 2 * width * dir, 0, 1 * width * dir, -0.5 * height, 0, 0, 1 * width * dir, 0.5 * height, 2 * width * dir, 0, 1 * width * dir, -0.5 * height],\n dimensions: 2,\n indices: [4, 5, 6, 4, 6, 7],\n outLineIndices: [0, 1, 2, 0, 2, 3],\n normals: [0, -dir, 1, 1, 0, 1, 0, -dir, 1, -1, -0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n };\n}\nexport function classicArrow(dir, options) {\n const {\n width = 2,\n height = 3\n } = options;\n return {\n vertices: [0, 0, 2 * dir * width, 1 * height, 1.5 * dir * width, 0, 2 * dir * width, -1 * height, 0, 0, 2 * dir * width, 1 * height, 1.5 * dir * width, 0, 2 * dir * width, -1 * height],\n dimensions: 2,\n indices: [4, 5, 6, 4, 6, 7],\n outLineIndices: [0, 1, 2, 0, 2, 3],\n normals: [0, -dir, 1, 1, 0, 1, 0, -dir, 1, -1, -0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n };\n}\nexport function circleArraw(dir, options) {\n const {\n width = 2,\n height = 2\n } = options;\n const path = circle();\n const flattengeo = earcut.flatten([path]);\n const triangles = earcut(flattengeo.vertices, flattengeo.holes, flattengeo.dimensions);\n // @ts-ignore\n const vertice = path.map(t => [t[0] * width * dir, t[1] * height]).flat();\n return {\n vertices: [...vertice, ...vertice],\n dimensions: 2,\n indices: triangles.map(v => v + path.length),\n outLineIndices: triangles,\n normals: [\n // @ts-ignore\n ...path.map(t => [t[1] * height, t[0] * width * dir, 1]).flat(), ...new Array(path.length * 3).fill(0)]\n };\n}\nexport function lineArrowPath(coord, indexOffset = 0, symbol) {\n const sourceType = typeof symbol['source'] === 'object' ? symbol['source'].type : symbol['source'];\n const targetType = typeof symbol['target'] === 'object' ? symbol['target'].type : symbol['target'];\n const {\n width: sourceWidth = sourceType ? maxArrowWidthMap[sourceType] : 0\n } = typeof symbol['source'] === 'object' ? symbol['source'] : {};\n const {\n width: targetWidth = targetType ? maxArrowWidthMap[targetType] : 0\n } = typeof symbol['target'] === 'object' ? symbol['target'] : {};\n return {\n vertices: [0, PathHeight, 1 * sourceWidth, ...coord, 1, PathHeight, -1 * targetWidth, ...coord, 1, -PathHeight, -1 * targetWidth, ...coord, 0, -PathHeight, 1 * sourceWidth, ...coord, 0, PathHeight, 1 * sourceWidth, ...coord, 1, PathHeight, -1 * targetWidth, ...coord, 1, -PathHeight, -1 * targetWidth, ...coord, 0, -PathHeight, 1 * sourceWidth, ...coord],\n outLineIndices: [0, 1, 2, 0, 2, 3].map(t => t + indexOffset),\n indices: [4, 5, 6, 4, 6, 7].map(t => t + indexOffset),\n normals: [1, -1, 1, 1, 1, 1, -1, 0, 1, -1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n dimensions: 2\n };\n}\nexport function getSymbol(type, position) {\n const shape = typeof type === 'object' ? type.type : type;\n const dir = position === 'source' ? 1 : -1;\n const option = typeof type === 'object' ? type : {};\n switch (shape) {\n case 'circle':\n return circleArraw(dir, option);\n case 'triangle':\n return triangleArrow(dir, option);\n case 'diamond':\n return diamondArrow(dir, option);\n case 'rect':\n return rectArrow(dir, option);\n case 'classic':\n return classicArrow(dir, option);\n case 'halfTriangle':\n return halfTriangleArrow(dir, option);\n default:\n return {\n vertices: [],\n indices: [],\n normals: [],\n dimensions: 2,\n outLineIndices: [],\n outLineNormals: []\n };\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { getSymbol, lineArrowPath } from \"./shape/arrow\";\n\n// list all arrow shape\n\n// Half Edge\nexport function FlowHalfArrowFillTriangulation(feature) {\n // @ts-ignore\n const coord = feature.coordinates.flat();\n const tin = 1;\n const tout = 1.0;\n return {\n vertices: [1, 0, 0, ...coord,\n // 0\n 1, 2, -3, ...coord,\n // 1\n 1, 1, -3, ...coord,\n // 2\n 0, 1, 0, ...coord,\n // 3\n 0, 0, 0, ...coord,\n // 4\n 1, 0, 0, ...coord,\n // 0\n 1, 2, -3, ...coord,\n // 1\n 1, 1, -3, ...coord,\n // 2\n 0, 1, 0, ...coord,\n // 3\n 0, 0, 0, ...coord // 4\n ],\n normals: [-tin, 2 * tout, 1,\n // 0\n 2 * tout, -tout, 1,\n // 1\n tout, -tout, 1,\n // 2\n tout, -tout, 1,\n // 3\n -tin, -tout, 1,\n // 4\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n indices: [0, 1, 2, 0, 2, 3, 0, 3, 4, 5, 6, 7, 5, 7, 8, 5, 8, 9],\n size: 7\n };\n}\nexport function FlowLineTriangulation(feature, symbolOption) {\n return symbolOption ? ArrowLineTriangulation(feature, symbolOption) : FlowHalfArrowFillTriangulation(feature);\n}\nexport function ArrowLineTriangulation(feature, symbolOption) {\n // @ts-ignore\n const coord = feature.coordinates.flat();\n const {\n target = 'classic',\n source = 'circle'\n } = symbolOption;\n const startSymbol = shape2Vertices(getSymbol(source, 'source'), coord, 0, 0);\n const linePath = lineArrowPath(coord, startSymbol.vertices.length / 7, symbolOption);\n const endSymbol = shape2Vertices(getSymbol(target, 'target'), coord, 1, startSymbol.vertices.length / 7 + linePath.vertices.length / 7);\n const data = {\n vertices: [...startSymbol.vertices, ...linePath.vertices, ...endSymbol.vertices],\n indices: [...startSymbol.outLineIndices, ...linePath.outLineIndices, ...endSymbol.outLineIndices, ...startSymbol.indices, ...linePath.indices, ...endSymbol.indices],\n normals: [...startSymbol.normals, ...linePath.normals, ...endSymbol.normals],\n size: 7\n };\n return data;\n}\n// start 0,end 1;\nfunction shape2Vertices(shape, coord, type = 1, indexOffset = 0) {\n const shapeVertices = [];\n const {\n vertices,\n indices,\n dimensions,\n outLineIndices\n } = shape;\n for (let i = 0; i < vertices.length; i += dimensions) {\n shapeVertices.push(type, vertices[i + 1], vertices[i], ...coord);\n }\n return _objectSpread(_objectSpread({}, shape), {}, {\n vertices: shapeVertices,\n indices: indices.map(i => i + indexOffset),\n outLineIndices: outLineIndices.map(i => i + indexOffset)\n });\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport { fp64LowPart } from '@antv/l7-utils';\nimport BaseModel from \"../../core/BaseModel\";\nimport { FlowLineTriangulation } from \"../../core/line_trangluation\";\n/* babel-plugin-inline-import '../shaders/flow/flow_line_frag.glsl' */\nconst flow_line_frag = \"// #extension GL_OES_standard_derivatives : enable\\n\\nin vec4 v_color;\\nout vec4 outputColor;\\n\\n\\n// line texture\\n\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n outputColor = v_color;\\n outputColor = filterColor(outputColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/flow/flow_line_vert.glsl' */\nconst flow_line_vert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in vec2 a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_INSTANCE) in vec4 a_Instance;\\nlayout(location = ATTRIBUTE_LOCATION_INSTANCE_64LOW) in vec4 a_Instance64Low;\\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\\n\\nlayout(std140) uniform commonUniorm {\\n float u_gap_width: 1.0;\\n float u_stroke_width: 1.0;\\n float u_stroke_opacity: 1.0;\\n};\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"project\\\"\\n#pragma include \\\"picking\\\"\\n\\nout vec4 v_color;\\n\\nvec2 project_pixel_offset(vec2 offsets) {\\n vec2 data = project_pixel(offsets);\\n\\n return vec2(data.x, -data.y);\\n}\\n\\nvec2 line_dir(vec2 target, vec2 source) {\\n return normalize(ProjectFlat(target) - ProjectFlat(source));\\n}\\n\\n\\nvoid main() {\\n // \\u900F\\u660E\\u5EA6\\u8BA1\\u7B97\\n vec2 source_world = a_Instance.rg; // \\u8D77\\u70B9\\n vec2 target_world = a_Instance.ba; // \\u7EC8\\u70B9\\n vec2 flowlineDir = line_dir(target_world, source_world);\\n vec2 perpendicularDir = vec2(-flowlineDir.y, flowlineDir.x);\\n\\n vec2 position = mix(source_world, target_world, a_Position.x);\\n vec2 position64Low = mix(a_Instance64Low.rg, a_Instance64Low.ba, a_Position.x);\\n\\n float lengthCommon = length(\\n project_position(vec4(target_world, 0, 1)) - project_position(vec4(source_world, 0, 1))\\n );\\n vec2 offsetDistances = a_Size.x * project_pixel_offset(vec2(a_Position.y, a_Position.z)); // Mapbox || \\u9AD8\\u5FB7\\n vec2 limitedOffsetDistances = clamp(\\n offsetDistances,\\n project_pixel(-lengthCommon * 0.2),\\n project_pixel(lengthCommon * 0.2)\\n );\\n\\n float startOffsetCommon = project_pixel(offsets[0]);\\n float endOffsetCommon = project_pixel(offsets[1]);\\n float endpointOffset = mix(\\n clamp(startOffsetCommon, 0.0, lengthCommon * 0.2),\\n -clamp(endOffsetCommon, 0.0, lengthCommon * 0.2),\\n a_Position.x\\n );\\n\\n vec2 normalsCommon = u_stroke_width * project_pixel_offset(vec2(a_Normal.x, a_Normal.y));\\n\\n float gapCommon = -1. * project_pixel(u_gap_width);\\n vec3 offsetCommon = vec3(\\n flowlineDir * (limitedOffsetDistances[1] + normalsCommon.y + endpointOffset * 1.05) -\\n perpendicularDir * (limitedOffsetDistances[0] + gapCommon + normalsCommon.x),\\n 0.0\\n );\\n\\n vec4 project_pos = project_position(vec4(position.xy, 0, 1.0), position64Low);\\n\\n vec4 fillColor = vec4(a_Color.rgb, a_Color.a * opacity);\\n v_color = mix(fillColor, vec4(u_stroke.xyz, u_stroke.w * fillColor.w * u_stroke_opacity), a_Normal.z);\\n\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offsetCommon.xy, 0., 1.0));\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nexport default class FlowLineModel extends BaseModel {\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n INSTANCE: 10,\n INSTANCE_64LOW: 11,\n NORMAL: 12\n });\n }\n getCommonUniformsInfo() {\n const {\n gapWidth = 2,\n strokeWidth = 1,\n strokeOpacity = 1\n } = this.layer.getLayerConfig();\n const commonOptions = {\n u_gap_width: gapWidth,\n u_stroke_width: strokeWidth,\n u_stroke_opacity: strokeOpacity\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.initUniformsBuffer();\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n const modelFill = yield _this2.layer.buildLayerModel({\n moduleName: 'flow_line',\n vertexShader: flow_line_vert,\n fragmentShader: flow_line_frag,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n triangulation: FlowLineTriangulation,\n styleOption: _this2.layer.getLayerConfig().symbol,\n primitive: gl.TRIANGLES,\n depth: {\n enable: false\n },\n pick: false\n });\n return [modelFill];\n })();\n }\n registerBuiltinAttributes() {\n // 注册 Style 参与数据映射的内置属性\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n // 宽度\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: feature => {\n const {\n size = 1\n } = feature;\n return Array.isArray(size) ? [size[0], size[1]] : [size, 0];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'instance',\n // 弧线起始点信息\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Instance',\n shaderLocation: this.attributeLocation.INSTANCE,\n buffer: {\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 4,\n update: (feature, featureIdx, vertex) => {\n return [vertex[3], vertex[4], vertex[5], vertex[6]];\n }\n }\n });\n\n // save low part for enabled double precision INSTANCE attribute\n this.styleAttributeService.registerStyleAttribute({\n name: 'instance64Low',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Instance64Low',\n shaderLocation: this.attributeLocation.INSTANCE_64LOW,\n buffer: {\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 4,\n update: (feature, featureIdx, vertex) => {\n return [fp64LowPart(vertex[3]), fp64LowPart(vertex[4]), fp64LowPart(vertex[5]), fp64LowPart(vertex[6])];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'normal',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Normal',\n shaderLocation: this.attributeLocation.NORMAL,\n buffer: {\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: (feature, featureIdx, vertex, attributeIdx, normal) => {\n return normal;\n }\n }\n });\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport { fp64LowPart, rgb2arr } from '@antv/l7-utils';\nimport BaseModel from \"../../core/BaseModel\";\nimport { LineArcTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/greatCircle/line_arc_great_circle_frag.glsl' */\nconst line_arc_frag = \"#define LineTypeSolid 0.0\\n#define LineTypeDash 1.0\\n#define Animate 0.0\\n#define LineTexture 1.0\\n\\nuniform sampler2D u_texture;\\nlayout(std140) uniform commonUniorm {\\n vec4 u_animate: [ 1., 2., 1.0, 0.2 ];\\n vec4 u_dash_array: [10.0, 5., 0, 0];\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n vec2 u_textSize;\\n float segmentNumber;\\n float u_line_type: 0.0;\\n float u_icon_step: 100;\\n float u_line_texture: 0.0;\\n float u_textureBlend;\\n float u_time;\\n float u_linearColor: 0;\\n};\\n\\nin vec4 v_dash_array;\\nin vec4 v_color;\\nin vec2 v_iconMapUV;\\nin vec4 v_line_data;\\nin float v_distance_ratio;\\n\\nout vec4 outputColor;\\n#pragma include \\\"picking\\\"\\n#pragma include \\\"project\\\"\\n#pragma include \\\"projection\\\"\\n\\nvoid main() {\\n\\n float animateSpeed = 0.0;\\n float d_segmentIndex = v_line_data.g;\\n\\n // \\u8BBE\\u7F6E\\u5F27\\u7EBF\\u7684\\u5E95\\u8272\\n if(u_linearColor == 1.0) { // \\u4F7F\\u7528\\u6E10\\u53D8\\u989C\\u8272\\n outputColor = mix(u_sourceColor, u_targetColor, d_segmentIndex/segmentNumber);\\n outputColor.a *= v_color.a;\\n } else { // \\u4F7F\\u7528 color \\u65B9\\u6CD5\\u4F20\\u5165\\u7684\\u989C\\u8272\\n outputColor = v_color;\\n }\\n\\n // float blur = 1.- smoothstep(u_blur, 1., length(v_normal.xy));\\n // float blur = smoothstep(1.0, u_blur, length(v_normal.xy));\\n if(u_line_type == LineTypeDash) {\\n float dashLength = mod(v_distance_ratio, v_dash_array.x + v_dash_array.y + v_dash_array.z + v_dash_array.w);\\n if(dashLength < v_dash_array.x || (dashLength > (v_dash_array.x + v_dash_array.y) && dashLength < v_dash_array.x + v_dash_array.y + v_dash_array.z)) {\\n // \\u5B9E\\u7EBF\\u90E8\\u5206\\n } else {\\n // \\u865A\\u7EBF\\u90E8\\u5206\\n discard;\\n };\\n }\\n\\n // \\u8BBE\\u7F6E\\u5F27\\u7EBF\\u7684\\u52A8\\u753B\\u6A21\\u5F0F\\n if(u_animate.x == Animate) {\\n animateSpeed = u_time / u_animate.y;\\n float alpha =1.0 - fract( mod(1.0- v_distance_ratio, u_animate.z)* (1.0/ u_animate.z) + u_time / u_animate.y);\\n alpha = (alpha + u_animate.w -1.0) / u_animate.w;\\n alpha = smoothstep(0., 1., alpha);\\n outputColor.a *= alpha;\\n }\\n\\n // \\u8BBE\\u7F6E\\u5F27\\u7EBF\\u7684\\u8D34\\u56FE\\n if(LineTexture == u_line_texture && u_line_type != LineTypeDash) {\\n float arcRadio = smoothstep( 0.0, 1.0, (d_segmentIndex / (segmentNumber - 1.0)));\\n // float arcRadio = d_segmentIndex / (segmentNumber - 1.0);\\n float count = v_line_data.b; // \\u8D34\\u56FE\\u5728\\u5F27\\u7EBF\\u4E0A\\u91CD\\u590D\\u7684\\u6570\\u91CF\\n float u = fract(arcRadio * count - animateSpeed * count);\\n // float u = fract(arcRadio * count - animateSpeed);\\n if(u_animate.x == Animate) {\\n u = outputColor.a/v_color.a;\\n }\\n\\n float v = v_line_data.a; // \\u7EBF\\u56FE\\u5C42\\u8D34\\u56FE\\u90E8\\u5206\\u7684 v \\u5750\\u6807\\u503C\\n\\n vec2 uv= v_iconMapUV / u_textSize + vec2(u, v) / u_textSize * 64.;\\n vec4 pattern = texture(SAMPLER_2D(u_texture), uv);\\n\\n // \\u8BBE\\u7F6E\\u8D34\\u56FE\\u548C\\u5E95\\u8272\\u7684\\u53E0\\u52A0\\u6A21\\u5F0F\\n if(u_textureBlend == 0.0) { // normal\\n pattern.a = 0.0;\\n outputColor = filterColor(outputColor + pattern);\\n } else { // replace\\n pattern.a *= v_color.a;\\n if(outputColor.a <= 0.0) {\\n pattern.a = 0.0;\\n }\\n outputColor = filterColor(pattern);\\n }\\n } else {\\n outputColor = filterColor(outputColor);\\n }\\n\\n // gl_FragColor = filterColor(gl_FragColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/greatCircle/line_arc_great_circle_vert.glsl' */\nconst line_arc2d_vert = \"#define LineTypeSolid (0.0)\\n#define LineTypeDash (1.0)\\n#define Animate (0.0)\\n#define LineTexture (1.0)\\n\\nlayout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_INSTANCE) in vec4 a_Instance;\\nlayout(location = ATTRIBUTE_LOCATION_INSTANCE_64LOW) in vec4 a_Instance64Low;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_iconMapUV;\\n\\nlayout(std140) uniform commonUniorm {\\n vec4 u_animate: [ 1., 2., 1.0, 0.2 ];\\n vec4 u_dash_array: [10.0, 5., 0, 0];\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n vec2 u_textSize;\\n float segmentNumber;\\n float u_line_type: 0.0;\\n float u_icon_step: 100;\\n float u_line_texture: 0.0;\\n float u_textureBlend;\\n float u_time;\\n float u_linearColor: 0;\\n};\\n\\nout vec4 v_dash_array;\\nout vec4 v_color;\\nout vec2 v_iconMapUV;\\nout vec4 v_line_data;\\nout float v_distance_ratio;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"project\\\"\\n#pragma include \\\"picking\\\"\\n\\nfloat maps(float value, float start1, float stop1, float start2, float stop2) {\\n return start2 + (stop2 - start2) * ((value - start1) / (stop1 - start1));\\n}\\n\\nfloat getSegmentRatio(float index) {\\n return index / (segmentNumber - 1.0);\\n}\\n\\nfloat paraboloid(vec2 source, vec2 target, float ratio) {\\n vec2 x = mix(source, target, ratio);\\n vec2 center = mix(source, target, 0.5);\\n float dSourceCenter = distance(source, center);\\n float dXCenter = distance(x, center);\\n return (dSourceCenter + dXCenter) * (dSourceCenter - dXCenter);\\n}\\n\\nvec3 getPos(vec2 source, vec2 target, float segmentRatio) {\\n float vertex_height = paraboloid(source, target, segmentRatio);\\n\\n return vec3(mix(source, target, segmentRatio), sqrt(max(0.0, vertex_height)));\\n}\\nvec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction) {\\n // normalized direction of the line\\n vec2 dir_screenspace = normalize(line_clipspace);\\n // rotate by 90 degrees\\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\\n vec2 offset = dir_screenspace * offset_direction * setPickingSize(a_Size) / 2.0;\\n return offset;\\n}\\nvec2 getNormal(vec2 line_clipspace, float offset_direction) {\\n // normalized direction of the line\\n vec2 dir_screenspace = normalize(line_clipspace);\\n // rotate by 90 degrees\\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\\n return dir_screenspace.xy * sign(offset_direction);\\n}\\nfloat getAngularDist(vec2 source, vec2 target) {\\n vec2 delta = source - target;\\n vec2 sin_half_delta = sin(delta / 2.0);\\n float a =\\n sin_half_delta.y * sin_half_delta.y +\\n cos(source.y) * cos(target.y) * sin_half_delta.x * sin_half_delta.x;\\n return 2.0 * atan(sqrt(a), sqrt(1.0 - a));\\n}\\n\\nvec2 midPoint(vec2 source, vec2 target) {\\n vec2 center = target - source;\\n float r = length(center);\\n float theta = atan(center.y, center.x);\\n float thetaOffset = 0.314;\\n float r2 = r / 2.0 / cos(thetaOffset);\\n float theta2 = theta + thetaOffset;\\n vec2 mid = vec2(r2 * cos(theta2) + source.x, r2 * sin(theta2) + source.y);\\n return mid;\\n}\\nfloat bezier3(vec3 arr, float t) {\\n float ut = 1.0 - t;\\n return (arr.x * ut + arr.y * t) * ut + (arr.y * ut + arr.z * t) * t;\\n}\\n\\nvec2 interpolate(vec2 source, vec2 target, float angularDist, float t) {\\n if (abs(angularDist - PI) < 0.001) {\\n return (1.0 - t) * source + t * target;\\n }\\n float a = sin((1.0 - t) * angularDist) / sin(angularDist);\\n float b = sin(t * angularDist) / sin(angularDist);\\n vec2 sin_source = sin(source);\\n vec2 cos_source = cos(source);\\n vec2 sin_target = sin(target);\\n vec2 cos_target = cos(target);\\n float x = a * cos_source.y * cos_source.x + b * cos_target.y * cos_target.x;\\n float y = a * cos_source.y * sin_source.x + b * cos_target.y * sin_target.x;\\n float z = a * sin_source.y + b * sin_target.y;\\n return vec2(atan(y, x), atan(z, sqrt(x * x + y * y)));\\n\\n}\\n\\nvoid main() {\\n v_color = a_Color;\\n v_color.a = v_color.a * opacity;\\n vec2 source = radians(a_Instance.rg);\\n vec2 target = radians(a_Instance.ba);\\n float angularDist = getAngularDist(source, target);\\n float segmentIndex = a_Position.x;\\n float segmentRatio = getSegmentRatio(segmentIndex);\\n float indexDir = mix(-1.0, 1.0, step(segmentIndex, 0.0));\\n\\n if (u_line_type == LineTypeDash) {\\n v_distance_ratio = segmentIndex / segmentNumber;\\n float total_Distance = pixelDistance(source, target) / 2.0 * PI;\\n total_Distance = total_Distance * 16.0; // total_Distance*16.0 \\u8C03\\u6574\\u9ED8\\u8BA4\\u7684\\u6548\\u679C\\n v_dash_array = pow(2.0, 20.0 - u_Zoom) * u_dash_array / total_Distance;\\n }\\n\\n if (u_animate.x == Animate) {\\n v_distance_ratio = segmentIndex / segmentNumber;\\n }\\n\\n float nextSegmentRatio = getSegmentRatio(segmentIndex + indexDir);\\n v_distance_ratio = segmentIndex / segmentNumber;\\n\\n vec4 curr = project_position(vec4(degrees(interpolate(source, target, angularDist, segmentRatio)), 0.0, 1.0), a_Instance64Low.xy);\\n vec4 next = project_position(vec4(degrees(interpolate(source, target, angularDist, nextSegmentRatio)), 0.0, 1.0), a_Instance64Low.zw);\\n\\n // v_normal = getNormal((next.xy - curr.xy) * indexDir, a_Position.y);\\n vec2 offset = project_pixel(getExtrusionOffset((next.xy - curr.xy) * indexDir, a_Position.y));\\n // vec4 project_pos = project_position(vec4(curr.xy, 0, 1.0));\\n // gl_Position = project_common_position_to_clipspace(vec4(curr.xy + offset, curr.z, 1.0));\\n\\n v_line_data.g = a_Position.x; // \\u8BE5\\u9876\\u70B9\\u5728\\u5F27\\u7EBF\\u4E0A\\u7684\\u5206\\u6BB5\\u6392\\u5E8F\\n if (LineTexture == u_line_texture) {\\n float d_arcDistrance = length(source - target);\\n d_arcDistrance = project_pixel(d_arcDistrance);\\n\\n float d_pixelLen = project_pixel(u_icon_step) / 8.0;\\n v_line_data.b = floor(d_arcDistrance / d_pixelLen); // \\u8D34\\u56FE\\u5728\\u5F27\\u7EBF\\u4E0A\\u91CD\\u590D\\u7684\\u6570\\u91CF\\n\\n float lineOffsetWidth = length(offset + offset * sign(a_Position.y)); // \\u7EBF\\u6A2A\\u5411\\u504F\\u79FB\\u7684\\u8DDD\\u79BB\\n float linePixelSize = project_pixel(a_Size); // \\u5B9A\\u70B9\\u4F4D\\u7F6E\\u504F\\u79FB\\uFF0C\\u6309\\u5730\\u56FE\\u7B49\\u7EA7\\u7F29\\u653E\\u540E\\u7684\\u8DDD\\u79BB\\n v_line_data.a = lineOffsetWidth / linePixelSize; // \\u7EBF\\u56FE\\u5C42\\u8D34\\u56FE\\u90E8\\u5206\\u7684 v \\u5750\\u6807\\u503C\\n\\n v_iconMapUV = a_iconMapUV;\\n }\\n\\n gl_Position = project_common_position_to_clipspace(vec4(curr.xy + offset, 0, 1.0));\\n setPickingColor(a_PickingColor);\\n}\\n\\n\";\nconst lineStyleObj = {\n solid: 0.0,\n dash: 1.0\n};\nexport default class GreatCircleModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"texture\", void 0);\n _defineProperty(this, \"updateTexture\", () => {\n const {\n createTexture2D\n } = this.rendererService;\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas()\n });\n this.layer.render();\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.NEAREST,\n min: gl.NEAREST,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128\n });\n this.textures = [this.texture];\n });\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n INSTANCE: 10,\n INSTANCE_64LOW: 11,\n UV: 12\n });\n }\n getCommonUniformsInfo() {\n const {\n sourceColor,\n targetColor,\n textureBlend = 'normal',\n lineType = 'solid',\n dashArray = [10, 5],\n lineTexture = false,\n iconStep = 100,\n segmentNumber = 30\n } = this.layer.getLayerConfig();\n const {\n animateOption\n } = this.layer.getLayerConfig();\n if (dashArray.length === 2) {\n dashArray.push(0, 0);\n }\n if (this.rendererService.getDirty()) {\n var _this$texture;\n (_this$texture = this.texture) === null || _this$texture === void 0 || _this$texture.bind();\n }\n\n // 转化渐变色\n let useLinearColor = 0; // 默认不生效\n let sourceColorArr = [0, 0, 0, 0];\n let targetColorArr = [0, 0, 0, 0];\n if (sourceColor && targetColor) {\n sourceColorArr = rgb2arr(sourceColor);\n targetColorArr = rgb2arr(targetColor);\n useLinearColor = 1;\n }\n let u_time = this.layer.getLayerAnimateTime();\n if (isNaN(u_time)) {\n u_time = 0.0;\n }\n const commonOptions = {\n u_animate: this.animateOption2Array(animateOption),\n u_dash_array: dashArray,\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n segmentNumber,\n u_line_type: lineStyleObj[lineType] || 0.0,\n u_icon_step: iconStep,\n u_line_texture: lineTexture ? 1.0 : 0.0,\n // 传入线的标识\n u_textureBlend: textureBlend === 'normal' ? 0.0 : 1.0,\n u_time,\n // 纹理支持参数\n // u_texture: this.texture, // 贴图\n // 渐变色支持参数\n u_linearColor: useLinearColor\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n // public getAnimateUniforms(): IModelUniform {\n // const { animateOption } = this.layer.getLayerConfig() as ILayerConfig;\n // return {\n // u_animate: this.animateOption2Array(animateOption as IAnimateOption),\n // u_time: this.layer.getLayerAnimateTime(),\n // };\n // }\n\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.initUniformsBuffer();\n _this.updateTexture();\n _this.iconService.on('imageUpdate', _this.updateTexture);\n return _this.buildModels();\n })();\n }\n clearModels() {\n var _this$texture2;\n (_this$texture2 = this.texture) === null || _this$texture2 === void 0 || _this$texture2.destroy();\n this.iconService.off('imageUpdate', this.updateTexture);\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n const {\n segmentNumber = 30\n } = _this2.layer.getLayerConfig();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'lineGreatCircle',\n vertexShader: line_arc2d_vert,\n fragmentShader: line_arc_frag,\n triangulation: LineArcTriangulation,\n styleOption: {\n segmentNumber\n },\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n depth: {\n enable: false\n }\n });\n return [model];\n })();\n }\n registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n size = 1\n } = feature;\n return Array.isArray(size) ? [size[0]] : [size];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'instance',\n // 弧线起始点信息\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Instance',\n shaderLocation: this.attributeLocation.INSTANCE,\n buffer: {\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 4,\n update: (feature, featureIdx, vertex) => {\n return [vertex[3], vertex[4], vertex[5], vertex[6]];\n }\n }\n });\n\n // save low part for enabled double precision INSTANCE attribute\n this.styleAttributeService.registerStyleAttribute({\n name: 'instance64Low',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Instance64Low',\n shaderLocation: this.attributeLocation.INSTANCE_64LOW,\n buffer: {\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 4,\n update: (feature, featureIdx, vertex) => {\n return [fp64LowPart(vertex[3]), fp64LowPart(vertex[4]), fp64LowPart(vertex[5]), fp64LowPart(vertex[6])];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_iconMapUV',\n shaderLocation: this.attributeLocation.UV,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: feature => {\n const iconMap = this.iconService.getIconMap();\n const {\n texture\n } = feature;\n const {\n x,\n y\n } = iconMap[texture] || {\n x: 0,\n y: 0\n };\n return [x, y];\n }\n }\n });\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport { rgb2arr } from '@antv/l7-utils';\nimport BaseModel from \"../../core/BaseModel\";\nimport { SimpleLineTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/simple/simpleline_frag.glsl' */\nconst simple_line_frag = \"\\nlayout(std140) uniform commonUniorm {\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n vec4 u_dash_array;\\n float u_vertexScale: 1.0;\\n float u_linearColor: 0;\\n};\\nin float v_distanceScale;\\nin vec4 v_color;\\n//dash\\nin vec4 v_dash_array;\\n\\nout vec4 outputColor;\\nvoid main() {\\n if(u_dash_array!=vec4(0.0)){\\n float dashLength = mod(v_distanceScale, v_dash_array.x + v_dash_array.y + v_dash_array.z + v_dash_array.w);\\n if(!(dashLength < v_dash_array.x || (dashLength > (v_dash_array.x + v_dash_array.y) && dashLength < v_dash_array.x + v_dash_array.y + v_dash_array.z))) {\\n // \\u865A\\u7EBF\\u90E8\\u5206\\n discard;\\n };\\n }\\n if(u_linearColor==1.0){\\n outputColor = mix(u_sourceColor, u_targetColor, v_distanceScale);\\n outputColor.a *= v_color.a; // \\u5168\\u5C40\\u900F\\u660E\\u5EA6\\n }\\n else{\\n outputColor = v_color;\\n }\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/simple/simpleline_vert.glsl' */\nconst simple_line_vert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in vec4 a_SizeDistanceAndTotalDistance;\\n\\nlayout(std140) uniform commonUniorm {\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n vec4 u_dash_array;\\n float u_vertexScale: 1.0;\\n float u_linearColor: 0;\\n};\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"picking\\\"\\n\\nout vec4 v_color;\\nout float v_distanceScale;\\nout vec4 v_dash_array;\\n\\nvoid main() {\\n //dash\\u8F93\\u51FA\\n v_dash_array = pow(2.0, 20.0 - u_Zoom) * u_dash_array / a_SizeDistanceAndTotalDistance.a;\\n\\n v_color = a_Color;\\n v_distanceScale = a_SizeDistanceAndTotalDistance.b / a_SizeDistanceAndTotalDistance.a;\\n v_color.a = v_color.a * opacity;\\n vec4 project_pos = project_position(vec4(a_Position.xy, 0, 1.0), a_Position64Low);\\n\\n float h = float(a_Position.z) * u_vertexScale; // \\u7EBF\\u9876\\u70B9\\u7684\\u9AD8\\u5EA6 - \\u517C\\u5BB9\\u4E0D\\u5B58\\u5728\\u7B2C\\u4E09\\u4E2A\\u6570\\u503C\\u7684\\u60C5\\u51B5\\n\\n float lineHeight = a_SizeDistanceAndTotalDistance.y;\\n // \\u517C\\u5BB9 mapbox \\u5728\\u7EBF\\u9AD8\\u5EA6\\u4E0A\\u7684\\u6548\\u679C\\u8868\\u73B0\\u57FA\\u672C\\u4E00\\u81F4\\n if (\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\\n ) {\\n // \\u4FDD\\u6301\\u9AD8\\u5EA6\\u76F8\\u5BF9\\u4E0D\\u53D8\\n h *= 2.0 / pow(2.0, 20.0 - u_Zoom);\\n }\\n\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy, lineHeight + h, 1.0));\\n gl_PointSize = 10.0;\\n\\n}\\n\";\nexport default class SimpleLineModel extends BaseModel {\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9\n });\n }\n getCommonUniformsInfo() {\n const {\n sourceColor,\n targetColor,\n lineType = 'solid',\n dashArray = [10, 5, 0, 0],\n vertexHeightScale = 20.0\n } = this.layer.getLayerConfig();\n let u_dash_array = dashArray;\n if (lineType !== 'dash') {\n u_dash_array = [0, 0, 0, 0];\n }\n if (u_dash_array.length === 2) {\n u_dash_array.push(0, 0);\n }\n // 转化渐变色\n let useLinearColor = 0; // 默认不生效\n let sourceColorArr = [0, 0, 0, 0];\n let targetColorArr = [0, 0, 0, 0];\n if (sourceColor && targetColor) {\n sourceColorArr = rgb2arr(sourceColor);\n targetColorArr = rgb2arr(targetColor);\n useLinearColor = 1;\n }\n const commonOptions = {\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\n u_dash_array,\n // 顶点高度 scale\n u_vertexScale: vertexHeightScale,\n // 渐变色支持参数\n u_linearColor: useLinearColor\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.buildModels();\n })();\n }\n getShaders() {\n return {\n frag: simple_line_frag,\n vert: simple_line_vert,\n type: 'lineSimpleNormal'\n };\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.initUniformsBuffer();\n const {\n frag,\n vert,\n type\n } = _this2.getShaders();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: type,\n vertexShader: vert,\n fragmentShader: frag,\n triangulation: SimpleLineTriangulation,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n primitive: gl.LINES,\n depth: {\n enable: false\n },\n pick: false\n });\n return [model];\n })();\n }\n registerBuiltinAttributes() {\n // 注册 Position 属性 64 位地位部分,经纬度数据开启双精度,避免大于 20层级以上出现数据偏移\n this.registerPosition64LowAttribute();\n\n //size.x,size,y,distance,totalDistance\n this.styleAttributeService.registerStyleAttribute({\n name: 'sizeDistanceAndTotalDistance',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_SizeDistanceAndTotalDistance',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 4,\n update: (feature, featureIdx, vertex) => {\n const {\n size = 1\n } = feature;\n const a_Size = Array.isArray(size) ? [size[0], size[1]] : [size, 0];\n return [a_Size[0], a_Size[1], vertex[3], vertex[5]];\n }\n }\n });\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport { rgb2arr } from '@antv/l7-utils';\nimport BaseModel from \"../../core/BaseModel\";\nimport { LineTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/wall/wall_frag.glsl' */\nconst line_frag = \"#define Animate 0.0\\n#define LineTexture 1.0\\n\\n// line texture\\n\\nuniform sampler2D u_texture;\\nlayout(std140) uniform commonUniorm {\\n vec4 u_animate: [ 1., 2., 1.0, 0.2 ];\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n vec2 u_textSize;\\n float u_icon_step: 100;\\n float u_heightfixed;\\n float u_linearColor: 0;\\n float u_line_texture;\\n float u_textureBlend;\\n float u_iconStepCount;\\n float u_time;\\n};\\n\\n\\nin vec2 v_iconMapUV;\\nin vec4 v_color;\\nin float v_blur;\\nin vec4 v_dataset;\\n\\nout vec4 outputColor;\\n\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n float animateSpeed = 0.0; // \\u8FD0\\u52A8\\u901F\\u5EA6\\n float d_distance_ratio = v_dataset.r; // \\u5F53\\u524D\\u70B9\\u4F4D\\u8DDD\\u79BB\\u5360\\u7EBF\\u603B\\u957F\\u7684\\u6BD4\\u4F8B\\n float v = v_dataset.a;\\n\\n if(u_linearColor == 1.0) { // \\u4F7F\\u7528\\u6E10\\u53D8\\u989C\\u8272\\n outputColor = mix(u_sourceColor, u_targetColor, v);\\n } else { // \\u4F7F\\u7528 color \\u65B9\\u6CD5\\u4F20\\u5165\\u7684\\u989C\\u8272\\n outputColor = v_color;\\n }\\n\\n outputColor.a *= v_color.a; // \\u5168\\u5C40\\u900F\\u660E\\u5EA6\\n if(u_animate.x == Animate) {\\n animateSpeed = u_time / u_animate.y;\\n float alpha =1.0 - fract( mod(1.0- d_distance_ratio, u_animate.z)* (1.0/ u_animate.z) + animateSpeed);\\n alpha = (alpha + u_animate.w -1.0) / u_animate.w;\\n alpha = smoothstep(0., 1., alpha);\\n outputColor.a *= alpha;\\n }\\n\\n if(u_line_texture == LineTexture) { // while load texture\\n float aDistance = v_dataset.g; // \\u5F53\\u524D\\u9876\\u70B9\\u7684\\u8DDD\\u79BB\\n float d_texPixelLen = v_dataset.b; // \\u8D34\\u56FE\\u7684\\u50CF\\u7D20\\u957F\\u5EA6\\uFF0C\\u6839\\u636E\\u5730\\u56FE\\u5C42\\u7EA7\\u7F29\\u653E\\n float u = fract(mod(aDistance, d_texPixelLen)/d_texPixelLen - animateSpeed);\\n float v = v_dataset.a; // \\u7EBF\\u56FE\\u5C42\\u8D34\\u56FE\\u90E8\\u5206\\u7684 v \\u5750\\u6807\\u503C\\n\\n // \\u8BA1\\u7B97\\u7EB9\\u7406\\u95F4\\u9694 start\\n float flag = 0.0;\\n if(u > 1.0/u_iconStepCount) {\\n flag = 1.0;\\n }\\n u = fract(u*u_iconStepCount);\\n // \\u8BA1\\u7B97\\u7EB9\\u7406\\u95F4\\u9694 end\\n\\n vec2 uv= v_iconMapUV / u_textSize + vec2(u, v) / u_textSize * 64.;\\n vec4 pattern = texture(SAMPLER_2D(u_texture), uv);\\n\\n // Tip: \\u5224\\u65AD\\u7EB9\\u7406\\u95F4\\u9694\\n if(flag > 0.0) {\\n pattern = vec4(0.0);\\n }\\n\\n if(u_textureBlend == 0.0) { // normal\\n pattern.a = 0.0;\\n outputColor = filterColor(outputColor + pattern);\\n } else { // replace\\n pattern.a *= v_color.a;\\n if(outputColor.a <= 0.0) {\\n pattern.a = 0.0;\\n }\\n outputColor = filterColor(pattern);\\n }\\n }\\n\\n\\n // blur - AA\\n if(v < v_blur) {\\n outputColor.a = mix(0.0, outputColor.a, v/v_blur);\\n } else if(v > 1.0 - v_blur) {\\n outputColor.a = mix(outputColor.a, 0.0, (v - (1.0 - v_blur))/v_blur);\\n }\\n\\n outputColor = filterColor(outputColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/wall/wall_vert.glsl' */\nconst line_vert = \"#define Animate 0.0\\nlayout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in vec2 a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_iconMapUV;\\nlayout(location = ATTRIBUTE_LOCATION_DISTANCE_MITER_TOTAL) in vec3 a_Distance_Total_Miter;\\n\\nlayout(std140) uniform commonUniorm {\\n vec4 u_animate: [ 1., 2., 1.0, 0.2 ];\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n vec2 u_textSize;\\n float u_icon_step: 100;\\n float u_heightfixed;\\n float u_linearColor: 0;\\n float u_line_texture;\\n float u_textureBlend;\\n float u_iconStepCount;\\n float u_time;\\n};\\n\\n// texV \\u7EBF\\u56FE\\u5C42 - \\u8D34\\u56FE\\u90E8\\u5206\\u7684 v \\u5750\\u6807\\uFF08\\u7EBF\\u7684\\u5BBD\\u5EA6\\u65B9\\u5411\\uFF09\\nout vec2 v_iconMapUV;\\nout vec4 v_color;\\nout float v_blur;\\nout vec4 v_dataset;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"light\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n float a_Distance = a_Distance_Total_Miter.x;\\n float a_Miter = a_Distance_Total_Miter.y;\\n float a_Total_Distance = a_Distance_Total_Miter.z;\\n\\n float d_distance_ratio; // \\u5F53\\u524D\\u70B9\\u4F4D\\u8DDD\\u79BB\\u5360\\u7EBF\\u603B\\u957F\\u7684\\u6BD4\\u4F8B\\n float d_texPixelLen; // \\u8D34\\u56FE\\u7684\\u50CF\\u7D20\\u957F\\u5EA6\\uFF0C\\u6839\\u636E\\u5730\\u56FE\\u5C42\\u7EA7\\u7F29\\u653E\\n\\n v_iconMapUV = a_iconMapUV;\\n if (u_heightfixed < 1.0) {\\n // \\u9AD8\\u5EA6\\u968F zoom \\u8C03\\u6574\\n d_texPixelLen = project_pixel(u_icon_step);\\n } else {\\n d_texPixelLen = u_icon_step;\\n }\\n\\n if (u_animate.x == Animate || u_linearColor == 1.0) {\\n d_distance_ratio = a_Distance / a_Total_Distance;\\n }\\n\\n float miter = (a_Miter + 1.0) / 2.0;\\n // \\u8BBE\\u7F6E\\u6570\\u636E\\u96C6\\u7684\\u53C2\\u6570\\n v_dataset[0] = d_distance_ratio; // \\u5F53\\u524D\\u70B9\\u4F4D\\u8DDD\\u79BB\\u5360\\u7EBF\\u603B\\u957F\\u7684\\u6BD4\\u4F8B\\n v_dataset[1] = a_Distance; // \\u5F53\\u524D\\u9876\\u70B9\\u7684\\u8DDD\\u79BB\\n v_dataset[2] = d_texPixelLen; // \\u8D34\\u56FE\\u7684\\u50CF\\u7D20\\u957F\\u5EA6\\uFF0C\\u6839\\u636E\\u5730\\u56FE\\u5C42\\u7EA7\\u7F29\\u653E\\n v_dataset[3] = miter; // \\u7EBF\\u56FE\\u5C42\\u8D34\\u56FE\\u90E8\\u5206\\u7684 v \\u5750\\u6807\\u503C 0 - 1\\n\\n vec4 project_pos = project_position(vec4(a_Position.xy, 0, 1.0), a_Position64Low);\\n\\n float originSize = a_Size.x; // \\u56FA\\u5B9A\\u9AD8\\u5EA6\\n if (u_heightfixed < 1.0) {\\n originSize = project_float_meter(a_Size.x); // \\u9AD8\\u5EA6\\u968F zoom \\u8C03\\u6574\\n }\\n\\n float wallHeight = originSize * miter;\\n float lightWeight = calc_lighting(vec4(project_pos.xy, wallHeight, 1.0));\\n\\n v_blur = min(project_float_pixel(2.0) / originSize, 0.05);\\n v_color = vec4(a_Color.rgb * lightWeight, a_Color.w * opacity);\\n\\n // \\u517C\\u5BB9 mapbox \\u5728\\u7EBF\\u9AD8\\u5EA6\\u4E0A\\u7684\\u6548\\u679C\\u8868\\u73B0\\u57FA\\u672C\\u4E00\\u81F4\\n if (\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\\n ) {\\n // mapbox\\n // \\u4FDD\\u6301\\u9AD8\\u5EA6\\u76F8\\u5BF9\\u4E0D\\u53D8\\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\\n if (u_heightfixed > 0.0) {\\n wallHeight *= mapboxZoomScale;\\n }\\n }\\n\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy, wallHeight, 1.0));\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nexport default class LineWallModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"texture\", void 0);\n _defineProperty(this, \"updateTexture\", () => {\n const {\n createTexture2D\n } = this.rendererService;\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas()\n });\n this.layer.render();\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.NEAREST,\n min: gl.NEAREST,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128\n });\n this.textures = [this.texture];\n });\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n NORMAL: 12,\n UV: 13,\n DISTANCE_MITER_TOTAL: 15\n });\n }\n getCommonUniformsInfo() {\n const {\n sourceColor,\n targetColor,\n textureBlend = 'normal',\n heightfixed = false,\n lineTexture = false,\n iconStep = 100,\n iconStepCount = 1\n } = this.layer.getLayerConfig();\n const {\n animateOption\n } = this.layer.getLayerConfig();\n if (this.rendererService.getDirty()) {\n var _this$texture;\n (_this$texture = this.texture) === null || _this$texture === void 0 || _this$texture.bind();\n }\n\n // 转化渐变色\n let useLinearColor = 0; // 默认不生效\n let sourceColorArr = [0, 0, 0, 0];\n let targetColorArr = [0, 0, 0, 0];\n if (sourceColor && targetColor) {\n sourceColorArr = rgb2arr(sourceColor);\n targetColorArr = rgb2arr(targetColor);\n useLinearColor = 1;\n }\n const commonOptions = {\n u_animate: this.animateOption2Array(animateOption),\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n u_icon_step: iconStep,\n u_heightfixed: Number(heightfixed),\n // 渐变色支持参数\n u_linearColor: useLinearColor,\n u_line_texture: lineTexture ? 1.0 : 0.0,\n // 传入线的标识\n u_textureBlend: textureBlend === 'normal' ? 0.0 : 1.0,\n u_iconStepCount: iconStepCount,\n u_time: this.layer.getLayerAnimateTime() || 0\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n // public getAnimateUniforms(): IModelUniform {\n // const { animateOption } = this.layer.getLayerConfig() as ILayerConfig;\n // return {\n // u_animate: this.animateOption2Array(animateOption as IAnimateOption),\n // u_time: this.layer.getLayerAnimateTime(),\n // };\n // }\n\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.initUniformsBuffer();\n _this.updateTexture();\n _this.iconService.on('imageUpdate', _this.updateTexture);\n return _this.buildModels();\n })();\n }\n clearModels() {\n var _this$texture2;\n (_this$texture2 = this.texture) === null || _this$texture2 === void 0 || _this$texture2.destroy();\n this.iconService.off('imageUpdate', this.updateTexture);\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'lineWall',\n vertexShader: line_vert,\n fragmentShader: line_frag,\n triangulation: LineTriangulation,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n depth: {\n enable: false\n },\n blend: _this2.getBlend()\n });\n return [model];\n })();\n }\n registerBuiltinAttributes() {\n // 注册 Position 属性 64 位地位部分,经纬度数据开启双精度,避免大于 20层级以上出现数据偏移\n this.registerPosition64LowAttribute();\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: feature => {\n const {\n size = 1\n } = feature;\n return Array.isArray(size) ? [size[0], size[1]] : [size, 0];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'normal',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Normal',\n shaderLocation: this.attributeLocation.NORMAL,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n // @ts-ignore\n update: (feature, featureIdx, vertex, attributeIdx, normal) => {\n return normal;\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'distanceAndTotalAndMiter',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Distance_Total_Miter',\n shaderLocation: this.attributeLocation.DISTANCE_MITER_TOTAL,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: (feature, featureIdx, vertex) => {\n // [distance, miter, total_distance]\n return [vertex[3], vertex[4], vertex[5]];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_iconMapUV',\n shaderLocation: this.attributeLocation.UV,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: feature => {\n const iconMap = this.iconService.getIconMap();\n const {\n texture\n } = feature;\n const {\n x,\n y\n } = iconMap[texture] || {\n x: 0,\n y: 0\n };\n return [x, y];\n }\n }\n });\n }\n}","import ArcModel from \"./arc\";\nimport Arc3DModel from \"./arc_3d\";\nimport FlowLineModel from \"./flow\";\nimport GreatCircleModel from \"./great_circle\";\nimport LineModel from \"./line\";\nimport SimpleLineModel from \"./simple_line\";\nimport LineWallModel from \"./wall\";\nconst LineModels = {\n arc: ArcModel,\n arc3d: Arc3DModel,\n greatcircle: GreatCircleModel,\n wall: LineWallModel,\n line: LineModel,\n simple: SimpleLineModel,\n flowline: FlowLineModel,\n earthArc3d: Arc3DModel\n};\nexport default LineModels;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport BaseLayer from \"../core/BaseLayer\";\nimport LineModels from \"./models\";\nexport default class LineLayer extends BaseLayer {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"type\", 'LineLayer');\n _defineProperty(this, \"enableShaderEncodeStyles\", ['stroke', 'offsets', 'opacity', 'thetaOffset']);\n //注意顺序 4+2+1+1\n _defineProperty(this, \"arrowInsertCount\", 0);\n _defineProperty(this, \"defaultSourceConfig\", {\n data: [{\n lng1: 100,\n lat1: 30.0,\n lng2: 130,\n lat2: 30\n }],\n options: {\n parser: {\n type: 'json',\n x: 'lng1',\n y: 'lat1',\n x1: 'lng2',\n y1: 'lat2'\n }\n }\n });\n }\n buildModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const shape = _this.getModelType();\n _this.layerModel = new LineModels[shape](_this);\n yield _this.initLayerModels();\n })();\n }\n getDefaultConfig() {\n const type = this.getModelType();\n const defaultConfig = {\n line: {},\n linearline: {},\n simple: {},\n wall: {},\n arc3d: {\n blend: 'additive'\n },\n arc: {\n blend: 'additive'\n },\n greatcircle: {\n blend: 'additive'\n },\n tileLine: {},\n earthArc3d: {},\n flowline: {},\n arrow: {}\n };\n return defaultConfig[type];\n }\n getModelType() {\n var _shapeAttribute$scale;\n if (this.layerType) {\n return this.layerType;\n }\n const shapeAttribute = this.styleAttributeService.getLayerStyleAttribute('shape');\n const shape = shapeAttribute === null || shapeAttribute === void 0 || (_shapeAttribute$scale = shapeAttribute.scale) === null || _shapeAttribute$scale === void 0 ? void 0 : _shapeAttribute$scale.field;\n return shape || 'line';\n }\n processData(filterData) {\n // simple line 在接受 multiPolygon 的数据进行绘制的时候需要对数据进行拆解\n if (this.getModelType() !== 'simple') {\n return filterData;\n }\n const dataArray = [];\n filterData.map(data => {\n if (Array.isArray(data.coordinates) && Array.isArray(data.coordinates[0]) && Array.isArray(data.coordinates[0][0])) {\n const object = _objectSpread({}, data);\n data.coordinates.map(d => {\n dataArray.push(_objectSpread(_objectSpread({}, object), {}, {\n coordinates: d\n }));\n });\n } else {\n dataArray.push(data);\n }\n });\n return dataArray;\n }\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar _excluded = [\"collapsed\", \"layout\", \"defaultCollapsed\", \"defaultColsNumber\", \"defaultFormItemsNumber\", \"span\", \"searchGutter\", \"searchText\", \"resetText\", \"optionRender\", \"collapseRender\", \"onReset\", \"onCollapse\", \"labelWidth\", \"style\", \"split\", \"preserve\", \"ignoreRules\", \"showHiddenNum\", \"submitterColSpanProps\"];\nvar _document;\n/* eslint-disable no-param-reassign */\nimport { ProProvider, useIntl } from '@ant-design/pro-provider';\nimport { isBrowser, useMountMergeState } from '@ant-design/pro-utils';\nimport { Col, ConfigProvider, Form, Row } from 'antd';\nimport classNames from 'classnames';\nimport RcResizeObserver from 'rc-resize-observer';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport React, { useContext, useMemo } from 'react';\nimport { BaseForm } from \"../../BaseForm\";\nimport Actions from \"./Actions\";\nimport { useStyle } from \"./style\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar CONFIG_SPAN_BREAKPOINTS = {\n xs: 513,\n sm: 513,\n md: 785,\n lg: 992,\n xl: 1057,\n xxl: Infinity\n};\n/** 配置表单列变化的容器宽度断点 */\nvar BREAKPOINTS = {\n vertical: [\n // [breakpoint, cols, layout]\n [513, 1, 'vertical'], [785, 2, 'vertical'], [1057, 3, 'vertical'], [Infinity, 4, 'vertical']],\n default: [[513, 1, 'vertical'], [701, 2, 'vertical'], [1062, 3, 'horizontal'], [1352, 3, 'horizontal'], [Infinity, 4, 'horizontal']]\n};\n\n/**\n * 合并用户和默认的配置\n *\n * @param layout\n * @param width\n */\nvar getSpanConfig = function getSpanConfig(layout, width, span) {\n if (span && typeof span === 'number') {\n return {\n span: span,\n layout: layout\n };\n }\n var spanConfig = span ? ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].map(function (key) {\n return [CONFIG_SPAN_BREAKPOINTS[key], 24 / span[key], 'horizontal'];\n }) : BREAKPOINTS[layout || 'default'];\n var breakPoint = (spanConfig || BREAKPOINTS.default).find(function (item) {\n return width < item[0] + 16;\n } // 16 = 2 * (ant-row -8px margin)\n );\n if (!breakPoint) {\n return {\n span: 8,\n layout: 'horizontal'\n };\n }\n return {\n span: 24 / breakPoint[1],\n layout: breakPoint === null || breakPoint === void 0 ? void 0 : breakPoint[2]\n };\n};\nvar flatMapItems = function flatMapItems(items, ignoreRules) {\n return items === null || items === void 0 ? void 0 : items.flatMap(function (item) {\n var _item$type, _item$props;\n if ((item === null || item === void 0 || (_item$type = item.type) === null || _item$type === void 0 ? void 0 : _item$type.displayName) === 'ProForm-Group' && !((_item$props = item.props) !== null && _item$props !== void 0 && _item$props.title)) {\n return item.props.children;\n }\n if (ignoreRules && /*#__PURE__*/React.isValidElement(item)) {\n var _item$props2;\n return /*#__PURE__*/React.cloneElement(item, _objectSpread(_objectSpread({}, item.props), {}, {\n formItemProps: _objectSpread(_objectSpread({}, (_item$props2 = item.props) === null || _item$props2 === void 0 ? void 0 : _item$props2.formItemProps), {}, {\n rules: []\n })\n }));\n }\n return item;\n });\n};\nvar QueryFilterContent = function QueryFilterContent(props) {\n var _props$submitterColSp5, _props$submitterColSp6, _props$submitterColSp7, _props$submitterColSp8;\n var intl = useIntl();\n var _useContext = useContext(ProProvider),\n hashId = _useContext.hashId;\n var resetText = props.resetText || intl.getMessage('tableForm.reset', '重置');\n var searchText = props.searchText || intl.getMessage('tableForm.search', '搜索');\n var _useMergedState = useMergedState(function () {\n return props.defaultCollapsed && !!props.submitter;\n }, {\n value: props.collapsed,\n onChange: props.onCollapse\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n collapsed = _useMergedState2[0],\n setCollapsed = _useMergedState2[1];\n var optionRender = props.optionRender,\n collapseRender = props.collapseRender,\n split = props.split,\n items = props.items,\n spanSize = props.spanSize,\n showLength = props.showLength,\n searchGutter = props.searchGutter,\n showHiddenNum = props.showHiddenNum;\n var submitter = useMemo(function () {\n if (!props.submitter || optionRender === false) {\n return null;\n }\n return /*#__PURE__*/React.cloneElement(props.submitter, _objectSpread({\n searchConfig: {\n resetText: resetText,\n submitText: searchText\n },\n render: optionRender ? function (_, dom) {\n return optionRender(_objectSpread(_objectSpread({}, props), {}, {\n resetText: resetText,\n searchText: searchText\n }), props, dom);\n } : optionRender\n }, props.submitter.props));\n }, [props, resetText, searchText, optionRender]);\n\n // totalSpan 统计控件占的位置,计算 offset 保证查询按钮在最后一列\n var totalSpan = 0;\n var itemLength = 0;\n //首个表单项是否占满第一行\n var firstRowFull = false;\n // totalSize 统计控件占的份数\n var totalSize = 0;\n\n // for split compute\n var currentSpan = 0;\n\n // 处理过,包含是否需要隐藏的 数组\n var processedList = flatMapItems(items, props.ignoreRules).map(function (item, index) {\n var _item$props$colSize, _item$props3, _props2, _item$props4;\n // 如果 formItem 自己配置了 hidden,默认使用它自己的\n var colSize = /*#__PURE__*/React.isValidElement(item) ? (_item$props$colSize = item === null || item === void 0 || (_item$props3 = item.props) === null || _item$props3 === void 0 ? void 0 : _item$props3.colSize) !== null && _item$props$colSize !== void 0 ? _item$props$colSize : 1 : 1;\n var colSpan = Math.min(spanSize.span * (colSize || 1), 24);\n // 计算总的 totalSpan 长度\n totalSpan += colSpan;\n // 计算总的 colSize 长度\n totalSize += colSize;\n if (index === 0) {\n var _props;\n firstRowFull = colSpan === 24 && !(item !== null && item !== void 0 && (_props = item.props) !== null && _props !== void 0 && _props.hidden);\n }\n var hidden = (item === null || item === void 0 || (_props2 = item.props) === null || _props2 === void 0 ? void 0 : _props2.hidden) ||\n // 如果收起了\n collapsed && (firstRowFull ||\n // 如果 超过显示长度 且 总长度超过了 24\n totalSize > showLength) && !!index;\n itemLength += 1;\n var itemKey = /*#__PURE__*/React.isValidElement(item) && (item.key || \"\".concat((_item$props4 = item.props) === null || _item$props4 === void 0 ? void 0 : _item$props4.name)) || index;\n if ( /*#__PURE__*/React.isValidElement(item) && hidden) {\n if (!props.preserve) {\n return {\n itemDom: null,\n colSpan: 0,\n hidden: true\n };\n }\n return {\n itemDom: /*#__PURE__*/React.cloneElement(item, {\n hidden: true,\n key: itemKey || index\n }),\n hidden: true,\n colSpan: colSpan\n };\n }\n return {\n itemDom: item,\n colSpan: colSpan,\n hidden: false\n };\n });\n var doms = processedList.map(function (itemProps, index) {\n var _props3, _itemDom$props;\n var itemDom = itemProps.itemDom,\n colSpan = itemProps.colSpan;\n var hidden = itemDom === null || itemDom === void 0 || (_props3 = itemDom.props) === null || _props3 === void 0 ? void 0 : _props3.hidden;\n if (hidden) return itemDom;\n\n // 每一列的key, 一般是存在的\n var itemKey = /*#__PURE__*/React.isValidElement(itemDom) && (itemDom.key || \"\".concat((_itemDom$props = itemDom.props) === null || _itemDom$props === void 0 ? void 0 : _itemDom$props.name)) || index;\n if (24 - currentSpan % 24 < colSpan) {\n // 如果当前行空余位置放不下,那么折行\n totalSpan += 24 - currentSpan % 24;\n currentSpan += 24 - currentSpan % 24;\n }\n currentSpan += colSpan;\n if (split && currentSpan % 24 === 0 && index < itemLength - 1) {\n return /*#__PURE__*/_jsx(Col, {\n span: colSpan,\n className: \"\".concat(props.baseClassName, \"-row-split-line \").concat(props.baseClassName, \"-row-split \").concat(hashId).trim(),\n children: itemDom\n }, itemKey);\n }\n return /*#__PURE__*/_jsx(Col, {\n className: \"\".concat(props.baseClassName, \"-row-split \").concat(hashId).trim(),\n span: colSpan,\n children: itemDom\n }, itemKey);\n });\n var hiddenNum = showHiddenNum && processedList.filter(function (item) {\n return item.hidden;\n }).length;\n\n /** 是否需要展示 collapseRender */\n var needCollapseRender = useMemo(function () {\n if (totalSpan < 24 || totalSize <= showLength) {\n return false;\n }\n return true;\n }, [totalSize, showLength, totalSpan]);\n var offset = useMemo(function () {\n var _props$submitterColSp, _props$submitterColSp2;\n var offsetSpan = currentSpan % 24 + ((_props$submitterColSp = (_props$submitterColSp2 = props.submitterColSpanProps) === null || _props$submitterColSp2 === void 0 ? void 0 : _props$submitterColSp2.span) !== null && _props$submitterColSp !== void 0 ? _props$submitterColSp : spanSize.span);\n if (offsetSpan > 24) {\n var _props$submitterColSp3, _props$submitterColSp4;\n return 24 - ((_props$submitterColSp3 = (_props$submitterColSp4 = props.submitterColSpanProps) === null || _props$submitterColSp4 === void 0 ? void 0 : _props$submitterColSp4.span) !== null && _props$submitterColSp3 !== void 0 ? _props$submitterColSp3 : spanSize.span);\n }\n return 24 - offsetSpan;\n }, [currentSpan, currentSpan % 24 + ((_props$submitterColSp5 = (_props$submitterColSp6 = props.submitterColSpanProps) === null || _props$submitterColSp6 === void 0 ? void 0 : _props$submitterColSp6.span) !== null && _props$submitterColSp5 !== void 0 ? _props$submitterColSp5 : spanSize.span), (_props$submitterColSp7 = props.submitterColSpanProps) === null || _props$submitterColSp7 === void 0 ? void 0 : _props$submitterColSp7.span]);\n var context = useContext(ConfigProvider.ConfigContext);\n var baseClassName = context.getPrefixCls('pro-query-filter');\n return /*#__PURE__*/_jsxs(Row, {\n gutter: searchGutter,\n justify: \"start\",\n className: classNames(\"\".concat(baseClassName, \"-row\"), hashId),\n children: [doms, submitter && /*#__PURE__*/_jsx(Col, _objectSpread(_objectSpread({\n span: spanSize.span,\n offset: offset,\n className: classNames((_props$submitterColSp8 = props.submitterColSpanProps) === null || _props$submitterColSp8 === void 0 ? void 0 : _props$submitterColSp8.className)\n }, props.submitterColSpanProps), {}, {\n style: {\n textAlign: 'end'\n },\n children: /*#__PURE__*/_jsx(Form.Item, {\n label: \" \",\n colon: false,\n shouldUpdate: false,\n className: \"\".concat(baseClassName, \"-actions \").concat(hashId).trim(),\n children: /*#__PURE__*/_jsx(Actions, {\n hiddenNum: hiddenNum,\n collapsed: collapsed,\n collapseRender: needCollapseRender ? collapseRender : false,\n submitter: submitter,\n setCollapsed: setCollapsed\n }, \"pro-form-query-filter-actions\")\n })\n }), \"submitter\")]\n }, \"resize-observer-row\");\n};\nvar defaultWidth = isBrowser() ? (_document = document) === null || _document === void 0 || (_document = _document.body) === null || _document === void 0 ? void 0 : _document.clientWidth : 1024;\nfunction QueryFilter(props) {\n var controlCollapsed = props.collapsed,\n layout = props.layout,\n _props$defaultCollaps = props.defaultCollapsed,\n defaultCollapsed = _props$defaultCollaps === void 0 ? true : _props$defaultCollaps,\n defaultColsNumber = props.defaultColsNumber,\n defaultFormItemsNumber = props.defaultFormItemsNumber,\n span = props.span,\n _props$searchGutter = props.searchGutter,\n searchGutter = _props$searchGutter === void 0 ? 24 : _props$searchGutter,\n searchText = props.searchText,\n resetText = props.resetText,\n optionRender = props.optionRender,\n collapseRender = props.collapseRender,\n onReset = props.onReset,\n onCollapse = props.onCollapse,\n _props$labelWidth = props.labelWidth,\n labelWidth = _props$labelWidth === void 0 ? '80' : _props$labelWidth,\n style = props.style,\n split = props.split,\n _props$preserve = props.preserve,\n preserve = _props$preserve === void 0 ? true : _props$preserve,\n ignoreRules = props.ignoreRules,\n _props$showHiddenNum = props.showHiddenNum,\n showHiddenNum = _props$showHiddenNum === void 0 ? false : _props$showHiddenNum,\n submitterColSpanProps = props.submitterColSpanProps,\n rest = _objectWithoutProperties(props, _excluded);\n var context = useContext(ConfigProvider.ConfigContext);\n var baseClassName = context.getPrefixCls('pro-query-filter');\n var _useStyle = useStyle(baseClassName),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n var _useMountMergeState = useMountMergeState(function () {\n return typeof (style === null || style === void 0 ? void 0 : style.width) === 'number' ? style === null || style === void 0 ? void 0 : style.width : defaultWidth;\n }),\n _useMountMergeState2 = _slicedToArray(_useMountMergeState, 2),\n width = _useMountMergeState2[0],\n setWidth = _useMountMergeState2[1];\n var spanSize = useMemo(function () {\n return getSpanConfig(layout, width + 16, span);\n }, [layout, width, span]);\n var showLength = useMemo(function () {\n if (defaultFormItemsNumber !== undefined) {\n return defaultFormItemsNumber;\n }\n if (defaultColsNumber !== undefined) {\n // 折叠为一行,需要处理多行的情况请使用 defaultFormItemsNumber\n var oneRowControlsNumber = 24 / spanSize.span - 1;\n return defaultColsNumber > oneRowControlsNumber ? oneRowControlsNumber : defaultColsNumber;\n }\n return Math.max(1, 24 / spanSize.span - 1);\n }, [defaultColsNumber, defaultFormItemsNumber, spanSize.span]);\n\n /** 计算最大宽度防止溢出换行 */\n var formItemFixStyle = useMemo(function () {\n if (labelWidth && spanSize.layout !== 'vertical' && labelWidth !== 'auto') {\n return {\n labelCol: {\n flex: \"0 0 \".concat(labelWidth, \"px\")\n },\n wrapperCol: {\n style: {\n maxWidth: \"calc(100% - \".concat(labelWidth, \"px)\")\n }\n },\n style: {\n flexWrap: 'nowrap'\n }\n };\n }\n return undefined;\n }, [spanSize.layout, labelWidth]);\n return wrapSSR( /*#__PURE__*/_jsx(RcResizeObserver, {\n onResize: function onResize(offset) {\n if (width !== offset.width && offset.width > 17) {\n setWidth(offset.width);\n }\n },\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(baseClassName, \"-container \").concat(hashId),\n children: /*#__PURE__*/_jsx(BaseForm, _objectSpread(_objectSpread({\n isKeyPressSubmit: true,\n preserve: preserve\n }, rest), {}, {\n className: classNames(baseClassName, hashId, rest.className),\n onReset: onReset,\n style: style,\n layout: spanSize.layout,\n fieldProps: {\n style: {\n width: '100%'\n }\n },\n formItemProps: formItemFixStyle,\n groupProps: {\n titleStyle: {\n display: 'inline-block',\n marginInlineEnd: 16\n }\n },\n contentRender: function contentRender(items, renderSubmitter, form) {\n return /*#__PURE__*/_jsx(QueryFilterContent, {\n spanSize: spanSize,\n collapsed: controlCollapsed,\n form: form,\n submitterColSpanProps: submitterColSpanProps,\n collapseRender: collapseRender,\n defaultCollapsed: defaultCollapsed,\n onCollapse: onCollapse,\n optionRender: optionRender,\n submitter: renderSubmitter,\n items: items,\n split: split,\n baseClassName: baseClassName,\n resetText: props.resetText,\n searchText: props.searchText,\n searchGutter: searchGutter,\n preserve: preserve,\n ignoreRules: ignoreRules,\n showLength: showLength,\n showHiddenNum: showHiddenNum\n });\n }\n }))\n })\n }, \"resize-observer\"));\n}\nexport { QueryFilter };","import { DownOutlined } from '@ant-design/icons';\nimport { ProProvider, useIntl } from '@ant-design/pro-provider';\nimport { omitBoolean } from '@ant-design/pro-utils';\nimport { ConfigProvider, Space } from 'antd';\nimport React, { useContext } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar defaultCollapseRender = function defaultCollapseRender(collapsed, _, intl, hiddenNum) {\n if (collapsed) {\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [intl.getMessage('tableForm.collapsed', '展开'), hiddenNum && \"(\".concat(hiddenNum, \")\"), /*#__PURE__*/_jsx(DownOutlined, {\n style: {\n marginInlineStart: '0.5em',\n transition: '0.3s all',\n transform: \"rotate(\".concat(collapsed ? 0 : 0.5, \"turn)\")\n }\n })]\n });\n }\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [intl.getMessage('tableForm.expand', '收起'), /*#__PURE__*/_jsx(DownOutlined, {\n style: {\n marginInlineStart: '0.5em',\n transition: '0.3s all',\n transform: \"rotate(\".concat(collapsed ? 0 : 0.5, \"turn)\")\n }\n })]\n });\n};\n\n/**\n * FormFooter 的组件,可以自动进行一些配置\n *\n * @param props\n */\nvar Actions = function Actions(props) {\n var setCollapsed = props.setCollapsed,\n _props$collapsed = props.collapsed,\n collapsed = _props$collapsed === void 0 ? false : _props$collapsed,\n submitter = props.submitter,\n style = props.style,\n hiddenNum = props.hiddenNum;\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var intl = useIntl();\n var _useContext2 = useContext(ProProvider),\n hashId = _useContext2.hashId;\n var collapseRender = omitBoolean(props.collapseRender) || defaultCollapseRender;\n return /*#__PURE__*/_jsxs(Space, {\n style: style,\n size: 16,\n children: [submitter, props.collapseRender !== false && /*#__PURE__*/_jsx(\"a\", {\n className: \"\".concat(getPrefixCls('pro-query-filter-collapse-button'), \" \").concat(hashId).trim(),\n onClick: function onClick() {\n return setCollapsed(!collapsed);\n },\n children: collapseRender === null || collapseRender === void 0 ? void 0 : collapseRender(collapsed, props, intl, hiddenNum)\n })]\n });\n};\nexport default Actions;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { useStyle as useAntdStyle } from '@ant-design/pro-provider';\nvar genProStyle = function genProStyle(token) {\n return _defineProperty({}, token.componentCls, _defineProperty(_defineProperty(_defineProperty(_defineProperty({\n '&&': {\n padding: 24\n }\n }, \"\".concat(token.antCls, \"-form-item\"), {\n marginBlock: 0\n }), \"\".concat(token.proComponentsCls, \"-form-group-title\"), {\n marginBlock: 0\n }), '&-row', {\n rowGap: 24,\n '&-split': _defineProperty(_defineProperty({}, \"\".concat(token.proComponentsCls, \"-form-group\"), {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS\n }), '&:last-child', {\n marginBlockEnd: 12\n }),\n '&-split-line': {\n '&:after': {\n position: 'absolute',\n width: '100%',\n content: '\"\"',\n height: 1,\n insetBlockEnd: -12,\n borderBlockEnd: \"1px dashed \".concat(token.colorSplit)\n }\n }\n }), '&-collapse-button', {\n display: 'flex',\n alignItems: 'center',\n color: token.colorPrimary\n }));\n};\nexport function useStyle(prefixCls) {\n return useAntdStyle('QueryFilter', function (token) {\n var proToken = _objectSpread(_objectSpread({}, token), {}, {\n componentCls: \".\".concat(prefixCls)\n });\n return [genProStyle(proToken)];\n });\n}","'use strict';\n\nvar VectorTileFeature = require('./vectortilefeature.js');\n\nmodule.exports = VectorTileLayer;\n\nfunction VectorTileLayer(pbf, end) {\n // Public\n this.version = 1;\n this.name = null;\n this.extent = 4096;\n this.length = 0;\n\n // Private\n this._pbf = pbf;\n this._keys = [];\n this._values = [];\n this._features = [];\n\n pbf.readFields(readLayer, this, end);\n\n this.length = this._features.length;\n}\n\nfunction readLayer(tag, layer, pbf) {\n if (tag === 15) layer.version = pbf.readVarint();\n else if (tag === 1) layer.name = pbf.readString();\n else if (tag === 5) layer.extent = pbf.readVarint();\n else if (tag === 2) layer._features.push(pbf.pos);\n else if (tag === 3) layer._keys.push(pbf.readString());\n else if (tag === 4) layer._values.push(readValueMessage(pbf));\n}\n\nfunction readValueMessage(pbf) {\n var value = null,\n end = pbf.readVarint() + pbf.pos;\n\n while (pbf.pos < end) {\n var tag = pbf.readVarint() >> 3;\n\n value = tag === 1 ? pbf.readString() :\n tag === 2 ? pbf.readFloat() :\n tag === 3 ? pbf.readDouble() :\n tag === 4 ? pbf.readVarint64() :\n tag === 5 ? pbf.readVarint() :\n tag === 6 ? pbf.readSVarint() :\n tag === 7 ? pbf.readBoolean() : null;\n }\n\n return value;\n}\n\n// return feature `i` from this layer as a `VectorTileFeature`\nVectorTileLayer.prototype.feature = function(i) {\n if (i < 0 || i >= this._features.length) throw new Error('feature index out of bounds');\n\n this._pbf.pos = this._features[i];\n\n var end = this._pbf.readVarint() + this._pbf.pos;\n return new VectorTileFeature(this._pbf, end, this.extent, this._keys, this._values);\n};\n","export default function(x) {\n return +x;\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix } from '@antv/util';\n/**\n * Adaptor return default options for raw options.\n */\nexport function useDefaultAdaptor(adaptor) {\n return (options, ...rest) => deepMix({}, adaptor(options, ...rest), options);\n}\n/**\n * Adaptor return options override raw options.\n */\nexport function useOverrideAdaptor(adaptor) {\n return (options, ...rest) => deepMix({}, options, adaptor(options, ...rest));\n}\nexport function isObject(d) {\n if (d instanceof Date)\n return false;\n return typeof d === 'object';\n}\nexport function mergeData(dataDescriptor, dataValue) {\n if (!dataDescriptor)\n return dataValue;\n if (Array.isArray(dataDescriptor))\n return dataDescriptor;\n if (isObject(dataDescriptor)) {\n const { value = dataValue } = dataDescriptor, rest = __rest(dataDescriptor, [\"value\"]);\n return Object.assign(Object.assign({}, rest), { value });\n }\n return dataDescriptor;\n}\n//# sourceMappingURL=utils.js.map","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","import * as glMatrix from \"./common.js\";\n/**\n * 3x3 Matrix\n * @module mat3\n */\n\n/**\n * Creates a new identity mat3\n *\n * @returns {mat3} a new 3x3 matrix\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(9);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n }\n\n out[0] = 1;\n out[4] = 1;\n out[8] = 1;\n return out;\n}\n/**\n * Copies the upper-left 3x3 values into the given mat3.\n *\n * @param {mat3} out the receiving 3x3 matrix\n * @param {ReadonlyMat4} a the source 4x4 matrix\n * @returns {mat3} out\n */\n\nexport function fromMat4(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[4];\n out[4] = a[5];\n out[5] = a[6];\n out[6] = a[8];\n out[7] = a[9];\n out[8] = a[10];\n return out;\n}\n/**\n * Creates a new mat3 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat3} a matrix to clone\n * @returns {mat3} a new 3x3 matrix\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(9);\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 return out;\n}\n/**\n * Copy the values from one mat3 to another\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\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 return out;\n}\n/**\n * Create a new mat3 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} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} A new mat3\n */\n\nexport function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\n * Set the components of a mat3 to the given values\n *\n * @param {mat3} 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} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} out\n */\n\nexport function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\n * Set a mat3 to the identity matrix\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\n\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Transpose the values of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\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 var a01 = a[1],\n a02 = a[2],\n a12 = a[5];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a01;\n out[5] = a[7];\n out[6] = a02;\n out[7] = a12;\n } else {\n out[0] = a[0];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a[1];\n out[4] = a[4];\n out[5] = a[7];\n out[6] = a[2];\n out[7] = a[5];\n out[8] = a[8];\n }\n\n return out;\n}\n/**\n * Inverts a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b01 = a22 * a11 - a12 * a21;\n var b11 = -a22 * a10 + a12 * a20;\n var b21 = a21 * a10 - a11 * a20; // Calculate the determinant\n\n var det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = b01 * det;\n out[1] = (-a22 * a01 + a02 * a21) * det;\n out[2] = (a12 * a01 - a02 * a11) * det;\n out[3] = b11 * det;\n out[4] = (a22 * a00 - a02 * a20) * det;\n out[5] = (-a12 * a00 + a02 * a10) * det;\n out[6] = b21 * det;\n out[7] = (-a21 * a00 + a01 * a20) * det;\n out[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n}\n/**\n * Calculates the adjugate of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n out[0] = a11 * a22 - a12 * a21;\n out[1] = a02 * a21 - a01 * a22;\n out[2] = a01 * a12 - a02 * a11;\n out[3] = a12 * a20 - a10 * a22;\n out[4] = a00 * a22 - a02 * a20;\n out[5] = a02 * a10 - a00 * a12;\n out[6] = a10 * a21 - a11 * a20;\n out[7] = a01 * a20 - a00 * a21;\n out[8] = a00 * a11 - a01 * a10;\n return out;\n}\n/**\n * Calculates the determinant of a mat3\n *\n * @param {ReadonlyMat3} a the source matrix\n * @returns {Number} determinant of a\n */\n\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n}\n/**\n * Multiplies two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b00 = b[0],\n b01 = b[1],\n b02 = b[2];\n var b10 = b[3],\n b11 = b[4],\n b12 = b[5];\n var b20 = b[6],\n b21 = b[7],\n b22 = b[8];\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n}\n/**\n * Translate a mat3 by the given vector\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to translate\n * @param {ReadonlyVec2} v vector to translate by\n * @returns {mat3} out\n */\n\nexport function translate(out, a, v) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n x = v[0],\n y = v[1];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a10;\n out[4] = a11;\n out[5] = a12;\n out[6] = x * a00 + y * a10 + a20;\n out[7] = x * a01 + y * a11 + a21;\n out[8] = x * a02 + y * a12 + a22;\n return out;\n}\n/**\n * Rotates a mat3 by the given angle\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nexport function rotate(out, a, rad) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c * a00 + s * a10;\n out[1] = c * a01 + s * a11;\n out[2] = c * a02 + s * a12;\n out[3] = c * a10 - s * a00;\n out[4] = c * a11 - s * a01;\n out[5] = c * a12 - s * a02;\n out[6] = a20;\n out[7] = a21;\n out[8] = a22;\n return out;\n}\n/**\n * Scales the mat3 by the dimensions in the given vec2\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\n * @returns {mat3} out\n **/\n\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1];\n out[0] = x * a[0];\n out[1] = x * a[1];\n out[2] = x * a[2];\n out[3] = y * a[3];\n out[4] = y * a[4];\n out[5] = y * a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.translate(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Translation vector\n * @returns {mat3} out\n */\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] = 1;\n out[5] = 0;\n out[6] = v[0];\n out[7] = v[1];\n out[8] = 1;\n return out;\n}\n/**\n * Creates a matrix from a given angle\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.rotate(dest, dest, rad);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nexport function fromRotation(out, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = -s;\n out[4] = c;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 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 * mat3.identity(dest);\n * mat3.scale(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Scaling vector\n * @returns {mat3} out\n */\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] = v[1];\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Copies the values from a mat2d into a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat2d} a the matrix to copy\n * @returns {mat3} out\n **/\n\nexport function fromMat2d(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = 0;\n out[3] = a[2];\n out[4] = a[3];\n out[5] = 0;\n out[6] = a[4];\n out[7] = a[5];\n out[8] = 1;\n return out;\n}\n/**\n * Calculates a 3x3 matrix from the given quaternion\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat3} out\n */\n\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[3] = yx - wz;\n out[6] = zx + wy;\n out[1] = yx + wz;\n out[4] = 1 - xx - zz;\n out[7] = zy - wx;\n out[2] = zx - wy;\n out[5] = zy + wx;\n out[8] = 1 - xx - yy;\n return out;\n}\n/**\n * Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyMat4} a Mat4 to derive the normal matrix from\n *\n * @returns {mat3} out\n */\n\nexport function normalFromMat4(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n return out;\n}\n/**\n * Generates a 2D projection matrix with the given bounds\n *\n * @param {mat3} out mat3 frustum matrix will be written into\n * @param {number} width Width of your gl context\n * @param {number} height Height of gl context\n * @returns {mat3} out\n */\n\nexport function projection(out, width, height) {\n out[0] = 2 / width;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = -2 / height;\n out[5] = 0;\n out[6] = -1;\n out[7] = 1;\n out[8] = 1;\n return out;\n}\n/**\n * Returns a string representation of a mat3\n *\n * @param {ReadonlyMat3} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\n\nexport function str(a) {\n return \"mat3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \")\";\n}\n/**\n * Returns Frobenius norm of a mat3\n *\n * @param {ReadonlyMat3} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\n\nexport function frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);\n}\n/**\n * Adds two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\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 return out;\n}\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\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 return out;\n}\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat3} out\n */\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 return out;\n}\n/**\n * Adds two mat3's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat3} out the receiving vector\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat3} out\n */\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 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 {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];\n}\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3],\n a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7],\n a8 = a[8];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));\n}\n/**\n * Alias for {@link mat3.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link mat3.subtract}\n * @function\n */\n\nexport var sub = subtract;","'use strict';\n\nvar isArrayish = require('is-arrayish');\n\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\n\nvar swizzle = module.exports = function swizzle(args) {\n\tvar results = [];\n\n\tfor (var i = 0, len = args.length; i < len; i++) {\n\t\tvar arg = args[i];\n\n\t\tif (isArrayish(arg)) {\n\t\t\t// http://jsperf.com/javascript-array-concat-vs-push/98\n\t\t\tresults = concat.call(results, slice.call(arg));\n\t\t} else {\n\t\t\tresults.push(arg);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nswizzle.wrap = function (fn) {\n\treturn function () {\n\t\treturn fn(swizzle(arguments));\n\t};\n};\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { isNumber } from '@antv/util';\nimport { Marker } from '@antv/component';\nimport { line } from '@antv/vendor/d3-shape';\nimport { createElement } from '../../utils/createElement';\nimport { applyStyle } from '../utils';\nimport { subObject } from '../../utils/helper';\nimport { select } from '../../utils/selection';\nimport { dist } from '../../utils/vector';\nfunction getConnectorPoint(shape) {\n const { min: [x0, y0], max: [x1, y1], } = shape.getLocalBounds();\n let x = 0;\n let y = 0;\n if (x0 > 0)\n x = x0;\n if (x1 < 0)\n x = x1;\n if (y0 > 0)\n y = y0;\n if (y1 < 0)\n y = y1;\n return [x, y];\n}\nfunction inferBackgroundBounds(textShape, padding = []) {\n const [top = 0, right = 0, bottom = top, left = right] = padding;\n const container = textShape.parentNode;\n const angle = container.getEulerAngles();\n container.setEulerAngles(0);\n const { min, halfExtents } = textShape.getLocalBounds();\n const [x, y] = min;\n const [hw, hh] = halfExtents;\n container.setEulerAngles(angle);\n return {\n x: x - left,\n y: y - top,\n width: hw * 2 + left + right,\n height: hh * 2 + top + bottom,\n };\n}\nconst cos = (p0, p1, p2) => {\n const a = dist(p0, p1);\n const b = dist(p1, p2);\n const c = dist(p2, p0);\n return (Math.pow(a, 2) + Math.pow(b, 2) - Math.pow(c, 2)) / (2 * a * b);\n};\n// A path from element to label.\n// Adapted drawLabelLine from https://github.com/antvis/G2/blob/master/src/geometry/label/layout/pie/spider.ts\nfunction inferConnectorPath(shape, end, control, coordCenter, left = true, top = true) {\n const path = (points) => line()(points);\n if (!end[0] && !end[1])\n return path([getConnectorPoint(shape), end]);\n if (!control.length)\n return path([[0, 0], end]);\n const [inflection, start] = control;\n const p1 = [...start];\n const p2 = [...inflection];\n // Label has been adjusted, so add offset to the label.\n if (start[0] !== inflection[0]) {\n const offset = left ? -4 : 4;\n p1[1] = start[1];\n // For the label in the first quadrant.\n if (top && !left) {\n p1[0] = Math.max(inflection[0], start[0] - offset);\n if (start[1] < inflection[1]) {\n p2[1] = p1[1];\n }\n else {\n p2[1] = inflection[1];\n p2[0] = Math.max(p2[0], p1[0] - offset);\n }\n }\n // For the label in the second quadrant.\n if (!top && !left) {\n p1[0] = Math.max(inflection[0], start[0] - offset);\n if (start[1] > inflection[1]) {\n p2[1] = p1[1];\n }\n else {\n p2[1] = inflection[1];\n p2[0] = Math.max(p2[0], p1[0] - offset);\n }\n }\n // For the label in the third quadrant.\n if (!top && left) {\n p1[0] = Math.min(inflection[0], start[0] - offset);\n if (start[1] > inflection[1]) {\n p2[1] = p1[1];\n }\n else {\n p2[1] = inflection[1];\n p2[0] = Math.min(p2[0], p1[0] - offset);\n }\n }\n // For the label in the fourth quadrant.\n if (top && left) {\n p1[0] = Math.min(inflection[0], start[0] - offset);\n if (start[1] < inflection[1]) {\n p2[1] = p1[1];\n }\n else {\n p2[1] = inflection[1];\n p2[0] = Math.min(p2[0], p1[0] - offset);\n }\n }\n }\n return path([start, p1, p2, inflection, end]);\n}\nexport const Advance = createElement((g) => {\n const _a = g.attributes, { className, \n // Do not pass className\n class: _c, transform, rotate, labelTransform, labelTransformOrigin, x, y, x0 = x, y0 = y, text, background, connector, startMarker, endMarker, coordCenter, innerHTML } = _a, rest = __rest(_a, [\"className\", \"class\", \"transform\", \"rotate\", \"labelTransform\", \"labelTransformOrigin\", \"x\", \"y\", \"x0\", \"y0\", \"text\", \"background\", \"connector\", \"startMarker\", \"endMarker\", \"coordCenter\", \"innerHTML\"]);\n g.style.transform = `translate(${x}, ${y})`;\n // Position is invalid, do not render the UI,\n // or clear previous elements.\n if ([x, y, x0, y0].some((v) => !isNumber(v))) {\n g.children.forEach((d) => d.remove());\n return;\n }\n const _b = subObject(rest, 'background'), { padding } = _b, backgroundStyle = __rest(_b, [\"padding\"]);\n const _d = subObject(rest, 'connector'), { points: controlPoints = [] } = _d, connectorStyle = __rest(_d, [\"points\"]);\n let textShape;\n if (innerHTML) {\n textShape = select(g)\n .maybeAppend('html', 'html', className)\n .style('zIndex', 0)\n .style('innerHTML', innerHTML)\n .call(applyStyle, Object.assign({ transform: labelTransform, transformOrigin: labelTransformOrigin }, rest))\n .node();\n }\n else {\n textShape = select(g)\n .maybeAppend('text', 'text')\n .style('zIndex', 0)\n .style('text', text)\n .call(applyStyle, Object.assign({ textBaseline: 'middle', transform: labelTransform, transformOrigin: labelTransformOrigin }, rest))\n .node();\n }\n const rect = select(g)\n .maybeAppend('background', 'rect')\n .style('zIndex', -1)\n .call(applyStyle, inferBackgroundBounds(textShape, padding))\n .call(applyStyle, background ? backgroundStyle : {})\n .node();\n const left = +x0 < coordCenter[0];\n const top = +y0 < coordCenter[1];\n const end = [+x0 - +x, +y0 - +y];\n const connectorPath = inferConnectorPath(rect, end, controlPoints, coordCenter, left, top);\n const markerStart = startMarker &&\n new Marker({\n id: 'startMarker',\n style: Object.assign({ x: 0, y: 0 }, subObject(rest, 'startMarker')),\n });\n const markerEnd = endMarker &&\n new Marker({\n id: 'endMarker',\n style: Object.assign({ x: 0, y: 0 }, subObject(rest, 'endMarker')),\n });\n select(g)\n .maybeAppend('connector', 'path')\n .style('zIndex', 0)\n .style('d', connectorPath)\n .style('markerStart', markerStart)\n .style('markerEnd', markerEnd)\n .call(applyStyle, connector ? connectorStyle : {});\n});\n//# sourceMappingURL=advance.js.map","/* eslint-disable no-nested-ternary */\nvar PIXEL_PATTERN = /margin|padding|width|height|max|min|offset/;\nvar removePixel = {\n left: true,\n top: true\n};\nvar floatMap = {\n cssFloat: 1,\n styleFloat: 1,\n float: 1\n};\nfunction getComputedStyle(node) {\n return node.nodeType === 1 ? node.ownerDocument.defaultView.getComputedStyle(node, null) : {};\n}\nfunction getStyleValue(node, type, value) {\n type = type.toLowerCase();\n if (value === 'auto') {\n if (type === 'height') {\n return node.offsetHeight;\n }\n if (type === 'width') {\n return node.offsetWidth;\n }\n }\n if (!(type in removePixel)) {\n removePixel[type] = PIXEL_PATTERN.test(type);\n }\n return removePixel[type] ? parseFloat(value) || 0 : value;\n}\nexport function get(node, name) {\n var length = arguments.length;\n var style = getComputedStyle(node);\n name = floatMap[name] ? 'cssFloat' in node.style ? 'cssFloat' : 'styleFloat' : name;\n return length === 1 ? style : getStyleValue(node, name, style[name] || node.style[name]);\n}\nexport function set(node, name, value) {\n var length = arguments.length;\n name = floatMap[name] ? 'cssFloat' in node.style ? 'cssFloat' : 'styleFloat' : name;\n if (length === 3) {\n if (typeof value === 'number' && PIXEL_PATTERN.test(name)) {\n value = \"\".concat(value, \"px\");\n }\n node.style[name] = value; // Number\n return value;\n }\n for (var x in name) {\n if (name.hasOwnProperty(x)) {\n set(node, x, name[x]);\n }\n }\n return getComputedStyle(node);\n}\nexport function getOuterWidth(el) {\n if (el === document.body) {\n return document.documentElement.clientWidth;\n }\n return el.offsetWidth;\n}\nexport function getOuterHeight(el) {\n if (el === document.body) {\n return window.innerHeight || document.documentElement.clientHeight;\n }\n return el.offsetHeight;\n}\nexport function getDocSize() {\n var width = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth);\n var height = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n return {\n width: width,\n height: height\n };\n}\nexport function getClientSize() {\n var width = document.documentElement.clientWidth;\n var height = window.innerHeight || document.documentElement.clientHeight;\n return {\n width: width,\n height: height\n };\n}\nexport function getScroll() {\n return {\n scrollLeft: Math.max(document.documentElement.scrollLeft, document.body.scrollLeft),\n scrollTop: Math.max(document.documentElement.scrollTop, document.body.scrollTop)\n };\n}\nexport function getOffset(node) {\n var box = node.getBoundingClientRect();\n var docElem = document.documentElement;\n\n // < ie8 不支持 win.pageXOffset, 则使用 docElem.scrollLeft\n return {\n left: box.left + (window.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || document.body.clientLeft || 0),\n top: box.top + (window.pageYOffset || docElem.scrollTop) - (docElem.clientTop || document.body.clientTop || 0)\n };\n}","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(r, e) {\n return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// 参考 d3-ticks nice 的实现\n// https://github.com/d3/d3-scale\nimport { tickIncrement } from './ticks';\nexport const d3LinearNice = (min, max, count = 5) => {\n const d = [min, max];\n let i0 = 0;\n let i1 = d.length - 1;\n let start = d[i0];\n let stop = d[i1];\n let step;\n if (stop < start) {\n [start, stop] = [stop, start];\n [i0, i1] = [i1, i0];\n }\n step = tickIncrement(start, stop, count);\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n }\n else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n }\n else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n }\n return d;\n};\n//# sourceMappingURL=d3-linear-nice.js.map","export function getUniformLengthByType(type) {\n let arrayLength = 0;\n switch (type) {\n case 'vec2':\n case 'ivec2':\n arrayLength = 2;\n break;\n case 'vec3':\n case 'ivec3':\n arrayLength = 3;\n break;\n case 'vec4':\n case 'ivec4':\n case 'mat2':\n arrayLength = 4;\n break;\n case 'mat3':\n arrayLength = 9;\n break;\n case 'mat4':\n arrayLength = 16;\n break;\n default:\n }\n return arrayLength;\n}\nconst uniformRegExp = /uniform\\s+(bool|float|int|vec2|vec3|vec4|ivec2|ivec3|ivec4|mat2|mat3|mat4|sampler2D|samplerCube)\\s+([\\s\\S]*?);/g;\nfunction fillUniforms(content, uniformPrefix = false) {\n const uniforms = {};\n content = content.replace(uniformRegExp, (_, type, c) => {\n const defaultValues = c.split(':');\n const uniformName = defaultValues[0].trim();\n let defaultValue = '';\n if (defaultValues.length > 1) {\n defaultValue = defaultValues[1].trim();\n }\n\n // set default value for uniform according to its type\n // eg. vec2 u -> [0.0, 0.0]\n switch (type) {\n case 'bool':\n defaultValue = defaultValue === 'true';\n break;\n case 'float':\n case 'int':\n defaultValue = Number(defaultValue);\n break;\n case 'vec2':\n case 'vec3':\n case 'vec4':\n case 'ivec2':\n case 'ivec3':\n case 'ivec4':\n case 'mat2':\n case 'mat3':\n case 'mat4':\n if (defaultValue) {\n defaultValue = defaultValue.replace('[', '').replace(']', '').split(',').reduce((prev, cur) => {\n prev.push(Number(cur.trim()));\n return prev;\n }, []);\n } else {\n defaultValue = new Array(getUniformLengthByType(type)).fill(0);\n }\n break;\n default:\n }\n\n // @ts-ignore\n uniforms[uniformName] = defaultValue;\n return `${uniformPrefix ? 'uniform ' : ''}${type} ${uniformName};\\n`;\n });\n return {\n content,\n uniforms\n };\n}\nexport function extractUniforms(content) {\n // eslint-disable-next-line prefer-const\n let {\n content: c,\n uniforms: u\n } = fillUniforms(content, true);\n c = c.replace(/(\\s*uniform\\s*.*\\s*){((?:\\s*.*\\s*)*?)};/g, (substr, header, uniforms) => {\n uniforms = uniforms.trim().replace(/^.*$/gm, uniform => {\n return `uniform ${uniform}`;\n });\n const {\n content: cc,\n uniforms: uu\n } = fillUniforms(uniforms);\n Object.assign(u, uu);\n return `${header}{\\n${cc}\\n};`;\n });\n return {\n content: c,\n uniforms: u\n };\n}\nexport function removeDuplicateUniforms(content) {\n const uniforms = {};\n return content.replace(uniformRegExp, (_, type, uniformName) => {\n const name = uniformName.trim();\n if (!uniforms[name]) {\n uniforms[name] = true;\n return `uniform ${type} ${name};\\n`;\n } else {\n return '';\n }\n });\n}","\"use strict\";\n'use client';\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\nvar _slicedToArray2 = _interopRequireDefault(require(\"@babel/runtime/helpers/slicedToArray\"));\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\nvar React = _interopRequireWildcard(require(\"react\"));\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\nvar _colors = require(\"@ant-design/colors\");\nvar _Context = _interopRequireDefault(require(\"./Context\"));\nvar _IconBase = _interopRequireDefault(require(\"./IconBase\"));\nvar _twoTonePrimaryColor = require(\"./twoTonePrimaryColor\");\nvar _utils = require(\"../utils\");\nvar _excluded = [\"className\", \"icon\", \"spin\", \"rotate\", \"tabIndex\", \"onClick\", \"twoToneColor\"];\n// Initial setting\n// should move it to antd main repo?\n(0, _twoTonePrimaryColor.setTwoToneColor)(_colors.blue.primary);\n\n// https://github.com/DefinitelyTyped/DefinitelyTyped/issues/34757#issuecomment-488848720\n\nvar Icon = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var className = props.className,\n icon = props.icon,\n spin = props.spin,\n rotate = props.rotate,\n tabIndex = props.tabIndex,\n onClick = props.onClick,\n twoToneColor = props.twoToneColor,\n restProps = (0, _objectWithoutProperties2.default)(props, _excluded);\n var _React$useContext = React.useContext(_Context.default),\n _React$useContext$pre = _React$useContext.prefixCls,\n prefixCls = _React$useContext$pre === void 0 ? 'anticon' : _React$useContext$pre,\n rootClassName = _React$useContext.rootClassName;\n var classString = (0, _classnames.default)(rootClassName, prefixCls, (0, _defineProperty2.default)((0, _defineProperty2.default)({}, \"\".concat(prefixCls, \"-\").concat(icon.name), !!icon.name), \"\".concat(prefixCls, \"-spin\"), !!spin || icon.name === 'loading'), className);\n var iconTabIndex = tabIndex;\n if (iconTabIndex === undefined && onClick) {\n iconTabIndex = -1;\n }\n var svgStyle = rotate ? {\n msTransform: \"rotate(\".concat(rotate, \"deg)\"),\n transform: \"rotate(\".concat(rotate, \"deg)\")\n } : undefined;\n var _normalizeTwoToneColo = (0, _utils.normalizeTwoToneColors)(twoToneColor),\n _normalizeTwoToneColo2 = (0, _slicedToArray2.default)(_normalizeTwoToneColo, 2),\n primaryColor = _normalizeTwoToneColo2[0],\n secondaryColor = _normalizeTwoToneColo2[1];\n return /*#__PURE__*/React.createElement(\"span\", (0, _extends2.default)({\n role: \"img\",\n \"aria-label\": icon.name\n }, restProps, {\n ref: ref,\n tabIndex: iconTabIndex,\n onClick: onClick,\n className: classString\n }), /*#__PURE__*/React.createElement(_IconBase.default, {\n icon: icon,\n primaryColor: primaryColor,\n secondaryColor: secondaryColor,\n style: svgStyle\n }));\n});\nIcon.displayName = 'AntdIcon';\nIcon.getTwoToneColor = _twoTonePrimaryColor.getTwoToneColor;\nIcon.setTwoToneColor = _twoTonePrimaryColor.setTwoToneColor;\nvar _default = exports.default = Icon;","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","import each from './each';\nimport isPlainObject from './is-plain-object';\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nexport default (function (object, keys) {\n if (object === null || !isPlainObject(object)) {\n return {};\n }\n var result = {};\n each(keys, function (key) {\n if (hasOwnProperty.call(object, key)) {\n result[key] = object[key];\n }\n });\n return result;\n});\n//# sourceMappingURL=pick.js.map","var arrayMap = require('./_arrayMap'),\n baseIndexOf = require('./_baseIndexOf'),\n baseIndexOfWith = require('./_baseIndexOfWith'),\n baseUnary = require('./_baseUnary'),\n copyArray = require('./_copyArray');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\nfunction basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n}\n\nmodule.exports = basePullAll;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","import { transition } from './utils';\nexport default function (element, options) {\n if (!element.style.opacity)\n element.style.opacity = 1;\n return transition(element, { opacity: 0 }, options);\n}\n//# sourceMappingURL=fadeOut.js.map","export var PRIMILTIVE_ATTRIBUTES = [\n '$el',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'fill',\n 'fillOpacity',\n 'filter',\n 'fontFamily',\n 'fontSize',\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'height',\n 'img',\n 'increasedLineWidthForHitTesting',\n 'innerHTML',\n 'isBillboard',\n 'billboardRotation',\n 'isSizeAttenuation',\n 'isClosed',\n 'isOverflowing',\n 'leading',\n 'letterSpacing',\n 'lineDash',\n 'lineHeight',\n 'lineWidth',\n 'markerEnd',\n 'markerEndOffset',\n 'markerMid',\n 'markerStart',\n 'markerStartOffset',\n 'maxLines',\n 'metrics',\n 'miterLimit',\n 'offsetX',\n 'offsetY',\n 'opacity',\n 'path',\n 'points',\n 'r',\n 'radius',\n 'rx',\n 'ry',\n 'shadowColor',\n 'src',\n 'stroke',\n 'strokeOpacity',\n 'text',\n 'textAlign',\n 'textBaseline',\n 'textDecorationColor',\n 'textDecorationLine',\n 'textDecorationStyle',\n 'textOverflow',\n 'textPath',\n 'textPathSide',\n 'textPathStartOffset',\n 'transform',\n 'transformOrigin',\n 'visibility',\n 'width',\n 'wordWrap',\n 'wordWrapWidth',\n 'x',\n 'x1',\n 'x2',\n 'y',\n 'y1',\n 'y2',\n 'z1',\n 'z2',\n 'zIndex',\n];\nexport function isPrimitiveAttribute(key) {\n return PRIMILTIVE_ATTRIBUTES.includes(key);\n}\nexport function getPrimitiveAttributes(attributes) {\n var object = {};\n for (var key in attributes) {\n if (isPrimitiveAttribute(key))\n object[key] = attributes[key];\n }\n return object;\n}\n//# sourceMappingURL=primitive.js.map","import { __assign, __extends, __read, __rest, __spreadArray } from \"tslib\";\nimport { fadeOut, onAnimateFinished, transition } from '../../animation';\nimport { Component } from '../../core';\nimport { classNames, distance, getCallbackValue, getPrimitiveAttributes, select } from '../../util';\nvar CLASS_NAMES = classNames({\n lineGroup: 'line-group',\n line: 'line',\n regionGroup: 'region-group',\n region: 'region',\n}, 'grid');\nfunction getStraightPath(points) {\n return points.reduce(function (acc, curr, idx) {\n acc.push(__spreadArray([idx === 0 ? 'M' : 'L'], __read(curr), false));\n return acc;\n }, []);\n}\nfunction getSurroundPath(points, attr, reversed) {\n var _a = attr.connect, connect = _a === void 0 ? 'line' : _a, center = attr.center;\n if (connect === 'line')\n return getStraightPath(points);\n if (!center)\n return [];\n var radius = distance(points[0], center);\n var sweepFlag = reversed ? 0 : 1;\n return points.reduce(function (r, p, idx) {\n if (idx === 0)\n r.push(__spreadArray(['M'], __read(p), false));\n else\n r.push(__spreadArray(['A', radius, radius, 0, 0, sweepFlag], __read(p), false));\n return r;\n }, []);\n}\nfunction getLinePath(points, cfg, reversed) {\n if (cfg.type === 'surround')\n return getSurroundPath(points, cfg, reversed);\n return getStraightPath(points);\n}\nfunction connectPaths(from, to, cfg) {\n var type = cfg.type, connect = cfg.connect, center = cfg.center, closed = cfg.closed;\n var closeFlag = closed ? [['Z']] : [];\n var _a = __read([getLinePath(from, cfg), getLinePath(to.slice().reverse(), cfg, true)], 2), path1 = _a[0], path2 = _a[1];\n var _b = __read([from[0], to.slice(-1)[0]], 2), startOfFrom = _b[0], endOfTo = _b[1];\n var createPath = function (insertA, insertB) {\n return [path1, insertA, path2, insertB, closeFlag].flat();\n };\n if (connect === 'line' || type === 'surround') {\n return createPath([__spreadArray(['L'], __read(endOfTo), false)], [__spreadArray(['L'], __read(startOfFrom), false)]);\n }\n if (!center)\n throw new Error('Arc grid need to specified center');\n var _c = __read([distance(endOfTo, center), distance(startOfFrom, center)], 2), raduis1 = _c[0], radius2 = _c[1];\n return createPath([\n __spreadArray(['A', raduis1, raduis1, 0, 0, 1], __read(endOfTo), false),\n __spreadArray(['L'], __read(endOfTo), false),\n ], [\n __spreadArray(['A', radius2, radius2, 0, 0, 0], __read(startOfFrom), false),\n __spreadArray(['L'], __read(startOfFrom), false),\n ]);\n}\nfunction renderGridLine(container, data, attr, style) {\n var animate = attr.animate, isBillboard = attr.isBillboard;\n var lines = data.map(function (item, idx) {\n return {\n id: item.id || \"grid-line-\".concat(idx),\n d: getLinePath(item.points, attr),\n };\n });\n return container\n .selectAll(CLASS_NAMES.line.class)\n .data(lines, function (d) { return d.id; })\n .join(function (enter) {\n return enter.append('path').each(function (datum, index) {\n var lineStyle = getCallbackValue(getPrimitiveAttributes(__assign({ d: datum.d }, style)), [datum, index, lines]);\n this.attr(__assign({ class: CLASS_NAMES.line.name, stroke: '#D9D9D9', lineWidth: 1, lineDash: [4, 4], isBillboard: isBillboard }, lineStyle));\n });\n }, function (update) {\n return update.transition(function (datum, index) {\n var lineStyle = getCallbackValue(getPrimitiveAttributes(__assign({ d: datum.d }, style)), [datum, index, lines]);\n return transition(this, lineStyle, animate.update);\n });\n }, function (exit) {\n return exit.transition(function () {\n var _this = this;\n var animation = fadeOut(this, animate.exit);\n onAnimateFinished(animation, function () { return _this.remove(); });\n return animation;\n });\n })\n .transitions();\n}\nfunction renderAlternateRegion(container, data, style) {\n var animate = style.animate, connect = style.connect, areaFill = style.areaFill;\n if (data.length < 2 || !areaFill || !connect)\n return [];\n var colors = Array.isArray(areaFill) ? areaFill : [areaFill, 'transparent'];\n var getColor = function (idx) { return colors[idx % colors.length]; };\n var regions = [];\n for (var idx = 0; idx < data.length - 1; idx++) {\n var _a = __read([data[idx].points, data[idx + 1].points], 2), prev = _a[0], curr = _a[1];\n var path = connectPaths(prev, curr, style);\n regions.push({ d: path, fill: getColor(idx) });\n }\n return container\n .selectAll(CLASS_NAMES.region.class)\n .data(regions, function (_, i) { return i; })\n .join(function (enter) {\n return enter\n .append('path')\n .each(function (datum, index) {\n var regionStyle = getCallbackValue(datum, [datum, index, regions]);\n this.attr(regionStyle);\n })\n .attr('className', CLASS_NAMES.region.name);\n }, function (update) {\n return update.transition(function (datum, index) {\n var regionStyle = getCallbackValue(datum, [datum, index, regions]);\n return transition(this, regionStyle, animate.update);\n });\n }, function (exit) {\n return exit.transition(function () {\n var _this = this;\n var animation = fadeOut(this, animate.exit);\n onAnimateFinished(animation, function () { return _this.remove(); });\n return animation;\n });\n })\n .transitions();\n}\nfunction getData(attr) {\n var _a = attr.data, data = _a === void 0 ? [] : _a, closed = attr.closed;\n if (!closed)\n return data;\n return data.map(function (datum) {\n var points = datum.points;\n var _a = __read(points, 1), start = _a[0];\n return __assign(__assign({}, datum), { points: __spreadArray(__spreadArray([], __read(points), false), [start], false) });\n });\n}\nvar Grid = /** @class */ (function (_super) {\n __extends(Grid, _super);\n function Grid() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Grid.prototype.render = function (attributes, container) {\n // @ts-ignore do no passBy className\n var type = attributes.type, center = attributes.center, areaFill = attributes.areaFill, closed = attributes.closed, style = __rest(attributes, [\"type\", \"center\", \"areaFill\", \"closed\"]);\n var data = getData(attributes);\n var lineGroup = select(container).maybeAppendByClassName(CLASS_NAMES.lineGroup, 'g');\n var regionGroup = select(container).maybeAppendByClassName(CLASS_NAMES.regionGroup, 'g');\n var lineTransitions = renderGridLine(lineGroup, data, attributes, style);\n var reigionTransitions = renderAlternateRegion(regionGroup, data, attributes);\n return __spreadArray(__spreadArray([], __read(lineTransitions), false), __read(reigionTransitions), false);\n };\n return Grid;\n}(Component));\nexport { Grid };\n//# sourceMappingURL=index.js.map","import { __assign, __read } from \"tslib\";\nimport { isFunction } from '@antv/util';\nimport { degToRad, getCallbackValue, scale, subStyleProps } from '../../../util';\nimport { Grid } from '../../grid';\nimport { CLASS_NAMES } from '../constant';\nimport { getValuePos } from './line';\nimport { filterExec, getDirectionVector } from './utils';\nfunction getGridVector(value, attr) {\n return getDirectionVector(value, attr.gridDirection, attr);\n}\nfunction getGridCenter(attr) {\n var type = attr.type, gridCenter = attr.gridCenter;\n if (type === 'linear')\n return gridCenter;\n return gridCenter || attr.center;\n}\nfunction renderStraight(data, attr) {\n var gridLength = attr.gridLength;\n return data.map(function (_a, index) {\n var value = _a.value;\n var _b = __read(getValuePos(value, attr), 2), x = _b[0], y = _b[1];\n var _c = __read(scale(getGridVector(value, attr), gridLength), 2), dx = _c[0], dy = _c[1];\n return {\n id: index,\n points: [\n [x, y],\n [x + dx, y + dy],\n ],\n };\n });\n}\nfunction renderSurround(data, attr) {\n var controlAngles = attr.gridControlAngles;\n var center = getGridCenter(attr);\n if (!center)\n throw new Error('grid center is not provide');\n if (data.length < 2)\n throw new Error('Invalid grid data');\n if (!controlAngles || controlAngles.length === 0)\n throw new Error('Invalid gridControlAngles');\n var _a = __read(center, 2), cx = _a[0], cy = _a[1];\n return data.map(function (_a, index) {\n var value = _a.value;\n var _b = __read(getValuePos(value, attr), 2), sx = _b[0], sy = _b[1];\n var _c = __read([sx - cx, sy - cy], 2), dx = _c[0], dy = _c[1];\n var points = [];\n controlAngles.forEach(function (angle) {\n var angleInRad = degToRad(angle);\n var _a = __read([Math.cos(angleInRad), Math.sin(angleInRad)], 2), cosa = _a[0], sina = _a[1];\n var x = dx * cosa - dy * sina + cx;\n var y = dx * sina + dy * cosa + cy;\n points.push([x, y]);\n });\n return { points: points, id: index };\n });\n}\nexport function renderGrid(container, data, attr, animate) {\n var gridAttr = subStyleProps(attr, 'grid');\n var type = gridAttr.type, areaFill = gridAttr.areaFill;\n var center = getGridCenter(attr);\n var finalData = filterExec(data, attr.gridFilter);\n var gridItems = type === 'segment' ? renderStraight(finalData, attr) : renderSurround(finalData, attr);\n var style = __assign(__assign({}, gridAttr), { center: center, areaFill: isFunction(areaFill)\n ? finalData.map(function (datum, index) { return getCallbackValue(areaFill, [datum, index, finalData]); })\n : areaFill, animate: animate, data: gridItems });\n return container\n .selectAll(CLASS_NAMES.grid.class)\n .data([1])\n .join(function (enter) { return enter.append(function () { return new Grid({ style: style }); }).attr('className', CLASS_NAMES.grid.name); }, function (update) {\n return update.transition(function () {\n return this.update(style);\n });\n }, function (exit) { return exit.remove(); })\n .transitions();\n}\n//# sourceMappingURL=grid.js.map","export function inRange(n, start, end, includeLeft, includeRight) {\n if (includeLeft === void 0) { includeLeft = true; }\n if (includeRight === void 0) { includeRight = false; }\n if ((includeLeft && n === start) || (includeRight && n === end))\n return true;\n return n > start && n < end;\n}\n//# sourceMappingURL=in-range.js.map","import { __read } from \"tslib\";\nexport function getTranslate(node, x, y) {\n var _a = node.getBBox(), width = _a.width, height = _a.height;\n var _b = __read([x, y].map(function (v, i) {\n var _a;\n return v.includes('%')\n ? (parseFloat(((_a = v.match(/[+-]?([0-9]*[.])?[0-9]+/)) === null || _a === void 0 ? void 0 : _a[0]) || '0') / 100) * (i === 0 ? width : height)\n : v;\n }), 2), tx = _b[0], ty = _b[1];\n return [tx, ty];\n}\n/**\n * transform that support translate percent value\n */\nexport function percentTransform(node, val) {\n if (!val)\n return;\n try {\n var reg = /translate\\(([+-]*[\\d]+[%]*),[ ]*([+-]*[\\d]+[%]*)\\)/g;\n var computedVal = val.replace(reg, function (match, x, y) { return \"translate(\".concat(getTranslate(node, x, y), \")\"); });\n node.attr('transform', computedVal);\n }\n catch (e) {\n // do nothing\n }\n}\n//# sourceMappingURL=transform.js.map","import { __read } from \"tslib\";\nimport { isNil } from '@antv/util';\nimport { getFont, measureTextWidth } from '../../../util';\nimport { boundTest } from '../utils/test';\nfunction parseLengthString(str, font) {\n if (font === void 0) { font = {}; }\n if (isNil(str))\n return 0;\n if (typeof str === 'number')\n return str;\n return Math.floor(measureTextWidth(str, font));\n}\nexport default function ellipseLabels(labels, overlapCfg, attr, utils) {\n if (labels.length <= 0)\n return;\n var _a = overlapCfg.suffix, suffix = _a === void 0 ? '...' : _a, minLength = overlapCfg.minLength, _b = overlapCfg.maxLength, maxLength = _b === void 0 ? Infinity : _b, _c = overlapCfg.step, ellipsisStep = _c === void 0 ? ' ' : _c, _d = overlapCfg.margin, margin = _d === void 0 ? [0, 0, 0, 0] : _d;\n var font = getFont(utils.getTextShape(labels[0]));\n var step = parseLengthString(ellipsisStep, font);\n var min = minLength ? parseLengthString(minLength, font) : step;\n var max = parseLengthString(maxLength, font);\n // Enable to ellipsis label when overlap.\n if (isNil(max) || max === Infinity) {\n max = Math.max.apply(null, labels.map(function (d) { return d.getBBox().width; }));\n }\n // Generally, 100 ticks cost less than 300ms. If cost time exceed, means ticks count is too large to see.\n var source = labels.slice();\n var _e = __read(margin, 4), _f = _e[0], top = _f === void 0 ? 0 : _f, _g = _e[1], right = _g === void 0 ? 0 : _g, _h = _e[2], bottom = _h === void 0 ? top : _h, _j = _e[3], left = _j === void 0 ? right : _j;\n var _loop_1 = function (allowedLength) {\n source.forEach(function (label) {\n utils.ellipsis(utils.getTextShape(label), allowedLength, suffix);\n });\n source = boundTest(labels, attr, margin);\n // 碰撞检测\n if (source.length < 1)\n return { value: void 0 };\n };\n for (var allowedLength = max; allowedLength > min + step; allowedLength -= step) {\n var state_1 = _loop_1(allowedLength);\n if (typeof state_1 === \"object\")\n return state_1.value;\n }\n}\n//# sourceMappingURL=autoEllipsis.js.map","export var defined = function (x) { return x !== undefined && x != null && !Number.isNaN(x); };\n//# sourceMappingURL=defined.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { defined, getLocalBBox, hide } from '../../../util';\nimport { isAxisHorizontal, isAxisVertical } from '../guides/line';\nimport { boundTest } from '../utils/test';\nvar methods = {\n parity: function (items, _a) {\n var _b = _a.seq, seq = _b === void 0 ? 2 : _b;\n return items.filter(function (item, i) { return (i % seq ? (hide(item), false) : true); });\n },\n};\nvar filterDefined = function (arr) { return arr.filter(defined); };\nexport default function hideLabels(labels, overlapCfg, attr, utils) {\n var count = labels.length;\n var keepHeader = overlapCfg.keepHeader, keepTail = overlapCfg.keepTail;\n if (count <= 1 || (count === 2 && keepHeader && keepTail))\n return;\n var parityHide = methods.parity;\n var reset = function (els) { return (els.forEach(utils.show), els); };\n var seq = 2;\n var source = labels.slice();\n var target = labels.slice();\n var minLabelWidth = Math.min.apply(Math, __spreadArray([1], __read(labels.map(function (d) { return d.getBBox().width; })), false));\n if (attr.type === 'linear' && (isAxisHorizontal(attr) || isAxisVertical(attr))) {\n var minX = getLocalBBox(labels[0]).left;\n var maxX = getLocalBBox(labels[count - 1]).right;\n var distance = Math.abs(maxX - minX) || 1;\n seq = Math.max(Math.floor((count * minLabelWidth) / distance), seq);\n }\n var first;\n var last;\n if (keepHeader)\n first = source.splice(0, 1)[0];\n if (keepTail) {\n last = source.splice(-1, 1)[0];\n source.reverse();\n }\n reset(source);\n while (seq < labels.length &&\n boundTest(filterDefined(last ? __spreadArray(__spreadArray([last], __read(target), false), [first], false) : __spreadArray([first], __read(target), false)), attr, overlapCfg === null || overlapCfg === void 0 ? void 0 : overlapCfg.margin).length) {\n // 每两步,减一个 (不需要考虑保留 first)\n if (last && !first && seq % 2 === 0) {\n var rest = source.splice(0, 1);\n rest.forEach(utils.hide);\n }\n else if (last && first) {\n // 如果有 first 的话,每一步,减一个(增加迭代次数)\n var rest = source.splice(0, 1);\n rest.forEach(utils.hide);\n }\n target = parityHide(reset(source), { seq: seq });\n seq++;\n }\n}\n//# sourceMappingURL=autoHide.js.map","import { isInOffscreenGroup } from '../../../util';\nimport ellipsis from './autoEllipsis';\nimport hide from './autoHide';\nimport rotate from './autoRotate';\nimport wrap from './autoWrap';\nexport var OverlapUtils = new Map([\n ['hide', hide],\n ['rotate', rotate],\n ['ellipsis', ellipsis],\n ['wrap', wrap],\n]);\nexport function canProcessOverlap(labels, attr, type) {\n if (attr.labelOverlap.length < 1)\n return false;\n if (type === 'hide')\n return !isInOffscreenGroup(labels[0]);\n if (type === 'rotate')\n return !labels.some(function (label) { var _a; return !!((_a = label.attr('transform')) === null || _a === void 0 ? void 0 : _a.includes('rotate')); });\n if (type === 'ellipsis' || type === 'wrap')\n return labels.filter(function (item) { return item.querySelector('text'); }).length >= 1;\n return true;\n}\nexport function processOverlap(labels, attr, main, utils) {\n var _a = attr.labelOverlap, labelOverlap = _a === void 0 ? [] : _a;\n if (!labelOverlap.length)\n return;\n labelOverlap.forEach(function (overlapCfg) {\n var type = overlapCfg.type;\n var util = OverlapUtils.get(type);\n if (canProcessOverlap(labels, attr, type))\n util === null || util === void 0 ? void 0 : util(labels, overlapCfg, attr, utils, main);\n });\n}\n//# sourceMappingURL=index.js.map","import { __values } from \"tslib\";\nimport { boundTest } from '../utils/test';\nexport default function rotateLabels(labels, overlapCfg, attr, utils) {\n var e_1, _a;\n var _b = overlapCfg.optionalAngles, optionalAngles = _b === void 0 ? [0, 45, 90] : _b, margin = overlapCfg.margin, _c = overlapCfg.recoverWhenFailed, recoverWhenFailed = _c === void 0 ? true : _c;\n var defaultAngles = labels.map(function (label) { return label.getLocalEulerAngles(); });\n var runAndPassed = function () { return boundTest(labels, attr, margin).length < 1; };\n var setLabelsRotate = function (angle) {\n return labels.forEach(function (label, index) {\n var rotate = Array.isArray(angle) ? angle[index] : angle;\n utils.rotate(label, +rotate);\n });\n };\n try {\n for (var optionalAngles_1 = __values(optionalAngles), optionalAngles_1_1 = optionalAngles_1.next(); !optionalAngles_1_1.done; optionalAngles_1_1 = optionalAngles_1.next()) {\n var angle = optionalAngles_1_1.value;\n setLabelsRotate(angle);\n if (runAndPassed())\n return;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (optionalAngles_1_1 && !optionalAngles_1_1.done && (_a = optionalAngles_1.return)) _a.call(optionalAngles_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (recoverWhenFailed) {\n setLabelsRotate(defaultAngles);\n }\n}\n//# sourceMappingURL=autoRotate.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { getCallbackValue } from '../../../util';\nimport { isAxisHorizontal } from '../guides/line';\nimport { boundTest } from '../utils/test';\nfunction inferTextBaseline(attr) {\n var type = attr.type, labelDirection = attr.labelDirection;\n if (type === 'linear' && isAxisHorizontal(attr)) {\n return labelDirection === 'negative' ? 'bottom' : 'top';\n }\n return 'middle';\n}\nexport default function wrapLabels(labels, overlapCfg, attr, utils, main) {\n var _a;\n var _b = overlapCfg.maxLines, maxLines = _b === void 0 ? 3 : _b, _c = overlapCfg.recoverWhenFailed, recoverWhenFailed = _c === void 0 ? true : _c, _d = overlapCfg.margin, margin = _d === void 0 ? [0, 0, 0, 0] : _d;\n var wordWrapWidth = getCallbackValue((_a = overlapCfg.wordWrapWidth) !== null && _a !== void 0 ? _a : 50, [main]);\n var defaultLines = labels.map(function (label) { return label.attr('maxLines') || 1; });\n var minLines = Math.min.apply(Math, __spreadArray([], __read(defaultLines), false));\n var runAndPassed = function () { return boundTest(labels, attr, margin).length < 1; };\n var textBaseline = inferTextBaseline(attr);\n var setLabelsWrap = function (lines) {\n return labels.forEach(function (label, index) {\n var maxLines = Array.isArray(lines) ? lines[index] : lines;\n utils.wrap(label, wordWrapWidth, maxLines, textBaseline);\n });\n };\n if (minLines > maxLines)\n return;\n if (attr.type === 'linear' && isAxisHorizontal(attr)) {\n setLabelsWrap(maxLines);\n if (runAndPassed()) {\n return;\n }\n }\n else {\n for (var lines = minLines; lines <= maxLines; lines++) {\n setLabelsWrap(lines);\n if (runAndPassed())\n return;\n }\n }\n if (recoverWhenFailed) {\n setLabelsWrap(defaultLines);\n }\n}\n//# sourceMappingURL=autoWrap.js.map","import { __assign, __read, __rest, __spreadArray } from \"tslib\";\nimport { isFunction } from '@antv/util';\nimport { fadeOut, onAnimateFinished, onAnimatesFinished, transition, transitionShape } from '../../../animation';\nimport { add, ellipsisIt, getCallbackValue, hide, inRange, percentTransform, radToDeg, renderExtDo, scale, select, show, splitStyle, subStyleProps, wrapIt, } from '../../../util';\nimport { CLASS_NAMES } from '../constant';\nimport { processOverlap } from '../overlap';\nimport { getFactor } from '../utils';\nimport { getValuePos } from './line';\nimport { filterExec, getCallbackStyle, getLabelVector, getLineTangentVector } from './utils';\nfunction angleNormalizer(angle) {\n var normalizedAngle = angle;\n while (normalizedAngle < 0)\n normalizedAngle += 360;\n return Math.round(normalizedAngle % 360);\n}\nfunction getAngle(v1, v2) {\n var _a = __read(v1, 2), x1 = _a[0], y1 = _a[1];\n var _b = __read(v2, 2), x2 = _b[0], y2 = _b[1];\n var _c = __read([x1 * x2 + y1 * y2, x1 * y2 - y1 * x2], 2), dot = _c[0], det = _c[1];\n return Math.atan2(det, dot);\n}\n/** to correct label rotation to avoid inverted character */\nfunction correctLabelRotation(_rotate) {\n var rotate = (_rotate + 360) % 180;\n if (!inRange(rotate, -90, 90))\n rotate += 180;\n return rotate;\n}\n/** get rotation from preset or layout */\nfunction getLabelRotation(datum, label, attr) {\n var _a;\n var labelAlign = attr.labelAlign;\n // if label rotate is set, use it\n var customRotate = (_a = label.style.transform) === null || _a === void 0 ? void 0 : _a.includes('rotate');\n if (customRotate)\n return label.getLocalEulerAngles();\n var rotate = 0;\n var labelVector = getLabelVector(datum.value, attr);\n var tangentVector = getLineTangentVector(datum.value, attr);\n if (labelAlign === 'horizontal')\n return 0;\n if (labelAlign === 'perpendicular')\n rotate = getAngle([1, 0], labelVector);\n else\n rotate = getAngle([tangentVector[0] < 0 ? -1 : 1, 0], tangentVector);\n return correctLabelRotation(radToDeg(rotate));\n}\n/** get the label align according to its tick and label angle */\nfunction getLabelStyle(value, rotate, attr) {\n var type = attr.type, labelAlign = attr.labelAlign;\n var labelVector = getLabelVector(value, attr);\n var labelAngle = angleNormalizer(rotate);\n var tickAngle = angleNormalizer(radToDeg(getAngle([1, 0], labelVector)));\n var textAlign = 'center';\n var textBaseline = 'middle';\n if (type === 'linear') {\n // tick 和 label 均为水平或垂直时,做快速判断\n if ([90, 270].includes(tickAngle) && labelAngle === 0) {\n textAlign = 'center';\n textBaseline = labelVector[1] === 1 ? 'top' : 'bottom';\n }\n else if (!(tickAngle % 180) && [90, 270].includes(labelAngle)) {\n textAlign = 'center';\n }\n // 根据 tick 和 label 的角度,判断 label 的对齐方式\n else if (tickAngle === 0) {\n if (inRange(labelAngle, 0, 90, false, true)) {\n textAlign = 'start';\n }\n else if (inRange(labelAngle, 0, 90) || inRange(labelAngle, 270, 360)) {\n textAlign = 'start';\n }\n }\n else if (tickAngle === 90) {\n if (inRange(labelAngle, 0, 90, false, true)) {\n textAlign = 'start';\n }\n else if (inRange(labelAngle, 90, 180) || inRange(labelAngle, 270, 360)) {\n textAlign = 'end';\n }\n }\n else if (tickAngle === 270) {\n if (inRange(labelAngle, 0, 90, false, true)) {\n textAlign = 'end';\n }\n else if (inRange(labelAngle, 90, 180) || inRange(labelAngle, 270, 360)) {\n textAlign = 'start';\n }\n }\n else if (tickAngle === 180) {\n if (labelAngle === 90) {\n textAlign = 'start';\n }\n else if (inRange(labelAngle, 0, 90) || inRange(labelAngle, 270, 360)) {\n textAlign = 'end';\n }\n }\n /**\n * todo tick 倾斜时的判断逻辑,该情况下坐标轴非垂直或水平\n */\n }\n else {\n // 弧线坐标轴 label 的对齐方式判断逻辑\n if (labelAlign === 'parallel') {\n if (inRange(tickAngle, 0, 180, true)) {\n textBaseline = 'top';\n }\n else {\n textBaseline = 'bottom';\n }\n }\n else if (labelAlign === 'horizontal') {\n if (inRange(tickAngle, 90, 270, false)) {\n textAlign = 'end';\n }\n else if (inRange(tickAngle, 270, 360, false) || inRange(tickAngle, 0, 90)) {\n textAlign = 'start';\n }\n }\n else if (labelAlign === 'perpendicular') {\n if (inRange(tickAngle, 90, 270)) {\n textAlign = 'end';\n }\n else {\n textAlign = 'start';\n }\n }\n }\n return { textAlign: textAlign, textBaseline: textBaseline };\n}\nfunction setRotateAndAdjustLabelAlign(rotate, group, attr) {\n group.setLocalEulerAngles(rotate);\n var value = group.__data__.value;\n var textStyle = getLabelStyle(value, rotate, attr);\n var label = group.querySelector(CLASS_NAMES.labelItem.class);\n if (label)\n applyTextStyle(label, textStyle);\n}\nfunction getLabelPos(datum, data, attr) {\n var showTick = attr.showTick, tickLength = attr.tickLength, tickDirection = attr.tickDirection, labelDirection = attr.labelDirection, labelSpacing = attr.labelSpacing;\n var index = data.indexOf(datum);\n var finalLabelSpacing = getCallbackValue(labelSpacing, [datum, index, data]);\n var _a = __read([getLabelVector(datum.value, attr), getFactor(labelDirection, tickDirection)], 2), labelVector = _a[0], unionFactor = _a[1];\n var extraLength = unionFactor === 1 ? getCallbackValue(showTick ? tickLength : 0, [datum, index, data]) : 0;\n var _b = __read(add(scale(labelVector, finalLabelSpacing + extraLength), getValuePos(datum.value, attr)), 2), x = _b[0], y = _b[1];\n return { x: x, y: y };\n}\nfunction formatter(datum, index, data, attr) {\n var labelFormatter = attr.labelFormatter;\n var element = isFunction(labelFormatter)\n ? function () { return renderExtDo(getCallbackValue(labelFormatter, [datum, index, data, getLabelVector(datum.value, attr)])); }\n : function () { return renderExtDo(datum.label || ''); };\n return element;\n}\nfunction applyTextStyle(node, style) {\n if (node.nodeName === 'text')\n node.attr(style);\n}\nfunction overlapHandler(attr, main) {\n processOverlap(this.node().childNodes, attr, main, {\n hide: hide,\n show: show,\n rotate: function (label, angle) {\n setRotateAndAdjustLabelAlign(+angle, label, attr);\n },\n ellipsis: function (label, len, suffix) {\n label && ellipsisIt(label, len || Infinity, suffix);\n },\n wrap: function (label, width, lines) {\n label && wrapIt(label, width, lines);\n },\n getTextShape: function (label) { return label.querySelector('text'); },\n });\n}\nfunction renderLabel(container, datum, data, style, attr) {\n var index = data.indexOf(datum);\n var label = select(container)\n .append(formatter(datum, index, data, attr))\n .attr('className', CLASS_NAMES.labelItem.name)\n .node();\n var _a = __read(splitStyle(getCallbackStyle(style, [datum, index, data])), 2), labelStyle = _a[0], _b = _a[1], transform = _b.transform, groupStyle = __rest(_b, [\"transform\"]);\n percentTransform(label, transform);\n var rotate = getLabelRotation(datum, label, attr);\n if (!label.getLocalEulerAngles()) {\n label.setLocalEulerAngles(rotate);\n }\n applyTextStyle(label, __assign(__assign({}, getLabelStyle(datum.value, rotate, attr)), labelStyle));\n container.attr(groupStyle);\n return label;\n}\nexport function renderLabels(container, data, attr, animate, main) {\n var finalData = filterExec(data, attr.labelFilter);\n var style = subStyleProps(attr, 'label');\n var _exit;\n var transitions = container\n .selectAll(CLASS_NAMES.label.class)\n .data(finalData, function (d, i) { return i; })\n .join(function (enter) {\n return enter\n .append('g')\n .attr('className', CLASS_NAMES.label.name)\n .transition(function (datum) {\n renderLabel(this, datum, data, style, attr);\n var _a = getLabelPos(datum, data, attr), x = _a.x, y = _a.y;\n // .axis-label\n this.style.transform = \"translate(\".concat(x, \", \").concat(y, \")\");\n return null;\n });\n }, function (update) {\n return update.transition(function (datum) {\n var prevLabel = this.querySelector(CLASS_NAMES.labelItem.class);\n var label = renderLabel(this, datum, data, style, attr);\n var shapeAnimation = transitionShape(prevLabel, label, animate.update);\n var _a = getLabelPos(datum, data, attr), x = _a.x, y = _a.y;\n var animation = transition(this, { transform: \"translate(\".concat(x, \", \").concat(y, \")\") }, animate.update);\n return __spreadArray(__spreadArray([], __read(shapeAnimation), false), [animation], false);\n // return [animation];\n });\n }, function (exit) {\n _exit = exit;\n exit.transition(function () {\n var _this = this;\n var animation = fadeOut(this.childNodes[0], animate.exit);\n onAnimateFinished(animation, function () { return select(_this).remove(); });\n return animation;\n });\n return _exit;\n })\n .transitions();\n // handle overlapping after transitions finished\n onAnimatesFinished(transitions, function () {\n overlapHandler.call(container, attr, main);\n });\n return transitions;\n}\n//# sourceMappingURL=labels.js.map","import { applyToText } from './text';\nexport function wrapIt(node, wordWrapWidth, maxLines, textBaseline) {\n if (maxLines === void 0) { maxLines = 2; }\n if (textBaseline === void 0) { textBaseline = 'top'; }\n applyToText(node, { wordWrap: true, wordWrapWidth: wordWrapWidth, maxLines: maxLines, textBaseline: textBaseline });\n}\n//# sourceMappingURL=wrap.js.map","import { __assign, __read } from \"tslib\";\nimport { isFunction } from '@antv/util';\nimport { fadeOut, onAnimateFinished, transition } from '../../../animation';\nimport { getCallbackValue, select, splitStyle, subStyleProps } from '../../../util';\nimport { CLASS_NAMES } from '../constant';\nimport { getValuePos } from './line';\nimport { filterExec, getCallbackStyle, getDirectionVector } from './utils';\nexport function getTickVector(value, attr) {\n return getDirectionVector(value, attr.tickDirection, attr);\n}\nexport function getTickPoints(unitVector, tickLength) {\n var _a = __read(unitVector, 2), dx = _a[0], dy = _a[1];\n return [\n [0, 0],\n [dx * tickLength, dy * tickLength],\n ];\n}\nfunction getTickLineLayout(datum, index, data, tickVector, attr) {\n var tickLength = attr.tickLength;\n var _a = __read(getTickPoints(tickVector, getCallbackValue(tickLength, [datum, index, data])), 2), _b = __read(_a[0], 2), x1 = _b[0], y1 = _b[1], _c = __read(_a[1], 2), x2 = _c[0], y2 = _c[1];\n return { x1: x1, x2: x2, y1: y1, y2: y2 };\n}\nfunction createTickEl(container, datum, index, data, attr) {\n var formatter = attr.tickFormatter;\n var tickVector = getTickVector(datum.value, attr);\n var el = 'line';\n if (isFunction(formatter))\n el = function () { return getCallbackValue(formatter, [datum, index, data, tickVector]); };\n return container.append(el).attr('className', CLASS_NAMES.tickItem.name);\n}\nfunction applyTickStyle(datum, index, data, tick, group, attr, style) {\n var tickVector = getTickVector(datum.value, attr);\n var _a = getTickLineLayout(datum, index, data, tickVector, attr), x1 = _a.x1, x2 = _a.x2, y1 = _a.y1, y2 = _a.y2;\n var _b = __read(splitStyle(getCallbackStyle(style, [datum, index, data, tickVector])), 2), tickStyle = _b[0], groupStyle = _b[1];\n tick.node().nodeName === 'line' && tick.styles(__assign({ x1: x1, x2: x2, y1: y1, y2: y2 }, tickStyle));\n group.attr(groupStyle);\n tick.styles(tickStyle);\n}\nfunction createTick(datum, index, data, attr, tickAttr, animate) {\n var tick = createTickEl(select(this), datum, index, data, attr);\n applyTickStyle(datum, index, data, tick, this, attr, tickAttr);\n var _a = __read(getValuePos(datum.value, attr), 2), x = _a[0], y = _a[1];\n return transition(this, { transform: \"translate(\".concat(x, \", \").concat(y, \")\") }, animate);\n}\nexport function renderTicks(container, axisData, attr, animate) {\n var finalData = filterExec(axisData, attr.tickFilter);\n var tickAttr = subStyleProps(attr, 'tick');\n return container\n .selectAll(CLASS_NAMES.tick.class)\n .data(finalData, function (d) { return d.id || d.label; })\n .join(function (enter) {\n return enter\n .append('g')\n .attr('className', CLASS_NAMES.tick.name)\n .transition(function (datum, index) {\n return createTick.call(this, datum, index, finalData, attr, tickAttr, false);\n });\n }, function (update) {\n return update.transition(function (datum, index) {\n this.removeChildren();\n return createTick.call(this, datum, index, finalData, attr, tickAttr, animate.update);\n });\n }, function (exit) {\n return exit.transition(function () {\n var _this = this;\n var animation = fadeOut(this.childNodes[0], animate.exit);\n onAnimateFinished(animation, function () { return _this.remove(); });\n return animation;\n });\n })\n .transitions();\n}\n//# sourceMappingURL=ticks.js.map","import { __assign, __read, __rest } from \"tslib\";\nimport { transition } from '../../../animation';\nimport { normalize, parseSeriesAttr, percentTransform, renderExtDo, scale, select, splitStyle, subStyleProps, } from '../../../util';\nimport { parsePosition } from '../../title';\nimport { CLASS_NAMES } from '../constant';\nfunction getTitlePosition(mainGroup, titleGroup, attr) {\n var _a = attr.titlePosition, position = _a === void 0 ? 'lb' : _a, spacing = attr.titleSpacing;\n var pos = parsePosition(position);\n var _b = mainGroup.node().getLocalBounds(), _c = __read(_b.min, 2), mainX = _c[0], mainY = _c[1], _d = __read(_b.halfExtents, 2), mainHalfWidth = _d[0], mainHalfHeight = _d[1];\n var _e = __read(titleGroup.node().getLocalBounds().halfExtents, 2), titleHalfWidth = _e[0], titleHalfHeight = _e[1];\n var _f = __read([mainX + mainHalfWidth, mainY + mainHalfHeight], 2), x = _f[0], y = _f[1];\n var _g = __read(parseSeriesAttr(spacing), 4), spacingTop = _g[0], spacingRight = _g[1], spacingBottom = _g[2], spacingLeft = _g[3];\n if (['start', 'end'].includes(position) && attr.type === 'linear') {\n var startPos = attr.startPos, endPos = attr.endPos;\n // todo did not consider the truncate case\n var _h = __read(position === 'start' ? [startPos, endPos] : [endPos, startPos], 2), from = _h[0], to = _h[1];\n var direction = normalize([-to[0] + from[0], -to[1] + from[1]]);\n var _j = __read(scale(direction, spacingTop), 2), dx = _j[0], dy = _j[1];\n return { x: from[0] + dx, y: from[1] + dy };\n }\n if (pos.includes('t'))\n y -= mainHalfHeight + titleHalfHeight + spacingTop;\n if (pos.includes('r'))\n x += mainHalfWidth + titleHalfWidth + spacingRight;\n if (pos.includes('l'))\n x -= mainHalfWidth + titleHalfWidth + spacingLeft;\n if (pos.includes('b'))\n y += mainHalfHeight + titleHalfHeight + spacingBottom;\n return { x: x, y: y };\n}\nfunction inferTransform(n, direction, position) {\n var halfExtents = n.getGeometryBounds().halfExtents;\n var height = halfExtents[1] * 2;\n if (direction === 'vertical') {\n if (position === 'left')\n return \"rotate(-90) translate(0, \".concat(height / 2, \")\");\n if (position === 'right')\n return \"rotate(-90) translate(0, -\".concat(height / 2, \")\");\n }\n return '';\n}\nfunction applyTitleStyle(title, group, axis, attr, animate) {\n var style = subStyleProps(attr, 'title');\n var _a = __read(splitStyle(style), 2), titleStyle = _a[0], _b = _a[1], specified = _b.transform, transformOrigin = _b.transformOrigin, groupStyle = __rest(_b, [\"transform\", \"transformOrigin\"]);\n group.styles(groupStyle);\n var transform = specified || inferTransform(title.node(), titleStyle.direction, titleStyle.position);\n title.styles(__assign(__assign({}, titleStyle), { transformOrigin: transformOrigin }));\n percentTransform(title.node(), transform);\n var _c = getTitlePosition(\n // @ts-ignore\n select(axis._offscreen || axis.querySelector(CLASS_NAMES.mainGroup.class)), group, attr), x = _c.x, y = _c.y;\n var animation = transition(group.node(), { transform: \"translate(\".concat(x, \", \").concat(y, \")\") }, animate);\n return animation;\n}\nexport function renderTitle(container, axis, attr, animate) {\n var titleText = attr.titleText;\n return container\n .selectAll(CLASS_NAMES.title.class)\n .data([{ title: titleText }].filter(function (d) { return !!d.title; }), function (d, i) { return d.title; })\n .join(function (enter) {\n return enter\n .append(function () { return renderExtDo(titleText); })\n .attr('className', CLASS_NAMES.title.name)\n .transition(function () {\n return applyTitleStyle(select(this), container, axis, attr, animate.enter);\n });\n }, function (update) {\n return update.transition(function () {\n return applyTitleStyle(select(this), container, axis, attr, animate.update);\n });\n }, function (exit) { return exit.remove(); })\n .transitions();\n}\n//# sourceMappingURL=title.js.map","import { __extends, __read, __spreadArray } from \"tslib\";\nimport { parseAnimationOption } from '../../animation';\nimport { Component } from '../../core';\nimport { ifShow, sampling, select } from '../../util';\nimport { AXIS_BASE_DEFAULT_ATTR, CLASS_NAMES } from './constant';\nimport { renderGrid } from './guides/grid';\nimport { renderLabels } from './guides/labels';\nimport { renderAxisLine } from './guides/line';\nimport { renderTicks } from './guides/ticks';\nimport { renderTitle } from './guides/title';\nfunction renderAxisMain(attributes, container, data, animation) {\n var showLine = attributes.showLine, showTick = attributes.showTick, showLabel = attributes.showLabel;\n /** line */\n var lineGroup = container.maybeAppendByClassName(CLASS_NAMES.lineGroup, 'g');\n var lineTransitions = ifShow(showLine, lineGroup, function (group) {\n return renderAxisLine(group, attributes, animation);\n }) || [];\n /** tick */\n var tickGroup = container.maybeAppendByClassName(CLASS_NAMES.tickGroup, 'g');\n var tickTransitions = ifShow(showTick, tickGroup, function (group) {\n return renderTicks(group, data, attributes, animation);\n }) || [];\n /** label */\n var labelGroup = container.maybeAppendByClassName(CLASS_NAMES.labelGroup, 'g');\n var labelTransitions = ifShow(showLabel, labelGroup, function (group) {\n return renderLabels(group, data, attributes, animation, container.node());\n }) || [];\n return __spreadArray(__spreadArray(__spreadArray([], __read(lineTransitions), false), __read(tickTransitions), false), __read(labelTransitions), false).filter(function (t) { return !!t; });\n}\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis(options) {\n return _super.call(this, options, AXIS_BASE_DEFAULT_ATTR) || this;\n }\n Axis.prototype.render = function (attributes, container, specificAnimation) {\n var _this = this;\n var titleText = attributes.titleText, data = attributes.data, animate = attributes.animate, showTitle = attributes.showTitle, showGrid = attributes.showGrid, dataThreshold = attributes.dataThreshold, truncRange = attributes.truncRange;\n var sampledData = sampling(data, dataThreshold).filter(function (_a) {\n var value = _a.value;\n if (truncRange && value > truncRange[0] && value < truncRange[1])\n return false;\n return true;\n });\n var finalAnimation = parseAnimationOption(specificAnimation === undefined ? animate : specificAnimation);\n /** grid */\n var gridGroup = select(container).maybeAppendByClassName(CLASS_NAMES.gridGroup, 'g');\n var gridTransitions = ifShow(showGrid, gridGroup, function (group) { return renderGrid(group, sampledData, attributes, finalAnimation); }) || [];\n /** main group */\n var mainGroup = select(container).maybeAppendByClassName(CLASS_NAMES.mainGroup, 'g');\n if (titleText && ((!this.initialized && finalAnimation.enter) || (this.initialized && finalAnimation.update))) {\n renderAxisMain(attributes, select(this.offscreenGroup), sampledData, parseAnimationOption(false));\n }\n // render\n var mainTransitions = renderAxisMain(attributes, select(mainGroup.node()), sampledData, finalAnimation);\n /** title */\n var titleGroup = select(container).maybeAppendByClassName(CLASS_NAMES.titleGroup, 'g');\n var titleTransitions = ifShow(showTitle, titleGroup, function (group) {\n return renderTitle(group, _this, attributes, finalAnimation);\n }) || [];\n return __spreadArray(__spreadArray(__spreadArray([], __read(gridTransitions), false), __read(mainTransitions), false), __read(titleTransitions), false).flat().filter(function (t) { return !!t; });\n };\n return Axis;\n}(Component));\nexport { Axis };\n//# sourceMappingURL=axis.js.map","export function sampling(data, size) {\n if (data.length <= size)\n return data;\n var step = Math.floor(data.length / size);\n var result = [];\n for (var i = 0; i < data.length; i += step) {\n result.push(data[i]);\n }\n return result;\n}\n//# sourceMappingURL=sampling.js.map","import { deepMix } from '@antv/util';\nexport class Base {\n /**\n * 构造函数,根据自定义的选项和默认选项生成当前选项\n * @param options 需要自定义配置的选项\n */\n constructor(options) {\n this.options = deepMix({}, this.getDefaultOptions());\n this.update(options);\n }\n /**\n * 返回当前的所有选项\n * @returns 当前的所有选项\n */\n getOptions() {\n return this.options;\n }\n /**\n * 更新选项和比例尺的内部状态\n * @param updateOptions 需要更新的选项\n */\n update(updateOptions = {}) {\n this.options = deepMix({}, this.options, updateOptions);\n this.rescale(updateOptions);\n }\n /**\n * 根据需要更新 options 和更新后的 options 更新 scale 的内部状态,\n * 在函数内部可以用 this.options 获得更新后的 options\n * @param options 需要更新的 options\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n rescale(options) { }\n}\n//# sourceMappingURL=base.js.map","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","function* flatten(arrays) {\n for (const array of arrays) {\n yield* array;\n }\n}\n\nexport default function merge(arrays) {\n return Array.from(flatten(arrays));\n}\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","export var WEEK_DAY_COUNT = 7;\n\n/**\n * Wrap the compare logic.\n * This will compare the each of value is empty first.\n * 1. All is empty, return true.\n * 2. One is empty, return false.\n * 3. return customize compare logic.\n */\nfunction nullableCompare(value1, value2, oriCompareFn) {\n if (!value1 && !value2 || value1 === value2) {\n return true;\n }\n if (!value1 || !value2) {\n return false;\n }\n return oriCompareFn();\n}\nexport function isSameDecade(generateConfig, decade1, decade2) {\n return nullableCompare(decade1, decade2, function () {\n var num1 = Math.floor(generateConfig.getYear(decade1) / 10);\n var num2 = Math.floor(generateConfig.getYear(decade2) / 10);\n return num1 === num2;\n });\n}\nexport function isSameYear(generateConfig, year1, year2) {\n return nullableCompare(year1, year2, function () {\n return generateConfig.getYear(year1) === generateConfig.getYear(year2);\n });\n}\nexport function getQuarter(generateConfig, date) {\n var quota = Math.floor(generateConfig.getMonth(date) / 3);\n return quota + 1;\n}\nexport function isSameQuarter(generateConfig, quarter1, quarter2) {\n return nullableCompare(quarter1, quarter2, function () {\n return isSameYear(generateConfig, quarter1, quarter2) && getQuarter(generateConfig, quarter1) === getQuarter(generateConfig, quarter2);\n });\n}\nexport function isSameMonth(generateConfig, month1, month2) {\n return nullableCompare(month1, month2, function () {\n return isSameYear(generateConfig, month1, month2) && generateConfig.getMonth(month1) === generateConfig.getMonth(month2);\n });\n}\nexport function isSameDate(generateConfig, date1, date2) {\n return nullableCompare(date1, date2, function () {\n return isSameYear(generateConfig, date1, date2) && isSameMonth(generateConfig, date1, date2) && generateConfig.getDate(date1) === generateConfig.getDate(date2);\n });\n}\nexport function isSameTime(generateConfig, time1, time2) {\n return nullableCompare(time1, time2, function () {\n return generateConfig.getHour(time1) === generateConfig.getHour(time2) && generateConfig.getMinute(time1) === generateConfig.getMinute(time2) && generateConfig.getSecond(time1) === generateConfig.getSecond(time2);\n });\n}\n\n/**\n * Check if the Date is all the same of timestamp\n */\nexport function isSameTimestamp(generateConfig, time1, time2) {\n return nullableCompare(time1, time2, function () {\n return isSameDate(generateConfig, time1, time2) && isSameTime(generateConfig, time1, time2) && generateConfig.getMillisecond(time1) === generateConfig.getMillisecond(time2);\n });\n}\nexport function isSameWeek(generateConfig, locale, date1, date2) {\n return nullableCompare(date1, date2, function () {\n var weekStartDate1 = generateConfig.locale.getWeekFirstDate(locale, date1);\n var weekStartDate2 = generateConfig.locale.getWeekFirstDate(locale, date2);\n return isSameYear(generateConfig, weekStartDate1, weekStartDate2) && generateConfig.locale.getWeek(locale, date1) === generateConfig.locale.getWeek(locale, date2);\n });\n}\nexport function isSame(generateConfig, locale, source, target, type) {\n switch (type) {\n case 'date':\n return isSameDate(generateConfig, source, target);\n case 'week':\n return isSameWeek(generateConfig, locale.locale, source, target);\n case 'month':\n return isSameMonth(generateConfig, source, target);\n case 'quarter':\n return isSameQuarter(generateConfig, source, target);\n case 'year':\n return isSameYear(generateConfig, source, target);\n case 'decade':\n return isSameDecade(generateConfig, source, target);\n case 'time':\n return isSameTime(generateConfig, source, target);\n default:\n return isSameTimestamp(generateConfig, source, target);\n }\n}\n\n/** Between in date but not equal of date */\nexport function isInRange(generateConfig, startDate, endDate, current) {\n if (!startDate || !endDate || !current) {\n return false;\n }\n return generateConfig.isAfter(current, startDate) && generateConfig.isAfter(endDate, current);\n}\nexport function isSameOrAfter(generateConfig, locale, date1, date2, type) {\n if (isSame(generateConfig, locale, date1, date2, type)) {\n return true;\n }\n return generateConfig.isAfter(date1, date2);\n}\nexport function getWeekStartDate(locale, generateConfig, value) {\n var weekFirstDay = generateConfig.locale.getWeekFirstDay(locale);\n var monthStartDate = generateConfig.setDate(value, 1);\n var startDateWeekDay = generateConfig.getWeekDay(monthStartDate);\n var alignStartDate = generateConfig.addDate(monthStartDate, weekFirstDay - startDateWeekDay);\n if (generateConfig.getMonth(alignStartDate) === generateConfig.getMonth(value) && generateConfig.getDate(alignStartDate) > 1) {\n alignStartDate = generateConfig.addDate(alignStartDate, -7);\n }\n return alignStartDate;\n}\nexport function formatValue(value, _ref) {\n var generateConfig = _ref.generateConfig,\n locale = _ref.locale,\n format = _ref.format;\n if (!value) {\n return '';\n }\n return typeof format === 'function' ? format(value) : generateConfig.locale.format(locale.locale, value, format);\n}\n\n/**\n * Fill the time info into Date if provided.\n */\nexport function fillTime(generateConfig, date, time) {\n var tmpDate = date;\n var getFn = ['getHour', 'getMinute', 'getSecond', 'getMillisecond'];\n var setFn = ['setHour', 'setMinute', 'setSecond', 'setMillisecond'];\n setFn.forEach(function (fn, index) {\n if (time) {\n tmpDate = generateConfig[fn](tmpDate, generateConfig[getFn[index]](time));\n } else {\n tmpDate = generateConfig[fn](tmpDate, 0);\n }\n });\n return tmpDate;\n}","import * as vec4 from 'gl-matrix/vec4';\nexport function createMat4() {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n}\nexport function transformVector(matrix, vector) {\n var result = vec4.transformMat4([], vector, matrix);\n vec4.scale(result, result, 1 / result[3]);\n return result;\n}\nexport function mod(value, divisor) {\n var 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}\n//# sourceMappingURL=math-utils.js.map","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","/**\n * 返回一个 normalize 函数,该函数将输入的 t 从 [a, b] 线性变换到 [0, 1]\n * @param a 输入 t 的最小值\n * @param b 输入 t 的最大值\n * @returns normalize 函数\n */\nexport function createNormalize(a, b) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return b - a ? (t) => (t - a) / (b - a) : (_) => 0.5;\n}\n//# sourceMappingURL=normalize.js.map","function _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","export function getOffset(value, min, max) {\n return (value - min) / (max - min);\n}\nexport function getDirectionStyle(direction, value, min, max) {\n var offset = getOffset(value, min, max);\n var positionStyle = {};\n switch (direction) {\n case 'rtl':\n positionStyle.right = \"\".concat(offset * 100, \"%\");\n positionStyle.transform = 'translateX(50%)';\n break;\n case 'btt':\n positionStyle.bottom = \"\".concat(offset * 100, \"%\");\n positionStyle.transform = 'translateY(50%)';\n break;\n case 'ttb':\n positionStyle.top = \"\".concat(offset * 100, \"%\");\n positionStyle.transform = 'translateY(-50%)';\n break;\n default:\n positionStyle.left = \"\".concat(offset * 100, \"%\");\n positionStyle.transform = 'translateX(-50%)';\n break;\n }\n return positionStyle;\n}\n\n/** Return index value if is list or return value directly */\nexport function getIndex(value, index) {\n return Array.isArray(value) ? value[index] : value;\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { useStyle as useAntdStyle } from '@ant-design/pro-provider';\nvar genDividerStyle = function genDividerStyle(token) {\n var componentCls = token.componentCls;\n return _defineProperty({}, componentCls, {\n '&-divider': {\n flex: 'none',\n width: token.lineWidth,\n marginInline: token.marginXS,\n marginBlock: token.marginLG,\n backgroundColor: token.colorSplit,\n '&-horizontal': {\n width: 'initial',\n height: token.lineWidth,\n marginInline: token.marginLG,\n marginBlock: token.marginXS\n }\n },\n '&&-size-small &-divider': {\n marginBlock: token.marginLG,\n marginInline: token.marginXS,\n '&-horizontal': {\n marginBlock: token.marginXS,\n marginInline: token.marginLG\n }\n }\n });\n};\nexport default function useStyle(prefixCls) {\n return useAntdStyle('ProCardDivider', function (token) {\n var proCardDividerToken = _objectSpread(_objectSpread({}, token), {}, {\n componentCls: \".\".concat(prefixCls)\n });\n return [genDividerStyle(proCardDividerToken)];\n });\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport Card from \"./components/Card\";\nimport Divider from \"./components/Divider\";\nimport TabPane from \"./components/TabPane\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar Group = function Group(props) {\n return /*#__PURE__*/_jsx(Card, _objectSpread({\n bodyStyle: {\n padding: 0\n }\n }, props));\n};\n\n// 当前不对底层 Card 做封装,仅挂载子组件,直接导出\n// @ts-ignore\nvar ProCard = Card;\nProCard.isProCard = true;\nProCard.Divider = Divider;\nProCard.TabPane = TabPane;\nProCard.Group = Group;\nexport default ProCard;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { ConfigProvider } from 'antd';\nimport classNames from 'classnames';\nimport React, { useContext } from 'react';\nimport useStyle from \"./style\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar ProCardDivider = function ProCardDivider(props) {\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var proCardPrefixCls = getPrefixCls('pro-card');\n var prefixCls = \"\".concat(proCardPrefixCls, \"-divider\");\n var _useStyle = useStyle(proCardPrefixCls),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n var className = props.className,\n _props$style = props.style,\n style = _props$style === void 0 ? {} : _props$style,\n type = props.type;\n var classString = classNames(prefixCls, className, hashId, _defineProperty({}, \"\".concat(prefixCls, \"-\").concat(type), type));\n return wrapSSR( /*#__PURE__*/_jsx(\"div\", {\n className: classString,\n style: style\n }));\n};\nexport default ProCardDivider;","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport default isEmpty;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import { useIntl } from '@ant-design/pro-provider';\nimport { ConfigProvider, Space } from 'antd';\nimport React, { useContext } from 'react';\nimport { useStyle } from \"./style\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar defaultAlertOptionRender = function defaultAlertOptionRender(props) {\n var intl = props.intl,\n onCleanSelected = props.onCleanSelected;\n return [/*#__PURE__*/_jsx(\"a\", {\n onClick: onCleanSelected,\n children: intl.getMessage('alert.clear', '清空')\n }, \"0\")];\n};\nfunction TableAlert(_ref) {\n var _ref$selectedRowKeys = _ref.selectedRowKeys,\n selectedRowKeys = _ref$selectedRowKeys === void 0 ? [] : _ref$selectedRowKeys,\n onCleanSelected = _ref.onCleanSelected,\n alwaysShowAlert = _ref.alwaysShowAlert,\n selectedRows = _ref.selectedRows,\n _ref$alertInfoRender = _ref.alertInfoRender,\n alertInfoRender = _ref$alertInfoRender === void 0 ? function (_ref2) {\n var intl = _ref2.intl;\n return /*#__PURE__*/_jsxs(Space, {\n children: [intl.getMessage('alert.selected', '已选择'), selectedRowKeys.length, intl.getMessage('alert.item', '项'), \"\\xA0\\xA0\"]\n });\n } : _ref$alertInfoRender,\n _ref$alertOptionRende = _ref.alertOptionRender,\n alertOptionRender = _ref$alertOptionRende === void 0 ? defaultAlertOptionRender : _ref$alertOptionRende;\n var intl = useIntl();\n var option = alertOptionRender && alertOptionRender({\n onCleanSelected: onCleanSelected,\n selectedRowKeys: selectedRowKeys,\n selectedRows: selectedRows,\n intl: intl\n });\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var className = getPrefixCls('pro-table-alert');\n var _useStyle = useStyle(className),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n if (alertInfoRender === false) {\n return null;\n }\n var dom = alertInfoRender({\n intl: intl,\n selectedRowKeys: selectedRowKeys,\n selectedRows: selectedRows,\n onCleanSelected: onCleanSelected\n });\n if (dom === false || selectedRowKeys.length < 1 && !alwaysShowAlert) {\n return null;\n }\n return wrapSSR( /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(className, \" \").concat(hashId).trim(),\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(className, \"-container \").concat(hashId).trim(),\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"\".concat(className, \"-info \").concat(hashId).trim(),\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(className, \"-info-content \").concat(hashId).trim(),\n children: dom\n }), option ? /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(className, \"-info-option \").concat(hashId).trim(),\n children: option\n }) : null]\n })\n })\n }));\n}\nexport default TableAlert;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { setAlpha, useStyle as useAntdStyle } from '@ant-design/pro-provider';\nvar genProStyle = function genProStyle(token) {\n return _defineProperty({}, token.componentCls, {\n marginBlockEnd: 16,\n backgroundColor: setAlpha(token.colorTextBase, 0.02),\n borderRadius: token.borderRadius,\n border: 'none',\n '&-container': {\n paddingBlock: token.paddingSM,\n paddingInline: token.paddingLG\n },\n '&-info': {\n display: 'flex',\n alignItems: 'center',\n transition: 'all 0.3s',\n color: token.colorTextTertiary,\n '&-content': {\n flex: 1\n },\n '&-option': {\n minWidth: 48,\n paddingInlineStart: 16\n }\n }\n });\n};\nexport function useStyle(prefixCls) {\n return useAntdStyle('ProTableAlert', function (token) {\n var proToken = _objectSpread(_objectSpread({}, token), {}, {\n componentCls: \".\".concat(prefixCls)\n });\n return [genProStyle(proToken)];\n });\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { BetaSchemaForm } from '@ant-design/pro-form';\nimport { ProProvider } from '@ant-design/pro-provider';\nimport { ConfigProvider, Table } from 'antd';\nimport classNames from 'classnames';\nimport omit from \"rc-util/es/omit\";\nimport React, { useContext, useMemo } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction toLowerLine(str) {\n var temp = str.replace(/[A-Z]/g, function (match) {\n return \"-\".concat(match.toLowerCase());\n });\n if (temp.startsWith('-')) {\n // 如果首字母是大写,执行replace时会多一个_,这里需要去掉\n temp = temp.slice(1);\n }\n return temp;\n}\n/**\n * 获取当前选择的 Form Layout 配置\n *\n * @param isForm\n * @param searchConfig\n * @returns LightFilter | QueryFilter | ProForm\n */\nvar getFormCompetent = function getFormCompetent(isForm, searchConfig) {\n if (!isForm && searchConfig !== false) {\n if ((searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.filterType) === 'light') {\n return 'LightFilter';\n }\n return 'QueryFilter';\n }\n return 'Form';\n};\n\n/**\n * 获取需要传给相应表单的props\n *\n * @param searchConfig\n * @param name\n */\nvar getFromProps = function getFromProps(isForm, searchConfig, name) {\n if (!isForm && name === 'LightFilter') {\n // 传给 lightFilter 的问题\n return omit(_objectSpread({}, searchConfig), ['labelWidth', 'defaultCollapsed', 'filterType']);\n }\n if (!isForm) {\n // 传给 QueryFilter 的配置\n return omit(_objectSpread({\n labelWidth: searchConfig ? searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.labelWidth : undefined,\n defaultCollapsed: true\n }, searchConfig), ['filterType']);\n }\n return {};\n};\n\n/**\n * 从formConfig中获取传给相应表单的配置\n *\n * @param isForm\n * @param formConfig\n */\nvar getFormConfigs = function getFormConfigs(isForm, formConfig) {\n if (isForm) {\n // 传给Form的配置\n return omit(formConfig, ['ignoreRules']);\n }\n // 传给Filter的配置\n return _objectSpread({\n ignoreRules: true\n }, formConfig);\n};\n/**\n * 这里会把 列配置转化为 form 表单\n *\n * @param param0\n * @returns\n */\nvar FormRender = function FormRender(_ref) {\n var onSubmit = _ref.onSubmit,\n formRef = _ref.formRef,\n _ref$dateFormatter = _ref.dateFormatter,\n dateFormatter = _ref$dateFormatter === void 0 ? 'string' : _ref$dateFormatter,\n type = _ref.type,\n columns = _ref.columns,\n action = _ref.action,\n ghost = _ref.ghost,\n manualRequest = _ref.manualRequest,\n _onReset = _ref.onReset,\n submitButtonLoading = _ref.submitButtonLoading,\n searchConfig = _ref.search,\n formConfig = _ref.form,\n bordered = _ref.bordered;\n var _useContext = useContext(ProProvider),\n hashId = _useContext.hashId;\n var isForm = type === 'form';\n /** 提交表单,根据两种模式不同,方法不相同 */\n var submit = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(values, firstLoad) {\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (onSubmit) {\n onSubmit(values, firstLoad);\n }\n case 1:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function submit(_x, _x2) {\n return _ref2.apply(this, arguments);\n };\n }();\n var _useContext2 = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext2.getPrefixCls;\n var columnsList = useMemo(function () {\n return columns.filter(function (item) {\n if (item === Table.EXPAND_COLUMN || item === Table.SELECTION_COLUMN) {\n return false;\n }\n if ((item.hideInSearch || item.search === false) && type !== 'form') {\n return false;\n }\n if (type === 'form' && item.hideInForm) {\n return false;\n }\n return true;\n }).map(function (item) {\n var _item$dataIndex;\n var finalValueType = !item.valueType || ['textarea', 'jsonCode', 'code'].includes(item === null || item === void 0 ? void 0 : item.valueType) && type === 'table' ? 'text' : item === null || item === void 0 ? void 0 : item.valueType;\n var columnKey = (item === null || item === void 0 ? void 0 : item.key) || (item === null || item === void 0 || (_item$dataIndex = item.dataIndex) === null || _item$dataIndex === void 0 ? void 0 : _item$dataIndex.toString());\n return _objectSpread(_objectSpread(_objectSpread({}, item), {}, {\n width: undefined\n }, item.search && _typeof(item.search) === 'object' ? item.search : {}), {}, {\n valueType: finalValueType,\n proFieldProps: _objectSpread(_objectSpread({}, item.proFieldProps), {}, {\n proFieldKey: columnKey ? \"table-field-\".concat(columnKey) : undefined\n })\n });\n });\n }, [columns, type]);\n var className = getPrefixCls('pro-table-search');\n var formClassName = getPrefixCls('pro-table-form');\n var competentName = useMemo(function () {\n return getFormCompetent(isForm, searchConfig);\n }, [searchConfig, isForm]);\n\n // 传给每个表单的配置,理论上大家都需要\n var loadingProps = useMemo(function () {\n return {\n submitter: {\n submitButtonProps: {\n loading: submitButtonLoading\n }\n }\n };\n }, [submitButtonLoading]);\n return /*#__PURE__*/_jsx(\"div\", {\n className: classNames(hashId, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, getPrefixCls('pro-card'), true), \"\".concat(getPrefixCls('pro-card'), \"-border\"), !!bordered), \"\".concat(getPrefixCls('pro-card'), \"-bordered\"), !!bordered), \"\".concat(getPrefixCls('pro-card'), \"-ghost\"), !!ghost), className, true), formClassName, isForm), getPrefixCls(\"pro-table-search-\".concat(toLowerLine(competentName))), true), \"\".concat(className, \"-ghost\"), ghost), searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.className, searchConfig !== false && (searchConfig === null || searchConfig === void 0 ? void 0 : searchConfig.className))),\n children: /*#__PURE__*/_jsx(BetaSchemaForm, _objectSpread(_objectSpread(_objectSpread(_objectSpread({\n layoutType: competentName,\n columns: columnsList,\n type: type\n }, loadingProps), getFromProps(isForm, searchConfig, competentName)), getFormConfigs(isForm, formConfig || {})), {}, {\n formRef: formRef,\n action: action,\n dateFormatter: dateFormatter,\n onInit: function onInit(values, form) {\n formRef.current = form;\n // 触发一个 submit,之所以这里触发是为了保证 value 都被 format了\n if (type !== 'form') {\n var _action$current, _action$current2, _action$current2$setP;\n // 修改 pageSize,变成从 url 中获取的\n var pageInfo = (_action$current = action.current) === null || _action$current === void 0 ? void 0 : _action$current.pageInfo;\n // 从 values 里获取是因为有时候要从 url中获取的 pageSize。\n var _ref3 = values,\n _ref3$current = _ref3.current,\n current = _ref3$current === void 0 ? pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.current : _ref3$current,\n _ref3$pageSize = _ref3.pageSize,\n pageSize = _ref3$pageSize === void 0 ? pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.pageSize : _ref3$pageSize;\n (_action$current2 = action.current) === null || _action$current2 === void 0 || (_action$current2$setP = _action$current2.setPageInfo) === null || _action$current2$setP === void 0 || _action$current2$setP.call(_action$current2, _objectSpread(_objectSpread({}, pageInfo), {}, {\n current: parseInt(current, 10),\n pageSize: parseInt(pageSize, 10)\n }));\n /** 如果是手动模式不需要提交 */\n if (manualRequest) return;\n submit(values, true);\n }\n },\n onReset: function onReset(values) {\n _onReset === null || _onReset === void 0 || _onReset(values);\n },\n onFinish: function onFinish(values) {\n submit(values, false);\n },\n initialValues: formConfig === null || formConfig === void 0 ? void 0 : formConfig.initialValues\n }))\n });\n};\nexport default FormRender;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { isDeepEqualReact, omitUndefined } from '@ant-design/pro-utils';\nimport omit from \"rc-util/es/omit\";\nimport React from 'react';\nimport { isBordered } from \"../../utils/index\";\nimport FormRender from \"./FormRender\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar FormSearch = /*#__PURE__*/function (_React$Component) {\n _inherits(FormSearch, _React$Component);\n var _super = _createSuper(FormSearch);\n function FormSearch() {\n var _this;\n _classCallCheck(this, FormSearch);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n /** 查询表单相关的配置 */\n _defineProperty(_assertThisInitialized(_this), \"onSubmit\", function (value, firstLoad) {\n var _this$props = _this.props,\n pagination = _this$props.pagination,\n _this$props$beforeSea = _this$props.beforeSearchSubmit,\n beforeSearchSubmit = _this$props$beforeSea === void 0 ? function (searchParams) {\n return searchParams;\n } : _this$props$beforeSea,\n action = _this$props.action,\n onSubmit = _this$props.onSubmit,\n onFormSearchSubmit = _this$props.onFormSearchSubmit;\n // 只传入 pagination 中的 current 和 pageSize 参数\n var pageInfo = pagination ? omitUndefined({\n current: pagination.current,\n pageSize: pagination.pageSize\n }) : {};\n var submitParams = _objectSpread(_objectSpread({}, value), {}, {\n _timestamp: Date.now()\n }, pageInfo);\n var omitParams = omit(beforeSearchSubmit(submitParams), Object.keys(pageInfo));\n onFormSearchSubmit(omitParams);\n if (!firstLoad) {\n var _action$current, _action$current$setPa;\n // back first page\n (_action$current = action.current) === null || _action$current === void 0 || (_action$current$setPa = _action$current.setPageInfo) === null || _action$current$setPa === void 0 || _action$current$setPa.call(_action$current, {\n current: 1\n });\n }\n // 不是第一次提交就不触发,第一次提交是 js 触发的\n // 为了解决 https://github.com/ant-design/pro-components/issues/579\n if (onSubmit && !firstLoad) {\n onSubmit === null || onSubmit === void 0 || onSubmit(value);\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"onReset\", function (value) {\n var _action$current2, _action$current2$setP;\n var _this$props2 = _this.props,\n pagination = _this$props2.pagination,\n _this$props2$beforeSe = _this$props2.beforeSearchSubmit,\n beforeSearchSubmit = _this$props2$beforeSe === void 0 ? function (searchParams) {\n return searchParams;\n } : _this$props2$beforeSe,\n action = _this$props2.action,\n onFormSearchSubmit = _this$props2.onFormSearchSubmit,\n onReset = _this$props2.onReset;\n var pageInfo = pagination ? omitUndefined({\n current: pagination.current,\n pageSize: pagination.pageSize\n }) : {};\n var omitParams = omit(beforeSearchSubmit(_objectSpread(_objectSpread({}, value), pageInfo)), Object.keys(pageInfo));\n onFormSearchSubmit(omitParams);\n // back first page\n (_action$current2 = action.current) === null || _action$current2 === void 0 || (_action$current2$setP = _action$current2.setPageInfo) === null || _action$current2$setP === void 0 || _action$current2$setP.call(_action$current2, {\n current: 1\n });\n onReset === null || onReset === void 0 || onReset();\n });\n /**\n * 只 Diff 需要用的 props,能减少 5 次左右的render\n *\n * @param next\n * @see 因为 hooks 每次的 setFormSearch 都是新的,所以每次都触发 render\n * @see action 也是同样的原因\n * @returns\n */\n _defineProperty(_assertThisInitialized(_this), \"isEqual\", function (next) {\n var _this$props3 = _this.props,\n columns = _this$props3.columns,\n loading = _this$props3.loading,\n formRef = _this$props3.formRef,\n type = _this$props3.type,\n cardBordered = _this$props3.cardBordered,\n dateFormatter = _this$props3.dateFormatter,\n form = _this$props3.form,\n search = _this$props3.search,\n manualRequest = _this$props3.manualRequest;\n var diffProps = {\n columns: columns,\n loading: loading,\n formRef: formRef,\n type: type,\n cardBordered: cardBordered,\n dateFormatter: dateFormatter,\n form: form,\n search: search,\n manualRequest: manualRequest\n };\n return !isDeepEqualReact(diffProps, {\n columns: next.columns,\n formRef: next.formRef,\n loading: next.loading,\n type: next.type,\n cardBordered: next.cardBordered,\n dateFormatter: next.dateFormatter,\n form: next.form,\n search: next.search,\n manualRequest: next.manualRequest\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"shouldComponentUpdate\", function (next) {\n return _this.isEqual(next);\n });\n _defineProperty(_assertThisInitialized(_this), \"render\", function () {\n var _this$props4 = _this.props,\n columns = _this$props4.columns,\n loading = _this$props4.loading,\n formRef = _this$props4.formRef,\n type = _this$props4.type,\n action = _this$props4.action,\n cardBordered = _this$props4.cardBordered,\n dateFormatter = _this$props4.dateFormatter,\n form = _this$props4.form,\n search = _this$props4.search,\n pagination = _this$props4.pagination,\n ghost = _this$props4.ghost,\n manualRequest = _this$props4.manualRequest;\n var pageInfo = pagination ? omitUndefined({\n current: pagination.current,\n pageSize: pagination.pageSize\n }) : {};\n return /*#__PURE__*/_jsx(FormRender, {\n submitButtonLoading: loading,\n columns: columns,\n type: type,\n ghost: ghost,\n formRef: formRef,\n onSubmit: _this.onSubmit,\n manualRequest: manualRequest,\n onReset: _this.onReset,\n dateFormatter: dateFormatter,\n search: search,\n form: _objectSpread(_objectSpread({\n autoFocusFirstInput: false\n }, form), {}, {\n extraUrlParams: _objectSpread(_objectSpread({}, pageInfo), form === null || form === void 0 ? void 0 : form.extraUrlParams)\n }),\n action: action,\n bordered: isBordered('search', cardBordered)\n });\n });\n return _this;\n }\n return _createClass(FormSearch);\n}(React.Component);\nexport default FormSearch;","// This icon file is generated automatically.\nvar ReloadOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M909.1 209.3l-56.4 44.1C775.8 155.1 656.2 92 521.9 92 290 92 102.3 279.5 102 511.5 101.7 743.7 289.8 932 521.9 932c181.3 0 335.8-115 394.6-276.1 1.5-4.2-.7-8.9-4.9-10.3l-56.7-19.5a8 8 0 00-10.1 4.8c-1.8 5-3.8 10-5.9 14.9-17.3 41-42.1 77.8-73.7 109.4A344.77 344.77 0 01655.9 829c-42.3 17.9-87.4 27-133.8 27-46.5 0-91.5-9.1-133.8-27A341.5 341.5 0 01279 755.2a342.16 342.16 0 01-73.7-109.4c-17.9-42.4-27-87.4-27-133.9s9.1-91.5 27-133.9c17.3-41 42.1-77.8 73.7-109.4 31.6-31.6 68.4-56.4 109.3-73.8 42.3-17.9 87.4-27 133.8-27 46.5 0 91.5 9.1 133.8 27a341.5 341.5 0 01109.3 73.8c9.9 9.9 19.2 20.4 27.8 31.4l-60.2 47a8 8 0 003 14.1l175.6 43c5 1.2 9.9-2.6 9.9-7.7l.8-180.9c-.1-6.6-7.8-10.3-13-6.2z\" } }] }, \"name\": \"reload\", \"theme\": \"outlined\" };\nexport default ReloadOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport ReloadOutlinedSvg from \"@ant-design/icons-svg/es/asn/ReloadOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar ReloadOutlined = function ReloadOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: ReloadOutlinedSvg\n }));\n};\n\n/**![reload](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTkwOS4xIDIwOS4zbC01Ni40IDQ0LjFDNzc1LjggMTU1LjEgNjU2LjIgOTIgNTIxLjkgOTIgMjkwIDkyIDEwMi4zIDI3OS41IDEwMiA1MTEuNSAxMDEuNyA3NDMuNyAyODkuOCA5MzIgNTIxLjkgOTMyYzE4MS4zIDAgMzM1LjgtMTE1IDM5NC42LTI3Ni4xIDEuNS00LjItLjctOC45LTQuOS0xMC4zbC01Ni43LTE5LjVhOCA4IDAgMDAtMTAuMSA0LjhjLTEuOCA1LTMuOCAxMC01LjkgMTQuOS0xNy4zIDQxLTQyLjEgNzcuOC03My43IDEwOS40QTM0NC43NyAzNDQuNzcgMCAwMTY1NS45IDgyOWMtNDIuMyAxNy45LTg3LjQgMjctMTMzLjggMjctNDYuNSAwLTkxLjUtOS4xLTEzMy44LTI3QTM0MS41IDM0MS41IDAgMDEyNzkgNzU1LjJhMzQyLjE2IDM0Mi4xNiAwIDAxLTczLjctMTA5LjRjLTE3LjktNDIuNC0yNy04Ny40LTI3LTEzMy45czkuMS05MS41IDI3LTEzMy45YzE3LjMtNDEgNDIuMS03Ny44IDczLjctMTA5LjQgMzEuNi0zMS42IDY4LjQtNTYuNCAxMDkuMy03My44IDQyLjMtMTcuOSA4Ny40LTI3IDEzMy44LTI3IDQ2LjUgMCA5MS41IDkuMSAxMzMuOCAyN2EzNDEuNSAzNDEuNSAwIDAxMTA5LjMgNzMuOGM5LjkgOS45IDE5LjIgMjAuNCAyNy44IDMxLjRsLTYwLjIgNDdhOCA4IDAgMDAzIDE0LjFsMTc1LjYgNDNjNSAxLjIgOS45LTIuNiA5LjktNy43bC44LTE4MC45Yy0uMS02LjYtNy44LTEwLjMtMTMtNi4yeiIgLz48L3N2Zz4=) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(ReloadOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'ReloadOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar VerticalAlignBottomOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M859.9 780H164.1c-4.5 0-8.1 3.6-8.1 8v60c0 4.4 3.6 8 8.1 8h695.8c4.5 0 8.1-3.6 8.1-8v-60c0-4.4-3.6-8-8.1-8zM505.7 669a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V176c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8z\" } }] }, \"name\": \"vertical-align-bottom\", \"theme\": \"outlined\" };\nexport default VerticalAlignBottomOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport VerticalAlignBottomOutlinedSvg from \"@ant-design/icons-svg/es/asn/VerticalAlignBottomOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar VerticalAlignBottomOutlined = function VerticalAlignBottomOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: VerticalAlignBottomOutlinedSvg\n }));\n};\n\n/**![vertical-align-bottom](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg1OS45IDc4MEgxNjQuMWMtNC41IDAtOC4xIDMuNi04LjEgOHY2MGMwIDQuNCAzLjYgOCA4LjEgOGg2OTUuOGM0LjUgMCA4LjEtMy42IDguMS04di02MGMwLTQuNC0zLjYtOC04LjEtOHpNNTA1LjcgNjY5YTggOCAwIDAwMTIuNiAwbDExMi0xNDEuN2M0LjEtNS4yLjQtMTIuOS02LjMtMTIuOWgtNzQuMVYxNzZjMC00LjQtMy42LTgtOC04aC02MGMtNC40IDAtOCAzLjYtOCA4djMzOC4zSDQwMGMtNi43IDAtMTAuNCA3LjctNi4zIDEyLjlsMTEyIDE0MS44eiIgLz48L3N2Zz4=) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(VerticalAlignBottomOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'VerticalAlignBottomOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar VerticalAlignMiddleOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M859.9 474H164.1c-4.5 0-8.1 3.6-8.1 8v60c0 4.4 3.6 8 8.1 8h695.8c4.5 0 8.1-3.6 8.1-8v-60c0-4.4-3.6-8-8.1-8zm-353.6-74.7c2.9 3.7 8.5 3.7 11.3 0l100.8-127.5c3.7-4.7.4-11.7-5.7-11.7H550V104c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v156h-62.8c-6 0-9.4 7-5.7 11.7l100.8 127.6zm11.4 225.4a7.14 7.14 0 00-11.3 0L405.6 752.3a7.23 7.23 0 005.7 11.7H474v156c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V764h62.8c6 0 9.4-7 5.7-11.7L517.7 624.7z\" } }] }, \"name\": \"vertical-align-middle\", \"theme\": \"outlined\" };\nexport default VerticalAlignMiddleOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport VerticalAlignMiddleOutlinedSvg from \"@ant-design/icons-svg/es/asn/VerticalAlignMiddleOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar VerticalAlignMiddleOutlined = function VerticalAlignMiddleOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: VerticalAlignMiddleOutlinedSvg\n }));\n};\n\n/**![vertical-align-middle](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg1OS45IDQ3NEgxNjQuMWMtNC41IDAtOC4xIDMuNi04LjEgOHY2MGMwIDQuNCAzLjYgOCA4LjEgOGg2OTUuOGM0LjUgMCA4LjEtMy42IDguMS04di02MGMwLTQuNC0zLjYtOC04LjEtOHptLTM1My42LTc0LjdjMi45IDMuNyA4LjUgMy43IDExLjMgMGwxMDAuOC0xMjcuNWMzLjctNC43LjQtMTEuNy01LjctMTEuN0g1NTBWMTA0YzAtNC40LTMuNi04LTgtOGgtNjBjLTQuNCAwLTggMy42LTggOHYxNTZoLTYyLjhjLTYgMC05LjQgNy01LjcgMTEuN2wxMDAuOCAxMjcuNnptMTEuNCAyMjUuNGE3LjE0IDcuMTQgMCAwMC0xMS4zIDBMNDA1LjYgNzUyLjNhNy4yMyA3LjIzIDAgMDA1LjcgMTEuN0g0NzR2MTU2YzAgNC40IDMuNiA4IDggOGg2MGM0LjQgMCA4LTMuNiA4LThWNzY0aDYyLjhjNiAwIDkuNC03IDUuNy0xMS43TDUxNy43IDYyNC43eiIgLz48L3N2Zz4=) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(VerticalAlignMiddleOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'VerticalAlignMiddleOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar VerticalAlignTopOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M859.9 168H164.1c-4.5 0-8.1 3.6-8.1 8v60c0 4.4 3.6 8 8.1 8h695.8c4.5 0 8.1-3.6 8.1-8v-60c0-4.4-3.6-8-8.1-8zM518.3 355a8 8 0 00-12.6 0l-112 141.7a7.98 7.98 0 006.3 12.9h73.9V848c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V509.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 355z\" } }] }, \"name\": \"vertical-align-top\", \"theme\": \"outlined\" };\nexport default VerticalAlignTopOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport VerticalAlignTopOutlinedSvg from \"@ant-design/icons-svg/es/asn/VerticalAlignTopOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar VerticalAlignTopOutlined = function VerticalAlignTopOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: VerticalAlignTopOutlinedSvg\n }));\n};\n\n/**![vertical-align-top](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg1OS45IDE2OEgxNjQuMWMtNC41IDAtOC4xIDMuNi04LjEgOHY2MGMwIDQuNCAzLjYgOCA4LjEgOGg2OTUuOGM0LjUgMCA4LjEtMy42IDguMS04di02MGMwLTQuNC0zLjYtOC04LjEtOHpNNTE4LjMgMzU1YTggOCAwIDAwLTEyLjYgMGwtMTEyIDE0MS43YTcuOTggNy45OCAwIDAwNi4zIDEyLjloNzMuOVY4NDhjMCA0LjQgMy42IDggOCA4aDYwYzQuNCAwIDgtMy42IDgtOFY1MDkuN0g2MjRjNi43IDAgMTAuNC03LjcgNi4zLTEyLjlMNTE4LjMgMzU1eiIgLz48L3N2Zz4=) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(VerticalAlignTopOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'VerticalAlignTopOutlined';\n}\nexport default RefIcon;","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar _excluded = [\"key\", \"dataIndex\", \"children\"],\n _excluded2 = [\"disabled\"];\nimport { SettingOutlined, VerticalAlignBottomOutlined, VerticalAlignMiddleOutlined, VerticalAlignTopOutlined } from '@ant-design/icons';\nimport { ProProvider, useIntl } from '@ant-design/pro-provider';\nimport { runFunction, useRefFunction } from '@ant-design/pro-utils';\nimport { Checkbox, ConfigProvider, Popover, Space, Tooltip, Tree, Typography } from 'antd';\nimport classNames from 'classnames';\nimport omit from \"rc-util/es/omit\";\nimport React, { useContext, useEffect, useMemo, useRef } from 'react';\nimport { TableContext } from \"../../Store/Provide\";\nimport { genColumnKey } from \"../../utils/index\";\nimport { useStyle } from \"./style\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar ToolTipIcon = function ToolTipIcon(_ref) {\n var title = _ref.title,\n show = _ref.show,\n children = _ref.children,\n columnKey = _ref.columnKey,\n fixed = _ref.fixed;\n var _useContext = useContext(TableContext),\n columnsMap = _useContext.columnsMap,\n setColumnsMap = _useContext.setColumnsMap;\n if (!show) {\n return null;\n }\n return /*#__PURE__*/_jsx(Tooltip, {\n title: title,\n children: /*#__PURE__*/_jsx(\"span\", {\n onClick: function onClick(e) {\n e.stopPropagation();\n e.preventDefault();\n var config = columnsMap[columnKey] || {};\n var columnKeyMap = _objectSpread(_objectSpread({}, columnsMap), {}, _defineProperty({}, columnKey, _objectSpread(_objectSpread({}, config), {}, {\n fixed: fixed\n })));\n setColumnsMap(columnKeyMap);\n },\n children: children\n })\n });\n};\nvar CheckboxListItem = function CheckboxListItem(_ref2) {\n var columnKey = _ref2.columnKey,\n isLeaf = _ref2.isLeaf,\n title = _ref2.title,\n className = _ref2.className,\n fixed = _ref2.fixed,\n showListItemOption = _ref2.showListItemOption;\n var intl = useIntl();\n var _useContext2 = useContext(ProProvider),\n hashId = _useContext2.hashId;\n var dom = /*#__PURE__*/_jsxs(\"span\", {\n className: \"\".concat(className, \"-list-item-option \").concat(hashId).trim(),\n children: [/*#__PURE__*/_jsx(ToolTipIcon, {\n columnKey: columnKey,\n fixed: \"left\",\n title: intl.getMessage('tableToolBar.leftPin', '固定在列首'),\n show: fixed !== 'left',\n children: /*#__PURE__*/_jsx(VerticalAlignTopOutlined, {})\n }), /*#__PURE__*/_jsx(ToolTipIcon, {\n columnKey: columnKey,\n fixed: undefined,\n title: intl.getMessage('tableToolBar.noPin', '不固定'),\n show: !!fixed,\n children: /*#__PURE__*/_jsx(VerticalAlignMiddleOutlined, {})\n }), /*#__PURE__*/_jsx(ToolTipIcon, {\n columnKey: columnKey,\n fixed: \"right\",\n title: intl.getMessage('tableToolBar.rightPin', '固定在列尾'),\n show: fixed !== 'right',\n children: /*#__PURE__*/_jsx(VerticalAlignBottomOutlined, {})\n })]\n });\n return /*#__PURE__*/_jsxs(\"span\", {\n className: \"\".concat(className, \"-list-item \").concat(hashId).trim(),\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(className, \"-list-item-title \").concat(hashId).trim(),\n children: title\n }), showListItemOption && !isLeaf ? dom : null]\n }, columnKey);\n};\nvar CheckboxList = function CheckboxList(_ref3) {\n var _treeDataConfig$list, _treeDataConfig$list2, _treeDataConfig$list3;\n var list = _ref3.list,\n draggable = _ref3.draggable,\n checkable = _ref3.checkable,\n showListItemOption = _ref3.showListItemOption,\n className = _ref3.className,\n _ref3$showTitle = _ref3.showTitle,\n showTitle = _ref3$showTitle === void 0 ? true : _ref3$showTitle,\n listTitle = _ref3.title,\n _ref3$listHeight = _ref3.listHeight,\n listHeight = _ref3$listHeight === void 0 ? 280 : _ref3$listHeight;\n var _useContext3 = useContext(ProProvider),\n hashId = _useContext3.hashId;\n var _useContext4 = useContext(TableContext),\n columnsMap = _useContext4.columnsMap,\n setColumnsMap = _useContext4.setColumnsMap,\n sortKeyColumns = _useContext4.sortKeyColumns,\n setSortKeyColumns = _useContext4.setSortKeyColumns;\n var show = list && list.length > 0;\n var treeDataConfig = useMemo(function () {\n if (!show) return {};\n var checkedKeys = [];\n var treeMap = new Map();\n var loopData = function loopData(data, parentConfig) {\n return data.map(function (_ref4) {\n var _config$disable;\n var key = _ref4.key,\n dataIndex = _ref4.dataIndex,\n children = _ref4.children,\n rest = _objectWithoutProperties(_ref4, _excluded);\n var columnKey = genColumnKey(key, [parentConfig === null || parentConfig === void 0 ? void 0 : parentConfig.columnKey, rest.index].filter(Boolean).join('-'));\n var config = columnsMap[columnKey || 'null'] || {\n show: true\n };\n if (config.show !== false && !children) {\n checkedKeys.push(columnKey);\n }\n var item = _objectSpread(_objectSpread({\n key: columnKey\n }, omit(rest, ['className'])), {}, {\n selectable: false,\n disabled: config.disable === true,\n disableCheckbox: typeof config.disable === 'boolean' ? config.disable : (_config$disable = config.disable) === null || _config$disable === void 0 ? void 0 : _config$disable.checkbox,\n isLeaf: parentConfig ? true : undefined\n });\n if (children) {\n var _item$children;\n item.children = loopData(children, _objectSpread(_objectSpread({}, config), {}, {\n columnKey: columnKey\n }));\n // 如果children 已经全部是show了,把自己也设置为show\n if ((_item$children = item.children) !== null && _item$children !== void 0 && _item$children.every(function (childrenItem) {\n return checkedKeys === null || checkedKeys === void 0 ? void 0 : checkedKeys.includes(childrenItem.key);\n })) {\n checkedKeys.push(columnKey);\n }\n }\n treeMap.set(key, item);\n return item;\n });\n };\n return {\n list: loopData(list),\n keys: checkedKeys,\n map: treeMap\n };\n }, [columnsMap, list, show]);\n\n /** 移动到指定的位置 */\n var move = useRefFunction(function (id, targetId, dropPosition) {\n var newMap = _objectSpread({}, columnsMap);\n var newColumns = _toConsumableArray(sortKeyColumns);\n var findIndex = newColumns.findIndex(function (columnKey) {\n return columnKey === id;\n });\n var targetIndex = newColumns.findIndex(function (columnKey) {\n return columnKey === targetId;\n });\n var isDownWard = dropPosition >= findIndex;\n if (findIndex < 0) return;\n var targetItem = newColumns[findIndex];\n newColumns.splice(findIndex, 1);\n if (dropPosition === 0) {\n newColumns.unshift(targetItem);\n } else {\n newColumns.splice(isDownWard ? targetIndex : targetIndex + 1, 0, targetItem);\n }\n // 重新生成排序数组\n newColumns.forEach(function (key, order) {\n newMap[key] = _objectSpread(_objectSpread({}, newMap[key] || {}), {}, {\n order: order\n });\n });\n // 更新数组\n setColumnsMap(newMap);\n setSortKeyColumns(newColumns);\n });\n\n /** 选中反选功能 */\n var onCheckTree = useRefFunction(function (e) {\n var newColumnMap = _objectSpread({}, columnsMap);\n var loopSetShow = function loopSetShow(key) {\n var _treeDataConfig$map;\n var newSetting = _objectSpread({}, newColumnMap[key]);\n newSetting.show = e.checked;\n // 如果含有子节点,也要选中\n if ((_treeDataConfig$map = treeDataConfig.map) !== null && _treeDataConfig$map !== void 0 && (_treeDataConfig$map = _treeDataConfig$map.get(key)) !== null && _treeDataConfig$map !== void 0 && _treeDataConfig$map.children) {\n var _treeDataConfig$map$g;\n (_treeDataConfig$map$g = treeDataConfig.map.get(key)) === null || _treeDataConfig$map$g === void 0 || (_treeDataConfig$map$g = _treeDataConfig$map$g.children) === null || _treeDataConfig$map$g === void 0 || _treeDataConfig$map$g.forEach(function (item) {\n return loopSetShow(item.key);\n });\n }\n newColumnMap[key] = newSetting;\n };\n loopSetShow(e.node.key);\n setColumnsMap(_objectSpread({}, newColumnMap));\n });\n if (!show) {\n return null;\n }\n var listDom = /*#__PURE__*/_jsx(Tree, {\n itemHeight: 24,\n draggable: draggable && !!((_treeDataConfig$list = treeDataConfig.list) !== null && _treeDataConfig$list !== void 0 && _treeDataConfig$list.length) && ((_treeDataConfig$list2 = treeDataConfig.list) === null || _treeDataConfig$list2 === void 0 ? void 0 : _treeDataConfig$list2.length) > 1,\n checkable: checkable,\n onDrop: function onDrop(info) {\n var dropKey = info.node.key;\n var dragKey = info.dragNode.key;\n var dropPosition = info.dropPosition,\n dropToGap = info.dropToGap;\n var position = dropPosition === -1 || !dropToGap ? dropPosition + 1 : dropPosition;\n move(dragKey, dropKey, position);\n },\n blockNode: true,\n onCheck: function onCheck(_, e) {\n return onCheckTree(e);\n },\n checkedKeys: treeDataConfig.keys,\n showLine: false,\n titleRender: function titleRender(_node) {\n var node = _objectSpread(_objectSpread({}, _node), {}, {\n children: undefined\n });\n if (!node.title) return null;\n var normalizedTitle = runFunction(node.title, node);\n var wrappedTitle = /*#__PURE__*/_jsx(Typography.Text, {\n style: {\n width: 80\n },\n ellipsis: {\n tooltip: normalizedTitle\n },\n children: normalizedTitle\n });\n return /*#__PURE__*/_jsx(CheckboxListItem, _objectSpread(_objectSpread({\n className: className\n }, omit(node, ['key'])), {}, {\n showListItemOption: showListItemOption,\n title: wrappedTitle,\n columnKey: node.key\n }));\n },\n height: listHeight,\n treeData: (_treeDataConfig$list3 = treeDataConfig.list) === null || _treeDataConfig$list3 === void 0 ? void 0 : _treeDataConfig$list3.map(function (_ref5) {\n var disabled = _ref5.disabled,\n config = _objectWithoutProperties(_ref5, _excluded2);\n return config;\n })\n });\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [showTitle && /*#__PURE__*/_jsx(\"span\", {\n className: \"\".concat(className, \"-list-title \").concat(hashId).trim(),\n children: listTitle\n }), listDom]\n });\n};\nvar GroupCheckboxList = function GroupCheckboxList(_ref6) {\n var localColumns = _ref6.localColumns,\n className = _ref6.className,\n draggable = _ref6.draggable,\n checkable = _ref6.checkable,\n showListItemOption = _ref6.showListItemOption,\n listsHeight = _ref6.listsHeight;\n var _useContext5 = useContext(ProProvider),\n hashId = _useContext5.hashId;\n var rightList = [];\n var leftList = [];\n var list = [];\n var intl = useIntl();\n localColumns.forEach(function (item) {\n /** 不在 setting 中展示的 */\n if (item.hideInSetting) {\n return;\n }\n var fixed = item.fixed;\n if (fixed === 'left') {\n leftList.push(item);\n return;\n }\n if (fixed === 'right') {\n rightList.push(item);\n return;\n }\n list.push(item);\n });\n var showRight = rightList && rightList.length > 0;\n var showLeft = leftList && leftList.length > 0;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: classNames(\"\".concat(className, \"-list\"), hashId, _defineProperty({}, \"\".concat(className, \"-list-group\"), showRight || showLeft)),\n children: [/*#__PURE__*/_jsx(CheckboxList, {\n title: intl.getMessage('tableToolBar.leftFixedTitle', '固定在左侧'),\n list: leftList,\n draggable: draggable,\n checkable: checkable,\n showListItemOption: showListItemOption,\n className: className,\n listHeight: listsHeight\n }), /*#__PURE__*/_jsx(CheckboxList, {\n list: list,\n draggable: draggable,\n checkable: checkable,\n showListItemOption: showListItemOption,\n title: intl.getMessage('tableToolBar.noFixedTitle', '不固定'),\n showTitle: showLeft || showRight,\n className: className,\n listHeight: listsHeight\n }), /*#__PURE__*/_jsx(CheckboxList, {\n title: intl.getMessage('tableToolBar.rightFixedTitle', '固定在右侧'),\n list: rightList,\n draggable: draggable,\n checkable: checkable,\n showListItemOption: showListItemOption,\n className: className,\n listHeight: listsHeight\n })]\n });\n};\nfunction ColumnSetting(props) {\n var _props$checkable, _props$draggable, _props$showListItemOp, _props$settingIcon;\n var columnRef = useRef(null);\n // 获得当前上下文的 hashID\n var counter = useContext(TableContext);\n var localColumns = props.columns;\n var _props$checkedReset = props.checkedReset,\n checkedReset = _props$checkedReset === void 0 ? true : _props$checkedReset;\n var columnsMap = counter.columnsMap,\n setColumnsMap = counter.setColumnsMap,\n clearPersistenceStorage = counter.clearPersistenceStorage;\n useEffect(function () {\n var _counter$propsRef$cur;\n if ((_counter$propsRef$cur = counter.propsRef.current) !== null && _counter$propsRef$cur !== void 0 && (_counter$propsRef$cur = _counter$propsRef$cur.columnsState) !== null && _counter$propsRef$cur !== void 0 && _counter$propsRef$cur.value) {\n var _counter$propsRef$cur2;\n columnRef.current = JSON.parse(JSON.stringify(((_counter$propsRef$cur2 = counter.propsRef.current) === null || _counter$propsRef$cur2 === void 0 || (_counter$propsRef$cur2 = _counter$propsRef$cur2.columnsState) === null || _counter$propsRef$cur2 === void 0 ? void 0 : _counter$propsRef$cur2.value) || {}));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n /**\n * 设置全部选中,或全部未选中\n *\n * @param show\n */\n var setAllSelectAction = useRefFunction(function () {\n var show = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var columnKeyMap = {};\n var loopColumns = function loopColumns(columns) {\n columns.forEach(function (_ref7) {\n var key = _ref7.key,\n fixed = _ref7.fixed,\n index = _ref7.index,\n children = _ref7.children,\n disable = _ref7.disable;\n var columnKey = genColumnKey(key, index);\n if (columnKey) {\n var _columnsMap$columnKey, _columnsMap$columnKey2;\n columnKeyMap[columnKey] = {\n // 子节点 disable 时,不修改节点显示状态\n show: disable ? (_columnsMap$columnKey = columnsMap[columnKey]) === null || _columnsMap$columnKey === void 0 ? void 0 : _columnsMap$columnKey.show : show,\n fixed: fixed,\n disable: disable,\n order: (_columnsMap$columnKey2 = columnsMap[columnKey]) === null || _columnsMap$columnKey2 === void 0 ? void 0 : _columnsMap$columnKey2.order\n };\n }\n if (children) {\n loopColumns(children);\n }\n });\n };\n loopColumns(localColumns);\n setColumnsMap(columnKeyMap);\n });\n\n /** 全选和反选 */\n var checkedAll = useRefFunction(function (e) {\n if (e.target.checked) {\n setAllSelectAction();\n } else {\n setAllSelectAction(false);\n }\n });\n\n /** 重置项目 */\n var clearClick = useRefFunction(function () {\n var _counter$propsRef$cur3;\n clearPersistenceStorage === null || clearPersistenceStorage === void 0 || clearPersistenceStorage();\n setColumnsMap(((_counter$propsRef$cur3 = counter.propsRef.current) === null || _counter$propsRef$cur3 === void 0 || (_counter$propsRef$cur3 = _counter$propsRef$cur3.columnsState) === null || _counter$propsRef$cur3 === void 0 ? void 0 : _counter$propsRef$cur3.defaultValue) || columnRef.current || counter.defaultColumnKeyMap);\n });\n\n // 未选中的 key 列表\n var unCheckedKeys = Object.values(columnsMap).filter(function (value) {\n return !value || value.show === false;\n });\n\n // 是否已经选中\n var indeterminate = unCheckedKeys.length > 0 && unCheckedKeys.length !== localColumns.length;\n var intl = useIntl();\n var _useContext6 = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext6.getPrefixCls;\n var className = getPrefixCls('pro-table-column-setting');\n var _useStyle = useStyle(className),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n return wrapSSR( /*#__PURE__*/_jsx(Popover, {\n arrow: false,\n title: /*#__PURE__*/_jsxs(\"div\", {\n className: \"\".concat(className, \"-title \").concat(hashId).trim(),\n children: [props.checkable === false ? /*#__PURE__*/_jsx(\"div\", {}) : /*#__PURE__*/_jsx(Checkbox, {\n indeterminate: indeterminate,\n checked: unCheckedKeys.length === 0 && unCheckedKeys.length !== localColumns.length,\n onChange: function onChange(e) {\n checkedAll(e);\n },\n children: intl.getMessage('tableToolBar.columnDisplay', '列展示')\n }), checkedReset ? /*#__PURE__*/_jsx(\"a\", {\n onClick: clearClick,\n className: \"\".concat(className, \"-action-rest-button \").concat(hashId).trim(),\n children: intl.getMessage('tableToolBar.reset', '重置')\n }) : null, props !== null && props !== void 0 && props.extra ? /*#__PURE__*/_jsx(Space, {\n size: 12,\n align: \"center\",\n children: props.extra\n }) : null]\n }),\n overlayClassName: \"\".concat(className, \"-overlay \").concat(hashId).trim(),\n trigger: \"click\",\n placement: \"bottomRight\",\n content: /*#__PURE__*/_jsx(GroupCheckboxList, {\n checkable: (_props$checkable = props.checkable) !== null && _props$checkable !== void 0 ? _props$checkable : true,\n draggable: (_props$draggable = props.draggable) !== null && _props$draggable !== void 0 ? _props$draggable : true,\n showListItemOption: (_props$showListItemOp = props.showListItemOption) !== null && _props$showListItemOp !== void 0 ? _props$showListItemOp : true,\n className: className,\n localColumns: localColumns,\n listsHeight: props.listsHeight\n }),\n children: props.children || /*#__PURE__*/_jsx(Tooltip, {\n title: intl.getMessage('tableToolBar.columnSetting', '列设置'),\n children: (_props$settingIcon = props.settingIcon) !== null && _props$settingIcon !== void 0 ? _props$settingIcon : /*#__PURE__*/_jsx(SettingOutlined, {})\n })\n }));\n}\nexport default ColumnSetting;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { useStyle as useAntdStyle } from '@ant-design/pro-provider';\nvar genProStyle = function genProStyle(token) {\n return _defineProperty(_defineProperty(_defineProperty({}, token.componentCls, {\n width: 'auto',\n '&-title': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n height: '32px'\n },\n '&-overlay': _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, \"\".concat(token.antCls, \"-popover-inner-content\"), {\n width: '200px',\n paddingBlock: 0,\n paddingInline: 0,\n paddingBlockEnd: 8\n }), \"\".concat(token.antCls, \"-tree-node-content-wrapper:hover\"), {\n backgroundColor: 'transparent'\n }), \"\".concat(token.antCls, \"-tree-draggable-icon\"), {\n cursor: 'grab'\n }), \"\".concat(token.antCls, \"-tree-treenode\"), _defineProperty(_defineProperty({\n alignItems: 'center',\n '&:hover': _defineProperty({}, \"\".concat(token.componentCls, \"-list-item-option\"), {\n display: 'block'\n })\n }, \"\".concat(token.antCls, \"-tree-checkbox\"), {\n marginInlineEnd: '4px'\n }), \"\".concat(token.antCls, \"-tree-title\"), {\n width: '100%'\n }))\n }), \"\".concat(token.componentCls, \"-action-rest-button\"), {\n color: token.colorPrimary\n }), \"\".concat(token.componentCls, \"-list\"), _defineProperty(_defineProperty(_defineProperty({\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n paddingBlockStart: 8\n }, \"&\".concat(token.componentCls, \"-list-group\"), {\n paddingBlockStart: 0\n }), '&-title', {\n marginBlockStart: '6px',\n marginBlockEnd: '6px',\n paddingInlineStart: '24px',\n color: token.colorTextSecondary,\n fontSize: '12px'\n }), '&-item', {\n display: 'flex',\n alignItems: 'center',\n maxHeight: 24,\n justifyContent: 'space-between',\n '&-title': {\n flex: 1,\n maxWidth: 80,\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n wordBreak: 'break-all',\n whiteSpace: 'nowrap'\n },\n '&-option': {\n display: 'none',\n float: 'right',\n cursor: 'pointer',\n '> span': {\n '> span.anticon': {\n color: token.colorPrimary\n }\n },\n '> span + span': {\n marginInlineStart: 4\n }\n }\n }));\n};\nexport function useStyle(prefixCls) {\n return useAntdStyle('ColumnSetting', function (token) {\n var proToken = _objectSpread(_objectSpread({}, token), {}, {\n componentCls: \".\".concat(prefixCls)\n });\n return [genProStyle(proToken)];\n });\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { DownOutlined } from '@ant-design/icons';\nimport { ProProvider } from '@ant-design/pro-provider';\nimport { compareVersions, menuOverlayCompatible } from '@ant-design/pro-utils';\nimport { Dropdown, Space, Tabs, version } from 'antd';\nimport classNames from 'classnames';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport React, { useContext } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createElement as _createElement } from \"react\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar HeaderMenu = function HeaderMenu(props) {\n var _useContext = useContext(ProProvider),\n hashId = _useContext.hashId;\n var _props$items = props.items,\n items = _props$items === void 0 ? [] : _props$items,\n _props$type = props.type,\n type = _props$type === void 0 ? 'inline' : _props$type,\n prefixCls = props.prefixCls,\n propActiveKey = props.activeKey,\n defaultActiveKey = props.defaultActiveKey;\n var _useMergedState = useMergedState(propActiveKey || defaultActiveKey, {\n value: propActiveKey,\n onChange: props.onChange\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n activeKey = _useMergedState2[0],\n setActiveKey = _useMergedState2[1];\n if (items.length < 1) {\n return null;\n }\n var activeItem = items.find(function (item) {\n return item.key === activeKey;\n }) || items[0];\n if (type === 'inline') {\n return /*#__PURE__*/_jsx(\"div\", {\n className: classNames(\"\".concat(prefixCls, \"-menu\"), \"\".concat(prefixCls, \"-inline-menu\"), hashId),\n children: items.map(function (item, index) {\n return /*#__PURE__*/_jsx(\"div\", {\n onClick: function onClick() {\n setActiveKey(item.key);\n },\n className: classNames(\"\".concat(prefixCls, \"-inline-menu-item\"), activeItem.key === item.key ? \"\".concat(prefixCls, \"-inline-menu-item-active\") : undefined, hashId),\n children: item.label\n }, item.key || index);\n })\n });\n }\n if (type === 'tab') {\n return /*#__PURE__*/_jsx(Tabs, {\n items: items.map(function (item) {\n var _item$key;\n return _objectSpread(_objectSpread({}, item), {}, {\n key: (_item$key = item.key) === null || _item$key === void 0 ? void 0 : _item$key.toString()\n });\n }),\n activeKey: activeItem.key,\n onTabClick: function onTabClick(key) {\n return setActiveKey(key);\n },\n children: compareVersions(version, '4.23.0') < 0 ? items === null || items === void 0 ? void 0 : items.map(function (item, index) {\n /* 如果版本低于 4.23.0,不支持 items */\n return /*#__PURE__*/_createElement(Tabs.TabPane, _objectSpread(_objectSpread({}, item), {}, {\n key: item.key || index,\n tab: item.label\n }));\n }) : null\n });\n }\n var dropdownProps = menuOverlayCompatible({\n selectedKeys: [activeItem.key],\n onClick: function onClick(item) {\n setActiveKey(item.key);\n },\n items: items.map(function (item, index) {\n return {\n key: item.key || index,\n disabled: item.disabled,\n label: item.label\n };\n })\n });\n return /*#__PURE__*/_jsx(\"div\", {\n className: classNames(\"\".concat(prefixCls, \"-menu\"), \"\".concat(prefixCls, \"-dropdownmenu\")),\n children: /*#__PURE__*/_jsx(Dropdown, _objectSpread(_objectSpread({\n trigger: ['click']\n }, dropdownProps), {}, {\n children: /*#__PURE__*/_jsxs(Space, {\n className: \"\".concat(prefixCls, \"-dropdownmenu-label\"),\n children: [activeItem.label, /*#__PURE__*/_jsx(DownOutlined, {})]\n })\n }))\n });\n};\nexport default HeaderMenu;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { proTheme, useIntl } from '@ant-design/pro-provider';\nimport { LabelIconTip, compareVersions } from '@ant-design/pro-utils';\nimport { ConfigProvider, Input, Tabs, Tooltip, version } from 'antd';\nimport classNames from 'classnames';\nimport ResizeObserver from 'rc-resize-observer';\nimport React, { useContext, useMemo, useState } from 'react';\nimport HeaderMenu from \"./HeaderMenu\";\nimport { useStyle } from \"./style\";\n\n/** Antd 默认直接导出了 rc 组件中的 Tab.Pane 组件。 */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createElement as _createElement } from \"react\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * 获取配置区域 DOM Item\n *\n * @param setting 配置项\n */\nfunction getSettingItem(setting) {\n if ( /*#__PURE__*/React.isValidElement(setting)) {\n return setting;\n }\n if (setting) {\n var settingConfig = setting;\n var icon = settingConfig.icon,\n tooltip = settingConfig.tooltip,\n _onClick = settingConfig.onClick,\n _key = settingConfig.key;\n if (icon && tooltip) {\n return /*#__PURE__*/_jsx(Tooltip, {\n title: tooltip,\n children: /*#__PURE__*/_jsx(\"span\", {\n onClick: function onClick() {\n if (_onClick) {\n _onClick(_key);\n }\n },\n children: icon\n }, _key)\n });\n }\n return /*#__PURE__*/_jsx(\"span\", {\n onClick: function onClick() {\n if (_onClick) {\n _onClick(_key);\n }\n },\n children: icon\n }, _key);\n }\n return null;\n}\nvar ListToolBarTabBar = function ListToolBarTabBar(_ref) {\n var _tabs$items;\n var prefixCls = _ref.prefixCls,\n tabs = _ref.tabs,\n multipleLine = _ref.multipleLine,\n filtersNode = _ref.filtersNode;\n if (!multipleLine) return null;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefixCls, \"-extra-line\"),\n children: tabs !== null && tabs !== void 0 && tabs.items && tabs !== null && tabs !== void 0 && tabs.items.length ? /*#__PURE__*/_jsx(Tabs, {\n style: {\n width: '100%'\n },\n defaultActiveKey: tabs.defaultActiveKey,\n activeKey: tabs.activeKey,\n items: tabs.items.map(function (item, index) {\n var _item$key;\n return _objectSpread(_objectSpread({\n label: item.tab\n }, item), {}, {\n key: ((_item$key = item.key) === null || _item$key === void 0 ? void 0 : _item$key.toString()) || (index === null || index === void 0 ? void 0 : index.toString())\n });\n }),\n onChange: tabs.onChange,\n tabBarExtraContent: filtersNode,\n children: (_tabs$items = tabs.items) === null || _tabs$items === void 0 ? void 0 : _tabs$items.map(function (item, index) {\n return compareVersions(version, '4.23.0') < 0 ? /*#__PURE__*/_createElement(Tabs.TabPane, _objectSpread(_objectSpread({}, item), {}, {\n key: item.key || index,\n tab: item.tab\n })) : null;\n })\n }) : filtersNode\n });\n};\nvar ListToolBar = function ListToolBar(_ref2) {\n var customizePrefixCls = _ref2.prefixCls,\n title = _ref2.title,\n subTitle = _ref2.subTitle,\n tooltip = _ref2.tooltip,\n className = _ref2.className,\n style = _ref2.style,\n search = _ref2.search,\n onSearch = _ref2.onSearch,\n _ref2$multipleLine = _ref2.multipleLine,\n multipleLine = _ref2$multipleLine === void 0 ? false : _ref2$multipleLine,\n filter = _ref2.filter,\n _ref2$actions = _ref2.actions,\n actions = _ref2$actions === void 0 ? [] : _ref2$actions,\n _ref2$settings = _ref2.settings,\n settings = _ref2$settings === void 0 ? [] : _ref2$settings,\n tabs = _ref2.tabs,\n menu = _ref2.menu;\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var _proTheme$useToken = proTheme.useToken(),\n token = _proTheme$useToken.token;\n var prefixCls = getPrefixCls('pro-table-list-toolbar', customizePrefixCls);\n var _useStyle = useStyle(prefixCls),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n var intl = useIntl();\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isMobile = _useState2[0],\n setIsMobile = _useState2[1];\n var placeholder = intl.getMessage('tableForm.inputPlaceholder', '请输入');\n\n /**\n * 获取搜索栏 DOM\n *\n * @param search 搜索框相关配置\n */\n var searchNode = useMemo(function () {\n if (!search) {\n return null;\n }\n if ( /*#__PURE__*/React.isValidElement(search)) {\n return search;\n }\n return /*#__PURE__*/_jsx(Input.Search, _objectSpread(_objectSpread({\n style: {\n width: 200\n },\n placeholder: placeholder\n }, search), {}, {\n onSearch: /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n var _onSearch, _ref4;\n var _len,\n restParams,\n _key2,\n success,\n _args = arguments;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n for (_len = _args.length, restParams = new Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n restParams[_key2] = _args[_key2];\n }\n _context.next = 3;\n return (_onSearch = (_ref4 = search).onSearch) === null || _onSearch === void 0 ? void 0 : _onSearch.call.apply(_onSearch, [_ref4].concat(restParams));\n case 3:\n success = _context.sent;\n if (success !== false) {\n onSearch === null || onSearch === void 0 || onSearch(restParams === null || restParams === void 0 ? void 0 : restParams[0]);\n }\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }))\n }));\n }, [placeholder, onSearch, search]);\n\n /** 轻量筛选组件 */\n var filtersNode = useMemo(function () {\n if (filter) return /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefixCls, \"-filter \").concat(hashId).trim(),\n children: filter\n });\n return null;\n }, [filter, hashId, prefixCls]);\n\n /** 有没有 title,需要结合多个场景判断 */\n var hasTitle = useMemo(function () {\n return menu || title || subTitle || tooltip;\n }, [menu, subTitle, title, tooltip]);\n\n /** 没有 key 的时候帮忙加一下 key 不加的话很烦人 */\n var actionDom = useMemo(function () {\n if (!Array.isArray(actions)) {\n return actions;\n }\n if (actions.length < 1) {\n return null;\n }\n return /*#__PURE__*/_jsx(\"div\", {\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS\n },\n children: actions.map(function (action, index) {\n if (! /*#__PURE__*/React.isValidElement(action)) {\n // eslint-disable-next-line react/no-array-index-key\n return /*#__PURE__*/_jsx(React.Fragment, {\n children: action\n }, index);\n }\n return /*#__PURE__*/React.cloneElement(action, _objectSpread({\n // eslint-disable-next-line react/no-array-index-key\n key: index\n }, action === null || action === void 0 ? void 0 : action.props));\n })\n });\n }, [actions]);\n var hasRight = useMemo(function () {\n return !!(hasTitle && searchNode || !multipleLine && filtersNode || actionDom || settings !== null && settings !== void 0 && settings.length);\n }, [actionDom, filtersNode, hasTitle, multipleLine, searchNode, settings === null || settings === void 0 ? void 0 : settings.length]);\n var hasLeft = useMemo(function () {\n return tooltip || title || subTitle || menu || !hasTitle && searchNode;\n }, [hasTitle, menu, searchNode, subTitle, title, tooltip]);\n var leftTitleDom = useMemo(function () {\n // 保留dom是为了占位,不然 right 就变到左边了\n if (!hasLeft && hasRight) {\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefixCls, \"-left \").concat(hashId).trim()\n });\n }\n\n // 减少 space 的dom,渲染的时候能节省点性能\n if (!menu && (hasTitle || !searchNode)) {\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefixCls, \"-left \").concat(hashId).trim(),\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefixCls, \"-title \").concat(hashId).trim(),\n children: /*#__PURE__*/_jsx(LabelIconTip, {\n tooltip: tooltip,\n label: title,\n subTitle: subTitle\n })\n })\n });\n }\n return /*#__PURE__*/_jsxs(\"div\", {\n className: classNames(\"\".concat(prefixCls, \"-left\"), hashId, _defineProperty(_defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-left-has-tabs\"), (menu === null || menu === void 0 ? void 0 : menu.type) === 'tab'), \"\".concat(prefixCls, \"-left-has-dropdown\"), (menu === null || menu === void 0 ? void 0 : menu.type) === 'dropdown'), \"\".concat(prefixCls, \"-left-has-inline-menu\"), (menu === null || menu === void 0 ? void 0 : menu.type) === 'inline')),\n children: [hasTitle && !menu && /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefixCls, \"-title \").concat(hashId).trim(),\n children: /*#__PURE__*/_jsx(LabelIconTip, {\n tooltip: tooltip,\n label: title,\n subTitle: subTitle\n })\n }), menu &&\n /*#__PURE__*/\n // 这里面实现了 tabs 的逻辑\n _jsx(HeaderMenu, _objectSpread(_objectSpread({}, menu), {}, {\n prefixCls: prefixCls\n })), !hasTitle && searchNode ? /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefixCls, \"-search \").concat(hashId).trim(),\n children: searchNode\n }) : null]\n });\n }, [hasLeft, hasRight, hasTitle, hashId, menu, prefixCls, searchNode, subTitle, title, tooltip]);\n var rightTitleDom = useMemo(function () {\n if (!hasRight) return null;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"\".concat(prefixCls, \"-right \").concat(hashId).trim(),\n style: isMobile ? {} : {\n alignItems: 'center'\n },\n children: [!multipleLine ? filtersNode : null, hasTitle && searchNode ? /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefixCls, \"-search \").concat(hashId).trim(),\n children: searchNode\n }) : null, actionDom, settings !== null && settings !== void 0 && settings.length ? /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefixCls, \"-setting-items \").concat(hashId).trim(),\n children: settings.map(function (setting, index) {\n var settingItem = getSettingItem(setting);\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/no-array-index-key\n _jsx(\"div\", {\n className: \"\".concat(prefixCls, \"-setting-item \").concat(hashId).trim(),\n children: settingItem\n }, index)\n );\n })\n }) : null]\n });\n }, [hasRight, prefixCls, hashId, isMobile, hasTitle, searchNode, multipleLine, filtersNode, actionDom, settings]);\n var titleNode = useMemo(function () {\n if (!hasRight && !hasLeft) return null;\n var containerClassName = classNames(\"\".concat(prefixCls, \"-container\"), hashId, _defineProperty({}, \"\".concat(prefixCls, \"-container-mobile\"), isMobile));\n return /*#__PURE__*/_jsxs(\"div\", {\n className: containerClassName,\n children: [leftTitleDom, rightTitleDom]\n });\n }, [hasLeft, hasRight, hashId, isMobile, leftTitleDom, prefixCls, rightTitleDom]);\n return wrapSSR( /*#__PURE__*/_jsx(ResizeObserver, {\n onResize: function onResize(size) {\n if (size.width < 375 !== isMobile) {\n setIsMobile(size.width < 375);\n }\n },\n children: /*#__PURE__*/_jsxs(\"div\", {\n style: style,\n className: classNames(prefixCls, hashId, className),\n children: [titleNode, /*#__PURE__*/_jsx(ListToolBarTabBar, {\n filtersNode: filtersNode,\n prefixCls: prefixCls,\n tabs: tabs,\n multipleLine: multipleLine\n })]\n })\n }));\n};\nexport default ListToolBar;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { useStyle as useAntdStyle } from '@ant-design/pro-provider';\nvar genProListStyle = function genProListStyle(token) {\n return _defineProperty({}, token.componentCls, _defineProperty(_defineProperty(_defineProperty({\n lineHeight: '1',\n '&-container': {\n display: 'flex',\n justifyContent: 'space-between',\n paddingBlock: token.padding,\n paddingInline: 0,\n '&-mobile': {\n flexDirection: 'column'\n }\n },\n '&-title': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n color: token.colorTextHeading,\n fontWeight: '500',\n fontSize: token.fontSizeLG\n },\n '&-search:not(:last-child)': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start'\n },\n '&-setting-item': {\n marginBlock: 0,\n marginInline: 4,\n color: token.colorIconHover,\n fontSize: token.fontSizeLG,\n cursor: 'pointer',\n '> span': {\n display: 'block',\n width: '100%',\n height: '100%'\n },\n '&:hover': {\n color: token.colorPrimary\n }\n },\n '&-left': _defineProperty(_defineProperty({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: token.marginXS,\n justifyContent: 'flex-start',\n maxWidth: 'calc(100% - 200px)'\n }, \"\".concat(token.antCls, \"-tabs\"), {\n width: '100%'\n }), '&-has-tabs', {\n overflow: 'hidden'\n }),\n '&-right': {\n flex: 1,\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'flex-end',\n gap: token.marginXS\n },\n '&-extra-line': {\n marginBlockEnd: token.margin\n },\n '&-setting-items': {\n display: 'flex',\n gap: token.marginXS,\n lineHeight: '32px',\n alignItems: 'center'\n },\n '&-filter': _defineProperty({\n '&:not(:last-child)': {\n marginInlineEnd: token.margin\n },\n display: 'flex',\n alignItems: 'center'\n }, \"div$\".concat(token.antCls, \"-pro-table-search\"), {\n marginBlock: 0,\n marginInline: 0,\n paddingBlock: 0,\n paddingInline: 0\n }),\n '&-inline-menu-item': {\n display: 'inline-block',\n marginInlineEnd: token.marginLG,\n cursor: 'pointer',\n opacity: '0.75',\n '&-active': {\n fontWeight: 'bold',\n opacity: '1'\n }\n }\n }, \"\".concat(token.antCls, \"-tabs-top > \").concat(token.antCls, \"-tabs-nav\"), _defineProperty({\n marginBlockEnd: 0,\n '&::before': {\n borderBlockEnd: 0\n }\n }, \"\".concat(token.antCls, \"-tabs-nav-list\"), {\n marginBlockStart: 0,\n '${token.antCls}-tabs-tab': {\n paddingBlockStart: 0\n }\n })), '&-dropdownmenu-label', {\n fontWeight: 'bold',\n fontSize: token.fontSizeIcon,\n textAlign: 'center',\n cursor: 'pointer'\n }), '@media (max-width: 768px)', _defineProperty({}, token.componentCls, {\n '&-container': {\n display: 'flex',\n flexWrap: 'wrap',\n flexDirection: 'column'\n },\n '&-left': {\n marginBlockEnd: '16px',\n maxWidth: '100%'\n }\n })));\n};\nexport function useStyle(prefixCls) {\n return useAntdStyle('ProTableListToolBar', function (token) {\n var proListToken = _objectSpread(_objectSpread({}, token), {}, {\n componentCls: \".\".concat(prefixCls)\n });\n return [genProListStyle(proListToken)];\n });\n}","// This icon file is generated automatically.\nvar ColumnHeightOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M840 836H184c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h656c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm0-724H184c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h656c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zM610.8 378c6 0 9.4-7 5.7-11.7L515.7 238.7a7.14 7.14 0 00-11.3 0L403.6 366.3a7.23 7.23 0 005.7 11.7H476v268h-62.8c-6 0-9.4 7-5.7 11.7l100.8 127.5c2.9 3.7 8.5 3.7 11.3 0l100.8-127.5c3.7-4.7.4-11.7-5.7-11.7H548V378h62.8z\" } }] }, \"name\": \"column-height\", \"theme\": \"outlined\" };\nexport default ColumnHeightOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport ColumnHeightOutlinedSvg from \"@ant-design/icons-svg/es/asn/ColumnHeightOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar ColumnHeightOutlined = function ColumnHeightOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: ColumnHeightOutlinedSvg\n }));\n};\n\n/**![column-height](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg0MCA4MzZIMTg0Yy00LjQgMC04IDMuNi04IDh2NjBjMCA0LjQgMy42IDggOCA4aDY1NmM0LjQgMCA4LTMuNiA4LTh2LTYwYzAtNC40LTMuNi04LTgtOHptMC03MjRIMTg0Yy00LjQgMC04IDMuNi04IDh2NjBjMCA0LjQgMy42IDggOCA4aDY1NmM0LjQgMCA4LTMuNiA4LTh2LTYwYzAtNC40LTMuNi04LTgtOHpNNjEwLjggMzc4YzYgMCA5LjQtNyA1LjctMTEuN0w1MTUuNyAyMzguN2E3LjE0IDcuMTQgMCAwMC0xMS4zIDBMNDAzLjYgMzY2LjNhNy4yMyA3LjIzIDAgMDA1LjcgMTEuN0g0NzZ2MjY4aC02Mi44Yy02IDAtOS40IDctNS43IDExLjdsMTAwLjggMTI3LjVjMi45IDMuNyA4LjUgMy43IDExLjMgMGwxMDAuOC0xMjcuNWMzLjctNC43LjQtMTEuNy01LjctMTEuN0g1NDhWMzc4aDYyLjh6IiAvPjwvc3ZnPg==) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(ColumnHeightOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'ColumnHeightOutlined';\n}\nexport default RefIcon;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { ColumnHeightOutlined } from '@ant-design/icons';\nimport { useIntl } from '@ant-design/pro-provider';\nimport { menuOverlayCompatible } from '@ant-design/pro-utils';\nimport { Dropdown, Tooltip } from 'antd';\nimport React, { useContext } from 'react';\nimport { TableContext } from \"../../Store/Provide\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar DensityIcon = function DensityIcon(props) {\n var _props$icon = props.icon,\n icon = _props$icon === void 0 ? /*#__PURE__*/_jsx(ColumnHeightOutlined, {}) : _props$icon;\n var counter = useContext(TableContext);\n var intl = useIntl();\n var dropdownProps = menuOverlayCompatible({\n selectedKeys: [counter.tableSize],\n onClick: function onClick(_ref) {\n var _counter$setTableSize;\n var key = _ref.key;\n (_counter$setTableSize = counter.setTableSize) === null || _counter$setTableSize === void 0 || _counter$setTableSize.call(counter, key);\n },\n style: {\n width: 80\n },\n items: [{\n key: 'large',\n label: intl.getMessage('tableToolBar.densityLarger', '宽松')\n }, {\n key: 'middle',\n label: intl.getMessage('tableToolBar.densityMiddle', '中等')\n }, {\n key: 'small',\n label: intl.getMessage('tableToolBar.densitySmall', '紧凑')\n }]\n });\n return /*#__PURE__*/_jsx(Dropdown, _objectSpread(_objectSpread({}, dropdownProps), {}, {\n trigger: ['click'],\n children: /*#__PURE__*/_jsx(Tooltip, {\n title: intl.getMessage('tableToolBar.density', '表格密度'),\n children: icon\n })\n }));\n};\nexport default /*#__PURE__*/React.memo(DensityIcon);","// This icon file is generated automatically.\nvar FullscreenExitOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M391 240.9c-.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3a8.03 8.03 0 00-11.3 0l-42.4 42.3a8.03 8.03 0 000 11.3L280 333.6l-43.9 43.9a8.01 8.01 0 004.7 13.6L401 410c5.1.6 9.5-3.7 8.9-8.9L391 240.9zm10.1 373.2L240.8 633c-6.6.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824a8.03 8.03 0 000 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7A8.01 8.01 0 00391 783l18.9-160.1c.6-5.1-3.7-9.4-8.8-8.8zm221.8-204.2L783.2 391c6.6-.8 9.4-8.9 4.7-13.6L744 333.6 877.7 200c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.3a8.03 8.03 0 00-11.3 0L690.3 279.9l-43.7-43.7a8.01 8.01 0 00-13.6 4.7L614.1 401c-.6 5.2 3.7 9.5 8.8 8.9zM744 690.4l43.9-43.9a8.01 8.01 0 00-4.7-13.6L623 614c-5.1-.6-9.5 3.7-8.9 8.9L633 783.1c.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L744 690.4z\" } }] }, \"name\": \"fullscreen-exit\", \"theme\": \"outlined\" };\nexport default FullscreenExitOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport FullscreenExitOutlinedSvg from \"@ant-design/icons-svg/es/asn/FullscreenExitOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar FullscreenExitOutlined = function FullscreenExitOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: FullscreenExitOutlinedSvg\n }));\n};\n\n/**![fullscreen-exit](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTM5MSAyNDAuOWMtLjgtNi42LTguOS05LjQtMTMuNi00LjdsLTQzLjcgNDMuN0wyMDAgMTQ2LjNhOC4wMyA4LjAzIDAgMDAtMTEuMyAwbC00Mi40IDQyLjNhOC4wMyA4LjAzIDAgMDAwIDExLjNMMjgwIDMzMy42bC00My45IDQzLjlhOC4wMSA4LjAxIDAgMDA0LjcgMTMuNkw0MDEgNDEwYzUuMS42IDkuNS0zLjcgOC45LTguOUwzOTEgMjQwLjl6bTEwLjEgMzczLjJMMjQwLjggNjMzYy02LjYuOC05LjQgOC45LTQuNyAxMy42bDQzLjkgNDMuOUwxNDYuMyA4MjRhOC4wMyA4LjAzIDAgMDAwIDExLjNsNDIuNCA0Mi4zYzMuMSAzLjEgOC4yIDMuMSAxMS4zIDBMMzMzLjcgNzQ0bDQzLjcgNDMuN0E4LjAxIDguMDEgMCAwMDM5MSA3ODNsMTguOS0xNjAuMWMuNi01LjEtMy43LTkuNC04LjgtOC44em0yMjEuOC0yMDQuMkw3ODMuMiAzOTFjNi42LS44IDkuNC04LjkgNC43LTEzLjZMNzQ0IDMzMy42IDg3Ny43IDIwMGMzLjEtMy4xIDMuMS04LjIgMC0xMS4zbC00Mi40LTQyLjNhOC4wMyA4LjAzIDAgMDAtMTEuMyAwTDY5MC4zIDI3OS45bC00My43LTQzLjdhOC4wMSA4LjAxIDAgMDAtMTMuNiA0LjdMNjE0LjEgNDAxYy0uNiA1LjIgMy43IDkuNSA4LjggOC45ek03NDQgNjkwLjRsNDMuOS00My45YTguMDEgOC4wMSAwIDAwLTQuNy0xMy42TDYyMyA2MTRjLTUuMS0uNi05LjUgMy43LTguOSA4LjlMNjMzIDc4My4xYy44IDYuNiA4LjkgOS40IDEzLjYgNC43bDQzLjctNDMuN0w4MjQgODc3LjdjMy4xIDMuMSA4LjIgMy4xIDExLjMgMGw0Mi40LTQyLjNjMy4xLTMuMSAzLjEtOC4yIDAtMTEuM0w3NDQgNjkwLjR6IiAvPjwvc3ZnPg==) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(FullscreenExitOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'FullscreenExitOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar FullscreenOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M290 236.4l43.9-43.9a8.01 8.01 0 00-4.7-13.6L169 160c-5.1-.6-9.5 3.7-8.9 8.9L179 329.1c.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zm352.7 187.3c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6 43.7 43.7a8.01 8.01 0 0013.6-4.7L863.9 169c.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370a8.03 8.03 0 000 11.3l42.4 42.4zM845 694.9c-.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3a8.03 8.03 0 00-11.3 0l-42.4 42.3a8.03 8.03 0 000 11.3L734 787.6l-43.9 43.9a8.01 8.01 0 004.7 13.6L855 864c5.1.6 9.5-3.7 8.9-8.9L845 694.9zm-463.7-94.6a8.03 8.03 0 00-11.3 0L236.3 733.9l-43.7-43.7a8.01 8.01 0 00-13.6 4.7L160.1 855c-.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-.8 9.4-8.9 4.7-13.6L290 787.6 423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z\" } }] }, \"name\": \"fullscreen\", \"theme\": \"outlined\" };\nexport default FullscreenOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport FullscreenOutlinedSvg from \"@ant-design/icons-svg/es/asn/FullscreenOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar FullscreenOutlined = function FullscreenOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: FullscreenOutlinedSvg\n }));\n};\n\n/**![fullscreen](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTI5MCAyMzYuNGw0My45LTQzLjlhOC4wMSA4LjAxIDAgMDAtNC43LTEzLjZMMTY5IDE2MGMtNS4xLS42LTkuNSAzLjctOC45IDguOUwxNzkgMzI5LjFjLjggNi42IDguOSA5LjQgMTMuNiA0LjdsNDMuNy00My43TDM3MCA0MjMuN2MzLjEgMy4xIDguMiAzLjEgMTEuMyAwbDQyLjQtNDIuM2MzLjEtMy4xIDMuMS04LjIgMC0xMS4zTDI5MCAyMzYuNHptMzUyLjcgMTg3LjNjMy4xIDMuMSA4LjIgMy4xIDExLjMgMGwxMzMuNy0xMzMuNiA0My43IDQzLjdhOC4wMSA4LjAxIDAgMDAxMy42LTQuN0w4NjMuOSAxNjljLjYtNS4xLTMuNy05LjUtOC45LTguOUw2OTQuOCAxNzljLTYuNi44LTkuNCA4LjktNC43IDEzLjZsNDMuOSA0My45TDYwMC4zIDM3MGE4LjAzIDguMDMgMCAwMDAgMTEuM2w0Mi40IDQyLjR6TTg0NSA2OTQuOWMtLjgtNi42LTguOS05LjQtMTMuNi00LjdsLTQzLjcgNDMuN0w2NTQgNjAwLjNhOC4wMyA4LjAzIDAgMDAtMTEuMyAwbC00Mi40IDQyLjNhOC4wMyA4LjAzIDAgMDAwIDExLjNMNzM0IDc4Ny42bC00My45IDQzLjlhOC4wMSA4LjAxIDAgMDA0LjcgMTMuNkw4NTUgODY0YzUuMS42IDkuNS0zLjcgOC45LTguOUw4NDUgNjk0Ljl6bS00NjMuNy05NC42YTguMDMgOC4wMyAwIDAwLTExLjMgMEwyMzYuMyA3MzMuOWwtNDMuNy00My43YTguMDEgOC4wMSAwIDAwLTEzLjYgNC43TDE2MC4xIDg1NWMtLjYgNS4xIDMuNyA5LjUgOC45IDguOUwzMjkuMiA4NDVjNi42LS44IDkuNC04LjkgNC43LTEzLjZMMjkwIDc4Ny42IDQyMy43IDY1NGMzLjEtMy4xIDMuMS04LjIgMC0xMS4zbC00Mi40LTQyLjR6IiAvPjwvc3ZnPg==) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(FullscreenOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'FullscreenOutlined';\n}\nexport default RefIcon;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { FullscreenExitOutlined, FullscreenOutlined } from '@ant-design/icons';\nimport { useIntl } from '@ant-design/pro-provider';\nimport { isBrowser } from '@ant-design/pro-utils';\nimport { Tooltip } from 'antd';\nimport React, { useEffect, useState } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar FullScreenIcon = function FullScreenIcon() {\n var intl = useIntl();\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n fullscreen = _useState2[0],\n setFullscreen = _useState2[1];\n useEffect(function () {\n if (!isBrowser()) {\n return;\n }\n document.onfullscreenchange = function () {\n setFullscreen(!!document.fullscreenElement);\n };\n }, []);\n return fullscreen ? /*#__PURE__*/_jsx(Tooltip, {\n title: intl.getMessage('tableToolBar.exitFullScreen', '全屏'),\n children: /*#__PURE__*/_jsx(FullscreenExitOutlined, {})\n }) : /*#__PURE__*/_jsx(Tooltip, {\n title: intl.getMessage('tableToolBar.fullScreen', '全屏'),\n children: /*#__PURE__*/_jsx(FullscreenOutlined, {})\n });\n};\nexport default /*#__PURE__*/React.memo(FullScreenIcon);","import _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar _excluded = [\"headerTitle\", \"tooltip\", \"toolBarRender\", \"action\", \"options\", \"selectedRowKeys\", \"selectedRows\", \"toolbar\", \"onSearch\", \"columns\", \"optionsRender\"];\nimport { ReloadOutlined } from '@ant-design/icons';\nimport { useIntl } from '@ant-design/pro-provider';\nimport { isDeepEqualReact, omitUndefined } from '@ant-design/pro-utils';\nimport { Tooltip } from 'antd';\nimport React, { useContext, useEffect, useMemo } from 'react';\nimport { TableContext } from \"../../Store/Provide\";\nimport ColumnSetting from \"../ColumnSetting\";\nimport ListToolBar from \"../ListToolBar\";\nimport DensityIcon from \"./DensityIcon\";\nimport FullScreenIcon from \"./FullscreenIcon\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createElement as _createElement } from \"react\";\nfunction getButtonText(_ref, options) {\n var _options$reloadIcon;\n var intl = _ref.intl;\n return {\n reload: {\n text: intl.getMessage('tableToolBar.reload', '刷新'),\n icon: (_options$reloadIcon = options.reloadIcon) !== null && _options$reloadIcon !== void 0 ? _options$reloadIcon : /*#__PURE__*/_jsx(ReloadOutlined, {})\n },\n density: {\n text: intl.getMessage('tableToolBar.density', '表格密度'),\n icon: /*#__PURE__*/_jsx(DensityIcon, {\n icon: options.densityIcon\n })\n },\n fullScreen: {\n text: intl.getMessage('tableToolBar.fullScreen', '全屏'),\n icon: /*#__PURE__*/_jsx(FullScreenIcon, {})\n }\n };\n}\n\n/**\n * 渲染默认的 工具栏\n *\n * @param options\n * @param className\n */\nfunction renderDefaultOption(options, defaultOptions, actions, columns) {\n return Object.keys(options).filter(function (item) {\n return item;\n }).map(function (key) {\n var value = options[key];\n if (!value) {\n return null;\n }\n var onClick = value === true ? defaultOptions[key] : function (event) {\n value === null || value === void 0 || value(event, actions.current);\n };\n if (typeof onClick !== 'function') {\n onClick = function onClick() {};\n }\n if (key === 'setting') {\n return /*#__PURE__*/_createElement(ColumnSetting, _objectSpread(_objectSpread({}, options[key]), {}, {\n columns: columns,\n key: key\n }));\n }\n if (key === 'fullScreen') {\n return /*#__PURE__*/_jsx(\"span\", {\n onClick: onClick,\n children: /*#__PURE__*/_jsx(FullScreenIcon, {})\n }, key);\n }\n var optionItem = getButtonText(defaultOptions, options)[key];\n if (optionItem) {\n return /*#__PURE__*/_jsx(\"span\", {\n onClick: onClick,\n children: /*#__PURE__*/_jsx(Tooltip, {\n title: optionItem.text,\n children: optionItem.icon\n })\n }, key);\n }\n return null;\n }).filter(function (item) {\n return item;\n });\n}\nfunction ToolBar(_ref2) {\n var headerTitle = _ref2.headerTitle,\n tooltip = _ref2.tooltip,\n toolBarRender = _ref2.toolBarRender,\n action = _ref2.action,\n propsOptions = _ref2.options,\n selectedRowKeys = _ref2.selectedRowKeys,\n selectedRows = _ref2.selectedRows,\n toolbar = _ref2.toolbar,\n onSearch = _ref2.onSearch,\n columns = _ref2.columns,\n optionsRender = _ref2.optionsRender,\n rest = _objectWithoutProperties(_ref2, _excluded);\n var counter = useContext(TableContext);\n var intl = useIntl();\n var optionDom = useMemo(function () {\n var defaultOptions = {\n reload: function reload() {\n var _action$current;\n return action === null || action === void 0 || (_action$current = action.current) === null || _action$current === void 0 ? void 0 : _action$current.reload();\n },\n density: true,\n setting: true,\n search: false,\n fullScreen: function fullScreen() {\n var _action$current2, _action$current2$full;\n return action === null || action === void 0 || (_action$current2 = action.current) === null || _action$current2 === void 0 || (_action$current2$full = _action$current2.fullScreen) === null || _action$current2$full === void 0 ? void 0 : _action$current2$full.call(_action$current2);\n }\n };\n if (propsOptions === false) {\n return [];\n }\n var options = _objectSpread(_objectSpread({}, defaultOptions), {}, {\n fullScreen: false\n }, propsOptions);\n var settings = renderDefaultOption(options, _objectSpread(_objectSpread({}, defaultOptions), {}, {\n intl: intl\n }), action, columns);\n if (optionsRender) {\n return optionsRender(_objectSpread({\n headerTitle: headerTitle,\n tooltip: tooltip,\n toolBarRender: toolBarRender,\n action: action,\n options: propsOptions,\n selectedRowKeys: selectedRowKeys,\n selectedRows: selectedRows,\n toolbar: toolbar,\n onSearch: onSearch,\n columns: columns,\n optionsRender: optionsRender\n }, rest), settings);\n }\n return settings;\n }, [action, columns, headerTitle, intl, onSearch, optionsRender, propsOptions, rest, selectedRowKeys, selectedRows, toolBarRender, toolbar, tooltip]);\n // 操作列表\n var actions = toolBarRender ? toolBarRender(action === null || action === void 0 ? void 0 : action.current, {\n selectedRowKeys: selectedRowKeys,\n selectedRows: selectedRows\n }) : [];\n var searchConfig = useMemo(function () {\n if (!propsOptions) {\n return false;\n }\n if (!propsOptions.search) return false;\n\n /** 受控的value 和 onChange */\n var defaultSearchConfig = {\n value: counter.keyWords,\n onChange: function onChange(e) {\n return counter.setKeyWords(e.target.value);\n }\n };\n if (propsOptions.search === true) return defaultSearchConfig;\n return _objectSpread(_objectSpread({}, defaultSearchConfig), propsOptions.search);\n }, [counter, propsOptions]);\n useEffect(function () {\n if (counter.keyWords === undefined) {\n onSearch === null || onSearch === void 0 || onSearch('');\n }\n }, [counter.keyWords, onSearch]);\n return /*#__PURE__*/_jsx(ListToolBar, _objectSpread({\n title: headerTitle,\n tooltip: tooltip || rest.tip,\n search: searchConfig,\n onSearch: onSearch,\n actions: actions,\n settings: optionDom\n }, toolbar));\n}\n/** 这里负责与table交互,并且减少 render次数 */\nvar ToolbarRender = /*#__PURE__*/function (_React$Component) {\n _inherits(ToolbarRender, _React$Component);\n var _super = _createSuper(ToolbarRender);\n function ToolbarRender() {\n var _this;\n _classCallCheck(this, ToolbarRender);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"onSearch\", function (keyword) {\n var _options$search, _options$search$onSea, _actionRef$current, _actionRef$current$se;\n var _this$props = _this.props,\n options = _this$props.options,\n onFormSearchSubmit = _this$props.onFormSearchSubmit,\n actionRef = _this$props.actionRef;\n if (!options || !options.search) {\n return;\n }\n var _ref3 = options.search === true ? {} : options.search,\n _ref3$name = _ref3.name,\n name = _ref3$name === void 0 ? 'keyword' : _ref3$name;\n\n /** 如果传入的 onSearch 返回值为 false,应该直接拦截请求 */\n var success = (_options$search = options.search) === null || _options$search === void 0 || (_options$search$onSea = _options$search.onSearch) === null || _options$search$onSea === void 0 ? void 0 : _options$search$onSea.call(_options$search, keyword);\n if (success === false) return;\n\n // 查询的时候的回到第一页\n actionRef === null || actionRef === void 0 || (_actionRef$current = actionRef.current) === null || _actionRef$current === void 0 || (_actionRef$current$se = _actionRef$current.setPageInfo) === null || _actionRef$current$se === void 0 || _actionRef$current$se.call(_actionRef$current, {\n current: 1\n });\n onFormSearchSubmit(omitUndefined(_defineProperty({\n _timestamp: Date.now()\n }, name, keyword)));\n });\n _defineProperty(_assertThisInitialized(_this), \"isEquals\", function (next) {\n var _this$props2 = _this.props,\n hideToolbar = _this$props2.hideToolbar,\n tableColumn = _this$props2.tableColumn,\n options = _this$props2.options,\n tooltip = _this$props2.tooltip,\n toolbar = _this$props2.toolbar,\n selectedRows = _this$props2.selectedRows,\n selectedRowKeys = _this$props2.selectedRowKeys,\n headerTitle = _this$props2.headerTitle,\n actionRef = _this$props2.actionRef,\n toolBarRender = _this$props2.toolBarRender;\n return isDeepEqualReact({\n hideToolbar: hideToolbar,\n tableColumn: tableColumn,\n options: options,\n tooltip: tooltip,\n toolbar: toolbar,\n selectedRows: selectedRows,\n selectedRowKeys: selectedRowKeys,\n headerTitle: headerTitle,\n actionRef: actionRef,\n toolBarRender: toolBarRender\n }, {\n hideToolbar: next.hideToolbar,\n tableColumn: next.tableColumn,\n options: next.options,\n tooltip: next.tooltip,\n toolbar: next.toolbar,\n selectedRows: next.selectedRows,\n selectedRowKeys: next.selectedRowKeys,\n headerTitle: next.headerTitle,\n actionRef: next.actionRef,\n toolBarRender: next.toolBarRender\n }, ['render', 'renderFormItem']);\n });\n _defineProperty(_assertThisInitialized(_this), \"shouldComponentUpdate\", function (next) {\n if (next.searchNode) {\n return true;\n }\n return !_this.isEquals(next);\n });\n _defineProperty(_assertThisInitialized(_this), \"render\", function () {\n var _this$props3 = _this.props,\n hideToolbar = _this$props3.hideToolbar,\n tableColumn = _this$props3.tableColumn,\n options = _this$props3.options,\n searchNode = _this$props3.searchNode,\n tooltip = _this$props3.tooltip,\n toolbar = _this$props3.toolbar,\n selectedRows = _this$props3.selectedRows,\n selectedRowKeys = _this$props3.selectedRowKeys,\n headerTitle = _this$props3.headerTitle,\n actionRef = _this$props3.actionRef,\n toolBarRender = _this$props3.toolBarRender,\n optionsRender = _this$props3.optionsRender;\n\n // 不展示 toolbar\n if (hideToolbar) {\n return null;\n }\n return /*#__PURE__*/_jsx(ToolBar, {\n tooltip: tooltip,\n columns: tableColumn,\n options: options,\n headerTitle: headerTitle,\n action: actionRef,\n onSearch: _this.onSearch,\n selectedRows: selectedRows,\n selectedRowKeys: selectedRowKeys,\n toolBarRender: toolBarRender,\n toolbar: _objectSpread({\n filter: searchNode\n }, toolbar),\n optionsRender: optionsRender\n });\n });\n return _this;\n }\n return _createClass(ToolbarRender);\n}(React.Component);\nexport default ToolbarRender;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { Keyframes } from '@ant-design/cssinjs';\nimport { useStyle as useAntdStyle } from '@ant-design/pro-provider';\nexport var turn = new Keyframes('turn', {\n '0%': {\n transform: 'rotate(0deg)'\n },\n '25%': {\n transform: 'rotate(90deg)'\n },\n '50%': {\n transform: 'rotate(180deg)'\n },\n '75%': {\n transform: 'rotate(270deg)'\n },\n '100%': {\n transform: 'rotate(360deg)'\n }\n});\nvar genProListStyle = function genProListStyle(token) {\n return _defineProperty(_defineProperty(_defineProperty({}, token.componentCls, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({\n zIndex: 1\n }, \"\".concat(token.antCls, \"-table-wrapper \").concat(token.antCls, \"-table-pagination\").concat(token.antCls, \"-pagination\"), {\n marginBlockEnd: 0\n }), '&:not(:root):fullscreen', {\n minHeight: '100vh',\n overflow: 'auto',\n background: token.colorBgContainer\n }), '&-extra', {\n marginBlockEnd: 16\n }), '&-polling', _defineProperty({}, \"\".concat(token.componentCls, \"-list-toolbar-setting-item\"), {\n '.anticon.anticon-reload': {\n transform: 'rotate(0deg)',\n animationName: turn,\n animationDuration: '1s',\n animationTimingFunction: 'linear',\n animationIterationCount: 'infinite'\n }\n })), \"td\".concat(token.antCls, \"-table-cell\"), {\n '>a': {\n fontSize: token.fontSize\n }\n }), \"\".concat(token.antCls, \"-table\").concat(token.antCls, \"-table-tbody\").concat(token.antCls, \"-table-wrapper:only-child\").concat(token.antCls, \"-table\"), {\n marginBlock: 0,\n marginInline: 0\n }), \"\".concat(token.antCls, \"-table\").concat(token.antCls, \"-table-middle \").concat(token.componentCls), _defineProperty({\n marginBlock: 0,\n marginInline: -8\n }, \"\".concat(token.proComponentsCls, \"-card\"), {\n backgroundColor: 'initial'\n })), '& &-search', _defineProperty(_defineProperty(_defineProperty(_defineProperty({\n marginBlockEnd: '16px',\n background: token.colorBgContainer,\n '&-ghost': {\n background: 'transparent'\n }\n }, \"&\".concat(token.componentCls, \"-form\"), {\n marginBlock: 0,\n marginInline: 0,\n paddingBlock: 0,\n paddingInline: 16,\n overflow: 'unset'\n }), '&-light-filter', {\n marginBlockEnd: 0,\n paddingBlock: 0,\n paddingInline: 0\n }), '&-form-option', _defineProperty(_defineProperty(_defineProperty({}, \"\".concat(token.antCls, \"-form-item\"), {}), \"\".concat(token.antCls, \"-form-item-label\"), {}), \"\".concat(token.antCls, \"-form-item-control-input\"), {})), '@media (max-width: 575px)', _defineProperty({}, token.componentCls, _defineProperty({\n height: 'auto !important',\n paddingBlockEnd: '24px'\n }, \"\".concat(token.antCls, \"-form-item-label\"), {\n minWidth: '80px',\n textAlign: 'start'\n })))), '&-toolbar', {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n height: '64px',\n paddingInline: 24,\n paddingBlock: 0,\n '&-option': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end'\n },\n '&-title': {\n flex: '1',\n color: token.colorTextLabel,\n fontWeight: '500',\n fontSize: '16px',\n lineHeight: '24px',\n opacity: '0.85'\n }\n })), \"@media (max-width: \".concat(token.screenXS, \")px\"), _defineProperty({}, token.componentCls, _defineProperty({}, \"\".concat(token.antCls, \"-table\"), {\n width: '100%',\n overflowX: 'auto',\n '&-thead > tr,&-tbody > tr': {\n '> th,> td': {\n whiteSpace: 'pre',\n '>span': {\n display: 'block'\n }\n }\n }\n }))), '@media (max-width: 575px)', _defineProperty({}, \"\".concat(token.componentCls, \"-toolbar\"), {\n flexDirection: 'column',\n alignItems: 'flex-start',\n justifyContent: 'flex-start',\n height: 'auto',\n marginBlockEnd: '16px',\n marginInlineStart: '16px',\n paddingBlock: 8,\n paddingInline: 8,\n paddingBlockStart: '16px',\n lineHeight: 'normal',\n '&-title': {\n marginBlockEnd: 16\n },\n '&-option': {\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%'\n },\n '&-default-option': {\n display: 'flex',\n flex: '1',\n alignItems: 'center',\n justifyContent: 'flex-end'\n }\n }));\n};\nexport function useStyle(prefixCls) {\n return useAntdStyle('ProTable', function (token) {\n var proListToken = _objectSpread(_objectSpread({}, token), {}, {\n componentCls: \".\".concat(prefixCls)\n });\n return [genProListStyle(proListToken)];\n });\n}","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nvar _excluded = [\"data\", \"success\", \"total\"];\nimport { runFunction, useDebounceFn, useDeepCompareEffect, useMountMergeState, usePrevious, useRefFunction } from '@ant-design/pro-utils';\nimport { useEffect, useRef } from 'react';\nimport { unstable_batchedUpdates } from 'react-dom';\nimport { postDataPipeline } from \"./utils/index\";\n\n/**\n * 组合用户的配置和默认值\n *\n * @param param0\n */\nvar mergeOptionAndPageInfo = function mergeOptionAndPageInfo(_ref) {\n var pageInfo = _ref.pageInfo;\n if (pageInfo) {\n var current = pageInfo.current,\n defaultCurrent = pageInfo.defaultCurrent,\n pageSize = pageInfo.pageSize,\n defaultPageSize = pageInfo.defaultPageSize;\n return {\n current: current || defaultCurrent || 1,\n total: 0,\n pageSize: pageSize || defaultPageSize || 20\n };\n }\n return {\n current: 1,\n total: 0,\n pageSize: 20\n };\n};\n\n/**\n * useFetchData hook 用来获取数据并控制数据的状态和分页\n * @template T\n * @param {(undefined | ((params?: { pageSize: number; current: number }) => Promise))} getData - 获取数据的函数,参数为分页参数,\n * 返回一个 Promise 类型的 T 类型的数据\n * @param {(undefined | any[])} defaultData - 默认的数据\n * @param {UseFetchProps} options - 配置项,包括了默认的分页参数、格式化数据的函数等\n * @returns {UseFetchDataAction} 返回一个对象,包含当前的数据列表、loading 状态、error、以及可控制的分页参数等\n */\nvar useFetchData = function useFetchData(getData, defaultData, options) {\n var _options$loading;\n /**\n * 用于保存组件是否被卸载的状态的引用\n * @type {React.MutableRefObject}\n */\n var umountRef = useRef(false);\n /**\n * 用于保存 AbortController 实例的引用,方便需要时进行请求的取消操作\n * @type {React.MutableRefObject}\n */\n var abortRef = useRef(null);\n /**\n * useFetchData 钩子的配置项\n * @typedef {object} UseFetchProps\n * @property {boolean} [onLoad=false] 是否在页面加载时执行请求,默认为 false\n * @property {boolean} [manual=false] 是否手动触发请求,默认为 false\n * @property {number | boolean} [polling=false] 是否开启轮询,可以为数字表示轮询的时间间隔,也可以为 true 表示开启默认时间为 1s 的轮询\n * @property {function} [onRequestError] 请求错误的回调函数\n * @property {number} [debounceTime=20] 防抖时间,单位为毫秒,默认为 20ms\n */\n var _ref2 = options || {},\n onLoad = _ref2.onLoad,\n manual = _ref2.manual,\n polling = _ref2.polling,\n onRequestError = _ref2.onRequestError,\n _ref2$debounceTime = _ref2.debounceTime,\n debounceTime = _ref2$debounceTime === void 0 ? 20 : _ref2$debounceTime,\n _ref2$effects = _ref2.effects,\n effects = _ref2$effects === void 0 ? [] : _ref2$effects;\n\n /** 是否首次加载的指示器 */\n var manualRequestRef = useRef(manual);\n\n /** 轮询的setTime ID 存储 */\n var pollingSetTimeRef = useRef();\n\n /**\n * 用于存储最新的数据,这样可以在切换的时候保持数据的一致性\n */\n var _useMountMergeState = useMountMergeState(defaultData, {\n value: options === null || options === void 0 ? void 0 : options.dataSource,\n onChange: options === null || options === void 0 ? void 0 : options.onDataSourceChange\n }),\n _useMountMergeState2 = _slicedToArray(_useMountMergeState, 2),\n tableDataList = _useMountMergeState2[0],\n setTableDataList = _useMountMergeState2[1];\n\n /**\n * 表格的加载状态\n */\n var _useMountMergeState3 = useMountMergeState(false, {\n value: _typeof(options === null || options === void 0 ? void 0 : options.loading) === 'object' ? options === null || options === void 0 || (_options$loading = options.loading) === null || _options$loading === void 0 ? void 0 : _options$loading.spinning : options === null || options === void 0 ? void 0 : options.loading,\n onChange: options === null || options === void 0 ? void 0 : options.onLoadingChange\n }),\n _useMountMergeState4 = _slicedToArray(_useMountMergeState3, 2),\n tableLoading = _useMountMergeState4[0],\n setTableLoading = _useMountMergeState4[1];\n\n /**\n * 表示页面信息的类型 useMountMergeState 钩子的初始值和参数\n * @typedef {object} PageInfo\n * @property {number} current 当前页码\n * @property {number} pageSize 页面大小\n * @property {number} total 数据总量\n * @type {[PageInfo, React.Dispatch>]}\n */\n var _useMountMergeState5 = useMountMergeState(function () {\n return mergeOptionAndPageInfo(options);\n }, {\n onChange: options === null || options === void 0 ? void 0 : options.onPageInfoChange\n }),\n _useMountMergeState6 = _slicedToArray(_useMountMergeState5, 2),\n pageInfo = _useMountMergeState6[0],\n setPageInfoState = _useMountMergeState6[1];\n\n /**\n * 用于比较并设置页面信息和回调函数的引用更新\n * @type {React.MutableRefObject<(changePageInfo: PageInfo) => void>}\n */\n var _setPageInfo = useRefFunction(function (changePageInfo) {\n if (changePageInfo.current !== pageInfo.current || changePageInfo.pageSize !== pageInfo.pageSize || changePageInfo.total !== pageInfo.total) {\n setPageInfoState(changePageInfo);\n }\n });\n var _useMountMergeState7 = useMountMergeState(false),\n _useMountMergeState8 = _slicedToArray(_useMountMergeState7, 2),\n pollingLoading = _useMountMergeState8[0],\n setPollingLoading = _useMountMergeState8[1];\n\n // Batching update https://github.com/facebook/react/issues/14259\n var setDataAndLoading = function setDataAndLoading(newData, dataTotal) {\n unstable_batchedUpdates(function () {\n setTableDataList(newData);\n if ((pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.total) !== dataTotal) {\n _setPageInfo(_objectSpread(_objectSpread({}, pageInfo), {}, {\n total: dataTotal || newData.length\n }));\n }\n });\n };\n\n /**\n * 上一页的页码\n * @type {number}\n */\n var prePage = usePrevious(pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.current);\n\n /**\n * 上一页的页面大小\n * @type {number}\n */\n var prePageSize = usePrevious(pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.pageSize);\n\n /**\n * 上一页的轮询时间\n * @type {number|boolean}\n */\n var prePolling = usePrevious(polling);\n\n /**\n * 不这样做会导致状态不更新\n * https://github.com/ant-design/pro-components/issues/4390\n */\n var requestFinally = useRefFunction(function () {\n unstable_batchedUpdates(function () {\n setTableLoading(false);\n setPollingLoading(false);\n });\n });\n /** 请求数据 */\n var fetchList = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(isPolling) {\n var _ref4, pageSize, current, pageParams, _ref5, _ref5$data, data, success, _ref5$total, total, rest, responseData;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!manualRequestRef.current) {\n _context.next = 3;\n break;\n }\n manualRequestRef.current = false;\n return _context.abrupt(\"return\");\n case 3:\n if (!isPolling) {\n setTableLoading(true);\n } else {\n setPollingLoading(true);\n }\n _ref4 = pageInfo || {}, pageSize = _ref4.pageSize, current = _ref4.current;\n _context.prev = 5;\n pageParams = (options === null || options === void 0 ? void 0 : options.pageInfo) !== false ? {\n current: current,\n pageSize: pageSize\n } : undefined;\n _context.next = 9;\n return getData === null || getData === void 0 ? void 0 : getData(pageParams);\n case 9:\n _context.t0 = _context.sent;\n if (_context.t0) {\n _context.next = 12;\n break;\n }\n _context.t0 = {};\n case 12:\n _ref5 = _context.t0;\n _ref5$data = _ref5.data;\n data = _ref5$data === void 0 ? [] : _ref5$data;\n success = _ref5.success;\n _ref5$total = _ref5.total;\n total = _ref5$total === void 0 ? 0 : _ref5$total;\n rest = _objectWithoutProperties(_ref5, _excluded);\n if (!(success === false)) {\n _context.next = 21;\n break;\n }\n return _context.abrupt(\"return\", []);\n case 21:\n responseData = postDataPipeline(data, [options.postData].filter(function (item) {\n return item;\n })); // 设置表格数据\n setDataAndLoading(responseData, total);\n onLoad === null || onLoad === void 0 || onLoad(responseData, rest);\n return _context.abrupt(\"return\", responseData);\n case 27:\n _context.prev = 27;\n _context.t1 = _context[\"catch\"](5);\n if (!(onRequestError === undefined)) {\n _context.next = 31;\n break;\n }\n throw new Error(_context.t1);\n case 31:\n if (tableDataList === undefined) setTableDataList([]);\n onRequestError(_context.t1);\n case 33:\n _context.prev = 33;\n requestFinally();\n return _context.finish(33);\n case 36:\n return _context.abrupt(\"return\", []);\n case 37:\n case \"end\":\n return _context.stop();\n }\n }, _callee, null, [[5, 27, 33, 36]]);\n }));\n return function fetchList(_x) {\n return _ref3.apply(this, arguments);\n };\n }();\n\n /**\n * 该函数用于进行数据请求,可以用于轮询或单次请求。\n * 通过使用 AbortController 取消之前的请求,避免出现请求堆积。\n * 若需要轮询,则在一定时间后再次调用该函数,最小时间为 200ms,避免一直处于 loading 状态。\n * 如果请求被取消,则返回空。\n */\n var fetchListDebounce = useDebounceFn( /*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(isPolling) {\n var abort, msg, needPolling;\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (pollingSetTimeRef.current) {\n clearTimeout(pollingSetTimeRef.current);\n }\n if (getData) {\n _context2.next = 3;\n break;\n }\n return _context2.abrupt(\"return\");\n case 3:\n abort = new AbortController();\n abortRef.current = abort;\n _context2.prev = 5;\n _context2.next = 8;\n return Promise.race([fetchList(isPolling), new Promise(function (_, reject) {\n var _abortRef$current, _abortRef$current$add;\n (_abortRef$current = abortRef.current) === null || _abortRef$current === void 0 || (_abortRef$current = _abortRef$current.signal) === null || _abortRef$current === void 0 || (_abortRef$current$add = _abortRef$current.addEventListener) === null || _abortRef$current$add === void 0 || _abortRef$current$add.call(_abortRef$current, 'abort', function () {\n reject('aborted');\n // 结束请求,并且清空loading控制\n fetchListDebounce.cancel();\n requestFinally();\n });\n })]);\n case 8:\n msg = _context2.sent;\n if (!abort.signal.aborted) {\n _context2.next = 11;\n break;\n }\n return _context2.abrupt(\"return\");\n case 11:\n // 放到请求前面会导致数据是上一次的\n needPolling = runFunction(polling, msg);\n /*\n * 这段代码是用于控制轮询的。其中,needPolling 参数表明当前是否需要进行轮询,umountRef 是一个 ref,用来记录组件是否被卸载。\n * 如果需要轮询并且组件没有被卸载,就会调用 setTimeout,等待一定的时间,然后再次调用 fetchListDebounce 函数,并传入需要轮询的时间参数。\n * 其中 Math.max(needPolling, 2000) 用于确定最小的轮询时间为 2000ms,避免频繁请求导致一直处于 loading 状态。\n */\n if (needPolling && !umountRef.current) {\n pollingSetTimeRef.current = setTimeout(function () {\n fetchListDebounce.run(needPolling);\n // 这里判断最小要2000ms,不然一直loading\n }, Math.max(needPolling, 2000));\n }\n return _context2.abrupt(\"return\", msg);\n case 16:\n _context2.prev = 16;\n _context2.t0 = _context2[\"catch\"](5);\n if (!(_context2.t0 === 'aborted')) {\n _context2.next = 20;\n break;\n }\n return _context2.abrupt(\"return\");\n case 20:\n throw _context2.t0;\n case 21:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, null, [[5, 16]]);\n }));\n return function (_x2) {\n return _ref6.apply(this, arguments);\n };\n }(), debounceTime || 30);\n\n /**\n * 取消请求\n */\n var abortFetch = function abortFetch() {\n var _abortRef$current2;\n (_abortRef$current2 = abortRef.current) === null || _abortRef$current2 === void 0 || _abortRef$current2.abort();\n fetchListDebounce.cancel();\n requestFinally();\n };\n\n // 如果轮询结束了,直接销毁定时器\n useEffect(function () {\n if (!polling) {\n clearTimeout(pollingSetTimeRef.current);\n }\n if (!prePolling && polling) {\n fetchListDebounce.run(true);\n }\n return function () {\n clearTimeout(pollingSetTimeRef.current);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [polling]);\n useEffect(function () {\n umountRef.current = false;\n return function () {\n umountRef.current = true;\n };\n }, []);\n\n /** PageIndex 改变的时候自动刷新 */\n useEffect(function () {\n var _ref7 = pageInfo || {},\n current = _ref7.current,\n pageSize = _ref7.pageSize;\n // 如果上次的页码为空或者两次页码等于是没必要查询的\n // 如果 pageSize 发生变化是需要查询的,所以又加了 prePageSize\n if ((!prePage || prePage === current) && (!prePageSize || prePageSize === pageSize)) {\n return;\n }\n if (options.pageInfo && tableDataList && (tableDataList === null || tableDataList === void 0 ? void 0 : tableDataList.length) > pageSize || 0) {\n return;\n }\n\n // 如果 list 的长度大于 pageSize 的长度\n // 说明是一个假分页\n // (pageIndex - 1 || 1) 至少要第一页\n // 在第一页大于 10\n // 第二页也应该是大于 10\n if (current !== undefined && tableDataList && tableDataList.length <= pageSize) {\n abortFetch();\n fetchListDebounce.run(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.current]);\n\n // pageSize 修改后返回第一页\n useEffect(function () {\n if (!prePageSize) {\n return;\n }\n abortFetch();\n fetchListDebounce.run(false);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.pageSize]);\n\n /**\n * 检查是否有正在进行的请求需要被中止。如果是,则使用 abortRef 中的方法来中止请求。\n * 接下来,使用名为 fetchListDebounce 的防抖函数并传入 false 参数。这个函数可以防止请求过于频繁地发出,通过延迟执行传递给它的函数来实现。\n * 最后,检查是否有正在进行的请求,如果有,则中止它。\n */\n useDeepCompareEffect(function () {\n abortFetch();\n fetchListDebounce.run(false);\n if (!manual) {\n // 如果 manual 标志未设置,则将 manualRequestRef 设置为 false。\n // 用于跟踪当前的请求是否是手动发起的。\n manualRequestRef.current = false;\n }\n return function () {\n abortFetch();\n };\n }, [].concat(_toConsumableArray(effects), [manual]));\n return {\n /**\n * 表格的数据列表。\n * @type {DataSource[]}\n */\n dataSource: tableDataList,\n /**\n * 用于设置表格数据列表的 setter 函数。\n * @type {function}\n * @param {DataSource[]} list - 更新后的表格数据列表。\n */\n setDataSource: setTableDataList,\n /**\n * 表示表格是否正在加载数据的标志。\n * @type {boolean}\n */\n loading: _typeof(options === null || options === void 0 ? void 0 : options.loading) === 'object' ? _objectSpread(_objectSpread({}, options === null || options === void 0 ? void 0 : options.loading), {}, {\n spinning: tableLoading\n }) : tableLoading,\n /**\n * 重新加载表格数据的函数。\n * @type {function}\n * @async\n * @returns {Promise} - 数据重新加载完成后解决为 true 的 Promise。\n */\n reload: function () {\n var _reload = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n abortFetch();\n return _context3.abrupt(\"return\", fetchListDebounce.run(false));\n case 2:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }));\n function reload() {\n return _reload.apply(this, arguments);\n }\n return reload;\n }(),\n /**\n * 当前的分页信息。\n * @type {Object}\n * @prop {number} current - 当前页码。\n * @prop {number} total - 总数据数量。\n * @prop {number} pageSize - 每页数据数量。\n */\n pageInfo: pageInfo,\n /**\n * 表示表格是否正在进行轮询请求的标志。\n * @type {boolean}\n */\n pollingLoading: pollingLoading,\n /**\n * 重置分页信息为其初始值的函数。\n * @type {function}\n * @async\n * @returns {Promise} - 重置完成后解决的 Promise。\n */\n reset: function () {\n var _reset = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {\n var _ref8, optionPageInfo, _ref9, _ref9$defaultCurrent, defaultCurrent, _ref9$defaultPageSize, defaultPageSize, initialPageInfo;\n return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n _ref8 = options || {}, optionPageInfo = _ref8.pageInfo;\n _ref9 = optionPageInfo || {}, _ref9$defaultCurrent = _ref9.defaultCurrent, defaultCurrent = _ref9$defaultCurrent === void 0 ? 1 : _ref9$defaultCurrent, _ref9$defaultPageSize = _ref9.defaultPageSize, defaultPageSize = _ref9$defaultPageSize === void 0 ? 20 : _ref9$defaultPageSize;\n initialPageInfo = {\n current: defaultCurrent,\n total: 0,\n pageSize: defaultPageSize\n };\n _setPageInfo(initialPageInfo);\n case 4:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4);\n }));\n function reset() {\n return _reset.apply(this, arguments);\n }\n return reset;\n }(),\n /**\n * 更新分页信息的函数。\n * @type {function}\n * @async\n * @param {Object} info - 新的分页信息。\n * @prop {number} [current] - 新的当前页码。\n * @prop {number} [total] - 新的总数据数量。\n * @prop {number} [pageSize] - 新的每页数据数量。\n * @returns {Promise} - 更新完成后解决的 Promise。\n */\n setPageInfo: function () {\n var _setPageInfo2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(info) {\n return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n _setPageInfo(_objectSpread(_objectSpread({}, pageInfo), info));\n case 1:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5);\n }));\n function setPageInfo(_x3) {\n return _setPageInfo2.apply(this, arguments);\n }\n return setPageInfo;\n }()\n };\n};\nexport default useFetchData;","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nvar _excluded = [\"children\"];\nimport { FieldContext, ProForm, ProFormField } from '@ant-design/pro-form';\nimport { InlineErrorFormItem, getFieldPropsOrFormItemProps, runFunction } from '@ant-design/pro-utils';\nimport { Form } from 'antd';\nimport get from \"rc-util/es/utils/get\";\nimport React, { useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar SHOW_EMPTY_TEXT_LIST = ['', null, undefined];\n\n/**\n * 拼接用于编辑的 key\n */\nexport var spellNamePath = function spellNamePath() {\n for (var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++) {\n rest[_key] = arguments[_key];\n }\n return rest.filter(function (index) {\n return index !== undefined;\n }).map(function (item) {\n if (typeof item === 'number') {\n return item.toString();\n }\n return item;\n }).flat(1);\n};\nvar CellRenderFromItem = function CellRenderFromItem(props) {\n var formContext = useContext(FieldContext);\n var columnProps = props.columnProps,\n prefixName = props.prefixName,\n text = props.text,\n counter = props.counter,\n rowData = props.rowData,\n index = props.index,\n recordKey = props.recordKey,\n subName = props.subName,\n proFieldProps = props.proFieldProps,\n editableUtils = props.editableUtils;\n var editableForm = ProForm.useFormInstance();\n var key = recordKey || index;\n var realIndex = useMemo(function () {\n var _editableUtils$getRea, _editableUtils$getRea2;\n return (_editableUtils$getRea = editableUtils === null || editableUtils === void 0 || (_editableUtils$getRea2 = editableUtils.getRealIndex) === null || _editableUtils$getRea2 === void 0 ? void 0 : _editableUtils$getRea2.call(editableUtils, rowData)) !== null && _editableUtils$getRea !== void 0 ? _editableUtils$getRea : index;\n }, [editableUtils, index, rowData]);\n var _useState = useState(function () {\n var _ref, _columnProps$key;\n return spellNamePath(prefixName, prefixName ? subName : [], prefixName ? realIndex : key, (_ref = (_columnProps$key = columnProps === null || columnProps === void 0 ? void 0 : columnProps.key) !== null && _columnProps$key !== void 0 ? _columnProps$key : columnProps === null || columnProps === void 0 ? void 0 : columnProps.dataIndex) !== null && _ref !== void 0 ? _ref : index);\n }),\n _useState2 = _slicedToArray(_useState, 2),\n formItemName = _useState2[0],\n setName = _useState2[1];\n var rowName = useMemo(function () {\n return formItemName.slice(0, -1);\n }, [formItemName]);\n useEffect(function () {\n var _ref2, _columnProps$key2;\n var value = spellNamePath(prefixName, prefixName ? subName : [], prefixName ? realIndex : key, (_ref2 = (_columnProps$key2 = columnProps === null || columnProps === void 0 ? void 0 : columnProps.key) !== null && _columnProps$key2 !== void 0 ? _columnProps$key2 : columnProps === null || columnProps === void 0 ? void 0 : columnProps.dataIndex) !== null && _ref2 !== void 0 ? _ref2 : index);\n if (value.join('-') !== formItemName.join('-')) setName(value);\n }, [columnProps === null || columnProps === void 0 ? void 0 : columnProps.dataIndex, columnProps === null || columnProps === void 0 ? void 0 : columnProps.key, index, recordKey, prefixName, key, subName, formItemName, realIndex]);\n var needProps = useMemo(function () {\n return [editableForm, _objectSpread(_objectSpread({}, columnProps), {}, {\n rowKey: rowName,\n rowIndex: index,\n isEditable: true\n })];\n }, [columnProps, editableForm, index, rowName]);\n var InlineItem = useCallback(function (_ref3) {\n var children = _ref3.children,\n restProps = _objectWithoutProperties(_ref3, _excluded);\n return /*#__PURE__*/_jsx(InlineErrorFormItem, _objectSpread(_objectSpread({\n popoverProps: {\n getPopupContainer: formContext.getPopupContainer || function () {\n return counter.rootDomRef.current || document.body;\n }\n },\n errorType: \"popover\",\n name: formItemName\n }, restProps), {}, {\n children: children\n }), key);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [key, formItemName]);\n var generateFormItem = useCallback(function () {\n var _ref4, _ref5;\n var formItemProps = _objectSpread({}, getFieldPropsOrFormItemProps.apply(void 0, [columnProps === null || columnProps === void 0 ? void 0 : columnProps.formItemProps].concat(_toConsumableArray(needProps))));\n formItemProps.messageVariables = _objectSpread({\n label: (columnProps === null || columnProps === void 0 ? void 0 : columnProps.title) || '此项',\n type: (columnProps === null || columnProps === void 0 ? void 0 : columnProps.valueType) || '文本'\n }, formItemProps === null || formItemProps === void 0 ? void 0 : formItemProps.messageVariables);\n formItemProps.initialValue = (_ref4 = (_ref5 = prefixName ? null : text) !== null && _ref5 !== void 0 ? _ref5 : formItemProps === null || formItemProps === void 0 ? void 0 : formItemProps.initialValue) !== null && _ref4 !== void 0 ? _ref4 : columnProps === null || columnProps === void 0 ? void 0 : columnProps.initialValue;\n var fieldDom = /*#__PURE__*/_jsx(ProFormField, _objectSpread({\n cacheForSwr: true,\n name: formItemName,\n proFormFieldKey: key,\n ignoreFormItem: true,\n fieldProps: getFieldPropsOrFormItemProps.apply(void 0, [columnProps === null || columnProps === void 0 ? void 0 : columnProps.fieldProps].concat(_toConsumableArray(needProps)))\n }, proFieldProps), formItemName.join('-'));\n /**\n * 如果没有自定义直接返回\n */\n if (columnProps !== null && columnProps !== void 0 && columnProps.renderFormItem) {\n fieldDom = columnProps.renderFormItem(_objectSpread(_objectSpread({}, columnProps), {}, {\n index: index,\n isEditable: true,\n type: 'table'\n }), {\n defaultRender: function defaultRender() {\n return /*#__PURE__*/_jsx(_Fragment, {\n children: fieldDom\n });\n },\n type: 'form',\n recordKey: recordKey,\n record: _objectSpread(_objectSpread({}, rowData), editableForm === null || editableForm === void 0 ? void 0 : editableForm.getFieldValue([key])),\n isEditable: true\n }, editableForm, props.editableUtils);\n // 如果需要完全自定义可以不要name\n if (columnProps.ignoreFormItem) return /*#__PURE__*/_jsx(_Fragment, {\n children: fieldDom\n });\n }\n return /*#__PURE__*/_jsx(InlineItem, _objectSpread(_objectSpread({}, formItemProps), {}, {\n children: fieldDom\n }), formItemName.join('-'));\n }, [columnProps, needProps, prefixName, text, key, formItemName, proFieldProps, InlineItem, index, recordKey, rowData, editableForm, props.editableUtils]);\n if (formItemName.length === 0) return null;\n if (typeof (columnProps === null || columnProps === void 0 ? void 0 : columnProps.renderFormItem) === 'function' || typeof (columnProps === null || columnProps === void 0 ? void 0 : columnProps.fieldProps) === 'function' || typeof (columnProps === null || columnProps === void 0 ? void 0 : columnProps.formItemProps) === 'function') {\n return /*#__PURE__*/_jsx(Form.Item, {\n noStyle: true,\n shouldUpdate: function shouldUpdate(pre, next) {\n if (pre === next) return false;\n var shouldName = [rowName].flat(1);\n try {\n return JSON.stringify(get(pre, shouldName)) !== JSON.stringify(get(next, shouldName));\n } catch (error) {\n return true;\n }\n },\n children: function children() {\n return generateFormItem();\n }\n });\n }\n return generateFormItem();\n};\n\n/**\n * 根据不同的类型来转化数值\n *\n * @param text\n * @param valueType\n */\nfunction cellRenderToFromItem(config) {\n var _columnProps$dataInde, _config$recordKey;\n var text = config.text,\n valueType = config.valueType,\n rowData = config.rowData,\n columnProps = config.columnProps,\n index = config.index;\n\n // 如果 valueType === text ,没必要多走一次 render\n if ((!valueType || ['textarea', 'text'].includes(valueType.toString())) &&\n // valueEnum 存在说明是个select\n !(columnProps !== null && columnProps !== void 0 && columnProps.valueEnum) && config.mode === 'read') {\n // 如果是''、null、undefined 显示columnEmptyText\n return SHOW_EMPTY_TEXT_LIST.includes(text) ? config.columnEmptyText : text;\n }\n if (typeof valueType === 'function' && rowData) {\n // 防止valueType是函数,并且text是''、null、undefined跳过显式设置的columnEmptyText\n return cellRenderToFromItem(_objectSpread(_objectSpread({}, config), {}, {\n valueType: valueType(rowData, config.type) || 'text'\n }));\n }\n var columnKey = (columnProps === null || columnProps === void 0 ? void 0 : columnProps.key) || (columnProps === null || columnProps === void 0 || (_columnProps$dataInde = columnProps.dataIndex) === null || _columnProps$dataInde === void 0 ? void 0 : _columnProps$dataInde.toString());\n var dependencies = columnProps !== null && columnProps !== void 0 && columnProps.dependencies ? [config.prefixName, config.prefixName ? index === null || index === void 0 ? void 0 : index.toString() : (_config$recordKey = config.recordKey) === null || _config$recordKey === void 0 ? void 0 : _config$recordKey.toString(), columnProps === null || columnProps === void 0 ? void 0 : columnProps.dependencies].filter(Boolean).flat(1) : [];\n /**\n * 生成公用的 proField dom 配置\n */\n var proFieldProps = {\n valueEnum: runFunction(columnProps === null || columnProps === void 0 ? void 0 : columnProps.valueEnum, rowData),\n request: columnProps === null || columnProps === void 0 ? void 0 : columnProps.request,\n dependencies: columnProps !== null && columnProps !== void 0 && columnProps.dependencies ? [dependencies] : undefined,\n originDependencies: columnProps !== null && columnProps !== void 0 && columnProps.dependencies ? [columnProps === null || columnProps === void 0 ? void 0 : columnProps.dependencies] : undefined,\n params: runFunction(columnProps === null || columnProps === void 0 ? void 0 : columnProps.params, rowData, columnProps),\n readonly: columnProps === null || columnProps === void 0 ? void 0 : columnProps.readonly,\n text: valueType === 'index' || valueType === 'indexBorder' ? config.index : text,\n mode: config.mode,\n renderFormItem: undefined,\n valueType: valueType,\n // @ts-ignore\n record: rowData,\n proFieldProps: {\n emptyText: config.columnEmptyText,\n proFieldKey: columnKey ? \"table-field-\".concat(columnKey) : undefined\n }\n };\n\n /** 只读模式直接返回就好了,不需要处理 formItem */\n if (config.mode !== 'edit') {\n return /*#__PURE__*/_jsx(ProFormField, _objectSpread({\n mode: \"read\",\n ignoreFormItem: true,\n fieldProps: getFieldPropsOrFormItemProps(columnProps === null || columnProps === void 0 ? void 0 : columnProps.fieldProps, null, columnProps)\n }, proFieldProps));\n }\n return /*#__PURE__*/_jsx(CellRenderFromItem, _objectSpread(_objectSpread({}, config), {}, {\n proFieldProps: proFieldProps\n }), config.recordKey);\n}\nexport default cellRenderToFromItem;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { LabelIconTip, genCopyable, isNil } from '@ant-design/pro-utils';\nimport get from \"rc-util/es/utils/get\";\nimport React from 'react';\nimport { isMergeCell } from '.';\nimport cellRenderToFromItem from \"./cellRenderToFromItem\";\n\n/** 转化列的定义 */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * 增加了 icon 的功能 render title\n *\n * @param item\n */\nexport var renderColumnsTitle = function renderColumnsTitle(item) {\n var _item$ellipsis;\n var title = item.title;\n var ellipsis = typeof (item === null || item === void 0 ? void 0 : item.ellipsis) === 'boolean' ? item === null || item === void 0 ? void 0 : item.ellipsis : item === null || item === void 0 || (_item$ellipsis = item.ellipsis) === null || _item$ellipsis === void 0 ? void 0 : _item$ellipsis.showTitle;\n if (title && typeof title === 'function') {\n return title(item, 'table', /*#__PURE__*/_jsx(LabelIconTip, {\n label: null,\n tooltip: item.tooltip || item.tip\n }));\n }\n return /*#__PURE__*/_jsx(LabelIconTip, {\n label: title,\n tooltip: item.tooltip || item.tip,\n ellipsis: ellipsis\n });\n};\n\n/** 判断是否为不可编辑的单元格 */\nfunction isNotEditableCell(text, rowData, index, editable) {\n if (typeof editable === 'boolean') {\n return editable === false;\n }\n return (editable === null || editable === void 0 ? void 0 : editable(text, rowData, index)) === false;\n}\n\n/**\n * 默认的 filter 方法\n *\n * @param value\n * @param record\n * @param dataIndex\n * @returns\n */\nexport var defaultOnFilter = function defaultOnFilter(value, record, dataIndex) {\n var recordElement = Array.isArray(dataIndex) ? get(record, dataIndex) : record[dataIndex];\n var itemValue = String(recordElement);\n return String(itemValue) === String(value);\n};\n\n/**\n * 这个组件负责单元格的具体渲染\n *\n * @param param0\n */\nexport function columnRender(_ref) {\n var columnProps = _ref.columnProps,\n text = _ref.text,\n rowData = _ref.rowData,\n index = _ref.index,\n columnEmptyText = _ref.columnEmptyText,\n counter = _ref.counter,\n type = _ref.type,\n subName = _ref.subName,\n marginSM = _ref.marginSM,\n editableUtils = _ref.editableUtils;\n var action = counter.action,\n prefixName = counter.prefixName;\n var _editableUtils$isEdit = editableUtils.isEditable(_objectSpread(_objectSpread({}, rowData), {}, {\n index: index\n })),\n isEditable = _editableUtils$isEdit.isEditable,\n recordKey = _editableUtils$isEdit.recordKey;\n var _columnProps$renderTe = columnProps.renderText,\n renderText = _columnProps$renderTe === void 0 ? function (val) {\n return val;\n } : _columnProps$renderTe;\n var renderTextStr = renderText(text, rowData, index, action);\n var mode = isEditable && !isNotEditableCell(text, rowData, index, columnProps === null || columnProps === void 0 ? void 0 : columnProps.editable) ? 'edit' : 'read';\n var textDom = cellRenderToFromItem({\n text: renderTextStr,\n valueType: columnProps.valueType || 'text',\n index: index,\n rowData: rowData,\n subName: subName,\n columnProps: _objectSpread(_objectSpread({}, columnProps), {}, {\n // 为了兼容性,原来写了个错别字\n // @ts-ignore\n entry: rowData,\n entity: rowData\n }),\n counter: counter,\n columnEmptyText: columnEmptyText,\n type: type,\n recordKey: recordKey,\n mode: mode,\n prefixName: prefixName,\n editableUtils: editableUtils\n });\n var dom = mode === 'edit' ? textDom : genCopyable(textDom, columnProps, renderTextStr);\n\n /** 如果是编辑模式,并且 renderFormItem 存在直接走 renderFormItem */\n if (mode === 'edit') {\n if (columnProps.valueType === 'option') {\n return /*#__PURE__*/_jsx(\"div\", {\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: marginSM,\n justifyContent: columnProps.align === 'center' ? 'center' : 'flex-start'\n },\n children: editableUtils.actionRender(_objectSpread(_objectSpread({}, rowData), {}, {\n index: columnProps.index || index\n }))\n });\n }\n return dom;\n }\n if (!columnProps.render) {\n var isReactRenderNode = /*#__PURE__*/React.isValidElement(dom) || ['string', 'number'].includes(_typeof(dom));\n return !isNil(dom) && isReactRenderNode ? dom : null;\n }\n var renderDom = columnProps.render(dom, rowData, index, _objectSpread(_objectSpread({}, action), editableUtils), _objectSpread(_objectSpread({}, columnProps), {}, {\n isEditable: isEditable,\n type: 'table'\n }));\n\n // 如果是合并单元格的,直接返回对象\n if (isMergeCell(renderDom)) {\n return renderDom;\n }\n if (renderDom && columnProps.valueType === 'option' && Array.isArray(renderDom)) {\n return /*#__PURE__*/_jsx(\"div\", {\n style: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n gap: 8\n },\n children: renderDom\n });\n }\n return renderDom;\n}","import _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"rowKey\", \"tableClassName\", \"defaultClassName\", \"action\", \"tableColumn\", \"type\", \"pagination\", \"rowSelection\", \"size\", \"defaultSize\", \"tableStyle\", \"toolbarDom\", \"hideToolbar\", \"searchNode\", \"style\", \"cardProps\", \"alertDom\", \"name\", \"onSortChange\", \"onFilterChange\", \"options\", \"isLightFilter\", \"className\", \"cardBordered\", \"editableUtils\", \"getRowKey\"],\n _excluded2 = [\"cardBordered\", \"request\", \"className\", \"params\", \"defaultData\", \"headerTitle\", \"postData\", \"ghost\", \"pagination\", \"actionRef\", \"columns\", \"toolBarRender\", \"optionsRender\", \"onLoad\", \"onRequestError\", \"style\", \"cardProps\", \"tableStyle\", \"tableClassName\", \"columnsStateMap\", \"onColumnsStateChange\", \"options\", \"search\", \"name\", \"onLoadingChange\", \"rowSelection\", \"beforeSearchSubmit\", \"tableAlertRender\", \"defaultClassName\", \"formRef\", \"type\", \"columnEmptyText\", \"toolbar\", \"rowKey\", \"manualRequest\", \"polling\", \"tooltip\", \"revalidateOnFocus\", \"searchFormRender\"];\n// 兼容代码-----------\nimport \"antd/es/table/style\";\nimport \"antd/es/typography/style\";\n//----------------------\n\nimport ProCard from '@ant-design/pro-card';\nimport ProForm, { GridContext } from '@ant-design/pro-form';\nimport { ProConfigProvider, proTheme, useIntl } from '@ant-design/pro-provider';\nimport { ErrorBoundary, editableRowByKey, omitUndefined, recordKeyToString, stringify, useDeepCompareEffect, useDeepCompareEffectDebounce, useEditableArray, useMountMergeState } from '@ant-design/pro-utils';\nimport { ConfigProvider, Table } from 'antd';\nimport classNames from 'classnames';\nimport isEmpty from 'lodash-es/isEmpty';\nimport isEqual from 'lodash-es/isEqual';\nimport React, { useCallback, useContext, useEffect, useImperativeHandle, useMemo, useRef } from 'react';\nimport { Container, TableContext } from \"./Store/Provide\";\nimport Alert from \"./components/Alert\";\nimport FormRender from \"./components/Form\";\nimport Toolbar from \"./components/ToolBar\";\nimport { useStyle } from \"./style\";\nimport useFetchData from \"./useFetchData\";\nimport { genColumnKey, isBordered, mergePagination, parseDefaultColumnConfig, useActionType } from \"./utils\";\nimport { columnSort } from \"./utils/columnSort\";\nimport { genProColumnToColumn } from \"./utils/genProColumnToColumn\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createElement as _createElement } from \"react\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction TableRender(props) {\n var rowKey = props.rowKey,\n tableClassName = props.tableClassName,\n defaultClassName = props.defaultClassName,\n action = props.action,\n tableColumns = props.tableColumn,\n type = props.type,\n pagination = props.pagination,\n rowSelection = props.rowSelection,\n size = props.size,\n defaultSize = props.defaultSize,\n tableStyle = props.tableStyle,\n toolbarDom = props.toolbarDom,\n hideToolbar = props.hideToolbar,\n searchNode = props.searchNode,\n style = props.style,\n propsCardProps = props.cardProps,\n alertDom = props.alertDom,\n name = props.name,\n onSortChange = props.onSortChange,\n onFilterChange = props.onFilterChange,\n options = props.options,\n isLightFilter = props.isLightFilter,\n className = props.className,\n cardBordered = props.cardBordered,\n editableUtils = props.editableUtils,\n getRowKey = props.getRowKey,\n rest = _objectWithoutProperties(props, _excluded);\n var counter = useContext(TableContext);\n\n /** 需要遍历一下,不然不支持嵌套表格 */\n var columns = useMemo(function () {\n var loopFilter = function loopFilter(column) {\n return column.map(function (item) {\n // 删掉不应该显示的\n var columnKey = genColumnKey(item.key, item.index);\n var config = counter.columnsMap[columnKey];\n if (config && config.show === false) {\n return false;\n }\n if (item.children) {\n return _objectSpread(_objectSpread({}, item), {}, {\n children: loopFilter(item.children)\n });\n }\n return item;\n }).filter(Boolean);\n };\n return loopFilter(tableColumns);\n }, [counter.columnsMap, tableColumns]);\n\n /**\n * 如果是分页的新增,总是加到最后一行\n *\n * @returns\n */\n var editableDataSource = function editableDataSource(dataSource) {\n var _ref = editableUtils.newLineRecord || {},\n newLineOptions = _ref.options,\n row = _ref.defaultValue;\n var isNewLineRecordAtTop = (newLineOptions === null || newLineOptions === void 0 ? void 0 : newLineOptions.position) === 'top';\n if (newLineOptions !== null && newLineOptions !== void 0 && newLineOptions.parentKey) {\n var _recordKeyToString, _props$expandable;\n var actionProps = {\n data: dataSource,\n getRowKey: getRowKey,\n row: _objectSpread(_objectSpread({}, row), {}, {\n map_row_parentKey: (_recordKeyToString = recordKeyToString(newLineOptions.parentKey)) === null || _recordKeyToString === void 0 ? void 0 : _recordKeyToString.toString()\n }),\n key: newLineOptions === null || newLineOptions === void 0 ? void 0 : newLineOptions.recordKey,\n childrenColumnName: ((_props$expandable = props.expandable) === null || _props$expandable === void 0 ? void 0 : _props$expandable.childrenColumnName) || 'children'\n };\n return editableRowByKey(actionProps, isNewLineRecordAtTop ? 'top' : 'update');\n }\n if (isNewLineRecordAtTop) {\n return [row].concat(_toConsumableArray(action.dataSource));\n }\n // 如果有分页的功能,我们加到这一页的末尾\n if (pagination && pagination !== null && pagination !== void 0 && pagination.current && pagination !== null && pagination !== void 0 && pagination.pageSize) {\n var newDataSource = _toConsumableArray(action.dataSource);\n if ((pagination === null || pagination === void 0 ? void 0 : pagination.pageSize) > newDataSource.length) {\n newDataSource.push(row);\n return newDataSource;\n }\n newDataSource.splice((pagination === null || pagination === void 0 ? void 0 : pagination.current) * (pagination === null || pagination === void 0 ? void 0 : pagination.pageSize) - 1, 0, row);\n return newDataSource;\n }\n return [].concat(_toConsumableArray(action.dataSource), [row]);\n };\n var getTableProps = function getTableProps() {\n return _objectSpread(_objectSpread({}, rest), {}, {\n size: size,\n rowSelection: rowSelection === false ? undefined : rowSelection,\n className: tableClassName,\n style: tableStyle,\n columns: columns,\n loading: action.loading,\n dataSource: editableUtils.newLineRecord ? editableDataSource(action.dataSource) : action.dataSource,\n pagination: pagination,\n onChange: function onChange(changePagination, filters, sorter, extra) {\n var _rest$onChange;\n (_rest$onChange = rest.onChange) === null || _rest$onChange === void 0 || _rest$onChange.call(rest, changePagination, filters, sorter, extra);\n onFilterChange(omitUndefined(filters));\n\n // 制造筛选的数据\n // 制造一个排序的数据\n if (Array.isArray(sorter)) {\n var _omitUndefined;\n var data = sorter.reduce(function (pre, value) {\n return _objectSpread(_objectSpread({}, pre), {}, _defineProperty({}, \"\".concat(value.field), value.order));\n }, {});\n onSortChange((_omitUndefined = omitUndefined(data)) !== null && _omitUndefined !== void 0 ? _omitUndefined : {});\n } else {\n var _sorter$column, _omitUndefined2;\n var sorterOfColumn = (_sorter$column = sorter.column) === null || _sorter$column === void 0 ? void 0 : _sorter$column.sorter;\n var isSortByField = (sorterOfColumn === null || sorterOfColumn === void 0 ? void 0 : sorterOfColumn.toString()) === sorterOfColumn;\n onSortChange((_omitUndefined2 = omitUndefined(_defineProperty({}, \"\".concat(isSortByField ? sorterOfColumn : sorter.field), sorter.order))) !== null && _omitUndefined2 !== void 0 ? _omitUndefined2 : {});\n }\n }\n });\n };\n\n /**\n * 是否需要 card 来包裹\n */\n var notNeedCardDom = useMemo(function () {\n if (props.search === false && !props.headerTitle && props.toolBarRender === false) {\n return true;\n }\n return false;\n }, []);\n\n /** 默认的 table dom,如果是编辑模式,外面还要包个 form */\n var baseTableDom = /*#__PURE__*/_jsx(GridContext.Provider, {\n value: {\n grid: false,\n colProps: undefined,\n rowProps: undefined\n },\n children: /*#__PURE__*/_jsx(Table, _objectSpread(_objectSpread({}, getTableProps()), {}, {\n rowKey: rowKey\n }))\n });\n\n /** 自定义的 render */\n var tableDom = props.tableViewRender ? props.tableViewRender(_objectSpread(_objectSpread({}, getTableProps()), {}, {\n rowSelection: rowSelection !== false ? rowSelection : undefined\n }), baseTableDom) : baseTableDom;\n\n /**\n * 这段代码使用了 useMemo 进行了性能优化,根据 props.editable 和 props.name 的不同情况,渲染不同的页面组件。\n * 当 props.editable 为 true 并且 props.name 不存在时,渲染一个带有表单和工具栏的页面组件,否则只渲染工具栏和表格组件。\n * renderContent 函数会在 alertDom、props.loading、props.editable、tableDom、toolbarDom 发生变化时重新执行。\n * */\n var tableContentDom = useMemo(function () {\n if (props.editable && !props.name) {\n var _props$editable, _props$editable2, _props$editable3;\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [toolbarDom, alertDom, /*#__PURE__*/_createElement(ProForm, _objectSpread(_objectSpread({}, (_props$editable = props.editable) === null || _props$editable === void 0 ? void 0 : _props$editable.formProps), {}, {\n formRef: (_props$editable2 = props.editable) === null || _props$editable2 === void 0 || (_props$editable2 = _props$editable2.formProps) === null || _props$editable2 === void 0 ? void 0 : _props$editable2.formRef,\n component: false,\n form: (_props$editable3 = props.editable) === null || _props$editable3 === void 0 ? void 0 : _props$editable3.form,\n onValuesChange: editableUtils.onValuesChange,\n key: \"table\",\n submitter: false,\n omitNil: false,\n dateFormatter: props.dateFormatter\n }), tableDom)]\n });\n }\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [toolbarDom, alertDom, tableDom]\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [alertDom, props.loading, !!props.editable, tableDom, toolbarDom]);\n var cardBodyStyle = useMemo(function () {\n if (propsCardProps === false || notNeedCardDom === true || !!props.name) return {};\n if (hideToolbar) {\n return {\n padding: 0\n };\n }\n if (toolbarDom) {\n return {\n paddingBlockStart: 0\n };\n }\n if (toolbarDom && pagination === false) {\n return {\n paddingBlockStart: 0\n };\n }\n // if (!toolbarDom)\n return {\n padding: 0\n };\n }, [notNeedCardDom, pagination, props.name, propsCardProps, toolbarDom, hideToolbar]);\n\n /** Table 区域的 dom,为了方便 render */\n var tableAreaDom =\n // cardProps 或者 有了name 就不需要这个padding了,不然会导致不好对齐\n propsCardProps === false || notNeedCardDom === true || !!props.name ? tableContentDom : /*#__PURE__*/_jsx(ProCard, _objectSpread(_objectSpread({\n ghost: props.ghost,\n bordered: isBordered('table', cardBordered),\n bodyStyle: cardBodyStyle\n }, propsCardProps), {}, {\n children: tableContentDom\n }));\n var renderTable = function renderTable() {\n if (props.tableRender) {\n return props.tableRender(props, tableAreaDom, {\n toolbar: toolbarDom || undefined,\n alert: alertDom || undefined,\n table: tableDom || undefined\n });\n }\n return tableAreaDom;\n };\n var proTableDom = /*#__PURE__*/_jsxs(\"div\", {\n className: classNames(className, _defineProperty({}, \"\".concat(defaultClassName, \"-polling\"), action.pollingLoading)),\n style: style,\n ref: counter.rootDomRef,\n children: [isLightFilter ? null : searchNode, type !== 'form' && props.tableExtraRender && /*#__PURE__*/_jsx(\"div\", {\n className: classNames(className, \"\".concat(defaultClassName, \"-extra\")),\n children: props.tableExtraRender(props, action.dataSource || [])\n }), type !== 'form' && renderTable()]\n });\n\n // 如果不需要的全屏,ConfigProvider 没有意义\n if (!options || !(options !== null && options !== void 0 && options.fullScreen)) {\n return proTableDom;\n }\n return /*#__PURE__*/_jsx(ConfigProvider, {\n getPopupContainer: function getPopupContainer() {\n return counter.rootDomRef.current || document.body;\n },\n children: proTableDom\n });\n}\nvar emptyObj = {};\nvar ProTable = function ProTable(props) {\n var _props$expandable2;\n var cardBordered = props.cardBordered,\n request = props.request,\n propsClassName = props.className,\n _props$params = props.params,\n params = _props$params === void 0 ? emptyObj : _props$params,\n defaultData = props.defaultData,\n headerTitle = props.headerTitle,\n postData = props.postData,\n ghost = props.ghost,\n propsPagination = props.pagination,\n propsActionRef = props.actionRef,\n _props$columns = props.columns,\n propsColumns = _props$columns === void 0 ? [] : _props$columns,\n toolBarRender = props.toolBarRender,\n optionsRender = props.optionsRender,\n onLoad = props.onLoad,\n onRequestError = props.onRequestError,\n style = props.style,\n cardProps = props.cardProps,\n tableStyle = props.tableStyle,\n tableClassName = props.tableClassName,\n columnsStateMap = props.columnsStateMap,\n onColumnsStateChange = props.onColumnsStateChange,\n options = props.options,\n search = props.search,\n isEditorTable = props.name,\n onLoadingChange = props.onLoadingChange,\n _props$rowSelection = props.rowSelection,\n propsRowSelection = _props$rowSelection === void 0 ? false : _props$rowSelection,\n beforeSearchSubmit = props.beforeSearchSubmit,\n tableAlertRender = props.tableAlertRender,\n defaultClassName = props.defaultClassName,\n propRef = props.formRef,\n _props$type = props.type,\n type = _props$type === void 0 ? 'table' : _props$type,\n _props$columnEmptyTex = props.columnEmptyText,\n columnEmptyText = _props$columnEmptyTex === void 0 ? '-' : _props$columnEmptyTex,\n toolbar = props.toolbar,\n rowKey = props.rowKey,\n manualRequest = props.manualRequest,\n polling = props.polling,\n tooltip = props.tooltip,\n _props$revalidateOnFo = props.revalidateOnFocus,\n revalidateOnFocus = _props$revalidateOnFo === void 0 ? false : _props$revalidateOnFo,\n searchFormRender = props.searchFormRender,\n rest = _objectWithoutProperties(props, _excluded2);\n var _useStyle = useStyle(props.defaultClassName),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n var className = classNames(defaultClassName, propsClassName, hashId);\n\n /** 通用的来操作子节点的工具类 */\n var actionRef = useRef();\n var defaultFormRef = useRef();\n var formRef = propRef || defaultFormRef;\n useImperativeHandle(propsActionRef, function () {\n return actionRef.current;\n });\n\n /** 单选多选的相关逻辑 */\n var _useMountMergeState = useMountMergeState(propsRowSelection ? (propsRowSelection === null || propsRowSelection === void 0 ? void 0 : propsRowSelection.defaultSelectedRowKeys) || [] : undefined, {\n value: propsRowSelection ? propsRowSelection.selectedRowKeys : undefined\n }),\n _useMountMergeState2 = _slicedToArray(_useMountMergeState, 2),\n selectedRowKeys = _useMountMergeState2[0],\n setSelectedRowKeys = _useMountMergeState2[1];\n var _useMountMergeState3 = useMountMergeState(function () {\n // 如果手动模式,或者 search 不存在的时候设置为 undefined\n // undefined 就不会触发首次加载\n if (manualRequest || search !== false) {\n return undefined;\n }\n return {};\n }),\n _useMountMergeState4 = _slicedToArray(_useMountMergeState3, 2),\n formSearch = _useMountMergeState4[0],\n setFormSearch = _useMountMergeState4[1];\n var _useMountMergeState5 = useMountMergeState({}),\n _useMountMergeState6 = _slicedToArray(_useMountMergeState5, 2),\n proFilter = _useMountMergeState6[0],\n setProFilter = _useMountMergeState6[1];\n var _useMountMergeState7 = useMountMergeState({}),\n _useMountMergeState8 = _slicedToArray(_useMountMergeState7, 2),\n proSort = _useMountMergeState8[0],\n setProSort = _useMountMergeState8[1];\n\n // 平铺所有columns, 用于判断是用的是本地筛选/排序\n var loopColumns = useCallback(function (data) {\n var _columns = [];\n for (var i = 0; i < data.length; i++) {\n var _curItem = data[i];\n if (_curItem.children) {\n loopColumns(_curItem.children);\n } else {\n _columns.push(_curItem);\n }\n }\n return _columns;\n }, []);\n\n /** 如果所有列中的 filters = true | undefined 说明是用的是本地筛选 任何一列配置 filters=false,就能绕过这个判断 */\n var useLocaleFilter = useMemo(function () {\n var _columns = loopColumns(propsColumns);\n return _columns === null || _columns === void 0 ? void 0 : _columns.every(function (column) {\n return !!column.filters && !!column.onFilter || column.filters === undefined && column.onFilter === undefined;\n });\n }, [loopColumns, propsColumns]);\n\n /** 如果所有列中的 sorter != true 说明是用的是本地排序 任何一列配置 sorter=true,就能绕过这个判断 */\n var useLocaleSorter = useMemo(function () {\n var _columns = loopColumns(propsColumns);\n return _columns === null || _columns === void 0 ? void 0 : _columns.every(function (column) {\n return column.sorter !== true;\n });\n }, [loopColumns, propsColumns]);\n\n /** 设置默认的服務端排序和筛选值 */\n useEffect(function () {\n var _parseDefaultColumnCo = parseDefaultColumnConfig(propsColumns),\n sort = _parseDefaultColumnCo.sort,\n filter = _parseDefaultColumnCo.filter;\n if (!useLocaleFilter) setProFilter(filter);\n if (!useLocaleSorter) setProSort(sort);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n var intl = useIntl();\n\n /** 需要初始化 不然默认可能报错 这里取了 defaultCurrent 和 current 为了保证不会重复刷新 */\n var fetchPagination = _typeof(propsPagination) === 'object' ? propsPagination : {\n defaultCurrent: 1,\n defaultPageSize: 20,\n pageSize: 20,\n current: 1\n };\n var counter = useContext(TableContext);\n\n // ============================ useFetchData ============================\n var fetchData = useMemo(function () {\n if (!request) return undefined;\n return /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(pageParams) {\n var actionParams, response;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n actionParams = _objectSpread(_objectSpread(_objectSpread({}, pageParams || {}), formSearch), params); // eslint-disable-next-line no-underscore-dangle\n delete actionParams._timestamp;\n _context.next = 4;\n return request(actionParams, proSort, proFilter);\n case 4:\n response = _context.sent;\n return _context.abrupt(\"return\", response);\n case 6:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function (_x) {\n return _ref2.apply(this, arguments);\n };\n }();\n }, [formSearch, params, proFilter, proSort, request]);\n var action = useFetchData(fetchData, defaultData, {\n pageInfo: propsPagination === false ? false : fetchPagination,\n loading: props.loading,\n dataSource: props.dataSource,\n onDataSourceChange: props.onDataSourceChange,\n onLoad: onLoad,\n onLoadingChange: onLoadingChange,\n onRequestError: onRequestError,\n postData: postData,\n revalidateOnFocus: revalidateOnFocus,\n manual: formSearch === undefined,\n polling: polling,\n effects: [stringify(params), stringify(formSearch), stringify(proFilter), stringify(proSort)],\n debounceTime: props.debounceTime,\n onPageInfoChange: function onPageInfoChange(pageInfo) {\n var _propsPagination$onCh, _propsPagination$onSh;\n if (!propsPagination || !fetchData) return;\n\n // 总是触发一下 onChange 和 onShowSizeChange\n // 目前只有 List 和 Table 支持分页, List 有分页的时候打断 Table 的分页\n propsPagination === null || propsPagination === void 0 || (_propsPagination$onCh = propsPagination.onChange) === null || _propsPagination$onCh === void 0 || _propsPagination$onCh.call(propsPagination, pageInfo.current, pageInfo.pageSize);\n propsPagination === null || propsPagination === void 0 || (_propsPagination$onSh = propsPagination.onShowSizeChange) === null || _propsPagination$onSh === void 0 || _propsPagination$onSh.call(propsPagination, pageInfo.current, pageInfo.pageSize);\n }\n });\n // ============================ END ============================\n\n /** 聚焦的时候重新请求数据,这样可以保证数据都是最新的。 */\n useEffect(function () {\n var _props$form;\n // 手动模式和 request 为空都不生效\n if (props.manualRequest || !props.request || !revalidateOnFocus || (_props$form = props.form) !== null && _props$form !== void 0 && _props$form.ignoreRules) return;\n\n // 聚焦时重新请求事件\n var visibilitychange = function visibilitychange() {\n if (document.visibilityState === 'visible') {\n action.reload();\n }\n };\n document.addEventListener('visibilitychange', visibilitychange);\n return function () {\n return document.removeEventListener('visibilitychange', visibilitychange);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n /** SelectedRowKeys受控处理selectRows */\n var preserveRecordsRef = React.useRef(new Map());\n\n // ============================ RowKey ============================\n var getRowKey = React.useMemo(function () {\n if (typeof rowKey === 'function') {\n return rowKey;\n }\n return function (record, index) {\n var _ref3;\n if (index === -1) {\n return record === null || record === void 0 ? void 0 : record[rowKey];\n }\n // 如果 props 中有name 的话,用index 来做行号,这样方便转化为 index\n if (props.name) {\n return index === null || index === void 0 ? void 0 : index.toString();\n }\n return (_ref3 = record === null || record === void 0 ? void 0 : record[rowKey]) !== null && _ref3 !== void 0 ? _ref3 : index === null || index === void 0 ? void 0 : index.toString();\n };\n }, [props.name, rowKey]);\n useMemo(function () {\n var _action$dataSource;\n if ((_action$dataSource = action.dataSource) !== null && _action$dataSource !== void 0 && _action$dataSource.length) {\n var keys = action.dataSource.map(function (data) {\n var dataRowKey = getRowKey(data, -1);\n preserveRecordsRef.current.set(dataRowKey, data);\n return dataRowKey;\n });\n return keys;\n }\n return [];\n }, [action.dataSource, getRowKey]);\n\n /** 页面编辑的计算 */\n var pagination = useMemo(function () {\n var newPropsPagination = propsPagination === false ? false : _objectSpread({}, propsPagination);\n var pageConfig = _objectSpread(_objectSpread({}, action.pageInfo), {}, {\n setPageInfo: function setPageInfo(_ref4) {\n var pageSize = _ref4.pageSize,\n current = _ref4.current;\n var pageInfo = action.pageInfo;\n\n // pageSize 发生改变,并且你不是在第一页,切回到第一页\n // 这样可以防止出现 跳转到一个空的数据页的问题\n if (pageSize === pageInfo.pageSize || pageInfo.current === 1) {\n action.setPageInfo({\n pageSize: pageSize,\n current: current\n });\n return;\n }\n\n // 通过request的时候清空数据,然后刷新不然可能会导致 pageSize 没有数据多\n if (request) action.setDataSource([]);\n action.setPageInfo({\n pageSize: pageSize,\n // 目前只有 List 和 Table 支持分页, List 有分页的时候 还是使用之前的当前页码\n current: type === 'list' ? current : 1\n });\n }\n });\n if (request && newPropsPagination) {\n delete newPropsPagination.onChange;\n delete newPropsPagination.onShowSizeChange;\n }\n return mergePagination(newPropsPagination, pageConfig, intl);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [propsPagination, action, intl]);\n useDeepCompareEffect(function () {\n var _action$pageInfo;\n // request 存在且params不为空,且已经请求过数据才需要设置。\n if (props.request && !isEmpty(params) && action.dataSource && !isEqual(action.dataSource, defaultData) && (action === null || action === void 0 || (_action$pageInfo = action.pageInfo) === null || _action$pageInfo === void 0 ? void 0 : _action$pageInfo.current) !== 1) {\n action.setPageInfo({\n current: 1\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [params]);\n\n // 设置 name 到 store 中,里面用了 ref ,所以不用担心直接 set\n counter.setPrefixName(props.name);\n\n /** 清空所有的选中项 */\n var _onCleanSelected = useCallback(function () {\n if (propsRowSelection && propsRowSelection.onChange) {\n propsRowSelection.onChange([], [], {\n type: 'none'\n });\n }\n setSelectedRowKeys([]);\n }, [propsRowSelection, setSelectedRowKeys]);\n counter.propsRef.current = props;\n\n /** 可编辑行的相关配置 */\n var editableUtils = useEditableArray(_objectSpread(_objectSpread({}, props.editable), {}, {\n tableName: props.name,\n getRowKey: getRowKey,\n childrenColumnName: ((_props$expandable2 = props.expandable) === null || _props$expandable2 === void 0 ? void 0 : _props$expandable2.childrenColumnName) || 'children',\n dataSource: action.dataSource || [],\n setDataSource: function setDataSource(data) {\n var _props$editable4, _props$editable4$onVa;\n (_props$editable4 = props.editable) === null || _props$editable4 === void 0 || (_props$editable4$onVa = _props$editable4.onValuesChange) === null || _props$editable4$onVa === void 0 || _props$editable4$onVa.call(_props$editable4, undefined, data);\n action.setDataSource(data);\n }\n }));\n\n // ============================ Render ============================\n var _proTheme$useToken = proTheme === null || proTheme === void 0 ? void 0 : proTheme.useToken(),\n token = _proTheme$useToken.token;\n\n /** 绑定 action */\n useActionType(actionRef, action, {\n fullScreen: function fullScreen() {\n var _counter$rootDomRef;\n if (!((_counter$rootDomRef = counter.rootDomRef) !== null && _counter$rootDomRef !== void 0 && _counter$rootDomRef.current) || !document.fullscreenEnabled) {\n return;\n }\n if (document.fullscreenElement) {\n document.exitFullscreen();\n } else {\n var _counter$rootDomRef2;\n (_counter$rootDomRef2 = counter.rootDomRef) === null || _counter$rootDomRef2 === void 0 || _counter$rootDomRef2.current.requestFullscreen();\n }\n },\n onCleanSelected: function onCleanSelected() {\n // 清空选中行\n _onCleanSelected();\n },\n resetAll: function resetAll() {\n var _formRef$current;\n // 清空选中行\n _onCleanSelected();\n var _parseDefaultColumnCo2 = parseDefaultColumnConfig(propsColumns),\n sort = _parseDefaultColumnCo2.sort,\n filter = _parseDefaultColumnCo2.filter;\n // 清空筛选\n setProFilter(filter);\n // 清空排序\n setProSort(sort);\n\n // 清空 toolbar 搜索\n counter.setKeyWords(undefined);\n // 重置页码\n action.setPageInfo({\n current: 1\n });\n\n // 重置表单\n formRef === null || formRef === void 0 || (_formRef$current = formRef.current) === null || _formRef$current === void 0 || _formRef$current.resetFields();\n setFormSearch({});\n },\n editableUtils: editableUtils\n });\n\n /** 同步 action */\n counter.setAction(actionRef.current);\n\n // ---------- 列计算相关 start -----------------\n var tableColumn = useMemo(function () {\n var _props$expandable3;\n return genProColumnToColumn({\n columns: propsColumns,\n counter: counter,\n columnEmptyText: columnEmptyText,\n type: type,\n marginSM: token.marginSM,\n editableUtils: editableUtils,\n rowKey: rowKey,\n childrenColumnName: (_props$expandable3 = props.expandable) === null || _props$expandable3 === void 0 ? void 0 : _props$expandable3.childrenColumnName,\n proFilter: proFilter,\n proSort: proSort\n }).sort(columnSort(counter.columnsMap));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [propsColumns, counter === null || counter === void 0 ? void 0 : counter.sortKeyColumns, counter === null || counter === void 0 ? void 0 : counter.columnsMap, columnEmptyText, type,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n editableUtils.editableKeys && editableUtils.editableKeys.join(','), proFilter, proSort]);\n\n /** Table Column 变化的时候更新一下,这个参数将会用于渲染 */\n useDeepCompareEffectDebounce(function () {\n if (tableColumn && tableColumn.length > 0) {\n // 重新生成key的字符串用于排序\n var columnKeys = tableColumn.map(function (item) {\n return genColumnKey(item.key, item.index);\n });\n counter.setSortKeyColumns(columnKeys);\n }\n }, [tableColumn], ['render', 'renderFormItem'], 100);\n\n /** 同步 Pagination,支持受控的 页码 和 pageSize */\n useDeepCompareEffect(function () {\n var pageInfo = action.pageInfo;\n var _ref5 = propsPagination || {},\n _ref5$current = _ref5.current,\n current = _ref5$current === void 0 ? pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.current : _ref5$current,\n _ref5$pageSize = _ref5.pageSize,\n pageSize = _ref5$pageSize === void 0 ? pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.pageSize : _ref5$pageSize;\n if (propsPagination && (current || pageSize) && (pageSize !== (pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.pageSize) || current !== (pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.current))) {\n action.setPageInfo({\n pageSize: pageSize || pageInfo.pageSize,\n current: current || pageInfo.current\n });\n }\n }, [propsPagination && propsPagination.pageSize, propsPagination && propsPagination.current]);\n\n /** 行选择相关的问题 */\n var rowSelection = _objectSpread(_objectSpread({\n selectedRowKeys: selectedRowKeys\n }, propsRowSelection), {}, {\n onChange: function onChange(keys, rows, info) {\n if (propsRowSelection && propsRowSelection.onChange) {\n propsRowSelection.onChange(keys, rows, info);\n }\n setSelectedRowKeys(keys);\n }\n });\n\n /** 是不是 LightFilter, LightFilter 有一些特殊的处理 */\n var isLightFilter = search !== false && (search === null || search === void 0 ? void 0 : search.filterType) === 'light';\n var _onFormSearchSubmit = useCallback(function (values) {\n // 判断search.onSearch返回值决定是否更新formSearch\n if (options && options.search) {\n var _options$search, _options$search$onSea;\n var _ref6 = options.search === true ? {} : options.search,\n _ref6$name = _ref6.name,\n name = _ref6$name === void 0 ? 'keyword' : _ref6$name;\n\n /** 如果传入的 onSearch 返回值为 false,则不要把options.search.name对应的值set到formSearch */\n var success = (_options$search = options.search) === null || _options$search === void 0 || (_options$search$onSea = _options$search.onSearch) === null || _options$search$onSea === void 0 ? void 0 : _options$search$onSea.call(_options$search, counter.keyWords);\n if (success !== false) {\n setFormSearch(_objectSpread(_objectSpread({}, values), {}, _defineProperty({}, name, counter.keyWords)));\n return;\n }\n }\n setFormSearch(values);\n }, [counter.keyWords, options, setFormSearch]);\n var loading = useMemo(function () {\n if (_typeof(action.loading) === 'object') {\n var _action$loading;\n return ((_action$loading = action.loading) === null || _action$loading === void 0 ? void 0 : _action$loading.spinning) || false;\n }\n return action.loading;\n }, [action.loading]);\n var searchNode = useMemo(function () {\n var node = search === false && type !== 'form' ? null : /*#__PURE__*/_jsx(FormRender, {\n pagination: pagination,\n beforeSearchSubmit: beforeSearchSubmit,\n action: actionRef,\n columns: propsColumns,\n onFormSearchSubmit: function onFormSearchSubmit(values) {\n _onFormSearchSubmit(values);\n },\n ghost: ghost,\n onReset: props.onReset,\n onSubmit: props.onSubmit,\n loading: !!loading,\n manualRequest: manualRequest,\n search: search,\n form: props.form,\n formRef: formRef,\n type: props.type || 'table',\n cardBordered: props.cardBordered,\n dateFormatter: props.dateFormatter\n });\n if (searchFormRender && node) {\n return /*#__PURE__*/_jsx(_Fragment, {\n children: searchFormRender(props, node)\n });\n } else {\n return node;\n }\n }, [beforeSearchSubmit, formRef, ghost, loading, manualRequest, _onFormSearchSubmit, pagination, props, propsColumns, search, searchFormRender, type]);\n var selectedRows = useMemo(function () {\n return selectedRowKeys === null || selectedRowKeys === void 0 ? void 0 : selectedRowKeys.map(function (key) {\n var _preserveRecordsRef$c;\n return (_preserveRecordsRef$c = preserveRecordsRef.current) === null || _preserveRecordsRef$c === void 0 ? void 0 : _preserveRecordsRef$c.get(key);\n });\n }, [action.dataSource, selectedRowKeys]);\n var hideToolbar = useMemo(function () {\n return options === false && !headerTitle && !toolBarRender && !toolbar && !isLightFilter;\n }, [options, headerTitle, toolBarRender, toolbar, isLightFilter]);\n\n /** 内置的工具栏 */\n var toolbarDom = toolBarRender === false ? null : /*#__PURE__*/_jsx(Toolbar, {\n headerTitle: headerTitle,\n hideToolbar: hideToolbar,\n selectedRows: selectedRows,\n selectedRowKeys: selectedRowKeys,\n tableColumn: tableColumn,\n tooltip: tooltip,\n toolbar: toolbar,\n onFormSearchSubmit: function onFormSearchSubmit(newValues) {\n setFormSearch(_objectSpread(_objectSpread({}, formSearch), newValues));\n },\n searchNode: isLightFilter ? searchNode : null,\n options: options,\n optionsRender: optionsRender,\n actionRef: actionRef,\n toolBarRender: toolBarRender\n });\n\n /** 内置的多选操作栏 */\n var alertDom = propsRowSelection !== false ? /*#__PURE__*/_jsx(Alert, {\n selectedRowKeys: selectedRowKeys,\n selectedRows: selectedRows,\n onCleanSelected: _onCleanSelected,\n alertOptionRender: rest.tableAlertOptionRender,\n alertInfoRender: tableAlertRender,\n alwaysShowAlert: propsRowSelection === null || propsRowSelection === void 0 ? void 0 : propsRowSelection.alwaysShowAlert\n }) : null;\n return wrapSSR( /*#__PURE__*/_jsx(TableRender, _objectSpread(_objectSpread({}, props), {}, {\n name: isEditorTable,\n defaultClassName: defaultClassName,\n size: counter.tableSize,\n onSizeChange: counter.setTableSize,\n pagination: pagination,\n searchNode: searchNode,\n rowSelection: propsRowSelection !== false ? rowSelection : undefined,\n className: className,\n tableColumn: tableColumn,\n isLightFilter: isLightFilter,\n action: action,\n alertDom: alertDom,\n toolbarDom: toolbarDom,\n hideToolbar: hideToolbar,\n onSortChange: function onSortChange(sortConfig) {\n if (useLocaleSorter || sortConfig === proSort) return;\n setProSort(sortConfig);\n },\n onFilterChange: function onFilterChange(filterConfig) {\n if (useLocaleFilter || filterConfig === proFilter) return;\n setProFilter(filterConfig);\n },\n editableUtils: editableUtils,\n getRowKey: getRowKey\n })));\n};\n\n/**\n * 🏆 Use Ant Design Table like a Pro! 更快 更好 更方便\n *\n * @param props\n */\nvar ProviderTableContainer = function ProviderTableContainer(props) {\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var ErrorComponent = props.ErrorBoundary === false ? React.Fragment : props.ErrorBoundary || ErrorBoundary;\n return /*#__PURE__*/_jsx(Container, {\n initValue: props,\n children: /*#__PURE__*/_jsx(ProConfigProvider, {\n needDeps: true,\n children: /*#__PURE__*/_jsx(ErrorComponent, {\n children: /*#__PURE__*/_jsx(ProTable, _objectSpread({\n defaultClassName: \"\".concat(getPrefixCls('pro-table'))\n }, props))\n })\n })\n });\n};\nProviderTableContainer.Summary = Table.Summary;\nexport default ProviderTableContainer;","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","export var columnSort = function columnSort(columnsMap) {\n return function (a, b) {\n var _columnsMap$aKey, _columnsMap$bKey;\n var aFixed = a.fixed,\n aIndex = a.index;\n var bFixed = b.fixed,\n bIndex = b.index;\n if (aFixed === 'left' && bFixed !== 'left' || bFixed === 'right' && aFixed !== 'right') {\n return -2;\n }\n if (bFixed === 'left' && aFixed !== 'left' || aFixed === 'right' && bFixed !== 'right') {\n return 2;\n }\n // 如果没有index,在 dataIndex 或者 key 不存在的时候他会报错\n var aKey = a.key || \"\".concat(aIndex);\n var bKey = b.key || \"\".concat(bIndex);\n if ((_columnsMap$aKey = columnsMap[aKey]) !== null && _columnsMap$aKey !== void 0 && _columnsMap$aKey.order || (_columnsMap$bKey = columnsMap[bKey]) !== null && _columnsMap$bKey !== void 0 && _columnsMap$bKey.order) {\n var _columnsMap$aKey2, _columnsMap$bKey2;\n return (((_columnsMap$aKey2 = columnsMap[aKey]) === null || _columnsMap$aKey2 === void 0 ? void 0 : _columnsMap$aKey2.order) || 0) - (((_columnsMap$bKey2 = columnsMap[bKey]) === null || _columnsMap$bKey2 === void 0 ? void 0 : _columnsMap$bKey2.order) || 0);\n }\n return (a.index || 0) - (b.index || 0);\n };\n};","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { proFieldParsingValueEnumToArray } from '@ant-design/pro-field';\nimport { omitBoolean, omitUndefinedAndEmptyArr, runFunction } from '@ant-design/pro-utils';\nimport { Table } from 'antd';\nimport { columnRender, defaultOnFilter, renderColumnsTitle } from \"./columnRender\";\nimport { genColumnKey } from \"./index\";\n/**\n * 转化 columns 到 pro 的格式 主要是 render 方法的自行实现\n *\n * @param columns\n * @param map\n * @param columnEmptyText\n */\nexport function genProColumnToColumn(params, parents) {\n var _columns$map;\n var columns = params.columns,\n counter = params.counter,\n columnEmptyText = params.columnEmptyText,\n type = params.type,\n editableUtils = params.editableUtils,\n marginSM = params.marginSM,\n _params$rowKey = params.rowKey,\n rowKey = _params$rowKey === void 0 ? 'id' : _params$rowKey,\n _params$childrenColum = params.childrenColumnName,\n childrenColumnName = _params$childrenColum === void 0 ? 'children' : _params$childrenColum,\n _params$proFilter = params.proFilter,\n proFilter = _params$proFilter === void 0 ? {} : _params$proFilter,\n proSort = params.proSort;\n var subNameRecord = new Map();\n return columns === null || columns === void 0 || (_columns$map = columns.map(function (columnProps, columnsIndex) {\n if (columnProps === Table.EXPAND_COLUMN) return columnProps;\n if (columnProps === Table.SELECTION_COLUMN) return columnProps;\n var _ref = columnProps,\n key = _ref.key,\n dataIndex = _ref.dataIndex,\n valueEnum = _ref.valueEnum,\n _ref$valueType = _ref.valueType,\n valueType = _ref$valueType === void 0 ? 'text' : _ref$valueType,\n children = _ref.children,\n onFilter = _ref.onFilter,\n _ref$filters = _ref.filters,\n filters = _ref$filters === void 0 ? [] : _ref$filters,\n sorter = _ref.sorter;\n var columnKey = genColumnKey(key || (dataIndex === null || dataIndex === void 0 ? void 0 : dataIndex.toString()), [parents === null || parents === void 0 ? void 0 : parents.key, columnsIndex].filter(Boolean).join('-'));\n // 这些都没有,说明是普通的表格不需要 pro 管理\n var noNeedPro = !valueEnum && !valueType && !children;\n if (noNeedPro) {\n return _objectSpread({\n index: columnsIndex\n }, columnProps);\n }\n var config = counter.columnsMap[columnKey] || {\n fixed: columnProps.fixed\n };\n var genOnFilter = function genOnFilter() {\n if (onFilter === true) {\n return function (value, row) {\n return defaultOnFilter(value, row, dataIndex);\n };\n }\n return omitBoolean(onFilter);\n };\n\n // 对应筛选值,用作双向绑定\n var filteredValue = columnKey && (proFilter === null || proFilter === void 0 ? void 0 : proFilter[columnKey]) !== undefined ? proFilter === null || proFilter === void 0 ? void 0 : proFilter[columnKey] : null;\n // 对应排序值,用作双向绑定\n var sortOrder = columnKey && proSort[columnKey] !== undefined ? proSort[columnKey] : null;\n var keyName = rowKey;\n var tempColumns = _objectSpread(_objectSpread({\n index: columnsIndex,\n key: columnKey\n }, columnProps), {}, {\n title: renderColumnsTitle(columnProps),\n valueEnum: valueEnum,\n filters: filters === true ? proFieldParsingValueEnumToArray(runFunction(valueEnum, undefined)).filter(function (valueItem) {\n return valueItem && valueItem.value !== 'all';\n }) : filters,\n onFilter: genOnFilter(),\n filteredValue: filters && genOnFilter() == null ? filteredValue : undefined,\n sortOrder: sorter === true ? sortOrder : undefined,\n fixed: config.fixed,\n width: columnProps.width || (columnProps.fixed ? 200 : undefined),\n children: columnProps.children ? genProColumnToColumn(_objectSpread(_objectSpread({}, params), {}, {\n columns: (columnProps === null || columnProps === void 0 ? void 0 : columnProps.children) || []\n }), _objectSpread(_objectSpread({}, columnProps), {}, {\n key: columnKey\n })) : undefined,\n render: function render(text, rowData, index) {\n if (typeof rowKey === 'function') {\n keyName = rowKey(rowData, index);\n }\n var uniqueKey;\n if (_typeof(rowData) === 'object' && rowData !== null && Reflect.has(rowData, keyName)) {\n var _childrenColumnName;\n uniqueKey = rowData[keyName];\n var parentInfo = subNameRecord.get(uniqueKey) || [];\n (_childrenColumnName = rowData[childrenColumnName]) === null || _childrenColumnName === void 0 || _childrenColumnName.forEach(function (item) {\n var itemUniqueKey = item[keyName];\n if (!subNameRecord.has(itemUniqueKey)) {\n subNameRecord.set(itemUniqueKey, parentInfo.concat([index, childrenColumnName]));\n }\n });\n }\n var renderProps = {\n columnProps: columnProps,\n text: text,\n rowData: rowData,\n index: index,\n columnEmptyText: columnEmptyText,\n counter: counter,\n type: type,\n marginSM: marginSM,\n subName: subNameRecord.get(uniqueKey),\n editableUtils: editableUtils\n };\n return columnRender(renderProps);\n }\n });\n return omitUndefinedAndEmptyArr(tempColumns);\n })) === null || _columns$map === void 0 ? void 0 : _columns$map.filter(function (item) {\n return !item.hideInTable;\n });\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar _excluded = [\"onTableChange\", \"maxLength\", \"formItemProps\", \"recordCreatorProps\", \"rowKey\", \"controlled\", \"defaultValue\", \"onChange\", \"editableFormRef\"],\n _excluded2 = [\"record\", \"position\", \"creatorButtonText\", \"newRecordType\", \"parentKey\", \"style\"];\nimport { PlusOutlined } from '@ant-design/icons';\nimport ProForm, { ProFormDependency } from '@ant-design/pro-form';\nimport { useIntl } from '@ant-design/pro-provider';\nimport { isDeepEqualReact, runFunction, stringify, useRefFunction } from '@ant-design/pro-utils';\nimport { Button, Form } from 'antd';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport get from \"rc-util/es/utils/get\";\nimport set from \"rc-util/es/utils/set\";\nimport React, { useContext, useEffect, useImperativeHandle, useMemo, useRef } from 'react';\nimport ProTable from \"../../Table\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar EditableTableActionContext = /*#__PURE__*/React.createContext(undefined);\n\n/** 可编辑表格的按钮 */\nfunction RecordCreator(props) {\n var children = props.children,\n record = props.record,\n position = props.position,\n newRecordType = props.newRecordType,\n parentKey = props.parentKey;\n var actionRef = useContext(EditableTableActionContext);\n return /*#__PURE__*/React.cloneElement(children, _objectSpread(_objectSpread({}, children.props), {}, {\n onClick: function () {\n var _onClick = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(e) {\n var _children$props$onCli, _children$props, _actionRef$current;\n var isOk;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return (_children$props$onCli = (_children$props = children.props).onClick) === null || _children$props$onCli === void 0 ? void 0 : _children$props$onCli.call(_children$props, e);\n case 2:\n isOk = _context.sent;\n if (!(isOk === false)) {\n _context.next = 5;\n break;\n }\n return _context.abrupt(\"return\");\n case 5:\n actionRef === null || actionRef === void 0 || (_actionRef$current = actionRef.current) === null || _actionRef$current === void 0 || _actionRef$current.addEditRecord(record, {\n position: position,\n newRecordType: newRecordType,\n parentKey: parentKey\n });\n case 6:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n function onClick(_x) {\n return _onClick.apply(this, arguments);\n }\n return onClick;\n }()\n }));\n}\n\n/**\n * 可以直接放到 Form 中的可编辑表格\n * A React component that is used to create a table.\n * @param props\n */\nfunction EditableTable(props) {\n var _props$editable2, _props$editable4;\n var intl = useIntl();\n var onTableChange = props.onTableChange,\n maxLength = props.maxLength,\n formItemProps = props.formItemProps,\n recordCreatorProps = props.recordCreatorProps,\n rowKey = props.rowKey,\n controlled = props.controlled,\n defaultValue = props.defaultValue,\n onChange = props.onChange,\n editableFormRef = props.editableFormRef,\n rest = _objectWithoutProperties(props, _excluded);\n var preData = useRef(undefined);\n var actionRef = useRef();\n var formRef = useRef();\n\n // 设置 ref\n useImperativeHandle(rest.actionRef, function () {\n return actionRef.current;\n }, [actionRef.current]);\n var _useMergedState = useMergedState(function () {\n return props.value || defaultValue || [];\n }, {\n value: props.value,\n onChange: props.onChange\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n value = _useMergedState2[0],\n setValue = _useMergedState2[1];\n var getRowKey = React.useMemo(function () {\n if (typeof rowKey === 'function') {\n return rowKey;\n }\n return function (record, index) {\n return record[rowKey] || index;\n };\n }, [rowKey]);\n\n /**\n * 根据不同的情况返回不同的 rowKey\n * @param finlayRowKey\n * @returns string | number\n */\n var coverRowKey = useRefFunction(function (finlayRowKey) {\n /**\n * 如果是 prop.name 的模式,就需要把行号转化成具体的rowKey。\n */\n if (typeof finlayRowKey === 'number' && !props.name) {\n if (finlayRowKey >= value.length) return finlayRowKey;\n var rowData = value && value[finlayRowKey];\n return getRowKey === null || getRowKey === void 0 ? void 0 : getRowKey(rowData, finlayRowKey);\n }\n\n /**\n * 如果是 prop.name 的模式,就直接返回行号\n */\n if ((typeof finlayRowKey === 'string' || finlayRowKey >= value.length) && props.name) {\n var _rowIndex = value.findIndex(function (item, index) {\n var _getRowKey;\n return (getRowKey === null || getRowKey === void 0 || (_getRowKey = getRowKey(item, index)) === null || _getRowKey === void 0 ? void 0 : _getRowKey.toString()) === (finlayRowKey === null || finlayRowKey === void 0 ? void 0 : finlayRowKey.toString());\n });\n if (_rowIndex !== -1) return _rowIndex;\n }\n return finlayRowKey;\n });\n\n // 设置 editableFormRef\n useImperativeHandle(editableFormRef, function () {\n /**\n * 获取一行数据的\n * @param rowIndex\n * @returns T | undefined\n */\n var getRowData = function getRowData(rowIndex) {\n var _finlayRowKey$toStrin, _formRef$current;\n if (rowIndex == undefined) {\n throw new Error('rowIndex is required');\n }\n var finlayRowKey = coverRowKey(rowIndex);\n var rowKeyName = [props.name, (_finlayRowKey$toStrin = finlayRowKey === null || finlayRowKey === void 0 ? void 0 : finlayRowKey.toString()) !== null && _finlayRowKey$toStrin !== void 0 ? _finlayRowKey$toStrin : ''].flat(1).filter(Boolean);\n return (_formRef$current = formRef.current) === null || _formRef$current === void 0 ? void 0 : _formRef$current.getFieldValue(rowKeyName);\n };\n\n /**\n * 获取整个 table 的数据\n * @returns T[] | undefined\n */\n var getRowsData = function getRowsData() {\n var _formRef$current3;\n var rowKeyName = [props.name].flat(1).filter(Boolean);\n if (Array.isArray(rowKeyName) && rowKeyName.length === 0) {\n var _formRef$current2;\n var rowData = (_formRef$current2 = formRef.current) === null || _formRef$current2 === void 0 ? void 0 : _formRef$current2.getFieldsValue();\n if (Array.isArray(rowData)) return rowData;\n return Object.keys(rowData).map(function (key) {\n return rowData[key];\n });\n }\n return (_formRef$current3 = formRef.current) === null || _formRef$current3 === void 0 ? void 0 : _formRef$current3.getFieldValue(rowKeyName);\n };\n return _objectSpread(_objectSpread({}, formRef.current), {}, {\n getRowData: getRowData,\n getRowsData: getRowsData,\n /**\n * 设置一行的数据,会将数据进行简单的 merge\n * @param rowIndex\n * @param data\n * @returns void\n */\n setRowData: function setRowData(rowIndex, data) {\n var _finlayRowKey$toStrin2, _formRef$current4;\n if (rowIndex == undefined) {\n throw new Error('rowIndex is required');\n }\n var finlayRowKey = coverRowKey(rowIndex);\n var rowKeyName = [props.name, (_finlayRowKey$toStrin2 = finlayRowKey === null || finlayRowKey === void 0 ? void 0 : finlayRowKey.toString()) !== null && _finlayRowKey$toStrin2 !== void 0 ? _finlayRowKey$toStrin2 : ''].flat(1).filter(Boolean);\n var newRowData = Object.assign({}, _objectSpread(_objectSpread({}, getRowData(rowIndex)), data || {}));\n var updateValues = set({}, rowKeyName, newRowData);\n (_formRef$current4 = formRef.current) === null || _formRef$current4 === void 0 || _formRef$current4.setFieldsValue(updateValues);\n return true;\n }\n });\n }, [coverRowKey, props.name, formRef.current]);\n useEffect(function () {\n if (!props.controlled) return;\n (value || []).forEach(function (current, index) {\n var _formRef$current5;\n (_formRef$current5 = formRef.current) === null || _formRef$current5 === void 0 || _formRef$current5.setFieldsValue(_defineProperty({}, \"\".concat(getRowKey(current, index)), current));\n }, {});\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [stringify(value), props.controlled]);\n useEffect(function () {\n if (props.name) {\n var _props$editable;\n formRef.current = props === null || props === void 0 || (_props$editable = props.editable) === null || _props$editable === void 0 ? void 0 : _props$editable.form;\n }\n }, [(_props$editable2 = props.editable) === null || _props$editable2 === void 0 ? void 0 : _props$editable2.form, props.name]);\n var _ref = recordCreatorProps || {},\n record = _ref.record,\n position = _ref.position,\n creatorButtonText = _ref.creatorButtonText,\n newRecordType = _ref.newRecordType,\n parentKey = _ref.parentKey,\n style = _ref.style,\n restButtonProps = _objectWithoutProperties(_ref, _excluded2);\n var isTop = position === 'top';\n var creatorButtonDom = useMemo(function () {\n if (typeof maxLength === 'number' && maxLength <= (value === null || value === void 0 ? void 0 : value.length)) {\n return false;\n }\n return recordCreatorProps !== false && /*#__PURE__*/_jsx(RecordCreator, {\n record: runFunction(record, value === null || value === void 0 ? void 0 : value.length, value) || {},\n position: position,\n parentKey: runFunction(parentKey, value === null || value === void 0 ? void 0 : value.length, value),\n newRecordType: newRecordType,\n children: /*#__PURE__*/_jsx(Button, _objectSpread(_objectSpread({\n type: \"dashed\",\n style: _objectSpread({\n display: 'block',\n margin: '10px 0',\n width: '100%'\n }, style),\n icon: /*#__PURE__*/_jsx(PlusOutlined, {})\n }, restButtonProps), {}, {\n children: creatorButtonText || intl.getMessage('editableTable.action.add', '添加一行数据')\n }))\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [recordCreatorProps, maxLength, value === null || value === void 0 ? void 0 : value.length]);\n var buttonRenderProps = useMemo(function () {\n if (!creatorButtonDom) {\n return {};\n }\n if (isTop) {\n return {\n components: {\n header: {\n wrapper: function wrapper(_ref2) {\n var _rest$columns;\n var className = _ref2.className,\n children = _ref2.children;\n return /*#__PURE__*/_jsxs(\"thead\", {\n className: className,\n children: [children, /*#__PURE__*/_jsxs(\"tr\", {\n style: {\n position: 'relative'\n },\n children: [/*#__PURE__*/_jsx(\"td\", {\n colSpan: 0,\n style: {\n visibility: 'hidden'\n },\n children: creatorButtonDom\n }), /*#__PURE__*/_jsx(\"td\", {\n style: {\n position: 'absolute',\n left: 0,\n width: '100%'\n },\n colSpan: (_rest$columns = rest.columns) === null || _rest$columns === void 0 ? void 0 : _rest$columns.length,\n children: creatorButtonDom\n })]\n })]\n });\n }\n }\n }\n };\n }\n return {\n tableViewRender: function tableViewRender(_, dom) {\n var _props$tableViewRende, _props$tableViewRende2;\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [(_props$tableViewRende = (_props$tableViewRende2 = props.tableViewRender) === null || _props$tableViewRende2 === void 0 ? void 0 : _props$tableViewRende2.call(props, _, dom)) !== null && _props$tableViewRende !== void 0 ? _props$tableViewRende : dom, creatorButtonDom]\n });\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isTop, creatorButtonDom]);\n var editableProps = _objectSpread({}, props.editable);\n\n /**\n * 防止闭包的onchange\n *\n * >>>>>>为了性能好辛苦\n */\n var newOnValueChange = useRefFunction(function (r, dataSource) {\n var _props$editable3, _props$editable3$onVa, _props$onValuesChange;\n (_props$editable3 = props.editable) === null || _props$editable3 === void 0 || (_props$editable3$onVa = _props$editable3.onValuesChange) === null || _props$editable3$onVa === void 0 || _props$editable3$onVa.call(_props$editable3, r, dataSource);\n (_props$onValuesChange = props.onValuesChange) === null || _props$onValuesChange === void 0 || _props$onValuesChange.call(props, dataSource, r);\n if (props.controlled) {\n var _props$onChange;\n props === null || props === void 0 || (_props$onChange = props.onChange) === null || _props$onChange === void 0 || _props$onChange.call(props, dataSource);\n }\n });\n if (props !== null && props !== void 0 && props.onValuesChange || (_props$editable4 = props.editable) !== null && _props$editable4 !== void 0 && _props$editable4.onValuesChange ||\n // 受控模式需要触发 onchange\n props.controlled && props !== null && props !== void 0 && props.onChange) {\n editableProps.onValuesChange = newOnValueChange;\n }\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(EditableTableActionContext.Provider, {\n value: actionRef,\n children: /*#__PURE__*/_jsx(ProTable, _objectSpread(_objectSpread(_objectSpread({\n search: false,\n options: false,\n pagination: false,\n rowKey: rowKey,\n revalidateOnFocus: false\n }, rest), buttonRenderProps), {}, {\n tableLayout: \"fixed\",\n actionRef: actionRef,\n onChange: onTableChange,\n editable: _objectSpread(_objectSpread({}, editableProps), {}, {\n formProps: _objectSpread({\n formRef: formRef\n }, editableProps.formProps)\n }),\n dataSource: value,\n onDataSourceChange: function onDataSourceChange(dataSource) {\n setValue(dataSource);\n /**\n * 如果是top,需要重新设置一下 form,不然会导致 id 相同数据混淆\n */\n if (props.name && position === 'top') {\n var _formRef$current6;\n var newValue = set({}, [props.name].flat(1).filter(Boolean), dataSource);\n (_formRef$current6 = formRef.current) === null || _formRef$current6 === void 0 || _formRef$current6.setFieldsValue(newValue);\n }\n }\n }))\n }), props.name ? /*#__PURE__*/_jsx(ProFormDependency, {\n name: [props.name],\n children: function children(changeValue) {\n var _props$editable5, _props$editable5$onVa;\n if (!preData.current) {\n preData.current = value;\n return null;\n }\n var list = get(changeValue, [props.name].flat(1));\n var changeItem = list === null || list === void 0 ? void 0 : list.find(function (item, index) {\n var _preData$current;\n return !isDeepEqualReact(item, (_preData$current = preData.current) === null || _preData$current === void 0 ? void 0 : _preData$current[index]);\n });\n preData.current = value;\n if (!changeItem) return null;\n // 如果不存在 preData 说明是初始化,此时不需要触发 onValuesChange\n props === null || props === void 0 || (_props$editable5 = props.editable) === null || _props$editable5 === void 0 || (_props$editable5$onVa = _props$editable5.onValuesChange) === null || _props$editable5$onVa === void 0 || _props$editable5$onVa.call(_props$editable5, changeItem, list);\n return null;\n }\n }) : null]\n });\n}\n\n/**\n * 可以直接放到 Form 中的可编辑表格\n * A React component that is used to create a table.\n * @param props\n */\nfunction FieldEditableTable(props) {\n var form = ProForm.useFormInstance();\n if (!props.name) return /*#__PURE__*/_jsx(EditableTable, _objectSpread({\n tableLayout: \"fixed\",\n scroll: {\n x: 'max-content'\n }\n }, props));\n return /*#__PURE__*/_jsx(Form.Item, _objectSpread(_objectSpread({\n style: {\n maxWidth: '100%'\n },\n shouldUpdate: function shouldUpdate(prev, next) {\n var name = [props.name].flat(1);\n try {\n return JSON.stringify(get(prev, name)) !== JSON.stringify(get(next, name));\n } catch (error) {\n return true;\n }\n }\n }, props === null || props === void 0 ? void 0 : props.formItemProps), {}, {\n name: props.name,\n children: /*#__PURE__*/_jsx(EditableTable, _objectSpread(_objectSpread({\n tableLayout: \"fixed\",\n scroll: {\n x: 'max-content'\n }\n }, props), {}, {\n editable: _objectSpread(_objectSpread({}, props.editable), {}, {\n form: form\n })\n }))\n }));\n}\nFieldEditableTable.RecordCreator = RecordCreator;\nexport default FieldEditableTable;","import quantile, {quantileIndex} from \"./quantile.js\";\n\nexport default function median(values, valueof) {\n return quantile(values, 0.5, valueof);\n}\n\nexport function medianIndex(values, valueof) {\n return quantileIndex(values, 0.5, valueof);\n}\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","export default function minIndex(values, valueof) {\n let min;\n let minIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n }\n return minIndex;\n}\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nvar _excluded = [\"rules\", \"name\", \"phoneName\", \"fieldProps\", \"onTiming\", \"captchaTextRender\", \"captchaProps\"];\nimport { Button, Form, Input } from 'antd';\nimport React, { useEffect, useImperativeHandle, useState } from 'react';\nimport { createField } from \"../../BaseForm/createField\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar BaseProFormCaptcha = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var form = Form.useFormInstance();\n var _useState = useState(props.countDown || 60),\n _useState2 = _slicedToArray(_useState, 2),\n count = _useState2[0],\n setCount = _useState2[1];\n var _useState3 = useState(false),\n _useState4 = _slicedToArray(_useState3, 2),\n timing = _useState4[0],\n setTiming = _useState4[1];\n var _useState5 = useState(),\n _useState6 = _slicedToArray(_useState5, 2),\n loading = _useState6[0],\n setLoading = _useState6[1];\n // 这么写是为了防止restProps中 带入 onChange, defaultValue, rules props tabUtil\n var rules = props.rules,\n name = props.name,\n phoneName = props.phoneName,\n fieldProps = props.fieldProps,\n onTiming = props.onTiming,\n _props$captchaTextRen = props.captchaTextRender,\n captchaTextRender = _props$captchaTextRen === void 0 ? function (paramsTiming, paramsCount) {\n return paramsTiming ? \"\".concat(paramsCount, \" \\u79D2\\u540E\\u91CD\\u65B0\\u83B7\\u53D6\") : '获取验证码';\n } : _props$captchaTextRen,\n captchaProps = props.captchaProps,\n restProps = _objectWithoutProperties(props, _excluded);\n var onGetCaptcha = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(mobile) {\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _context.prev = 0;\n setLoading(true);\n _context.next = 4;\n return restProps.onGetCaptcha(mobile);\n case 4:\n setLoading(false);\n setTiming(true);\n _context.next = 13;\n break;\n case 8:\n _context.prev = 8;\n _context.t0 = _context[\"catch\"](0);\n setTiming(false);\n setLoading(false);\n // eslint-disable-next-line no-console\n console.log(_context.t0);\n case 13:\n case \"end\":\n return _context.stop();\n }\n }, _callee, null, [[0, 8]]);\n }));\n return function onGetCaptcha(_x) {\n return _ref.apply(this, arguments);\n };\n }();\n /**\n * 暴露ref方法\n */\n useImperativeHandle(ref, function () {\n return {\n startTiming: function startTiming() {\n return setTiming(true);\n },\n endTiming: function endTiming() {\n return setTiming(false);\n }\n };\n });\n useEffect(function () {\n var interval = 0;\n var countDown = props.countDown;\n if (timing) {\n interval = window.setInterval(function () {\n setCount(function (preSecond) {\n if (preSecond <= 1) {\n setTiming(false);\n clearInterval(interval);\n // 重置秒数\n return countDown || 60;\n }\n return preSecond - 1;\n });\n }, 1000);\n }\n return function () {\n return clearInterval(interval);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [timing]);\n useEffect(function () {\n if (onTiming) {\n onTiming(count);\n }\n }, [count, onTiming]);\n return /*#__PURE__*/_jsxs(\"div\", {\n style: _objectSpread(_objectSpread({}, fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.style), {}, {\n display: 'flex',\n alignItems: 'center'\n }),\n ref: ref,\n children: [/*#__PURE__*/_jsx(Input, _objectSpread(_objectSpread({}, fieldProps), {}, {\n style: _objectSpread({\n flex: 1,\n transition: 'width .3s',\n marginRight: 8\n }, fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.style)\n })), /*#__PURE__*/_jsx(Button, _objectSpread(_objectSpread({\n style: {\n display: 'block'\n },\n disabled: timing,\n loading: loading\n }, captchaProps), {}, {\n onClick: /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n var _mobile;\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n _context2.prev = 0;\n if (!phoneName) {\n _context2.next = 9;\n break;\n }\n _context2.next = 4;\n return form.validateFields([phoneName].flat(1));\n case 4:\n _mobile = form.getFieldValue([phoneName].flat(1));\n _context2.next = 7;\n return onGetCaptcha(_mobile);\n case 7:\n _context2.next = 11;\n break;\n case 9:\n _context2.next = 11;\n return onGetCaptcha('');\n case 11:\n _context2.next = 16;\n break;\n case 13:\n _context2.prev = 13;\n _context2.t0 = _context2[\"catch\"](0);\n // eslint-disable-next-line no-console\n console.log(_context2.t0);\n case 16:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, null, [[0, 13]]);\n })),\n children: captchaTextRender(timing, count)\n }))]\n });\n});\nvar ProFormCaptcha = createField(BaseProFormCaptcha);\nexport default ProFormCaptcha;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _react = require(\"react\");\nvar IconContext = /*#__PURE__*/(0, _react.createContext)({});\nvar _default = exports.default = IconContext;","import toString from './to-string';\nvar upperFirst = function (value) {\n var str = toString(value);\n return str.charAt(0).toUpperCase() + str.substring(1);\n};\nexport default upperFirst;\n//# sourceMappingURL=upper-first.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { rgb2arr } from '@antv/l7-utils';\nimport BaseModel from \"../../core/BaseModel\";\nimport { polygonTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../../shader/minify_frag.glsl' */\nconst mask_frag = \"layout(std140) uniform commonUniorm {\\n vec4 u_color;\\n float u_opacity;\\n};\\n\\nout vec4 outputColor;\\n\\nvoid main() {\\n outputColor = u_color;\\n outputColor.a *= u_opacity;\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/mask_vert.glsl' */\nconst mask_vert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\n\\nlayout(std140) uniform commonUniorm {\\n vec4 u_color;\\n float u_opacity;\\n};\\n\\n#pragma include \\\"projection\\\"\\n\\nvoid main() {\\n vec4 project_pos = project_position(vec4(a_Position, 1.0));\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\\n}\\n\\n\";\nexport default class MaskModel extends BaseModel {\n getUninforms() {\n const commoninfo = this.getCommonUniformsInfo();\n const attributeInfo = this.getUniformsBufferInfo(this.getStyleAttribute());\n this.updateStyleUnifoms();\n return _objectSpread(_objectSpread({}, commoninfo.uniformsOption), attributeInfo.uniformsOption);\n }\n getCommonUniformsInfo() {\n const {\n opacity = 1,\n color = '#000'\n } = this.layer.getLayerConfig();\n const commonOptions = {\n u_color: rgb2arr(color),\n u_opacity: opacity || 1\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.initUniformsBuffer();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'mask',\n vertexShader: mask_vert,\n fragmentShader: mask_frag,\n defines: _this2.getDefines(),\n triangulation: polygonTriangulation,\n depth: {\n enable: false\n },\n pick: false\n });\n return [model];\n })();\n }\n clearModels(refresh = true) {\n if (refresh) {\n this.layerService.clear();\n }\n }\n registerBuiltinAttributes() {\n return '';\n }\n}","import FillModel from \"./fill\";\nconst MaskModels = {\n fill: FillModel\n};\nexport default MaskModels;","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport BaseLayer from \"../core/BaseLayer\";\nimport MaskModels from \"./models\";\nexport default class MaskLayer extends BaseLayer {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"type\", 'MaskLayer');\n }\n buildModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const shape = _this.getModelType();\n _this.layerModel = new MaskModels[shape](_this);\n yield _this.initLayerModels();\n })();\n }\n getModelType() {\n return 'fill';\n }\n}","var baseForOwn = require('./_baseForOwn'),\n castFunction = require('./_castFunction');\n\n/**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forOwn(object, iteratee) {\n return object && baseForOwn(object, castFunction(iteratee));\n}\n\nmodule.exports = forOwn;\n","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport class SimpleMapCoord {\n constructor(size) {\n _defineProperty(this, \"size\", 10000);\n this.size = size ? size : 10000;\n }\n setSize(size) {\n this.size = size;\n }\n getSize() {\n return [this.size, this.size];\n }\n\n /**\n * coord\n * ^ y (y > 0)\n * |\n * |\n * |\n * |(x = 0, y = 0)\n * ---------------> x (x > 0)\n */\n\n /***\n * lng: [-180, 180] 360\n * lat: [-85.05112877980659, 85.05112877980659] 170.10225755961318\n */\n\n mercatorXfromLng(lng) {\n // (0 - 1) * this.size\n return (180 + lng) / 360 * this.size;\n }\n mercatorYfromLat(lat) {\n // (0 - 1) * this.size\n return (1 - (180 - 180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + lat * Math.PI / 360))) / 360) * this.size;\n }\n lngFromMercatorX(x) {\n return x / this.size * 360 - 180;\n }\n latFromMercatorY(y) {\n const y2 = 180 - (1 - y / this.size) * 360;\n return 360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90;\n }\n project(lnglat) {\n const x = this.mercatorXfromLng(lnglat[0]);\n const y = this.mercatorYfromLat(lnglat[1]);\n return [x, y];\n }\n unproject(xy) {\n const lng = this.lngFromMercatorX(xy[0]);\n const lat = this.latFromMercatorY(xy[1]);\n return [lng, lat];\n }\n}","import { Group, Rect, Circle, Path, Text, Ellipse, Image, Line, Polygon, Polyline, HTML, } from '@antv/g';\nimport { group } from '@antv/vendor/d3-array';\nimport { error } from './helper';\nexport function select(node) {\n return new Selection([node], null, node, node.ownerDocument);\n}\n/**\n * A simple implementation of d3-selection for @antv/g.\n * It has the core features of d3-selection and extended ability.\n * Every methods of selection returns new selection if elements\n * are mutated(e.g. append, remove), otherwise return the selection itself(e.g. attr, style).\n * @see https://github.com/d3/d3-selection\n * @see https://github.com/antvis/g\n * @todo Nested selections.\n * @todo More useful functor.\n */\nexport class Selection {\n constructor(elements = null, data = null, parent = null, document = null, selections = [\n null,\n null,\n null,\n null,\n null,\n ], transitions = [], updateElements = []) {\n this._elements = Array.from(elements);\n this._data = data;\n this._parent = parent;\n this._document = document;\n this._enter = selections[0];\n this._update = selections[1];\n this._exit = selections[2];\n this._merge = selections[3];\n this._split = selections[4];\n this._transitions = transitions;\n this._facetElements = updateElements;\n }\n selectAll(selector) {\n const elements = typeof selector === 'string'\n ? this._parent.querySelectorAll(selector)\n : selector;\n return new Selection(elements, null, this._elements[0], this._document);\n }\n selectFacetAll(selector) {\n const elements = typeof selector === 'string'\n ? this._parent.querySelectorAll(selector)\n : selector;\n return new Selection(this._elements, null, this._parent, this._document, undefined, undefined, elements);\n }\n /**\n * @todo Replace with querySelector which has bug now.\n */\n select(selector) {\n const element = typeof selector === 'string'\n ? this._parent.querySelectorAll(selector)[0] || null\n : selector;\n return new Selection([element], null, element, this._document);\n }\n append(node) {\n const callback = typeof node === 'function' ? node : () => this.createElement(node);\n const elements = [];\n if (this._data !== null) {\n // For empty selection, append new element to parent.\n // Each element is bind with datum.\n for (let i = 0; i < this._data.length; i++) {\n const d = this._data[i];\n const [datum, from] = Array.isArray(d) ? d : [d, null];\n const newElement = callback(datum, i);\n newElement.__data__ = datum;\n if (from !== null)\n newElement.__fromElements__ = from;\n this._parent.appendChild(newElement);\n elements.push(newElement);\n }\n return new Selection(elements, null, this._parent, this._document);\n }\n else {\n // For non-empty selection, append new element to\n // selected element and return new selection.\n for (let i = 0; i < this._elements.length; i++) {\n const element = this._elements[i];\n const datum = element.__data__;\n const newElement = callback(datum, i);\n element.appendChild(newElement);\n elements.push(newElement);\n }\n return new Selection(elements, null, elements[0], this._document);\n }\n }\n maybeAppend(id, node, className) {\n const element = this._elements[0];\n const child = element.getElementById(id);\n if (child) {\n return new Selection([child], null, this._parent, this._document);\n }\n const newChild = typeof node === 'string' ? this.createElement(node) : node();\n newChild.id = id;\n if (className)\n newChild.className = className;\n element.appendChild(newChild);\n return new Selection([newChild], null, this._parent, this._document);\n }\n /**\n * Bind data to elements, and produce three selection:\n * Enter: Selection with empty elements and data to be bind to elements.\n * Update: Selection with elements to be updated.\n * Exit: Selection with elements to be removed.\n */\n data(data, id = (d) => d, groupId = () => null) {\n // An Array of new data.\n const enter = [];\n // An Array of elements to be updated.\n const update = [];\n // A Set of elements to be removed.\n const exit = new Set(this._elements);\n // An Array of data to be merged into one element.\n const merge = [];\n // A Set of elements to be split into multiple datum.\n const split = new Set();\n // A Map from key to each element.\n const keyElement = new Map(this._elements.map((d, i) => [id(d.__data__, i), d]));\n // A Map from key to exist element. The Update Selection\n // can get element from this map, this is for diff among\n // facets.\n const keyUpdateElement = new Map(this._facetElements.map((d, i) => [id(d.__data__, i), d]));\n // A Map from groupKey to a group of elements.\n const groupKeyElements = group(this._elements, (d) => groupId(d.__data__));\n // Diff data with selection(elements with data).\n // !!! Note\n // The switch is strictly ordered, not not change the order of them.\n for (let i = 0; i < data.length; i++) {\n const datum = data[i];\n const key = id(datum, i);\n const groupKey = groupId(datum, i);\n // Append element to update selection if incoming data has\n // exactly the same key with elements.\n if (keyElement.has(key)) {\n const element = keyElement.get(key);\n element.__data__ = datum;\n element.__facet__ = false;\n update.push(element);\n exit.delete(element);\n keyElement.delete(key);\n // Append element to update selection if incoming data has\n // exactly the same key with updateElements.\n }\n else if (keyUpdateElement.has(key)) {\n const element = keyUpdateElement.get(key);\n element.__data__ = datum;\n // Flag this element should update its parentNode.\n element.__facet__ = true;\n update.push(element);\n keyUpdateElement.delete(key);\n // Append datum to merge selection if existed elements has\n // its key as groupKey.\n }\n else if (groupKeyElements.has(key)) {\n const group = groupKeyElements.get(key);\n merge.push([datum, group]);\n for (const element of group)\n exit.delete(element);\n groupKeyElements.delete(key);\n // Append element to split selection if incoming data has\n // groupKey as its key, and bind to datum for it.\n }\n else if (keyElement.has(groupKey)) {\n const element = keyElement.get(groupKey);\n if (element.__toData__)\n element.__toData__.push(datum);\n else\n element.__toData__ = [datum];\n split.add(element);\n exit.delete(element);\n }\n else {\n // @todo Data with non-unique key.\n enter.push(datum);\n }\n }\n // Create new selection with enter, update and exit.\n const S = [\n new Selection([], enter, this._parent, this._document),\n new Selection(update, null, this._parent, this._document),\n new Selection(exit, null, this._parent, this._document),\n new Selection([], merge, this._parent, this._document),\n new Selection(split, null, this._parent, this._document),\n ];\n return new Selection(this._elements, null, this._parent, this._document, S);\n }\n merge(other) {\n const elements = [...this._elements, ...other._elements];\n const transitions = [...this._transitions, ...other._transitions];\n return new Selection(elements, null, this._parent, this._document, undefined, transitions);\n }\n createElement(type) {\n if (this._document) {\n return this._document.createElement(type, {});\n }\n const Ctor = Selection.registry[type];\n if (Ctor)\n return new Ctor();\n return error(`Unknown node type: ${type}`);\n }\n /**\n * Apply callback for each selection(enter, update, exit)\n * and merge them into one selection.\n */\n join(enter = (d) => d, update = (d) => d, exit = (d) => d.remove(), merge = (d) => d, split = (d) => d.remove()) {\n const newEnter = enter(this._enter);\n const newUpdate = update(this._update);\n const newExit = exit(this._exit);\n const newMerge = merge(this._merge);\n const newSplit = split(this._split);\n return newUpdate\n .merge(newEnter)\n .merge(newExit)\n .merge(newMerge)\n .merge(newSplit);\n }\n remove() {\n // Remove node immediately if there is no transition,\n // otherwise wait until transition finished.\n for (let i = 0; i < this._elements.length; i++) {\n const transition = this._transitions[i];\n if (transition) {\n const T = Array.isArray(transition) ? transition : [transition];\n Promise.all(T.map((d) => d.finished)).then(() => {\n const element = this._elements[i];\n element.remove();\n });\n }\n else {\n const element = this._elements[i];\n element.remove();\n }\n }\n return new Selection([], null, this._parent, this._document, undefined, this._transitions);\n }\n each(callback) {\n for (let i = 0; i < this._elements.length; i++) {\n const element = this._elements[i];\n const datum = element.__data__;\n callback(datum, i, element);\n }\n return this;\n }\n attr(key, value) {\n const callback = typeof value !== 'function' ? () => value : value;\n return this.each(function (d, i, element) {\n if (value !== undefined)\n element[key] = callback(d, i, element);\n });\n }\n style(key, value) {\n const callback = typeof value !== 'function' ? () => value : value;\n return this.each(function (d, i, element) {\n if (value !== undefined)\n element.style[key] = callback(d, i, element);\n });\n }\n transition(value) {\n const callback = typeof value !== 'function' ? () => value : value;\n const { _transitions: T } = this;\n return this.each(function (d, i, element) {\n T[i] = callback(d, i, element);\n });\n }\n on(event, handler) {\n this.each(function (d, i, element) {\n element.addEventListener(event, handler);\n });\n return this;\n }\n call(callback, ...args) {\n callback(this, ...args);\n return this;\n }\n node() {\n return this._elements[0];\n }\n nodes() {\n return this._elements;\n }\n transitions() {\n return this._transitions;\n }\n parent() {\n return this._parent;\n }\n}\nSelection.registry = {\n g: Group,\n rect: Rect,\n circle: Circle,\n path: Path,\n text: Text,\n ellipse: Ellipse,\n image: Image,\n line: Line,\n polygon: Polygon,\n polyline: Polyline,\n html: HTML,\n};\n//# sourceMappingURL=selection.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix, isNumber } from '@antv/util';\nimport { format } from '@antv/vendor/d3-format';\nimport { indexOf, mapObject } from '../utils/array';\nimport { composeAsync, defined, isStrictObject, isUnset, } from '../utils/helper';\nimport { isFullTooltip } from '../utils/mark';\nimport { useLibrary } from './library';\nimport { createColumnOf } from './mark';\nimport { isPosition } from './scale';\nexport const CALLBACK_ITEM_SYMBOL = Symbol('CALLBACK_ITEM');\n// @todo Add more defaults.\nexport function applyDefaults(I, mark, context) {\n const { encode = {}, scale = {}, transform = [] } = mark, rest = __rest(mark, [\"encode\", \"scale\", \"transform\"]);\n return [I, Object.assign(Object.assign({}, rest), { encode, scale, transform })];\n}\nexport function applyDataTransform(I, mark, context) {\n return __awaiter(this, void 0, void 0, function* () {\n const { library } = context;\n const { data } = mark;\n const [useData] = useLibrary('data', library);\n const descriptor = normalizedDataSource(data);\n const { transform: T = [] } = descriptor, connector = __rest(descriptor, [\"transform\"]);\n const transform = [connector, ...T];\n const transformFunctions = transform.map((t) => useData(t, context));\n const transformedData = yield composeAsync(transformFunctions)(data);\n // Maintain the consistency of shape between input and output data.\n // If the shape of raw data is like { value: any }\n // and the returned transformedData is Object,\n // returns the wrapped data: { value: transformedData },\n // otherwise returns the processed tabular data.\n const newData = data && !Array.isArray(data) && !Array.isArray(transformedData)\n ? { value: transformedData }\n : transformedData;\n return [\n Array.isArray(transformedData) ? indexOf(transformedData) : [],\n Object.assign(Object.assign({}, mark), { data: newData }),\n ];\n });\n}\nexport function flatEncode(I, mark, context) {\n const { encode } = mark;\n if (!encode)\n return [I, mark];\n const flattenEncode = {};\n for (const [key, value] of Object.entries(encode)) {\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const name = `${key}${i === 0 ? '' : i}`;\n flattenEncode[name] = value[i];\n }\n }\n else {\n flattenEncode[key] = value;\n }\n }\n return [I, Object.assign(Object.assign({}, mark), { encode: flattenEncode })];\n}\nexport function inferChannelsType(I, mark, context) {\n const { encode, data } = mark;\n if (!encode)\n return [I, mark];\n const typedEncode = mapObject(encode, (channel) => {\n if (isTypedChannel(channel))\n return channel;\n const type = inferChannelType(data, channel);\n return { type, value: channel };\n });\n return [I, Object.assign(Object.assign({}, mark), { encode: typedEncode })];\n}\nexport function maybeVisualChannel(I, mark, context) {\n const { encode } = mark;\n if (!encode)\n return [I, mark];\n const newEncode = mapObject(encode, (channel, name) => {\n const { type } = channel;\n if (type !== 'constant' || isPosition(name))\n return channel;\n return Object.assign(Object.assign({}, channel), { constant: true });\n });\n return [I, Object.assign(Object.assign({}, mark), { encode: newEncode })];\n}\nexport function extractColumns(I, mark, context) {\n const { encode, data } = mark;\n if (!encode)\n return [I, mark];\n const { library } = context;\n const columnOf = createColumnOf(library);\n const valuedEncode = mapObject(encode, (channel) => columnOf(data, channel));\n return [I, Object.assign(Object.assign({}, mark), { encode: valuedEncode })];\n}\n/**\n * Normalize mark.tooltip to {title, items}.\n */\nexport function normalizeTooltip(I, mark, context) {\n const { tooltip = {} } = mark;\n if (isUnset(tooltip))\n return [I, mark];\n if (Array.isArray(tooltip)) {\n return [I, Object.assign(Object.assign({}, mark), { tooltip: { items: tooltip } })];\n }\n if (isStrictObject(tooltip) && isFullTooltip(tooltip)) {\n return [I, Object.assign(Object.assign({}, mark), { tooltip })];\n }\n return [I, Object.assign(Object.assign({}, mark), { tooltip: { items: [tooltip] } })];\n}\nexport function extractTooltip(I, mark, context) {\n const { data, encode, tooltip = {} } = mark;\n if (isUnset(tooltip))\n return [I, mark];\n const valueOf = (item) => {\n if (!item)\n return item;\n if (typeof item === 'string') {\n return I.map((i) => ({ name: item, value: data[i][item] }));\n }\n if (isStrictObject(item)) {\n const { field, channel, color, name = field, valueFormatter = (d) => d, } = item;\n // Support d3-format.\n const normalizedValueFormatter = typeof valueFormatter === 'string'\n ? format(valueFormatter)\n : valueFormatter;\n // Field name.\n const definedChannel = channel && encode[channel];\n const channelField = definedChannel && encode[channel].field;\n const name1 = name || channelField || channel;\n const values = [];\n for (const i of I) {\n const value1 = field\n ? data[i][field]\n : definedChannel\n ? encode[channel].value[i]\n : null;\n values[i] = {\n name: name1,\n color,\n value: normalizedValueFormatter(value1),\n };\n }\n return values;\n }\n if (typeof item === 'function') {\n const values = [];\n for (const i of I) {\n const v = item(data[i], i, data, encode);\n if (isStrictObject(v))\n values[i] = Object.assign(Object.assign({}, v), { [CALLBACK_ITEM_SYMBOL]: true });\n else\n values[i] = { value: v };\n }\n return values;\n }\n return item;\n };\n const { title, items = [] } = tooltip, rest = __rest(tooltip, [\"title\", \"items\"]);\n const newTooltip = Object.assign({ title: valueOf(title), items: Array.isArray(items) ? items.map(valueOf) : [] }, rest);\n return [I, Object.assign(Object.assign({}, mark), { tooltip: newTooltip })];\n}\nexport function maybeArrayField(I, mark, context) {\n const { encode } = mark, rest = __rest(mark, [\"encode\"]);\n if (!encode)\n return [I, mark];\n const columns = Object.entries(encode);\n const arrayColumns = columns\n .filter(([, channel]) => {\n const { value: V } = channel;\n return Array.isArray(V[0]);\n })\n .flatMap(([key, V]) => {\n const columns = [[key, new Array(I.length).fill(undefined)]];\n const { value: rows } = V, rest = __rest(V, [\"value\"]);\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n if (Array.isArray(row)) {\n for (let j = 0; j < row.length; j++) {\n const column = columns[j] || [\n `${key}${j}`,\n new Array(I).fill(undefined),\n ];\n column[1][i] = row[j];\n columns[j] = column;\n }\n }\n }\n return columns.map(([key, value]) => [\n key,\n Object.assign({ type: 'column', value }, rest),\n ]);\n });\n const newEncode = Object.fromEntries([...columns, ...arrayColumns]);\n return [I, Object.assign(Object.assign({}, rest), { encode: newEncode })];\n}\nexport function addGuideToScale(I, mark, context) {\n const { axis = {}, legend = {}, slider = {}, scrollbar = {} } = mark;\n const normalize = (guide, channel) => {\n if (typeof guide === 'boolean')\n return guide ? {} : null;\n const eachGuide = guide[channel];\n return eachGuide === undefined || eachGuide ? eachGuide : null;\n };\n const axisChannels = typeof axis === 'object'\n ? Array.from(new Set(['x', 'y', 'z', ...Object.keys(axis)]))\n : ['x', 'y', 'z'];\n deepMix(mark, {\n scale: Object.assign(Object.assign({}, Object.fromEntries(axisChannels.map((channel) => {\n const scrollbarOptions = normalize(scrollbar, channel);\n return [\n channel,\n Object.assign({ guide: normalize(axis, channel), slider: normalize(slider, channel), scrollbar: scrollbarOptions }, (scrollbarOptions && {\n ratio: scrollbarOptions.ratio === undefined\n ? 0.5\n : scrollbarOptions.ratio,\n })),\n ];\n }))), { color: { guide: normalize(legend, 'color') }, size: { guide: normalize(legend, 'size') }, shape: { guide: normalize(legend, 'shape') }, \n // fixme: opacity is conflict with DisplayObject.opacity\n // to be confirm.\n opacity: { guide: normalize(legend, 'opacity') } }),\n });\n return [I, mark];\n}\nexport function maybeNonAnimate(I, mark, context) {\n const { animate } = mark;\n if (animate || animate === undefined)\n return [I, mark];\n deepMix(mark, {\n animate: {\n enter: { type: null },\n exit: { type: null },\n update: { type: null },\n },\n });\n return [I, mark];\n}\nfunction isTypedChannel(channel) {\n if (typeof channel !== 'object' ||\n channel instanceof Date ||\n channel === null) {\n return false;\n }\n const { type } = channel;\n return defined(type);\n}\nfunction inferChannelType(data, channel) {\n if (typeof channel === 'function')\n return 'transform';\n if (typeof channel === 'string' && isField(data, channel))\n return 'field';\n return 'constant';\n}\nfunction isField(data, value) {\n if (!Array.isArray(data))\n return false;\n return data.some((d) => d[value] !== undefined);\n}\nfunction normalizedDataSource(data) {\n // Liquid、Gauge need number data.\n if (isNumber(data))\n return { type: 'inline', value: data };\n // Return null as a placeholder.\n if (!data)\n return { type: 'inline', value: null };\n if (Array.isArray(data))\n return { type: 'inline', value: data };\n const { type = 'inline' } = data, rest = __rest(data, [\"type\"]);\n return Object.assign(Object.assign({}, rest), { type });\n}\n//# sourceMappingURL=transform.js.map","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { useStyle as useAntdStyle } from '@ant-design/pro-provider';\nvar genStepsFormStyle = function genStepsFormStyle(token) {\n return _defineProperty({}, token.componentCls, {\n '&-container': {\n width: 'max-content',\n minWidth: '420px',\n maxWidth: '100%',\n margin: 'auto'\n },\n '&-steps-container': _defineProperty({\n maxWidth: '1160px',\n margin: 'auto'\n }, \"\".concat(token.antCls, \"-steps-vertical\"), {\n height: '100%'\n }),\n '&-step': {\n display: 'none',\n marginBlockStart: '32px',\n '&-active': {\n display: 'block'\n },\n '> form': {\n maxWidth: '100%'\n }\n }\n });\n};\nexport function useStyle(prefixCls) {\n return useAntdStyle('StepsForm', function (token) {\n var loginFormToken = _objectSpread(_objectSpread({}, token), {}, {\n componentCls: \".\".concat(prefixCls)\n });\n return [genStepsFormStyle(loginFormToken)];\n });\n}","// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nexport default class PathString {\n constructor(digits) {\n this._append = digits == null ? append : appendRound(digits);\n this._radius = 4.5;\n this._ = \"\";\n }\n pointRadius(_) {\n this._radius = +_;\n return this;\n }\n polygonStart() {\n this._line = 0;\n }\n polygonEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line === 0) this._ += \"Z\";\n this._point = NaN;\n }\n point(x, y) {\n switch (this._point) {\n case 0: {\n this._append`M${x},${y}`;\n this._point = 1;\n break;\n }\n case 1: {\n this._append`L${x},${y}`;\n break;\n }\n default: {\n this._append`M${x},${y}`;\n if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n const r = this._radius;\n const s = this._;\n this._ = \"\"; // stash the old string so we can cache the circle path fragment\n this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n cacheRadius = r;\n cacheAppend = this._append;\n cacheCircle = this._;\n this._ = s;\n }\n this._ += cacheCircle;\n break;\n }\n }\n }\n result() {\n const result = this._;\n this._ = \"\";\n return result.length ? result : null;\n }\n}\n\nfunction append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n const d = Math.floor(digits);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n if (d > 15) return append;\n if (d !== cacheDigits) {\n const k = 10 ** d;\n cacheDigits = d;\n cacheAppend = function append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n }\n return cacheAppend;\n}\n","/*!\n * @antv/g-plugin-image-loader\n * @description A G plugin for loading image\n * @version 2.1.23\n * @date 5/30/2025, 2:54:46 AM\n * @author AntVis\n * @docs https://g.antv.antgroup.com/\n */\nimport _classCallCheck from '@babel/runtime/helpers/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/createClass';\nimport _callSuper from '@babel/runtime/helpers/callSuper';\nimport _inherits from '@babel/runtime/helpers/inherits';\nimport { ElementEvent, OffscreenCanvasCreator, parsedTransformToMat4, parseTransform, DisplayObject, GradientType, computeLinearGradient, computeRadialGradient, UnitType, Shape, AbstractRendererPlugin } from '@antv/g-lite';\nimport _regeneratorRuntime from '@babel/runtime/helpers/regeneratorRuntime';\nimport _objectSpread from '@babel/runtime/helpers/objectSpread2';\nimport _slicedToArray from '@babel/runtime/helpers/slicedToArray';\nimport _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';\nimport { isString } from '@antv/util';\nimport { mat4 } from 'gl-matrix';\n\nvar RefCountCache = /*#__PURE__*/function () {\n function RefCountCache() {\n _classCallCheck(this, RefCountCache);\n this.cacheStore = new Map();\n }\n return _createClass(RefCountCache, [{\n key: \"onRefAdded\",\n value: function onRefAdded(ref) {}\n }, {\n key: \"has\",\n value: function has(key) {\n return this.cacheStore.has(key);\n }\n }, {\n key: \"put\",\n value: function put(key, item, ref) {\n if (this.cacheStore.has(key)) {\n return false;\n }\n this.cacheStore.set(key, {\n value: item,\n counter: new Set([ref.entity])\n });\n this.onRefAdded(ref);\n return true;\n }\n }, {\n key: \"get\",\n value: function get(key, ref) {\n var cacheItem = this.cacheStore.get(key);\n if (!cacheItem) {\n return null;\n }\n if (!cacheItem.counter.has(ref.entity)) {\n cacheItem.counter.add(ref.entity);\n this.onRefAdded(ref);\n }\n return cacheItem.value;\n }\n }, {\n key: \"update\",\n value: function update(key, value, ref) {\n var cacheItem = this.cacheStore.get(key);\n if (!cacheItem) {\n return false;\n }\n cacheItem.value = _objectSpread(_objectSpread({}, cacheItem.value), value);\n if (!cacheItem.counter.has(ref.entity)) {\n cacheItem.counter.add(ref.entity);\n this.onRefAdded(ref);\n }\n return true;\n }\n }, {\n key: \"release\",\n value: function release(key, ref) {\n var cacheItem = this.cacheStore.get(key);\n if (!cacheItem) {\n return false;\n }\n cacheItem.counter[\"delete\"](ref.entity);\n if (cacheItem.counter.size <= 0) {\n this.cacheStore[\"delete\"](key);\n }\n return true;\n }\n }, {\n key: \"releaseRef\",\n value: function releaseRef(ref) {\n var _this = this;\n Array.from(this.cacheStore.keys()).forEach(function (key) {\n _this.release(key, ref);\n });\n }\n }, {\n key: \"getSize\",\n value: function getSize() {\n return this.cacheStore.size;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.cacheStore.clear();\n }\n }]);\n}();\n\nvar tasks = [];\nvar nextFrameTasks = [];\nvar ImageSlicer = /*#__PURE__*/function () {\n function ImageSlicer() {\n _classCallCheck(this, ImageSlicer);\n }\n return _createClass(ImageSlicer, null, [{\n key: \"stop\",\n value: function stop() {\n var api = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ImageSlicer.api;\n if (ImageSlicer.rafId) {\n api.cancelAnimationFrame(ImageSlicer.rafId);\n ImageSlicer.rafId = null;\n }\n }\n }, {\n key: \"executeTask\",\n value: function executeTask() {\n var api = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ImageSlicer.api;\n if (tasks.length <= 0 && nextFrameTasks.length <= 0) {\n return;\n }\n nextFrameTasks.forEach(function (task) {\n return task();\n });\n nextFrameTasks = tasks.splice(0, ImageSlicer.TASK_NUM_PER_FRAME);\n ImageSlicer.rafId = api.requestAnimationFrame(function () {\n ImageSlicer.executeTask(api);\n });\n }\n }, {\n key: \"sliceImage\",\n value: function sliceImage(image, sliceWidth, sliceHeight, rerender) {\n var overlap = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var api = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : ImageSlicer.api;\n var imageWidth = image.naturalWidth || image.width;\n var imageHeight = image.naturalHeight || image.height;\n\n // 计算步长(考虑重叠区域)\n var strideW = sliceWidth - overlap;\n var strideH = sliceHeight - overlap;\n\n // 计算网格尺寸\n var gridCols = Math.ceil(imageWidth / strideW);\n var gridRows = Math.ceil(imageHeight / strideH);\n var result = {\n tileSize: [sliceWidth, sliceHeight],\n gridSize: [gridRows, gridCols],\n tiles: Array(gridRows).fill(null).map(function () {\n return Array(gridCols).fill(null);\n })\n };\n\n // 遍历网格创建切片\n var _loop = function _loop(row) {\n var _loop2 = function _loop2(col) {\n tasks.push(function () {\n // 计算当前切片的坐标\n var startX = col * strideW;\n var startY = row * strideH;\n\n // 处理最后一列/行的特殊情况\n var _ref = [Math.min(sliceWidth, imageWidth - startX), Math.min(sliceHeight, imageHeight - startY)],\n tempSliceWidth = _ref[0],\n tempSliceHeight = _ref[1];\n\n // 创建切片canvas\n var sliceCanvas = api.createCanvas();\n sliceCanvas.width = sliceWidth;\n sliceCanvas.height = sliceHeight;\n var sliceCtx = sliceCanvas.getContext('2d');\n\n // 将图像部分绘制到切片canvas上\n sliceCtx.drawImage(image, startX, startY, tempSliceWidth, tempSliceHeight, 0, 0, tempSliceWidth, tempSliceHeight);\n\n // 存储切片信息\n result.tiles[row][col] = {\n x: startX,\n y: startY,\n tileX: col,\n tileY: row,\n data: sliceCanvas\n };\n rerender();\n });\n };\n for (var col = 0; col < gridCols; col++) {\n _loop2(col);\n }\n };\n for (var row = 0; row < gridRows; row++) {\n _loop(row);\n }\n ImageSlicer.stop();\n ImageSlicer.executeTask();\n return result;\n }\n }]);\n}();\nImageSlicer.TASK_NUM_PER_FRAME = 10;\n\nvar IMAGE_CACHE = new RefCountCache();\nIMAGE_CACHE.onRefAdded = function onRefAdded(ref) {\n var _this = this;\n ref.addEventListener(ElementEvent.DESTROY, function () {\n _this.releaseRef(ref);\n }, {\n once: true\n });\n};\nvar ImagePool = /*#__PURE__*/function () {\n function ImagePool(context, runtime) {\n _classCallCheck(this, ImagePool);\n this.gradientCache = {};\n this.patternCache = {};\n this.context = context;\n this.runtime = runtime;\n }\n return _createClass(ImagePool, [{\n key: \"getImageSync\",\n value: function getImageSync(src, ref, callback) {\n var imageSource = isString(src) ? src : src.src;\n if (IMAGE_CACHE.has(imageSource)) {\n var imageCache = IMAGE_CACHE.get(imageSource, ref);\n if (imageCache.img.complete) {\n callback === null || callback === void 0 || callback(imageCache);\n return imageCache;\n }\n }\n this.getOrCreateImage(src, ref).then(function (cache) {\n callback === null || callback === void 0 || callback(cache);\n })[\"catch\"](function (reason) {\n console.error(reason);\n });\n return null;\n }\n }, {\n key: \"getOrCreateImage\",\n value: function getOrCreateImage(src, ref) {\n var _this2 = this;\n var imageSource = isString(src) ? src : src.src;\n if (!isString(src) && !IMAGE_CACHE.has(imageSource)) {\n var imageCache = {\n img: src,\n size: [src.naturalWidth || src.width, src.naturalHeight || src.height],\n tileSize: calculateImageTileSize(src)\n };\n IMAGE_CACHE.put(imageSource, imageCache, ref);\n }\n if (IMAGE_CACHE.has(imageSource)) {\n var _imageCache = IMAGE_CACHE.get(imageSource, ref);\n if (_imageCache.img.complete) {\n return Promise.resolve(_imageCache);\n }\n return new Promise(function (resolve, reject) {\n _imageCache.img.addEventListener('load', function () {\n _imageCache.size = [_imageCache.img.naturalWidth || _imageCache.img.width, _imageCache.img.naturalHeight || _imageCache.img.height];\n _imageCache.tileSize = calculateImageTileSize(_imageCache.img);\n resolve(_imageCache);\n });\n _imageCache.img.addEventListener('error', function (ev) {\n reject(ev);\n });\n });\n }\n return new Promise(function (resolve, reject) {\n // @see https://github.com/antvis/g/issues/938\n var image = _this2.context.config.createImage();\n if (image) {\n var _imageCache2 = {\n img: image,\n size: [0, 0],\n tileSize: calculateImageTileSize(image)\n };\n IMAGE_CACHE.put(imageSource, _imageCache2, ref);\n image.onload = function () {\n _imageCache2.size = [image.naturalWidth || image.width, image.naturalHeight || image.height];\n _imageCache2.tileSize = calculateImageTileSize(_imageCache2.img);\n resolve(_imageCache2);\n };\n image.onerror = function (ev) {\n reject(ev);\n };\n image.crossOrigin = 'Anonymous';\n image.src = imageSource;\n }\n });\n }\n }, {\n key: \"createDownSampledImage\",\n value: function () {\n var _createDownSampledImage = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(src, ref) {\n var imageCache, enableLargeImageOptimization, _ref, _ref$maxDownSampledIm, maxDownSampledImageSize, _ref$downSamplingRate, downSamplingRateThreshold, createImageBitmapFunc, _imageCache$size, originWidth, originHeight, resizedImage, downSamplingRate, updateCache;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return this.getOrCreateImage(src, ref);\n case 2:\n imageCache = _context.sent;\n if (!(typeof imageCache.downSamplingRate !== 'undefined')) {\n _context.next = 5;\n break;\n }\n return _context.abrupt(\"return\", imageCache);\n case 5:\n enableLargeImageOptimization = this.context.config.enableLargeImageOptimization;\n _ref = typeof enableLargeImageOptimization === 'boolean' ? {} : enableLargeImageOptimization, _ref$maxDownSampledIm = _ref.maxDownSampledImageSize, maxDownSampledImageSize = _ref$maxDownSampledIm === void 0 ? 2048 : _ref$maxDownSampledIm, _ref$downSamplingRate = _ref.downSamplingRateThreshold, downSamplingRateThreshold = _ref$downSamplingRate === void 0 ? 0.5 : _ref$downSamplingRate;\n createImageBitmapFunc = this.runtime.globalThis.createImageBitmap;\n _imageCache$size = _slicedToArray(imageCache.size, 2), originWidth = _imageCache$size[0], originHeight = _imageCache$size[1];\n resizedImage = imageCache.img;\n downSamplingRate = Math.min((maxDownSampledImageSize + maxDownSampledImageSize) / (originWidth + originHeight), Math.max(0.01, Math.min(downSamplingRateThreshold, 0.5)));\n updateCache = _objectSpread(_objectSpread({}, imageCache), {}, {\n downSamplingRate: downSamplingRate\n });\n IMAGE_CACHE.update(imageCache.img.src, updateCache, ref);\n if (!createImageBitmapFunc) {\n _context.next = 25;\n break;\n }\n _context.prev = 14;\n _context.next = 17;\n return createImageBitmapFunc(imageCache.img, {\n resizeWidth: originWidth * downSamplingRate,\n resizeHeight: originHeight * downSamplingRate\n });\n case 17:\n resizedImage = _context.sent;\n _context.next = 23;\n break;\n case 20:\n _context.prev = 20;\n _context.t0 = _context[\"catch\"](14);\n downSamplingRate = 1;\n case 23:\n _context.next = 26;\n break;\n case 25:\n downSamplingRate = 1;\n case 26:\n updateCache = _objectSpread(_objectSpread({}, this.getImageSync(src, ref)), {}, {\n downSampled: resizedImage,\n downSamplingRate: downSamplingRate\n });\n IMAGE_CACHE.update(imageCache.img.src, updateCache, ref);\n return _context.abrupt(\"return\", updateCache);\n case 29:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this, [[14, 20]]);\n }));\n function createDownSampledImage(_x, _x2) {\n return _createDownSampledImage.apply(this, arguments);\n }\n return createDownSampledImage;\n }()\n }, {\n key: \"createImageTiles\",\n value: function () {\n var _createImageTiles = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(src, tiles, rerender, ref) {\n var imageCache, _ref$ownerDocument$de, requestAnimationFrame, cancelAnimationFrame, updateCache;\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return this.getOrCreateImage(src, ref);\n case 2:\n imageCache = _context2.sent;\n _ref$ownerDocument$de = ref.ownerDocument.defaultView, requestAnimationFrame = _ref$ownerDocument$de.requestAnimationFrame, cancelAnimationFrame = _ref$ownerDocument$de.cancelAnimationFrame;\n ImageSlicer.api = {\n requestAnimationFrame: requestAnimationFrame,\n cancelAnimationFrame: cancelAnimationFrame,\n createCanvas: function createCanvas() {\n return OffscreenCanvasCreator.createCanvas();\n }\n };\n updateCache = _objectSpread(_objectSpread({}, imageCache), ImageSlicer.sliceImage(imageCache.img, imageCache.tileSize[0], imageCache.tileSize[0], rerender));\n IMAGE_CACHE.update(imageCache.img.src, updateCache, ref);\n return _context2.abrupt(\"return\", updateCache);\n case 8:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function createImageTiles(_x3, _x4, _x5, _x6) {\n return _createImageTiles.apply(this, arguments);\n }\n return createImageTiles;\n }()\n }, {\n key: \"releaseImage\",\n value: function releaseImage(src, ref) {\n IMAGE_CACHE.release(isString(src) ? src : src.src, ref);\n }\n }, {\n key: \"releaseImageRef\",\n value: function releaseImageRef(ref) {\n IMAGE_CACHE.releaseRef(ref);\n }\n }, {\n key: \"getOrCreatePatternSync\",\n value: function getOrCreatePatternSync(object, pattern, context, $offscreenCanvas, dpr, min, callback) {\n var patternKey = this.generatePatternKey(pattern);\n if (patternKey && this.patternCache[patternKey]) {\n return this.patternCache[patternKey];\n }\n var image = pattern.image,\n repetition = pattern.repetition,\n transform = pattern.transform;\n var src;\n var needScaleWithDPR = false;\n // Image URL\n if (isString(image)) {\n var imageCache = this.getImageSync(image, object, callback);\n src = imageCache === null || imageCache === void 0 ? void 0 : imageCache.img;\n } else if ($offscreenCanvas) {\n src = $offscreenCanvas;\n needScaleWithDPR = true;\n } else {\n src = image;\n }\n\n // @see https://developer.mozilla.org/zh-CN/docs/Web/API/CanvasRenderingContext2D/createPattern\n var canvasPattern = src && context.createPattern(src, repetition);\n if (canvasPattern) {\n var mat;\n // @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasPattern/setTransform\n if (transform) {\n mat = parsedTransformToMat4(parseTransform(transform), new DisplayObject({}));\n } else {\n mat = mat4.identity(mat4.create());\n }\n if (needScaleWithDPR) {\n mat4.scale(mat, mat, [1 / dpr, 1 / dpr, 1]);\n }\n canvasPattern.setTransform({\n a: mat[0],\n b: mat[1],\n c: mat[4],\n d: mat[5],\n e: mat[12] + min[0],\n f: mat[13] + min[1]\n });\n }\n if (patternKey && canvasPattern) {\n this.patternCache[patternKey] = canvasPattern;\n }\n return canvasPattern;\n }\n }, {\n key: \"getOrCreateGradient\",\n value: function getOrCreateGradient(params, context) {\n var key = this.generateGradientKey(params);\n var type = params.type,\n steps = params.steps,\n min = params.min,\n width = params.width,\n height = params.height,\n angle = params.angle,\n cx = params.cx,\n cy = params.cy,\n size = params.size;\n if (this.gradientCache[key]) {\n return this.gradientCache[key];\n }\n var gradient = null;\n if (type === GradientType.LinearGradient) {\n var _computeLinearGradien = computeLinearGradient(min, width, height, angle),\n x1 = _computeLinearGradien.x1,\n y1 = _computeLinearGradien.y1,\n x2 = _computeLinearGradien.x2,\n y2 = _computeLinearGradien.y2;\n // @see https://developer.mozilla.org/zh-CN/docs/Web/API/CanvasRenderingContext2D/createLinearGradient\n gradient = context.createLinearGradient(x1, y1, x2, y2);\n } else if (type === GradientType.RadialGradient) {\n var _computeRadialGradien = computeRadialGradient(min, width, height, cx, cy, size),\n x = _computeRadialGradien.x,\n y = _computeRadialGradien.y,\n r = _computeRadialGradien.r;\n // @see https://developer.mozilla.org/zh-CN/docs/Web/API/CanvasRenderingContext2D/createRadialGradient\n gradient = context.createRadialGradient(x, y, 0, x, y, r);\n }\n if (gradient) {\n steps.forEach(function (_ref2) {\n var offset = _ref2.offset,\n color = _ref2.color;\n if (offset.unit === UnitType.kPercentage) {\n var _gradient;\n (_gradient = gradient) === null || _gradient === void 0 || _gradient.addColorStop(offset.value / 100, color.toString());\n }\n });\n this.gradientCache[key] = gradient;\n }\n return this.gradientCache[key];\n }\n }, {\n key: \"generateGradientKey\",\n value: function generateGradientKey(params) {\n var type = params.type,\n min = params.min,\n width = params.width,\n height = params.height,\n steps = params.steps,\n angle = params.angle,\n cx = params.cx,\n cy = params.cy,\n size = params.size;\n return \"gradient-\".concat(type, \"-\").concat((angle === null || angle === void 0 ? void 0 : angle.toString()) || 0, \"-\").concat((cx === null || cx === void 0 ? void 0 : cx.toString()) || 0, \"-\").concat((cy === null || cy === void 0 ? void 0 : cy.toString()) || 0, \"-\").concat((size === null || size === void 0 ? void 0 : size.toString()) || 0, \"-\").concat(min[0], \"-\").concat(min[1], \"-\").concat(width, \"-\").concat(height, \"-\").concat(steps.map(function (_ref3) {\n var offset = _ref3.offset,\n color = _ref3.color;\n return \"\".concat(offset).concat(color);\n }).join('-'));\n }\n }, {\n key: \"generatePatternKey\",\n value: function generatePatternKey(pattern) {\n var image = pattern.image,\n repetition = pattern.repetition;\n // only generate cache for Image\n if (isString(image)) {\n return \"pattern-\".concat(image, \"-\").concat(repetition);\n }\n if (image.nodeName === 'rect') {\n return \"pattern-\".concat(image.entity, \"-\").concat(repetition);\n }\n }\n }]);\n}();\nImagePool.isSupportTile = !!OffscreenCanvasCreator.createCanvas();\nfunction calculateImageTileSize(img) {\n if (!img.complete) {\n return [0, 0];\n }\n var width = img.naturalWidth || img.width,\n height = img.naturalHeight || img.height;\n var tileSize = 256;\n [256, 512].forEach(function (size) {\n var rows = Math.ceil(height / size);\n var cols = Math.ceil(width / size);\n if (rows * cols < 1e3) {\n tileSize = size;\n }\n });\n return [tileSize, tileSize];\n}\n\nvar LoadImagePlugin = /*#__PURE__*/function () {\n function LoadImagePlugin() {\n _classCallCheck(this, LoadImagePlugin);\n }\n return _createClass(LoadImagePlugin, [{\n key: \"apply\",\n value: function apply(context) {\n var renderingService = context.renderingService,\n renderingContext = context.renderingContext,\n imagePool = context.imagePool;\n var canvas = renderingContext.root.ownerDocument.defaultView;\n var calculateWithAspectRatio = function calculateWithAspectRatio(object, imageWidth, imageHeight) {\n var _object$parsedStyle = object.parsedStyle,\n width = _object$parsedStyle.width,\n height = _object$parsedStyle.height;\n if (width && !height) {\n object.setAttribute('height', imageHeight / imageWidth * width);\n } else if (!width && height) {\n object.setAttribute('width', imageWidth / imageHeight * height);\n }\n };\n var handleMounted = function handleMounted(e) {\n var object = e.target;\n var nodeName = object.nodeName,\n attributes = object.attributes;\n if (nodeName === Shape.IMAGE) {\n var src = attributes.src,\n keepAspectRatio = attributes.keepAspectRatio;\n imagePool.getImageSync(src, object, function (_ref) {\n var _ref$img = _ref.img,\n width = _ref$img.width,\n height = _ref$img.height;\n if (keepAspectRatio) {\n calculateWithAspectRatio(object, width, height);\n }\n\n // set dirty rectangle flag\n object.renderable.dirty = true;\n renderingService.dirtify();\n });\n }\n };\n var handleAttributeChanged = function handleAttributeChanged(e) {\n var object = e.target;\n var attrName = e.attrName,\n prevValue = e.prevValue,\n newValue = e.newValue;\n if (object.nodeName !== Shape.IMAGE || attrName !== 'src') {\n return;\n }\n if (prevValue !== newValue) {\n imagePool.releaseImage(prevValue, object);\n }\n if (isString(newValue)) {\n imagePool.getOrCreateImage(newValue, object).then(function (_ref2) {\n var _ref2$img = _ref2.img,\n width = _ref2$img.width,\n height = _ref2$img.height;\n if (object.attributes.keepAspectRatio) {\n calculateWithAspectRatio(object, width, height);\n }\n\n // set dirty rectangle flag\n object.renderable.dirty = true;\n renderingService.dirtify();\n })[\"catch\"](function () {\n //\n });\n }\n };\n renderingService.hooks.init.tap(LoadImagePlugin.tag, function () {\n canvas.addEventListener(ElementEvent.MOUNTED, handleMounted);\n canvas.addEventListener(ElementEvent.ATTR_MODIFIED, handleAttributeChanged);\n });\n renderingService.hooks.destroy.tap(LoadImagePlugin.tag, function () {\n canvas.removeEventListener(ElementEvent.MOUNTED, handleMounted);\n canvas.removeEventListener(ElementEvent.ATTR_MODIFIED, handleAttributeChanged);\n });\n }\n }]);\n}();\nLoadImagePlugin.tag = 'LoadImage';\n\nvar Plugin = /*#__PURE__*/function (_AbstractRendererPlug) {\n function Plugin() {\n var _this;\n _classCallCheck(this, Plugin);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _callSuper(this, Plugin, [].concat(args));\n _this.name = 'image-loader';\n return _this;\n }\n _inherits(Plugin, _AbstractRendererPlug);\n return _createClass(Plugin, [{\n key: \"init\",\n value: function init(runtime) {\n // @ts-ignore\n this.context.imagePool = new ImagePool(this.context, runtime);\n this.addRenderingPlugin(new LoadImagePlugin());\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.removeAllRenderingPlugins();\n }\n }]);\n}(AbstractRendererPlugin);\n\nexport { ImagePool, Plugin };\n//# sourceMappingURL=index.esm.js.map\n","/*!\n * @antv/g-canvas\n * @description A renderer implemented by Canvas 2D API\n * @version 2.0.44\n * @date 5/30/2025, 2:57:07 AM\n * @author AntVis\n * @docs https://g.antv.antgroup.com/\n */\nimport _createClass from '@babel/runtime/helpers/createClass';\nimport _classCallCheck from '@babel/runtime/helpers/classCallCheck';\nimport _callSuper from '@babel/runtime/helpers/callSuper';\nimport _inherits from '@babel/runtime/helpers/inherits';\nimport { setDOMSize, RenderReason, AbstractRendererPlugin, AbstractRenderer } from '@antv/g-lite';\nimport * as CanvasPathGenerator from '@antv/g-plugin-canvas-path-generator';\nexport { CanvasPathGenerator };\nimport * as CanvasPicker from '@antv/g-plugin-canvas-picker';\nexport { CanvasPicker };\nimport * as CanvasRenderer from '@antv/g-plugin-canvas-renderer';\nexport { CanvasRenderer };\nimport * as DomInteraction from '@antv/g-plugin-dom-interaction';\nexport { DomInteraction };\nimport * as HTMLRenderer from '@antv/g-plugin-html-renderer';\nexport { HTMLRenderer };\nimport * as ImageLoader from '@antv/g-plugin-image-loader';\nexport { ImageLoader };\nimport _regeneratorRuntime from '@babel/runtime/helpers/regeneratorRuntime';\nimport _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';\nimport { isString } from '@antv/util';\n\nvar Canvas2DContextService = /*#__PURE__*/function () {\n function Canvas2DContextService(context) {\n _classCallCheck(this, Canvas2DContextService);\n this.renderingContext = context.renderingContext;\n this.canvasConfig = context.config;\n }\n return _createClass(Canvas2DContextService, [{\n key: \"init\",\n value: function init() {\n var _this$canvasConfig = this.canvasConfig,\n container = _this$canvasConfig.container,\n canvas = _this$canvasConfig.canvas;\n if (canvas) {\n this.$canvas = canvas;\n if (container && canvas.parentElement !== container) {\n container.appendChild(canvas);\n }\n this.$container = canvas.parentElement;\n this.canvasConfig.container = this.$container;\n } else if (container) {\n // create container\n this.$container = isString(container) ? document.getElementById(container) : container;\n if (this.$container) {\n // create canvas\n var $canvas = document.createElement('canvas');\n this.$container.appendChild($canvas);\n if (!this.$container.style.position) {\n this.$container.style.position = 'relative';\n }\n this.$canvas = $canvas;\n }\n }\n this.context = this.$canvas.getContext('2d');\n this.resize(this.canvasConfig.width, this.canvasConfig.height);\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.context;\n }\n }, {\n key: \"getDomElement\",\n value: function getDomElement() {\n return this.$canvas;\n }\n }, {\n key: \"getDPR\",\n value: function getDPR() {\n return this.dpr;\n }\n }, {\n key: \"getBoundingClientRect\",\n value: function getBoundingClientRect() {\n if (this.$canvas.getBoundingClientRect) {\n return this.$canvas.getBoundingClientRect();\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n // @ts-ignore\n if (this.$container && this.$canvas && this.$canvas.parentNode) {\n // destroy context\n // @ts-ignore\n this.$container.removeChild(this.$canvas);\n }\n }\n }, {\n key: \"resize\",\n value: function resize(width, height) {\n var dpr = this.canvasConfig.devicePixelRatio;\n this.dpr = dpr;\n if (this.$canvas) {\n // set canvas width & height\n this.$canvas.width = this.dpr * width;\n this.$canvas.height = this.dpr * height;\n\n // set CSS style width & height\n setDOMSize(this.$canvas, width, height);\n\n // const dpr = this.getDPR();\n // scale all drawing operations by the dpr\n // @see https://www.html5rocks.com/en/tutorials/canvas/hidpi/\n // this.context.scale(dpr, dpr);\n }\n this.renderingContext.renderReasons.add(RenderReason.CAMERA_CHANGED);\n }\n }, {\n key: \"applyCursorStyle\",\n value: function applyCursorStyle(cursor) {\n if (this.$container && this.$container.style) {\n this.$container.style.cursor = cursor;\n }\n }\n }, {\n key: \"toDataURL\",\n value: function () {\n var _toDataURL = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n var options,\n type,\n encoderOptions,\n _args = arguments;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n options = _args.length > 0 && _args[0] !== undefined ? _args[0] : {};\n type = options.type, encoderOptions = options.encoderOptions;\n return _context.abrupt(\"return\", this.context.canvas.toDataURL(type, encoderOptions));\n case 3:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function toDataURL() {\n return _toDataURL.apply(this, arguments);\n }\n return toDataURL;\n }()\n }]);\n}();\n\nvar ContextRegisterPlugin = /*#__PURE__*/function (_AbstractRendererPlug) {\n function ContextRegisterPlugin() {\n var _this;\n _classCallCheck(this, ContextRegisterPlugin);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _callSuper(this, ContextRegisterPlugin, [].concat(args));\n _this.name = 'canvas-context-register';\n return _this;\n }\n _inherits(ContextRegisterPlugin, _AbstractRendererPlug);\n return _createClass(ContextRegisterPlugin, [{\n key: \"init\",\n value: function init() {\n this.context.ContextService = Canvas2DContextService;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n delete this.context.ContextService;\n }\n }]);\n}(AbstractRendererPlugin);\n\nvar Renderer = /*#__PURE__*/function (_AbstractRenderer) {\n function Renderer(config) {\n var _this;\n _classCallCheck(this, Renderer);\n _this = _callSuper(this, Renderer, [config]);\n\n // register Canvas2DContext\n _this.registerPlugin(new ContextRegisterPlugin());\n _this.registerPlugin(new ImageLoader.Plugin());\n _this.registerPlugin(new CanvasPathGenerator.Plugin());\n // enable rendering with Canvas2D API\n _this.registerPlugin(new CanvasRenderer.Plugin());\n _this.registerPlugin(new DomInteraction.Plugin());\n // enable picking with Canvas2D API\n _this.registerPlugin(new CanvasPicker.Plugin());\n\n // render HTML component\n _this.registerPlugin(new HTMLRenderer.Plugin());\n return _this;\n }\n _inherits(Renderer, _AbstractRenderer);\n return _createClass(Renderer);\n}(AbstractRenderer);\n\nexport { Renderer };\n//# sourceMappingURL=index.esm.js.map\n","const e={abs:Math.abs,ceil:Math.ceil,floor:Math.floor,max:Math.max,min:Math.min,round:Math.round,sqrt:Math.sqrt,pow:Math.pow};function t(t,n){e[t]=n}class n extends Error{constructor(e,t,n){super(e),this.position=t,this.token=n,this.name=\"ExpressionError\"}}var r;!function(e){e[e.STRING=0]=\"STRING\",e[e.NUMBER=1]=\"NUMBER\",e[e.BOOLEAN=2]=\"BOOLEAN\",e[e.NULL=3]=\"NULL\",e[e.IDENTIFIER=4]=\"IDENTIFIER\",e[e.OPERATOR=5]=\"OPERATOR\",e[e.FUNCTION=6]=\"FUNCTION\",e[e.DOT=7]=\"DOT\",e[e.BRACKET_LEFT=8]=\"BRACKET_LEFT\",e[e.BRACKET_RIGHT=9]=\"BRACKET_RIGHT\",e[e.PAREN_LEFT=10]=\"PAREN_LEFT\",e[e.PAREN_RIGHT=11]=\"PAREN_RIGHT\",e[e.COMMA=12]=\"COMMA\",e[e.QUESTION=13]=\"QUESTION\",e[e.COLON=14]=\"COLON\",e[e.DOLLAR=15]=\"DOLLAR\"}(r||(r={}));const o=new Set([32,9,10,13]),a=new Set([43,45,42,47,37,33,38,124,61,60,62]),s=new Map([[\"true\",r.BOOLEAN],[\"false\",r.BOOLEAN],[\"null\",r.NULL]]),i=new Map([[\"===\",!0],[\"!==\",!0],[\"<=\",!0],[\">=\",!0],[\"&&\",!0],[\"||\",!0],[\"+\",!0],[\"-\",!0],[\"*\",!0],[\"/\",!0],[\"%\",!0],[\"!\",!0],[\"<\",!0],[\">\",!0]]),u=new Map([[46,r.DOT],[91,r.BRACKET_LEFT],[93,r.BRACKET_RIGHT],[40,r.PAREN_LEFT],[41,r.PAREN_RIGHT],[44,r.COMMA],[63,r.QUESTION],[58,r.COLON],[36,r.DOLLAR]]),c=new Map;for(const[e,t]of u.entries())c.set(e,{type:t,value:String.fromCharCode(e)});function p(e){return e>=48&&e<=57}function l(e){return e>=97&&e<=122||e>=65&&e<=90||95===e}function f(e){return l(e)||p(e)}function E(e){return a.has(e)}var h;!function(e){e[e.Program=0]=\"Program\",e[e.Literal=1]=\"Literal\",e[e.Identifier=2]=\"Identifier\",e[e.MemberExpression=3]=\"MemberExpression\",e[e.CallExpression=4]=\"CallExpression\",e[e.BinaryExpression=5]=\"BinaryExpression\",e[e.UnaryExpression=6]=\"UnaryExpression\",e[e.ConditionalExpression=7]=\"ConditionalExpression\"}(h||(h={}));const d=new Map([[\"||\",2],[\"&&\",3],[\"===\",4],[\"!==\",4],[\">\",5],[\">=\",5],[\"<\",5],[\"<=\",5],[\"+\",6],[\"-\",6],[\"*\",7],[\"/\",7],[\"%\",7],[\"!\",8]]),R={type:h.Literal,value:null},T={type:h.Literal,value:!0},w={type:h.Literal,value:!1},y=e=>{let t=0;const o=e.length,a=()=>t>=o?null:e[t],s=()=>e[t++],i=e=>{const t=a();return null!==t&&t.type===e},u=e=>e.type===r.OPERATOR?d.get(e.value)||-1:e.type===r.DOT||e.type===r.BRACKET_LEFT?9:e.type===r.QUESTION?1:-1,c=e=>{let o,u;if(s().type===r.DOT){if(!i(r.IDENTIFIER)){const e=a();throw new n(\"Expected property name\",t,e?e.value:\"\")}const e=s();o={type:h.Identifier,name:e.value},u=!1}else{if(o=l(0),!i(r.BRACKET_RIGHT)){const e=a();throw new n(\"Expected closing bracket\",t,e?e.value:\"\")}s(),u=!0}return{type:h.MemberExpression,object:e,property:o,computed:u}},p=()=>{const e=a();if(!e)throw new n(\"Unexpected end of input\",t,\"\");if(e.type===r.OPERATOR&&(\"!\"===e.value||\"-\"===e.value)){s();const t=p();return{type:h.UnaryExpression,operator:e.value,argument:t,prefix:!0}}switch(e.type){case r.NUMBER:return s(),{type:h.Literal,value:Number(e.value)};case r.STRING:return s(),{type:h.Literal,value:e.value};case r.BOOLEAN:return s(),\"true\"===e.value?T:w;case r.NULL:return s(),R;case r.IDENTIFIER:return s(),{type:h.Identifier,name:e.value};case r.FUNCTION:return(()=>{const e=s(),o=[];if(!i(r.PAREN_LEFT)){const e=a();throw new n(\"Expected opening parenthesis after function name\",t,e?e.value:\"\")}for(s();;){if(i(r.PAREN_RIGHT)){s();break}if(!a()){const e=a();throw new n(\"Expected closing parenthesis\",t,e?e.value:\"\")}if(o.length>0){if(!i(r.COMMA)){const e=a();throw new n(\"Expected comma between function arguments\",t,e?e.value:\"\")}s()}const e=l(0);o.push(e)}return{type:h.CallExpression,callee:{type:h.Identifier,name:e.value},arguments:o}})();case r.PAREN_LEFT:{s();const e=l(0);if(!i(r.PAREN_RIGHT)){const e=a();throw new n(\"Expected closing parenthesis\",t,e?e.value:\"\")}return s(),e}default:throw new n(`Unexpected token: ${e.type}`,t,e.value)}},l=(f=0)=>{let E=p();for(;t\")}s();const o=l(0);E={type:h.ConditionalExpression,test:E,consequent:e,alternate:o}}}return E},f=l();return{type:h.Program,body:f}},O=(e,t,r)=>{let o=t;r&&(o={...t,context:{...t.context,...r}});const a=e=>{switch(e.type){case h.Literal:return(e=>e.value)(e);case h.Identifier:return(e=>{if(!(e.name in o.context))throw new n(`Undefined variable: ${e.name}`);return o.context[e.name]})(e);case h.MemberExpression:return(e=>{const t=a(e.object);if(null==t)throw new n(\"Cannot access property of null or undefined\");return t[e.computed?a(e.property):e.property.name]})(e);case h.CallExpression:return(e=>{const t=o.functions[e.callee.name];if(!t)throw new n(`Undefined function: ${e.callee.name}`);return t(...e.arguments.map((e=>a(e))))})(e);case h.BinaryExpression:return(e=>{if(\"&&\"===e.operator){const t=a(e.left);return t?a(e.right):t}if(\"||\"===e.operator){return a(e.left)||a(e.right)}const t=a(e.left),r=a(e.right);switch(e.operator){case\"+\":return t+r;case\"-\":return t-r;case\"*\":return t*r;case\"/\":return t/r;case\"%\":return t%r;case\"===\":return t===r;case\"!==\":return t!==r;case\">\":return t>r;case\">=\":return t>=r;case\"<\":return t{const t=a(e.argument);if(e.prefix)switch(e.operator){case\"!\":return!t;case\"-\":if(\"number\"!=typeof t)throw new n(`Cannot apply unary - to non-number: ${t}`);return-t;default:throw new n(`Unknown operator: ${e.operator}`)}throw new n(`Postfix operators are not supported: ${e.operator}`)})(e);case h.ConditionalExpression:return(e=>{const t=a(e.test);return a(t?e.consequent:e.alternate)})(e);default:throw new n(`Evaluation error: Unsupported node type: ${e.type}`)}};return a(e.body)};function A(t){const a=(e=>{const t=e,a=t.length,u=new Array(Math.ceil(a/3));let h=0,d=0;function R(e){const o=d+1;d++;let s=\"\",i=!1;for(;d({context:e,functions:t}))({},e);return(e={})=>O(u,h,e)}function N(e,t={}){return A(e)(t)}export{n as ExpressionError,A as compile,N as evaluate,t as register};\n","import { isNumber } from '@antv/util';\nimport { compose } from './compose';\nconst createInterpolatorRound = (interpolator) => {\n return (t) => {\n // If result is not number, it can't be rounded.\n const res = interpolator(t);\n return isNumber(res) ? Math.round(res) : res;\n };\n};\nexport function interpolatize(rangeOf, normalizeDomain) {\n return (Scale) => {\n Scale.prototype.rescale = function () {\n this.initRange();\n this.nice();\n const [transform] = this.chooseTransforms();\n this.composeOutput(transform, this.chooseClamp(transform));\n };\n Scale.prototype.initRange = function () {\n const { interpolator } = this.options;\n this.options.range = rangeOf(interpolator);\n };\n Scale.prototype.composeOutput = function (transform, clamp) {\n const { domain, interpolator, round } = this.getOptions();\n const normalize = normalizeDomain(domain.map(transform));\n const interpolate = round ? createInterpolatorRound(interpolator) : interpolator;\n this.output = compose(interpolate, normalize, clamp, transform);\n };\n Scale.prototype.invert = undefined;\n };\n}\n//# sourceMappingURL=interpolatize.js.map","export function extend(Runtime, library) {\n class Chart extends Runtime {\n constructor(options) {\n super(Object.assign(Object.assign({}, options), { lib: library }));\n }\n }\n return Chart;\n}\n//# sourceMappingURL=extend.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Text as GText } from '@antv/g';\nvar Text = /** @class */ (function (_super) {\n __extends(Text, _super);\n function Text(_a) {\n if (_a === void 0) { _a = {}; }\n var style = _a.style, restOptions = __rest(_a, [\"style\"]);\n return _super.call(this, __assign({ style: __assign({ text: '', fontSize: 12, textBaseline: 'middle', textAlign: 'center', fill: '#000', fontStyle: 'normal', fontVariant: 'normal', fontWeight: 'normal', lineWidth: 1 }, style) }, restOptions)) || this;\n }\n return Text;\n}(GText));\nexport { Text };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Polygon as GPolygon } from '@antv/g';\nvar Polygon = /** @class */ (function (_super) {\n __extends(Polygon, _super);\n function Polygon(_a) {\n if (_a === void 0) { _a = {}; }\n var style = _a.style, restOptions = __rest(_a, [\"style\"]);\n return _super.call(this, __assign({ style: __assign({ fill: '#eee' }, style) }, restOptions)) || this;\n }\n return Polygon;\n}(GPolygon));\nexport { Polygon };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { CustomElement } from '@antv/g';\nimport { mergeWithArrayCoverage } from '../utils';\nvar Annotaion = /** @class */ (function (_super) {\n __extends(Annotaion, _super);\n function Annotaion(chart, config, defaultOptions) {\n var _this = _super.call(this, { style: mergeWithArrayCoverage(defaultOptions, config) }) || this;\n _this.chart = chart;\n return _this;\n }\n Annotaion.prototype.connectedCallback = function () {\n this.render(this.attributes, this);\n this.bindEvents(this.attributes, this);\n };\n Annotaion.prototype.disconnectedCallback = function () { };\n Annotaion.prototype.attributeChangedCallback = function (name) { };\n Annotaion.prototype.update = function (attr, animate) {\n var _a;\n this.attr(mergeWithArrayCoverage({}, this.attributes, attr || {}));\n return (_a = this.render) === null || _a === void 0 ? void 0 : _a.call(this, this.attributes, this, animate);\n };\n Annotaion.prototype.clear = function () {\n this.removeChildren();\n };\n Annotaion.prototype.getElementsLayout = function () {\n var canvas = this.chart.getContext().canvas;\n var elements = canvas.document.getElementsByClassName('element');\n var elementsLayout = [];\n elements.forEach(function (element) {\n //@ts-expect-error\n var bbox = element.getBBox();\n var x = bbox.x, y = bbox.y, width = bbox.width, height = bbox.height;\n var data = element['__data__'];\n elementsLayout.push({\n bbox: bbox,\n x: x,\n y: y,\n width: width,\n height: height,\n key: data.key,\n data: data,\n });\n });\n return elementsLayout;\n };\n Annotaion.prototype.bindEvents = function (attributes, container) { };\n return Annotaion;\n}(CustomElement));\nexport { Annotaion };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { get, isFunction } from '../utils';\nimport { Text, Polygon } from './shapes';\nimport { Annotaion } from './core';\nvar ConversionTag = /** @class */ (function (_super) {\n __extends(ConversionTag, _super);\n function ConversionTag(chart, options) {\n return _super.call(this, chart, options, { type: ConversionTag.tag }) || this;\n }\n ConversionTag.prototype.getConversionTagLayout = function () {\n var isVertical = this.direction === 'vertical';\n var elementsLayout = this.getElementsLayout();\n var _a = elementsLayout[0], firstX = _a.x, firstY = _a.y, firstHeigt = _a.height, firstWidth = _a.width, firstData = _a.data;\n var valuePath = ['items', 0, 'value'];\n var preValue = get(firstData, valuePath);\n var elementDistance = isVertical\n ? elementsLayout[1].y - firstY - firstHeigt\n : elementsLayout[1].x - firstX - firstWidth;\n var tagLayout = [];\n var _b = this.attributes, _c = _b.size, size = _c === void 0 ? 40 : _c, _d = _b.arrowSize, arrowSize = _d === void 0 ? 20 : _d, _e = _b.spacing, spacing = _e === void 0 ? 4 : _e;\n elementsLayout.forEach(function (element, index) {\n if (index > 0) {\n var x = element.x, y = element.y, height = element.height, width = element.width, data = element.data, key = element.key;\n var currentValue = get(data, valuePath);\n var halfSize = size / 2;\n if (isVertical) {\n var arrowVertexX = x + width / 2;\n var arrowVertexY = y;\n tagLayout.push({\n points: [\n [arrowVertexX + halfSize, arrowVertexY - elementDistance + spacing],\n [arrowVertexX + halfSize, arrowVertexY - arrowSize - spacing],\n [arrowVertexX, arrowVertexY - spacing],\n [arrowVertexX - halfSize, arrowVertexY - arrowSize - spacing],\n [arrowVertexX - halfSize, arrowVertexY - elementDistance + spacing],\n ],\n center: [arrowVertexX, arrowVertexY - elementDistance / 2 - spacing],\n width: elementDistance,\n value: [preValue, currentValue],\n key: key,\n });\n }\n else {\n var arrowVertexX = x;\n var arrowVertexY = y + height / 2;\n tagLayout.push({\n points: [\n [x - elementDistance + spacing, arrowVertexY - halfSize],\n [x - arrowSize - spacing, arrowVertexY - halfSize],\n [arrowVertexX - spacing, arrowVertexY],\n [x - arrowSize - spacing, arrowVertexY + halfSize],\n [x - elementDistance + spacing, arrowVertexY + halfSize],\n ],\n center: [arrowVertexX - elementDistance / 2 - spacing, arrowVertexY],\n width: elementDistance,\n value: [preValue, currentValue],\n key: key,\n });\n }\n preValue = currentValue;\n }\n });\n return tagLayout;\n };\n ConversionTag.prototype.render = function () {\n this.setDirection();\n this.drawConversionTag();\n };\n /** 根据 coordinate 确定方向 */\n ConversionTag.prototype.setDirection = function () {\n var coordinate = this.chart.getCoordinate();\n var transformations = get(coordinate, 'options.transformations');\n var direction = 'horizontal';\n transformations.forEach(function (transformation) {\n if (transformation.includes('transpose')) {\n direction = 'vertical';\n }\n });\n this.direction = direction;\n };\n ConversionTag.prototype.drawConversionTag = function () {\n var _this = this;\n var conversionLayout = this.getConversionTagLayout();\n var _a = this.attributes, style = _a.style, _b = _a.text, textStyle = _b.style, formatter = _b.formatter;\n conversionLayout.forEach(function (layout) {\n var points = layout.points, center = layout.center, value = layout.value, key = layout.key;\n var prev = value[0], next = value[1];\n var x = center[0], y = center[1];\n var polygon = new Polygon({\n style: __assign({ points: points, fill: '#eee' }, style),\n id: \"polygon-\".concat(key),\n });\n var text = new Text({\n style: __assign({ x: x, y: y, text: isFunction(formatter) ? formatter(prev, next) : ((next / prev) * 100).toFixed(2) + '%' }, textStyle),\n id: \"text-\".concat(key),\n });\n _this.appendChild(polygon);\n _this.appendChild(text);\n });\n };\n /** 仅仅更新位置即可 */\n ConversionTag.prototype.update = function () {\n var _this = this;\n var conversionLayout = this.getConversionTagLayout();\n conversionLayout.forEach(function (layout) {\n var points = layout.points, center = layout.center, key = layout.key;\n var x = center[0], y = center[1];\n var polygon = _this.getElementById(\"polygon-\".concat(key));\n var text = _this.getElementById(\"text-\".concat(key));\n polygon.setAttribute('points', points);\n text.setAttribute('x', x);\n text.setAttribute('y', y);\n });\n };\n ConversionTag.tag = 'ConversionTag';\n return ConversionTag;\n}(Annotaion));\nexport { ConversionTag };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { get, isFunction, uniqBy, groupBy } from '../utils';\nimport { Annotaion } from './core';\nimport { Text } from './shapes';\nimport { VERTICAL_MARGIN } from '../plots/bidirectional-bar/constants';\nvar BidirectionalBarAxisText = /** @class */ (function (_super) {\n __extends(BidirectionalBarAxisText, _super);\n function BidirectionalBarAxisText(chart, options) {\n return _super.call(this, chart, options, { type: BidirectionalBarAxisText.tag }) || this;\n }\n BidirectionalBarAxisText.prototype.render = function () {\n this.drawText();\n };\n BidirectionalBarAxisText.prototype.getBidirectionalBarAxisTextLayout = function () {\n var layout = this.attributes.layout;\n var isVertical = layout === 'vertical';\n var allElementsLayout = this.getElementsLayout();\n var elementsLayout = isVertical ? uniqBy(allElementsLayout, 'x') : uniqBy(allElementsLayout, 'y');\n var textPath = ['title'];\n var textLayout = [];\n var views = this.chart.getContext().views;\n var _a = get(views, [0, 'layout']), viewWidth = _a.width, viewHeight = _a.height;\n elementsLayout.forEach(function (element) {\n var x = element.x, y = element.y, height = element.height, width = element.width, data = element.data, key = element.key;\n var text = get(data, textPath);\n if (isVertical) {\n textLayout.push({\n x: x + width / 2,\n y: viewHeight,\n text: text,\n key: key,\n });\n }\n else {\n textLayout.push({\n x: viewWidth,\n y: y + height / 2,\n text: text,\n key: key,\n });\n }\n });\n /** 分组情况需要特殊处理 */\n if (uniqBy(textLayout, 'text').length !== textLayout.length) {\n textLayout = Object.values(groupBy(textLayout, 'text')).map(function (items) {\n var _a;\n var sum = items.reduce(function (pre, cur) {\n return pre + (isVertical ? cur.x : cur.y);\n }, 0);\n return __assign(__assign({}, items[0]), (_a = {}, _a[isVertical ? 'x' : 'y'] = sum / items.length, _a));\n });\n }\n return textLayout;\n };\n BidirectionalBarAxisText.prototype.transformLabelStyle = function (style) {\n var removeLabel = {};\n var reg = /^label[A-Z]/;\n Object.keys(style).forEach(function (key) {\n if (reg.test(key)) {\n removeLabel[key.replace('label', '').replace(/^[A-Z]/, function (match) { return match.toLowerCase(); })] = style[key];\n }\n });\n return removeLabel;\n };\n BidirectionalBarAxisText.prototype.drawText = function () {\n var _this = this;\n var axisLayout = this.getBidirectionalBarAxisTextLayout();\n var _a = this.attributes, viewLayout = _a.layout, labelFormatter = _a.labelFormatter, textStyle = __rest(_a, [\"layout\", \"labelFormatter\"]);\n axisLayout.forEach(function (layout) {\n var x = layout.x, y = layout.y, text = layout.text, key = layout.key;\n var textNode = new Text({\n style: __assign({ x: x, y: y, text: isFunction(labelFormatter) ? labelFormatter(text) : text, wordWrap: true, wordWrapWidth: viewLayout === 'horizontal' ? VERTICAL_MARGIN * 2 : 120, maxLines: 2, textOverflow: 'ellipsis' }, _this.transformLabelStyle(textStyle)),\n id: \"text-\".concat(key),\n });\n _this.appendChild(textNode);\n });\n };\n BidirectionalBarAxisText.prototype.destroy = function () {\n this.clear();\n };\n /** 仅仅更新位置即可 */\n BidirectionalBarAxisText.prototype.update = function () {\n this.destroy();\n this.drawText();\n };\n BidirectionalBarAxisText.tag = 'BidirectionalBarAxisText';\n return BidirectionalBarAxisText;\n}(Annotaion));\nexport { BidirectionalBarAxisText };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport EE from '@antv/event-emitter';\nimport { ChartEvent } from '@antv/g2';\nimport { Chart } from './chart';\nimport { Controller as Annotaion } from '../annotation';\nimport { CHART_OPTIONS, SKIP_DEL_CUSTOM_SIGN } from '../constants';\nimport { mergeWithArrayCoverage, pick } from '../utils';\nvar SOURCE_ATTRIBUTE_NAME = 'data-chart-source-type';\nvar Plot = /** @class */ (function (_super) {\n __extends(Plot, _super);\n function Plot(container, options) {\n var _this = _super.call(this) || this;\n _this.container = typeof container === 'string' ? document.getElementById(container) : container;\n _this.options = _this.mergeOption(options);\n _this.createG2();\n _this.bindEvents();\n return _this;\n }\n /**\n * new Chart 所需配置\n */\n Plot.prototype.getChartOptions = function () {\n return __assign(__assign({}, pick(this.options, CHART_OPTIONS)), { container: this.container });\n };\n /**\n * G2 options(Spec) 配置\n */\n Plot.prototype.getSpecOptions = function () {\n if (this.type === 'base' || this[SKIP_DEL_CUSTOM_SIGN]) {\n return __assign(__assign({}, this.options), this.getChartOptions());\n }\n return this.options;\n };\n /**\n * 创建 G2 实例\n */\n Plot.prototype.createG2 = function () {\n if (!this.container) {\n throw Error('The container is not initialized!');\n }\n this.chart = new Chart(this.getChartOptions());\n // 给容器增加标识,知道图表的来源区别于 G2\n this.container.setAttribute(SOURCE_ATTRIBUTE_NAME, 'Ant Design Charts');\n };\n /**\n * 绑定代理所有 G2 的事件\n */\n Plot.prototype.bindEvents = function () {\n var _this = this;\n if (this.chart) {\n this.chart.on('*', function (e) {\n if (e === null || e === void 0 ? void 0 : e.type) {\n _this.emit(e.type, e);\n }\n });\n }\n };\n Plot.prototype.getBaseOptions = function () {\n return { type: 'view', autoFit: true };\n };\n /**\n * 获取默认的 options 配置项,每个组件都可以复写\n */\n Plot.prototype.getDefaultOptions = function () { };\n /**\n * 绘制\n */\n Plot.prototype.render = function () {\n var _this = this;\n // 执行 adaptor , base 穿透类型不必 adaptor.\n if (this.type !== 'base') {\n this.execAdaptor();\n }\n // options 转换\n this.chart.options(this.getSpecOptions());\n // 渲染\n this.chart.render().then(function () {\n _this.annotation = new Annotaion(_this.chart, _this.options);\n });\n // 绑定\n this.bindSizeSensor();\n };\n /**\n * 更新\n * @param options\n */\n Plot.prototype.update = function (options) {\n this.options = this.mergeOption(options);\n };\n Plot.prototype.mergeOption = function (options) {\n return mergeWithArrayCoverage({}, this.getBaseOptions(), this.getDefaultOptions(), options);\n };\n /**\n * 更新数据\n * @override\n * @param options\n */\n Plot.prototype.changeData = function (data) {\n this.chart.changeData(data);\n };\n /**\n * 修改画布大小\n * @param width\n * @param height\n */\n Plot.prototype.changeSize = function (width, height) {\n this.chart.changeSize(width, height);\n };\n /**\n * 销毁\n */\n Plot.prototype.destroy = function () {\n // G2 的销毁\n this.chart.destroy();\n // 清空已经绑定的事件\n this.off();\n this.container.removeAttribute(SOURCE_ATTRIBUTE_NAME);\n };\n /**\n * 执行 adaptor 操作\n */\n Plot.prototype.execAdaptor = function () {\n var adaptor = this.getSchemaAdaptor();\n // 转化成 G2 Spec\n adaptor({\n chart: this.chart,\n options: this.options,\n });\n };\n /**\n * 当图表容器大小变化的时候,执行的函数\n */\n Plot.prototype.triggerResize = function () {\n this.chart.forceFit();\n };\n /**\n * 绑定 dom 容器大小变化的事件\n */\n Plot.prototype.bindSizeSensor = function () {\n var _this = this;\n var _a = this.options.autoFit, autoFit = _a === void 0 ? true : _a;\n if (autoFit) {\n this.chart.on(ChartEvent.AFTER_CHANGE_SIZE, function () {\n _this.annotation.update();\n });\n }\n };\n return Plot;\n}(EE));\nexport { Plot };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nvar Base = /** @class */ (function (_super) {\n __extends(Base, _super);\n function Base() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'base';\n return _this;\n }\n /**\n * 获取 万能图 默认配置项\n * 供外部使用\n */\n Base.getDefaultOptions = function () {\n return {\n type: 'view',\n children: [{ type: 'line' }],\n };\n };\n /**\n * 获取 万能图 默认配置\n */\n Base.prototype.getDefaultOptions = function () {\n return Base.getDefaultOptions();\n };\n /**\n * 万能图适配器\n */\n Base.prototype.getSchemaAdaptor = function () {\n return function (params) { return params; };\n };\n return Base;\n}(Plot));\nexport { Base };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar Area = /** @class */ (function (_super) {\n __extends(Area, _super);\n function Area() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'area';\n return _this;\n }\n /**\n * 获取 面积图 默认配置项\n * 供外部使用\n */\n Area.getDefaultOptions = function () {\n return {\n type: 'view',\n children: [{ type: 'area' }],\n scale: {\n y: { nice: true },\n },\n axis: {\n y: { title: false },\n x: { title: false },\n },\n interaction: {\n tooltip: {\n shared: true,\n },\n },\n };\n };\n /**\n * 获取 面积图 默认配置\n */\n Area.prototype.getDefaultOptions = function () {\n return Area.getDefaultOptions();\n };\n /**\n * 面积图适配器\n */\n Area.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Area;\n}(Plot));\nexport { Area };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nimport { reisterShape } from './shape';\nreisterShape();\nvar Bar = /** @class */ (function (_super) {\n __extends(Bar, _super);\n function Bar() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'Bar';\n return _this;\n }\n /**\n * 获取 条形图 默认配置项\n * 供外部使用\n */\n Bar.getDefaultOptions = function () {\n return {\n type: 'view',\n coordinate: { transform: [{ type: 'transpose' }] },\n children: [{ type: 'interval' }],\n scale: {\n y: { nice: true },\n },\n axis: {\n y: { title: false },\n x: { title: false },\n },\n interaction: {\n tooltip: {\n shared: true,\n },\n elementHighlight: {\n background: true,\n },\n },\n };\n };\n /**\n * 获取 条形图 默认配置\n */\n Bar.prototype.getDefaultOptions = function () {\n return Bar.getDefaultOptions();\n };\n /**\n * 条形图适配器\n */\n Bar.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Bar;\n}(Plot));\nexport { Bar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from '../bar/adaptor';\nimport { reisterShape } from './shape';\nreisterShape();\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'column';\n return _this;\n }\n Column.getDefaultOptions = function () {\n return {\n type: 'view',\n scale: {\n y: { nice: true },\n },\n interaction: {\n tooltip: {\n shared: true,\n },\n elementHighlight: {\n background: true,\n },\n },\n axis: {\n y: { title: false },\n x: { title: false },\n },\n children: [\n {\n type: 'interval',\n },\n ],\n };\n };\n Column.prototype.getDefaultOptions = function () {\n return Column.getDefaultOptions();\n };\n Column.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Column;\n}(Plot));\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar DualAxes = /** @class */ (function (_super) {\n __extends(DualAxes, _super);\n function DualAxes() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'DualAxes';\n return _this;\n }\n /**\n * 获取 双轴图 默认配置项\n * 供外部使用\n */\n DualAxes.getDefaultOptions = function () {\n return {\n type: 'view',\n axis: {\n y: { title: false, tick: false },\n x: { title: false },\n },\n scale: {\n y: {\n independent: true,\n nice: true,\n },\n },\n };\n };\n /**\n * 获取 条形图 默认配置\n */\n DualAxes.prototype.getDefaultOptions = function () {\n return DualAxes.getDefaultOptions();\n };\n /**\n * 条形图适配器\n */\n DualAxes.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return DualAxes;\n}(Plot));\nexport { DualAxes };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar Funnel = /** @class */ (function (_super) {\n __extends(Funnel, _super);\n function Funnel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'column';\n return _this;\n }\n /**\n * 获取 漏斗图 默认配置项\n * 供外部使用\n */\n Funnel.getDefaultOptions = function () {\n return {\n type: 'view',\n scale: { x: { padding: 0 } },\n animate: { enter: { type: 'fadeIn' } },\n axis: false,\n shapeField: 'funnel',\n label: {\n position: 'inside',\n transform: [{ type: 'contrastReverse' }],\n },\n children: [\n {\n type: 'interval',\n },\n ],\n };\n };\n /**\n * 获取 漏斗图 默认配置\n */\n Funnel.prototype.getDefaultOptions = function () {\n return Funnel.getDefaultOptions();\n };\n /**\n * 漏斗图适配器\n */\n Funnel.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Funnel;\n}(Plot));\nexport { Funnel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar Line = /** @class */ (function (_super) {\n __extends(Line, _super);\n function Line() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'line';\n return _this;\n }\n /**\n * 获取 折线图 默认配置项\n * 供外部使用\n */\n Line.getDefaultOptions = function () {\n return {\n type: 'view',\n scale: {\n y: { nice: true },\n },\n interaction: {\n tooltip: {\n shared: true,\n },\n },\n axis: {\n y: { title: false },\n x: { title: false },\n },\n // 使用该动画,会导致线形图-连接空值 一进入页面渲染不出来,必须要更改窗口尺寸触发重新渲染。建议动画暂时使用默认\n // animate: {\n // enter: { type: 'growInX' },\n // },\n children: [{ type: 'line' }],\n };\n };\n /**\n * 获取 折线图 默认配置\n */\n Line.prototype.getDefaultOptions = function () {\n return Line.getDefaultOptions();\n };\n /**\n * 折线图适配器\n */\n Line.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Line;\n}(Plot));\nexport { Line };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar Pie = /** @class */ (function (_super) {\n __extends(Pie, _super);\n function Pie() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'pie';\n return _this;\n }\n /**\n * 获取 饼图 默认配置项\n * 供外部使用\n */\n Pie.getDefaultOptions = function () {\n return {\n type: 'view',\n children: [{ type: 'interval' }],\n coordinate: { type: 'theta' },\n transform: [{ type: 'stackY', reverse: true }],\n animate: { enter: { type: 'waveIn' } },\n };\n };\n /**\n * 获取 折线图 默认配置\n */\n Pie.prototype.getDefaultOptions = function () {\n return Pie.getDefaultOptions();\n };\n /**\n * 折线图适配器\n */\n Pie.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Pie;\n}(Plot));\nexport { Pie };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar Scatter = /** @class */ (function (_super) {\n __extends(Scatter, _super);\n function Scatter() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'scatter';\n return _this;\n }\n /**\n * 获取 散点图 默认配置项\n * 供外部使用\n */\n Scatter.getDefaultOptions = function () {\n return {\n axis: {\n y: { title: false },\n x: { title: false },\n },\n legend: {\n size: false,\n },\n children: [{ type: 'point' }],\n };\n };\n /**\n * 获取 散点图 默认配置\n */\n Scatter.prototype.getDefaultOptions = function () {\n return Scatter.getDefaultOptions();\n };\n /**\n * 散点图适配器\n */\n Scatter.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Scatter;\n}(Plot));\nexport { Scatter };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { adaptor } from './adaptor';\nimport { Plot } from '../../base';\nvar Radar = /** @class */ (function (_super) {\n __extends(Radar, _super);\n function Radar() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'radar';\n return _this;\n }\n /**\n * 获取 雷达图 默认配置项\n * 供外部使用\n */\n Radar.getDefaultOptions = function () {\n return {\n axis: {\n x: { grid: true, line: true },\n y: { zIndex: 1, title: false, line: true, nice: true },\n },\n meta: { x: { padding: 0.5, align: 0 } },\n interaction: { tooltip: { style: { crosshairsLineDash: [4, 4] } } },\n children: [{ type: 'line' }],\n // 有 polar 和 radar 两种极坐标形式\n coordinateType: 'polar',\n };\n };\n /**\n * 获取 雷达图 默认配置\n */\n Radar.prototype.getDefaultOptions = function () {\n return Radar.getDefaultOptions();\n };\n /**\n * 雷达图适配器\n */\n Radar.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Radar;\n}(Plot));\nexport { Radar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nexport var DEFAULT_COLORS = ['#26a69a', '#999999', '#ef5350'];\nvar Stock = /** @class */ (function (_super) {\n __extends(Stock, _super);\n function Stock() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'stock';\n return _this;\n }\n /**\n * 获取 股票图 默认配置项\n * 供外部使用\n */\n Stock.getDefaultOptions = function () {\n return {\n type: 'view',\n scale: {\n color: {\n domain: [-1, 0, 1],\n range: DEFAULT_COLORS,\n },\n y: { nice: true },\n },\n children: [\n // line shadow\n {\n type: 'link',\n },\n {\n type: 'interval',\n },\n ],\n axis: {\n x: { title: false, grid: false },\n y: { title: false, grid: true, gridLineDash: null },\n },\n animate: { enter: { type: 'scaleInY' } },\n interaction: {\n tooltip: {\n shared: true,\n marker: false,\n groupName: false,\n crosshairs: true,\n },\n },\n };\n };\n /**\n * 获取 股票图 默认配置\n */\n Stock.prototype.getDefaultOptions = function () {\n return Stock.getDefaultOptions();\n };\n /**\n * 股票图适配器\n */\n Stock.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Stock;\n}(Plot));\nexport { Stock };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar TinyLine = /** @class */ (function (_super) {\n __extends(TinyLine, _super);\n function TinyLine() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'TinyLine';\n return _this;\n }\n /**\n * 获取 迷你折线图 默认配置项\n * 供外部使用\n */\n TinyLine.getDefaultOptions = function () {\n return {\n type: 'view',\n children: [{ type: 'line', axis: false }],\n animate: {\n enter: { type: 'growInX', duration: 500 },\n },\n padding: 0,\n margin: 0,\n tooltip: false,\n };\n };\n /**\n * 获取 迷你折线图 默认配置\n */\n TinyLine.prototype.getDefaultOptions = function () {\n return TinyLine.getDefaultOptions();\n };\n /**\n * 迷你折线图适配器\n */\n TinyLine.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return TinyLine;\n}(Plot));\nexport { TinyLine };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar TinyArea = /** @class */ (function (_super) {\n __extends(TinyArea, _super);\n function TinyArea() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'TinyArea';\n return _this;\n }\n /**\n * 获取 面积图 默认配置项\n * 供外部使用\n */\n TinyArea.getDefaultOptions = function () {\n return {\n type: 'view',\n animate: {\n enter: { type: 'growInX', duration: 500 },\n },\n children: [{ type: 'area', axis: false }],\n padding: 0,\n margin: 0,\n tooltip: false,\n };\n };\n /**\n * 获取 面积图 默认配置\n */\n TinyArea.prototype.getDefaultOptions = function () {\n return TinyArea.getDefaultOptions();\n };\n /**\n * 面积图适配器\n */\n TinyArea.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return TinyArea;\n}(Plot));\nexport { TinyArea };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar TinyColumn = /** @class */ (function (_super) {\n __extends(TinyColumn, _super);\n function TinyColumn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'TinyColumn';\n return _this;\n }\n /**\n * 获取 迷你柱形图 默认配置项\n * 供外部使用\n */\n TinyColumn.getDefaultOptions = function () {\n return {\n type: 'view',\n children: [{ type: 'interval', axis: false }],\n padding: 0,\n margin: 0,\n tooltip: false,\n };\n };\n /**\n * 获取 迷你柱形图 默认配置\n */\n TinyColumn.prototype.getDefaultOptions = function () {\n return TinyColumn.getDefaultOptions();\n };\n /**\n * 迷你柱形图适配器\n */\n TinyColumn.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return TinyColumn;\n}(Plot));\nexport { TinyColumn };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar TinyProgress = /** @class */ (function (_super) {\n __extends(TinyProgress, _super);\n function TinyProgress() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'TinyProgress';\n return _this;\n }\n /**\n * 获取 进度图 默认配置项\n * 供外部使用\n */\n TinyProgress.getDefaultOptions = function () {\n return {\n type: 'view',\n data: [],\n margin: 0,\n padding: 0,\n tooltip: false,\n children: [\n {\n interaction: { tooltip: false },\n coordinate: { transform: [{ type: 'transpose' }] },\n type: 'interval',\n axis: false,\n legend: false,\n encode: { y: function (d) { return d; }, color: function (d, idx) { return idx; } },\n },\n ],\n };\n };\n /**\n * 获取 进度图 默认配置\n */\n TinyProgress.prototype.getDefaultOptions = function () {\n return TinyProgress.getDefaultOptions();\n };\n /**\n * 迷你折线图适配器\n */\n TinyProgress.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return TinyProgress;\n}(Plot));\nexport { TinyProgress };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar TinyRing = /** @class */ (function (_super) {\n __extends(TinyRing, _super);\n function TinyRing() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'TinyRing';\n return _this;\n }\n /**\n * 获取进度图默认配置项\n * 供外部使用\n */\n TinyRing.getDefaultOptions = function () {\n return {\n type: 'view',\n data: [],\n margin: 0,\n padding: 0,\n coordinate: { type: 'theta' },\n animate: { enter: { type: 'waveIn' } },\n interaction: { tooltip: false },\n tooltip: false,\n children: [\n {\n type: 'interval',\n axis: false,\n legend: false,\n encode: { y: function (d) { return d; }, color: function (d, idx) { return idx; } },\n },\n ],\n };\n };\n /**\n * 获取 进度图 默认配置\n */\n TinyRing.prototype.getDefaultOptions = function () {\n return TinyRing.getDefaultOptions();\n };\n /**\n * 迷你折线图适配器\n */\n TinyRing.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return TinyRing;\n}(Plot));\nexport { TinyRing };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar Rose = /** @class */ (function (_super) {\n __extends(Rose, _super);\n function Rose() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'rose';\n return _this;\n }\n /**\n * 获取 散点图 默认配置项\n * 供外部使用\n */\n Rose.getDefaultOptions = function () {\n return {\n type: 'view',\n children: [{ type: 'interval' }],\n coordinate: { type: 'polar' },\n animate: { enter: { type: 'waveIn' } },\n };\n };\n /**\n * 获取 散点图 默认配置\n */\n Rose.prototype.getDefaultOptions = function () {\n return Rose.getDefaultOptions();\n };\n /**\n * 散点图适配器\n */\n Rose.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Rose;\n}(Plot));\nexport { Rose };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nimport { WATERFALL_VALUE } from './constants';\nvar Waterfall = /** @class */ (function (_super) {\n __extends(Waterfall, _super);\n function Waterfall() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'waterfall';\n return _this;\n }\n Waterfall.getDefaultOptions = function () {\n return {\n type: 'view',\n legend: null,\n tooltip: {\n field: WATERFALL_VALUE,\n valueFormatter: '~s',\n name: 'value',\n },\n axis: {\n y: {\n title: null,\n labelFormatter: '~s',\n },\n x: {\n title: null,\n },\n },\n children: [\n {\n type: 'interval',\n interaction: {\n elementHighlight: {\n background: true,\n },\n },\n },\n ],\n };\n };\n Waterfall.prototype.getDefaultOptions = function () {\n return Waterfall.getDefaultOptions();\n };\n Waterfall.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Waterfall;\n}(Plot));\nexport { Waterfall };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar Histogram = /** @class */ (function (_super) {\n __extends(Histogram, _super);\n function Histogram() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'Histogram';\n return _this;\n }\n /**\n * 获取 直方图 默认配置项\n * 供外部使用\n */\n Histogram.getDefaultOptions = function () {\n return {\n type: 'view',\n autoFit: true,\n axis: {\n y: { title: false },\n x: { title: false },\n },\n children: [\n {\n type: 'rect',\n transform: [{ type: 'binX', y: 'count' }],\n interaction: {\n elementHighlight: {\n background: true,\n },\n },\n },\n ],\n };\n };\n /**\n * 获取 直方图 默认配置\n */\n Histogram.prototype.getDefaultOptions = function () {\n return Histogram.getDefaultOptions();\n };\n /**\n * 直方图适配器\n */\n Histogram.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Histogram;\n}(Plot));\nexport { Histogram };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar Heatmap = /** @class */ (function (_super) {\n __extends(Heatmap, _super);\n function Heatmap() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'heatmap';\n return _this;\n }\n Heatmap.getDefaultOptions = function () {\n return {\n type: 'view',\n legend: null,\n tooltip: {\n valueFormatter: '~s',\n },\n axis: {\n y: {\n title: null,\n grid: true,\n },\n x: {\n title: null,\n grid: true,\n },\n },\n children: [\n {\n type: 'point',\n },\n ],\n };\n };\n Heatmap.prototype.getDefaultOptions = function () {\n return Heatmap.getDefaultOptions();\n };\n Heatmap.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Heatmap;\n}(Plot));\nexport { Heatmap };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar Box = /** @class */ (function (_super) {\n __extends(Box, _super);\n function Box() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'box';\n return _this;\n }\n /**\n * 获取箱线图默认配置项\n * 供外部使用\n */\n Box.getDefaultOptions = function () {\n return {\n type: 'view',\n children: [{ type: 'box' }],\n axis: {\n y: { title: false },\n x: { title: false },\n },\n // 默认 tooltip\n tooltip: {\n items: [\n { name: 'min', channel: 'y' },\n { name: 'q1', channel: 'y1' },\n { name: 'q2', channel: 'y2' },\n { name: 'q3', channel: 'y3' },\n { name: 'max', channel: 'y4' },\n ],\n },\n };\n };\n /**\n * 获取 折线图 默认配置\n */\n Box.prototype.getDefaultOptions = function () {\n return Box.getDefaultOptions();\n };\n /**\n * 折线图适配器\n */\n Box.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Box;\n}(Plot));\nexport { Box };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar Sankey = /** @class */ (function (_super) {\n __extends(Sankey, _super);\n function Sankey() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'sankey';\n return _this;\n }\n /**\n * 获取 桑基图 默认配置项\n * 供外部使用\n */\n Sankey.getDefaultOptions = function () {\n return { type: 'view', children: [{ type: 'sankey' }] };\n };\n /**\n * 获取 桑基图 默认配置\n */\n Sankey.prototype.getDefaultOptions = function () {\n return Sankey.getDefaultOptions();\n };\n /**\n * 桑基图适配器\n */\n Sankey.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Sankey;\n}(Plot));\nexport { Sankey };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor, DEFAULT_COLORS } from './adaptor';\nvar Bullet = /** @class */ (function (_super) {\n __extends(Bullet, _super);\n function Bullet() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'bullet';\n return _this;\n }\n /**\n * 获取 子弹图 默认配置项\n * 供外部使用\n */\n Bullet.getDefaultOptions = function () {\n return {\n type: 'view',\n scale: {\n color: {\n range: DEFAULT_COLORS,\n },\n },\n legend: {\n color: {\n itemMarker: function (d) {\n return d === 'targets' ? 'line' : 'square';\n },\n },\n },\n axis: {\n y: { title: false },\n x: { title: false },\n },\n children: [\n {\n type: 'interval',\n style: { maxWidth: 30, zIndex: -2 },\n axis: { y: { grid: true, gridLineWidth: 2 } },\n },\n {\n type: 'interval',\n style: { maxWidth: 20, zIndex: -1 },\n transform: [{ type: 'stackY' }],\n },\n {\n type: 'point',\n encode: { size: 8, shape: 'line' },\n },\n ],\n interaction: { tooltip: { shared: true } },\n coordinate: { transform: [{ type: 'transpose' }] },\n };\n };\n /**\n * 获取 子弹图 默认配置\n */\n Bullet.prototype.getDefaultOptions = function () {\n return Bullet.getDefaultOptions();\n };\n /**\n * 子弹图适配器\n */\n Bullet.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Bullet;\n}(Plot));\nexport { Bullet };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar Gauge = /** @class */ (function (_super) {\n __extends(Gauge, _super);\n function Gauge() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'Gauge';\n return _this;\n }\n /**\n * 获取 仪表盘 默认配置项\n * 供外部使用\n */\n Gauge.getDefaultOptions = function () {\n return {\n type: 'view',\n legend: false,\n children: [{ type: 'gauge' }],\n };\n };\n /**\n * 获取 仪表盘 默认配置\n */\n Gauge.prototype.getDefaultOptions = function () {\n return Gauge.getDefaultOptions();\n };\n /**\n * 仪表盘适配器\n */\n Gauge.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Gauge;\n}(Plot));\nexport { Gauge };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar Liquid = /** @class */ (function (_super) {\n __extends(Liquid, _super);\n function Liquid() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'Liquid';\n return _this;\n }\n /**\n * 获取 水波图 默认配置项\n * 供外部使用\n */\n Liquid.getDefaultOptions = function () {\n return { type: 'view', children: [{ type: 'liquid' }] };\n };\n /**\n * 获取 水波图 默认配置\n */\n Liquid.prototype.getDefaultOptions = function () {\n return Liquid.getDefaultOptions();\n };\n /**\n * 水波图适配器\n */\n Liquid.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Liquid;\n}(Plot));\nexport { Liquid };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar WordCloud = /** @class */ (function (_super) {\n __extends(WordCloud, _super);\n function WordCloud() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'WordCloud';\n return _this;\n }\n /**\n * 获取 词云图 默认配置项\n * 供外部使用\n */\n WordCloud.getDefaultOptions = function () {\n return { type: 'view', legend: false, children: [{ type: 'wordCloud' }] };\n };\n /**\n * 获取 词云图 默认配置\n */\n WordCloud.prototype.getDefaultOptions = function () {\n return WordCloud.getDefaultOptions();\n };\n /**\n * 词云图适配器\n */\n WordCloud.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return WordCloud;\n}(Plot));\nexport { WordCloud };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar Treemap = /** @class */ (function (_super) {\n __extends(Treemap, _super);\n function Treemap() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'treemap';\n return _this;\n }\n Treemap.getDefaultOptions = function () {\n return {\n type: 'view',\n children: [\n {\n type: 'treemap',\n },\n ],\n };\n };\n Treemap.prototype.getDefaultOptions = function () {\n return Treemap.getDefaultOptions();\n };\n Treemap.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Treemap;\n}(Plot));\nexport { Treemap };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar RadialBar = /** @class */ (function (_super) {\n __extends(RadialBar, _super);\n function RadialBar() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'radial';\n return _this;\n }\n /**\n * 获取 玉珏图 默认配置项\n * 供外部使用\n */\n RadialBar.getDefaultOptions = function () {\n return {\n type: 'view',\n children: [{ type: 'interval' }],\n coordinate: { type: 'radial', innerRadius: 0.1, outerRadius: 1, endAngle: Math.PI },\n animate: { enter: { type: 'waveIn', duration: 800 } },\n axis: {\n y: {\n nice: true,\n labelAutoHide: true,\n labelAutoRotate: false,\n },\n x: {\n title: false,\n nice: true,\n labelAutoRotate: false,\n labelAutoHide: { type: 'equidistance', cfg: { minGap: 6 } },\n },\n },\n };\n };\n /**\n * 获取 玉珏图 默认配置\n */\n RadialBar.prototype.getDefaultOptions = function () {\n return RadialBar.getDefaultOptions();\n };\n /**\n * 玉珏图适配器\n */\n RadialBar.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return RadialBar;\n}(Plot));\nexport { RadialBar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar CirclePacking = /** @class */ (function (_super) {\n __extends(CirclePacking, _super);\n function CirclePacking() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'CirclePacking';\n return _this;\n }\n /**\n * 获取 circle packing 默认配置项\n * 供外部使用\n */\n CirclePacking.getDefaultOptions = function () {\n return {\n legend: false,\n type: 'view',\n children: [\n {\n type: 'pack',\n encode: {\n color: 'depth',\n }\n },\n ],\n };\n };\n /**\n * 获取 打包图 默认配置\n */\n CirclePacking.prototype.getDefaultOptions = function () {\n return CirclePacking.getDefaultOptions();\n };\n /**\n * 打包图适配器\n */\n CirclePacking.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return CirclePacking;\n}(Plot));\nexport { CirclePacking };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar Violin = /** @class */ (function (_super) {\n __extends(Violin, _super);\n function Violin() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'violin';\n return _this;\n }\n /**\n * 获取 折线图 默认配置项\n * 供外部使用\n */\n Violin.getDefaultOptions = function () {\n return {\n type: 'view',\n children: [\n {\n type: 'density',\n sizeField: 'size',\n tooltip: false,\n },\n {\n type: 'boxplot',\n shapeField: 'violin',\n style: {\n opacity: 0.5,\n point: false,\n },\n },\n ],\n animate: { enter: { type: 'fadeIn' } },\n };\n };\n /**\n * 获取 折线图 默认配置\n */\n Violin.prototype.getDefaultOptions = function () {\n return Violin.getDefaultOptions();\n };\n /**\n * 折线图适配器\n */\n Violin.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Violin;\n}(Plot));\nexport { Violin };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nvar BidirectionalBar = /** @class */ (function (_super) {\n __extends(BidirectionalBar, _super);\n function BidirectionalBar() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'BidirectionalBar';\n return _this;\n }\n BidirectionalBar.getDefaultOptions = function () {\n return {\n type: 'spaceFlex',\n coordinate: { transform: [{ type: 'transpose' }] },\n scale: {\n y: { nice: true },\n },\n direction: 'row',\n layout: 'horizontal',\n legend: false,\n axis: {\n y: {\n title: false,\n },\n x: { title: false, label: false },\n },\n children: [{ type: 'interval' }, { type: 'interval' }],\n };\n };\n BidirectionalBar.prototype.getDefaultOptions = function () {\n return BidirectionalBar.getDefaultOptions();\n };\n BidirectionalBar.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return BidirectionalBar;\n}(Plot));\nexport { BidirectionalBar };\n","export var DefaultTransformKey;\n(function (DefaultTransformKey) {\n DefaultTransformKey[\"color\"] = \"key\";\n DefaultTransformKey[\"d\"] = \"path\";\n})(DefaultTransformKey || (DefaultTransformKey = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Plot } from '../../base';\nimport { adaptor } from './adaptor';\nimport { DefaultTransformKey } from './type';\nvar Venn = /** @class */ (function (_super) {\n __extends(Venn, _super);\n function Venn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'venn';\n return _this;\n }\n /**\n * 获取 韦恩图 默认配置项\n * 供外部使用\n */\n Venn.getDefaultOptions = function () {\n return {\n type: 'view',\n children: [{ type: 'path' }],\n legend: {\n color: { itemMarker: 'circle' },\n },\n encode: { color: DefaultTransformKey.color, d: DefaultTransformKey.d },\n };\n };\n /**\n * 获取 韦恩图 默认配置\n */\n Venn.prototype.getDefaultOptions = function () {\n return Venn.getDefaultOptions();\n };\n /**\n * 韦恩图适配器\n */\n Venn.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Venn;\n}(Plot));\nexport { Venn };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { adaptor } from './adaptor';\nimport { Plot } from '../../base';\nvar Sunburst = /** @class */ (function (_super) {\n __extends(Sunburst, _super);\n function Sunburst() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'Sunburst';\n return _this;\n }\n /**\n * 获取 旭日图 默认配置项\n * 供外部使用\n */\n Sunburst.getDefaultOptions = function () {\n return { type: 'view', children: [{ type: 'sunburst' }] };\n };\n /**\n * 获取 旭日图 默认配置\n */\n Sunburst.prototype.getDefaultOptions = function () {\n return Sunburst.getDefaultOptions();\n };\n /**\n * 旭日图适配器\n */\n Sunburst.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Sunburst;\n}(Plot));\nexport { Sunburst };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar Sequential_1;\nimport { identity } from '@antv/util';\nimport { d3Ticks } from '../tick-methods/d3-ticks';\nimport { compose, createInterpolateNumber, createNormalize, interpolatize } from '../utils';\nimport { Linear } from './linear';\nfunction rangeOf(interpolator) {\n return [interpolator(0), interpolator(1)];\n}\nconst normalizeDomain = (domain) => {\n const [d0, d1] = domain;\n // [d0, d1] => [0, 1]\n const normalize = compose(createInterpolateNumber(0, 1), createNormalize(d0, d1));\n return normalize;\n};\n/**\n * Sequential 比例尺\n *\n * 构造可创建一个在输入和输出之间通过插值函数进行转换的比例尺\n */\n// @Sequentialish\nlet Sequential = Sequential_1 = class Sequential extends Linear {\n getDefaultOptions() {\n return {\n domain: [0, 1],\n unknown: undefined,\n nice: false,\n clamp: false,\n round: false,\n interpolator: identity,\n tickMethod: d3Ticks,\n tickCount: 5,\n };\n }\n constructor(options) {\n super(options);\n }\n clone() {\n return new Sequential_1(this.options);\n }\n};\nSequential = Sequential_1 = __decorate([\n interpolatize(rangeOf, normalizeDomain)\n], Sequential);\nexport { Sequential };\n//# sourceMappingURL=sequential.js.map","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n areaRingSum = new Adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum = new Adder();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum = new Adder();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum = new Adder();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { useRef, useEffect } from 'react';\nimport { isFunction, isEqual, createNode, cloneDeep, isArray, isObject, isValidElement } from '../util';\nexport default function useChart(ChartClass, config) {\n var chart = useRef(null);\n var chartOptions = useRef(null);\n var container = useRef(null);\n var onReady = config.onReady, onEvent = config.onEvent;\n /**\n * Get data base64\n * @param {string} type A DOMString indicating the image format. The default format type is image/png.\n * @param {number} encoderOptions A Number between 0 and 1 indicating the image quality\n */\n var toDataURL = function (type, encoderOptions) {\n var _a;\n if (type === void 0) { type = 'image/png'; }\n var canvas = (_a = container.current) === null || _a === void 0 ? void 0 : _a.getElementsByTagName('canvas')[0];\n return canvas === null || canvas === void 0 ? void 0 : canvas.toDataURL(type, encoderOptions);\n };\n /**\n * Download Image\n * @param {string} name A name of image\n * @param {string} type A DOMString indicating the image format. The default format type is image/png.\n * @param {number} encoderOptions A Number between 0 and 1 indicating the image quality\n */\n var downloadImage = function (name, type, encoderOptions) {\n if (name === void 0) { name = 'download'; }\n if (type === void 0) { type = 'image/png'; }\n var imageName = name;\n if (name.indexOf('.') === -1) {\n imageName = \"\".concat(name, \".\").concat(type.split('/')[1]);\n }\n var base64 = toDataURL(type, encoderOptions);\n var a = document.createElement('a');\n a.href = base64;\n a.download = imageName;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n a = null;\n return imageName;\n };\n /**\n * JSX TO HTMLElement\n * @param {object} cfg\n * @param {boolean} flag isTooltip\n */\n var processConfig = function (cfg, flag) {\n if (flag === void 0) { flag = false; }\n var keys = Object.keys(cfg);\n var isTooltip = flag;\n keys.forEach(function (key) {\n var current = cfg[key];\n if (key === 'tooltip') {\n isTooltip = true;\n }\n if (isFunction(current) && isValidElement(\"\".concat(current))) {\n cfg[key] = function () {\n var arg = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n arg[_i] = arguments[_i];\n }\n return createNode(current.apply(void 0, arg), isTooltip);\n };\n }\n else {\n if (isArray(current)) {\n current.forEach(function (item) {\n processConfig(item, isTooltip);\n });\n }\n else if (isObject(current)) {\n processConfig(current, isTooltip);\n }\n else {\n isTooltip = flag;\n }\n }\n });\n };\n useEffect(function () {\n if (chart.current && !isEqual(chartOptions.current, config)) {\n chartOptions.current = cloneDeep(config);\n processConfig(config);\n chart.current.update(config);\n chart.current.render();\n }\n }, [config]);\n useEffect(function () {\n if (!container.current) {\n return function () { return null; };\n }\n if (!chartOptions.current) {\n chartOptions.current = cloneDeep(config);\n }\n processConfig(config);\n var chartInstance = new ChartClass(container.current, __assign({}, config));\n chartInstance.toDataURL = toDataURL;\n chartInstance.downloadImage = downloadImage;\n chartInstance.render();\n chart.current = chartInstance;\n if (onReady) {\n onReady(chartInstance);\n }\n var handler = function (event) {\n if (onEvent) {\n onEvent(chartInstance, event);\n }\n };\n chartInstance.on('*', handler);\n // 组件销毁时销毁图表\n return function () {\n if (chart.current) {\n chart.current.destroy();\n chart.current.off('*', handler);\n chart.current = undefined;\n }\n };\n }, []);\n return {\n chart: chart,\n container: container,\n };\n}\n","/*!\n * @antv/g-plugin-canvas-path-generator\n * @description A G plugin of path generator with Canvas2D API\n * @version 2.1.19\n * @date 5/9/2025, 8:19:59 AM\n * @author AntVis\n * @docs https://g.antv.antgroup.com/\n */\nimport _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport _classCallCheck from '@babel/runtime/helpers/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/createClass';\nimport _callSuper from '@babel/runtime/helpers/callSuper';\nimport _inherits from '@babel/runtime/helpers/inherits';\nimport { isDisplayObject, Shape, AbstractRendererPlugin } from '@antv/g-lite';\nimport _slicedToArray from '@babel/runtime/helpers/slicedToArray';\nimport { clamp } from '@antv/util';\n\nfunction generatePath$6(context, parsedStyle) {\n var _parsedStyle$cx = parsedStyle.cx,\n cx = _parsedStyle$cx === void 0 ? 0 : _parsedStyle$cx,\n _parsedStyle$cy = parsedStyle.cy,\n cy = _parsedStyle$cy === void 0 ? 0 : _parsedStyle$cy,\n r = parsedStyle.r;\n context.arc(cx, cy, r, 0, Math.PI * 2, false);\n}\n\nfunction generatePath$5(context, parsedStyle) {\n var _parsedStyle$cx = parsedStyle.cx,\n cx = _parsedStyle$cx === void 0 ? 0 : _parsedStyle$cx,\n _parsedStyle$cy = parsedStyle.cy,\n cy = _parsedStyle$cy === void 0 ? 0 : _parsedStyle$cy,\n rx = parsedStyle.rx,\n ry = parsedStyle.ry;\n\n // @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/ellipse\n if (context.ellipse) {\n context.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2, false);\n } else {\n // 如果不支持,则使用圆来绘制,进行变形\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n context.save();\n context.scale(scaleX, scaleY);\n context.arc(cx, cy, r, 0, Math.PI * 2);\n }\n}\n\nfunction generatePath$4(context, parsedStyle) {\n var x1 = parsedStyle.x1,\n y1 = parsedStyle.y1,\n x2 = parsedStyle.x2,\n y2 = parsedStyle.y2,\n markerStart = parsedStyle.markerStart,\n markerEnd = parsedStyle.markerEnd,\n markerStartOffset = parsedStyle.markerStartOffset,\n markerEndOffset = parsedStyle.markerEndOffset;\n var startOffsetX = 0;\n var startOffsetY = 0;\n var endOffsetX = 0;\n var endOffsetY = 0;\n var rad = 0;\n var x;\n var y;\n if (markerStart && isDisplayObject(markerStart) && markerStartOffset) {\n x = x2 - x1;\n y = y2 - y1;\n rad = Math.atan2(y, x);\n startOffsetX = Math.cos(rad) * (markerStartOffset || 0);\n startOffsetY = Math.sin(rad) * (markerStartOffset || 0);\n }\n if (markerEnd && isDisplayObject(markerEnd) && markerEndOffset) {\n x = x1 - x2;\n y = y1 - y2;\n rad = Math.atan2(y, x);\n endOffsetX = Math.cos(rad) * (markerEndOffset || 0);\n endOffsetY = Math.sin(rad) * (markerEndOffset || 0);\n }\n context.moveTo(x1 + startOffsetX, y1 + startOffsetY);\n context.lineTo(x2 + endOffsetX, y2 + endOffsetY);\n}\n\nfunction generatePath$3(context, parsedStyle) {\n var markerStart = parsedStyle.markerStart,\n markerEnd = parsedStyle.markerEnd,\n markerStartOffset = parsedStyle.markerStartOffset,\n markerEndOffset = parsedStyle.markerEndOffset;\n var _parsedStyle$d = parsedStyle.d,\n absolutePath = _parsedStyle$d.absolutePath,\n segments = _parsedStyle$d.segments;\n var startOffsetX = 0;\n var startOffsetY = 0;\n var endOffsetX = 0;\n var endOffsetY = 0;\n var rad = 0;\n var x;\n var y;\n if (markerStart && isDisplayObject(markerStart) && markerStartOffset) {\n var _getStartTangent = markerStart.parentNode.getStartTangent(),\n _getStartTangent2 = _slicedToArray(_getStartTangent, 2),\n p1 = _getStartTangent2[0],\n p2 = _getStartTangent2[1];\n x = p1[0] - p2[0];\n y = p1[1] - p2[1];\n rad = Math.atan2(y, x);\n startOffsetX = Math.cos(rad) * (markerStartOffset || 0);\n startOffsetY = Math.sin(rad) * (markerStartOffset || 0);\n }\n if (markerEnd && isDisplayObject(markerEnd) && markerEndOffset) {\n var _getEndTangent = markerEnd.parentNode.getEndTangent(),\n _getEndTangent2 = _slicedToArray(_getEndTangent, 2),\n _p = _getEndTangent2[0],\n _p2 = _getEndTangent2[1];\n x = _p[0] - _p2[0];\n y = _p[1] - _p2[1];\n rad = Math.atan2(y, x);\n endOffsetX = Math.cos(rad) * (markerEndOffset || 0);\n endOffsetY = Math.sin(rad) * (markerEndOffset || 0);\n }\n for (var i = 0; i < absolutePath.length; i++) {\n var params = absolutePath[i];\n var command = params[0];\n var nextSegment = absolutePath[i + 1];\n var useStartOffset = i === 0 && (startOffsetX !== 0 || startOffsetY !== 0);\n var useEndOffset = (i === absolutePath.length - 1 || nextSegment && (nextSegment[0] === 'M' || nextSegment[0] === 'Z')) && endOffsetX !== 0 && endOffsetY !== 0;\n var _ref = useStartOffset ? [startOffsetX, startOffsetY] : [0, 0],\n _ref2 = _slicedToArray(_ref, 2),\n startOffsetXTemp = _ref2[0],\n startOffsetYTemp = _ref2[1];\n var _ref3 = useEndOffset ? [endOffsetX, endOffsetY] : [0, 0],\n _ref4 = _slicedToArray(_ref3, 2),\n endOffsetXTemp = _ref4[0],\n endOffsetYTemp = _ref4[1];\n switch (command) {\n case 'M':\n // Use start marker offset\n context.moveTo(params[1] + startOffsetXTemp, params[2] + startOffsetYTemp);\n break;\n case 'L':\n context.lineTo(params[1] + endOffsetXTemp, params[2] + endOffsetYTemp);\n break;\n case 'Q':\n context.quadraticCurveTo(params[1], params[2], params[3] + endOffsetXTemp, params[4] + endOffsetYTemp);\n break;\n case 'C':\n context.bezierCurveTo(params[1], params[2], params[3], params[4], params[5] + endOffsetXTemp, params[6] + endOffsetYTemp);\n break;\n case 'A':\n {\n // FIXME startOffset / endOffset\n var arcParams = segments[i].arcParams;\n var cx = arcParams.cx,\n cy = arcParams.cy,\n rx = arcParams.rx,\n ry = arcParams.ry,\n startAngle = arcParams.startAngle,\n endAngle = arcParams.endAngle,\n xRotation = arcParams.xRotation,\n sweepFlag = arcParams.sweepFlag;\n // @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/ellipse\n if (context.ellipse) {\n context.ellipse(cx, cy, rx, ry, xRotation, startAngle, endAngle, !!(1 - sweepFlag));\n } else {\n // @see https://stackoverflow.com/a/47494351\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n context.translate(cx, cy);\n context.rotate(xRotation);\n context.scale(scaleX, scaleY);\n context.arc(0, 0, r, startAngle, endAngle, !!(1 - sweepFlag));\n context.scale(1 / scaleX, 1 / scaleY);\n context.rotate(-xRotation);\n context.translate(-cx, -cy);\n }\n if (useEndOffset) {\n context.lineTo(params[6] + endOffsetX, params[7] + endOffsetY);\n }\n break;\n }\n case 'Z':\n context.closePath();\n break;\n }\n }\n}\n\nfunction generatePath$2(context, parsedStyle) {\n var markerStart = parsedStyle.markerStart,\n markerEnd = parsedStyle.markerEnd,\n markerStartOffset = parsedStyle.markerStartOffset,\n markerEndOffset = parsedStyle.markerEndOffset;\n var points = parsedStyle.points.points;\n var length = points.length;\n var x1 = points[0][0];\n var y1 = points[0][1];\n var x2 = points[length - 1][0];\n var y2 = points[length - 1][1];\n var startOffsetX = 0;\n var startOffsetY = 0;\n var endOffsetX = 0;\n var endOffsetY = 0;\n var rad = 0;\n var x;\n var y;\n if (markerStart && isDisplayObject(markerStart) && markerStartOffset) {\n x = points[1][0] - points[0][0];\n y = points[1][1] - points[0][1];\n rad = Math.atan2(y, x);\n startOffsetX = Math.cos(rad) * (markerStartOffset || 0);\n startOffsetY = Math.sin(rad) * (markerStartOffset || 0);\n }\n if (markerEnd && isDisplayObject(markerEnd) && markerEndOffset) {\n x = points[length - 1][0] - points[0][0];\n y = points[length - 1][1] - points[0][1];\n rad = Math.atan2(y, x);\n endOffsetX = Math.cos(rad) * (markerEndOffset || 0);\n endOffsetY = Math.sin(rad) * (markerEndOffset || 0);\n }\n context.moveTo(x1 + (startOffsetX || endOffsetX), y1 + (startOffsetY || endOffsetY));\n for (var i = 1; i < length - 1; i++) {\n var point = points[i];\n context.lineTo(point[0], point[1]);\n }\n context.lineTo(x2, y2);\n}\n\nfunction generatePath$1(context, parsedStyle) {\n var markerStart = parsedStyle.markerStart,\n markerEnd = parsedStyle.markerEnd,\n markerStartOffset = parsedStyle.markerStartOffset,\n markerEndOffset = parsedStyle.markerEndOffset;\n var points = parsedStyle.points.points;\n var length = points.length;\n var x1 = points[0][0];\n var y1 = points[0][1];\n var x2 = points[length - 1][0];\n var y2 = points[length - 1][1];\n var startOffsetX = 0;\n var startOffsetY = 0;\n var endOffsetX = 0;\n var endOffsetY = 0;\n var rad = 0;\n var x;\n var y;\n if (markerStart && isDisplayObject(markerStart) && markerStartOffset) {\n x = points[1][0] - points[0][0];\n y = points[1][1] - points[0][1];\n rad = Math.atan2(y, x);\n startOffsetX = Math.cos(rad) * (markerStartOffset || 0);\n startOffsetY = Math.sin(rad) * (markerStartOffset || 0);\n }\n if (markerEnd && isDisplayObject(markerEnd) && markerEndOffset) {\n x = points[length - 2][0] - points[length - 1][0];\n y = points[length - 2][1] - points[length - 1][1];\n rad = Math.atan2(y, x);\n endOffsetX = Math.cos(rad) * (markerEndOffset || 0);\n endOffsetY = Math.sin(rad) * (markerEndOffset || 0);\n }\n context.moveTo(x1 + startOffsetX, y1 + startOffsetY);\n for (var i = 1; i < length - 1; i++) {\n var point = points[i];\n context.lineTo(point[0], point[1]);\n }\n context.lineTo(x2 + endOffsetX, y2 + endOffsetY);\n}\n\nfunction generatePath(context, parsedStyle) {\n var _parsedStyle$x = parsedStyle.x,\n x = _parsedStyle$x === void 0 ? 0 : _parsedStyle$x,\n _parsedStyle$y = parsedStyle.y,\n y = _parsedStyle$y === void 0 ? 0 : _parsedStyle$y,\n radius = parsedStyle.radius,\n width = parsedStyle.width,\n height = parsedStyle.height;\n var w = width;\n var h = height;\n var hasRadius = radius && radius.some(function (r) {\n return r !== 0;\n });\n if (!hasRadius) {\n // Canvas support negative width/height of rect\n context.rect(x, y, w, h);\n } else {\n var signX = width > 0 ? 1 : -1;\n var signY = height > 0 ? 1 : -1;\n var sweepFlag = signX + signY === 0;\n var _radius$map = radius.map(function (r) {\n return clamp(r, 0, Math.min(Math.abs(w) / 2, Math.abs(h) / 2));\n }),\n _radius$map2 = _slicedToArray(_radius$map, 4),\n tlr = _radius$map2[0],\n trr = _radius$map2[1],\n brr = _radius$map2[2],\n blr = _radius$map2[3];\n context.moveTo(signX * tlr + x, y);\n context.lineTo(w - signX * trr + x, y);\n if (trr !== 0) {\n context.arc(w - signX * trr + x, signY * trr + y, trr, -signY * Math.PI / 2, signX > 0 ? 0 : Math.PI, sweepFlag);\n }\n context.lineTo(w + x, h - signY * brr + y);\n if (brr !== 0) {\n context.arc(w - signX * brr + x, h - signY * brr + y, brr, signX > 0 ? 0 : Math.PI, signY > 0 ? Math.PI / 2 : 1.5 * Math.PI, sweepFlag);\n }\n context.lineTo(signX * blr + x, h + y);\n if (blr !== 0) {\n context.arc(signX * blr + x, h - signY * blr + y, blr, signY > 0 ? Math.PI / 2 : -Math.PI / 2, signX > 0 ? Math.PI : 0, sweepFlag);\n }\n context.lineTo(x, signY * tlr + y);\n if (tlr !== 0) {\n context.arc(signX * tlr + x, signY * tlr + y, tlr, signX > 0 ? Math.PI : 0, signY > 0 ? Math.PI * 1.5 : Math.PI / 2, sweepFlag);\n }\n }\n}\n\nvar Plugin = /*#__PURE__*/function (_AbstractRendererPlug) {\n function Plugin() {\n var _this;\n _classCallCheck(this, Plugin);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _callSuper(this, Plugin, [].concat(args));\n _this.name = 'canvas-path-generator';\n return _this;\n }\n _inherits(Plugin, _AbstractRendererPlug);\n return _createClass(Plugin, [{\n key: \"init\",\n value: function init() {\n var _pathGeneratorFactory;\n var pathGeneratorFactory = (_pathGeneratorFactory = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_pathGeneratorFactory, Shape.CIRCLE, generatePath$6), Shape.ELLIPSE, generatePath$5), Shape.RECT, generatePath), Shape.LINE, generatePath$4), Shape.POLYLINE, generatePath$1), Shape.POLYGON, generatePath$2), Shape.PATH, generatePath$3), Shape.TEXT, undefined), Shape.GROUP, undefined), Shape.IMAGE, undefined), _defineProperty(_defineProperty(_defineProperty(_pathGeneratorFactory, Shape.HTML, undefined), Shape.MESH, undefined), Shape.FRAGMENT, undefined));\n\n // @ts-ignore\n this.context.pathGeneratorFactory = pathGeneratorFactory;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n // @ts-ignore\n delete this.context.pathGeneratorFactory;\n }\n }]);\n}(AbstractRendererPlugin);\n\nexport { Plugin };\n//# sourceMappingURL=index.esm.js.map\n","/*!\n * @antv/g-plugin-canvas-picker\n * @description A G plugin for picking in canvas\n * @version 2.1.23\n * @date 5/30/2025, 2:56:22 AM\n * @author AntVis\n * @docs https://g.antv.antgroup.com/\n */\nimport _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport _classCallCheck from '@babel/runtime/helpers/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/createClass';\nimport _callSuper from '@babel/runtime/helpers/callSuper';\nimport _inherits from '@babel/runtime/helpers/inherits';\nimport { findClosestClipPathTarget, Point, isFillOrStrokeAffected, getOrCalculatePathTotalLength, Shape, AbstractRendererPlugin } from '@antv/g-lite';\nimport _createForOfIteratorHelper from '@babel/runtime/helpers/createForOfIteratorHelper';\nimport _regeneratorRuntime from '@babel/runtime/helpers/regeneratorRuntime';\nimport _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';\nimport { vec3, mat4 } from 'gl-matrix';\nimport _slicedToArray from '@babel/runtime/helpers/slicedToArray';\nimport { distance, linePointToLine, cubicPointDistance, quadPointDistance } from '@antv/g-math';\nimport { arcToCubic, clamp } from '@antv/util';\nimport _objectSpread from '@babel/runtime/helpers/objectSpread2';\n\nvar tmpVec3a = vec3.create();\nvar tmpVec3b = vec3.create();\nvar tmpVec3c = vec3.create();\nvar tmpMat4 = mat4.create();\n/**\n * pick shape(s) with Mouse/Touch event\n *\n * 1. find AABB with r-tree\n * 2. do math calculation with geometry in an accurate way\n */\nvar CanvasPickerPlugin = /*#__PURE__*/function () {\n function CanvasPickerPlugin() {\n var _this = this;\n _classCallCheck(this, CanvasPickerPlugin);\n this.isHit = function (displayObject, position, worldTransform, isClipPath) {\n // use picker for current shape's type\n var pick = _this.context.pointInPathPickerFactory[displayObject.nodeName];\n if (pick) {\n // invert with world matrix\n var invertWorldMat = mat4.invert(tmpMat4, worldTransform);\n\n // transform client position to local space, do picking in local space\n var localPosition = vec3.transformMat4(tmpVec3b, vec3.set(tmpVec3c, position[0], position[1], 0), invertWorldMat);\n if (pick(displayObject, new Point(localPosition[0], localPosition[1]), isClipPath, _this.isPointInPath, _this.context, _this.runtime)) {\n return true;\n }\n }\n return false;\n };\n /**\n * use native picking method\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/CanvasRenderingContext2D/isPointInPath\n */\n this.isPointInPath = function (displayObject, position) {\n var context = _this.runtime.offscreenCanvasCreator.getOrCreateContext(_this.context.config.offscreenCanvas);\n var generatePath = _this.context.pathGeneratorFactory[displayObject.nodeName];\n if (generatePath) {\n context.beginPath();\n generatePath(context, displayObject.parsedStyle);\n context.closePath();\n }\n return context.isPointInPath(position.x, position.y);\n };\n }\n return _createClass(CanvasPickerPlugin, [{\n key: \"apply\",\n value: function apply(context, runtime) {\n var _renderingContext$roo,\n _this2 = this;\n var renderingService = context.renderingService,\n renderingContext = context.renderingContext;\n this.context = context;\n this.runtime = runtime;\n var document = (_renderingContext$roo = renderingContext.root) === null || _renderingContext$roo === void 0 ? void 0 : _renderingContext$roo.ownerDocument;\n renderingService.hooks.pick.tapPromise(CanvasPickerPlugin.tag, /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(result) {\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n return _context.abrupt(\"return\", _this2.pick(document, result));\n case 1:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n renderingService.hooks.pickSync.tap(CanvasPickerPlugin.tag, function (result) {\n return _this2.pick(document, result);\n });\n }\n }, {\n key: \"pick\",\n value: function pick(document, result) {\n var topmost = result.topmost,\n _result$position = result.position,\n x = _result$position.x,\n y = _result$position.y;\n\n // position in world space\n var position = vec3.set(tmpVec3a, x, y, 0);\n\n // query by AABB first with spatial index(r-tree)\n var hitTestList = document.elementsFromBBox(position[0], position[1], position[0], position[1]);\n\n // test with clip path & origin shape\n // @see https://github.com/antvis/g/issues/1064\n var pickedDisplayObjects = [];\n var _iterator = _createForOfIteratorHelper(hitTestList),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _displayObject = _step.value;\n var worldTransform = _displayObject.getWorldTransform();\n var isHitOriginShape = this.isHit(_displayObject, position, worldTransform, false);\n if (isHitOriginShape) {\n // should look up in the ancestor node\n var clipped = findClosestClipPathTarget(_displayObject);\n if (clipped) {\n var clipPath = clipped.parsedStyle.clipPath;\n var isHitClipPath = this.isHit(clipPath, position, clipPath.getWorldTransform(), true);\n if (isHitClipPath) {\n if (topmost) {\n result.picked = [_displayObject];\n return result;\n }\n pickedDisplayObjects.push(_displayObject);\n }\n } else {\n if (topmost) {\n result.picked = [_displayObject];\n return result;\n }\n pickedDisplayObjects.push(_displayObject);\n }\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n result.picked = pickedDisplayObjects;\n return result;\n }\n }]);\n}();\nCanvasPickerPlugin.tag = 'CanvasPicker';\n\nfunction isPointInPath$8(displayObject, position, isClipPath) {\n var _ref = displayObject.parsedStyle,\n _ref$cx = _ref.cx,\n cx = _ref$cx === void 0 ? 0 : _ref$cx,\n _ref$cy = _ref.cy,\n cy = _ref$cy === void 0 ? 0 : _ref$cy,\n r = _ref.r,\n fill = _ref.fill,\n stroke = _ref.stroke,\n _ref$lineWidth = _ref.lineWidth,\n lineWidth = _ref$lineWidth === void 0 ? 1 : _ref$lineWidth,\n _ref$increasedLineWid = _ref.increasedLineWidthForHitTesting,\n increasedLineWidthForHitTesting = _ref$increasedLineWid === void 0 ? 0 : _ref$increasedLineWid,\n _ref$pointerEvents = _ref.pointerEvents,\n pointerEvents = _ref$pointerEvents === void 0 ? 'auto' : _ref$pointerEvents;\n var halfLineWidth = (lineWidth + increasedLineWidthForHitTesting) / 2;\n var absDistance = distance(cx, cy, position.x, position.y);\n var _isFillOrStrokeAffect = isFillOrStrokeAffected(pointerEvents, fill, stroke),\n _isFillOrStrokeAffect2 = _slicedToArray(_isFillOrStrokeAffect, 2),\n hasFill = _isFillOrStrokeAffect2[0],\n hasStroke = _isFillOrStrokeAffect2[1];\n if (hasFill && hasStroke || isClipPath) {\n return absDistance <= r + halfLineWidth;\n }\n if (hasFill) {\n return absDistance <= r;\n }\n if (hasStroke) {\n return absDistance >= r - halfLineWidth && absDistance <= r + halfLineWidth;\n }\n return false;\n}\n\nfunction ellipseDistance(squareX, squareY, rx, ry) {\n return squareX / (rx * rx) + squareY / (ry * ry);\n}\nfunction isPointInPath$7(displayObject, position, isClipPath) {\n var _ref = displayObject.parsedStyle,\n _ref$cx = _ref.cx,\n cx = _ref$cx === void 0 ? 0 : _ref$cx,\n _ref$cy = _ref.cy,\n cy = _ref$cy === void 0 ? 0 : _ref$cy,\n rx = _ref.rx,\n ry = _ref.ry,\n fill = _ref.fill,\n stroke = _ref.stroke,\n _ref$lineWidth = _ref.lineWidth,\n lineWidth = _ref$lineWidth === void 0 ? 1 : _ref$lineWidth,\n _ref$increasedLineWid = _ref.increasedLineWidthForHitTesting,\n increasedLineWidthForHitTesting = _ref$increasedLineWid === void 0 ? 0 : _ref$increasedLineWid,\n _ref$pointerEvents = _ref.pointerEvents,\n pointerEvents = _ref$pointerEvents === void 0 ? 'auto' : _ref$pointerEvents;\n var x = position.x,\n y = position.y;\n var _isFillOrStrokeAffect = isFillOrStrokeAffected(pointerEvents, fill, stroke),\n _isFillOrStrokeAffect2 = _slicedToArray(_isFillOrStrokeAffect, 2),\n hasFill = _isFillOrStrokeAffect2[0],\n hasStroke = _isFillOrStrokeAffect2[1];\n var halfLineWith = (lineWidth + increasedLineWidthForHitTesting) / 2;\n var squareX = (x - cx) * (x - cx);\n var squareY = (y - cy) * (y - cy);\n // 使用椭圆的公式: x*x/rx*rx + y*y/ry*ry = 1;\n if (hasFill && hasStroke || isClipPath) {\n return ellipseDistance(squareX, squareY, rx + halfLineWith, ry + halfLineWith) <= 1;\n }\n if (hasFill) {\n return ellipseDistance(squareX, squareY, rx, ry) <= 1;\n }\n if (hasStroke) {\n return ellipseDistance(squareX, squareY, rx - halfLineWith, ry - halfLineWith) >= 1 && ellipseDistance(squareX, squareY, rx + halfLineWith, ry + halfLineWith) <= 1;\n }\n return false;\n}\n\nfunction inBox(minX, minY, width, height, x, y) {\n return x >= minX && x <= minX + width && y >= minY && y <= minY + height;\n}\nfunction inRect(minX, minY, width, height, lineWidth, x, y) {\n var halfWidth = lineWidth / 2;\n // 将四个边看做矩形来检测,比边的检测算法要快\n return inBox(minX - halfWidth, minY - halfWidth, width, lineWidth, x, y) ||\n // 上边\n inBox(minX + width - halfWidth, minY - halfWidth, lineWidth, height, x, y) ||\n // 右边\n inBox(minX + halfWidth, minY + height - halfWidth, width, lineWidth, x, y) ||\n // 下边\n inBox(minX - halfWidth, minY + halfWidth, lineWidth, height, x, y); // 左边\n}\nfunction inArc(cx, cy, r, startAngle, endAngle, lineWidth, x, y) {\n var angle = (Math.atan2(y - cy, x - cx) + Math.PI * 2) % (Math.PI * 2); // 转换到 0 - 2 * Math.PI 之间\n // if (angle < startAngle || angle > endAngle) {\n // return false;\n // }\n var point = {\n x: cx + r * Math.cos(angle),\n y: cy + r * Math.sin(angle)\n };\n return distance(point.x, point.y, x, y) <= lineWidth / 2;\n}\nfunction inLine(x1, y1, x2, y2, lineWidth, x, y) {\n var minX = Math.min(x1, x2);\n var maxX = Math.max(x1, x2);\n var minY = Math.min(y1, y2);\n var maxY = Math.max(y1, y2);\n var halfWidth = lineWidth / 2;\n // 因为目前的方案是计算点到直线的距离,而有可能会在延长线上,所以要先判断是否在包围盒内\n // 这种方案会在水平或者竖直的情况下载线的延长线上有半 lineWidth 的误差\n if (!(x >= minX - halfWidth && x <= maxX + halfWidth && y >= minY - halfWidth && y <= maxY + halfWidth)) {\n return false;\n }\n // 因为已经计算了包围盒,所以仅需要计算到直线的距离即可,可以显著提升性能\n return linePointToLine(x1, y1, x2, y2, x, y) <= lineWidth / 2;\n}\nfunction inPolyline(points, lineWidth, x, y, isClose) {\n var count = points.length;\n if (count < 2) {\n return false;\n }\n for (var i = 0; i < count - 1; i++) {\n var x1 = points[i][0];\n var y1 = points[i][1];\n var x2 = points[i + 1][0];\n var y2 = points[i + 1][1];\n if (inLine(x1, y1, x2, y2, lineWidth, x, y)) {\n return true;\n }\n }\n\n // 如果封闭,则计算起始点和结束点的边\n if (isClose) {\n var first = points[0];\n var last = points[count - 1];\n if (inLine(first[0], first[1], last[0], last[1], lineWidth, x, y)) {\n return true;\n }\n }\n return false;\n}\n\n// 多边形的射线检测,参考:https://blog.csdn.net/WilliamSun0122/article/details/77994526\nvar tolerance = 1e-6;\n// 三态函数,判断两个double在eps精度下的大小关系\nfunction dcmp(x) {\n if (Math.abs(x) < tolerance) {\n return 0;\n }\n return x < 0 ? -1 : 1;\n}\n\n// 判断点Q是否在p1和p2的线段上\nfunction onSegment(p1, p2, q) {\n if ((q[0] - p1[0]) * (p2[1] - p1[1]) === (p2[0] - p1[0]) * (q[1] - p1[1]) && Math.min(p1[0], p2[0]) <= q[0] && q[0] <= Math.max(p1[0], p2[0]) && Math.min(p1[1], p2[1]) <= q[1] && q[1] <= Math.max(p1[1], p2[1])) {\n return true;\n }\n return false;\n}\n\n// 判断点P在多边形内-射线法\nfunction inPolygon(points, x, y) {\n var isHit = false;\n var n = points.length;\n if (n <= 2) {\n // svg 中点小于 3 个时,不显示,也无法被拾取\n return false;\n }\n for (var i = 0; i < n; i++) {\n var p1 = points[i];\n var p2 = points[(i + 1) % n];\n if (onSegment(p1, p2, [x, y])) {\n // 点在多边形一条边上\n return true;\n }\n // 前一个判断min(p1[1],p2[1]) 0 !== dcmp(p2[1] - y) > 0 && dcmp(x - (y - p1[1]) * (p1[0] - p2[0]) / (p1[1] - p2[1]) - p1[0]) < 0) {\n isHit = !isHit;\n }\n }\n return isHit;\n}\nfunction inPolygons(polygons, x, y) {\n var isHit = false;\n for (var i = 0; i < polygons.length; i++) {\n var points = polygons[i];\n isHit = inPolygon(points, x, y);\n if (isHit) {\n break;\n }\n }\n return isHit;\n}\n\nfunction isPointInPath$6(displayObject, position, isClipPath) {\n var _ref = displayObject.parsedStyle,\n x1 = _ref.x1,\n y1 = _ref.y1,\n x2 = _ref.x2,\n y2 = _ref.y2,\n _ref$lineWidth = _ref.lineWidth,\n lineWidth = _ref$lineWidth === void 0 ? 1 : _ref$lineWidth,\n _ref$increasedLineWid = _ref.increasedLineWidthForHitTesting,\n increasedLineWidthForHitTesting = _ref$increasedLineWid === void 0 ? 0 : _ref$increasedLineWid,\n _ref$pointerEvents = _ref.pointerEvents,\n pointerEvents = _ref$pointerEvents === void 0 ? 'auto' : _ref$pointerEvents,\n fill = _ref.fill,\n stroke = _ref.stroke;\n var _isFillOrStrokeAffect = isFillOrStrokeAffected(pointerEvents, fill, stroke),\n _isFillOrStrokeAffect2 = _slicedToArray(_isFillOrStrokeAffect, 2),\n hasStroke = _isFillOrStrokeAffect2[1];\n if (!hasStroke && !isClipPath || !lineWidth) {\n return false;\n }\n return inLine(x1, y1, x2, y2, lineWidth + increasedLineWidthForHitTesting, position.x, position.y);\n}\n\n// TODO: replace it with method in @antv/util\nfunction isPointInStroke(segments, lineWidth, px, py, length) {\n var isHit = false;\n var halfWidth = lineWidth / 2;\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n var currentPoint = segment.currentPoint,\n params = segment.params,\n prePoint = segment.prePoint,\n box = segment.box;\n // 如果在前面已经生成过包围盒,直接按照包围盒计算\n if (box && !inBox(box.x - halfWidth, box.y - halfWidth, box.width + lineWidth, box.height + lineWidth, px, py)) {\n continue;\n }\n switch (segment.command) {\n // L 和 Z 都是直线, M 不进行拾取\n case 'L':\n case 'Z':\n isHit = inLine(prePoint[0], prePoint[1], currentPoint[0], currentPoint[1], lineWidth, px, py);\n if (isHit) {\n return true;\n }\n break;\n case 'Q':\n var qDistance = quadPointDistance(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4], px, py);\n isHit = qDistance <= lineWidth / 2;\n if (isHit) {\n return true;\n }\n break;\n case 'C':\n var cDistance = cubicPointDistance(prePoint[0],\n // 上一段结束位置, 即 C 的起始点\n prePoint[1], params[1],\n // 'C' 的参数,1、2 为第一个控制点,3、4 为第二个控制点,5、6 为结束点\n params[2], params[3], params[4], params[5], params[6], px, py, length);\n isHit = cDistance <= lineWidth / 2;\n if (isHit) {\n return true;\n }\n break;\n case 'A':\n // cache conversion result\n if (!segment.cubicParams) {\n segment.cubicParams = arcToCubic(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4], params[5], params[6], params[7], undefined);\n }\n var args = segment.cubicParams;\n\n // fixArc\n var prePointInCubic = prePoint;\n for (var _i = 0; _i < args.length; _i += 6) {\n var _cDistance = cubicPointDistance(prePointInCubic[0],\n // 上一段结束位置, 即 C 的起始点\n prePointInCubic[1], args[_i], args[_i + 1], args[_i + 2], args[_i + 3], args[_i + 4], args[_i + 5], px, py, length);\n prePointInCubic = [args[_i + 4], args[_i + 5]];\n isHit = _cDistance <= lineWidth / 2;\n if (isHit) {\n return true;\n }\n }\n break;\n }\n }\n return isHit;\n}\nfunction isPointInPath$5(displayObject, position, isClipPath, isPointInPath, renderingPluginContext, runtime) {\n var _ref = displayObject.parsedStyle,\n _ref$lineWidth = _ref.lineWidth,\n lineWidth = _ref$lineWidth === void 0 ? 1 : _ref$lineWidth,\n _ref$increasedLineWid = _ref.increasedLineWidthForHitTesting,\n increasedLineWidthForHitTesting = _ref$increasedLineWid === void 0 ? 0 : _ref$increasedLineWid,\n stroke = _ref.stroke,\n fill = _ref.fill,\n d = _ref.d,\n _ref$pointerEvents = _ref.pointerEvents,\n pointerEvents = _ref$pointerEvents === void 0 ? 'auto' : _ref$pointerEvents;\n var segments = d.segments,\n hasArc = d.hasArc,\n polylines = d.polylines,\n polygons = d.polygons;\n var _isFillOrStrokeAffect = isFillOrStrokeAffected(pointerEvents,\n // Only a closed path can be filled.\n (polygons === null || polygons === void 0 ? void 0 : polygons.length) && fill, stroke),\n _isFillOrStrokeAffect2 = _slicedToArray(_isFillOrStrokeAffect, 2),\n hasFill = _isFillOrStrokeAffect2[0],\n hasStroke = _isFillOrStrokeAffect2[1];\n var totalLength = getOrCalculatePathTotalLength(displayObject);\n var isHit = false;\n if (hasFill || isClipPath) {\n if (hasArc) {\n // 存在曲线时,暂时使用 canvas 的 api 计算,后续可以进行多边形切割\n isHit = isPointInPath(displayObject, position);\n } else {\n // 提取出来的多边形包含闭合的和非闭合的,在这里统一按照多边形处理\n isHit = inPolygons(polygons, position.x, position.y) || inPolygons(polylines, position.x, position.y);\n }\n return isHit;\n }\n if (hasStroke || isClipPath) {\n isHit = isPointInStroke(segments, lineWidth + increasedLineWidthForHitTesting, position.x, position.y, totalLength);\n }\n return isHit;\n}\n\nfunction isPointInPath$4(displayObject, position, isClipPath) {\n var _ref = displayObject.parsedStyle,\n stroke = _ref.stroke,\n fill = _ref.fill,\n _ref$lineWidth = _ref.lineWidth,\n lineWidth = _ref$lineWidth === void 0 ? 1 : _ref$lineWidth,\n _ref$increasedLineWid = _ref.increasedLineWidthForHitTesting,\n increasedLineWidthForHitTesting = _ref$increasedLineWid === void 0 ? 0 : _ref$increasedLineWid,\n points = _ref.points,\n _ref$pointerEvents = _ref.pointerEvents,\n pointerEvents = _ref$pointerEvents === void 0 ? 'auto' : _ref$pointerEvents;\n var _isFillOrStrokeAffect = isFillOrStrokeAffected(pointerEvents, fill, stroke),\n _isFillOrStrokeAffect2 = _slicedToArray(_isFillOrStrokeAffect, 2),\n hasFill = _isFillOrStrokeAffect2[0],\n hasStroke = _isFillOrStrokeAffect2[1];\n var isHit = false;\n if (hasStroke || isClipPath) {\n isHit = inPolyline(points.points, lineWidth + increasedLineWidthForHitTesting, position.x, position.y, true);\n }\n if (!isHit && (hasFill || isClipPath)) {\n isHit = inPolygon(points.points, position.x, position.y);\n }\n return isHit;\n}\n\nfunction isPointInPath$3(displayObject, position, isClipPath) {\n var _ref = displayObject.parsedStyle,\n _ref$lineWidth = _ref.lineWidth,\n lineWidth = _ref$lineWidth === void 0 ? 1 : _ref$lineWidth,\n _ref$increasedLineWid = _ref.increasedLineWidthForHitTesting,\n increasedLineWidthForHitTesting = _ref$increasedLineWid === void 0 ? 0 : _ref$increasedLineWid,\n points = _ref.points,\n _ref$pointerEvents = _ref.pointerEvents,\n pointerEvents = _ref$pointerEvents === void 0 ? 'auto' : _ref$pointerEvents,\n fill = _ref.fill,\n stroke = _ref.stroke;\n var _isFillOrStrokeAffect = isFillOrStrokeAffected(pointerEvents, fill, stroke),\n _isFillOrStrokeAffect2 = _slicedToArray(_isFillOrStrokeAffect, 2),\n hasStroke = _isFillOrStrokeAffect2[1];\n if (!hasStroke && !isClipPath || !lineWidth) {\n return false;\n }\n return inPolyline(points.points, lineWidth + increasedLineWidthForHitTesting, position.x, position.y, false);\n}\n\nfunction isPointInPath$2(displayObject, position, isClipPath, isPointInPath, runtime) {\n var _ref = displayObject.parsedStyle,\n radius = _ref.radius,\n fill = _ref.fill,\n stroke = _ref.stroke,\n _ref$lineWidth = _ref.lineWidth,\n lineWidth = _ref$lineWidth === void 0 ? 1 : _ref$lineWidth,\n _ref$increasedLineWid = _ref.increasedLineWidthForHitTesting,\n increasedLineWidthForHitTesting = _ref$increasedLineWid === void 0 ? 0 : _ref$increasedLineWid,\n _ref$x = _ref.x,\n x = _ref$x === void 0 ? 0 : _ref$x,\n _ref$y = _ref.y,\n y = _ref$y === void 0 ? 0 : _ref$y,\n width = _ref.width,\n height = _ref.height,\n _ref$pointerEvents = _ref.pointerEvents,\n pointerEvents = _ref$pointerEvents === void 0 ? 'auto' : _ref$pointerEvents;\n var _isFillOrStrokeAffect = isFillOrStrokeAffected(pointerEvents, fill, stroke),\n _isFillOrStrokeAffect2 = _slicedToArray(_isFillOrStrokeAffect, 2),\n hasFill = _isFillOrStrokeAffect2[0],\n hasStroke = _isFillOrStrokeAffect2[1];\n var hasRadius = radius && radius.some(function (r) {\n return r !== 0;\n });\n var lineWidthForHitTesting = lineWidth + increasedLineWidthForHitTesting;\n\n // 无圆角时的策略\n if (!hasRadius) {\n var halfWidth = lineWidthForHitTesting / 2;\n // 同时填充和带有边框\n if (hasFill && hasStroke || isClipPath) {\n return inBox(x - halfWidth, y - halfWidth, width + halfWidth, height + halfWidth, position.x, position.y);\n }\n // 仅填充\n if (hasFill) {\n return inBox(x, y, width, height, position.x, position.y);\n }\n if (hasStroke) {\n return inRect(x, y, width, height, lineWidthForHitTesting, position.x, position.y);\n }\n } else {\n var isHit = false;\n if (hasStroke || isClipPath) {\n isHit = inRectWithRadius(x, y, width, height, radius.map(function (r) {\n return clamp(r, 0, Math.min(Math.abs(width) / 2, Math.abs(height) / 2));\n }), lineWidthForHitTesting, position.x, position.y);\n }\n // 仅填充时带有圆角的矩形直接通过图形拾取\n // 以后可以改成纯数学的近似拾取,将圆弧切割成多边形\n if (!isHit && (hasFill || isClipPath)) {\n isHit = isPointInPath(displayObject, position);\n }\n return isHit;\n }\n return false;\n}\nfunction inRectWithRadius(minX, minY, width, height, radiusArray, lineWidth, x, y) {\n var _radiusArray = _slicedToArray(radiusArray, 4),\n tlr = _radiusArray[0],\n trr = _radiusArray[1],\n brr = _radiusArray[2],\n blr = _radiusArray[3];\n return inLine(minX + tlr, minY, minX + width - trr, minY, lineWidth, x, y) || inLine(minX + width, minY + trr, minX + width, minY + height - brr, lineWidth, x, y) || inLine(minX + width - brr, minY + height, minX + blr, minY + height, lineWidth, x, y) || inLine(minX, minY + height - blr, minX, minY + tlr, lineWidth, x, y) || inArc(minX + width - trr, minY + trr, trr, 1.5 * Math.PI, 2 * Math.PI, lineWidth, x, y) || inArc(minX + width - brr, minY + height - brr, brr, 0, 0.5 * Math.PI, lineWidth, x, y) || inArc(minX + blr, minY + height - blr, blr, 0.5 * Math.PI, Math.PI, lineWidth, x, y) || inArc(minX + tlr, minY + tlr, tlr, Math.PI, 1.5 * Math.PI, lineWidth, x, y);\n}\n\nfunction isPointInPath$1(displayObject, position, isClipPath, isPointInPath, renderingPluginContext, runtime) {\n var _ref = displayObject.parsedStyle,\n _ref$pointerEvents = _ref.pointerEvents,\n pointerEvents = _ref$pointerEvents === void 0 ? 'auto' : _ref$pointerEvents,\n _ref$x = _ref.x,\n x = _ref$x === void 0 ? 0 : _ref$x,\n _ref$y = _ref.y,\n y = _ref$y === void 0 ? 0 : _ref$y,\n width = _ref.width,\n height = _ref.height;\n if (pointerEvents === 'non-transparent-pixel') {\n var offscreenCanvas = renderingPluginContext.config.offscreenCanvas;\n var canvas = runtime.offscreenCanvasCreator.getOrCreateCanvas(offscreenCanvas);\n var context = runtime.offscreenCanvasCreator.getOrCreateContext(offscreenCanvas, {\n willReadFrequently: true\n });\n canvas.width = width;\n canvas.height = height;\n renderingPluginContext.defaultStyleRendererFactory[Shape.IMAGE].render(context, _objectSpread(_objectSpread({}, displayObject.parsedStyle), {}, {\n x: 0,\n y: 0\n }), displayObject, undefined, undefined, undefined);\n var imagedata = context.getImageData(position.x - x, position.y - y, 1, 1).data;\n return imagedata.every(function (component) {\n return component !== 0;\n });\n }\n return true;\n}\n\nfunction isPointInPath(displayObject, position, isClipPath, isPointInPath) {\n var bounds = displayObject.getGeometryBounds();\n\n // @see https://stackoverflow.com/questions/28706989/how-do-i-check-if-a-mouse-click-is-inside-a-rotated-text-on-the-html5-canvas-in\n return position.x >= bounds.min[0] && position.y >= bounds.min[1] && position.x <= bounds.max[0] && position.y <= bounds.max[1];\n}\n\nvar Plugin = /*#__PURE__*/function (_AbstractRendererPlug) {\n function Plugin() {\n var _this;\n _classCallCheck(this, Plugin);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _callSuper(this, Plugin, [].concat(args));\n _this.name = 'canvas-picker';\n return _this;\n }\n _inherits(Plugin, _AbstractRendererPlug);\n return _createClass(Plugin, [{\n key: \"init\",\n value: function init() {\n var _pointInPathPickerFac;\n var pointInPathPickerFactory = (_pointInPathPickerFac = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_pointInPathPickerFac, Shape.CIRCLE, isPointInPath$8), Shape.ELLIPSE, isPointInPath$7), Shape.RECT, isPointInPath$2), Shape.LINE, isPointInPath$6), Shape.POLYLINE, isPointInPath$3), Shape.POLYGON, isPointInPath$4), Shape.PATH, isPointInPath$5), Shape.TEXT, isPointInPath), Shape.GROUP, null), Shape.IMAGE, isPointInPath$1), _defineProperty(_defineProperty(_pointInPathPickerFac, Shape.HTML, null), Shape.MESH, null));\n\n // @ts-ignore\n this.context.pointInPathPickerFactory = pointInPathPickerFactory;\n this.addRenderingPlugin(new CanvasPickerPlugin());\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n // @ts-ignore\n delete this.context.pointInPathPickerFactory;\n this.removeAllRenderingPlugins();\n }\n }]);\n}(AbstractRendererPlugin);\n\nexport { Plugin };\n//# sourceMappingURL=index.esm.js.map\n","function _classPrivateFieldBase(e, t) {\n if (!{}.hasOwnProperty.call(e, t)) throw new TypeError(\"attempted to use private field on non-instance\");\n return e;\n}\nexport { _classPrivateFieldBase as default };","var id = 0;\nfunction _classPrivateFieldKey(e) {\n return \"__private_\" + id++ + \"_\" + e;\n}\nexport { _classPrivateFieldKey as default };","/*!\n * @antv/g-plugin-canvas-renderer\n * @description A G plugin of renderer implementation with Canvas2D API\n * @version 2.2.23\n * @date 5/30/2025, 2:55:32 AM\n * @author AntVis\n * @docs https://g.antv.antgroup.com/\n */\nimport _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport _objectSpread from '@babel/runtime/helpers/objectSpread2';\nimport _classCallCheck from '@babel/runtime/helpers/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/createClass';\nimport _callSuper from '@babel/runtime/helpers/callSuper';\nimport _inherits from '@babel/runtime/helpers/inherits';\nimport { ElementEvent, AABB, CustomEvent, CanvasEvent, Shape, Node, GradientType, isPattern, AbstractRendererPlugin } from '@antv/g-lite';\nimport _slicedToArray from '@babel/runtime/helpers/slicedToArray';\nimport _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';\nimport _classPrivateFieldLooseBase from '@babel/runtime/helpers/classPrivateFieldLooseBase';\nimport _classPrivateFieldLooseKey from '@babel/runtime/helpers/classPrivateFieldLooseKey';\nimport { mat4, vec3 } from 'gl-matrix';\nimport { isNil } from '@antv/util';\nimport { ImagePool } from '@antv/g-plugin-image-loader';\n\nvar _renderState = /*#__PURE__*/_classPrivateFieldLooseKey(\"renderState\");\n/**\n * support 2 modes in rendering:\n * * immediate\n * * delayed: render at the end of frame with dirty-rectangle\n */\nvar CanvasRendererPlugin = /*#__PURE__*/function () {\n /**\n * RBush used in dirty rectangle rendering\n */\n\n function CanvasRendererPlugin(canvasRendererPluginOptions // private styleRendererFactory: Record,\n ) {\n _classCallCheck(this, CanvasRendererPlugin);\n this.removedRBushNodeAABBs = [];\n this.renderQueue = [];\n Object.defineProperty(this, _renderState, {\n writable: true,\n value: {\n restoreStack: [],\n prevObject: null,\n currentContext: new Map()\n }\n });\n this.clearFullScreenLastFrame = false;\n this.clearFullScreen = false;\n /**\n * view projection matrix\n */\n this.vpMatrix = mat4.create();\n this.dprMatrix = mat4.create();\n this.tmpMat4 = mat4.create();\n this.vec3a = vec3.create();\n this.vec3b = vec3.create();\n this.vec3c = vec3.create();\n this.vec3d = vec3.create();\n this.canvasRendererPluginOptions = canvasRendererPluginOptions;\n }\n return _createClass(CanvasRendererPlugin, [{\n key: \"apply\",\n value: function apply(context, runtime) {\n var _this = this;\n this.context = context;\n var _this$context = this.context,\n config = _this$context.config,\n camera = _this$context.camera,\n renderingService = _this$context.renderingService,\n renderingContext = _this$context.renderingContext,\n rBushRoot = _this$context.rBushRoot,\n pathGeneratorFactory = _this$context.pathGeneratorFactory;\n var enableRenderingOptimization = config.renderer.getConfig().enableRenderingOptimization;\n config.renderer.getConfig().enableDirtyCheck = false;\n config.renderer.getConfig().enableDirtyRectangleRendering = false;\n this.rBush = rBushRoot;\n this.pathGeneratorFactory = pathGeneratorFactory;\n var contextService = context.contextService;\n var canvas = renderingContext.root.ownerDocument.defaultView;\n var handleUnmounted = function handleUnmounted(e) {\n var object = e.target;\n\n // remove r-bush node\n // @ts-ignore\n var rBushNode = object.rBushNode;\n if (rBushNode.aabb) {\n // save removed aabbs for dirty-rectangle rendering later\n _this.removedRBushNodeAABBs.push(rBushNode.aabb);\n }\n };\n var handleCulled = function handleCulled(e) {\n var object = e.target;\n // @ts-ignore\n var rBushNode = object.rBushNode;\n if (rBushNode.aabb) {\n // save removed aabbs for dirty-rectangle rendering later\n _this.removedRBushNodeAABBs.push(rBushNode.aabb);\n }\n };\n renderingService.hooks.init.tap(CanvasRendererPlugin.tag, function () {\n canvas.addEventListener(ElementEvent.UNMOUNTED, handleUnmounted);\n canvas.addEventListener(ElementEvent.CULLED, handleCulled);\n\n // clear fullscreen\n var dpr = contextService.getDPR();\n var width = config.width,\n height = config.height;\n var context = contextService.getContext();\n _this.clearRect(context, 0, 0, width * dpr, height * dpr, config.background);\n });\n renderingService.hooks.destroy.tap(CanvasRendererPlugin.tag, function () {\n canvas.removeEventListener(ElementEvent.UNMOUNTED, handleUnmounted);\n canvas.removeEventListener(ElementEvent.CULLED, handleCulled);\n _this.renderQueue = [];\n _this.removedRBushNodeAABBs = [];\n _classPrivateFieldLooseBase(_this, _renderState)[_renderState] = {\n restoreStack: [],\n prevObject: null,\n currentContext: null\n };\n });\n renderingService.hooks.beginFrame.tap(CanvasRendererPlugin.tag, function () {\n var _canvas$context$rende;\n var context = contextService.getContext();\n var dpr = contextService.getDPR();\n var width = config.width,\n height = config.height;\n var _this$canvasRendererP = _this.canvasRendererPluginOptions,\n dirtyObjectNumThreshold = _this$canvasRendererP.dirtyObjectNumThreshold,\n dirtyObjectRatioThreshold = _this$canvasRendererP.dirtyObjectRatioThreshold;\n\n // some heuristic conditions such as 80% object changed\n var _renderingService$get = renderingService.getStats(),\n total = _renderingService$get.total,\n rendered = _renderingService$get.rendered;\n var ratio = rendered / total;\n _this.clearFullScreen = _this.clearFullScreenLastFrame ||\n // @ts-ignore\n !((_canvas$context$rende = canvas.context.renderingPlugins[1]) !== null && _canvas$context$rende !== void 0 && _canvas$context$rende.isFirstTimeRenderingFinished) || renderingService.disableDirtyRectangleRendering() || rendered > dirtyObjectNumThreshold && ratio > dirtyObjectRatioThreshold;\n if (context) {\n if (typeof context.resetTransform === 'function') {\n context.resetTransform();\n } else {\n context.setTransform(1, 0, 0, 1, 0, 0);\n }\n if (_this.clearFullScreen) {\n _this.clearRect(context, 0, 0, width * dpr, height * dpr, config.background);\n }\n }\n });\n\n /**\n * render objects by z-index\n *\n * - The level of the child node will be affected by the level of the parent node\n */\n var renderByZIndex = function renderByZIndex(object, context) {\n var stack = [object];\n while (stack.length > 0) {\n var _currentObject$sortab;\n var currentObject = stack.pop();\n if (currentObject.isVisible() && !currentObject.isCulled()) {\n if (enableRenderingOptimization) {\n _this.renderDisplayObjectOptimized(currentObject, context, _this.context, _classPrivateFieldLooseBase(_this, _renderState)[_renderState], runtime);\n } else {\n _this.renderDisplayObject(currentObject, context, _this.context, _classPrivateFieldLooseBase(_this, _renderState)[_renderState], runtime);\n }\n }\n var objects = ((_currentObject$sortab = currentObject.sortable) === null || _currentObject$sortab === void 0 || (_currentObject$sortab = _currentObject$sortab.sorted) === null || _currentObject$sortab === void 0 ? void 0 : _currentObject$sortab.length) > 0 ? currentObject.sortable.sorted : currentObject.childNodes;\n // should account for z-index\n for (var i = objects.length - 1; i >= 0; i--) {\n stack.push(objects[i]);\n }\n }\n };\n\n // render at the end of frame\n renderingService.hooks.endFrame.tap(CanvasRendererPlugin.tag, function () {\n // Skip rendering.\n if (renderingContext.root.childNodes.length === 0) {\n _this.clearFullScreenLastFrame = true;\n return;\n }\n enableRenderingOptimization = config.renderer.getConfig().enableRenderingOptimization;\n\n // init\n _classPrivateFieldLooseBase(_this, _renderState)[_renderState] = {\n restoreStack: [],\n prevObject: null,\n currentContext: _classPrivateFieldLooseBase(_this, _renderState)[_renderState].currentContext\n };\n _classPrivateFieldLooseBase(_this, _renderState)[_renderState].currentContext.clear();\n _this.clearFullScreenLastFrame = false;\n var context = contextService.getContext();\n // clear & clip dirty rectangle\n var dpr = contextService.getDPR();\n mat4.fromScaling(_this.dprMatrix, [dpr, dpr, 1]);\n mat4.multiply(_this.vpMatrix, _this.dprMatrix, camera.getOrthoMatrix());\n if (_this.clearFullScreen) {\n // console.time('renderByZIndex');\n if (enableRenderingOptimization) {\n context.save();\n renderByZIndex(renderingContext.root, context);\n context.restore();\n } else {\n renderByZIndex(renderingContext.root, context);\n }\n // console.timeEnd('renderByZIndex');\n\n _this.removedRBushNodeAABBs = [];\n } else {\n // console.log('canvas renderer next...', this.renderQueue);\n // merge removed AABB\n var dirtyRenderBounds = _this.safeMergeAABB.apply(_this, [_this.mergeDirtyAABBs(_this.renderQueue)].concat(_toConsumableArray(_this.removedRBushNodeAABBs.map(function (_ref) {\n var minX = _ref.minX,\n minY = _ref.minY,\n maxX = _ref.maxX,\n maxY = _ref.maxY;\n var aabb = new AABB();\n aabb.setMinMax(\n // vec3.fromValues(minX, minY, 0),\n // vec3.fromValues(maxX, maxY, 0),\n [minX, minY, 0], [maxX, maxY, 0]);\n return aabb;\n }))));\n _this.removedRBushNodeAABBs = [];\n if (AABB.isEmpty(dirtyRenderBounds)) {\n _this.renderQueue = [];\n return;\n }\n var dirtyRect = _this.convertAABB2Rect(dirtyRenderBounds);\n var x = dirtyRect.x,\n y = dirtyRect.y,\n width = dirtyRect.width,\n height = dirtyRect.height;\n var tl = vec3.transformMat4(_this.vec3a, [x, y, 0], _this.vpMatrix);\n var tr = vec3.transformMat4(_this.vec3b, [x + width, y, 0], _this.vpMatrix);\n var bl = vec3.transformMat4(_this.vec3c, [x, y + height, 0], _this.vpMatrix);\n var br = vec3.transformMat4(_this.vec3d, [x + width, y + height, 0], _this.vpMatrix);\n var minx = Math.min(tl[0], tr[0], br[0], bl[0]);\n var miny = Math.min(tl[1], tr[1], br[1], bl[1]);\n var maxx = Math.max(tl[0], tr[0], br[0], bl[0]);\n var maxy = Math.max(tl[1], tr[1], br[1], bl[1]);\n var ix = Math.floor(minx);\n var iy = Math.floor(miny);\n var iwidth = Math.ceil(maxx - minx);\n var iheight = Math.ceil(maxy - miny);\n context.save();\n _this.clearRect(context, ix, iy, iwidth, iheight, config.background);\n context.beginPath();\n context.rect(ix, iy, iwidth, iheight);\n context.clip();\n\n // @see https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Transformations\n context.setTransform(_this.vpMatrix[0], _this.vpMatrix[1], _this.vpMatrix[4], _this.vpMatrix[5], _this.vpMatrix[12], _this.vpMatrix[13]);\n\n // draw dirty rectangle\n var _config$renderer$getC = config.renderer.getConfig(),\n enableDirtyRectangleRenderingDebug = _config$renderer$getC.enableDirtyRectangleRenderingDebug;\n if (enableDirtyRectangleRenderingDebug) {\n canvas.dispatchEvent(new CustomEvent(CanvasEvent.DIRTY_RECTANGLE, {\n dirtyRect: {\n x: ix,\n y: iy,\n width: iwidth,\n height: iheight\n }\n }));\n }\n\n // search objects intersect with dirty rectangle\n var dirtyObjects = _this.searchDirtyObjects(dirtyRenderBounds);\n\n // do rendering\n dirtyObjects\n // sort by z-index\n .sort(function (a, b) {\n return a.sortable.renderOrder - b.sortable.renderOrder;\n }).forEach(function (object) {\n // culled object should not be rendered\n if (object && object.isVisible() && !object.isCulled()) {\n _this.renderDisplayObject(object, context, _this.context, _classPrivateFieldLooseBase(_this, _renderState)[_renderState], runtime);\n }\n });\n context.restore();\n\n // save dirty AABBs in last frame\n _this.renderQueue.forEach(function (object) {\n _this.saveDirtyAABB(object);\n });\n\n // clear queue\n _this.renderQueue = [];\n }\n\n // pop restore stack, eg. root -> parent -> child\n _classPrivateFieldLooseBase(_this, _renderState)[_renderState].restoreStack.forEach(function () {\n context.restore();\n });\n // clear restore stack\n _classPrivateFieldLooseBase(_this, _renderState)[_renderState].restoreStack = [];\n });\n renderingService.hooks.render.tap(CanvasRendererPlugin.tag, function (object) {\n if (!_this.clearFullScreen) {\n // render at the end of frame\n _this.renderQueue.push(object);\n }\n });\n }\n }, {\n key: \"clearRect\",\n value: function clearRect(context, x, y, width, height, background) {\n // clearRect is faster than fillRect @see https://stackoverflow.com/a/30830253\n context.clearRect(x, y, width, height);\n if (background) {\n context.fillStyle = background;\n context.fillRect(x, y, width, height);\n }\n }\n }, {\n key: \"renderDisplayObjectOptimized\",\n value: function renderDisplayObjectOptimized(object, context, canvasContext, renderState, runtime) {\n var nodeName = object.nodeName;\n var updateTransform = false;\n var clipDraw = false;\n\n // @ts-ignore\n var styleRenderer = this.context.styleRendererFactory[nodeName];\n var generatePath = this.pathGeneratorFactory[nodeName];\n\n // clip path\n var clipPath = object.parsedStyle.clipPath;\n if (clipPath) {\n updateTransform = !renderState.prevObject || !mat4.exactEquals(clipPath.getWorldTransform(), renderState.prevObject.getWorldTransform());\n if (updateTransform) {\n this.applyWorldTransform(context, clipPath);\n renderState.prevObject = null;\n }\n\n // generate path in local space\n var _generatePath = this.pathGeneratorFactory[clipPath.nodeName];\n if (_generatePath) {\n context.save();\n clipDraw = true;\n context.beginPath();\n _generatePath(context, clipPath.parsedStyle);\n context.closePath();\n context.clip();\n }\n }\n\n // fill & stroke\n\n if (styleRenderer) {\n updateTransform = !renderState.prevObject || !mat4.exactEquals(object.getWorldTransform(), renderState.prevObject.getWorldTransform());\n if (updateTransform) {\n this.applyWorldTransform(context, object);\n }\n var forceUpdateStyle = !renderState.prevObject;\n if (!forceUpdateStyle) {\n var prevNodeName = renderState.prevObject.nodeName;\n if (nodeName === Shape.TEXT) {\n forceUpdateStyle = prevNodeName !== Shape.TEXT;\n } else if (nodeName === Shape.IMAGE) {\n forceUpdateStyle = prevNodeName !== Shape.IMAGE;\n } else {\n forceUpdateStyle = prevNodeName === Shape.TEXT || prevNodeName === Shape.IMAGE;\n }\n }\n styleRenderer.applyStyleToContext(context, object, forceUpdateStyle, renderState);\n renderState.prevObject = object;\n }\n if (generatePath) {\n context.beginPath();\n generatePath(context, object.parsedStyle);\n if (nodeName !== Shape.LINE && nodeName !== Shape.PATH && nodeName !== Shape.POLYLINE) {\n context.closePath();\n }\n }\n\n // fill & stroke\n if (styleRenderer) {\n styleRenderer.drawToContext(context, object, _classPrivateFieldLooseBase(this, _renderState)[_renderState], this, runtime);\n }\n if (clipDraw) {\n context.restore();\n }\n\n // finish rendering, clear dirty flag\n object.renderable.dirty = false;\n }\n }, {\n key: \"renderDisplayObject\",\n value: function renderDisplayObject(object, context, canvasContext, renderState, runtime) {\n var nodeName = object.nodeName;\n\n // restore to its ancestor\n\n var parent = renderState.restoreStack[renderState.restoreStack.length - 1];\n if (parent && !(object.compareDocumentPosition(parent) & Node.DOCUMENT_POSITION_CONTAINS)) {\n context.restore();\n renderState.restoreStack.pop();\n }\n\n // @ts-ignore\n var styleRenderer = this.context.styleRendererFactory[nodeName];\n var generatePath = this.pathGeneratorFactory[nodeName];\n\n // clip path\n var clipPath = object.parsedStyle.clipPath;\n if (clipPath) {\n this.applyWorldTransform(context, clipPath);\n\n // generate path in local space\n var _generatePath2 = this.pathGeneratorFactory[clipPath.nodeName];\n if (_generatePath2) {\n context.save();\n\n // save clip\n renderState.restoreStack.push(object);\n context.beginPath();\n _generatePath2(context, clipPath.parsedStyle);\n context.closePath();\n context.clip();\n }\n }\n\n // fill & stroke\n\n if (styleRenderer) {\n this.applyWorldTransform(context, object);\n context.save();\n\n // apply attributes to context\n this.applyAttributesToContext(context, object);\n }\n if (generatePath) {\n context.beginPath();\n generatePath(context, object.parsedStyle);\n if (nodeName !== Shape.LINE && nodeName !== Shape.PATH && nodeName !== Shape.POLYLINE) {\n context.closePath();\n }\n }\n\n // fill & stroke\n if (styleRenderer) {\n styleRenderer.render(context, object.parsedStyle, object, canvasContext, this, runtime);\n\n // restore applied attributes, eg. shadowBlur shadowColor...\n context.restore();\n }\n\n // finish rendering, clear dirty flag\n object.renderable.dirty = false;\n }\n }, {\n key: \"applyAttributesToContext\",\n value: function applyAttributesToContext(context, object) {\n var _ref2 = object.parsedStyle,\n stroke = _ref2.stroke,\n fill = _ref2.fill,\n opacity = _ref2.opacity,\n lineDash = _ref2.lineDash,\n lineDashOffset = _ref2.lineDashOffset;\n // @see https://developer.mozilla.org/zh-CN/docs/Web/API/CanvasRenderingContext2D/setLineDash\n if (lineDash) {\n context.setLineDash(lineDash);\n }\n\n // @see https://developer.mozilla.org/zh-CN/docs/Web/API/CanvasRenderingContext2D/lineDashOffset\n if (!isNil(lineDashOffset)) {\n context.lineDashOffset = lineDashOffset;\n }\n if (!isNil(opacity)) {\n context.globalAlpha *= opacity;\n }\n if (!isNil(stroke) && !Array.isArray(stroke) && !stroke.isNone) {\n context.strokeStyle = object.attributes.stroke;\n }\n if (!isNil(fill) && !Array.isArray(fill) && !fill.isNone) {\n context.fillStyle = object.attributes.fill;\n }\n }\n }, {\n key: \"convertAABB2Rect\",\n value: function convertAABB2Rect(aabb) {\n var min = aabb.getMin();\n var max = aabb.getMax();\n // expand the rectangle a bit to avoid artifacts\n // @see https://www.yuque.com/antv/ou292n/bi8nix#ExvCu\n var minX = Math.floor(min[0]);\n var minY = Math.floor(min[1]);\n var maxX = Math.ceil(max[0]);\n var maxY = Math.ceil(max[1]);\n var width = maxX - minX;\n var height = maxY - minY;\n return {\n x: minX,\n y: minY,\n width: width,\n height: height\n };\n }\n\n /**\n * TODO: merge dirty rectangles with some strategies.\n * For now, we just simply merge all the rectangles into one.\n * @see https://idom.me/articles/841.html\n */\n }, {\n key: \"mergeDirtyAABBs\",\n value: function mergeDirtyAABBs(dirtyObjects) {\n // merge into a big AABB\n // TODO: skip descendant if ancestor is caculated, but compareNodePosition is really slow\n var aabb = new AABB();\n dirtyObjects.forEach(function (object) {\n var renderBounds = object.getRenderBounds();\n aabb.add(renderBounds);\n var dirtyRenderBounds = object.renderable.dirtyRenderBounds;\n if (dirtyRenderBounds) {\n aabb.add(dirtyRenderBounds);\n }\n });\n return aabb;\n }\n }, {\n key: \"searchDirtyObjects\",\n value: function searchDirtyObjects(dirtyRectangle) {\n // search in r-tree, get all affected nodes\n var _dirtyRectangle$getMi = dirtyRectangle.getMin(),\n _dirtyRectangle$getMi2 = _slicedToArray(_dirtyRectangle$getMi, 2),\n minX = _dirtyRectangle$getMi2[0],\n minY = _dirtyRectangle$getMi2[1];\n var _dirtyRectangle$getMa = dirtyRectangle.getMax(),\n _dirtyRectangle$getMa2 = _slicedToArray(_dirtyRectangle$getMa, 2),\n maxX = _dirtyRectangle$getMa2[0],\n maxY = _dirtyRectangle$getMa2[1];\n var rBushNodes = this.rBush.search({\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY\n });\n return rBushNodes.map(function (_ref3) {\n var displayObject = _ref3.displayObject;\n return displayObject;\n });\n }\n }, {\n key: \"saveDirtyAABB\",\n value: function saveDirtyAABB(object) {\n var renderable = object.renderable;\n if (!renderable.dirtyRenderBounds) {\n renderable.dirtyRenderBounds = new AABB();\n }\n var renderBounds = object.getRenderBounds();\n if (renderBounds) {\n // save last dirty aabb\n renderable.dirtyRenderBounds.update(renderBounds.center, renderBounds.halfExtents);\n }\n }\n }, {\n key: \"applyWorldTransform\",\n value: function applyWorldTransform(context, object, matrix) {\n // apply clip shape's RTS\n if (matrix) {\n mat4.copy(this.tmpMat4, object.getLocalTransform());\n mat4.multiply(this.tmpMat4, matrix, this.tmpMat4);\n mat4.multiply(this.tmpMat4, this.vpMatrix, this.tmpMat4);\n } else {\n // apply RTS transformation in world space\n mat4.copy(this.tmpMat4, object.getWorldTransform());\n mat4.multiply(this.tmpMat4, this.vpMatrix, this.tmpMat4);\n }\n\n // @see https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Transformations\n context.setTransform(this.tmpMat4[0], this.tmpMat4[1], this.tmpMat4[4], this.tmpMat4[5], this.tmpMat4[12], this.tmpMat4[13]);\n }\n }, {\n key: \"safeMergeAABB\",\n value: function safeMergeAABB() {\n var merged = new AABB();\n for (var _len = arguments.length, aabbs = new Array(_len), _key = 0; _key < _len; _key++) {\n aabbs[_key] = arguments[_key];\n }\n aabbs.forEach(function (aabb) {\n merged.add(aabb);\n });\n return merged;\n }\n }]);\n}();\nCanvasRendererPlugin.tag = 'CanvasRenderer';\n\nfunction getPattern(pattern, object, context, canvasContext, plugin, runtime, imagePool) {\n var $offscreenCanvas;\n var dpr;\n if (pattern.image.nodeName === 'rect') {\n var _parsedStyle = pattern.image.parsedStyle,\n width = _parsedStyle.width,\n height = _parsedStyle.height;\n dpr = canvasContext.contextService.getDPR();\n var offscreenCanvas = canvasContext.config.offscreenCanvas;\n $offscreenCanvas = runtime.offscreenCanvasCreator.getOrCreateCanvas(offscreenCanvas);\n $offscreenCanvas.width = width * dpr;\n $offscreenCanvas.height = height * dpr;\n var offscreenCanvasContext = runtime.offscreenCanvasCreator.getOrCreateContext(offscreenCanvas);\n var renderState = {\n restoreStack: [],\n prevObject: null,\n currentContext: new Map()\n };\n\n // offscreenCanvasContext.scale(1 / dpr, 1 / dpr);\n\n pattern.image.forEach(function (object) {\n plugin.renderDisplayObject(object, offscreenCanvasContext, canvasContext, renderState, runtime);\n });\n renderState.restoreStack.forEach(function () {\n offscreenCanvasContext.restore();\n });\n }\n var canvasPattern = imagePool.getOrCreatePatternSync(object, pattern, context, $offscreenCanvas, dpr, object.getGeometryBounds().min, function () {\n // set dirty rectangle flag\n object.renderable.dirty = true;\n canvasContext.renderingService.dirtify();\n });\n return canvasPattern;\n}\nfunction getColor(parsedColor, object, context, imagePool) {\n var color;\n if (parsedColor.type === GradientType.LinearGradient || parsedColor.type === GradientType.RadialGradient) {\n var bounds = object.getGeometryBounds();\n var width = bounds && bounds.halfExtents[0] * 2 || 1;\n var height = bounds && bounds.halfExtents[1] * 2 || 1;\n var min = bounds && bounds.min || [0, 0];\n color = imagePool.getOrCreateGradient(_objectSpread(_objectSpread({\n type: parsedColor.type\n }, parsedColor.value), {}, {\n min: min,\n width: width,\n height: height\n }), context);\n }\n return color;\n}\n\nvar SHADOW_NUMBER_STYLE = ['shadowBlur', 'shadowOffsetX', 'shadowOffsetY'];\nvar STROKE_STYLE = ['lineCap', 'lineJoin', 'miterLimit'];\nvar DEFAULT_STYLE = {\n // common\n globalAlpha: 1,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n shadowColor: '#000',\n filter: 'none',\n globalCompositeOperation: 'source-over',\n // stroke/fill\n strokeStyle: '#000',\n strokeOpacity: 1,\n lineWidth: 1,\n lineDash: [],\n lineDashOffset: 0,\n lineCap: 'butt',\n lineJoin: 'miter',\n miterLimit: 10,\n fillStyle: '#000',\n fillOpacity: 1\n\n // image\n};\nvar defaultParsedStyle = {};\n\n/**\n * Updating the canvas context is an expensive operation. The state of the context is cached and the actual update operation is performed only when the cache is not hit.\n *\n * In any case, the previous value is returned, which is convenient for temporarily updating the context and restoring it later.\n */\nfunction updateContextIfNotHitCache(context, key, value, cache) {\n var prevValue = cache.has(key) ? cache.get(key) : DEFAULT_STYLE[key];\n if (prevValue !== value) {\n // console.log('not hit cache', key, value, prevValue, cache);\n if (key === 'lineDash') {\n context.setLineDash(value);\n } else {\n // @ts-ignore\n context[key] = value;\n }\n cache.set(key, value);\n }\n return prevValue;\n}\nvar OptimizedDefaultRenderer = /*#__PURE__*/function () {\n function OptimizedDefaultRenderer(imagePool) {\n _classCallCheck(this, OptimizedDefaultRenderer);\n this.imagePool = imagePool;\n }\n return _createClass(OptimizedDefaultRenderer, [{\n key: \"applyAttributesToContext\",\n value: function applyAttributesToContext(context, object) {}\n }, {\n key: \"render\",\n value: function render(context, parsedStyle, object, canvasContext, plugin, runtime) {}\n\n // #region common style\n }, {\n key: \"applyCommonStyleToContext\",\n value: function applyCommonStyleToContext(context, object, forceUpdate, renderState) {\n // const dpr = object.ownerDocument.defaultView.getContextService().getDPR();\n var prevStyle = forceUpdate ? defaultParsedStyle : renderState.prevObject.parsedStyle;\n var style = object.parsedStyle;\n if (forceUpdate || style.opacity !== prevStyle.opacity) {\n updateContextIfNotHitCache(context, 'globalAlpha', !isNil(style.opacity) ? style.opacity : DEFAULT_STYLE.globalAlpha, renderState.currentContext);\n }\n\n // TODO blend prop\n // @ts-ignore\n if (forceUpdate || style.blend !== prevStyle.blend) {\n updateContextIfNotHitCache(context, 'globalCompositeOperation',\n // @ts-ignore\n !isNil(style.blend) ?\n // @ts-ignore\n style.blend : DEFAULT_STYLE.globalCompositeOperation, renderState.currentContext);\n }\n }\n // #endregion common style\n\n // #region stroke/fill style\n }, {\n key: \"applyStrokeFillStyleToContext\",\n value: function applyStrokeFillStyleToContext(context, object, forceUpdate, renderState) {\n var prevStyle = forceUpdate ? defaultParsedStyle : renderState.prevObject.parsedStyle;\n var style = object.parsedStyle;\n var _style$lineWidth = style.lineWidth,\n lineWidth = _style$lineWidth === void 0 ? DEFAULT_STYLE.lineWidth : _style$lineWidth;\n var hasFill = style.fill && !style.fill.isNone;\n var hasStroke = style.stroke && !style.stroke.isNone && lineWidth > 0;\n if (hasStroke) {\n if (forceUpdate || object.attributes.stroke !== renderState.prevObject.attributes.stroke) {\n var value = !isNil(style.stroke) && !Array.isArray(style.stroke) && !style.stroke.isNone ? object.attributes.stroke : DEFAULT_STYLE.strokeStyle;\n updateContextIfNotHitCache(context, 'strokeStyle', value, renderState.currentContext);\n }\n if (forceUpdate || style.lineWidth !== prevStyle.lineWidth) {\n updateContextIfNotHitCache(context, 'lineWidth', !isNil(style.lineWidth) ? style.lineWidth : DEFAULT_STYLE.lineWidth, renderState.currentContext);\n }\n if (forceUpdate || style.lineDash !== prevStyle.lineDash) {\n updateContextIfNotHitCache(context, 'lineDash', style.lineDash || DEFAULT_STYLE.lineDash, renderState.currentContext);\n }\n if (forceUpdate || style.lineDashOffset !== prevStyle.lineDashOffset) {\n updateContextIfNotHitCache(context, 'lineDashOffset', !isNil(style.lineDashOffset) ? style.lineDashOffset : DEFAULT_STYLE.lineDashOffset, renderState.currentContext);\n }\n for (var i = 0; i < STROKE_STYLE.length; i++) {\n var styleName = STROKE_STYLE[i];\n if (forceUpdate || style[styleName] !== prevStyle[styleName]) {\n updateContextIfNotHitCache(context, styleName, !isNil(style[styleName]) ? style[styleName] : DEFAULT_STYLE[styleName], renderState.currentContext);\n }\n }\n }\n if (hasFill && (forceUpdate || object.attributes.fill !== renderState.prevObject.attributes.fill)) {\n var _value = !isNil(style.fill) && !Array.isArray(style.fill) && !style.fill.isNone ? object.attributes.fill : DEFAULT_STYLE.fillStyle;\n updateContextIfNotHitCache(context, 'fillStyle', _value, renderState.currentContext);\n }\n }\n // #endregion stroke/fill style\n }, {\n key: \"applyStyleToContext\",\n value: function applyStyleToContext(context, object, forceUpdate, renderState) {\n var nodeName = object.nodeName;\n this.applyCommonStyleToContext(context, object, forceUpdate, renderState);\n if (nodeName === Shape.IMAGE) ; else {\n this.applyStrokeFillStyleToContext(context, object, forceUpdate, renderState);\n }\n }\n }, {\n key: \"applyShadowAndFilterStyleToContext\",\n value: function applyShadowAndFilterStyleToContext(context, object, hasShadow, renderState) {\n var style = object.parsedStyle;\n if (hasShadow) {\n updateContextIfNotHitCache(context, 'shadowColor', style.shadowColor.toString(), renderState.currentContext);\n for (var i = 0; i < SHADOW_NUMBER_STYLE.length; i++) {\n var styleName = SHADOW_NUMBER_STYLE[i];\n updateContextIfNotHitCache(context, styleName, style[styleName] || DEFAULT_STYLE[styleName], renderState.currentContext);\n }\n }\n if (style.filter && style.filter.length) {\n updateContextIfNotHitCache(context, 'filter',\n // use raw filter string\n object.attributes.filter, renderState.currentContext);\n }\n }\n }, {\n key: \"clearShadowAndFilterStyleForContext\",\n value: function clearShadowAndFilterStyleForContext(context, hasShadow, hasFilter, renderState) {\n var onlyClearShadowFilter = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n if (hasShadow) {\n updateContextIfNotHitCache(context, 'shadowColor', DEFAULT_STYLE.shadowColor, renderState.currentContext);\n for (var i = 0; i < SHADOW_NUMBER_STYLE.length; i++) {\n var styleName = SHADOW_NUMBER_STYLE[i];\n updateContextIfNotHitCache(context, styleName, DEFAULT_STYLE[styleName], renderState.currentContext);\n }\n }\n if (hasFilter) {\n if (hasShadow && onlyClearShadowFilter) {\n // save drop-shadow filter\n var oldFilter = context.filter;\n if (!isNil(oldFilter) && oldFilter.indexOf('drop-shadow') > -1) {\n updateContextIfNotHitCache(context, 'filter', oldFilter.replace(/drop-shadow\\([^)]*\\)/, '').trim() || DEFAULT_STYLE.filter, renderState.currentContext);\n }\n } else {\n updateContextIfNotHitCache(context, 'filter', DEFAULT_STYLE.filter, renderState.currentContext);\n }\n }\n }\n }, {\n key: \"fillToContext\",\n value: function fillToContext(context, object, renderState, plugin, runtime) {\n var _this = this;\n var _object$parsedStyle = object.parsedStyle,\n fill = _object$parsedStyle.fill,\n fillRule = _object$parsedStyle.fillRule;\n var resetStyle = null;\n if (Array.isArray(fill) && fill.length > 0) {\n fill.forEach(function (gradient) {\n var prevStyle = updateContextIfNotHitCache(context, 'fillStyle', getColor(gradient, object, context, _this.imagePool), renderState.currentContext);\n resetStyle = resetStyle !== null && resetStyle !== void 0 ? resetStyle : prevStyle;\n if (fillRule) {\n context.fill(fillRule);\n } else {\n context.fill();\n }\n });\n } else {\n if (isPattern(fill)) {\n var pattern = getPattern(fill, object, context, object.ownerDocument.defaultView.context, plugin, runtime, this.imagePool);\n if (pattern) {\n context.fillStyle = pattern;\n resetStyle = true;\n }\n }\n if (fillRule) {\n context.fill(fillRule);\n } else {\n context.fill();\n }\n }\n if (resetStyle !== null) {\n updateContextIfNotHitCache(context, 'fillStyle', resetStyle, renderState.currentContext);\n }\n }\n }, {\n key: \"strokeToContext\",\n value: function strokeToContext(context, object, renderState, plugin, runtime) {\n var _this2 = this;\n var stroke = object.parsedStyle.stroke;\n var resetStyle = null;\n if (Array.isArray(stroke) && stroke.length > 0) {\n stroke.forEach(function (gradient) {\n var prevStyle = updateContextIfNotHitCache(context, 'strokeStyle', getColor(gradient, object, context, _this2.imagePool), renderState.currentContext);\n resetStyle = resetStyle !== null && resetStyle !== void 0 ? resetStyle : prevStyle;\n context.stroke();\n });\n } else {\n if (isPattern(stroke)) {\n var pattern = getPattern(stroke, object, context, object.ownerDocument.defaultView.context, plugin, runtime, this.imagePool);\n if (pattern) {\n var prevStyle = updateContextIfNotHitCache(context, 'strokeStyle', pattern, renderState.currentContext);\n resetStyle = resetStyle !== null && resetStyle !== void 0 ? resetStyle : prevStyle;\n }\n }\n context.stroke();\n }\n if (resetStyle !== null) {\n updateContextIfNotHitCache(context, 'strokeStyle', resetStyle, renderState.currentContext);\n }\n }\n }, {\n key: \"drawToContext\",\n value: function drawToContext(context, object, renderState, plugin, runtime) {\n var _style$fill;\n var nodeName = object.nodeName;\n var style = object.parsedStyle;\n var _style$opacity = style.opacity,\n opacity = _style$opacity === void 0 ? DEFAULT_STYLE.globalAlpha : _style$opacity,\n _style$fillOpacity = style.fillOpacity,\n fillOpacity = _style$fillOpacity === void 0 ? DEFAULT_STYLE.fillOpacity : _style$fillOpacity,\n _style$strokeOpacity = style.strokeOpacity,\n strokeOpacity = _style$strokeOpacity === void 0 ? DEFAULT_STYLE.strokeOpacity : _style$strokeOpacity,\n _style$lineWidth2 = style.lineWidth,\n lineWidth = _style$lineWidth2 === void 0 ? DEFAULT_STYLE.lineWidth : _style$lineWidth2;\n var hasFill = style.fill && !style.fill.isNone;\n var hasStroke = style.stroke && !style.stroke.isNone && lineWidth > 0;\n if (!hasFill && !hasStroke) {\n return;\n }\n var hasShadow = !isNil(style.shadowColor) && style.shadowBlur > 0;\n var isInnerShadow = style.shadowType === 'inner';\n var isFillTransparent = ((_style$fill = style.fill) === null || _style$fill === void 0 ? void 0 : _style$fill.alpha) === 0;\n var hasFilter = !!(style.filter && style.filter.length);\n // Shadows can only be applied to fill() or stroke(), the default is fill()\n var shouldDrawShadowWithStroke = hasShadow && hasStroke && (nodeName === Shape.PATH || nodeName === Shape.LINE || nodeName === Shape.POLYLINE || isFillTransparent || isInnerShadow);\n\n // TODO https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/paint-order\n\n var originGlobalAlpha = null;\n if (hasFill) {\n if (!shouldDrawShadowWithStroke) {\n this.applyShadowAndFilterStyleToContext(context, object, hasShadow, renderState);\n }\n var updateOpacity = opacity * fillOpacity;\n originGlobalAlpha = updateContextIfNotHitCache(context, 'globalAlpha', updateOpacity, renderState.currentContext);\n this.fillToContext(context, object, renderState, plugin, runtime);\n if (!shouldDrawShadowWithStroke) {\n this.clearShadowAndFilterStyleForContext(context, hasShadow, hasFilter, renderState);\n }\n }\n if (hasStroke) {\n var clearShadowAndFilter = false;\n var _updateOpacity = opacity * strokeOpacity;\n var prevOpacity = updateContextIfNotHitCache(context, 'globalAlpha', _updateOpacity, renderState.currentContext);\n originGlobalAlpha = hasFill ? originGlobalAlpha : prevOpacity;\n if (shouldDrawShadowWithStroke) {\n this.applyShadowAndFilterStyleToContext(context, object, hasShadow, renderState);\n clearShadowAndFilter = true;\n if (isInnerShadow) {\n var originBlend = context.globalCompositeOperation;\n context.globalCompositeOperation = 'source-atop';\n this.strokeToContext(context, object, renderState, plugin, runtime);\n context.globalCompositeOperation = originBlend;\n this.clearShadowAndFilterStyleForContext(context, hasShadow, hasFilter, renderState, true);\n }\n }\n this.strokeToContext(context, object, renderState, plugin, runtime);\n if (clearShadowAndFilter) {\n this.clearShadowAndFilterStyleForContext(context, hasShadow, hasFilter, renderState);\n }\n }\n\n // clear\n if (originGlobalAlpha !== null) {\n updateContextIfNotHitCache(context, 'globalAlpha', originGlobalAlpha, renderState.currentContext);\n }\n }\n }]);\n}();\n\nvar DefaultRenderer = /*#__PURE__*/function (_OptimizedDefaultRend) {\n function DefaultRenderer() {\n _classCallCheck(this, DefaultRenderer);\n return _callSuper(this, DefaultRenderer, arguments);\n }\n _inherits(DefaultRenderer, _OptimizedDefaultRend);\n return _createClass(DefaultRenderer, [{\n key: \"render\",\n value: function render(context, parsedStyle, object, canvasContext, plugin, runtime) {\n var fill = parsedStyle.fill,\n fillRule = parsedStyle.fillRule,\n _parsedStyle$opacity = parsedStyle.opacity,\n opacity = _parsedStyle$opacity === void 0 ? 1 : _parsedStyle$opacity,\n _parsedStyle$fillOpac = parsedStyle.fillOpacity,\n fillOpacity = _parsedStyle$fillOpac === void 0 ? 1 : _parsedStyle$fillOpac,\n stroke = parsedStyle.stroke,\n _parsedStyle$strokeOp = parsedStyle.strokeOpacity,\n strokeOpacity = _parsedStyle$strokeOp === void 0 ? 1 : _parsedStyle$strokeOp,\n _parsedStyle$lineWidt = parsedStyle.lineWidth,\n lineWidth = _parsedStyle$lineWidt === void 0 ? 1 : _parsedStyle$lineWidt,\n lineCap = parsedStyle.lineCap,\n lineJoin = parsedStyle.lineJoin,\n shadowType = parsedStyle.shadowType,\n shadowColor = parsedStyle.shadowColor,\n shadowBlur = parsedStyle.shadowBlur,\n filter = parsedStyle.filter,\n miterLimit = parsedStyle.miterLimit;\n var hasFill = fill && !fill.isNone;\n var hasStroke = stroke && !stroke.isNone && lineWidth > 0;\n var isFillTransparent = (fill === null || fill === void 0 ? void 0 : fill.alpha) === 0;\n var hasFilter = !!(filter && filter.length);\n var hasShadow = !isNil(shadowColor) && shadowBlur > 0;\n var nodeName = object.nodeName;\n var isInnerShadow = shadowType === 'inner';\n var shouldDrawShadowWithStroke = hasStroke && hasShadow && (nodeName === Shape.PATH || nodeName === Shape.LINE || nodeName === Shape.POLYLINE || isFillTransparent || isInnerShadow);\n if (hasFill) {\n context.globalAlpha = opacity * fillOpacity;\n if (!shouldDrawShadowWithStroke) {\n setShadowAndFilter(object, context, hasShadow);\n }\n applyFill(context, object, fill, fillRule, canvasContext, plugin, runtime, this.imagePool);\n if (!shouldDrawShadowWithStroke) {\n this.clearShadowAndFilter(context, hasFilter, hasShadow);\n }\n }\n if (hasStroke) {\n context.globalAlpha = opacity * strokeOpacity;\n context.lineWidth = lineWidth;\n if (!isNil(miterLimit)) {\n context.miterLimit = miterLimit;\n }\n if (!isNil(lineCap)) {\n context.lineCap = lineCap;\n }\n if (!isNil(lineJoin)) {\n context.lineJoin = lineJoin;\n }\n if (shouldDrawShadowWithStroke) {\n if (isInnerShadow) {\n context.globalCompositeOperation = 'source-atop';\n }\n setShadowAndFilter(object, context, true);\n if (isInnerShadow) {\n applyStroke(context, object, stroke, canvasContext, plugin, runtime, this.imagePool);\n context.globalCompositeOperation = DEFAULT_STYLE.globalCompositeOperation;\n this.clearShadowAndFilter(context, hasFilter, true);\n }\n }\n applyStroke(context, object, stroke, canvasContext, plugin, runtime, this.imagePool);\n }\n }\n }, {\n key: \"clearShadowAndFilter\",\n value: function clearShadowAndFilter(context, hasFilter, hasShadow) {\n if (hasShadow) {\n context.shadowColor = 'transparent';\n context.shadowBlur = 0;\n }\n if (hasFilter) {\n // save drop-shadow filter\n var oldFilter = context.filter;\n if (!isNil(oldFilter) && oldFilter.indexOf('drop-shadow') > -1) {\n context.filter = oldFilter.replace(/drop-shadow\\([^)]*\\)/, '').trim() || 'none';\n }\n }\n }\n }]);\n}(OptimizedDefaultRenderer);\n\n/**\n * apply before fill and stroke but only once\n */\nfunction setShadowAndFilter(object, context, hasShadow) {\n var _object$parsedStyle = object.parsedStyle,\n filter = _object$parsedStyle.filter,\n shadowColor = _object$parsedStyle.shadowColor,\n shadowBlur = _object$parsedStyle.shadowBlur,\n shadowOffsetX = _object$parsedStyle.shadowOffsetX,\n shadowOffsetY = _object$parsedStyle.shadowOffsetY;\n if (filter && filter.length) {\n // use raw filter string\n context.filter = object.style.filter;\n }\n if (hasShadow) {\n context.shadowColor = shadowColor.toString();\n context.shadowBlur = shadowBlur || 0;\n context.shadowOffsetX = shadowOffsetX || 0;\n context.shadowOffsetY = shadowOffsetY || 0;\n }\n}\nfunction applyFill(context, object, fill, fillRule, canvasContext, plugin, runtime, imagePool) {\n var skipFill = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : false;\n if (Array.isArray(fill)) {\n fill.forEach(function (gradient) {\n context.fillStyle = getColor(gradient, object, context, imagePool);\n if (!skipFill) {\n fillRule ? context.fill(fillRule) : context.fill();\n }\n });\n } else {\n if (isPattern(fill)) {\n context.fillStyle = getPattern(fill, object, context, canvasContext, plugin, runtime, imagePool);\n }\n if (!skipFill) {\n fillRule ? context.fill(fillRule) : context.fill();\n }\n }\n}\nfunction applyStroke(context, object, stroke, canvasContext, plugin, runtime, imagePool) {\n var skipStroke = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false;\n if (Array.isArray(stroke)) {\n stroke.forEach(function (gradient) {\n context.strokeStyle = getColor(gradient, object, context, imagePool);\n if (!skipStroke) {\n context.stroke();\n }\n });\n } else {\n if (isPattern(stroke)) {\n context.strokeStyle = getPattern(stroke, object, context, canvasContext, plugin, runtime, imagePool);\n }\n if (!skipStroke) {\n context.stroke();\n }\n }\n}\n\nfunction calculateOverlapRect(rect1, rect2) {\n var _rect = _slicedToArray(rect1, 4),\n x1 = _rect[0],\n y1 = _rect[1],\n w1 = _rect[2],\n h1 = _rect[3];\n var _rect2 = _slicedToArray(rect2, 4),\n x2 = _rect2[0],\n y2 = _rect2[1],\n w2 = _rect2[2],\n h2 = _rect2[3];\n\n // 计算重叠区域的左上角和右下角\n var overlapLeft = Math.max(x1, x2);\n var overlapTop = Math.max(y1, y2);\n var overlapRight = Math.min(x1 + w1, x2 + w2);\n var overlapBottom = Math.min(y1 + h1, y2 + h2);\n if (overlapRight <= overlapLeft || overlapBottom <= overlapTop) {\n return null;\n }\n return [overlapLeft, overlapTop, overlapRight - overlapLeft, overlapBottom - overlapTop];\n}\nfunction transformRect(rect, matrix) {\n var tl = vec3.transformMat4(vec3.create(), [rect[0], rect[1], 0], matrix);\n var tr = vec3.transformMat4(vec3.create(), [rect[0] + rect[2], rect[1], 0], matrix);\n var bl = vec3.transformMat4(vec3.create(), [rect[0], rect[1] + rect[3], 0], matrix);\n var br = vec3.transformMat4(vec3.create(), [rect[0] + rect[2], rect[1] + rect[3], 0], matrix);\n return [Math.min(tl[0], tr[0], bl[0], br[0]), Math.min(tl[1], tr[1], bl[1], br[1]), Math.max(tl[0], tr[0], bl[0], br[0]) - Math.min(tl[0], tr[0], bl[0], br[0]), Math.max(tl[1], tr[1], bl[1], br[1]) - Math.min(tl[1], tr[1], bl[1], br[1])];\n}\n\nvar ImageRenderer = /*#__PURE__*/function (_DefaultRenderer) {\n function ImageRenderer() {\n _classCallCheck(this, ImageRenderer);\n return _callSuper(this, ImageRenderer, arguments);\n }\n _inherits(ImageRenderer, _DefaultRenderer);\n return _createClass(ImageRenderer, [{\n key: \"renderDownSampled\",\n value: function renderDownSampled(context, parsedStyle, object, data) {\n var src = data.src,\n imageCache = data.imageCache;\n if (!imageCache.downSampled) {\n this.imagePool.createDownSampledImage(src, object).then(function () {\n // be removed from dom tree\n if (!object.ownerDocument) {\n return;\n }\n\n // rerender\n // object.dirty();\n object.renderable.dirty = true;\n object.ownerDocument.defaultView.context.renderingService.dirtify();\n })[\"catch\"](function (reason) {\n console.error(reason);\n });\n return;\n }\n context.drawImage(imageCache.downSampled, Math.floor(data.drawRect[0]), Math.floor(data.drawRect[1]), Math.ceil(data.drawRect[2]), Math.ceil(data.drawRect[3]));\n }\n }, {\n key: \"renderTile\",\n value: function renderTile(context, parsedStyle, object, data) {\n var src = data.src,\n imageCache = data.imageCache,\n imageRect = data.imageRect,\n drawRect = data.drawRect;\n var originalSize = imageCache.size;\n var _context$getTransform = context.getTransform(),\n a = _context$getTransform.a,\n b = _context$getTransform.b,\n c = _context$getTransform.c,\n d = _context$getTransform.d,\n e = _context$getTransform.e,\n f = _context$getTransform.f;\n context.resetTransform();\n if (!(imageCache !== null && imageCache !== void 0 && imageCache.gridSize)) {\n this.imagePool.createImageTiles(src, [], function () {\n // be removed from dom tree\n if (!object.ownerDocument) {\n return;\n }\n\n // rerender\n // object.dirty();\n object.renderable.dirty = true;\n object.ownerDocument.defaultView.context.renderingService.dirtify();\n }, object)[\"catch\"](function (reason) {\n console.error(reason);\n });\n return;\n }\n var scaleToOrigin = [originalSize[0] / imageRect[2], originalSize[1] / imageRect[3]];\n var scaledTileSize = [imageCache.tileSize[0] / scaleToOrigin[0], imageCache.tileSize[1] / scaleToOrigin[1]];\n var _ref = [Math.floor((drawRect[0] - imageRect[0]) / scaledTileSize[0]), Math.ceil((drawRect[0] + drawRect[2] - imageRect[0]) / scaledTileSize[0])],\n startTileX = _ref[0],\n endTileX = _ref[1];\n var _ref2 = [Math.floor((drawRect[1] - imageRect[1]) / scaledTileSize[1]), Math.ceil((drawRect[1] + drawRect[3] - imageRect[1]) / scaledTileSize[1])],\n startTileY = _ref2[0],\n endTileY = _ref2[1];\n for (var tileY = startTileY; tileY <= endTileY; tileY++) {\n for (var tileX = startTileX; tileX <= endTileX; tileX++) {\n var item = imageCache.tiles[tileY][tileX];\n if (item) {\n var tileRect = [Math.floor(imageRect[0] + item.tileX * scaledTileSize[0]), Math.floor(imageRect[1] + item.tileY * scaledTileSize[1]), Math.ceil(scaledTileSize[0]), Math.ceil(scaledTileSize[1])];\n context.drawImage(item.data, tileRect[0], tileRect[1], tileRect[2], tileRect[3]);\n }\n }\n }\n context.setTransform(a, b, c, d, e, f);\n }\n }, {\n key: \"render\",\n value: function render(context, parsedStyle, object) {\n var _parsedStyle$x = parsedStyle.x,\n x = _parsedStyle$x === void 0 ? 0 : _parsedStyle$x,\n _parsedStyle$y = parsedStyle.y,\n y = _parsedStyle$y === void 0 ? 0 : _parsedStyle$y,\n width = parsedStyle.width,\n height = parsedStyle.height,\n src = parsedStyle.src,\n shadowColor = parsedStyle.shadowColor,\n shadowBlur = parsedStyle.shadowBlur;\n var imageCache = this.imagePool.getImageSync(src, object);\n var image = imageCache === null || imageCache === void 0 ? void 0 : imageCache.img;\n var iw = width;\n var ih = height;\n if (!image) {\n return;\n }\n iw || (iw = image.width);\n ih || (ih = image.height);\n var hasShadow = !isNil(shadowColor) && shadowBlur > 0;\n setShadowAndFilter(object, context, hasShadow);\n\n // node-canvas will throw the following err:\n // Error: Image given has not completed loading\n try {\n var _object$ownerDocument = object.ownerDocument.defaultView.getContextService().getDomElement(),\n viewWidth = _object$ownerDocument.width,\n viewHeight = _object$ownerDocument.height;\n var currentTransform = context.getTransform();\n var a = currentTransform.a,\n b = currentTransform.b,\n c = currentTransform.c,\n d = currentTransform.d,\n e = currentTransform.e,\n f = currentTransform.f;\n // 构建 mat4 矩阵\n // prettier-ignore\n var transformMatrix = mat4.fromValues(a, c, 0, 0, b, d, 0, 0, 0, 0, 1, 0, e, f, 0, 1);\n var imageRect = transformRect([x, y, iw, ih], transformMatrix);\n var drawRect = calculateOverlapRect([0, 0, viewWidth, viewHeight], imageRect);\n if (!drawRect) {\n return;\n }\n if (!object.ownerDocument.defaultView.getConfig().enableLargeImageOptimization) {\n ImageRenderer.renderFull(context, parsedStyle, object, {\n image: image,\n drawRect: [x, y, iw, ih]\n });\n return;\n }\n var sizeOfOrigin = imageRect[2] / imageCache.size[0];\n if (sizeOfOrigin < (imageCache.downSamplingRate || 0.5)) {\n this.renderDownSampled(context, parsedStyle, object, {\n src: src,\n imageCache: imageCache,\n drawRect: [x, y, iw, ih]\n });\n return;\n }\n if (!ImagePool.isSupportTile) {\n ImageRenderer.renderFull(context, parsedStyle, object, {\n image: image,\n drawRect: [x, y, iw, ih]\n });\n return;\n }\n this.renderTile(context, parsedStyle, object, {\n src: src,\n imageCache: imageCache,\n imageRect: imageRect,\n drawRect: drawRect\n });\n } catch (_unused) {\n // expected error\n }\n }\n\n // ---\n }, {\n key: \"drawToContext\",\n value: function drawToContext(context, object, renderState, plugin, runtime) {\n this.render(context, object.parsedStyle, object);\n }\n }], [{\n key: \"renderFull\",\n value: function renderFull(context, parsedStyle, object, data) {\n context.drawImage(data.image, Math.floor(data.drawRect[0]), Math.floor(data.drawRect[1]), Math.ceil(data.drawRect[2]), Math.ceil(data.drawRect[3]));\n }\n }]);\n}(DefaultRenderer);\n\nvar TextRenderer = /*#__PURE__*/function (_DefaultRenderer) {\n function TextRenderer() {\n _classCallCheck(this, TextRenderer);\n return _callSuper(this, TextRenderer, arguments);\n }\n _inherits(TextRenderer, _DefaultRenderer);\n return _createClass(TextRenderer, [{\n key: \"render\",\n value: function render(context, parsedStyle, object, canvasContext, plugin, runtime) {\n // Trigger text geometry calculation.\n object.getBounds();\n var _parsedStyle$lineWidt = parsedStyle.lineWidth,\n lineWidth = _parsedStyle$lineWidt === void 0 ? 1 : _parsedStyle$lineWidt,\n _parsedStyle$textAlig = parsedStyle.textAlign,\n textAlign = _parsedStyle$textAlig === void 0 ? 'start' : _parsedStyle$textAlig,\n _parsedStyle$textBase = parsedStyle.textBaseline,\n textBaseline = _parsedStyle$textBase === void 0 ? 'alphabetic' : _parsedStyle$textBase,\n _parsedStyle$lineJoin = parsedStyle.lineJoin,\n lineJoin = _parsedStyle$lineJoin === void 0 ? 'miter' : _parsedStyle$lineJoin,\n _parsedStyle$miterLim = parsedStyle.miterLimit,\n miterLimit = _parsedStyle$miterLim === void 0 ? 10 : _parsedStyle$miterLim,\n _parsedStyle$letterSp = parsedStyle.letterSpacing,\n letterSpacing = _parsedStyle$letterSp === void 0 ? 0 : _parsedStyle$letterSp,\n stroke = parsedStyle.stroke,\n fill = parsedStyle.fill,\n fillRule = parsedStyle.fillRule,\n _parsedStyle$fillOpac = parsedStyle.fillOpacity,\n fillOpacity = _parsedStyle$fillOpac === void 0 ? 1 : _parsedStyle$fillOpac,\n _parsedStyle$strokeOp = parsedStyle.strokeOpacity,\n strokeOpacity = _parsedStyle$strokeOp === void 0 ? 1 : _parsedStyle$strokeOp,\n _parsedStyle$opacity = parsedStyle.opacity,\n opacity = _parsedStyle$opacity === void 0 ? 1 : _parsedStyle$opacity,\n metrics = parsedStyle.metrics,\n _parsedStyle$x = parsedStyle.x,\n x = _parsedStyle$x === void 0 ? 0 : _parsedStyle$x,\n _parsedStyle$y = parsedStyle.y,\n y = _parsedStyle$y === void 0 ? 0 : _parsedStyle$y,\n dx = parsedStyle.dx,\n dy = parsedStyle.dy,\n shadowColor = parsedStyle.shadowColor,\n shadowBlur = parsedStyle.shadowBlur;\n var font = metrics.font,\n lines = metrics.lines,\n height = metrics.height,\n lineHeight = metrics.lineHeight,\n lineMetrics = metrics.lineMetrics;\n context.font = font;\n context.lineWidth = lineWidth;\n context.textAlign = textAlign === 'middle' ? 'center' : textAlign;\n var formattedTextBaseline = textBaseline;\n if (formattedTextBaseline === 'alphabetic') {\n formattedTextBaseline = 'bottom';\n }\n context.lineJoin = lineJoin;\n if (!isNil(miterLimit)) {\n context.miterLimit = miterLimit;\n }\n var linePositionY = y;\n // handle vertical text baseline\n if (textBaseline === 'middle') {\n linePositionY += -height / 2 - lineHeight / 2;\n } else if (textBaseline === 'bottom' || textBaseline === 'alphabetic' || textBaseline === 'ideographic') {\n linePositionY += -height;\n } else if (textBaseline === 'top' || textBaseline === 'hanging') {\n linePositionY += -lineHeight;\n }\n\n // account for dx & dy\n var offsetX = x + (dx || 0);\n linePositionY += dy || 0;\n if (lines.length === 1) {\n if (formattedTextBaseline === 'bottom') {\n formattedTextBaseline = 'middle';\n linePositionY -= 0.5 * height;\n } else if (formattedTextBaseline === 'top') {\n formattedTextBaseline = 'middle';\n linePositionY += 0.5 * height;\n }\n }\n context.textBaseline = formattedTextBaseline;\n var hasShadow = !isNil(shadowColor) && shadowBlur > 0;\n setShadowAndFilter(object, context, hasShadow);\n\n // draw lines line by line\n for (var i = 0; i < lines.length; i++) {\n var linePositionX = lineWidth / 2 + offsetX;\n linePositionY += lineHeight;\n\n // no need to re-position X, cause we already set text align\n // @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/textAlign\n if (!isNil(stroke) && !stroke.isNone && lineWidth) {\n this.drawLetterSpacing(context, object, lines[i], lineMetrics[i], textAlign, linePositionX, linePositionY, letterSpacing, fill, fillRule, fillOpacity, stroke, strokeOpacity, opacity, true, canvasContext, plugin, runtime);\n }\n if (!isNil(fill)) {\n this.drawLetterSpacing(context, object, lines[i], lineMetrics[i], textAlign, linePositionX, linePositionY, letterSpacing, fill, fillRule, fillOpacity, stroke, strokeOpacity, opacity, false, canvasContext, plugin, runtime);\n }\n }\n }\n }, {\n key: \"drawLetterSpacing\",\n value: function drawLetterSpacing(context, object, text, lineMetrics, textAlign, x, y, letterSpacing, fill, fillRule, fillOpacity, stroke, strokeOpacity, opacity, isStroke, canvasContext, plugin, runtime) {\n // letterSpacing of 0 means normal, render all texts directly\n if (letterSpacing === 0) {\n if (isStroke) {\n this.strokeText(context, object, text, x, y, stroke, strokeOpacity, canvasContext, plugin, runtime);\n } else {\n this.fillText(context, object, text, x, y, fill, fillRule, fillOpacity, opacity, canvasContext, plugin, runtime);\n }\n return;\n }\n\n // draw text using left align\n var currentTextAlign = context.textAlign;\n context.textAlign = 'left';\n var currentPosition = x;\n if (textAlign === 'center' || textAlign === 'middle') {\n currentPosition = x - lineMetrics.width / 2;\n } else if (textAlign === 'right' || textAlign === 'end') {\n currentPosition = x - lineMetrics.width;\n }\n var stringArray = Array.from(text);\n var previousWidth = context.measureText(text).width;\n var currentWidth = 0;\n for (var i = 0; i < stringArray.length; ++i) {\n var currentChar = stringArray[i];\n if (isStroke) {\n this.strokeText(context, object, currentChar, currentPosition, y, stroke, strokeOpacity, canvasContext, plugin, runtime);\n } else {\n this.fillText(context, object, currentChar, currentPosition, y, fill, fillRule, fillOpacity, opacity, canvasContext, plugin, runtime);\n }\n currentWidth = context.measureText(text.substring(i + 1)).width;\n currentPosition += previousWidth - currentWidth + letterSpacing;\n previousWidth = currentWidth;\n }\n context.textAlign = currentTextAlign;\n }\n }, {\n key: \"fillText\",\n value: function fillText(context, object, text, x, y, fill, fillRule, fillOpacity, opacity, canvasContext, plugin, runtime) {\n applyFill(context, object, fill, fillRule, canvasContext, plugin, runtime, this.imagePool, true);\n var currentGlobalAlpha;\n var applyOpacity = !isNil(fillOpacity) && fillOpacity !== 1;\n if (applyOpacity) {\n currentGlobalAlpha = context.globalAlpha;\n context.globalAlpha = fillOpacity * opacity;\n }\n context.fillText(text, x, y);\n if (applyOpacity) {\n context.globalAlpha = currentGlobalAlpha;\n }\n }\n }, {\n key: \"strokeText\",\n value: function strokeText(context, object, text, x, y, stroke, strokeOpacity, canvasContext, plugin, runtime) {\n applyStroke(context, object, stroke, canvasContext, plugin, runtime, this.imagePool, true);\n var currentGlobalAlpha;\n var applyOpacity = !isNil(strokeOpacity) && strokeOpacity !== 1;\n if (applyOpacity) {\n currentGlobalAlpha = context.globalAlpha;\n context.globalAlpha = strokeOpacity;\n }\n context.strokeText(text, x, y);\n if (applyOpacity) {\n context.globalAlpha = currentGlobalAlpha;\n }\n }\n\n // ---\n }, {\n key: \"drawToContext\",\n value: function drawToContext(context, object, renderState, plugin, runtime) {\n this.render(context, object.parsedStyle, object, object.ownerDocument.defaultView.context, plugin, runtime);\n }\n }]);\n}(DefaultRenderer);\n\nvar Plugin = /*#__PURE__*/function (_AbstractRendererPlug) {\n function Plugin() {\n var _this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _classCallCheck(this, Plugin);\n _this = _callSuper(this, Plugin);\n _this.name = 'canvas-renderer';\n _this.options = options;\n return _this;\n }\n _inherits(Plugin, _AbstractRendererPlug);\n return _createClass(Plugin, [{\n key: \"init\",\n value: function init() {\n var _defaultStyleRenderer;\n var canvasRendererPluginOptions = _objectSpread({\n dirtyObjectNumThreshold: 500,\n dirtyObjectRatioThreshold: 0.8\n }, this.options);\n\n // @ts-ignore\n var imagePool = this.context.imagePool;\n var defaultRenderer = new DefaultRenderer(imagePool);\n var defaultStyleRendererFactory = (_defaultStyleRenderer = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defaultStyleRenderer, Shape.CIRCLE, defaultRenderer), Shape.ELLIPSE, defaultRenderer), Shape.RECT, defaultRenderer), Shape.IMAGE, new ImageRenderer(imagePool)), Shape.TEXT, new TextRenderer(imagePool)), Shape.LINE, defaultRenderer), Shape.POLYLINE, defaultRenderer), Shape.POLYGON, defaultRenderer), Shape.PATH, defaultRenderer), Shape.GROUP, undefined), _defineProperty(_defineProperty(_defineProperty(_defaultStyleRenderer, Shape.HTML, undefined), Shape.MESH, undefined), Shape.FRAGMENT, undefined));\n this.context.defaultStyleRendererFactory = defaultStyleRendererFactory;\n this.context.styleRendererFactory = defaultStyleRendererFactory;\n this.addRenderingPlugin(new CanvasRendererPlugin(canvasRendererPluginOptions));\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.removeAllRenderingPlugins();\n delete this.context.defaultStyleRendererFactory;\n delete this.context.styleRendererFactory;\n }\n }]);\n}(AbstractRendererPlugin);\n\nexport { DefaultRenderer as CircleRenderer, DefaultRenderer, DefaultRenderer as EllipseRenderer, ImageRenderer, DefaultRenderer as LineRenderer, DefaultRenderer as PathRenderer, Plugin, DefaultRenderer as PolygonRenderer, DefaultRenderer as PolylineRenderer, DefaultRenderer as RectRenderer, TextRenderer };\n//# sourceMappingURL=index.esm.js.map\n","/*!\n * @antv/g-plugin-dom-interaction\n * @description A G plugin\n * @version 2.1.24\n * @date 5/9/2025, 8:20:12 AM\n * @author AntVis\n * @docs https://g.antv.antgroup.com/\n */\nimport _classCallCheck from '@babel/runtime/helpers/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/createClass';\nimport _callSuper from '@babel/runtime/helpers/callSuper';\nimport _inherits from '@babel/runtime/helpers/inherits';\nimport { AbstractRendererPlugin } from '@antv/g-lite';\n\n// const MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\n/**\n * listen to mouse/touch/pointer events on DOM wrapper, trigger pointer events\n */\nvar DOMInteractionPlugin = /*#__PURE__*/function () {\n function DOMInteractionPlugin() {\n _classCallCheck(this, DOMInteractionPlugin);\n }\n return _createClass(DOMInteractionPlugin, [{\n key: \"apply\",\n value: function apply(context, runtime) {\n var _this = this;\n var renderingService = context.renderingService,\n renderingContext = context.renderingContext,\n config = context.config;\n this.context = context;\n var canvas = renderingContext.root.ownerDocument.defaultView;\n // const SUPPORT_ONLY_TOUCH = canvas.supportsTouchEvents && MOBILE_REGEX.test(navigator.userAgent);\n\n var onPointerMove = function onPointerMove(ev) {\n renderingService.hooks.pointerMove.call(ev);\n };\n var onPointerUp = function onPointerUp(ev) {\n renderingService.hooks.pointerUp.call(ev);\n };\n var onPointerDown = function onPointerDown(ev) {\n renderingService.hooks.pointerDown.call(ev);\n };\n var onPointerOver = function onPointerOver(ev) {\n renderingService.hooks.pointerOver.call(ev);\n };\n var onPointerOut = function onPointerOut(ev) {\n renderingService.hooks.pointerOut.call(ev);\n };\n var onPointerCancel = function onPointerCancel(ev) {\n renderingService.hooks.pointerCancel.call(ev);\n };\n var onPointerWheel = function onPointerWheel(ev) {\n renderingService.hooks.pointerWheel.call(ev);\n };\n var onClick = function onClick(ev) {\n renderingService.hooks.click.call(ev);\n };\n var addPointerEventListener = function addPointerEventListener($el) {\n runtime.globalThis.document.addEventListener('pointermove', onPointerMove, true);\n $el.addEventListener('pointerdown', onPointerDown, true);\n $el.addEventListener('pointerleave', onPointerOut, true);\n $el.addEventListener('pointerover', onPointerOver, true);\n runtime.globalThis.addEventListener('pointerup', onPointerUp, true);\n runtime.globalThis.addEventListener('pointercancel', onPointerCancel, true);\n };\n var addTouchEventListener = function addTouchEventListener($el) {\n $el.addEventListener('touchstart', onPointerDown, true);\n $el.addEventListener('touchend', onPointerUp, true);\n $el.addEventListener('touchmove', onPointerMove, true);\n $el.addEventListener('touchcancel', onPointerCancel, true);\n };\n var addMouseEventListener = function addMouseEventListener($el) {\n runtime.globalThis.document.addEventListener('mousemove', onPointerMove, true);\n $el.addEventListener('mousedown', onPointerDown, true);\n $el.addEventListener('mouseout', onPointerOut, true);\n $el.addEventListener('mouseover', onPointerOver, true);\n runtime.globalThis.addEventListener('mouseup', onPointerUp, true);\n };\n var removePointerEventListener = function removePointerEventListener($el) {\n runtime.globalThis.document.removeEventListener('pointermove', onPointerMove, true);\n $el.removeEventListener('pointerdown', onPointerDown, true);\n $el.removeEventListener('pointerleave', onPointerOut, true);\n $el.removeEventListener('pointerover', onPointerOver, true);\n runtime.globalThis.removeEventListener('pointerup', onPointerUp, true);\n runtime.globalThis.removeEventListener('pointercancel', onPointerCancel, true);\n };\n var removeTouchEventListener = function removeTouchEventListener($el) {\n $el.removeEventListener('touchstart', onPointerDown, true);\n $el.removeEventListener('touchend', onPointerUp, true);\n $el.removeEventListener('touchmove', onPointerMove, true);\n $el.removeEventListener('touchcancel', onPointerCancel, true);\n };\n var removeMouseEventListener = function removeMouseEventListener($el) {\n runtime.globalThis.document.removeEventListener('mousemove', onPointerMove, true);\n $el.removeEventListener('mousedown', onPointerDown, true);\n $el.removeEventListener('mouseout', onPointerOut, true);\n $el.removeEventListener('mouseover', onPointerOver, true);\n runtime.globalThis.removeEventListener('mouseup', onPointerUp, true);\n };\n renderingService.hooks.init.tap(DOMInteractionPlugin.tag, function () {\n var $el = _this.context.contextService.getDomElement();\n\n // @ts-ignore\n if (runtime.globalThis.navigator.msPointerEnabled) {\n // @ts-ignore\n $el.style.msContentZooming = 'none';\n // @ts-ignore\n $el.style.msTouchAction = 'none';\n } else if (canvas.supportsPointerEvents) {\n $el.style.touchAction = 'none';\n }\n if (canvas.supportsPointerEvents) {\n addPointerEventListener($el);\n } else {\n addMouseEventListener($el);\n }\n if (canvas.supportsTouchEvents) {\n addTouchEventListener($el);\n }\n if (config.useNativeClickEvent) {\n $el.addEventListener('click', onClick, true);\n }\n\n // use passive event listeners\n // @see https://zhuanlan.zhihu.com/p/24555031\n $el.addEventListener('wheel', onPointerWheel, {\n passive: true,\n capture: true\n });\n });\n renderingService.hooks.destroy.tap(DOMInteractionPlugin.tag, function () {\n var $el = _this.context.contextService.getDomElement();\n\n // @ts-ignore\n if (runtime.globalThis.navigator.msPointerEnabled) {\n // @ts-ignore\n $el.style.msContentZooming = '';\n // @ts-ignore\n $el.style.msTouchAction = '';\n } else if (canvas.supportsPointerEvents) {\n $el.style.touchAction = '';\n }\n if (canvas.supportsPointerEvents) {\n removePointerEventListener($el);\n } else {\n removeMouseEventListener($el);\n }\n if (canvas.supportsTouchEvents) {\n removeTouchEventListener($el);\n }\n if (config.useNativeClickEvent) {\n $el.removeEventListener('click', onClick, true);\n }\n $el.removeEventListener('wheel', onPointerWheel, true);\n });\n }\n }]);\n}();\nDOMInteractionPlugin.tag = 'DOMInteraction';\n\nvar Plugin = /*#__PURE__*/function (_AbstractRendererPlug) {\n function Plugin() {\n var _this;\n _classCallCheck(this, Plugin);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _callSuper(this, Plugin, [].concat(args));\n _this.name = 'dom-interaction';\n return _this;\n }\n _inherits(Plugin, _AbstractRendererPlug);\n return _createClass(Plugin, [{\n key: \"init\",\n value: function init() {\n this.addRenderingPlugin(new DOMInteractionPlugin());\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.removeAllRenderingPlugins();\n }\n }]);\n}(AbstractRendererPlugin);\n\nexport { Plugin };\n//# sourceMappingURL=index.esm.js.map\n","/*!\n * @antv/g-plugin-html-renderer\n * @description A G plugin for rendering HTML\n * @version 2.1.24\n * @date 5/9/2025, 8:20:22 AM\n * @author AntVis\n * @docs https://g.antv.antgroup.com/\n */\nimport _classCallCheck from '@babel/runtime/helpers/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/createClass';\nimport _callSuper from '@babel/runtime/helpers/callSuper';\nimport _inherits from '@babel/runtime/helpers/inherits';\nimport { CanvasEvent, ElementEvent, RenderReason, isCSSRGB, isPattern, Shape, AbstractRendererPlugin } from '@antv/g-lite';\nimport { isNil, isNumber, isString } from '@antv/util';\n\nvar CANVAS_CAMERA_ID = 'g-canvas-camera';\nvar HTMLRenderingPlugin = /*#__PURE__*/function () {\n function HTMLRenderingPlugin() {\n _classCallCheck(this, HTMLRenderingPlugin);\n this.displayObjectHTMLElementMap = new WeakMap();\n }\n return _createClass(HTMLRenderingPlugin, [{\n key: \"joinTransformMatrix\",\n value:\n /**\n * ! The reason for adding `offset` is that the `transform-origin` coordinate system of DOM is the local coordinate system of the element, while the `transform-origin` coordinate system of canvas drawing is the local coordinate system of the element's parent element. At the same time, the `transform` attribute value of the DOM element does not include `transform-origin`.\n */\n function joinTransformMatrix(matrix) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0];\n return \"matrix(\".concat([matrix[0], matrix[1], matrix[4], matrix[5], matrix[12] + offset[0], matrix[13] + offset[1]].join(','), \")\");\n }\n }, {\n key: \"apply\",\n value: function apply(context, runtime) {\n var _this = this;\n var camera = context.camera,\n renderingContext = context.renderingContext,\n renderingService = context.renderingService;\n this.context = context;\n var canvas = renderingContext.root.ownerDocument.defaultView;\n var nativeHTMLMap = canvas.context.eventService.nativeHTMLMap;\n var setTransform = function setTransform(object, $el) {\n $el.style.transform = _this.joinTransformMatrix(object.getWorldTransform(), object.getOrigin());\n };\n var handleMounted = function handleMounted(e) {\n var object = e.target;\n if (object.nodeName === Shape.HTML) {\n if (!_this.$camera) {\n _this.$camera = _this.createCamera(camera);\n }\n\n // create DOM element\n var $el = _this.getOrCreateEl(object);\n _this.$camera.appendChild($el);\n Object.keys(object.attributes).forEach(function (name) {\n _this.updateAttribute(name, object);\n });\n setTransform(object, $el);\n nativeHTMLMap.set($el, object);\n }\n };\n var handleUnmounted = function handleUnmounted(e) {\n var object = e.target;\n if (object.nodeName === Shape.HTML && _this.$camera) {\n var $el = _this.getOrCreateEl(object);\n if ($el) {\n $el.remove();\n nativeHTMLMap[\"delete\"]($el);\n }\n }\n };\n var handleAttributeChanged = function handleAttributeChanged(e) {\n var object = e.target;\n if (object.nodeName === Shape.HTML) {\n var attrName = e.attrName;\n _this.updateAttribute(attrName, object);\n }\n };\n var handleBoundsChanged = function handleBoundsChanged(e) {\n var object = e.target;\n var nodes = object.nodeName === Shape.FRAGMENT ? object.childNodes : [object];\n nodes.forEach(function (node) {\n if (node.nodeName === Shape.HTML) {\n var $el = _this.getOrCreateEl(node);\n setTransform(node, $el);\n }\n });\n };\n var handleCanvasResize = function handleCanvasResize() {\n if (_this.$camera) {\n var _this$context$config = _this.context.config,\n width = _this$context$config.width,\n height = _this$context$config.height;\n _this.$camera.parentElement.style.width = \"\".concat(width || 0, \"px\");\n _this.$camera.parentElement.style.height = \"\".concat(height || 0, \"px\");\n }\n };\n renderingService.hooks.init.tap(HTMLRenderingPlugin.tag, function () {\n canvas.addEventListener(CanvasEvent.RESIZE, handleCanvasResize);\n canvas.addEventListener(ElementEvent.MOUNTED, handleMounted);\n canvas.addEventListener(ElementEvent.UNMOUNTED, handleUnmounted);\n canvas.addEventListener(ElementEvent.ATTR_MODIFIED, handleAttributeChanged);\n canvas.addEventListener(ElementEvent.BOUNDS_CHANGED, handleBoundsChanged);\n });\n renderingService.hooks.endFrame.tap(HTMLRenderingPlugin.tag, function () {\n if (_this.$camera && renderingContext.renderReasons.has(RenderReason.CAMERA_CHANGED)) {\n _this.$camera.style.transform = _this.joinTransformMatrix(camera.getOrthoMatrix());\n }\n });\n renderingService.hooks.destroy.tap(HTMLRenderingPlugin.tag, function () {\n // remove camera\n if (_this.$camera) {\n _this.$camera.remove();\n }\n canvas.removeEventListener(CanvasEvent.RESIZE, handleCanvasResize);\n canvas.removeEventListener(ElementEvent.MOUNTED, handleMounted);\n canvas.removeEventListener(ElementEvent.UNMOUNTED, handleUnmounted);\n canvas.removeEventListener(ElementEvent.ATTR_MODIFIED, handleAttributeChanged);\n canvas.removeEventListener(ElementEvent.BOUNDS_CHANGED, handleBoundsChanged);\n });\n }\n }, {\n key: \"createCamera\",\n value: function createCamera(camera) {\n var _this$context$config2 = this.context.config,\n doc = _this$context$config2.document,\n width = _this$context$config2.width,\n height = _this$context$config2.height;\n var $canvas = this.context.contextService.getDomElement();\n var $container = $canvas.parentNode;\n if ($container) {\n var cameraId = CANVAS_CAMERA_ID;\n var $existedCamera = $container.querySelector(\"#\".concat(cameraId));\n if (!$existedCamera) {\n // fix @see https://github.com/antvis/G/issues/1702\n var $cameraContainer = (doc || document).createElement('div');\n // HTML elements should not overflow with canvas @see https://github.com/antvis/G/issues/1163\n $cameraContainer.style.overflow = 'hidden';\n $cameraContainer.style.pointerEvents = 'none';\n $cameraContainer.style.position = 'absolute';\n $cameraContainer.style.left = \"0px\";\n $cameraContainer.style.top = \"0px\";\n $cameraContainer.style.width = \"\".concat(width || 0, \"px\");\n $cameraContainer.style.height = \"\".concat(height || 0, \"px\");\n var $camera = (doc || document).createElement('div');\n $existedCamera = $camera;\n $camera.id = cameraId;\n // use absolute position\n $camera.style.position = 'absolute';\n // account for DOM element's offset @see https://github.com/antvis/G/issues/1150\n $camera.style.left = \"\".concat($canvas.offsetLeft || 0, \"px\");\n $camera.style.top = \"\".concat($canvas.offsetTop || 0, \"px\");\n $camera.style.transformOrigin = 'left top';\n $camera.style.transform = this.joinTransformMatrix(camera.getOrthoMatrix());\n $camera.style.pointerEvents = 'none';\n $camera.style.width = \"100%\";\n $camera.style.height = \"100%\";\n $cameraContainer.appendChild($camera);\n $container.appendChild($cameraContainer);\n }\n return $existedCamera;\n }\n return null;\n }\n }, {\n key: \"getOrCreateEl\",\n value: function getOrCreateEl(object) {\n var doc = this.context.config.document;\n var $existedElement = this.displayObjectHTMLElementMap.get(object);\n if (!$existedElement) {\n $existedElement = (doc || document).createElement('div');\n object.parsedStyle.$el = $existedElement;\n this.displayObjectHTMLElementMap.set(object, $existedElement);\n if (object.id) {\n $existedElement.id = object.id;\n }\n if (object.name) {\n $existedElement.setAttribute('name', object.name);\n }\n if (object.className) {\n $existedElement.className = object.className;\n }\n\n // use absolute position\n $existedElement.style.position = 'absolute';\n // @see https://github.com/antvis/G/issues/1150\n $existedElement.style['will-change'] = 'transform';\n $existedElement.style.transform = this.joinTransformMatrix(object.getWorldTransform(), object.getOrigin());\n }\n return $existedElement;\n }\n }, {\n key: \"updateAttribute\",\n value: function updateAttribute(name, object) {\n var $el = this.getOrCreateEl(object);\n switch (name) {\n case 'innerHTML':\n var innerHTML = object.parsedStyle.innerHTML;\n if (isString(innerHTML)) {\n $el.innerHTML = innerHTML;\n } else {\n $el.innerHTML = '';\n $el.appendChild(innerHTML);\n }\n break;\n case 'x':\n $el.style.left = \"\".concat(object.parsedStyle.x, \"px\");\n break;\n case 'y':\n $el.style.top = \"\".concat(object.parsedStyle.y, \"px\");\n break;\n case 'transformOrigin':\n var transformOrigin = object.parsedStyle.transformOrigin;\n $el.style['transform-origin'] = \"\".concat(transformOrigin[0].buildCSSText(null, null, ''), \" \").concat(transformOrigin[1].buildCSSText(null, null, ''));\n break;\n case 'width':\n var width = object.parsedStyle.width;\n $el.style.width = isNumber(width) ? \"\".concat(width, \"px\") : width.toString();\n break;\n case 'height':\n var height = object.parsedStyle.height;\n $el.style.height = isNumber(height) ? \"\".concat(height, \"px\") : height.toString();\n break;\n case 'zIndex':\n var zIndex = object.parsedStyle.zIndex;\n $el.style['z-index'] = \"\".concat(zIndex);\n break;\n case 'visibility':\n var visibility = object.parsedStyle.visibility;\n $el.style.visibility = visibility;\n break;\n case 'pointerEvents':\n var _object$parsedStyle$p = object.parsedStyle.pointerEvents,\n pointerEvents = _object$parsedStyle$p === void 0 ? 'auto' : _object$parsedStyle$p;\n $el.style.pointerEvents = pointerEvents;\n break;\n case 'opacity':\n var opacity = object.parsedStyle.opacity;\n $el.style.opacity = \"\".concat(opacity);\n break;\n case 'fill':\n var fill = object.parsedStyle.fill;\n var color = '';\n if (isCSSRGB(fill)) {\n if (fill.isNone) {\n color = 'transparent';\n } else {\n color = object.getAttribute('fill');\n }\n } else if (Array.isArray(fill)) {\n color = object.getAttribute('fill');\n } else if (isPattern(fill)) ;\n $el.style.background = color;\n break;\n case 'stroke':\n var stroke = object.parsedStyle.stroke;\n var borderColor = '';\n if (isCSSRGB(stroke)) {\n if (stroke.isNone) {\n borderColor = 'transparent';\n } else {\n borderColor = object.getAttribute('stroke');\n }\n } else if (Array.isArray(stroke)) {\n borderColor = object.getAttribute('stroke');\n } else if (isPattern(stroke)) ;\n $el.style['border-color'] = borderColor;\n $el.style['border-style'] = 'solid';\n break;\n case 'lineWidth':\n var lineWidth = object.parsedStyle.lineWidth;\n $el.style['border-width'] = \"\".concat(lineWidth || 0, \"px\");\n break;\n case 'lineDash':\n $el.style['border-style'] = 'dashed';\n break;\n case 'filter':\n var filter = object.style.filter;\n $el.style.filter = filter;\n break;\n default:\n if (!isNil(object.style[name]) && object.style[name] !== '') {\n $el.style[name] = object.style[name];\n }\n }\n }\n }]);\n}();\nHTMLRenderingPlugin.tag = 'HTMLRendering';\n\nvar Plugin = /*#__PURE__*/function (_AbstractRendererPlug) {\n function Plugin() {\n var _this;\n _classCallCheck(this, Plugin);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _callSuper(this, Plugin, [].concat(args));\n _this.name = 'html-renderer';\n return _this;\n }\n _inherits(Plugin, _AbstractRendererPlug);\n return _createClass(Plugin, [{\n key: \"init\",\n value: function init() {\n this.addRenderingPlugin(new HTMLRenderingPlugin());\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.removeAllRenderingPlugins();\n }\n }]);\n}(AbstractRendererPlugin);\n\nexport { Plugin };\n//# sourceMappingURL=index.esm.js.map\n","/*!\n * @antv/g-plugin-dragndrop\n * @description A G plugin for Drag n Drop implemented with PointerEvents\n * @version 2.0.35\n * @date 5/9/2025, 8:20:14 AM\n * @author AntVis\n * @docs https://g.antv.antgroup.com/\n */\nimport _objectSpread from '@babel/runtime/helpers/objectSpread2';\nimport _classCallCheck from '@babel/runtime/helpers/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/createClass';\nimport _callSuper from '@babel/runtime/helpers/callSuper';\nimport _inherits from '@babel/runtime/helpers/inherits';\nimport { AbstractRendererPlugin } from '@antv/g-lite';\nimport _regeneratorRuntime from '@babel/runtime/helpers/regeneratorRuntime';\nimport _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';\nimport { distanceSquareRoot } from '@antv/util';\n\nvar DragndropPlugin = /*#__PURE__*/function () {\n function DragndropPlugin(dragndropPluginOptions) {\n _classCallCheck(this, DragndropPlugin);\n this.dragndropPluginOptions = dragndropPluginOptions;\n }\n return _createClass(DragndropPlugin, [{\n key: \"apply\",\n value: function apply(context) {\n var _this = this;\n var renderingService = context.renderingService,\n renderingContext = context.renderingContext;\n var document = renderingContext.root.ownerDocument;\n\n // TODO: should we add an option like `draggable` to Canvas\n var canvas = document.defaultView;\n var handlePointerdown = function handlePointerdown(event) {\n var target = event.target;\n var isDocument = target === document;\n var draggableEventTarget = isDocument && _this.dragndropPluginOptions.isDocumentDraggable ? document : target.closest && target.closest('[draggable=true]');\n\n // `draggable` may be set on ancestor nodes:\n // @see https://github.com/antvis/G/issues/1088\n if (draggableEventTarget) {\n // delay triggering dragstart event\n var dragstartTriggered = false;\n var dragstartTimeStamp = event.timeStamp;\n var dragstartClientCoordinates = [event.clientX, event.clientY];\n var currentDroppable = null;\n var lastDragClientCoordinates = [event.clientX, event.clientY];\n // @ts-ignore\n // eslint-disable-next-line no-inner-declarations\n var handlePointermove = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(event) {\n var timeElapsed, distanceMoved, point, elementsBelow, elementBelow, droppableBelow;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (dragstartTriggered) {\n _context.next = 8;\n break;\n }\n timeElapsed = event.timeStamp - dragstartTimeStamp;\n distanceMoved = distanceSquareRoot([event.clientX, event.clientY], dragstartClientCoordinates); // check thresholds\n if (!(timeElapsed <= _this.dragndropPluginOptions.dragstartTimeThreshold || distanceMoved <= _this.dragndropPluginOptions.dragstartDistanceThreshold)) {\n _context.next = 5;\n break;\n }\n return _context.abrupt(\"return\");\n case 5:\n // @see https://developer.mozilla.org/zh-CN/docs/Web/API/Document/dragstart_event\n event.type = 'dragstart';\n draggableEventTarget.dispatchEvent(event);\n dragstartTriggered = true;\n case 8:\n // @see https://developer.mozilla.org/zh-CN/docs/Web/API/Document/drag_event\n event.type = 'drag';\n // @ts-ignore\n event.dx = event.clientX - lastDragClientCoordinates[0];\n // @ts-ignore\n event.dy = event.clientY - lastDragClientCoordinates[1];\n draggableEventTarget.dispatchEvent(event);\n lastDragClientCoordinates = [event.clientX, event.clientY];\n if (isDocument) {\n _context.next = 21;\n break;\n }\n point = _this.dragndropPluginOptions.overlap === 'pointer' ? [event.canvasX, event.canvasY] : target.getBounds().center;\n _context.next = 17;\n return document.elementsFromPoint(point[0], point[1]);\n case 17:\n elementsBelow = _context.sent;\n // prevent from picking the dragging element\n elementBelow = elementsBelow[elementsBelow.indexOf(target) + 1];\n droppableBelow = (elementBelow === null || elementBelow === void 0 ? void 0 : elementBelow.closest('[droppable=true]')) || (_this.dragndropPluginOptions.isDocumentDroppable ? document : null);\n if (currentDroppable !== droppableBelow) {\n if (currentDroppable) {\n // null when we were not over a droppable before this event\n // @see https://developer.mozilla.org/zh-CN/docs/Web/API/Document/dragleave_event\n event.type = 'dragleave';\n event.target = currentDroppable;\n currentDroppable.dispatchEvent(event);\n }\n if (droppableBelow) {\n // @see https://developer.mozilla.org/zh-CN/docs/Web/API/Document/dragleave_event\n event.type = 'dragenter';\n event.target = droppableBelow;\n droppableBelow.dispatchEvent(event);\n }\n currentDroppable = droppableBelow;\n if (currentDroppable) {\n // null if we're not coming over a droppable now\n // @see https://developer.mozilla.org/zh-CN/docs/Web/API/Document/dragover_event\n event.type = 'dragover';\n event.target = currentDroppable;\n currentDroppable.dispatchEvent(event);\n }\n }\n case 21:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function handlePointermove(_x) {\n return _ref.apply(this, arguments);\n };\n }();\n canvas.addEventListener('pointermove', handlePointermove);\n var stopDragging = function stopDragging(originalPointerUpEvent) {\n if (dragstartTriggered) {\n // prevent click event being triggerd\n // @see https://github.com/antvis/G/issues/1091\n originalPointerUpEvent.detail = {\n preventClick: true\n };\n\n // clone event first\n var _event = originalPointerUpEvent.clone();\n\n // drop should fire before dragend\n // @see https://javascript.tutorialink.com/is-there-a-defined-ordering-between-dragend-and-drop-events/\n\n if (currentDroppable) {\n // @see https://developer.mozilla.org/zh-CN/docs/Web/API/Document/drop_event\n _event.type = 'drop';\n _event.target = currentDroppable;\n currentDroppable.dispatchEvent(_event);\n }\n\n // @see https://developer.mozilla.org/zh-CN/docs/Web/API/Document/dragend_event\n _event.type = 'dragend';\n draggableEventTarget.dispatchEvent(_event);\n dragstartTriggered = false;\n }\n canvas.removeEventListener('pointermove', handlePointermove);\n };\n target.addEventListener('pointerup', stopDragging, {\n once: true\n });\n target.addEventListener('pointerupoutside', stopDragging, {\n once: true\n });\n }\n };\n renderingService.hooks.init.tap(DragndropPlugin.tag, function () {\n canvas.addEventListener('pointerdown', handlePointerdown);\n });\n renderingService.hooks.destroy.tap(DragndropPlugin.tag, function () {\n canvas.removeEventListener('pointerdown', handlePointerdown);\n });\n }\n }]);\n}();\nDragndropPlugin.tag = 'Dragndrop';\n\nvar Plugin = /*#__PURE__*/function (_AbstractRendererPlug) {\n function Plugin() {\n var _this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _classCallCheck(this, Plugin);\n _this = _callSuper(this, Plugin);\n _this.name = 'dragndrop';\n _this.options = options;\n return _this;\n }\n _inherits(Plugin, _AbstractRendererPlug);\n return _createClass(Plugin, [{\n key: \"init\",\n value: function init() {\n this.addRenderingPlugin(new DragndropPlugin(_objectSpread({\n overlap: 'pointer',\n isDocumentDraggable: false,\n isDocumentDroppable: false,\n dragstartDistanceThreshold: 0,\n dragstartTimeThreshold: 0\n }, this.options)));\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.removeAllRenderingPlugins();\n }\n }, {\n key: \"setOptions\",\n value: function setOptions(options) {\n Object.assign(this.plugins[0].dragndropPluginOptions, options);\n }\n }]);\n}(AbstractRendererPlugin);\n\nexport { Plugin };\n//# sourceMappingURL=index.esm.js.map\n","import isNil from './is-nil';\nimport isObject from './is-object';\nvar identity = function (v) { return v; };\nexport default (function (object, func) {\n if (func === void 0) { func = identity; }\n var r = {};\n if (isObject(object) && !isNil(object)) {\n Object.keys(object).forEach(function (key) {\n // @ts-ignore\n r[key] = func(object[key], key);\n });\n }\n return r;\n});\n//# sourceMappingURL=map-values.js.map","import { compile } from '@antv/expr';\nimport { mapValues } from '@antv/util';\nimport { lru } from './lru';\n// Whitelist of properties that can contain expressions.\nexport const EXPR_WHITE_LIST = ['style', 'encode', 'labels', 'children'];\n/**\n * Compiles an expression string into a function.\n * @param expr Expression string to compile.\n * @returns Compiled function or original string if empty.\n */\nconst compileExpression = lru((expr) => {\n const evaluator = compile(expr);\n return (...args) => {\n const paramNames = Array.from({ length: args.length }, (_, i) => String.fromCharCode(97 + i));\n const namedParams = Object.fromEntries(args.map((value, index) => [paramNames[index], value]));\n // global is used to overview what can i get in props.\n return evaluator(Object.assign(Object.assign({}, namedParams), { global: Object.assign({}, namedParams) }));\n };\n}, (expr) => expr, 128);\n/**\n * Processes options object to convert expressions to functions.\n * @param options Options object to process.\n * @param isSpecRoot Whether the options is the root of the spec.\n * @returns Processed options object with expressions converted to functions.\n */\nexport function parseOptionsExpr(options, isSpecRoot = true) {\n if (Array.isArray(options)) {\n return options.map((_, i) => parseOptionsExpr(options[i], isSpecRoot));\n }\n if (typeof options === 'object' && options) {\n return mapValues(options, (value, key) => {\n // if options is root and the key is in the white list, parse the expression.\n if (isSpecRoot && EXPR_WHITE_LIST.includes(key)) {\n return parseOptionsExpr(value, key === 'children');\n }\n if (!isSpecRoot) {\n return parseOptionsExpr(value, false);\n }\n return value;\n });\n }\n // if options is a string and is a valid expression.\n if (typeof options === 'string') {\n const trimmed = options.trim();\n if (trimmed.startsWith('{') && trimmed.endsWith('}')) {\n return compileExpression(trimmed.slice(1, -1));\n }\n }\n return options;\n}\n//# sourceMappingURL=expr.js.map","/**\n * @examples\n * ✅\n * color - `discrete`, shape - `constant`\n * legendCategory.rule[27] is matched\n *\n * ❎\n * shape - `discrete`, size - `constant`\n * There are no rules to match\n *\n */\nexport const LEGEND_INFER_STRATEGIES = [\n [\n 'legendCategory',\n [\n [\n ['color', 'discrete'],\n ['opacity', 'discrete'],\n ['shape', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'constant'],\n ['shape', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'discrete'],\n ['shape', 'constant'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'constant'],\n ['shape', 'constant'],\n ['size', 'constant'],\n ],\n [\n ['color', 'constant'],\n ['opacity', 'discrete'],\n ['shape', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'constant'],\n ['opacity', 'constant'],\n ['shape', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'constant'],\n ['opacity', 'discrete'],\n ['shape', 'constant'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['shape', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'discrete'],\n ['shape', 'discrete'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'constant'],\n ['shape', 'discrete'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'constant'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['shape', 'constant'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'discrete'],\n ['shape', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'constant'],\n ['shape', 'constant'],\n ],\n [\n ['color', 'constant'],\n ['shape', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'constant'],\n ['opacity', 'discrete'],\n ['shape', 'discrete'],\n ],\n [\n ['color', 'constant'],\n ['opacity', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'constant'],\n ['opacity', 'constant'],\n ['shape', 'discrete'],\n ],\n // [\n // ['color', 'constant'],\n // ['opacity', 'constant'],\n // ['size', 'constant'],\n // ],\n // [\n // ['color', 'constant'],\n // ['shape', 'constant'],\n // ['size', 'constant'],\n // ],\n [\n ['color', 'constant'],\n ['opacity', 'discrete'],\n ['shape', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['shape', 'discrete'],\n ],\n [\n ['color', 'discrete'],\n ['size', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'discrete'],\n ],\n [\n ['color', 'discrete'],\n ['opacity', 'constant'],\n ],\n [\n ['color', 'discrete'],\n ['shape', 'constant'],\n ],\n [\n ['color', 'constant'],\n ['shape', 'discrete'],\n ],\n [\n ['color', 'constant'],\n ['size', 'constant'],\n ],\n [\n ['color', 'constant'],\n ['opacity', 'discrete'],\n ],\n // [\n // ['color', 'constant'],\n // ['opacity', 'constant'],\n // ],\n // [\n // ['color', 'constant'],\n // ['shape', 'constant'],\n // ],\n [['color', 'discrete']],\n // [['color', 'constant']],\n ],\n ],\n [\n 'legendContinuousSize',\n [\n [\n ['color', 'continuous'],\n ['opacity', 'continuous'],\n ['size', 'continuous'],\n ],\n [\n ['color', 'constant'],\n ['opacity', 'continuous'],\n ['size', 'continuous'],\n ],\n [\n ['color', 'continuous'],\n ['size', 'continuous'],\n ],\n [\n ['color', 'constant'],\n ['size', 'continuous'],\n ],\n [\n ['size', 'continuous'],\n ['opacity', 'continuous'],\n ],\n [['size', 'continuous']],\n ],\n ],\n [\n 'legendContinuousBlockSize',\n [\n [\n ['color', 'distribution'],\n ['opacity', 'distribution'],\n ['size', 'distribution'],\n ],\n [\n ['color', 'distribution'],\n ['size', 'distribution'],\n ],\n ],\n ],\n [\n 'legendContinuousBlock',\n [\n [\n ['color', 'distribution'],\n ['opacity', 'continuous'],\n ],\n [['color', 'distribution']],\n ],\n ],\n [\n 'legendContinuous',\n [\n [\n ['color', 'continuous'],\n ['opacity', 'continuous'],\n ],\n [['color', 'continuous']],\n [['opacity', 'continuous']],\n ],\n ],\n];\n//# sourceMappingURL=constant.js.map","export const ContinuousScale = {\n linear: 'linear',\n identity: 'identity',\n log: 'log',\n pow: 'pow',\n sqrt: 'sqrt',\n sequential: 'sequential',\n};\nexport const DistributionScale = {\n threshold: 'threshold',\n quantize: 'quantize',\n quantile: 'quantile',\n};\nexport const DiscreteScale = {\n ordinal: 'ordinal',\n band: 'band',\n point: 'point',\n};\nexport const ConstantScale = {\n constant: 'constant',\n};\n//# sourceMappingURL=scale.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix, isEqual } from '@antv/util';\nimport { groups, max, sum } from '@antv/vendor/d3-array';\nimport { format } from '@antv/vendor/d3-format';\nimport { DisplayObject, Text } from '@antv/g';\nimport { getPolarOptions, getRadialOptions, } from '../coordinate';\nimport { combine } from '../utils/array';\nimport { prettyNumber } from '../utils/number';\nimport { capitalizeFirst, defined, subObject } from '../utils/helper';\nimport { LEGEND_INFER_STRATEGIES } from '../component/constant';\nimport { coordOf, isHelix, isParallel, isPolar, isRadar, isRadial, isReflect, isReflectY, isTheta, isTranspose, } from './coordinate';\nimport { useLibrary } from './library';\nimport { isValidScale } from './scale';\nimport { ConstantScale, ContinuousScale, DiscreteScale, DistributionScale, } from './types/scale';\nexport function inferComponent(scales, partialOptions, library) {\n const { coordinates = [], title } = partialOptions;\n const [, createGuideComponent] = useLibrary('component', library);\n const displayedScales = scales.filter(({ guide }) => {\n if (guide === null)\n return false;\n return true;\n });\n const components = [];\n // Sliders and scrollbar component.\n const sliders = inferScrollableComponents(partialOptions, scales, library);\n components.push(...sliders);\n // Title components.\n if (title) {\n const { props } = createGuideComponent('title');\n const { defaultPosition, defaultOrientation, defaultOrder, defaultSize, defaultCrossPadding, } = props;\n const titleOptions = typeof title === 'string' ? { title } : title;\n components.push(Object.assign({ type: 'title', position: defaultPosition, orientation: defaultOrientation, order: defaultOrder, crossPadding: defaultCrossPadding[0], defaultSize }, titleOptions));\n }\n // Axis and legends.\n const inferredComponents = inferComponentsType(displayedScales, coordinates);\n inferredComponents.forEach(([type, relativeScales]) => {\n const { props } = createGuideComponent(type);\n const { defaultPosition, defaultPlane = 'xy', defaultOrientation, defaultSize, defaultOrder, defaultLength, defaultPadding: DP = [0, 0], defaultCrossPadding: DCP = [0, 0], } = props;\n // @todo to be confirm if the scale can be merged.\n // const scale: G2ScaleOptions = Object.assign({}, ...relativeScales);\n const scale = deepMix({}, ...relativeScales);\n const { guide: guideOptions, field } = scale;\n // A scale may have multiple guides.\n const guides = Array.isArray(guideOptions) ? guideOptions : [guideOptions];\n for (const partialGuide of guides) {\n const [position, orientation] = inferComponentPositionAndOrientation(type, defaultPosition, defaultOrientation, partialGuide, relativeScales, displayedScales, coordinates);\n // Skip if position and orientation are not specified.\n // @example the last axis of radar chart\n if (!position && !orientation)\n continue;\n const isVertical = position === 'left' || position === 'right';\n const defaultPadding = isVertical ? DP[1] : DP[0];\n const defaultCrossPadding = isVertical ? DCP[1] : DCP[0];\n const { size, order = defaultOrder, length = defaultLength, padding = defaultPadding, crossPadding = defaultCrossPadding, } = partialGuide;\n components.push(Object.assign(Object.assign({ title: field }, partialGuide), { defaultSize,\n length,\n position, plane: defaultPlane, orientation,\n padding,\n order,\n crossPadding,\n size,\n type, scales: relativeScales }));\n }\n });\n return components;\n}\nexport function renderComponent(component, coordinate, theme, library, markState) {\n const [useGuideComponent] = useLibrary('component', library);\n const { scaleInstances: scales, scale, bbox } = component, options = __rest(component, [\"scaleInstances\", \"scale\", \"bbox\"]);\n const value = { bbox, library };\n const render = useGuideComponent(options);\n return render({\n coordinate,\n library,\n markState,\n scales,\n theme,\n value,\n scale,\n });\n}\nexport function normalizeComponents(components) {\n return components.map((d) => {\n const component = deepMix(d, d.style);\n delete component.style;\n return component;\n });\n}\nexport function flatComponents(components) {\n return components.flatMap((d) => (d.type == 'group' ? d.children : d));\n}\n// Wrap legends into a group component.\nexport function groupComponents(components, crossSize) {\n // Group components by key.\n const P = ['left', 'right', 'bottom', 'top'];\n const key = ({ type, position, group }) => {\n if (!P.includes(position))\n return Symbol('independent');\n if (group === undefined) {\n if (type.startsWith('legend'))\n return `legend-${position}`;\n return Symbol('independent');\n }\n if (group === 'independent')\n return Symbol('independent');\n return group;\n };\n const grouped = groups(components, key);\n // Update attributes of group components,\n // and maybe flatten group components without enough room.\n return grouped.flatMap(([, components]) => {\n if (components.length === 1)\n return components[0];\n // If crossSize defined, group components only when has\n // enough room.\n if (crossSize !== undefined) {\n // Compute total length.\n const DL = components\n .filter((d) => d.length !== undefined)\n .map((d) => d.length);\n const totalLength = sum(DL);\n // If there is no enough room for components,\n // do not group.\n if (totalLength > crossSize) {\n components.forEach((d) => (d.group = Symbol('independent')));\n return components;\n }\n // Group legends and update legend length.\n const emptyLength = crossSize - totalLength;\n const emptyCount = components.length - DL.length;\n const length = emptyLength / emptyCount;\n components.forEach((d) => {\n if (d.length !== undefined)\n return;\n d.length = length;\n });\n }\n // Create a group component.\n const size = max(components, (d) => d.size);\n const order = max(components, (d) => d.order);\n const crossPadding = max(components, (d) => d.crossPadding);\n const position = components[0].position;\n return {\n type: 'group',\n size,\n order,\n position,\n children: components,\n crossPadding,\n };\n });\n}\nfunction inferLegendComponentType(scales, coordinates) {\n // Filter accepts scales.\n const channels = ['shape', 'size', 'color', 'opacity'];\n const isConstantSize = (type, name) => type === 'constant' && name === 'size';\n const accepts = scales.filter(({ type, name }) => typeof type === 'string' &&\n channels.includes(name) &&\n !isConstantSize(type, name));\n // Group scales by fields.\n const constants = accepts.filter(({ type }) => type === 'constant');\n const nonConstants = accepts.filter(({ type }) => type !== 'constant');\n const groupKey = (d) => (d.field ? d.field : Symbol('independent'));\n const fieldScales = groups(nonConstants, groupKey)\n .map(([key, scales]) => [key, [...scales, ...constants]])\n .filter(([, scales]) => scales.some((scale) => scale.type !== 'constant'));\n const scalesByField = new Map(fieldScales);\n // Skip empty scales.\n if (scalesByField.size === 0)\n return [];\n // Infer components.\n const sort = (arr) => arr.sort(([a], [b]) => a.localeCompare(b));\n const components = Array.from(scalesByField)\n .map(([, scs]) => {\n const combinations = combine(scs).sort((a, b) => b.length - a.length);\n const options = combinations.map((combination) => ({\n combination,\n option: combination.map((scale) => [scale.name, getScaleType(scale)]),\n }));\n // For category legend.\n for (const { option, combination } of options) {\n // If every scale is constant, do not display legend.\n if (option.every((d) => d[1] === 'constant'))\n continue;\n if (option.every((d) => d[1] === 'discrete' || d[1] === 'constant')) {\n return ['legendCategory', combination];\n }\n }\n // For reset legend.\n // @todo Remove this.\n for (const [componentType, accords] of LEGEND_INFER_STRATEGIES) {\n for (const { option, combination } of options) {\n if (accords.some((accord) => isEqual(sort(accord), sort(option)))) {\n return [componentType, combination];\n }\n }\n }\n return null;\n })\n .filter(defined);\n return components;\n}\nfunction getScaleType(scale) {\n const { type } = scale;\n if (typeof type !== 'string')\n return null;\n if (type in ContinuousScale)\n return 'continuous';\n if (type in DiscreteScale)\n return 'discrete';\n if (type in DistributionScale)\n return 'distribution';\n if (type in ConstantScale)\n return 'constant';\n return null;\n}\nfunction inferAxisComponentType(scales, coordinates) {\n return scales\n .map((scale) => {\n const { name } = scale;\n // todo wait for gui provide helix axis\n if (isHelix(coordinates) || isTheta(coordinates))\n return null;\n if (isTranspose(coordinates) &&\n (isPolar(coordinates) || isRadial(coordinates)))\n return null;\n // infer axis\n if (name.startsWith('x')) {\n if (isPolar(coordinates))\n return ['axisArc', [scale]];\n if (isRadial(coordinates))\n return ['axisLinear', [scale]];\n return [isTranspose(coordinates) ? 'axisY' : 'axisX', [scale]];\n }\n if (name.startsWith('y')) {\n if (isPolar(coordinates))\n return ['axisLinear', [scale]];\n if (isRadial(coordinates))\n return ['axisArc', [scale]];\n return [isTranspose(coordinates) ? 'axisX' : 'axisY', [scale]];\n }\n // Only support linear axis for z.\n if (name.startsWith('z')) {\n return ['axisZ', [scale]];\n }\n if (name.startsWith('position')) {\n if (isRadar(coordinates))\n return ['axisRadar', [scale]];\n if (!isPolar(coordinates))\n return ['axisY', [scale]];\n }\n return null;\n })\n .filter(defined);\n}\nfunction inferComponentsType(scales, coordinates) {\n const availableScales = scales.filter((scale) => isValidScale(scale));\n return [\n ...inferLegendComponentType(availableScales, coordinates),\n ...inferAxisComponentType(availableScales, coordinates),\n ];\n}\nfunction angleOf(coordinates) {\n const polar = coordOf(coordinates, 'polar');\n if (polar.length) {\n const lastPolar = polar[polar.length - 1];\n const { startAngle, endAngle } = getPolarOptions(lastPolar);\n return [startAngle, endAngle];\n }\n const radial = coordOf(coordinates, 'radial');\n if (radial.length) {\n const lastRadial = radial[radial.length - 1];\n const { startAngle, endAngle } = getRadialOptions(lastRadial);\n return [startAngle, endAngle];\n }\n return [-Math.PI / 2, (Math.PI / 2) * 3];\n}\n/**\n * match index of position\n */\nfunction matchPosition(name) {\n const match = /position(\\d*)/g.exec(name);\n if (!match)\n return null;\n return +match[1];\n}\nfunction inferAxisPositionAndOrientation(type, ordinalPosition, relativeScales, scales, coordinates) {\n // a axis only has one scale\n const { name } = relativeScales[0];\n // todo, in current resolution, the radar chart is implement by parallel + polar coordinate.\n // implementation plan to be confirmed.\n // in current implementation, it must to add the first position encode to it's last.\n // so we won't render the last axis repeatably.\n if (type === 'axisRadar') {\n const positions = scales.filter((scale) => scale.name.startsWith('position'));\n const index = matchPosition(name);\n if (index === null)\n return [null, null];\n // infer radar axis orientation\n const [startAngle, endAngle] = angleOf(coordinates);\n const positionLength = isRadar(coordinates)\n ? positions.length\n : positions.length - 1;\n const angle = ((endAngle - startAngle) / positionLength) * index + startAngle;\n return ['center', angle];\n }\n if (type === 'axisY' && isParallel(coordinates)) {\n return isTranspose(coordinates)\n ? ['center', 'horizontal']\n : ['center', 'vertical'];\n }\n // in non-cartesian coordinate systems, infer the arc axis angle\n if (type === 'axisLinear') {\n const [startAngle] = angleOf(coordinates);\n return ['center', startAngle];\n }\n if (type === 'axisArc') {\n if (ordinalPosition[0] === 'inner')\n return ['inner', null];\n return ['outer', null];\n }\n if (isPolar(coordinates))\n return ['center', null];\n if (isRadial(coordinates))\n return ['center', null];\n if ((type === 'axisX' && isReflect(coordinates)) ||\n (type === 'axisX' && isReflectY(coordinates))) {\n return ['top', null];\n }\n // if (type === 'axisX') return ['bottom', null];\n return ordinalPosition;\n}\n// @todo Infer position by coordinates.\nfunction inferComponentPositionAndOrientation(type, defaultPosition, defaultOrientation, guide, relativeScales, scales, coordinates) {\n const [startAngle] = angleOf(coordinates);\n const ordinalPositionAndOrientation = [\n guide.position || defaultPosition,\n startAngle !== null && startAngle !== void 0 ? startAngle : defaultOrientation,\n ];\n if (typeof type === 'string' && type.startsWith('axis')) {\n return inferAxisPositionAndOrientation(type, ordinalPositionAndOrientation, relativeScales, scales, coordinates);\n }\n if (typeof type === 'string' &&\n type.startsWith('legend') &&\n isPolar(coordinates)) {\n if (guide.position === 'center')\n return ['center', 'vertical'];\n }\n // for general component, use default position\n return ordinalPositionAndOrientation;\n}\nfunction inferScrollableType(name, type, coordinates = []) {\n if (name === 'x')\n return isTranspose(coordinates) ? `${type}Y` : `${type}X`;\n if (name === 'y')\n return isTranspose(coordinates) ? `${type}X` : `${type}Y`;\n return null;\n}\n/**\n * Infer scrollable components, such as slider and scrollbar.\n */\nfunction inferScrollableComponents(partialOptions, scales, library) {\n const [, createGuideComponent] = useLibrary('component', library);\n const { coordinates } = partialOptions;\n function normalized(type, channelName, scale, options) {\n const componentType = inferScrollableType(channelName, type, coordinates);\n if (!options || !componentType)\n return;\n const { props } = createGuideComponent(componentType);\n const { defaultPosition, defaultSize, defaultOrder, defaultCrossPadding: [crossPadding], } = props;\n return Object.assign(Object.assign({ position: defaultPosition, defaultSize, order: defaultOrder, type: componentType, crossPadding }, options), { scales: [scale] });\n }\n return scales\n .filter((d) => d.slider || d.scrollbar)\n .flatMap((scale) => {\n const { slider, scrollbar, name: channelName } = scale;\n return [\n normalized('slider', channelName, scale, slider),\n normalized('scrollbar', channelName, scale, scrollbar),\n ];\n })\n .filter((d) => !!d);\n}\n// !!! Note Mutate component.size and component.\nexport function computeComponentSize(component, crossSize, crossPadding, position, theme, library) {\n // Only compute and update size of components in padding area.\n const { type } = component;\n const paddingAreas = ['left', 'right', 'bottom', 'top'];\n if (!paddingAreas.includes(position))\n return;\n if (typeof type !== 'string')\n return;\n const t = type;\n const createCompute = () => {\n if (t.startsWith('axis'))\n return computeAxisSize;\n if (t.startsWith('group'))\n return computeGroupSize;\n if (t.startsWith('legendContinuous'))\n return computeContinuousLegendSize;\n if (t === 'legendCategory')\n return computeCategoryLegendSize;\n if (t.startsWith('slider'))\n return computeSliderSize;\n if (t === 'title')\n return computeTitleSize;\n if (t.startsWith('scrollbar'))\n return computeScrollbarSize;\n return () => { };\n };\n return createCompute()(component, crossSize, crossPadding, position, theme, library);\n}\nfunction computeGroupSize(component, crossSize, crossPadding, position, theme, library) {\n const { children } = component;\n const maxCrossPadding = max(children, (d) => d.crossPadding);\n children.forEach((d) => (d.crossPadding = maxCrossPadding));\n children.forEach((child) => computeComponentSize(child, crossSize, crossPadding, position, theme, library));\n const maxSize = max(children, (d) => d.size);\n component.size = maxSize;\n children.forEach((d) => (d.size = maxSize));\n}\nfunction computeScrollbarSize(component, crossSize, crossPadding, position, theme, library) {\n const { trackSize = 6 } = deepMix({}, theme.scrollbar, component);\n component.size = trackSize;\n}\nfunction computeTitleSize(component, crossSize, crossPadding, position, theme, library) {\n const _a = deepMix({}, theme.title, component), { title, subtitle, spacing = 0 } = _a, style = __rest(_a, [\"title\", \"subtitle\", \"spacing\"]);\n if (title) {\n const titleStyle = subObject(style, 'title');\n const titleBBox = computeLabelSize(title, titleStyle);\n component.size = titleBBox.height;\n }\n if (subtitle) {\n const subtitleStyle = subObject(style, 'subtitle');\n const subtitleBBox = computeLabelSize(subtitle, subtitleStyle);\n component.size += spacing + subtitleBBox.height;\n }\n}\nfunction computeSliderSize(component, crossSize, crossPadding, position, theme, library) {\n const styleOf = () => {\n const { slider } = theme;\n return deepMix({}, slider, component);\n };\n const { trackSize, handleIconSize } = styleOf();\n const size = Math.max(trackSize, handleIconSize * 2.4);\n component.size = size;\n}\nfunction computeAxisSize(component, crossSize, crossPadding, position, theme, library) {\n var _a;\n // If padding is auto, use hide as the labelTransform by default\n // to avoid overlap between labels.\n component.transform = component.transform || [{ type: 'hide' }];\n // Vertical or horizontal.\n const isVertical = position === 'left' || position === 'right';\n // Get styles to be applied.\n const style = styleOf(component, position, theme);\n const { tickLength = 0, labelSpacing = 0, titleSpacing = 0, labelAutoRotate } = style, rest = __rest(style, [\"tickLength\", \"labelSpacing\", \"titleSpacing\", \"labelAutoRotate\"]);\n // Compute Labels.\n const scale = createScale(component, library);\n const labelBBoxes = computeLabelsBBox(rest, scale);\n const paddingTick = tickLength + labelSpacing;\n if (labelBBoxes && labelBBoxes.length) {\n const maxLabelWidth = max(labelBBoxes, (d) => d.width);\n const maxLabelHeight = max(labelBBoxes, (d) => d.height);\n if (isVertical) {\n component.size = maxLabelWidth + paddingTick;\n }\n else {\n const { tickFilter, labelTransform } = component;\n // If the labels can't be placed horizontally, and labelTransform is unset,\n // rotate 90 deg to display them.\n if (overflowX(scale, labelBBoxes, crossSize, crossPadding, tickFilter) &&\n !labelTransform &&\n labelAutoRotate !== false &&\n labelAutoRotate !== null) {\n component.labelTransform = 'rotate(90)';\n component.size = maxLabelWidth + paddingTick;\n }\n else {\n component.labelTransform = (_a = component.labelTransform) !== null && _a !== void 0 ? _a : 'rotate(0)';\n component.size = maxLabelHeight + paddingTick;\n }\n }\n }\n else {\n component.size = tickLength;\n }\n // Compute title.\n const titleBBox = computeTitleBBox(rest);\n if (titleBBox) {\n if (isVertical) {\n component.size += titleSpacing + titleBBox.width;\n }\n else {\n component.size += titleSpacing + titleBBox.height;\n }\n }\n}\nfunction computeContinuousLegendSize(component, crossSize, crossPadding, position, theme, library) {\n // Get styles.\n const styleOf = () => {\n const { legendContinuous } = theme;\n return deepMix({}, legendContinuous, component);\n };\n const _a = styleOf(), { labelSpacing = 0, titleSpacing = 0 } = _a, rest = __rest(_a, [\"labelSpacing\", \"titleSpacing\"]);\n // Vertical or horizontal.\n const isVertical = position === 'left' || position === 'right';\n // Ribbon styles.\n const ribbonStyles = subObject(rest, 'ribbon');\n const { size: ribbonSize } = ribbonStyles;\n const handleIconStyles = subObject(rest, 'handleIcon');\n const { size: handleIconSize } = handleIconStyles;\n const mainSize = Math.max(ribbonSize, handleIconSize * 2.4);\n component.size = mainSize;\n // Compute labels.\n const scale = createScale(component, library);\n const labelBBoxes = computeLabelsBBox(rest, scale);\n if (labelBBoxes) {\n const key = isVertical ? 'width' : 'height';\n const size = max(labelBBoxes, (d) => d[key]);\n component.size += size + labelSpacing;\n }\n // Compute title.\n const titleBBox = computeTitleBBox(rest);\n if (titleBBox) {\n if (isVertical) {\n component.size = Math.max(component.size, titleBBox.width);\n }\n else {\n component.size += titleSpacing + titleBBox.height;\n }\n }\n}\nfunction computeCategoryLegendSize(component, crossSize0, crossPadding, position, theme, library) {\n const styleOf = () => {\n const { legendCategory } = theme;\n const { title } = component;\n const [defaultTitle, specifiedTitle] = Array.isArray(title)\n ? [title, undefined]\n : [undefined, title];\n return deepMix({ title: defaultTitle }, legendCategory, Object.assign(Object.assign({}, component), { title: specifiedTitle }));\n };\n const _a = styleOf(), { itemSpacing, itemMarkerSize, titleSpacing, rowPadding, colPadding, maxCols = Infinity, maxRows = Infinity } = _a, rest = __rest(_a, [\"itemSpacing\", \"itemMarkerSize\", \"titleSpacing\", \"rowPadding\", \"colPadding\", \"maxCols\", \"maxRows\"]);\n const { cols, length } = component;\n const getRows = (rows) => Math.min(rows, maxRows);\n const getCols = (cols) => Math.min(cols, maxCols);\n // Vertical or horizontal.\n const isVertical = position === 'left' || position === 'right';\n const crossSize = length === undefined\n ? crossSize0 + (isVertical ? 0 : crossPadding[0] + crossPadding[1])\n : length;\n // Compute title.\n const titleBBox = computeTitleBBox(rest);\n const scale = createScale(component, library);\n const labelBBoxes = computeLabelsBBox(rest, scale, 'itemLabel');\n const height = Math.max(labelBBoxes[0].height, itemMarkerSize) + rowPadding;\n const widthOf = (w, padding = 0) => itemMarkerSize + w + itemSpacing[0] + padding;\n // Only support grid layout for vertical area.\n const computeVerticalSize = () => {\n let maxSize = -Infinity;\n let pos = 0;\n let cols = 1;\n let rows = 0;\n let maxRows = -Infinity;\n let maxPos = -Infinity;\n const titleHeight = titleBBox ? titleBBox.height : 0;\n const maxHeight = crossSize - titleHeight;\n for (const { width } of labelBBoxes) {\n const w = widthOf(width, colPadding);\n maxSize = Math.max(maxSize, w);\n if (pos + height > maxHeight) {\n cols++;\n maxRows = Math.max(maxRows, rows);\n maxPos = Math.max(maxPos, pos);\n rows = 1;\n pos = height;\n }\n else {\n pos += height;\n rows++;\n }\n }\n if (cols <= 1) {\n maxRows = rows;\n maxPos = pos;\n }\n component.size = maxSize * getCols(cols);\n component.length = maxPos + titleHeight;\n deepMix(component, { cols: getCols(cols), gridRow: maxRows });\n };\n // Horizontal grid layout.\n const computeHorizontalGrid = () => {\n const rows = Math.ceil(labelBBoxes.length / cols);\n const maxWidth = max(labelBBoxes, (d) => widthOf(d.width)) * cols;\n component.size = height * getRows(rows) - rowPadding;\n component.length = Math.min(maxWidth, crossSize);\n };\n // Horizontal flex layout.\n const computeHorizontalFlex = () => {\n let rows = 1;\n let pos = 0;\n let maxPos = -Infinity;\n for (const { width } of labelBBoxes) {\n const w = widthOf(width, colPadding);\n if (pos + w > crossSize) {\n maxPos = Math.max(maxPos, pos);\n pos = w;\n rows++;\n }\n else {\n pos += w;\n }\n }\n if (rows === 1)\n maxPos = pos;\n component.size = height * getRows(rows) - rowPadding;\n component.length = maxPos;\n };\n if (isVertical)\n computeVerticalSize();\n else if (typeof cols === 'number')\n computeHorizontalGrid();\n else\n computeHorizontalFlex();\n // Compute titles.\n if (titleBBox) {\n if (isVertical) {\n component.size = Math.max(component.size, titleBBox.width);\n }\n else {\n component.size += titleSpacing + titleBBox.height;\n }\n }\n}\nexport function createScale(component, library) {\n const [useScale] = useLibrary('scale', library);\n // Init scale, the tickCount of axis has higher priority than scale.\n const { scales, tickCount, tickMethod } = component;\n const scaleOptions = scales.find((d) => d.type !== 'constant' && d.type !== 'identity');\n if (tickCount !== undefined)\n scaleOptions.tickCount = tickCount;\n if (tickMethod !== undefined)\n scaleOptions.tickMethod = tickMethod;\n return useScale(scaleOptions);\n}\nexport function computeLabelsBBox(component, scale, key = 'label') {\n const { labelFormatter, tickFilter, label = true } = component, style = __rest(component, [\"labelFormatter\", \"tickFilter\", \"label\"]);\n if (!label)\n return null;\n // Get labels to be rendered.\n const labels = labelsOf(scale, labelFormatter, tickFilter);\n const labelStyle = subObject(style, key);\n const labelStyles = labels.map((d, i) => Object.fromEntries(Object.entries(labelStyle).map(([key, value]) => [\n key,\n typeof value === 'function' ? value(d, i) : value,\n ])));\n const labelBBoxes = labels.map((d, i) => {\n const normalizeStyle = labelStyles[i];\n return computeLabelSize(d, normalizeStyle);\n });\n // Cache boxes to avoid computed twice.\n // @todo GUI use untransformed bbox, so it can't cache if\n // label.style has transform attributes.\n const hasTransform = labelStyles.some((d) => d.transform);\n if (!hasTransform) {\n const I = labels.map((_, i) => i);\n component.indexBBox = new Map(I.map((i) => [i, [labels[i], labelBBoxes[i]]]));\n }\n return labelBBoxes;\n}\nexport function computeTitleBBox(component) {\n const isFalsy = (x) => x === false || x === null;\n const { title } = component, style = __rest(component, [\"title\"]);\n if (isFalsy(title) || title === undefined)\n return null;\n const titleStyle = subObject(style, 'title');\n const { direction, transform } = titleStyle;\n const titleText = Array.isArray(title) ? title.join(',') : title;\n if (typeof titleText !== 'string')\n return null;\n const titleBBox = computeLabelSize(titleText, Object.assign(Object.assign({}, titleStyle), { transform: transform || (direction === 'vertical' ? 'rotate(-90)' : '') }));\n return titleBBox;\n}\nexport function styleOf(axis, position, theme) {\n const { title } = axis;\n const [defaultTitle, specifiedTitle] = Array.isArray(title)\n ? [title, undefined]\n : [undefined, title];\n const { axis: baseStyle, \n // @ts-ignore\n [`axis${capitalizeFirst(position)}`]: positionStyle, } = theme;\n return deepMix({ title: defaultTitle }, baseStyle, positionStyle, Object.assign(Object.assign({}, axis), { title: specifiedTitle }));\n}\nfunction ticksOf(scale, tickFilter) {\n const ticks = scale.getTicks ? scale.getTicks() : scale.getOptions().domain;\n if (!tickFilter)\n return ticks;\n return ticks.filter(tickFilter);\n}\nfunction labelsOf(scale, labelFormatter, tickFilter) {\n const T = ticksOf(scale, tickFilter);\n const ticks = T.map((d) => (typeof d === 'number' ? prettyNumber(d) : d));\n const formatter = labelFormatter\n ? typeof labelFormatter === 'string'\n ? format(labelFormatter)\n : labelFormatter\n : scale.getFormatter\n ? scale.getFormatter()\n : (d) => `${d}`;\n return ticks.map(formatter);\n}\nfunction offsetOf(scale, d) {\n if (!scale.getBandWidth)\n return 0;\n const offset = scale.getBandWidth(d) / 2;\n return offset;\n}\nfunction overflowX(scale, labelBBoxes, crossSize, crossPadding, tickFilter) {\n // If actual size bigger than container size, overflow.\n const totalSize = sum(labelBBoxes, (d) => d.width);\n if (totalSize > crossSize)\n return true;\n // Clone scale to get visual position for labels.\n const scaleX = scale.clone();\n scaleX.update({ range: [0, crossSize] });\n const ticks = ticksOf(scale, tickFilter);\n const X = ticks.map((d) => scaleX.map(d) + offsetOf(scaleX, d));\n const I = ticks.map((_, i) => i);\n const startX = -crossPadding[0];\n const endX = crossSize + crossPadding[1];\n const extent = (x, bbox) => {\n const { width } = bbox;\n return [x - width / 2, x + width / 2];\n };\n // Collision detection.\n for (let i = 0; i < I.length; i++) {\n const x = X[i];\n const [x0, x1] = extent(x, labelBBoxes[i]);\n // If a label is out of plot area, overflow.\n if (x0 < startX || x1 > endX)\n return true;\n const y = X[i + 1];\n if (y) {\n // If two labels intersect, overflow.\n const [y0] = extent(y, labelBBoxes[i + 1]);\n if (x1 > y0)\n return true;\n }\n }\n return false;\n}\nfunction computeLabelSize(d, style) {\n const shape = normalizeLabel(d);\n const { filter } = style, rest = __rest(style, [\"filter\"]);\n shape.attr(Object.assign(Object.assign({}, rest), { visibility: 'none' }));\n const bbox = shape.getBBox();\n return bbox;\n}\nfunction normalizeLabel(d) {\n if (d instanceof DisplayObject)\n return d;\n return new Text({ style: { text: `${d}` } });\n}\n//# sourceMappingURL=component.js.map","import { ascending, group, max, min, sum, } from '@antv/vendor/d3-array';\nimport { deepMix } from '@antv/util';\nimport { isParallel, isPolar, isRadar, radiusOf } from '../utils/coordinate';\nimport { capitalizeFirst, defined } from '../utils/helper';\nimport { divide } from '../utils/array';\nimport { camelCase } from '../utils/string';\nimport { computeComponentSize, computeLabelsBBox, computeTitleBBox, createScale, groupComponents, styleOf, } from './component';\nimport { isPolar as isPolarOptions, isRadial as isRadarOptions, } from './coordinate';\nexport function processAxisZ(components) {\n const axisX = components.find(({ type }) => type === 'axisX');\n const axisY = components.find(({ type }) => type === 'axisY');\n const axisZ = components.find(({ type }) => type === 'axisZ');\n if (axisX && axisY && axisZ) {\n axisX.plane = 'xy';\n axisY.plane = 'xy';\n axisZ.plane = 'yz';\n axisZ.origin = [axisX.bbox.x, axisX.bbox.y, 0];\n axisZ.eulerAngles = [0, -90, 0];\n axisZ.bbox.x = axisX.bbox.x;\n axisZ.bbox.y = axisX.bbox.y;\n components.push(Object.assign(Object.assign({}, axisX), { plane: 'xz', showLabel: false, showTitle: false, origin: [axisX.bbox.x, axisX.bbox.y, 0], eulerAngles: [-90, 0, 0] }));\n components.push(Object.assign(Object.assign({}, axisY), { plane: 'yz', showLabel: false, showTitle: false, origin: [axisY.bbox.x + axisY.bbox.width, axisY.bbox.y, 0], eulerAngles: [0, -90, 0] }));\n components.push(Object.assign(Object.assign({}, axisZ), { plane: 'xz', actualPosition: 'left', showLabel: false, showTitle: false, eulerAngles: [90, -90, 0] }));\n }\n}\nexport function computeLayout(components, options, theme, library) {\n var _a, _b;\n const { width, height, depth, x = 0, y = 0, z = 0, inset = (_a = theme.inset) !== null && _a !== void 0 ? _a : 0, insetLeft = inset, insetTop = inset, insetBottom = inset, insetRight = inset, margin = (_b = theme.margin) !== null && _b !== void 0 ? _b : 0, marginLeft = margin, marginBottom = margin, marginTop = margin, marginRight = margin, padding = theme.padding, paddingBottom = padding, paddingLeft = padding, paddingRight = padding, paddingTop = padding, } = computeInset(components, options, theme, library);\n const MIN_CONTENT_RATIO = 1 / 4;\n const maybeClamp = (viewWidth, paddingLeft, paddingRight, pl0, pr0) => {\n // Only clamp when has marks.\n const { marks } = options;\n if (marks.length === 0)\n return [pl0, pr0];\n // If size of content is enough, skip.\n const contentSize = viewWidth - pl0 - pr0;\n const diff = contentSize - viewWidth * MIN_CONTENT_RATIO;\n if (diff > 0)\n return [pl0, pr0];\n // Shrink start and end size equally.\n const shrinkSize = viewWidth * (1 - MIN_CONTENT_RATIO);\n return [\n paddingLeft === 'auto' ? (shrinkSize * pl0) / (pl0 + pr0) : pl0,\n paddingRight === 'auto' ? (shrinkSize * pr0) / (pl0 + pr0) : pr0,\n ];\n };\n const roughPadding = (padding) => (padding === 'auto' ? 20 : padding !== null && padding !== void 0 ? padding : 20);\n const rpt = roughPadding(paddingTop);\n const rpb = roughPadding(paddingBottom);\n // Compute paddingLeft and paddingRight first to get innerWidth.\n const horizontalPadding = computePadding(components, height - rpt - rpb, [rpt + marginTop, rpb + marginBottom], ['left', 'right'], options, theme, library);\n const { paddingLeft: pl0, paddingRight: pr0 } = horizontalPadding;\n const viewWidth = width - marginLeft - marginRight;\n const [pl, pr] = maybeClamp(viewWidth, paddingLeft, paddingRight, pl0, pr0);\n const iw = viewWidth - pl - pr;\n // Compute paddingBottom and paddingTop based on innerWidth.\n const verticalPadding = computePadding(components, iw, [pl + marginLeft, pr + marginRight], ['bottom', 'top'], options, theme, library);\n const { paddingTop: pt0, paddingBottom: pb0 } = verticalPadding;\n const viewHeight = height - marginBottom - marginTop;\n const [pb, pt] = maybeClamp(viewHeight, paddingBottom, paddingTop, pb0, pt0);\n const ih = viewHeight - pb - pt;\n return {\n width,\n height,\n depth,\n insetLeft,\n insetTop,\n insetBottom,\n insetRight,\n innerWidth: iw,\n innerHeight: ih,\n paddingLeft: pl,\n paddingRight: pr,\n paddingTop: pt,\n paddingBottom: pb,\n marginLeft,\n marginBottom,\n marginTop,\n marginRight,\n x,\n y,\n z,\n };\n}\n// For composite mark with a layout algorithm and without axis,\n// such as worldcloud, circlepack.\nexport function computeRoughPlotSize(options) {\n const { height, width, padding = 0, paddingLeft = padding, paddingRight = padding, paddingTop = padding, paddingBottom = padding, margin = 16, marginLeft = margin, marginRight = margin, marginTop = margin, marginBottom = margin, inset = 0, insetLeft = inset, insetRight = inset, insetTop = inset, insetBottom = inset, } = options;\n // @todo Add this padding to theme.\n // 30 is default size for padding, which defined in runtime.\n const maybeAuto = (padding) => (padding === 'auto' ? 20 : padding);\n const finalWidth = width -\n maybeAuto(paddingLeft) -\n maybeAuto(paddingRight) -\n marginLeft -\n marginRight -\n insetLeft -\n insetRight;\n const finalHeight = height -\n maybeAuto(paddingTop) -\n maybeAuto(paddingBottom) -\n marginTop -\n marginBottom -\n insetTop -\n insetBottom;\n return { width: finalWidth, height: finalHeight };\n}\nfunction computeInset(components, options, theme, library) {\n const { coordinates } = options;\n if (!isPolarOptions(coordinates) && !isRadarOptions(coordinates)) {\n return options;\n }\n // Filter axis.\n const axes = components.filter((d) => typeof d.type === 'string' && d.type.startsWith('axis'));\n if (axes.length === 0)\n return options;\n const styles = axes.map((component) => {\n const key = component.type === 'axisArc' ? 'arc' : 'linear';\n return styleOf(component, key, theme);\n });\n // Compute max labelSpacing.\n const maxLabelSpacing = max(styles, (d) => { var _a; return (_a = d.labelSpacing) !== null && _a !== void 0 ? _a : 0; });\n // Compute labelBBoxes.\n const labelBBoxes = axes\n .flatMap((component, i) => {\n const style = styles[i];\n const scale = createScale(component, library);\n const labels = computeLabelsBBox(style, scale);\n return labels;\n })\n .filter(defined);\n const size = max(labelBBoxes, (d) => d.height) + maxLabelSpacing;\n // Compute titles.\n const titleBBoxes = axes\n .flatMap((_, i) => {\n const style = styles[i];\n return computeTitleBBox(style);\n })\n .filter((d) => d !== null);\n const titleSize = titleBBoxes.length === 0 ? 0 : max(titleBBoxes, (d) => d.height);\n // Update inset.\n const { inset = size, insetLeft = inset, insetBottom = inset, insetTop = inset + titleSize, insetRight = inset, } = options;\n return Object.assign(Object.assign({}, options), { insetLeft, insetBottom, insetTop, insetRight });\n}\n/**\n * @todo Support percentage size(e.g. 50%)\n */\nfunction computePadding(components, crossSize, crossPadding, positions, options, theme, library) {\n const positionComponents = group(components, (d) => d.position);\n const { padding = theme.padding, paddingLeft = padding, paddingRight = padding, paddingBottom = padding, paddingTop = padding, } = options;\n const layout = {\n paddingBottom,\n paddingLeft,\n paddingTop,\n paddingRight,\n };\n for (const position of positions) {\n const key = `padding${capitalizeFirst(camelCase(position))}`;\n const components = positionComponents.get(position) || [];\n const value = layout[key];\n const defaultSizeOf = (d) => {\n if (d.size === undefined)\n d.size = d.defaultSize;\n };\n const sizeOf = (d) => {\n if (d.type === 'group') {\n d.children.forEach(defaultSizeOf);\n d.size = max(d.children, (d) => d.size);\n }\n else {\n d.size = d.defaultSize;\n }\n };\n const autoSizeOf = (d) => {\n if (d.size)\n return;\n if (value !== 'auto')\n sizeOf(d);\n else {\n // Compute component size dynamically.\n computeComponentSize(d, crossSize, crossPadding, position, theme, library);\n defaultSizeOf(d);\n }\n };\n const maybeHide = (d) => {\n if (!d.type.startsWith('axis'))\n return;\n if (d.labelAutoHide === undefined)\n d.labelAutoHide = true;\n };\n const isHorizontal = position === 'bottom' || position === 'top';\n // !!!Note\n // Mute axis component padding.\n // The first axis do not has padding.\n const minOrder = min(components, (d) => d.order);\n const axes = components.filter((d) => d.type.startsWith('axis') && d.order == minOrder);\n if (axes.length)\n axes[0].crossPadding = 0;\n // Specified padding.\n if (typeof value === 'number') {\n components.forEach(defaultSizeOf);\n components.forEach(maybeHide);\n }\n else {\n // Compute padding dynamically.\n if (components.length === 0) {\n layout[key] = 0;\n }\n else {\n const size = isHorizontal\n ? crossSize + crossPadding[0] + crossPadding[1]\n : crossSize;\n const grouped = groupComponents(components, size);\n grouped.forEach(autoSizeOf);\n const totalSize = grouped.reduce((sum, { size, crossPadding = 12 }) => sum + size + crossPadding, 0);\n layout[key] = totalSize;\n }\n }\n }\n return layout;\n}\nexport function placeComponents(components, coordinate, layout) {\n // Group components by plane & position.\n const positionComponents = group(components, (d) => `${d.plane || 'xy'}-${d.position}`);\n const { paddingLeft, paddingRight, paddingTop, paddingBottom, marginLeft, marginTop, marginBottom, marginRight, innerHeight, innerWidth, insetBottom, insetLeft, insetRight, insetTop, height, width, depth, } = layout;\n const planes = {\n xy: createSection({\n width,\n height,\n paddingLeft,\n paddingRight,\n paddingTop,\n paddingBottom,\n marginLeft,\n marginTop,\n marginBottom,\n marginRight,\n innerHeight,\n innerWidth,\n insetBottom,\n insetLeft,\n insetRight,\n insetTop,\n }),\n yz: createSection({\n width: depth,\n height: height,\n paddingLeft: 0,\n paddingRight: 0,\n paddingTop: 0,\n paddingBottom: 0,\n marginLeft: 0,\n marginTop: 0,\n marginBottom: 0,\n marginRight: 0,\n innerWidth: depth,\n innerHeight: height,\n insetBottom: 0,\n insetLeft: 0,\n insetRight: 0,\n insetTop: 0,\n }),\n xz: createSection({\n width,\n height: depth,\n paddingLeft: 0,\n paddingRight: 0,\n paddingTop: 0,\n paddingBottom: 0,\n marginLeft: 0,\n marginTop: 0,\n marginBottom: 0,\n marginRight: 0,\n innerWidth: width,\n innerHeight: depth,\n insetBottom: 0,\n insetLeft: 0,\n insetRight: 0,\n insetTop: 0,\n }),\n };\n for (const [key, components] of positionComponents.entries()) {\n const [plane, position] = key.split('-');\n const area = planes[plane][position];\n /**\n * @description non-entity components: axis in the center, inner, outer, component in the center\n * @description entity components: other components\n * @description no volume components take up no extra space\n */\n const [nonEntityComponents, entityComponents] = divide(components, (component) => {\n if (typeof component.type !== 'string')\n return false;\n if (position === 'center')\n return true;\n if (component.type.startsWith('axis') &&\n ['inner', 'outer'].includes(position)) {\n return true;\n }\n return false;\n });\n if (nonEntityComponents.length) {\n placeNonEntityComponents(nonEntityComponents, coordinate, area, position);\n }\n if (entityComponents.length) {\n placePaddingArea(components, coordinate, area);\n }\n }\n}\nfunction createSection({ width, height, paddingLeft, paddingRight, paddingTop, paddingBottom, marginLeft, marginTop, marginBottom, marginRight, innerHeight, innerWidth, insetBottom, insetLeft, insetRight, insetTop, }) {\n const pl = paddingLeft + marginLeft;\n const pt = paddingTop + marginTop;\n const pr = paddingRight + marginRight;\n const pb = paddingBottom + marginBottom;\n const plotWidth = width - marginLeft - marginRight;\n const centerSection = [\n pl + insetLeft,\n pt + insetTop,\n innerWidth - insetLeft - insetRight,\n innerHeight - insetTop - insetBottom,\n 'center',\n null,\n null,\n ];\n const xySection = {\n top: [\n pl,\n 0,\n innerWidth,\n pt,\n 'vertical',\n true,\n ascending,\n marginLeft,\n plotWidth,\n ],\n right: [width - pr, pt, pr, innerHeight, 'horizontal', false, ascending],\n bottom: [\n pl,\n height - pb,\n innerWidth,\n pb,\n 'vertical',\n false,\n ascending,\n marginLeft,\n plotWidth,\n ],\n left: [0, pt, pl, innerHeight, 'horizontal', true, ascending],\n 'top-left': [pl, 0, innerWidth, pt, 'vertical', true, ascending],\n 'top-right': [pl, 0, innerWidth, pt, 'vertical', true, ascending],\n 'bottom-left': [\n pl,\n height - pb,\n innerWidth,\n pb,\n 'vertical',\n false,\n ascending,\n ],\n 'bottom-right': [\n pl,\n height - pb,\n innerWidth,\n pb,\n 'vertical',\n false,\n ascending,\n ],\n center: centerSection,\n inner: centerSection,\n outer: centerSection,\n };\n return xySection;\n}\nfunction placeNonEntityComponents(components, coordinate, area, position) {\n const [axisComponents, nonAxisComponents] = divide(components, (component) => {\n if (typeof component.type === 'string' &&\n component.type.startsWith('axis')) {\n return true;\n }\n return false;\n });\n placeNonEntityAxis(axisComponents, coordinate, area, position);\n // in current stage, only legend component which located in the center can be placed\n placeCenter(nonAxisComponents, coordinate, area);\n}\nfunction placeNonEntityAxis(components, coordinate, area, position) {\n if (position === 'center') {\n if (isRadar(coordinate)) {\n placeAxisRadar(components, coordinate, area, position);\n }\n else if (isPolar(coordinate)) {\n placeArcLinear(components, coordinate, area);\n }\n else if (isParallel(coordinate)) {\n placeAxisParallel(components, coordinate, area, components[0].orientation);\n }\n }\n else if (position === 'inner') {\n placeAxisArcInner(components, coordinate, area);\n }\n else if (position === 'outer') {\n placeAxisArcOuter(components, coordinate, area);\n }\n}\nfunction placeAxisArcInner(components, coordinate, area) {\n const [x, y, , height] = area;\n const [cx, cy] = coordinate.getCenter();\n const [innerRadius] = radiusOf(coordinate);\n const r = height / 2;\n const size = innerRadius * r;\n const x0 = cx - size;\n const y0 = cy - size;\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n component.bbox = {\n x: x + x0,\n y: y + y0,\n width: size * 2,\n height: size * 2,\n };\n }\n}\nfunction placeAxisArcOuter(components, coordinate, area) {\n const [x, y, width, height] = area;\n for (const component of components) {\n component.bbox = { x, y, width, height };\n }\n}\n/**\n * @example arcX, arcY, axisLinear with angle\n */\nfunction placeArcLinear(components, coordinate, area) {\n const [x, y, width, height] = area;\n for (const component of components) {\n component.bbox = { x: x, y, width, height };\n }\n}\nfunction placeAxisParallel(components, coordinate, area, orientation) {\n if (orientation === 'horizontal') {\n placeAxisParallelHorizontal(components, coordinate, area);\n }\n else if (orientation === 'vertical') {\n placeAxisParallelVertical(components, coordinate, area);\n }\n}\nfunction placeAxisParallelVertical(components, coordinate, area) {\n const [x, y, , height] = area;\n // Create a high dimension vector and map to a list of two-dimension points.\n // [0, 0, 0] -> [x0, 0, x1, 0, x2, 0]\n const vector = new Array(components.length).fill(0);\n const points = coordinate.map(vector);\n // Extract x of each points.\n // [x0, 0, x1, 0, x2, 0] -> [x0, x1, x2]\n const X = points.filter((_, i) => i % 2 === 0).map((d) => d + x);\n // Place each axis by coordinate in parallel coordinate.\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n const x = X[i];\n const width = X[i + 1] - x;\n component.bbox = { x, y, width, height };\n }\n}\nfunction placeAxisParallelHorizontal(components, coordinate, area) {\n const [x, y, width] = area;\n // Create a high dimension vector and map to a list of two-dimension points.\n // [0, 0, 0] -> [height, y0, height, y1, height, y2]\n const vector = new Array(components.length).fill(0);\n const points = coordinate.map(vector);\n // Extract y of each points.\n // [x0, 0, x1, 0, x2, 0] -> [x0, x1, x2]\n const Y = points.filter((_, i) => i % 2 === 1).map((d) => d + y);\n // Place each axis by coordinate in parallel coordinate.\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n const y = Y[i];\n const height = Y[i + 1] - y;\n component.bbox = { x, y, width, height };\n }\n}\nfunction placeAxisRadar(components, coordinate, area, position) {\n const [x, y, width, height] = area;\n for (const component of components) {\n component.bbox = { x, y, width, height };\n component.radar = {\n index: components.indexOf(component),\n count: components.length,\n };\n }\n}\nfunction placePaddingArea(components, coordinate, area) {\n const [x, y, width, height, direction, reverse, comparator, minX, totalSize] = area;\n const [mainStartKey, mainStartValue, crossStartKey, crossStartValue, mainSizeKey, mainSizeValue, crossSizeKey, crossSizeValue,] = direction === 'vertical'\n ? ['y', y, 'x', x, 'height', height, 'width', width]\n : ['x', x, 'y', y, 'width', width, 'height', height];\n // Sort components by order.\n // The smaller the order, the closer to center.\n components.sort((a, b) => comparator === null || comparator === void 0 ? void 0 : comparator(a.order, b.order));\n const isLarge = (type) => type === 'title' || type === 'group' || type.startsWith('legend');\n const crossSizeOf = (type, small, bigger) => {\n if (bigger === undefined)\n return small;\n if (isLarge(type))\n return bigger;\n return small;\n };\n const crossStartOf = (type, x, minX) => {\n if (minX === undefined)\n return x;\n if (isLarge(type))\n return minX;\n return x;\n };\n const startValue = reverse ? mainStartValue + mainSizeValue : mainStartValue;\n for (let i = 0, start = startValue; i < components.length; i++) {\n const component = components[i];\n const { crossPadding = 0, type } = component;\n const { size } = component;\n component.bbox = {\n [mainStartKey]: reverse\n ? start - size - crossPadding\n : start + crossPadding,\n [crossStartKey]: crossStartOf(type, crossStartValue, minX),\n [mainSizeKey]: size,\n [crossSizeKey]: crossSizeOf(type, crossSizeValue, totalSize),\n };\n start += (size + crossPadding) * (reverse ? -1 : 1);\n }\n // Place group components.\n const groupComponents = components.filter((d) => d.type === 'group');\n for (const group of groupComponents) {\n const { bbox, children } = group;\n const size = bbox[crossSizeKey];\n const step = size / children.length;\n const justifyContent = children.reduce((j, child) => {\n var _a;\n const j0 = (_a = child.layout) === null || _a === void 0 ? void 0 : _a.justifyContent;\n return j0 ? j0 : j;\n }, 'flex-start');\n const L = children.map((d, i) => {\n const { length = step, padding = 0 } = d;\n return length + (i === children.length - 1 ? 0 : padding);\n });\n const totalLength = sum(L);\n const diff = size - totalLength;\n const offset = justifyContent === 'flex-start'\n ? 0\n : justifyContent === 'center'\n ? diff / 2\n : diff;\n for (let i = 0, start = bbox[crossStartKey] + offset; i < children.length; i++) {\n const component = children[i];\n const { padding = 0 } = component;\n const interval = i === children.length - 1 ? 0 : padding;\n component.bbox = {\n [mainSizeKey]: bbox[mainSizeKey],\n [mainStartKey]: bbox[mainStartKey],\n [crossStartKey]: start,\n [crossSizeKey]: L[i] - interval,\n };\n deepMix(component, { layout: { justifyContent } });\n start += L[i];\n }\n }\n}\n/**\n * @example legend in the center of radial or polar system\n */\nfunction placeCenter(components, coordinate, area) {\n if (components.length === 0)\n return;\n const [x, y, width, height] = area;\n const [innerRadius] = radiusOf(coordinate);\n const r = ((height / 2) * innerRadius) / Math.sqrt(2);\n const cx = x + width / 2;\n const cy = y + height / 2;\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n component.bbox = { x: cx - r, y: cy - r, width: r * 2, height: r * 2 };\n }\n}\n//# sourceMappingURL=layout.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Rect } from '@antv/g';\nimport { deepMix, upperFirst, isArray } from '@antv/util';\nimport { group, groups } from '@antv/vendor/d3-array';\nimport { format } from '@antv/vendor/d3-format';\nimport { mapObject } from '../utils/array';\nimport { ChartEvent } from '../utils/event';\nimport { isStrictObject, appendTransform, compose, copyAttributes, defined, error, maybeSubObject, subObject, useMemo, } from '../utils/helper';\nimport { select, Selection } from '../utils/selection';\nimport { groupComponents, inferComponent, normalizeComponents, renderComponent, } from './component';\nimport { AREA_CLASS_NAME, COMPONENT_CLASS_NAME, ELEMENT_CLASS_NAME, LABEL_CLASS_NAME, LABEL_LAYER_CLASS_NAME, MAIN_LAYER_CLASS_NAME, PLOT_CLASS_NAME, VIEW_CLASS_NAME, } from './constant';\nimport { coordinate2Transform, createCoordinate } from './coordinate';\nimport { computeLayout, computeRoughPlotSize, placeComponents, processAxisZ, } from './layout';\nimport { documentOf, useLibrary } from './library';\nimport { initializeMark } from './mark';\nimport { applyScale, assignScale, collectScales, inferScale, syncFacetsScales, useRelationScale, groupTransform, } from './scale';\nimport { applyDataTransform } from './transform';\nexport function plot(options, selection, context) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const { library } = context;\n const [useComposition] = useLibrary('composition', library);\n const [useInteraction] = useLibrary('interaction', library);\n // Some helper functions.\n const marks = new Set(Object.keys(library)\n .map((d) => { var _a; return (_a = /mark\\.(.*)/.exec(d)) === null || _a === void 0 ? void 0 : _a[1]; })\n .filter(defined));\n const staticMarks = new Set(Object.keys(library)\n .map((d) => { var _a; return (_a = /component\\.(.*)/.exec(d)) === null || _a === void 0 ? void 0 : _a[1]; })\n .filter(defined));\n const typeOf = (node) => {\n const { type } = node;\n if (typeof type === 'function') {\n // @ts-ignore\n const { props = {} } = type;\n const { composite = true } = props;\n if (composite)\n return 'mark';\n }\n if (typeof type !== 'string')\n return type;\n if (marks.has(type) || staticMarks.has(type))\n return 'mark';\n return type;\n };\n const isMark = (node) => typeOf(node) === 'mark';\n const isStandardView = (node) => typeOf(node) === 'standardView';\n const isStaticMark = (node) => {\n const { type } = node;\n if (typeof type !== 'string')\n return false;\n if (staticMarks.has(type))\n return true;\n return false;\n };\n const transform = (node) => {\n if (isStandardView(node))\n return [node];\n const type = typeOf(node);\n const composition = useComposition({ type, static: isStaticMark(node) });\n return composition(node);\n };\n // Some temporary variables help parse the view tree.\n const views = [];\n const viewNode = new Map();\n const nodeState = new Map();\n const discovered = [options];\n const nodeGenerators = [];\n while (discovered.length) {\n const node = discovered.shift();\n if (isStandardView(node)) {\n // Initialize view to get data to be visualized. If the marks\n // of the view have already been initialized (facet view),\n // initialize the view based on the initialized mark states,\n // otherwise initialize it from beginning.\n const state = nodeState.get(node);\n const [view, children] = state\n ? initializeState(state, node, library)\n : yield initializeView(node, context);\n viewNode.set(view, node);\n views.push(view);\n // Transform children, they will be transformed into\n // standardView if they are mark or view node.\n const transformedNodes = children\n .flatMap(transform)\n .map((d) => coordinate2Transform(d, library));\n discovered.push(...transformedNodes);\n // Only StandardView can be treated as facet and it\n // should sync position scales among facets normally.\n if (transformedNodes.every(isStandardView)) {\n const states = yield Promise.all(transformedNodes.map((d) => initializeMarks(d, context)));\n // Note!!!\n // This will mutate scales for marks.\n syncFacetsScales(states);\n for (let i = 0; i < transformedNodes.length; i++) {\n const nodeT = transformedNodes[i];\n const state = states[i];\n nodeState.set(nodeT, state);\n }\n }\n }\n else {\n // Apply transform to get data in advance for non-mark composition\n // node, which makes sure that composition node can preprocess the\n // data to produce more nodes based on it.\n const n = isMark(node) ? node : yield applyTransform(node, context);\n const N = transform(n);\n if (Array.isArray(N))\n discovered.push(...N);\n else if (typeof N === 'function')\n nodeGenerators.push(N());\n }\n }\n context.emitter.emit(ChartEvent.BEFORE_PAINT);\n // Plot chart.\n const enterContainer = new Map();\n const updateContainer = new Map();\n const transitions = [];\n selection\n .selectAll(className(VIEW_CLASS_NAME))\n .data(views, (d) => d.key)\n .join((enter) => enter\n .append('g')\n .attr('className', VIEW_CLASS_NAME)\n .attr('id', (view) => view.key)\n .call(applyTranslate)\n .each(function (view, i, element) {\n plotView(view, select(element), transitions, context);\n enterContainer.set(view, element);\n }), (update) => update.call(applyTranslate).each(function (view, i, element) {\n plotView(view, select(element), transitions, context);\n updateContainer.set(view, element);\n }), (exit) => exit\n .each(function (d, i, element) {\n // Remove existed interactions.\n const interactions = element['nameInteraction'].values();\n for (const interaction of interactions) {\n interaction.destroy();\n }\n })\n .remove());\n // Apply interactions.\n const viewInstanceof = (viewContainer, updateInteractions, oldStore) => {\n return Array.from(viewContainer.entries()).map(([view, container]) => {\n // Index state by component or interaction name,\n // such as legend, scrollbar, brushFilter.\n // Each state transform options to another options.\n const store = oldStore || new Map();\n const setState = (key, reducer = (x) => x) => store.set(key, reducer);\n const options = viewNode.get(view);\n const update = createUpdateView(select(container), options, context);\n return {\n view,\n container,\n options,\n setState,\n update: (from, updateTypes) => __awaiter(this, void 0, void 0, function* () {\n // Apply all state functions to get new options.\n const reducer = compose(Array.from(store.values()));\n const newOptions = reducer(options);\n return yield update(newOptions, from, () => {\n if (isArray(updateTypes)) {\n updateInteractions(viewContainer, updateTypes, store);\n }\n });\n }),\n };\n });\n };\n const updateInteractions = (container = updateContainer, updateType, oldStore) => {\n var _a;\n // Interactions for update views.\n const updateViewInstances = viewInstanceof(container, updateInteractions, oldStore);\n for (const target of updateViewInstances) {\n const { options, container } = target;\n const nameInteraction = container['nameInteraction'];\n let typeOptions = inferInteraction(options);\n if (updateType) {\n typeOptions = typeOptions.filter((v) => updateType.includes(v[0]));\n }\n for (const typeOption of typeOptions) {\n const [type, option] = typeOption;\n // Remove interaction for existed views.\n const prevInteraction = nameInteraction.get(type);\n if (prevInteraction)\n (_a = prevInteraction.destroy) === null || _a === void 0 ? void 0 : _a.call(prevInteraction);\n // Apply new interaction.\n if (option) {\n const interaction = useThemeInteraction(target.view, type, option, useInteraction);\n const destroy = interaction(target, updateViewInstances, context.emitter);\n nameInteraction.set(type, { destroy });\n }\n }\n }\n };\n // Interactions for enter views.\n const enterViewInstances = viewInstanceof(enterContainer, updateInteractions);\n for (const target of enterViewInstances) {\n const { options } = target;\n // A Map index interaction by interaction name.\n const nameInteraction = new Map();\n target.container['nameInteraction'] = nameInteraction;\n // Apply interactions.\n for (const typeOption of inferInteraction(options)) {\n const [type, option] = typeOption;\n if (option) {\n const interaction = useThemeInteraction(target.view, type, option, useInteraction);\n const destroy = interaction(target, enterViewInstances, context.emitter);\n nameInteraction.set(type, { destroy });\n }\n }\n }\n updateInteractions();\n // Author animations.\n const { width, height } = options;\n const keyframes = [];\n for (const nodeGenerator of nodeGenerators) {\n // Delay the rendering of animation keyframe. Different animation\n // created by different nodeGenerator will play in the same time.\n // eslint-disable-next-line no-async-promise-executor\n const keyframe = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n for (const node of nodeGenerator) {\n const sizedNode = Object.assign({ width, height }, node);\n yield plot(sizedNode, selection, context);\n }\n resolve();\n }));\n keyframes.push(keyframe);\n }\n context.views = views;\n // Clear and update animation.\n (_a = context.animations) === null || _a === void 0 ? void 0 : _a.forEach((animation) => animation === null || animation === void 0 ? void 0 : animation.cancel());\n context.animations = transitions;\n context.emitter.emit(ChartEvent.AFTER_PAINT);\n // Note!!!\n // The returned promise will never resolved if one of nodeGenerator\n // never stop to yield node, which may created by a keyframe composition\n // with iteration count set to infinite.\n const finished = transitions\n .filter(defined)\n .map(cancel)\n .map((d) => d.finished);\n return Promise.all([...finished, ...keyframes]);\n });\n}\nfunction applyTranslate(selection) {\n selection.style('transform', (d) => `translate(${d.layout.x}, ${d.layout.y})`);\n}\nfunction definedInteraction(library) {\n const [, createInteraction] = useLibrary('interaction', library);\n return (d) => {\n const [name, options] = d;\n try {\n return [name, createInteraction(name)];\n }\n catch (_a) {\n return [name, options.type];\n }\n };\n}\nfunction createUpdateView(selection, options, context) {\n const { library } = context;\n const createDefinedInteraction = definedInteraction(library);\n const filter = (d) => d[1] && d[1].props && d[1].props.reapplyWhenUpdate;\n const interactions = inferInteraction(options);\n const updates = interactions\n .map(createDefinedInteraction)\n .filter(filter)\n .map((d) => d[0]);\n return (newOptions, source, callback) => __awaiter(this, void 0, void 0, function* () {\n const transitions = [];\n const [newView, newChildren] = yield initializeView(newOptions, context);\n plotView(newView, selection, transitions, context);\n // Update interaction need to reapply when update.\n for (const name of updates.filter((d) => d !== source)) {\n updateInteraction(name, selection, newOptions, newView, context);\n }\n for (const child of newChildren) {\n plot(child, selection, context);\n }\n callback();\n return { options: newOptions, view: newView };\n });\n}\nfunction updateInteraction(name, selection, options, view, context) {\n var _a;\n const { library } = context;\n const [useInteraction] = useLibrary('interaction', library);\n // Instances for interaction.\n const container = selection.node();\n const nameInteraction = container['nameInteraction'];\n const interactionOptions = inferInteraction(options).find(([d]) => d === name);\n // Destroy older interaction.\n const interaction = nameInteraction.get(name);\n if (!interaction)\n return;\n (_a = interaction.destroy) === null || _a === void 0 ? void 0 : _a.call(interaction);\n if (!interactionOptions[1])\n return;\n // Apply new interaction.\n const applyInteraction = useThemeInteraction(view, name, interactionOptions[1], useInteraction);\n const target = {\n options,\n view,\n container: selection.node(),\n update: (options) => Promise.resolve(options),\n };\n const destroy = applyInteraction(target, [], context.emitter);\n nameInteraction.set(name, { destroy });\n}\nfunction initializeView(options, context) {\n return __awaiter(this, void 0, void 0, function* () {\n const { library } = context;\n const flattenOptions = yield transformMarks(options, context);\n const mergedOptions = bubbleOptions(flattenOptions);\n // @todo Remove this.\n // !!! NOTE: Mute original view options.\n // Update interaction and coordinate for this view.\n options.interaction = mergedOptions.interaction;\n options.coordinate = mergedOptions.coordinate;\n // @ts-ignore\n options.marks = [...mergedOptions.marks, ...mergedOptions.components];\n const transformedOptions = coordinate2Transform(mergedOptions, library);\n const state = yield initializeMarks(transformedOptions, context);\n return initializeState(state, transformedOptions, library);\n });\n}\nfunction bubbleOptions(options) {\n const { coordinate: viewCoordinate = {}, interaction: viewInteraction = {}, style: viewStyle = {}, marks } = options, rest = __rest(options, [\"coordinate\", \"interaction\", \"style\", \"marks\"]);\n const markCoordinates = marks.map((d) => d.coordinate || {});\n const markInteractions = marks.map((d) => d.interaction || {});\n const markViewStyles = marks.map((d) => d.viewStyle || {});\n const newCoordinate = [...markCoordinates, viewCoordinate].reduceRight((prev, cur) => deepMix(prev, cur), {});\n const newInteraction = [viewInteraction, ...markInteractions].reduce((prev, cur) => deepMix(prev, cur), {});\n const newStyle = [...markViewStyles, viewStyle].reduce((prev, cur) => deepMix(prev, cur), {});\n return Object.assign(Object.assign({}, rest), { marks, coordinate: newCoordinate, interaction: newInteraction, style: newStyle });\n}\nfunction transformMarks(options, context) {\n return __awaiter(this, void 0, void 0, function* () {\n const { library } = context;\n const [useMark, createMark] = useLibrary('mark', library);\n const staticMarks = new Set(Object.keys(library)\n .map((d) => { var _a; return (_a = /component\\.(.*)/.exec(d)) === null || _a === void 0 ? void 0 : _a[1]; })\n .filter(defined));\n const { marks } = options;\n const flattenMarks = [];\n const components = [];\n const discovered = [...marks];\n const { width, height } = computeRoughPlotSize(options);\n const markOptions = { options, width, height };\n // Pre order traversal.\n while (discovered.length) {\n const [node] = discovered.splice(0, 1);\n // Apply data transform to get data.\n const mark = (yield applyTransform(node, context));\n const { type = error('G2Mark type is required.'), key } = mark;\n // For components.\n if (staticMarks.has(type))\n components.push(mark);\n else {\n const { props = {} } = createMark(type);\n const { composite = true } = props;\n if (!composite)\n flattenMarks.push(mark);\n else {\n // Unwrap data from { value: data } to data,\n // then the composite mark can process the normalized data.\n const { data } = mark;\n const newMark = Object.assign(Object.assign({}, mark), { data: data ? (Array.isArray(data) ? data : data.value) : data });\n // Convert composite mark to marks.\n const marks = yield useMark(newMark, markOptions);\n const M = Array.isArray(marks) ? marks : [marks];\n discovered.unshift(...M.map((d, i) => (Object.assign(Object.assign({}, d), { key: `${key}-${i}` }))));\n }\n }\n }\n return Object.assign(Object.assign({}, options), { marks: flattenMarks, components });\n });\n}\nfunction initializeMarks(options, context) {\n return __awaiter(this, void 0, void 0, function* () {\n const { library } = context;\n const [useTheme] = useLibrary('theme', library);\n const [, createMark] = useLibrary('mark', library);\n const { theme: partialTheme, marks: partialMarks, coordinates = [], } = options;\n const theme = useTheme(inferTheme(partialTheme));\n const markState = new Map();\n // Initialize channels for marks.\n for (const markOptions of partialMarks) {\n const { type } = markOptions;\n const { props = {} } = createMark(type);\n const markAndState = yield initializeMark(markOptions, props, context);\n if (markAndState) {\n const [initializedMark, state] = markAndState;\n markState.set(initializedMark, state);\n }\n }\n // Group channels by scale key, each group has scale.\n const scaleChannels = group(Array.from(markState.values()).flatMap((d) => d.channels), ({ scaleKey }) => scaleKey);\n // Infer scale for each channel groups.\n for (const channels of scaleChannels.values()) {\n // Merge scale options for these channels.\n const scaleOptions = channels.reduce((total, { scale }) => deepMix(total, scale), {});\n const { scaleKey } = channels[0];\n // Use the fields of the first channel as the title.\n const { values: FV } = channels[0];\n const fields = Array.from(new Set(FV.map((d) => d.field).filter(defined)));\n const options = deepMix({\n guide: { title: fields.length === 0 ? undefined : fields },\n field: fields[0],\n }, scaleOptions);\n // Use the name of the first channel as the scale name.\n const { name } = channels[0];\n const values = channels.flatMap(({ values }) => values.map((d) => d.value));\n const scale = Object.assign(Object.assign({}, inferScale(name, values, options, coordinates, theme, library)), { uid: Symbol('scale'), key: scaleKey });\n channels.forEach((channel) => (channel.scale = scale));\n }\n return markState;\n });\n}\nfunction useThemeInteraction(view, type, option, useInteraction) {\n const theme = view.theme;\n const defaults = typeof type === 'string' ? theme[type] || {} : {};\n const interaction = useInteraction(deepMix(defaults, Object.assign({ type }, option)));\n return interaction;\n}\nfunction initializeState(markState, options, library) {\n var _a;\n const [useMark] = useLibrary('mark', library);\n const [useTheme] = useLibrary('theme', library);\n const [useLabelTransform] = useLibrary('labelTransform', library);\n const { key, frame = false, theme: partialTheme, clip, style = {}, labelTransform = [], } = options;\n const theme = useTheme(inferTheme(partialTheme));\n // Infer components and compute layout.\n const states = Array.from(markState.values());\n const scales = collectScales(states, options);\n const components = normalizeComponents(inferComponent(inferComponentScales(Array.from(scales), states, markState), options, library));\n const layout = computeLayout(components, options, theme, library);\n const coordinate = createCoordinate(layout, options, library);\n const framedStyle = frame\n ? deepMix({ mainLineWidth: 1, mainStroke: '#000' }, style)\n : style;\n // Place components and mutate their bbox.\n placeComponents(groupComponents(components), coordinate, layout);\n // AxisZ need a copy of axisX and axisY to show grids in X-Z & Y-Z planes.\n processAxisZ(components);\n // Index scale instance by uid.\n const uidScale = new Map(Array.from(markState.values()).flatMap((state) => {\n const { channels } = state;\n return channels.map(({ scale }) => [\n scale.uid,\n useRelationScale(scale, library),\n ]);\n }));\n groupTransform(markState, uidScale);\n // Scale from marks and components.\n const scaleInstance = {};\n // Initialize scale from components.\n for (const component of components) {\n const { scales: scaleDescriptors = [] } = component;\n const scales = [];\n for (const descriptor of scaleDescriptors) {\n const { name, uid } = descriptor;\n const scale = (_a = uidScale.get(uid)) !== null && _a !== void 0 ? _a : useRelationScale(descriptor, library);\n scales.push(scale);\n // Delivery the scale of axisX to the AxisY,\n // in order to calculate the angle of axisY component when rendering radar chart.\n if (name === 'y') {\n scale.update(Object.assign(Object.assign({}, scale.getOptions()), { xScale: scaleInstance.x }));\n }\n assignScale(scaleInstance, { [name]: scale });\n }\n component.scaleInstances = scales;\n }\n // Calc data to be rendered for each mark.\n // @todo More readable APIs for Container which stays\n // the same style with JS standard and lodash APIs.\n // @todo More proper way to index scale for different marks.\n const children = [];\n const dataMap = new Map();\n for (const [mark, state] of markState.entries()) {\n const { \n // scale,\n // Callback to create children options based on this mark.\n children: createChildren, \n // The total count of data (both show and hide)for this facet.\n // This is for unit visualization to sync data domain.\n dataDomain, modifier, key: markKey, data, } = mark;\n dataMap.set(markKey, data);\n const { index, channels, tooltip } = state;\n const scale = Object.fromEntries(channels.map(({ name, scale }) => [name, scale]));\n // Transform abstract value to visual value by scales.\n const markScaleInstance = mapObject(scale, ({ uid }) => uidScale.get(uid));\n assignScale(scaleInstance, markScaleInstance);\n const value = applyScale(channels, markScaleInstance);\n // Calc points and transformation for each data,\n // and then transform visual value to visual data.\n const calcPoints = useMark(mark);\n const [I, P, S] = filterValid(calcPoints(index, markScaleInstance, value, coordinate));\n const count = dataDomain || I.length;\n const T = modifier ? modifier(P, count, layout) : [];\n const titleOf = (i) => { var _a, _b; return (_b = (_a = tooltip.title) === null || _a === void 0 ? void 0 : _a[i]) === null || _b === void 0 ? void 0 : _b.value; };\n const itemsOf = (i) => tooltip.items.map((V) => V[i]);\n const visualData = I.map((d, i) => {\n const datum = Object.assign({ points: P[i], transform: T[i], index: d, markKey, viewKey: key, data: data[d] }, (tooltip && {\n title: titleOf(d),\n items: itemsOf(d),\n }));\n for (const [k, V] of Object.entries(value)) {\n datum[k] = V[d];\n if (S)\n datum[`series${upperFirst(k)}`] = S[i].map((i) => V[i]);\n }\n if (S)\n datum['seriesIndex'] = S[i];\n if (S && tooltip) {\n datum['seriesItems'] = S[i].map((si) => itemsOf(si));\n datum['seriesTitle'] = S[i].map((si) => titleOf(si));\n }\n return datum;\n });\n state.data = visualData;\n state.index = I;\n // Create children options by children callback,\n // and then propagate data to each child.\n const markChildren = createChildren === null || createChildren === void 0 ? void 0 : createChildren(visualData, markScaleInstance, layout);\n children.push(...(markChildren || []));\n }\n const view = {\n layout,\n theme,\n coordinate,\n markState,\n key,\n clip,\n scale: scaleInstance,\n style: framedStyle,\n components,\n data: dataMap,\n labelTransform: compose(labelTransform.map(useLabelTransform)),\n };\n return [view, children];\n}\nfunction plotView(view, selection, transitions, context) {\n return __awaiter(this, void 0, void 0, function* () {\n const { library } = context;\n const { components, theme, layout, markState, coordinate, key, style, clip, scale, } = view;\n // Render background for the different areas.\n const { x, y, width, height } = layout, rest = __rest(layout, [\"x\", \"y\", \"width\", \"height\"]);\n const areaKeys = ['view', 'plot', 'main', 'content'];\n const I = areaKeys.map((_, i) => i);\n const sizeKeys = ['a', 'margin', 'padding', 'inset'];\n const areaStyles = areaKeys.map((d) => maybeSubObject(Object.assign({}, theme.view, style), d));\n const areaSizes = sizeKeys.map((d) => subObject(rest, d));\n const styleArea = (selection) => selection\n .style('x', (i) => areaLayouts[i].x)\n .style('y', (i) => areaLayouts[i].y)\n .style('width', (i) => areaLayouts[i].width)\n .style('height', (i) => areaLayouts[i].height)\n .each(function (i, d, element) {\n applyStyle(select(element), areaStyles[i]);\n });\n let px = 0;\n let py = 0;\n let pw = width;\n let ph = height;\n const areaLayouts = I.map((i) => {\n const size = areaSizes[i];\n const { left = 0, top = 0, bottom = 0, right = 0 } = size;\n px += left;\n py += top;\n pw -= left + right;\n ph -= top + bottom;\n return {\n x: px,\n y: py,\n width: pw,\n height: ph,\n };\n });\n selection\n .selectAll(className(AREA_CLASS_NAME))\n .data(\n // Only render area with defined style.\n I.filter((i) => defined(areaStyles[i])), (i) => areaKeys[i])\n .join((enter) => enter\n .append('rect')\n .attr('className', AREA_CLASS_NAME)\n .style('zIndex', -2)\n .call(styleArea), (update) => update.call(styleArea), (exit) => exit.remove());\n const animationExtent = computeAnimationExtent(markState);\n const componentAnimateOptions = animationExtent\n ? { duration: animationExtent[1] }\n : false;\n // Render components.\n // @todo renderComponent return ctor and options.\n // Key for each type of component.\n // Index them grouped by position.\n for (const [, C] of groups(components, (d) => `${d.type}-${d.position}`)) {\n C.forEach((d, i) => (d.index = i));\n }\n const componentsTransitions = selection\n .selectAll(className(COMPONENT_CLASS_NAME))\n .data(components, (d) => `${d.type}-${d.position}-${d.index}`)\n .join((enter) => enter\n .append('g')\n .style('zIndex', ({ zIndex }) => zIndex || -1)\n .attr('className', COMPONENT_CLASS_NAME)\n .append((options) => renderComponent(deepMix({ animate: componentAnimateOptions, scale }, options), coordinate, theme, library, markState)), (update) => update.transition(function (options, i, element) {\n const { preserve = false } = options;\n if (preserve)\n return;\n const newComponent = renderComponent(deepMix({ animate: componentAnimateOptions, scale }, options), coordinate, theme, library, markState);\n const { attributes } = newComponent;\n const [node] = element.childNodes;\n return node.update(attributes, false);\n }))\n .transitions();\n transitions.push(...componentsTransitions.flat().filter(defined));\n // Main layer is for showing the main visual representation such as marks. There\n // may be multiple main layers for a view, each main layer correspond to one of marks.\n // @todo Test DOM structure.\n const T = selection\n .selectAll(className(PLOT_CLASS_NAME))\n .data([layout], () => key)\n .join((enter) => enter\n // Make this layer interactive, such as click and mousemove events.\n .append('rect')\n .style('zIndex', 0)\n .style('fill', 'transparent')\n .attr('className', PLOT_CLASS_NAME)\n .call(updateBBox)\n .call(updateLayers, Array.from(markState.keys()))\n .call(applyClip, clip), (update) => update\n .call(updateLayers, Array.from(markState.keys()))\n .call((selection) => {\n return animationExtent\n ? animateBBox(selection, animationExtent)\n : updateBBox(selection);\n })\n .call(applyClip, clip))\n .transitions();\n transitions.push(...T.flat());\n // Render marks with corresponding data.\n for (const [mark, state] of markState.entries()) {\n const { data } = state;\n const { key, class: cls, type } = mark;\n const viewNode = selection.select(`#${key}`);\n const shapeFunction = createMarkShapeFunction(mark, state, view, context);\n const enterFunction = createEnterFunction(mark, state, view, library);\n const updateFunction = createUpdateFunction(mark, state, view, library);\n const exitFunction = createExitFunction(mark, state, view, library);\n const facetElements = selectFacetElements(selection, viewNode, cls, 'element');\n const T = viewNode\n .selectAll(className(ELEMENT_CLASS_NAME))\n .selectFacetAll(facetElements)\n .data(data, (d) => d.key, (d) => d.groupKey)\n .join((enter) => enter\n .append(shapeFunction)\n // Note!!! Only one className can be set.\n // Using attribute as alternative for other classNames.\n .attr('className', ELEMENT_CLASS_NAME)\n .attr('markType', type)\n .transition(function (data, i, element) {\n return enterFunction(data, [element]);\n }), (update) => update.call((selection) => {\n const parent = selection.parent();\n const origin = useMemo((node) => {\n const [x, y] = node.getBounds().min;\n return [x, y];\n });\n selection\n .transition(function (data, index, element) {\n maybeFacetElement(element, parent, origin);\n const node = shapeFunction(data, index);\n const animation = updateFunction(data, [element], [node]);\n if (animation === null || animation === void 0 ? void 0 : animation.length)\n return animation;\n if (element.nodeName === node.nodeName &&\n node.nodeName !== 'g') {\n copyAttributes(element, node);\n }\n else {\n element.parentNode.replaceChild(node, element);\n node.className = ELEMENT_CLASS_NAME;\n // @ts-ignore\n node.markType = type;\n // @ts-ignore\n node.__data__ = element.__data__;\n }\n return animation;\n })\n .attr('markType', type)\n .attr('className', ELEMENT_CLASS_NAME);\n }), (exit) => {\n return exit\n .each(function (d, i, element) {\n element.__removed__ = true;\n })\n .transition(function (data, i, element) {\n return exitFunction(data, [element]);\n })\n .remove();\n }, (merge) => merge\n // Append elements to be merged.\n .append(shapeFunction)\n .attr('className', ELEMENT_CLASS_NAME)\n .attr('markType', type)\n .transition(function (data, i, element) {\n // Remove merged elements after animation finishing.\n const { __fromElements__: fromElements } = element;\n const transition = updateFunction(data, fromElements, [element]);\n const exit = new Selection(fromElements, null, element.parentNode);\n exit.transition(transition).remove();\n return transition;\n }), (split) => split\n .transition(function (data, i, element) {\n // Append splitted shapes.\n const enter = new Selection([], element.__toData__, element.parentNode);\n const toElements = enter\n .append(shapeFunction)\n .attr('className', ELEMENT_CLASS_NAME)\n .attr('markType', type)\n .nodes();\n return updateFunction(data, [element], toElements);\n })\n // Remove elements to be splitted after animation finishing.\n .remove())\n .transitions();\n transitions.push(...T.flat());\n }\n // Plot label for this view.\n plotLabel(view, selection, transitions, library, context);\n });\n}\n/**\n * Auto hide labels be specify label layout.\n */\nfunction plotLabel(view, selection, transitions, library, context) {\n const [useLabelTransform] = useLibrary('labelTransform', library);\n const { markState, labelTransform } = view;\n const labelLayer = selection.select(className(LABEL_LAYER_CLASS_NAME)).node();\n // A Map index shapeFunction by label.\n const labelShapeFunction = new Map();\n // A Map index options by label.\n const labelDescriptor = new Map();\n // Get all labels for this view.\n const labels = Array.from(markState.entries()).flatMap(([mark, state]) => {\n const { labels: labelOptions = [], key } = mark;\n const shapeFunction = createLabelShapeFunction(mark, state, view, library, context);\n const elements = selection\n .select(`#${key}`)\n .selectAll(className(ELEMENT_CLASS_NAME))\n .nodes()\n // Only select the valid element.\n .filter((n) => !n.__removed__);\n return labelOptions.flatMap((labelOption, i) => {\n const { transform = [] } = labelOption, options = __rest(labelOption, [\"transform\"]);\n return elements.flatMap((e) => {\n const L = getLabels(options, i, e);\n L.forEach((l) => {\n labelShapeFunction.set(l, (data) => shapeFunction(Object.assign(Object.assign({}, data), { element: e })));\n labelDescriptor.set(l, labelOption);\n });\n return L;\n });\n });\n });\n // Render all labels.\n const labelShapes = select(labelLayer)\n .selectAll(className(LABEL_CLASS_NAME))\n .data(labels, (d) => d.key)\n .join((enter) => enter\n .append((d) => labelShapeFunction.get(d)(d))\n .attr('className', LABEL_CLASS_NAME), (update) => update.each(function (d, i, element) {\n // @todo Handle Label with different type.\n const shapeFunction = labelShapeFunction.get(d);\n const node = shapeFunction(d);\n copyAttributes(element, node);\n }), (exit) => exit.remove())\n .nodes();\n // Apply group-level transforms.\n const labelGroups = group(labelShapes, (d) => labelDescriptor.get(d.__data__));\n const { coordinate, layout } = view;\n const labelTransformContext = {\n canvas: context.canvas,\n coordinate,\n layout,\n };\n for (const [label, shapes] of labelGroups) {\n const { transform = [] } = label;\n const transformFunction = compose(transform.map(useLabelTransform));\n transformFunction(shapes, labelTransformContext);\n }\n // Apply view-level transform.\n if (labelTransform) {\n labelTransform(labelShapes, labelTransformContext);\n }\n}\nfunction getLabels(label, labelIndex, element) {\n const { seriesIndex: SI, seriesKey, points, key, index } = element.__data__;\n const bounds = getLocalBounds(element);\n if (!SI) {\n return [\n Object.assign(Object.assign({}, label), { key: `${key}-${labelIndex}`, bounds,\n index,\n points, dependentElement: element }),\n ];\n }\n const selector = normalizeLabelSelector(label);\n const F = SI.map((index, i) => (Object.assign(Object.assign({}, label), { key: `${seriesKey[i]}-${labelIndex}`, bounds: [points[i]], index,\n points, dependentElement: element })));\n return selector ? selector(F) : F;\n}\nfunction filterValid([I, P, S]) {\n if (S)\n return [I, P, S];\n const definedIndex = [];\n const definedPoints = [];\n for (let i = 0; i < I.length; i++) {\n const d = I[i];\n const p = P[i];\n if (p.every(([x, y]) => defined(x) && defined(y))) {\n definedIndex.push(d);\n definedPoints.push(p);\n }\n }\n return [definedIndex, definedPoints];\n}\nfunction normalizeLabelSelector(label) {\n const { selector } = label;\n if (!selector)\n return null;\n if (typeof selector === 'function')\n return selector;\n if (selector === 'first')\n return (I) => [I[0]];\n if (selector === 'last')\n return (I) => [I[I.length - 1]];\n throw new Error(`Unknown selector: ${selector}`);\n}\n/**\n * Avoid getting error bounds caused by element animations.\n * @todo Remove this temporary handle method, if runtime supports\n * correct process: drawElement, do label layout and then do\n * transitions together.\n */\nfunction getLocalBounds(element) {\n const cloneElement = element.cloneNode(true);\n const animations = element.getAnimations();\n cloneElement.style.visibility = 'hidden';\n animations.forEach((animation) => {\n const keyframes = animation.effect.getKeyframes();\n cloneElement.attr(keyframes[keyframes.length - 1]);\n });\n element.parentNode.appendChild(cloneElement);\n const bounds = cloneElement.getLocalBounds();\n cloneElement.destroy();\n const { min, max } = bounds;\n return [min, max];\n}\nfunction createLabelShapeFunction(mark, state, view, library, context) {\n const [useShape] = useLibrary('shape', library);\n const { data: abstractData, encode } = mark;\n const { data: visualData, defaultLabelShape } = state;\n const point2d = visualData.map((d) => d.points);\n const channel = mapObject(encode, (d) => d.value);\n // Assemble Context.\n const { theme, coordinate } = view;\n const shapeContext = Object.assign(Object.assign({}, context), { document: documentOf(context), theme,\n coordinate });\n return (options) => {\n // Computed values from data and styles.\n const { index, points } = options;\n const datum = abstractData[index];\n const { formatter = (d) => `${d}`, transform, style: abstractStyle, render, selector, element } = options, abstractOptions = __rest(options, [\"formatter\", \"transform\", \"style\", \"render\", \"selector\", \"element\"]);\n const visualOptions = mapObject(Object.assign(Object.assign({}, abstractOptions), abstractStyle), (d) => valueOf(d, datum, index, abstractData, {\n channel,\n element,\n }));\n const { shape = defaultLabelShape, text } = visualOptions, style = __rest(visualOptions, [\"shape\", \"text\"]);\n const f = typeof formatter === 'string' ? format(formatter) : formatter;\n const value = Object.assign(Object.assign({}, style), { text: f(text, datum, index, abstractData), datum });\n // Params for create shape.\n const shapeOptions = Object.assign({ type: `label.${shape}`, render }, style);\n const shapeFunction = useShape(shapeOptions, shapeContext);\n const defaults = getDefaultsStyle(theme, 'label', shape, 'label');\n return shapeFunction(points, value, defaults, point2d);\n };\n}\nfunction valueOf(value, datum, i, data, options) {\n if (typeof value === 'function')\n return value(datum, i, data, options);\n if (typeof value !== 'string')\n return value;\n if (isStrictObject(datum) && datum[value] !== undefined)\n return datum[value];\n return value;\n}\n/**\n * Compute max duration for this frame.\n */\nfunction computeAnimationExtent(markState) {\n let maxDuration = -Infinity;\n let minDelay = Infinity;\n for (const [mark, state] of markState) {\n const { animate = {} } = mark;\n const { data } = state;\n const { enter = {}, update = {}, exit = {} } = animate;\n const { type: defaultUpdateType, duration: defaultUpdateDuration = 300, delay: defaultUpdateDelay = 0, } = update;\n const { type: defaultEnterType, duration: defaultEnterDuration = 300, delay: defaultEnterDelay = 0, } = enter;\n const { type: defaultExitType, duration: defaultExitDuration = 300, delay: defaultExitDelay = 0, } = exit;\n for (const d of data) {\n const { updateType = defaultUpdateType, updateDuration = defaultUpdateDuration, updateDelay = defaultUpdateDelay, enterType = defaultEnterType, enterDuration = defaultEnterDuration, enterDelay = defaultEnterDelay, exitDuration = defaultExitDuration, exitDelay = defaultExitDelay, exitType = defaultExitType, } = d;\n if (updateType === undefined || updateType) {\n maxDuration = Math.max(maxDuration, updateDuration + updateDelay);\n minDelay = Math.min(minDelay, updateDelay);\n }\n if (exitType === undefined || exitType) {\n maxDuration = Math.max(maxDuration, exitDuration + exitDelay);\n minDelay = Math.min(minDelay, exitDelay);\n }\n if (enterType === undefined || enterType) {\n maxDuration = Math.max(maxDuration, enterDuration + enterDelay);\n minDelay = Math.min(minDelay, enterDelay);\n }\n }\n }\n if (maxDuration === -Infinity)\n return null;\n return [minDelay, maxDuration - minDelay];\n}\nfunction selectFacetElements(selection, current, facetClassName, elementClassName) {\n const group = selection.node().parentElement;\n if (!group || typeof group.findAll !== 'function')\n return [];\n return group\n .findAll((node) => node.style.facet !== undefined &&\n node.style.facet === facetClassName &&\n node !== current.node())\n .flatMap((node) => node.getElementsByClassName(elementClassName));\n}\n/**\n * Update the parent of element and apply transform to make it\n * stay in original position.\n */\nfunction maybeFacetElement(element, parent, originOf) {\n if (!element.__facet__)\n return;\n // element -> g#main -> rect#plot\n const prePlot = element.parentNode.parentNode;\n // g#main -> rect#plot\n const newPlot = parent.parentNode;\n const [px, py] = originOf(prePlot);\n const [x, y] = originOf(newPlot);\n const translate = `translate(${px - x}, ${py - y})`;\n appendTransform(element, translate);\n parent.append(element);\n}\nfunction createMarkShapeFunction(mark, state, view, context) {\n const { library } = context;\n const [useShape] = useLibrary('shape', library);\n const { data: abstractData, encode } = mark;\n const { defaultShape, data, shape: shapeLibrary } = state;\n const channel = mapObject(encode, (d) => d.value);\n const point2d = data.map((d) => d.points);\n const { theme, coordinate } = view;\n const { type: markType, style = {} } = mark;\n const shapeContext = Object.assign(Object.assign({}, context), { document: documentOf(context), coordinate,\n theme });\n return (data) => {\n const { shape: styleShape = defaultShape } = style;\n const { shape = styleShape, points, seriesIndex, index: i } = data, v = __rest(data, [\"shape\", \"points\", \"seriesIndex\", \"index\"]);\n const value = Object.assign(Object.assign({}, v), { index: i });\n // Get data-driven style.\n // If it is a series shape, such as area and line,\n // provides the series of abstract data and indices\n // for this shape, otherwise the single datum and\n // index.\n const abstractDatum = seriesIndex\n ? seriesIndex.map((i) => abstractData[i])\n : abstractData[i];\n const I = seriesIndex ? seriesIndex : i;\n const visualStyle = mapObject(style, (d) => valueOf(d, abstractDatum, I, abstractData, { channel }));\n // Try get shape from mark first, then from library.\n const shapeFunction = shapeLibrary[shape]\n ? shapeLibrary[shape](visualStyle, shapeContext)\n : useShape(Object.assign(Object.assign({}, visualStyle), { type: shapeName(mark, shape) }), shapeContext);\n const defaults = getDefaultsStyle(theme, markType, shape, defaultShape);\n return shapeFunction(points, value, defaults, point2d);\n };\n}\nfunction getDefaultsStyle(theme, mark, shape, defaultShape) {\n if (typeof mark !== 'string')\n return;\n const { color } = theme;\n const markTheme = theme[mark] || {};\n const shapeTheme = markTheme[shape] || markTheme[defaultShape];\n return Object.assign({ color }, shapeTheme);\n}\nfunction createAnimationFunction(type, mark, state, view, library) {\n var _a, _b;\n const [, createShape] = useLibrary('shape', library);\n const [useAnimation] = useLibrary('animation', library);\n const { defaultShape, shape: shapeLibrary } = state;\n const { theme, coordinate } = view;\n const upperType = upperFirst(type);\n const key = `default${upperType}Animation`;\n // Get shape from mark first, then from library.\n const { [key]: defaultAnimation } = ((_a = shapeLibrary[defaultShape]) === null || _a === void 0 ? void 0 : _a.props) ||\n createShape(shapeName(mark, defaultShape)).props;\n const { [type]: defaultEffectTiming = {} } = theme;\n const animate = ((_b = mark.animate) === null || _b === void 0 ? void 0 : _b[type]) || {};\n const context = { coordinate };\n return (data, from, to) => {\n const { [`${type}Type`]: animation, [`${type}Delay`]: delay, [`${type}Duration`]: duration, [`${type}Easing`]: easing, } = data;\n const options = Object.assign({ type: animation || defaultAnimation }, animate);\n if (!options.type)\n return null;\n const animateFunction = useAnimation(options, context);\n const value = { delay, duration, easing };\n const A = animateFunction(from, to, deepMix(defaultEffectTiming, value));\n let an = [];\n if (!Array.isArray(A)) {\n an = [A];\n }\n else {\n an = A;\n }\n return an.filter(Boolean);\n };\n}\nfunction createEnterFunction(mark, state, view, library) {\n return createAnimationFunction('enter', mark, state, view, library);\n}\n/**\n * Animation will not cancel automatically, it should be canceled\n * manually. This is very important for performance.\n */\nfunction cancel(animation) {\n animation.finished.then(() => {\n animation.cancel();\n });\n return animation;\n}\nfunction createUpdateFunction(mark, state, view, library) {\n return createAnimationFunction('update', mark, state, view, library);\n}\nfunction createExitFunction(mark, state, view, library) {\n return createAnimationFunction('exit', mark, state, view, library);\n}\nfunction inferTheme(theme = {}) {\n if (typeof theme === 'string')\n return { type: theme };\n const { type = 'light' } = theme, rest = __rest(theme, [\"type\"]);\n return Object.assign(Object.assign({}, rest), { type });\n}\n/**\n * @todo Infer builtin tooltips.\n */\nfunction inferInteraction(view) {\n const defaults = {\n event: true,\n tooltip: true,\n // @todo Inferred by slider self.\n sliderFilter: true,\n legendFilter: true,\n scrollbarFilter: true,\n };\n const { interaction = {} } = view;\n return Object.entries(deepMix(defaults, interaction)).reverse();\n}\nfunction applyTransform(node, context) {\n return __awaiter(this, void 0, void 0, function* () {\n const { data } = node, rest = __rest(node, [\"data\"]);\n if (data == undefined)\n return node;\n const [, { data: newData }] = yield applyDataTransform([], { data }, context);\n return Object.assign({ data: newData }, rest);\n });\n}\nfunction updateBBox(selection) {\n selection\n .style('transform', (d) => `translate(${d.paddingLeft + d.marginLeft}, ${d.paddingTop + d.marginTop})`)\n .style('width', (d) => d.innerWidth)\n .style('height', (d) => d.innerHeight);\n}\nfunction animateBBox(selection, extent) {\n const [delay, duration] = extent;\n selection.transition(function (data, i, element) {\n const { transform, width, height } = element.style;\n const { paddingLeft, paddingTop, innerWidth, innerHeight, marginLeft, marginTop, } = data;\n const keyframes = [\n {\n transform,\n width,\n height,\n },\n {\n transform: `translate(${paddingLeft + marginLeft}, ${paddingTop + marginTop})`,\n width: innerWidth,\n height: innerHeight,\n },\n ];\n return element.animate(keyframes, { delay, duration, fill: 'both' });\n });\n}\nfunction shapeName(mark, name) {\n const { type } = mark;\n if (typeof name === 'string')\n return `${type}.${name}`;\n return name;\n}\n/**\n * Create and update layer for each mark.\n * All the layers created here are treated as main layers.\n */\nfunction updateLayers(selection, marks) {\n const facet = (d) => (d.class !== undefined ? `${d.class}` : '');\n // Skip for empty selection, it can't append nodes.\n const nodes = selection.nodes();\n if (nodes.length === 0)\n return;\n selection\n .selectAll(className(MAIN_LAYER_CLASS_NAME))\n .data(marks, (d) => d.key)\n .join((enter) => enter\n .append('g')\n .attr('className', MAIN_LAYER_CLASS_NAME)\n .attr('id', (d) => d.key)\n .style('facet', facet)\n .style('fill', 'transparent')\n .style('zIndex', (d) => { var _a; return (_a = d.zIndex) !== null && _a !== void 0 ? _a : 0; }), (update) => update\n .style('facet', facet)\n .style('fill', 'transparent')\n .style('zIndex', (d) => { var _a; return (_a = d.zIndex) !== null && _a !== void 0 ? _a : 0; }), (exit) => exit.remove());\n const labelLayer = selection.select(className(LABEL_LAYER_CLASS_NAME)).node();\n if (labelLayer)\n return;\n selection\n .append('g')\n .attr('className', LABEL_LAYER_CLASS_NAME)\n .style('zIndex', 0);\n}\nfunction className(...names) {\n return names.map((d) => `.${d}`).join('');\n}\nfunction applyClip(selection, clip) {\n if (!selection.node())\n return;\n selection.style('clipPath', (data) => {\n if (!clip)\n return null;\n const { paddingTop: y, paddingLeft: x, marginLeft: x1, marginTop: y1, innerWidth: width, innerHeight: height, } = data;\n return new Rect({ style: { x: x + x1, y: y + y1, width, height } });\n });\n}\nfunction inferComponentScales(scales, states, markState) {\n // add shape scale to state.\n var _a;\n // for cell, omit shape scale.\n // @todo support shape scale for cell.\n for (const [key] of markState.entries()) {\n if (key.type === 'cell') {\n return scales.filter((scale) => scale.name !== 'shape');\n }\n }\n // can't infer shape scale if there are multiple states.\n if (states.length !== 1 || scales.some((scale) => scale.name === 'shape')) {\n return scales;\n }\n const { defaultShape: shape } = states[0];\n const acceptMarkTypes = ['point', 'line', 'rect', 'hollow'];\n if (!acceptMarkTypes.includes(shape))\n return scales;\n const shapeMap = {\n point: 'point',\n line: 'hyphen',\n rect: 'square',\n hollow: 'hollow',\n };\n // create shape scale\n const field = ((_a = scales.find((scale) => scale.name === 'color')) === null || _a === void 0 ? void 0 : _a.field) || null;\n const shapeScale = {\n field,\n name: 'shape',\n type: 'constant',\n domain: [],\n range: [shapeMap[shape]],\n };\n return [...scales, shapeScale];\n}\nexport function applyStyle(selection, style) {\n for (const [key, value] of Object.entries(style)) {\n selection.style(key, value);\n }\n}\n//# sourceMappingURL=plot.js.map","import { get } from '@antv/util';\n// style: { columnWidthRatio: 0.2 } => scale: { x: { padding: 0.8 } }\nexport function columnWidthRatio(options) {\n const { style, scale, type } = options;\n const scaleOption = {};\n const columnWidthRatio = get(style, 'columnWidthRatio');\n if (columnWidthRatio && type === 'interval') {\n scaleOption.x = Object.assign(Object.assign({}, scale === null || scale === void 0 ? void 0 : scale.x), { padding: 1 - columnWidthRatio });\n }\n return Object.assign(Object.assign({}, options), { scale: Object.assign(Object.assign({}, scale), scaleOption) });\n}\n//# sourceMappingURL=style.js.map","import { Canvas as GCanvas, Group } from '@antv/g';\nimport { Renderer as CanvasRenderer } from '@antv/g-canvas';\nimport { Plugin as DragAndDropPlugin } from '@antv/g-plugin-dragndrop';\nimport { deepMix } from '@antv/util';\nimport EventEmitter from '@antv/event-emitter';\nimport { select } from '../utils/selection';\nimport { ChartEvent } from '../utils/event';\nimport { error } from '../utils/helper';\nimport { parseOptionsExpr } from '../utils/expr';\nimport { plot } from './plot';\nimport { VIEW_CLASS_NAME } from './constant';\nimport { preprocessOption } from './option-preprocess';\n/**\n * Infer key for each node of view tree.\n * Each key should be unique in the entire view tree.\n * The key is for incremental render when view tree is changed.\n * @todo Fix custom key equals to inferred key.\n */\nfunction inferKeys(options) {\n const root = deepMix({}, options);\n const nodeParent = new Map([[root, null]]);\n const nodeIndex = new Map([[null, -1]]);\n const discovered = [root];\n while (discovered.length) {\n const node = discovered.shift();\n // If key of node is not specified, using parentKey and the index for it\n // in parent.children as its key.\n // e.g. The key of node named 'a' will be 'a', and the key of node named\n // 'b' will be 'parent-1' in the following view tree specification.\n // { key: 'parent', children: [{ name: 'a', key: 'a' }, { name: 'b' }] }\n if (node.key === undefined) {\n const parent = nodeParent.get(node);\n const index = nodeIndex.get(node);\n const key = parent === null ? `${0}` : `${parent.key}-${index}`;\n node.key = key;\n }\n const { children = [] } = node;\n if (Array.isArray(children)) {\n for (let i = 0; i < children.length; i++) {\n // Clone node as well.\n const child = deepMix({}, children[i]);\n children[i] = child;\n nodeParent.set(child, node);\n nodeIndex.set(child, i);\n discovered.push(child);\n }\n }\n }\n return root;\n}\nfunction Canvas(width, height) {\n const renderer = new CanvasRenderer();\n // DragAndDropPlugin is for interaction.\n renderer.registerPlugin(new DragAndDropPlugin());\n return new GCanvas({\n width,\n height,\n container: document.createElement('div'),\n renderer: renderer,\n });\n}\nexport function render(options, context = {}, resolve = () => { }, reject = (e) => {\n throw e;\n}) {\n const afterParsedOptions = parseOptionsExpr(options);\n // Initialize the context if it is not provided.\n const { width = 640, height = 480, depth = 0 } = afterParsedOptions;\n // Preprocessing here, such as syntactic sugar.\n const preprocessedOption = preprocessOption(afterParsedOptions);\n const keyed = inferKeys(preprocessedOption);\n const { canvas = Canvas(width, height), emitter = new EventEmitter(), library, } = context;\n context.canvas = canvas;\n context.emitter = emitter;\n const { width: prevWidth, height: prevHeight } = canvas.getConfig();\n if (prevWidth !== width || prevHeight !== height) {\n canvas.resize(width, height);\n }\n emitter.emit(ChartEvent.BEFORE_RENDER);\n // Plot the chart and mutate context.\n // Make sure that plot chart after container is ready for every time.\n const selection = select(canvas.document.documentElement);\n canvas.ready\n .then(() => plot(Object.assign(Object.assign({}, keyed), { width, height, depth }), selection, context))\n .then(() => {\n // Place the center of whole scene at z axis' origin.\n if (depth) {\n const [x, y] = canvas.document.documentElement.getPosition();\n // Since `render` method can be called for multiple times, use setPosition instead of translate here.\n canvas.document.documentElement.setPosition(x, y, -depth / 2);\n }\n // Wait for the next tick.\n // FIXME: Use `rendered?` event instead of `requestAnimationFrame`.\n canvas.requestAnimationFrame(() => {\n canvas.requestAnimationFrame(() => {\n emitter.emit(ChartEvent.AFTER_RENDER);\n resolve === null || resolve === void 0 ? void 0 : resolve();\n });\n });\n })\n .catch((e) => {\n reject === null || reject === void 0 ? void 0 : reject(e);\n });\n // Return the container HTML element wraps the canvas or svg element.\n return normalizeContainer(canvas.getConfig().container);\n}\nexport function renderToMountedElement(options, context = {}, resolve = () => { }, reject = (e) => {\n throw e;\n}) {\n var _a;\n // Initialize the context if it is not provided.\n const { width = 640, height = 480 } = options;\n const keyed = inferKeys(options);\n const { group = new Group(), emitter = new EventEmitter(), library, } = context;\n if (!(group === null || group === void 0 ? void 0 : group.parentElement)) {\n error(`renderToMountedElement can't render chart to unmounted group.`);\n }\n const selection = select(group);\n context.group = group;\n context.emitter = emitter;\n context.canvas =\n context.canvas || ((_a = group === null || group === void 0 ? void 0 : group.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView);\n emitter.emit(ChartEvent.BEFORE_RENDER);\n // Plot the chart and mutate context.\n // Make sure that plot chart after container is ready for every time.\n plot(Object.assign(Object.assign({}, keyed), { width, height }), selection, context)\n .then(() => {\n var _a;\n (_a = context.canvas) === null || _a === void 0 ? void 0 : _a.requestAnimationFrame(() => {\n emitter.emit(ChartEvent.AFTER_RENDER);\n resolve === null || resolve === void 0 ? void 0 : resolve();\n });\n })\n .catch((e) => {\n reject === null || reject === void 0 ? void 0 : reject(e);\n });\n // Return the Group wraps the canvas or svg element.\n return group;\n}\nexport function destroy(options, context = {}, isDestroyCanvas = false, isClearEvents = true) {\n const { canvas, emitter } = context;\n if (canvas) {\n destroyAllInteractions(canvas);\n isDestroyCanvas ? canvas.destroy() : canvas.destroyChildren();\n }\n if (isClearEvents) {\n emitter.off();\n }\n}\n/**\n * Destroy all interactions mounted on the canvas.\n */\nfunction destroyAllInteractions(canvas) {\n const viewGroups = canvas.getRoot().querySelectorAll(`.${VIEW_CLASS_NAME}`);\n viewGroups === null || viewGroups === void 0 ? void 0 : viewGroups.forEach((group) => {\n const { nameInteraction = new Map() } = group;\n if ((nameInteraction === null || nameInteraction === void 0 ? void 0 : nameInteraction.size) > 0) {\n Array.from(nameInteraction === null || nameInteraction === void 0 ? void 0 : nameInteraction.values()).forEach((value) => {\n value === null || value === void 0 ? void 0 : value.destroy();\n });\n }\n });\n}\nfunction normalizeContainer(container) {\n return typeof container === 'string'\n ? document.getElementById(container)\n : container;\n}\n//# sourceMappingURL=render.js.map","const parseInt10 = (d) => (d ? parseInt(d) : 0);\n/**\n * @description Get the element's bounding size.\n * @param container dom element.\n * @returns the element width and height\n */\nexport function getContainerSize(container) {\n // size = width/height - padding.\n const style = getComputedStyle(container);\n const wrapperWidth = container.clientWidth || parseInt10(style.width);\n const wrapperHeight = container.clientHeight || parseInt10(style.height);\n const widthPadding = parseInt10(style.paddingLeft) + parseInt10(style.paddingRight);\n const heightPadding = parseInt10(style.paddingTop) + parseInt10(style.paddingBottom);\n return {\n width: wrapperWidth - widthPadding,\n height: wrapperHeight - heightPadding,\n };\n}\n/**\n * @description Calculate the real canvas size by view options.\n */\nexport function getBBoxSize(options) {\n const { height, width, padding = 0, paddingLeft = padding, paddingRight = padding, paddingTop = padding, paddingBottom = padding, margin = 0, marginLeft = margin, marginRight = margin, marginTop = margin, marginBottom = margin, inset = 0, insetLeft = inset, insetRight = inset, insetTop = inset, insetBottom = inset, } = options;\n // @todo Add this padding to theme.\n // 30 is default size for padding, which defined in runtime.\n const maybeAuto = (padding) => (padding === 'auto' ? 20 : padding);\n const finalWidth = width -\n maybeAuto(paddingLeft) -\n maybeAuto(paddingRight) -\n marginLeft -\n marginRight -\n insetLeft -\n insetRight;\n const finalHeight = height -\n maybeAuto(paddingTop) -\n maybeAuto(paddingBottom) -\n marginTop -\n marginBottom -\n insetTop -\n insetBottom;\n return { width: finalWidth, height: finalHeight };\n}\n//# sourceMappingURL=size.js.map","/**\n * BFS nodes and execute callback.\n */\nfunction bfs(node, callback) {\n const discovered = [node];\n while (discovered.length) {\n const currentNode = discovered.shift();\n callback && callback(currentNode);\n const children = currentNode.children || [];\n for (const child of children) {\n discovered.push(child);\n }\n }\n}\n/**\n * Hierarchy container.\n */\nexport class Node {\n constructor(value = {}, type) {\n // The parent node.\n this.parentNode = null;\n // The children nodes.\n this.children = [];\n // The index of parent children.\n this.index = 0;\n this.type = type;\n this.value = value;\n }\n /**\n * Apply specified transform to current value. Mount the node\n * to replace the original one in the tree and then return it.\n */\n map(transform = (x) => x) {\n const newValue = transform(this.value);\n this.value = newValue;\n return this;\n }\n /**\n * Set or get the specified attribute. It the value is specified, update\n * the attribute of current value and return the node. Otherwise\n * return the the attribute of current value.\n */\n attr(key, value) {\n if (arguments.length === 1)\n return this.value[key];\n return this.map((v) => ((v[key] = value), v));\n }\n /**\n * Create a new node and append to children nodes.\n */\n append(Ctor) {\n const node = new Ctor({});\n node.children = [];\n this.push(node);\n return node;\n }\n push(node) {\n node.parentNode = this;\n node.index = this.children.length;\n this.children.push(node);\n return this;\n }\n /**\n * Remove current node from parentNode.\n */\n remove() {\n const parent = this.parentNode;\n if (parent) {\n const { children } = parent;\n const index = children.findIndex((item) => item === this);\n children.splice(index, 1);\n }\n return this;\n }\n getNodeByKey(key) {\n let targetNode = null;\n const callback = (node) => {\n if (key === node.attr('key')) {\n targetNode = node;\n }\n };\n bfs(this, callback);\n return targetNode;\n }\n getNodesByType(type) {\n const nodes = [];\n const callback = (node) => {\n if (type === node.type) {\n nodes.push(node);\n }\n };\n bfs(this, callback);\n return nodes;\n }\n getNodeByType(type) {\n let node = null;\n bfs(this, (current) => {\n if (node)\n return;\n if (type === current.type)\n node = current;\n });\n return node;\n }\n /**\n * Apply specified callback to the node value.\n */\n call(callback, ...params) {\n callback(this.map(), ...params);\n return this;\n }\n getRoot() {\n // Find the root chart and render.\n let root = this;\n while (root && root.parentNode) {\n root = root.parentNode;\n }\n return root;\n }\n}\n//# sourceMappingURL=node.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { isNumber } from '@antv/util';\nimport { getContainerSize } from '../utils/size';\nimport { deepAssign } from '../utils/helper';\nimport { Node } from './node';\n// Keys can specified by new Chart({...}).\n// Keys can bubble form mark-level options to view-level options.\nexport const VIEW_KEYS = [\n 'width',\n 'height',\n 'depth',\n 'padding',\n 'paddingLeft',\n 'paddingRight',\n 'paddingBottom',\n 'paddingTop',\n 'inset',\n 'insetLeft',\n 'insetRight',\n 'insetTop',\n 'insetBottom',\n 'margin',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'autoFit',\n 'theme',\n 'title',\n 'interaction',\n];\nexport const REMOVE_FLAG = '__remove__';\nexport const CALLBACK_NODE = '__callback__';\n/** Minimum chart width */\nexport const MIN_CHART_WIDTH = 1;\n/** Minimum chart height */\nexport const MIN_CHART_HEIGHT = 1;\nexport function normalizeContainer(container) {\n if (container === undefined) {\n const container = document.createElement('div');\n container[REMOVE_FLAG] = true;\n return container;\n }\n if (typeof container === 'string') {\n const node = document.getElementById(container);\n return node;\n }\n return container;\n}\nexport function removeContainer(container) {\n const parent = container.parentNode;\n if (parent) {\n parent.removeChild(container);\n }\n}\nexport function normalizeRoot(node) {\n if (node.type !== null)\n return node;\n const root = node.children[node.children.length - 1];\n for (const key of VIEW_KEYS)\n root.attr(key, node.attr(key));\n return root;\n}\nexport function valueOf(node) {\n return Object.assign(Object.assign({}, node.value), { type: node.type });\n}\nexport function sizeOf(options, container) {\n const { width, height, autoFit, depth = 0 } = options;\n let effectiveWidth = 640;\n let effectiveHeight = 480;\n if (autoFit) {\n const { width: containerWidth, height: containerHeight } = getContainerSize(container);\n effectiveWidth = containerWidth || effectiveWidth;\n effectiveHeight = containerHeight || effectiveHeight;\n }\n effectiveWidth = width || effectiveWidth;\n effectiveHeight = height || effectiveHeight;\n return {\n width: Math.max(isNumber(effectiveWidth) ? effectiveWidth : MIN_CHART_WIDTH, MIN_CHART_WIDTH),\n height: Math.max(isNumber(effectiveHeight) ? effectiveHeight : MIN_CHART_HEIGHT, MIN_CHART_HEIGHT),\n depth,\n };\n}\nexport function optionsOf(node) {\n const root = normalizeRoot(node);\n const discovered = [root];\n const nodeValue = new Map();\n nodeValue.set(root, valueOf(root));\n while (discovered.length) {\n const node = discovered.pop();\n const value = nodeValue.get(node);\n const { children = [] } = node;\n for (const child of children) {\n if (child.type === CALLBACK_NODE) {\n value.children = child.value;\n }\n else {\n const childValue = valueOf(child);\n const { children = [] } = value;\n children.push(childValue);\n discovered.push(child);\n nodeValue.set(child, childValue);\n value.children = children;\n }\n }\n }\n return nodeValue.get(root);\n}\nfunction isMark(type, mark) {\n if (typeof type === 'function')\n return true;\n return new Set(Object.keys(mark)).has(type);\n}\nfunction isComposition(type, composition) {\n return (typeof type !== 'function' && new Set(Object.keys(composition)).has(type));\n}\nfunction normalizeRootOptions(node, options, previousType, marks, composition) {\n const { type: oldType } = node;\n const { type = previousType || oldType } = options;\n if (isComposition(type, composition)) {\n for (const key of VIEW_KEYS) {\n if (node.attr(key) !== undefined && options[key] === undefined) {\n options[key] = node.attr(key);\n }\n }\n return options;\n }\n if (isMark(type, marks)) {\n const view = { type: 'view' };\n const mark = Object.assign({}, options);\n for (const key of VIEW_KEYS) {\n if (mark[key] !== undefined) {\n view[key] = mark[key];\n delete mark[key];\n }\n }\n return Object.assign(Object.assign({}, view), { children: [mark] });\n }\n return options;\n}\nfunction typeCtor(type, mark, composition) {\n if (typeof type === 'function')\n return mark.mark;\n const node = Object.assign(Object.assign({}, mark), composition);\n const ctor = node[type];\n if (!ctor)\n throw new Error(`Unknown mark: ${type}.`);\n return ctor;\n}\n// Create node from options.\nfunction createNode(options, mark, composition) {\n if (typeof options === 'function') {\n const node = new Node();\n node.value = options;\n node.type = CALLBACK_NODE;\n return node;\n }\n const { type, children } = options, value = __rest(options, [\"type\", \"children\"]);\n const Ctor = typeCtor(type, mark, composition);\n const node = new Ctor();\n node.value = value;\n // @ts-ignore\n node.type = type;\n return node;\n}\n// Update node by options.\nfunction updateNode(node, newOptions) {\n const { type, children } = newOptions, value = __rest(newOptions, [\"type\", \"children\"]);\n if (node.type === type || type === undefined) {\n // Update node.\n deepAssign(node.value, value);\n }\n else if (typeof type === 'string') {\n // Transform node.\n node.type = type;\n node.value = value;\n }\n}\n// Create a nested node tree from newOptions, and append it to the parent.\nfunction appendNode(parent, newOptions, mark, composition) {\n if (!parent)\n return;\n const discovered = [[parent, newOptions]];\n while (discovered.length) {\n const [parent, nodeOptions] = discovered.shift();\n const node = createNode(nodeOptions, mark, composition);\n if (Array.isArray(parent.children))\n parent.push(node);\n const { children } = nodeOptions;\n if (Array.isArray(children)) {\n for (const child of children) {\n discovered.push([node, child]);\n }\n }\n else if (typeof children === 'function') {\n discovered.push([node, children]);\n }\n }\n}\n// Update node tree from options.\nexport function updateRoot(node, options, definedType, mark, composition) {\n const rootOptions = normalizeRootOptions(node, options, definedType, mark, composition);\n const discovered = [[null, node, rootOptions]];\n while (discovered.length) {\n const [parent, oldNode, newNode] = discovered.shift();\n // If there is no oldNode, create a node tree directly.\n if (!oldNode) {\n appendNode(parent, newNode, mark, composition);\n }\n else if (!newNode) {\n oldNode.remove();\n }\n else {\n updateNode(oldNode, newNode);\n const { children: newChildren } = newNode;\n const { children: oldChildren } = oldNode;\n if (Array.isArray(newChildren) && Array.isArray(oldChildren)) {\n // Only update node specified in newChildren,\n // the extra oldChildren will remain still.\n const n = Math.max(newChildren.length, oldChildren.length);\n for (let i = 0; i < n; i++) {\n const newChild = newChildren[i];\n const oldChild = oldChildren[i];\n discovered.push([oldNode, oldChild, newChild]);\n }\n }\n else if (typeof newChildren === 'function') {\n discovered.push([oldNode, null, newChildren]);\n }\n }\n }\n}\nexport function createEmptyPromise() {\n let reject;\n let resolve;\n const cloned = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return [cloned, resolve, reject];\n}\n//# sourceMappingURL=utils.js.map","import { isStrictObject } from '../utils/helper';\nfunction defineValueProp(Node, name, { key = name }) {\n Node.prototype[name] = function (value) {\n if (arguments.length === 0)\n return this.attr(key);\n return this.attr(key, value);\n };\n}\nfunction defineArrayProp(Node, name, { key = name }) {\n Node.prototype[name] = function (value) {\n if (arguments.length === 0)\n return this.attr(key);\n if (Array.isArray(value))\n return this.attr(key, value);\n const array = [...(this.attr(key) || []), value];\n return this.attr(key, array);\n };\n}\nfunction defineObjectProp(Node, name, { key: k = name }) {\n Node.prototype[name] = function (key, value) {\n if (arguments.length === 0)\n return this.attr(k);\n if (arguments.length === 1 && typeof key !== 'string') {\n return this.attr(k, key);\n }\n const obj = this.attr(k) || {};\n obj[key] = arguments.length === 1 ? true : value;\n return this.attr(k, obj);\n };\n}\nfunction defineMixProp(Node, name, descriptor) {\n Node.prototype[name] = function (key) {\n if (arguments.length === 0)\n return this.attr(name);\n if (Array.isArray(key))\n return this.attr(name, { items: key });\n if (isStrictObject(key) &&\n (key.title !== undefined || key.items !== undefined)) {\n return this.attr(name, key);\n }\n if (key === null || key === false)\n return this.attr(name, key);\n const obj = this.attr(name) || {};\n const { items = [] } = obj;\n items.push(key);\n obj.items = items;\n return this.attr(name, obj);\n };\n}\nfunction defineNodeProp(Node, name, { ctor }) {\n Node.prototype[name] = function (hocMark) {\n const node = this.append(ctor);\n if (name === 'mark') {\n node.type = hocMark;\n }\n return node;\n };\n}\nfunction defineContainerProp(Node, name, { ctor }) {\n Node.prototype[name] = function () {\n this.type = null;\n return this.append(ctor);\n };\n}\n/**\n * A decorator to define different type of attribute setter or\n * getter for current node.\n */\nexport function defineProps(descriptors) {\n return (Node) => {\n for (const [name, descriptor] of Object.entries(descriptors)) {\n const { type } = descriptor;\n if (type === 'value')\n defineValueProp(Node, name, descriptor);\n else if (type === 'array')\n defineArrayProp(Node, name, descriptor);\n else if (type === 'object')\n defineObjectProp(Node, name, descriptor);\n else if (type === 'node')\n defineNodeProp(Node, name, descriptor);\n else if (type === 'container')\n defineContainerProp(Node, name, descriptor);\n else if (type === 'mix')\n defineMixProp(Node, name, descriptor);\n }\n return Node;\n };\n}\nexport function nodeProps(node) {\n return Object.fromEntries(Object.entries(node).map(([name, ctor]) => [name, { type: 'node', ctor }]));\n}\n//# sourceMappingURL=define.js.map","export const commonProps = {\n encode: { type: 'object' },\n scale: { type: 'object' },\n data: { type: 'value' },\n transform: { type: 'array' },\n style: { type: 'object' },\n animate: { type: 'object' },\n coordinate: { type: 'object' },\n interaction: { type: 'object' },\n label: { type: 'array', key: 'labels' },\n axis: { type: 'object' },\n legend: { type: 'object' },\n slider: { type: 'object' },\n scrollbar: { type: 'object' },\n state: { type: 'object' },\n layout: { type: 'object' },\n theme: { type: 'object' },\n title: { type: 'value' },\n};\nexport const markProps = Object.assign(Object.assign({}, commonProps), { tooltip: { type: 'mix' }, viewStyle: { type: 'object' } });\nexport const compositionProps = Object.assign(Object.assign({}, commonProps), { labelTransform: { type: 'array' } });\n//# sourceMappingURL=props.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { hide, show } from '../utils/style';\nimport { Node } from './node';\nimport { defineProps } from './define';\nimport { compositionProps } from './props';\nlet CompositionNode = class CompositionNode extends Node {\n /**\n * Change current node data and its children data.\n */\n changeData(data) {\n var _a;\n const chart = this.getRoot();\n if (!chart)\n return;\n this.attr('data', data);\n if ((_a = this.children) === null || _a === void 0 ? void 0 : _a.length) {\n this.children.forEach((child) => {\n child.attr('data', data);\n });\n }\n return chart === null || chart === void 0 ? void 0 : chart.render();\n }\n /**\n * Get view instance by key.\n */\n getView() {\n const chart = this.getRoot();\n const { views } = chart.getContext();\n if (!(views === null || views === void 0 ? void 0 : views.length))\n return undefined;\n return views.find((view) => view.key === this._key);\n }\n getScale() {\n var _a;\n return (_a = this.getView()) === null || _a === void 0 ? void 0 : _a.scale;\n }\n getScaleByChannel(channel) {\n const scale = this.getScale();\n if (scale)\n return scale[channel];\n return;\n }\n getCoordinate() {\n var _a;\n return (_a = this.getView()) === null || _a === void 0 ? void 0 : _a.coordinate;\n }\n getTheme() {\n var _a;\n return (_a = this.getView()) === null || _a === void 0 ? void 0 : _a.theme;\n }\n getGroup() {\n const key = this._key;\n if (!key)\n return undefined;\n const chart = this.getRoot();\n const chartGroup = chart.getContext().canvas.getRoot();\n return chartGroup.getElementById(key);\n }\n /**\n * Show the view.\n */\n show() {\n const group = this.getGroup();\n if (!group)\n return;\n !group.isVisible() && show(group);\n }\n /**\n * Hide the view.\n */\n hide() {\n const group = this.getGroup();\n if (!group)\n return;\n group.isVisible() && hide(group);\n }\n};\nCompositionNode = __decorate([\n defineProps(compositionProps)\n], CompositionNode);\nexport { CompositionNode };\n//# sourceMappingURL=composition.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Node } from './node';\nimport { defineProps } from './define';\nimport { markProps } from './props';\nlet MarkNode = class MarkNode extends Node {\n changeData(data) {\n const chart = this.getRoot();\n if (!chart)\n return;\n this.attr('data', data);\n return chart === null || chart === void 0 ? void 0 : chart.render();\n }\n /**\n * Get mark from chart views.\n */\n getMark() {\n var _a;\n const chartView = (_a = this.getRoot()) === null || _a === void 0 ? void 0 : _a.getView();\n if (!chartView)\n return undefined;\n const { markState } = chartView;\n const markKey = Array.from(markState.keys()).find((item) => item.key === this.attr('key'));\n return markState.get(markKey);\n }\n /**\n * Get all scales instance.\n */\n getScale() {\n var _a;\n const chartView = (_a = this.getRoot()) === null || _a === void 0 ? void 0 : _a.getView();\n if (!chartView)\n return undefined;\n return chartView === null || chartView === void 0 ? void 0 : chartView.scale;\n }\n /**\n * Get the scale instance by channel.\n */\n getScaleByChannel(channel) {\n var _a, _b;\n const chartView = (_a = this.getRoot()) === null || _a === void 0 ? void 0 : _a.getView();\n if (!chartView)\n return undefined;\n return (_b = chartView === null || chartView === void 0 ? void 0 : chartView.scale) === null || _b === void 0 ? void 0 : _b[channel];\n }\n /**\n * Get canvas group.\n */\n getGroup() {\n const key = this.attr('key');\n if (!key)\n return undefined;\n const chart = this.getRoot();\n const chartGroup = chart.getContext().canvas.getRoot();\n return chartGroup.getElementById(key);\n }\n};\nMarkNode = __decorate([\n defineProps(markProps)\n], MarkNode);\nexport { MarkNode };\n//# sourceMappingURL=mark.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Canvas as GCanvas, } from '@antv/g';\nimport { Renderer as CanvasRenderer } from '@antv/g-canvas';\nimport { Plugin as DragAndDropPlugin } from '@antv/g-plugin-dragndrop';\nimport { debounce, get } from '@antv/util';\nimport EventEmitter from '@antv/event-emitter';\nimport { group } from '@antv/vendor/d3-array';\nimport { render, destroy, ELEMENT_CLASS_NAME, VIEW_CLASS_NAME, } from '../runtime';\nimport { ChartEvent } from '../utils/event';\nimport { findSingleElement, maybeValue, findSeriesElement, } from '../interaction/tooltip';\nimport { selectPlotArea } from '../interaction/utils';\nimport { normalizeContainer, removeContainer, sizeOf, optionsOf, updateRoot, createEmptyPromise, REMOVE_FLAG, } from './utils';\nimport { CompositionNode } from './composition';\nimport { defineProps, nodeProps } from './define';\nimport { MarkNode } from './mark';\nimport { library } from './library';\nexport const G2_CHART_KEY = 'G2_CHART_KEY';\nexport class Runtime extends CompositionNode {\n constructor(options) {\n const { container, canvas, renderer, plugins, lib, createCanvas } = options, rest = __rest(options, [\"container\", \"canvas\", \"renderer\", \"plugins\", \"lib\", \"createCanvas\"]);\n super(rest, 'view');\n // Identifies whether bindAutoFit.\n this._hasBindAutoFit = false;\n this._rendering = false;\n this._trailingClear = null;\n this._trailing = false;\n this._trailingResolve = null;\n this._trailingReject = null;\n this._previousDefinedType = null;\n this._onResize = debounce(() => {\n this.forceFit();\n }, 300);\n this._renderer = renderer || new CanvasRenderer();\n this._plugins = plugins || [];\n this._container = normalizeContainer(container);\n this._emitter = new EventEmitter();\n this._context = {\n library: Object.assign(Object.assign({}, lib), library),\n emitter: this._emitter,\n canvas,\n createCanvas,\n };\n this._create();\n }\n render() {\n if (this._rendering)\n return this._addToTrailing();\n if (!this._context.canvas)\n this._createCanvas();\n this._bindAutoFit();\n this._rendering = true;\n // @fixme The cancel render is not marked, which will cause additional rendered event.\n // @ref src/runtime/render.ts\n const finished = new Promise((resolve, reject) => render(this._computedOptions(), this._context, this._createResolve(resolve), this._createReject(reject)));\n const [finished1, resolve, reject] = createEmptyPromise();\n finished\n .then(resolve)\n .then(() => {\n // Resolve trailing clear.\n if (this._trailingClear) {\n const options = this.options();\n this._trailingClear();\n // If clear is called during trailing, recover options for next trailing render.\n if (this._trailing)\n this.options(options);\n }\n })\n .catch(reject)\n .then(() => {\n this._trailingClear = null;\n this._renderTrailing();\n });\n return finished1;\n }\n /**\n * @overload\n * @param {G2ViewTree} [options]\n * @returns {Runtime|Spec}\n */\n options(options) {\n if (arguments.length === 0)\n return optionsOf(this);\n const { type } = options;\n if (type)\n this._previousDefinedType = type;\n updateRoot(this, options, this._previousDefinedType, this._marks, this._compositions);\n return this;\n }\n getContainer() {\n return this._container;\n }\n getContext() {\n return this._context;\n }\n on(event, callback, once) {\n this._emitter.on(event, callback, once);\n return this;\n }\n once(event, callback) {\n this._emitter.once(event, callback);\n return this;\n }\n emit(event, ...args) {\n this._emitter.emit(event, ...args);\n return this;\n }\n off(event, callback) {\n this._emitter.off(event, callback);\n return this;\n }\n clear(isClearEvents = true) {\n // Clear after render, otherwise render with destroyed context will return infinite promise, which will block trialing render.\n if (this._rendering) {\n this._trailingClear = () => {\n this.clear(isClearEvents);\n };\n // Only reset options, not destroy canvas.\n this._reset();\n return;\n }\n const options = this.options();\n this.emit(ChartEvent.BEFORE_CLEAR);\n this._reset();\n destroy(options, this._context, false, isClearEvents);\n this.emit(ChartEvent.AFTER_CLEAR);\n }\n destroy() {\n const options = this.options();\n this.emit(ChartEvent.BEFORE_DESTROY);\n this._unbindAutoFit();\n this._reset();\n destroy(options, this._context, true);\n if (this._container[REMOVE_FLAG])\n removeContainer(this._container);\n this.emit(ChartEvent.AFTER_DESTROY);\n }\n forceFit() {\n // Don't fit if size do not change.\n this.options['autoFit'] = true;\n const { width, height } = sizeOf(this.options(), this._container);\n if (width === this._width && height === this._height) {\n return Promise.resolve(this);\n }\n // Don't call changeSize to prevent update width and height of options.\n this.emit(ChartEvent.BEFORE_CHANGE_SIZE);\n const finished = this.render();\n finished.then(() => {\n this.emit(ChartEvent.AFTER_CHANGE_SIZE);\n });\n return finished;\n }\n changeSize(width, height) {\n if (width === this._width && height === this._height) {\n return Promise.resolve(this);\n }\n this.emit(ChartEvent.BEFORE_CHANGE_SIZE);\n this.attr('width', width);\n this.attr('height', height);\n const finished = this.render();\n finished.then(() => {\n this.emit(ChartEvent.AFTER_CHANGE_SIZE);\n });\n return finished;\n }\n getDataByXY(point, options = {}) {\n const { shared = false, series, facet = false, startX = 0, startY = 0, } = options;\n const { canvas, views } = this._context;\n const { document } = canvas;\n const { x, y } = point;\n // Temporarily do not handle the multi - view situation.\n const { coordinate, scale, markState, data: dataMap, key } = views[0];\n const elements = document.getElementsByClassName(ELEMENT_CLASS_NAME);\n const groupKey = shared ? (element) => element.__data__.x : (d) => d;\n const keyGroup = group(elements, groupKey);\n const container = document.getElementsByClassName(VIEW_CLASS_NAME)[0];\n const root = selectPlotArea(container);\n const hasSeriesInteraction = (markState) => {\n return Array.from(markState.values()).some((d) => {\n var _a, _b;\n return ((_a = d.interaction) === null || _a === void 0 ? void 0 : _a['seriesTooltip']) ||\n ((_b = d.channels) === null || _b === void 0 ? void 0 : _b.some((c) => c.name === 'series' && c.values !== undefined));\n });\n };\n const isSeries = maybeValue(series, hasSeriesInteraction(markState));\n const getElementData = (el) => get(el, '__data__.data', null);\n const getElementsData = (els) => els.map(getElementData);\n try {\n // For non-facet and series chart.\n if (isSeries &&\n hasSeriesInteraction(markState) &&\n !facet) {\n const { selectedData } = findSeriesElement({\n root,\n event: { offsetX: x, offsetY: y },\n elements,\n coordinate,\n scale,\n startX,\n startY,\n });\n const viewData = dataMap.get(`${key}-0`);\n return selectedData.map(({ index }) => viewData[index]);\n }\n // For single chart.\n const element = findSingleElement({\n root,\n event: { offsetX: x, offsetY: y },\n elements,\n coordinate,\n scale,\n shared,\n });\n const k = groupKey(element);\n const groupElements = keyGroup.get(k);\n return groupElements ? getElementsData(groupElements) : [];\n }\n catch (e) {\n const topMostElement = canvas.document.elementFromPointSync(x, y);\n return topMostElement ? getElementData(topMostElement) : [];\n }\n }\n _create() {\n const { library } = this._context;\n // @todo After refactor component as mark, remove this.\n const isMark = (key) => key.startsWith('mark.') ||\n key === 'component.axisX' ||\n key === 'component.axisY' ||\n key === 'component.legends';\n const marks = [\n 'mark.mark',\n ...Object.keys(library).filter(isMark),\n ];\n // Create mark generators.\n this._marks = {};\n for (const key of marks) {\n const name = key.split('.').pop();\n class Mark extends MarkNode {\n constructor() {\n super({}, name);\n }\n }\n this._marks[name] = Mark;\n this[name] = function (composite) {\n const node = this.append(Mark);\n if (name === 'mark')\n node.type = composite;\n return node;\n };\n }\n // Create composition generators.\n const compositions = [\n 'composition.view',\n ...Object.keys(library).filter((key) => key.startsWith('composition.') && key !== 'composition.mark'),\n ];\n this._compositions = Object.fromEntries(compositions.map((key) => {\n const name = key.split('.').pop();\n let Composition = class Composition extends CompositionNode {\n constructor() {\n super({}, name);\n }\n };\n Composition = __decorate([\n defineProps(nodeProps(this._marks))\n ], Composition);\n return [name, Composition];\n }));\n for (const Ctor of Object.values(this._compositions)) {\n defineProps(nodeProps(this._compositions))(Ctor);\n }\n for (const key of compositions) {\n const name = key.split('.').pop();\n this[name] = function () {\n const Composition = this._compositions[name];\n this.type = null;\n return this.append(Composition);\n };\n }\n }\n _reset() {\n const KEYS = ['theme', 'type', 'width', 'height', 'autoFit'];\n this.type = 'view';\n this.value = Object.fromEntries(Object.entries(this.value).filter(([key]) => key.startsWith('margin') ||\n key.startsWith('padding') ||\n key.startsWith('inset') ||\n KEYS.includes(key)));\n this.children = [];\n }\n _renderTrailing() {\n if (!this._trailing)\n return;\n this._trailing = false;\n this.render()\n .then(() => {\n const trailingResolve = this._trailingResolve.bind(this);\n this._trailingResolve = null;\n trailingResolve(this);\n })\n .catch((error) => {\n const trailingReject = this._trailingReject.bind(this);\n this._trailingReject = null;\n trailingReject(error);\n });\n }\n _createResolve(resolve) {\n return () => {\n this._rendering = false;\n resolve(this);\n };\n }\n _createReject(reject) {\n return (error) => {\n this._rendering = false;\n reject(error);\n };\n }\n // Update actual size and key.\n _computedOptions() {\n const options = this.options();\n const { key = G2_CHART_KEY } = options;\n const { width, height, depth } = sizeOf(options, this._container);\n this._width = width;\n this._height = height;\n this._key = key;\n return Object.assign(Object.assign({ key: this._key }, options), { width, height, depth });\n }\n // Create canvas if it does not exist.\n // DragAndDropPlugin is for interaction.\n // It is OK to register more than one time, G will handle this.\n _createCanvas() {\n const { width, height } = sizeOf(this.options(), this._container);\n this._plugins.push(new DragAndDropPlugin());\n this._plugins.forEach((d) => this._renderer.registerPlugin(d));\n this._context.canvas = new GCanvas({\n container: this._container,\n width,\n height,\n renderer: this._renderer,\n });\n }\n _addToTrailing() {\n var _a;\n // Resolve previous promise, and give up this task.\n (_a = this._trailingResolve) === null || _a === void 0 ? void 0 : _a.call(this, this);\n // Create new task.\n this._trailing = true;\n const promise = new Promise((resolve, reject) => {\n this._trailingResolve = resolve;\n this._trailingReject = reject;\n });\n return promise;\n }\n _bindAutoFit() {\n const options = this.options();\n const { autoFit } = options;\n if (this._hasBindAutoFit) {\n // If it was bind before, unbind it now.\n if (!autoFit)\n this._unbindAutoFit();\n return;\n }\n if (autoFit) {\n this._hasBindAutoFit = true;\n window.addEventListener('resize', this._onResize);\n }\n }\n _unbindAutoFit() {\n if (this._hasBindAutoFit) {\n this._hasBindAutoFit = false;\n window.removeEventListener('resize', this._onResize);\n }\n }\n}\n//# sourceMappingURL=runtime.js.map","/**\n * Default coordinate transformation for all charts.\n */\nexport const Cartesian = () => [['cartesian']];\nCartesian.props = {};\n//# sourceMappingURL=cartesian.js.map","/**\n * Transpose transformation for transposing chart according to center of canvas.\n */\nexport const Transpose = () => [\n ['transpose'],\n ['translate', 0.5, 0.5],\n ['reflect.x'],\n ['translate', -0.5, -0.5],\n];\nTranspose.props = { transform: true };\n//# sourceMappingURL=transpose.js.map","import { Polar } from './polar';\nimport { Transpose } from './transpose';\nexport const getThetaOptions = (options = {}) => {\n const defaultOptions = {\n startAngle: -Math.PI / 2,\n endAngle: (Math.PI * 3) / 2,\n innerRadius: 0,\n outerRadius: 1,\n };\n return Object.assign(Object.assign({}, defaultOptions), options);\n};\n/**\n * Theta = Transpose + Polar.\n */\nexport const Theta = (options) => {\n const { startAngle, endAngle, innerRadius, outerRadius } = getThetaOptions(options);\n return [\n ...Transpose(),\n ...Polar({ startAngle, endAngle, innerRadius, outerRadius }),\n ];\n};\nTheta.props = {};\n//# sourceMappingURL=theta.js.map","/**\n * Parallel coordinate transformations for parallel coordinate.\n */\nexport const Parallel = () => [['parallel', 0, 1, 0, 1]];\nParallel.props = {};\n//# sourceMappingURL=parallel.js.map","/**\n * Fisheye\n */\nexport const Fisheye = ({ focusX = 0, focusY = 0, distortionX = 2, distortionY = 2, visual = false, }) => [['fisheye', focusX, focusY, distortionX, distortionY, visual]];\nFisheye.props = { transform: true };\n//# sourceMappingURL=fisheye.js.map","import { Polar } from './polar';\nimport { Parallel } from './parallel';\n/**\n * Radar = Parallel + Polar.\n */\nexport const Radar = (options) => {\n const { startAngle = -Math.PI / 2, endAngle = (Math.PI * 3) / 2, innerRadius = 0, outerRadius = 1, } = options;\n return [\n ...Parallel(),\n ...Polar({ startAngle, endAngle, innerRadius, outerRadius }),\n ];\n};\nRadar.props = {};\n//# sourceMappingURL=radar.js.map","/**\n * Helix\n */\nexport const Helix = ({ startAngle = 0, endAngle = Math.PI * 6, innerRadius = 0, outerRadius = 1, }) => [\n ['translate', 0.5, 0.5],\n ['reflect.y'],\n ['translate', -0.5, -0.5],\n ['helix', startAngle, endAngle, innerRadius, outerRadius],\n];\nHelix.props = {};\n//# sourceMappingURL=helix.js.map","/**\n * Extract a column of data filled with the specified constant.\n */\nexport const Constant = ({ value }) => {\n return (data) => data.map(() => value);\n};\nConstant.props = {};\n//# sourceMappingURL=constant.js.map","/**\n * Extract a column of data with specified field.\n */\nexport const Field = ({ value }) => {\n return (data) => data.map((d) => d[value]);\n};\nField.props = {};\n//# sourceMappingURL=field.js.map","/**\n * Extract a column of data with specified map function from data.\n * Each datum in the array is not visual data by default.\n * Specifying identity scale for related channel explicitly will treat them as visual data.\n */\nexport const Transform = ({ value }) => {\n return (data) => data.map(value);\n};\nTransform.props = {};\n//# sourceMappingURL=transform.js.map","/**\n * Extract a column of data specified in encoding.\n */\nexport const Column = ({ value }) => {\n return () => value;\n};\nColumn.props = {};\n//# sourceMappingURL=column.js.map","import { Color } from './color';\n/**\n * Render rect in different coordinate and using color channel for stroke and fill attribute.\n * The stroke attribute is valid with specified lineWidth attribute which defaults to zero.\n */\nexport const Rect = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'fill' }, options), context);\n};\nRect.props = Object.assign(Object.assign({}, Color.props), { defaultMarker: 'square' });\n//# sourceMappingURL=rect.js.map","import { Color } from './color';\n/**\n * Render rect in different coordinate and using color channel for stroke attribute.\n */\nexport const Hollow = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'stroke' }, options), context);\n};\nHollow.props = Object.assign(Object.assign({}, Color.props), { defaultMarker: 'hollowSquare' });\n//# sourceMappingURL=hollow.js.map","import { deepMix } from '@antv/util';\nimport { inferredColumn, constant } from './utils/helper';\n/**\n * Add zero constant encode for x channel.\n * This is useful for interval geometry.\n */\nexport const MaybeZeroX = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { x } = encode;\n if (x !== undefined)\n return [I, mark];\n return [\n I,\n deepMix({}, mark, {\n encode: { x: inferredColumn(constant(I, 0)) },\n scale: { x: { guide: null } },\n }),\n ];\n };\n};\nMaybeZeroX.props = {};\n//# sourceMappingURL=maybeZeroX.js.map","import { deepMix } from '@antv/util';\nimport { inferredColumn, constant } from './utils/helper';\n/**\n * Add zero constant encode for y channel.\n */\nexport const MaybeZeroY = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { y } = encode;\n if (y !== undefined)\n return [I, mark];\n return [\n I,\n deepMix({}, mark, {\n encode: { y: inferredColumn(constant(I, 0)) },\n scale: { y: { guide: null } },\n }),\n ];\n };\n};\nMaybeZeroY.props = {};\n//# sourceMappingURL=maybeZeroY.js.map","import { deepMix } from '@antv/util';\n/**\n * Set padding of x and y scale to zero.\n */\nexport const MaybeZeroPadding = () => {\n return (I, mark) => {\n return [\n I,\n deepMix({ scale: { x: { padding: 0 }, y: { padding: 0 } } }, mark),\n ];\n };\n};\nMaybeZeroPadding.props = {};\n//# sourceMappingURL=maybeZeroPadding.js.map","import { CellShape, CellHollow } from '../shape';\nimport { MaybeZeroX, MaybeZeroY, MaybeZeroPadding } from '../transform';\nimport { baseGeometryChannels, basePostInference, basePreInference, tooltip2d, } from './utils';\nconst shape = {\n cell: CellShape,\n hollow: CellHollow,\n};\n/**\n * Convert value for each channel to Cell shapes.\n * Calc the bbox of each Cell based on x, y and r.\n * This is for allowing their radius can be affected by coordinate(e.g. fisheye).\n */\nexport const Cell = () => {\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y } = value;\n const x = scale.x;\n const y = scale.y;\n const P = Array.from(index, (i) => {\n const width = x.getBandWidth(x.invert(+X[i]));\n const height = y.getBandWidth(y.invert(+Y[i]));\n const x1 = +X[i];\n const y1 = +Y[i];\n const p1 = [x1, y1];\n const p2 = [x1 + width, y1];\n const p3 = [x1 + width, y1 + height];\n const p4 = [x1, y1 + height];\n return [p1, p2, p3, p4].map((d) => coordinate.map(d));\n });\n return [index, P];\n };\n};\nCell.props = {\n defaultShape: 'cell',\n defaultLabelShape: 'label',\n shape,\n composite: false,\n channels: [\n ...baseGeometryChannels({ shapes: Object.keys(shape) }),\n { name: 'x', required: true, scale: 'band' },\n { name: 'y', required: true, scale: 'band' },\n ],\n preInference: [\n ...basePreInference(),\n { type: MaybeZeroX },\n { type: MaybeZeroY },\n { type: MaybeZeroPadding },\n ],\n postInference: [...basePostInference(), ...tooltip2d()],\n};\n//# sourceMappingURL=cell.js.map","import { deepMix } from '@antv/util';\nimport { inferredColumn, constant } from './utils/helper';\n/**\n * Add zero constant encode for y1 channel.\n */\nexport const MaybeZeroY1 = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { y1 } = encode;\n if (y1 !== undefined)\n return [I, mark];\n return [\n I,\n deepMix({}, mark, {\n encode: { y1: inferredColumn(constant(I, 0)) },\n }),\n ];\n };\n};\nMaybeZeroY1.props = {};\n//# sourceMappingURL=maybeZeroY1.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { line, curveLinearClosed } from '@antv/vendor/d3-shape';\nimport { isTranspose } from '../../utils/coordinate';\nimport { select } from '../../utils/selection';\nimport { applyStyle, reorder } from '../utils';\n/**\n * Adjust and return the new `points`.\n */\nfunction getFunnelPoints(points, nextPoints, coordinate) {\n const [p0, p1, p2, p3] = points;\n if (isTranspose(coordinate)) {\n const newP1 = [nextPoints ? nextPoints[0][0] : p1[0], p1[1]];\n const newP2 = [nextPoints ? nextPoints[3][0] : p2[0], p2[1]];\n return [p0, newP1, newP2, p3];\n }\n const newP1 = [p1[0], nextPoints ? nextPoints[0][1] : p1[1]];\n const newP2 = [p2[0], nextPoints ? nextPoints[3][1] : p2[1]];\n return [p0, newP1, newP2, p3];\n}\n/**\n * Render funnel in different coordinate and using color channel for stroke and fill attribute.\n */\nexport const Funnel = (options, context) => {\n const { adjustPoints = getFunnelPoints } = options, style = __rest(options, [\"adjustPoints\"]);\n const { coordinate, document } = context;\n return (points, value, defaults, point2d) => {\n const { index } = value;\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const nextPoints = point2d[index + 1];\n const funnelPoints = adjustPoints(points, nextPoints, coordinate);\n const tpShape = !!isTranspose(coordinate);\n const [p0, p1, p2, p3] = tpShape ? reorder(funnelPoints) : funnelPoints;\n const { color = defaultColor, opacity } = value;\n const b = line().curve(curveLinearClosed)([p0, p1, p2, p3]);\n return select(document.createElement('path', {}))\n .call(applyStyle, rest)\n .style('d', b)\n .style('fill', color)\n .style('fillOpacity', opacity)\n .call(applyStyle, style)\n .node();\n };\n};\nFunnel.props = {\n defaultMarker: 'square',\n};\n//# sourceMappingURL=funnel.js.map","import { isTranspose } from '../../utils/coordinate';\nimport { Funnel } from './funnel';\n/**\n * Adjust and return the new `points`.\n */\nfunction getPyramidPoints(points, nextPoints, coordinate) {\n const [p0, p1, p2, p3] = points;\n if (isTranspose(coordinate)) {\n const newP1 = [\n nextPoints ? nextPoints[0][0] : (p1[0] + p2[0]) / 2,\n p1[1],\n ];\n const newP2 = [\n nextPoints ? nextPoints[3][0] : (p1[0] + p2[0]) / 2,\n p2[1],\n ];\n return [p0, newP1, newP2, p3];\n }\n const newP1 = [\n p1[0],\n nextPoints ? nextPoints[0][1] : (p1[1] + p2[1]) / 2,\n ];\n const newP2 = [\n p2[0],\n nextPoints ? nextPoints[3][1] : (p1[1] + p2[1]) / 2,\n ];\n return [p0, newP1, newP2, p3];\n}\n/**\n * Render pyramid in different coordinate and using color channel for stroke and fill attribute.\n */\nexport const Pyramid = (options, context) => {\n return Funnel(Object.assign({ adjustPoints: getPyramidPoints }, options), context);\n};\nPyramid.props = {\n defaultMarker: 'square',\n};\n//# sourceMappingURL=pyramid.js.map","import { MaybeZeroY1, MaybeZeroX } from '../transform';\nimport { IntervalShape, IntervalHollow, IntervalFunnel, IntervalPyramid, } from '../shape';\nimport { baseGeometryChannels, basePostInference, basePreInference, tooltip1d, } from './utils';\nfunction bandWidth(scale, x) {\n return scale.getBandWidth(scale.invert(x));\n}\nconst shape = {\n rect: IntervalShape,\n hollow: IntervalHollow,\n funnel: IntervalFunnel,\n pyramid: IntervalPyramid,\n};\n/**\n * Convert value for each channel to rect shapes.\n * p0 p1\n * ┌────┐\n * │ │\n * │ │\n * p3 └────┘ p2\n */\nexport const Interval = () => {\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y, y1: Y1, series: S, size: SZ } = value;\n // Calc width for each interval.\n // The scales for x and series channels must be band scale.\n const x = scale.x;\n const series = scale.series;\n const [width] = coordinate.getSize();\n const NSZ = SZ ? SZ.map((d) => +d / width) : null;\n const x1x2 = !SZ\n ? (x, w, i) => [x, x + w]\n : (x, w, i) => {\n const mx = x + w / 2;\n const s = NSZ[i];\n return [mx - s / 2, mx + s / 2];\n };\n // Calc the points of bounding box for the interval.\n // They are start from left-top corner in clock wise order.\n const P = Array.from(index, (i) => {\n const groupWidth = bandWidth(x, X[i]);\n const ratio = series ? bandWidth(series, S === null || S === void 0 ? void 0 : S[i]) : 1;\n const width = groupWidth * ratio;\n const offset = (+(S === null || S === void 0 ? void 0 : S[i]) || 0) * groupWidth;\n const x0 = +X[i] + offset;\n const [x1, x2] = x1x2(x0, width, i);\n const y1 = +Y[i];\n const y2 = +Y1[i];\n const p1 = [x1, y1];\n const p2 = [x2, y1];\n const p3 = [x2, y2];\n const p4 = [x1, y2];\n return [p1, p2, p3, p4].map((d) => coordinate.map(d));\n });\n return [index, P];\n };\n};\nInterval.props = {\n defaultShape: 'rect',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseGeometryChannels({ shapes: Object.keys(shape) }),\n { name: 'x', scale: 'band', required: true },\n { name: 'y', required: true },\n { name: 'series', scale: 'band' },\n { name: 'size' },\n ],\n preInference: [\n ...basePreInference(),\n { type: MaybeZeroY1 },\n { type: MaybeZeroX },\n ],\n postInference: [...basePostInference(), ...tooltip1d()],\n interaction: { shareTooltip: true },\n};\n//# sourceMappingURL=interval.js.map","import { RectShape, RectHollow } from '../shape';\nimport { MaybeZeroY1 } from '../transform';\nimport { baseGeometryChannels, basePostInference, basePreInference, tooltip1d, } from './utils';\nconst shape = {\n rect: RectShape,\n hollow: RectHollow,\n};\nexport const Rect = () => {\n return (index, scale, value, coordinate) => {\n const { x: X, x1: X1, y: Y, y1: Y1 } = value;\n const P = Array.from(index, (i) => {\n const p1 = [+X[i], +Y[i]];\n const p2 = [+X1[i], +Y[i]];\n const p3 = [+X1[i], +Y1[i]];\n const p4 = [+X[i], +Y1[i]];\n return [p1, p2, p3, p4].map((d) => coordinate.map(d));\n });\n return [index, P];\n };\n};\nRect.props = {\n defaultShape: 'rect',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseGeometryChannels({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n ],\n preInference: [...basePreInference(), { type: MaybeZeroY1 }],\n postInference: [...basePostInference(), ...tooltip1d()],\n interaction: {\n shareTooltip: true,\n },\n};\n//# sourceMappingURL=rect.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { line, lineRadial, } from '@antv/vendor/d3-shape';\nimport { isPolar, isTranspose } from '../../utils/coordinate';\nimport { select } from '../../utils/selection';\nimport { applyStyle, computeGradient, getTransform } from '../utils';\nimport { createElement } from '../../utils/createElement';\nimport { subObject } from '../../utils/helper';\nimport { angleWithQuadrant, dist, sub } from '../../utils/vector';\nconst DoublePath = createElement((g) => {\n const { d1, d2, style1, style2 } = g.attributes;\n const document = g.ownerDocument;\n select(g)\n .maybeAppend('line', () => document.createElement('path', {}))\n .style('d', d1)\n .call(applyStyle, style1);\n select(g)\n .maybeAppend('line1', () => document.createElement('path', {}))\n .style('d', d2)\n .call(applyStyle, style2);\n});\n/**\n * Given a points sequence, split it into an array of defined points\n * and an array of undefined segments.\n *\n * Input - [[1, 2], [3, 4], [null, null], [null, null], [5, 6], [null, null], [7, 8]]\n * Output\n * - [[1, 2], [3, 4], [5, 6], [7, 8]]\n * - [\n * [[3, 4], [5, 6]],\n * [[5, 6], [7, 8]]\n * ]\n */\nfunction segmentation(points, defined) {\n const definedPoints = [];\n const segments = [];\n let m = false; // Is in a undefined sequence.\n let dp = null; // The previous defined point.\n for (const p of points) {\n // If current point is a undefined point,\n // enter a undefined sequence.\n if (!defined(p[0]) || !defined(p[1]))\n m = true;\n else {\n definedPoints.push(p);\n // If current point is a defined point,\n // and is in a undefined sequence, save\n // the two closest defined points as this\n // undefined sequence and exit it.\n if (m) {\n m = false;\n segments.push([dp, p]);\n }\n // Update the previous defined point.\n dp = p;\n }\n }\n return [definedPoints, segments];\n}\nexport const Curve = (options, context) => {\n const { curve, gradient = false, \n // The color for each segment.\n gradientColor = 'between', defined = (d) => !Number.isNaN(d) && d !== undefined && d !== null, connect: connectNulls = false } = options, style = __rest(options, [\"curve\", \"gradient\", \"gradientColor\", \"defined\", \"connect\"]);\n const { coordinate, document } = context;\n return (P, value, defaults) => {\n // Compute styles.\n const { color: defaultColor, lineWidth: defaultSize } = defaults, rest = __rest(defaults, [\"color\", \"lineWidth\"]);\n const { color = defaultColor, size = defaultSize, seriesColor: sc, seriesX: sx, seriesY: sy, } = value;\n const transform = getTransform(coordinate, value);\n const tpShape = isTranspose(coordinate);\n const stroke = gradient && sc\n ? computeGradient(sc, sx, sy, gradient, gradientColor, tpShape)\n : color;\n const finalStyle = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, rest), (stroke && { stroke })), (size && { lineWidth: size })), (transform && { transform })), style);\n // Compute points and segments.\n let linePath;\n if (isPolar(coordinate)) {\n const center = coordinate.getCenter();\n linePath = (points) => lineRadial()\n .angle((_, idx) => angleWithQuadrant(sub(points[idx], center)))\n .radius((_, idx) => dist(points[idx], center))\n .defined(([x, y]) => defined(x) && defined(y))\n .curve(curve)(points);\n }\n else {\n linePath = line()\n .x((d) => d[0])\n .y((d) => d[1])\n .defined(([x, y]) => defined(x) && defined(y))\n .curve(curve);\n }\n const [DP, MS] = segmentation(P, defined);\n const connectStyle = subObject(finalStyle, 'connect');\n const missing = !!MS.length;\n // Draw one path of connected defined points.\n if (!missing || (connectNulls && !Object.keys(connectStyle).length)) {\n return select(document.createElement('path', {}))\n .style('d', linePath(DP) || [])\n .call(applyStyle, finalStyle)\n .node();\n }\n // Draw one path of unconnected defined points.\n if (missing && !connectNulls) {\n return select(document.createElement('path', {}))\n .style('d', linePath(P))\n .call(applyStyle, finalStyle)\n .node();\n }\n // Draw two path.\n // One for unconnected defined points.\n // One for connected segments.\n const connectPath = (segments) => segments.map(linePath).join(',');\n return select(new DoublePath())\n .style('style1', Object.assign(Object.assign({}, finalStyle), connectStyle))\n .style('style2', finalStyle)\n .style('d1', connectPath(MS))\n .style('d2', linePath(P))\n .node();\n };\n};\nCurve.props = {\n defaultMarker: 'smooth',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=curve.js.map","import { curveLinear, curveLinearClosed } from '@antv/vendor/d3-shape';\nimport { isPolar } from '../../utils/coordinate';\nimport { Curve } from './curve';\nexport const Line = (options, context) => {\n const { coordinate } = context;\n return (...params) => {\n const curve = isPolar(coordinate) ? curveLinearClosed : curveLinear;\n return Curve(Object.assign({ curve }, options), context)(...params);\n };\n};\nLine.props = Object.assign(Object.assign({}, Curve.props), { defaultMarker: 'line' });\n//# sourceMappingURL=line.js.map","import { curveStepAfter } from '@antv/vendor/d3-shape';\nimport { Curve } from './curve';\nexport const HV = (options, context) => {\n return Curve(Object.assign({ curve: curveStepAfter }, options), context);\n};\nHV.props = Object.assign(Object.assign({}, Curve.props), { defaultMarker: 'hv' });\n//# sourceMappingURL=hv.js.map","import { curveStepBefore } from '@antv/vendor/d3-shape';\nimport { Curve } from './curve';\nexport const VH = (options, context) => {\n return Curve(Object.assign({ curve: curveStepBefore }, options), context);\n};\nVH.props = Object.assign(Object.assign({}, Curve.props), { defaultMarker: 'vh' });\n//# sourceMappingURL=vh.js.map","import { curveStep } from '@antv/vendor/d3-shape';\nimport { Curve } from './curve';\nexport const HVH = (options, context) => {\n return Curve(Object.assign({ curve: curveStep }, options), context);\n};\nHVH.props = Object.assign(Object.assign({}, Curve.props), { defaultMarker: 'hvh' });\n//# sourceMappingURL=hvh.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { path as d3path } from '@antv/vendor/d3-path';\nimport { select } from '../../utils/selection';\nimport { applyStyle } from '../utils';\nimport { angle, sub, add } from '../../utils/vector';\nimport { defined } from '../../utils/helper';\nimport { Curve } from './curve';\n/**\n *\n * x9-x0---------x1-x2\n * / |r1 |r2 \\\n *x8---p0---------p1---x3\n * \\ r4| | r3 /\n * x7-x6--------x5-x4\n */\nfunction stroke(path, p0, p1, s0, s1) {\n const v = sub(p1, p0);\n const a = angle(v);\n const a1 = a + Math.PI / 2;\n const r1 = [(s0 / 2) * Math.cos(a1), (s0 / 2) * Math.sin(a1)];\n const r2 = [(s1 / 2) * Math.cos(a1), (s1 / 2) * Math.sin(a1)];\n const r3 = [(s1 / 2) * Math.cos(a), (s1 / 2) * Math.sin(a)];\n const r4 = [(s0 / 2) * Math.cos(a), (s0 / 2) * Math.sin(a)];\n const x0 = add(p0, r1);\n const x1 = add(p1, r2);\n const x2 = add(x1, r3);\n const x3 = add(p1, r3);\n const x4 = sub(x3, r2);\n const x5 = sub(p1, r2);\n const x6 = sub(p0, r1);\n const x7 = sub(x6, r4);\n const x8 = sub(p0, r4);\n const x9 = sub(x0, r4);\n path.moveTo(...x0);\n path.lineTo(...x1);\n path.arcTo(...x2, ...x3, s1 / 2);\n path.arcTo(...x4, ...x5, s1 / 2);\n path.lineTo(...x6);\n path.arcTo(...x7, ...x8, s0 / 2);\n path.arcTo(...x9, ...x0, s0 / 2);\n path.closePath();\n}\n// @todo Support connect and connectStyle.\nexport const Trail = (options, context) => {\n const { document } = context;\n return (P, value, defaults) => {\n const { seriesSize, color } = value;\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const path = d3path();\n for (let i = 0; i < P.length - 1; i++) {\n const p0 = P[i];\n const p1 = P[i + 1];\n const s0 = seriesSize[i];\n const s1 = seriesSize[i + 1];\n if ([...p0, ...p1].every(defined))\n stroke(path, p0, p1, s0, s1);\n }\n return select(document.createElement('path', {}))\n .call(applyStyle, rest)\n .style('fill', color || defaultColor)\n .style('d', path.toString())\n .call(applyStyle, options)\n .node();\n };\n};\nTrail.props = Object.assign(Object.assign({}, Curve.props), { defaultMarker: 'line' });\n//# sourceMappingURL=trail.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { curveMonotoneX, curveMonotoneY, curveCatmullRomClosed, } from '@antv/vendor/d3-shape';\nimport { isPolar, isTranspose } from '../../utils/coordinate';\nimport { Curve } from './curve';\nexport const Smooth = (options, context) => {\n const rest = __rest(options, []);\n const { coordinate } = context;\n return (...params) => {\n const curve = isPolar(coordinate)\n ? curveCatmullRomClosed\n : isTranspose(coordinate)\n ? curveMonotoneY\n : curveMonotoneX;\n return Curve(Object.assign({ curve }, rest), context)(...params);\n };\n};\nSmooth.props = Object.assign(Object.assign({}, Curve.props), { defaultMarker: 'smooth' });\n//# sourceMappingURL=smooth.js.map","import { deepMix } from '@antv/util';\nimport { column, columnOf } from './utils/helper';\n/**\n * Assume color channel is series channel.\n */\nexport const MaybeSeries = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { series, color } = encode;\n if (series !== undefined || color === undefined)\n return [I, mark];\n const [C, fc] = columnOf(encode, 'color');\n return [I, deepMix({}, mark, { encode: { series: column(C, fc) } })];\n };\n};\nMaybeSeries.props = {};\n//# sourceMappingURL=maybeSeries.js.map","import { deepMix } from '@antv/util';\nimport { constant, visualColumn } from './utils/helper';\n/**\n * Add 3 constant encode for size channel.\n * This is useful for point geometry.\n */\nexport const MaybeGradient = () => {\n return (I, mark) => {\n const { style = {}, encode } = mark;\n const { series } = encode;\n const { gradient } = style;\n if (!gradient || series)\n return [I, mark];\n return [\n I,\n deepMix({}, mark, {\n encode: {\n series: visualColumn(constant(I, undefined)),\n },\n }),\n ];\n };\n};\nMaybeGradient.props = {};\n//# sourceMappingURL=maybeGradient.js.map","import { group } from '@antv/vendor/d3-array';\nimport { isParallel, isPolar } from '../utils/coordinate';\nimport { LineShape, LineHV, LineVH, LineHVH, LineTrail, LineSmooth, } from '../shape';\nimport { MaybeSeries, MaybeGradient } from '../transform';\nimport { baseGeometryChannels, basePostInference, basePreInference, tooltip1d, tooltipXd, } from './utils';\nconst shape = {\n line: LineShape,\n smooth: LineSmooth,\n hv: LineHV,\n vh: LineVH,\n hvh: LineHVH,\n trail: LineTrail,\n};\nconst line = (index, scale, value, coordinate) => {\n var _a, _b;\n const { series: S, x: X, y: Y } = value;\n const { x, y } = scale;\n // Because x and y channel is not strictly required in Line.props,\n // it should throw error with empty x or y channels.\n if (X === undefined || Y === undefined) {\n throw new Error('Missing encode for x or y channel.');\n }\n // Group data into series.\n // There is only one series without specified series encode.\n const series = S ? Array.from(group(index, (i) => S[i]).values()) : [index];\n const I = series.map((group) => group[0]).filter((i) => i !== undefined);\n // A group of data corresponds to one line.\n const xoffset = (((_a = x === null || x === void 0 ? void 0 : x.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(x)) || 0) / 2;\n const yoffset = (((_b = y === null || y === void 0 ? void 0 : y.getBandWidth) === null || _b === void 0 ? void 0 : _b.call(y)) || 0) / 2;\n const P = Array.from(series, (I) => {\n return I.map((i) => coordinate.map([+X[i] + xoffset, +Y[i] + yoffset]));\n });\n return [I, P, series];\n};\nconst parallel = (index, scale, value, coordinate) => {\n // Extract all value for position[number] channels.\n const PV = Object.entries(value)\n .filter(([key]) => key.startsWith('position'))\n .map(([, value]) => value);\n // Because position channel is not strictly required in Line.props,\n // it should throw error with empty position values.\n if (PV.length === 0) {\n throw new Error('Missing encode for position channel.');\n }\n // Close the loop for radar(= parallel + polar) coordinate.\n if (isPolar(coordinate))\n PV.push(PV[0]);\n // One data corresponds to one line.\n const P = Array.from(index, (i) => {\n // Transform high dimension vector to a list of two-dimension vectors.\n // [a, b, c] -> [d, e, f, g, h, i]\n const vector = PV.map((pv) => +pv[i]);\n const vectors = coordinate.map(vector);\n // Two-dimension vectors are stored in a flat array, so extract them.\n // [d, e, f, g, h, i] -> [d, e], [f, g], [h, i]\n const points = [];\n for (let i = 0; i < vectors.length; i += 2) {\n points.push([vectors[i], vectors[i + 1]]);\n }\n return points;\n });\n return [index, P];\n};\n/**\n * Convert value for each channel to line shapes.\n */\nexport const Line = () => {\n return (index, scale, value, coordinate) => {\n const mark = isParallel(coordinate) ? parallel : line;\n return mark(index, scale, value, coordinate);\n };\n};\nLine.props = {\n defaultShape: 'line',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseGeometryChannels({ shapes: Object.keys(shape) }),\n { name: 'x' },\n { name: 'y' },\n { name: 'position', independent: true },\n { name: 'size' },\n { name: 'series', scale: 'band' },\n ],\n preInference: [\n ...basePreInference(),\n // !!!Note This order is very important.\n { type: MaybeGradient },\n { type: MaybeSeries },\n ],\n postInference: [...basePostInference(), ...tooltip1d(), ...tooltipXd()],\n interaction: {\n shareTooltip: true,\n seriesTooltip: true,\n crosshairs: true,\n },\n};\n//# sourceMappingURL=line.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { isFisheye } from '../../utils/coordinate';\nimport { Symbols } from '../../utils/marker';\nimport { select } from '../../utils/selection';\nimport { camelCase } from '../../utils/string';\nimport { applyStyle, getOrigin, toOpacityKey } from '../utils';\nexport function getRadius(mode, points, value, coordinate) {\n if (points.length === 1)\n return undefined;\n const { size } = value;\n if (mode === 'fixed')\n return size;\n if (mode === 'normal' || isFisheye(coordinate)) {\n const [[x0, y0], [x2, y2]] = points;\n const a = Math.abs((x2 - x0) / 2);\n const b = Math.abs((y2 - y0) / 2);\n return Math.max(0, (a + b) / 2);\n }\n return size;\n}\n/**\n * Render point in different coordinate.\n */\nexport const Color = (options, context) => {\n // Render border only when colorAttribute is stroke.\n const { colorAttribute, symbol, mode = 'auto' } = options, style = __rest(options, [\"colorAttribute\", \"symbol\", \"mode\"]);\n const path = Symbols.get(camelCase(symbol)) || Symbols.get('point');\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { lineWidth, color: defaultColor } = defaults;\n const finalLineWidth = style.stroke ? lineWidth || 1 : lineWidth;\n const { color = defaultColor, transform, opacity } = value;\n const [cx, cy] = getOrigin(points);\n const r = getRadius(mode, points, value, coordinate);\n const finalRadius = r || style.r || defaults.r;\n return select(document.createElement('path', {}))\n .call(applyStyle, defaults)\n .style('fill', 'transparent')\n .style('d', path(cx, cy, finalRadius))\n .style('lineWidth', finalLineWidth)\n .style('transform', transform)\n .style('transformOrigin', `${cx - finalRadius} ${cy - finalRadius}`)\n .style('stroke', color)\n .style(toOpacityKey(options), opacity)\n .style(colorAttribute, color)\n .call(applyStyle, style)\n .node();\n };\n};\nColor.props = {\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=color.js.map","import { Color } from './color';\n/**\n * ▶◀\n */\nexport const Bowtie = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'fill', symbol: 'bowtie' }, options), context);\n};\nBowtie.props = Object.assign({ defaultMarker: 'bowtie' }, Color.props);\n//# sourceMappingURL=bowtie.js.map","import { Color } from './color';\n/**\n * ✕\n */\nexport const Cross = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'stroke', symbol: 'cross' }, options), context);\n};\nCross.props = Object.assign({ defaultMarker: 'cross' }, Color.props);\n//# sourceMappingURL=cross.js.map","import { Color } from './color';\n/**\n * ◆\n */\nexport const Diamond = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'fill', symbol: 'diamond' }, options), context);\n};\nDiamond.props = Object.assign({ defaultMarker: 'diamond' }, Color.props);\n//# sourceMappingURL=diamond.js.map","import { Color } from './color';\n/**\n * ⭓\n */\nexport const Hexagon = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'fill', symbol: 'hexagon' }, options), context);\n};\nHexagon.props = Object.assign({ defaultMarker: 'hexagon' }, Color.props);\n//# sourceMappingURL=hexagon.js.map","import { Color } from './color';\n/**\n * ▷◁\n */\nexport const HollowBowtie = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'stroke', symbol: 'bowtie' }, options), context);\n};\nHollowBowtie.props = Object.assign({ defaultMarker: 'hollowBowtie' }, Color.props);\n//# sourceMappingURL=hollowBowtie.js.map","import { Color } from './color';\n/**\n * ◇\n */\nexport const HollowDiamond = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'stroke', symbol: 'diamond' }, options), context);\n};\nHollowDiamond.props = Object.assign({ defaultMarker: 'hollowDiamond' }, Color.props);\n//# sourceMappingURL=hollowDiamond.js.map","import { Color } from './color';\n/**\n * ⬡\n */\nexport const HollowHexagon = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'stroke', symbol: 'hexagon' }, options), context);\n};\nHollowHexagon.props = Object.assign({ defaultMarker: 'hollowHexagon' }, Color.props);\n//# sourceMappingURL=hollowHexagon.js.map","import { Color } from './color';\n/**\n * ○\n */\nexport const HollowPoint = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'stroke', symbol: 'point' }, options), context);\n};\nHollowPoint.props = Object.assign({ defaultMarker: 'hollowPoint' }, Color.props);\n//# sourceMappingURL=hollow.js.map","import { Color } from './color';\n/**\n * □\n */\nexport const HollowSquare = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'stroke', symbol: 'square' }, options), context);\n};\nHollowSquare.props = Object.assign({ defaultMarker: 'hollowSquare' }, Color.props);\n//# sourceMappingURL=hollowSquare.js.map","import { Color } from './color';\n/**\n * △\n */\nexport const HollowTriangle = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'stroke', symbol: 'triangle' }, options), context);\n};\nHollowTriangle.props = Object.assign({ defaultMarker: 'hollowTriangle' }, Color.props);\n//# sourceMappingURL=hollowTriangle.js.map","import { Color } from './color';\n/**\n * ▽\n */\nexport const HollowTriangleDown = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'stroke', symbol: 'triangle-down' }, options), context);\n};\nHollowTriangleDown.props = Object.assign({ defaultMarker: 'hollowTriangleDown' }, Color.props);\n//# sourceMappingURL=hollowTriangleDown.js.map","import { Color } from './color';\n/**\n * -\n */\nexport const Hyphen = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'stroke', symbol: 'hyphen' }, options), context);\n};\nHyphen.props = Object.assign({ defaultMarker: 'hyphen' }, Color.props);\n//# sourceMappingURL=hyphen.js.map","import { Color } from './color';\n/**\n * |\n */\nexport const Line = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'stroke', symbol: 'line' }, options), context);\n};\nLine.props = Object.assign({ defaultMarker: 'line' }, Color.props);\n//# sourceMappingURL=line.js.map","import { Color } from './color';\n/**\n * ▼\n */\nexport const TriangleDown = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'fill', symbol: 'triangle-down' }, options), context);\n};\nTriangleDown.props = Object.assign({ defaultMarker: 'triangleDown' }, Color.props);\n//# sourceMappingURL=triangleDown.js.map","import { Color } from './color';\n/**\n * +\n */\nexport const Plus = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'stroke', symbol: 'plus' }, options), context);\n};\nPlus.props = Object.assign({ defaultMarker: 'plus' }, Color.props);\n//# sourceMappingURL=plus.js.map","import { Color } from './color';\n/**\n * ■\n */\nexport const Square = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'fill', symbol: 'square' }, options), context);\n};\nSquare.props = Object.assign({ defaultMarker: 'square' }, Color.props);\n//# sourceMappingURL=square.js.map","import { Color } from './color';\n/**\n * ●\n */\nexport const Point = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'fill', symbol: 'point' }, options), context);\n};\nPoint.props = Object.assign({ defaultMarker: 'point' }, Color.props);\n//# sourceMappingURL=point.js.map","import { Color } from './color';\n/**\n * 工\n */\nexport const Tick = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'stroke', symbol: 'tick' }, options), context);\n};\nTick.props = Object.assign({ defaultMarker: 'tick' }, Color.props);\n//# sourceMappingURL=tick.js.map","import { Color } from './color';\n/**\n * ▲\n */\nexport const Triangle = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'fill', symbol: 'triangle' }, options), context);\n};\nTriangle.props = Object.assign({ defaultMarker: 'triangle' }, Color.props);\n//# sourceMappingURL=triangle.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { select } from '../../utils/selection';\nimport { applyStyle, getOrigin, toOpacityKey } from '../utils';\nimport { getRadius } from './color';\n/**\n * Render point in different coordinate.\n */\nexport const BaseCircle = (options, context) => {\n // Render border only when colorAttribute is stroke.\n const { colorAttribute, mode = 'auto' } = options, style = __rest(options, [\"colorAttribute\", \"mode\"]);\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { lineWidth, color: defaultColor } = defaults;\n const finalLineWidth = style.stroke ? lineWidth || 1 : lineWidth;\n const { color = defaultColor, transform, opacity } = value;\n const [cx, cy] = getOrigin(points);\n const r = getRadius(mode, points, value, coordinate);\n const finalRadius = r || style.r || defaults.r;\n return select(document.createElement('circle', {}))\n .call(applyStyle, defaults)\n .style('fill', 'transparent')\n .style('cx', cx)\n .style('cy', cy)\n .style('r', finalRadius)\n .style('lineWidth', finalLineWidth)\n .style('transform', transform)\n .style('transformOrigin', `${cx} ${cy}`)\n .style('stroke', color)\n .style(toOpacityKey(options), opacity)\n .style(colorAttribute, color)\n .call(applyStyle, style)\n .node();\n };\n};\n/**\n * ●\n */\nexport const Circle = (options, context) => {\n return BaseCircle(Object.assign({ colorAttribute: 'fill' }, options), context);\n};\nCircle.props = {\n defaultMarker: 'circle',\n defaultEnterAnimation: 'fadeIn',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=circle.js.map","import { BaseCircle, Circle } from './circle';\n/**\n * ○\n */\nexport const HollowCircle = (options, context) => {\n return BaseCircle(Object.assign({ colorAttribute: 'stroke' }, options), context);\n};\nHollowCircle.props = Object.assign({ defaultMarker: 'hollowPoint' }, Circle.props);\n//# sourceMappingURL=hollowCircle.js.map","import { deepMix } from '@antv/util';\nimport { constant, visualColumn } from './utils/helper';\n/**\n * Add 3 constant encode for size channel.\n * This is useful for point geometry.\n */\nexport const MaybeSize = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { size } = encode;\n if (size !== undefined)\n return [I, mark];\n return [\n I,\n deepMix({}, mark, { encode: { size: visualColumn(constant(I, 3)) } }),\n ];\n };\n};\nMaybeSize.props = {};\n//# sourceMappingURL=maybeSize.js.map","import { PointBowtie, PointCross, PointDiamond, PointHexagon, PointHollowBowtie, PointHollowDiamond, PointHollowHexagon, PointHollow, PointHollowSquare, PointHollowTriangle, PointHollowTriangleDown, PointHyphen, PointLine, PointTriangleDown, PointPlus, PointSquare, PointShape, PointTick, PointTriangle, PointCircle, PointHollowCircle, } from '../shape';\nimport { MaybeZeroX, MaybeZeroY, MaybeSize } from '../transform';\nimport { baseGeometryChannels, basePostInference, basePreInference, createBandOffset, tooltip2d, } from './utils';\nconst shape = {\n hollow: PointHollow,\n hollowDiamond: PointHollowDiamond,\n hollowHexagon: PointHollowHexagon,\n hollowSquare: PointHollowSquare,\n hollowTriangleDown: PointHollowTriangleDown,\n hollowTriangle: PointHollowTriangle,\n hollowBowtie: PointHollowBowtie,\n hollowCircle: PointHollowCircle,\n point: PointShape,\n plus: PointPlus,\n diamond: PointDiamond,\n square: PointSquare,\n triangle: PointTriangle,\n hexagon: PointHexagon,\n cross: PointCross,\n bowtie: PointBowtie,\n hyphen: PointHyphen,\n line: PointLine,\n tick: PointTick,\n triangleDown: PointTriangleDown,\n circle: PointCircle,\n};\n/**\n * Convert value for each channel to point shapes.\n * Calc the bbox of each point based on x, y and r.\n * This is for allowing their radius can be affected by coordinate(e.g. fisheye).\n */\nexport const Point = (options) => {\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y, x1: X1, y1: Y1, size: S, dx: DX, dy: DY } = value;\n const [width, height] = coordinate.getSize();\n const offset = createBandOffset(scale, value, options);\n const xy = (i) => {\n const dx = +((DX === null || DX === void 0 ? void 0 : DX[i]) || 0);\n const dy = +((DY === null || DY === void 0 ? void 0 : DY[i]) || 0);\n const x = X1 ? (+X[i] + +X1[i]) / 2 : +X[i];\n const y = Y1 ? (+Y[i] + +Y1[i]) / 2 : +Y[i];\n const cx = x + dx;\n const cy = y + dy;\n return [cx, cy];\n };\n const P = S\n ? Array.from(index, (i) => {\n const [cx, cy] = xy(i);\n const r = +S[i];\n const a = r / width;\n const b = r / height;\n const p1 = [cx - a, cy - b];\n const p2 = [cx + a, cy + b];\n return [\n coordinate.map(offset(p1, i)),\n coordinate.map(offset(p2, i)),\n ];\n })\n : Array.from(index, (i) => [coordinate.map(offset(xy(i), i))]);\n return [index, P];\n };\n};\nPoint.props = {\n defaultShape: 'hollow',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseGeometryChannels({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n { name: 'series', scale: 'band' },\n { name: 'size', quantitative: 'sqrt' },\n { name: 'dx', scale: 'identity' },\n { name: 'dy', scale: 'identity' },\n ],\n preInference: [\n ...basePreInference(),\n { type: MaybeZeroX },\n { type: MaybeZeroY },\n ],\n postInference: [...basePostInference(), { type: MaybeSize }, ...tooltip2d()],\n};\n//# sourceMappingURL=point.js.map","import { applyStyle } from '../../shape/utils';\nimport { select } from '../../utils/selection';\nimport { Advance } from './advance';\n/**\n * @todo autoRotate when in polar coordinate\n */\nexport const Text = (options, context) => {\n const { coordinate } = context;\n return (points, value, defaults) => {\n const { color, text = '', fontSize, rotate = 0, transform = '' } = value;\n const textStyle = {\n text: String(text),\n stroke: color,\n fill: color,\n fontSize,\n };\n const [[x0, y0]] = points;\n return select(new Advance())\n .style('x', x0)\n .style('y', y0)\n .call(applyStyle, defaults)\n .style('transform', `${transform}rotate(${+rotate})`)\n .style('coordCenter', coordinate.getCenter())\n .call(applyStyle, textStyle)\n .call(applyStyle, options)\n .node();\n };\n};\nText.props = {\n defaultMarker: 'point',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=text.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Marker } from '@antv/component';\nimport { createElement } from '../../utils/createElement';\nimport { subObject } from '../../utils/helper';\nimport { select } from '../../utils/selection';\nimport { applyStyle } from '../../shape/utils';\n/**\n * Get the path to draw a built-in badge, which is like a balloon.\n */\nfunction getPath(r) {\n const offset = r / Math.sqrt(2);\n const dy = r * Math.sqrt(2);\n const [p0x, p0y] = [-offset, offset - dy];\n const [p1x, p1y] = [0, 0];\n const [p2x, p2y] = [offset, offset - dy];\n return [\n ['M', p0x, p0y],\n ['A', r, r, 0, 1, 1, p2x, p2y],\n ['L', p1x, p1y],\n ['Z'],\n ];\n}\nfunction inferTextPosition(shape) {\n const { min, max } = shape.getLocalBounds();\n return [(min[0] + max[0]) * 0.5, (min[1] + max[1]) * 0.5];\n}\nconst BadgeShape = createElement((g) => {\n const _a = g.attributes, { class: className, x: x0, y: y0, transform } = _a, rest = __rest(_a, [\"class\", \"x\", \"y\", \"transform\"]);\n const markerStyle = subObject(rest, 'marker');\n const { size = 24 } = markerStyle;\n const symbol = () => getPath(size / 2);\n const bgShape = select(g)\n .maybeAppend('marker', () => new Marker({}))\n .call((selection) => selection.node().update(Object.assign({ symbol }, markerStyle)))\n .node();\n const [x, y] = inferTextPosition(bgShape);\n select(g)\n .maybeAppend('text', 'text')\n .style('x', x)\n .style('y', y)\n .call(applyStyle, rest);\n});\nexport const Badge = (options, context) => {\n const style = __rest(options, []);\n return (points, value, defaults) => {\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const { color = defaultColor, text = '' } = value;\n const textStyle = {\n text: String(text),\n stroke: color,\n fill: color,\n };\n const [[x0, y0]] = points;\n return select(new BadgeShape())\n .call(applyStyle, rest)\n .style('transform', `translate(${x0},${y0})`)\n .call(applyStyle, textStyle)\n .call(applyStyle, style)\n .node();\n };\n};\nBadge.props = {\n defaultMarker: 'point',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=badge.js.map","import { Text } from '@antv/g';\nimport { applyStyle } from '../../shape/utils';\nimport { select } from '../../utils/selection';\n/**\n * @todo autoRotate when in polar coordinate\n * Tag shape for Text mark, used in wordCloud plot.\n */\nexport const Tag = (options, context) => {\n const { coordinate } = context;\n return (points, value, defaults) => {\n const { color, text = '', fontSize, rotate = 0, transform = '' } = value;\n const textStyle = {\n text: String(text),\n stroke: color,\n fill: color,\n fontSize,\n textAlign: 'center',\n textBaseline: 'middle',\n };\n const [[x0, y0]] = points;\n const n = select(new Text())\n .style('x', x0)\n .style('y', y0)\n .call(applyStyle, defaults)\n .style('transformOrigin', 'center center')\n .style('transform', `${transform}rotate(${rotate}deg)`)\n .style('coordCenter', coordinate.getCenter())\n .call(applyStyle, textStyle)\n .call(applyStyle, options)\n .node();\n return n;\n };\n};\nTag.props = {\n defaultMarker: 'point',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=tag.js.map","import { deepMix } from '@antv/util';\nimport { column, isObject } from './utils/helper';\n/**\n * Add 3 constant encode for size channel.\n * This is useful for point geometry.\n */\nexport const MaybeTuple = () => {\n return (I, mark) => {\n const { data } = mark;\n if (!Array.isArray(data) || data.some(isObject))\n return [I, mark];\n const position = Array.isArray(data[0]) ? data : [data];\n const X = position.map((d) => d[0]);\n const Y = position.map((d) => d[1]);\n return [I, deepMix({}, mark, { encode: { x: column(X), y: column(Y) } })];\n };\n};\nMaybeTuple.props = {};\n//# sourceMappingURL=maybeTuple.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix } from '@antv/util';\nimport { column } from './utils/helper';\n/**\n * Set visual position with style.x and style.y.\n * The priority of style.x, style.y is higher than data.\n */\nexport const MaybeVisualPosition = () => {\n return (I, mark) => {\n const { data, style = {} } = mark, restMark = __rest(mark, [\"data\", \"style\"]);\n const { x: x0, y: y0 } = style, rest = __rest(style, [\"x\", \"y\"]);\n if (x0 == undefined || y0 == undefined)\n return [I, mark];\n const x = x0 || 0;\n const y = y0 || 0;\n return [\n [0],\n deepMix({}, restMark, {\n data: [0],\n cartesian: true,\n encode: {\n x: column([x]),\n y: column([y]),\n },\n scale: {\n x: { type: 'identity', independent: true, guide: null },\n y: { type: 'identity', independent: true, guide: null }, // hide axis\n },\n style: rest,\n }),\n ];\n };\n};\nMaybeVisualPosition.props = {};\n//# sourceMappingURL=maybeVisualPosition.js.map","import { TextShape, TextBadge, TextTag } from '../shape';\nimport { MaybeTuple, MaybeVisualPosition } from '../transform';\nimport { baseGeometryChannels, basePostInference, basePreInference, createBandOffset, tooltip2d, visualMark, } from './utils';\nconst shape = {\n text: TextShape,\n badge: TextBadge,\n tag: TextTag,\n};\nexport const Text = (options) => {\n const { cartesian = false } = options;\n if (cartesian)\n return visualMark;\n return ((index, scale, value, coordinate) => {\n const { x: X, y: Y } = value;\n const offset = createBandOffset(scale, value, options);\n const P = Array.from(index, (i) => {\n const p = [+X[i], +Y[i]];\n return [coordinate.map(offset(p, i))];\n });\n return [index, P];\n });\n};\nText.props = {\n defaultShape: 'text',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseGeometryChannels({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n { name: 'text', scale: 'identity' },\n { name: 'fontSize', scale: 'identity' },\n { name: 'rotate', scale: 'identity' },\n ],\n preInference: [\n ...basePreInference(),\n { type: MaybeTuple },\n { type: MaybeVisualPosition },\n ],\n postInference: [...basePostInference(), ...tooltip2d()],\n};\n//# sourceMappingURL=text.js.map","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(area);\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport area from \"./area.js\";\nimport {lineRadial} from \"./lineRadial.js\";\n\nexport default function() {\n var a = area().curve(curveRadialLinear),\n c = a.curve,\n x0 = a.lineX0,\n x1 = a.lineX1,\n y0 = a.lineY0,\n y1 = a.lineY1;\n\n a.angle = a.x, delete a.x;\n a.startAngle = a.x0, delete a.x0;\n a.endAngle = a.x1, delete a.x1;\n a.radius = a.y, delete a.y;\n a.innerRadius = a.y0, delete a.y0;\n a.outerRadius = a.y1, delete a.y1;\n a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;\n a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;\n a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;\n a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;\n\n a.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return a;\n}\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { area, areaRadial } from '@antv/vendor/d3-shape';\nimport { select } from '../../utils/selection';\nimport { isPolar, isTranspose } from '../../utils/coordinate';\nimport { angleWithQuadrant, sub, dist } from '../../utils/vector';\nimport { applyStyle, computeGradient, getTransform } from '../utils';\nimport { subObject } from '../../utils/helper';\nimport { createElement } from '../../utils/createElement';\n/**\n * Given a points sequence, split it into an array of defined points\n * and an array of undefined segments.\n *\n * Input - [p0, p1, p2, p3, p4, p5], p1 ~ p2 is `Y1`, p3 ~ p5 is `Y0`.\n * Output - When all of Y1 & Y0 is defined, move into defined points, or else undefined segments.\n */\nfunction segmentation(points, defined) {\n const definedPointsY1 = [];\n const definedPointsY0 = [];\n const segments = [];\n let m = false; // Is in a undefined sequence.\n let dp = null; // The previous defined point.\n const mid = points.length / 2;\n for (let i = 0; i < mid; i++) {\n const y1 = points[i];\n const y0 = points[i + mid];\n // If current point is a undefined point,\n // enter a undefined sequence.\n if ([...y1, ...y0].some((v) => !defined(v)))\n m = true;\n else {\n definedPointsY1.push(y1);\n definedPointsY0.push(y0);\n // If current point is a defined point,\n // and is in a undefined sequence, save\n // the two closest defined points as this\n // undefined sequence and exit it.\n if (m && dp) {\n m = false;\n const [dpy1, dpy0] = dp;\n segments.push([dpy1, y1, dpy0, y0]);\n }\n // Update the previous defined point.\n dp = [y1, y0];\n }\n }\n return [definedPointsY1.concat(definedPointsY0), segments];\n}\nconst DoubleArea = createElement((g) => {\n const { areaPath, connectPath, areaStyle, connectStyle } = g.attributes;\n const document = g.ownerDocument;\n select(g)\n .maybeAppend('connect-path', () => document.createElement('path', {}))\n .style('d', connectPath)\n .call(applyStyle, connectStyle);\n select(g)\n .maybeAppend('area-path', () => document.createElement('path', {}))\n .style('d', areaPath)\n .call(applyStyle, areaStyle);\n});\nexport const Curve = (options, context) => {\n const { curve, gradient = false, defined = (d) => !Number.isNaN(d) && d !== undefined && d !== null, connect: connectNulls = false } = options, style = __rest(options, [\"curve\", \"gradient\", \"defined\", \"connect\"]);\n const { coordinate, document } = context;\n return (P, value, defaults) => {\n const { color: defaultColor } = defaults;\n const { color = defaultColor, seriesColor: sc, seriesX: sx, seriesY: sy, } = value;\n const tpShape = isTranspose(coordinate);\n const transform = getTransform(coordinate, value);\n const fill = gradient && sc\n ? computeGradient(sc, sx, sy, gradient, undefined, tpShape)\n : color;\n const finalStyle = Object.assign(Object.assign(Object.assign(Object.assign({}, defaults), { stroke: fill, fill: fill }), (transform && { transform })), style);\n const [DP, MS] = segmentation(P, defined);\n const connectStyle = subObject(finalStyle, 'connect');\n const missing = !!MS.length;\n const getPathNode = (path) => {\n return select(document.createElement('path', {}))\n .style('d', path || '')\n .call(applyStyle, finalStyle)\n .node();\n };\n if (!isPolar(coordinate)) {\n /**\n * Draw area shape by points.\n */\n const areaPath = (points) => {\n const Y1 = points.slice(0, points.length / 2);\n const Y0 = points.slice(points.length / 2);\n return tpShape\n ? area()\n .y((_, idx) => Y1[idx][1])\n .x1((_, idx) => Y1[idx][0])\n .x0((_, idx) => Y0[idx][0])\n .defined((_, idx) => [...Y1[idx], ...Y0[idx]].every(defined))\n .curve(curve)(Y1)\n : area()\n .x((_, idx) => Y1[idx][0])\n .y1((_, idx) => Y1[idx][1])\n .y0((_, idx) => Y0[idx][1])\n .defined((_, idx) => [...Y1[idx], ...Y0[idx]].every(defined))\n .curve(curve)(Y1);\n };\n // Draw one area of connected defined points.\n if (!missing || (connectNulls && !Object.keys(connectStyle).length)) {\n return getPathNode(areaPath(DP));\n }\n // Draw one area of unconnected defined points.\n if (missing && !connectNulls) {\n return getPathNode(areaPath(P));\n }\n // Draw two area.\n // One for unconnected defined points.\n // One for connected segments.\n return select(new DoubleArea())\n .style('areaStyle', finalStyle)\n .style('connectStyle', Object.assign(Object.assign({}, connectStyle), style))\n .style('areaPath', areaPath(P))\n .style('connectPath', MS.map(areaPath).join(''))\n .node();\n }\n else {\n /**\n * Draw areaRadial shape by points.\n */\n const areaRadialPath = (points) => {\n const center = coordinate.getCenter();\n const Y1 = points.slice(0, points.length / 2);\n const Y0 = points.slice(points.length / 2);\n return areaRadial()\n .angle((_, idx) => angleWithQuadrant(sub(Y1[idx], center)))\n .outerRadius((_, idx) => dist(Y1[idx], center))\n .innerRadius((_, idx) => dist(Y0[idx], center))\n .defined((_, idx) => [...Y1[idx], ...Y0[idx]].every(defined))\n .curve(curve)(Y0);\n };\n // Draw one area of connected defined points.\n if (!missing || (connectNulls && !Object.keys(connectStyle).length)) {\n return getPathNode(areaRadialPath(DP));\n }\n // Draw one area of unconnected defined points.\n if (missing && !connectNulls) {\n return getPathNode(areaRadialPath(P));\n }\n // Draw two area.\n // One for unconnected defined points.\n // One for connected segments.\n return select(new DoubleArea())\n .style('areaStyle', finalStyle)\n .style('connectStyle', Object.assign(Object.assign({}, connectStyle), style))\n .style('areaPath', areaRadialPath(P))\n .style('connectPath', MS.map(areaRadialPath).join(''))\n .node();\n }\n };\n};\nCurve.props = {\n defaultMarker: 'smooth',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=curve.js.map","import { curveLinearClosed, curveLinear } from '@antv/vendor/d3-shape';\nimport { isPolar } from '../../utils/coordinate';\nimport { Curve } from './curve';\nexport const Area = (options, context) => {\n const { coordinate } = context;\n return (...params) => {\n const curve = isPolar(coordinate) ? curveLinearClosed : curveLinear;\n return Curve(Object.assign({ curve: curve }, options), context)(...params);\n };\n};\nArea.props = Object.assign(Object.assign({}, Curve.props), { defaultMarker: 'square' });\n//# sourceMappingURL=area.js.map","import { curveStepAfter } from '@antv/vendor/d3-shape';\nimport { Curve } from './curve';\nexport const HV = (options, context) => {\n return (...params) => {\n return Curve(Object.assign({ curve: curveStepAfter }, options), context)(...params);\n };\n};\nHV.props = Object.assign(Object.assign({}, Curve.props), { defaultMarker: 'hv' });\n//# sourceMappingURL=hv.js.map","import { curveStep } from '@antv/vendor/d3-shape';\nimport { Curve } from './curve';\nexport const HVH = (options, context) => {\n return (...params) => {\n return Curve(Object.assign({ curve: curveStep }, options), context)(...params);\n };\n};\nHVH.props = Object.assign(Object.assign({}, Curve.props), { defaultMarker: 'hvh' });\n//# sourceMappingURL=hvh.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { curveCatmullRomClosed, curveMonotoneX, curveMonotoneY, } from '@antv/vendor/d3-shape';\nimport { isPolar, isTranspose } from '../../utils/coordinate';\nimport { Curve } from './curve';\nexport const Smooth = (options, context) => {\n const rest = __rest(options, []);\n const { coordinate } = context;\n return (...params) => {\n const curve = isPolar(coordinate)\n ? curveCatmullRomClosed\n : isTranspose(coordinate)\n ? curveMonotoneY\n : curveMonotoneX;\n return Curve(Object.assign({ curve }, rest), context)(...params);\n };\n};\nSmooth.props = Object.assign(Object.assign({}, Curve.props), { defaultMarker: 'smooth' });\n//# sourceMappingURL=smooth.js.map","import { curveStepBefore } from '@antv/vendor/d3-shape';\nimport { Curve } from './curve';\nexport const VH = (options, context) => {\n return (...params) => {\n return Curve(Object.assign({ curve: curveStepBefore }, options), context)(...params);\n };\n};\nVH.props = Object.assign(Object.assign({}, Curve.props), { defaultMarker: 'vh' });\n//# sourceMappingURL=vh.js.map","import { group } from '@antv/vendor/d3-array';\nimport { AreaShape, AreaHV, AreaHVH, AreaSmooth, AreaVH } from '../shape';\nimport { MaybeSeries, MaybeZeroY1, MaybeZeroPadding } from '../transform';\nimport { baseGeometryChannels, basePostInference, basePreInference, tooltip1d, } from './utils';\nconst shape = {\n area: AreaShape,\n smooth: AreaSmooth,\n hvh: AreaHVH,\n vh: AreaVH,\n hv: AreaHV,\n};\n/*\n * Convert value for each channel to area shapes.\n *\n * ▲\n * │\n * │ y2\n * │\n * │ y1 xxxxxxxxxxxxx\n * │ xxxx x\n * │ xxx x\n * │ xxx x\n * │ y0 xxx x\n * │ xxxxxxx x\n * │ x x\n * │ xx x\n * │ x x\n * │ x x\n * │ x x\n * │ x x\n * │ x x\n * │ x x\n * │ x x\n * ────┼─────────x───────────────────────────────x──────────────►\n * │ y3 y4 y5\n */\nexport const Area = () => {\n return (index, scale, value, coordinate) => {\n var _a, _b;\n const { x: X, y: Y, y1: Y1, series: S } = value;\n const { x, y } = scale;\n // Group data by series field.\n const series = S ? Array.from(group(index, (i) => S[i]).values()) : [index];\n const I = series.map((group) => group[0]).filter((i) => i !== undefined);\n // A group of data corresponds to one area.\n const xoffset = (((_a = x === null || x === void 0 ? void 0 : x.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(x)) || 0) / 2;\n const yoffset = (((_b = y === null || y === void 0 ? void 0 : y.getBandWidth) === null || _b === void 0 ? void 0 : _b.call(y)) || 0) / 2;\n const P = Array.from(series, (SI) => {\n const l = SI.length;\n const points = new Array(l * 2);\n for (let idx = 0; idx < SI.length; idx++) {\n const i = SI[idx];\n points[idx] = coordinate.map([+X[i] + xoffset, +Y[i] + yoffset]); // y1\n points[l + idx] = coordinate.map([+X[i] + xoffset, +Y1[i] + yoffset]); // y0\n }\n return points;\n });\n return [I, P, series];\n };\n};\nArea.props = {\n defaultShape: 'area',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseGeometryChannels({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n { name: 'size' },\n { name: 'series', scale: 'band' },\n ],\n preInference: [\n ...basePreInference(),\n { type: MaybeSeries },\n { type: MaybeZeroY1 },\n { type: MaybeZeroPadding },\n ],\n postInference: [...basePostInference(), ...tooltip1d()],\n interaction: {\n shareTooltip: true,\n seriesTooltip: true,\n crosshairs: true,\n },\n};\n//# sourceMappingURL=area.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { applyStyle } from '../utils';\nimport { select } from '../../utils/selection';\nimport { p } from '../../mark/utils';\nexport const Image = (options, context) => {\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const { color = defaultColor, src = '', size = 32, transform = '' } = value;\n let { width = size, height = size } = options;\n const [[x0, y0]] = points;\n // Support percentage width, height.\n const [w, h] = coordinate.getSize();\n width = typeof width === 'string' ? p(width) * w : width;\n height = typeof height === 'string' ? p(height) * h : height;\n const x = x0 - Number(width) / 2;\n const y = y0 - Number(height) / 2;\n return select(document.createElement('image', {}))\n .call(applyStyle, rest)\n .style('x', x)\n .style('y', y)\n .style('src', src)\n .style('stroke', color)\n .style('transform', transform)\n .call(applyStyle, options)\n .style('width', width)\n .style('height', height)\n .node();\n };\n};\nImage.props = {\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=image.js.map","import { MaybeTuple, MaybeVisualPosition } from '../transform';\nimport { ImageShape } from '../shape';\nimport { baseGeometryChannels, basePostInference, basePreInference, createBandOffset, tooltip2d, visualMark, } from './utils';\nconst shape = {\n image: ImageShape,\n};\nexport const Image = (options) => {\n const { cartesian } = options;\n if (cartesian)\n return visualMark;\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y } = value;\n const offset = createBandOffset(scale, value, options);\n const P = Array.from(index, (i) => {\n const p = [+X[i], +Y[i]];\n return [coordinate.map(offset(p, i))];\n });\n return [index, P];\n };\n};\nImage.props = {\n defaultShape: 'image',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseGeometryChannels({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n { name: 'src', scale: 'identity' },\n { name: 'size' },\n ],\n preInference: [\n ...basePreInference(),\n { type: MaybeTuple },\n { type: MaybeVisualPosition },\n ],\n postInference: [...basePostInference(), ...tooltip2d()],\n};\n//# sourceMappingURL=image.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { path as d3path } from '@antv/vendor/d3-path';\nimport { isPolar } from '../../utils/coordinate';\nimport { applyStyle, appendPolygon, appendArc } from '../utils';\nimport { select } from '../../utils/selection';\nimport { dist } from '../../utils/vector';\nfunction getPolygonPath(points, coordinate) {\n const path = d3path();\n // In polar, draw arc.\n if (isPolar(coordinate)) {\n const center = coordinate.getCenter();\n const closedPoints = [...points, points[0]];\n // Calculate dist array for cache.\n const dists = closedPoints.map((p) => dist(p, center));\n closedPoints.forEach((curr, idx) => {\n if (idx === 0) {\n path.moveTo(curr[0], curr[1]);\n return;\n }\n const currDist = dists[idx];\n const prev = points[idx - 1];\n const prevDist = dists[idx - 1];\n // When radius is equal, draw 2 point with arc.\n // todo: choose a minimum value.\n if (prevDist !== undefined && Math.abs(currDist - prevDist) < 1e-10) {\n appendArc(path, prev, curr, center, currDist);\n }\n else {\n path.lineTo(curr[0], curr[1]);\n }\n });\n path.closePath();\n return path;\n }\n // In rect, draw polygon.\n return appendPolygon(path, points);\n}\nexport const Polygon = (options, context) => {\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const { color = defaultColor, transform } = value;\n const path = getPolygonPath(points, coordinate);\n return select(document.createElement('path', {}))\n .call(applyStyle, rest)\n .style('d', path.toString())\n .style('stroke', color)\n .style('fill', color)\n .style('transform', transform)\n .call(applyStyle, options)\n .node();\n };\n};\nPolygon.props = {\n defaultMarker: 'square',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=polygon.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { path as d3path } from '@antv/vendor/d3-path';\nimport { appendArc, applyStyle } from '../utils';\nimport { select } from '../../utils/selection';\nimport { isPolar } from '../../utils/coordinate';\nimport { dist } from '../../utils/vector';\nfunction getRibbonPath(points, coordinate) {\n const [p0, p1, p2, p3] = points;\n const path = d3path();\n // In polar, draw shape only for Chord.\n if (isPolar(coordinate)) {\n const center = coordinate.getCenter();\n const radius = dist(center, p0);\n path.moveTo(p0[0], p0[1]);\n // p0 -> p2\n path.quadraticCurveTo(center[0], center[1], p2[0], p2[1]);\n // p2 -> p3\n appendArc(path, p2, p3, center, radius);\n // p3 -> p1\n path.quadraticCurveTo(center[0], center[1], p1[0], p1[1]);\n // p1 -> p0\n appendArc(path, p1, p0, center, radius);\n path.closePath();\n return path;\n }\n // In Rect, draw shape for Sankey.\n path.moveTo(p0[0], p0[1]);\n path.bezierCurveTo(p0[0] / 2 + p2[0] / 2, p0[1], p0[0] / 2 + p2[0] / 2, p2[1], p2[0], p2[1]);\n path.lineTo(p3[0], p3[1]);\n path.bezierCurveTo(p3[0] / 2 + p1[0] / 2, p3[1], p3[0] / 2 + p1[0] / 2, p1[1], p1[0], p1[1]);\n path.lineTo(p0[0], p0[1]);\n path.closePath();\n return path;\n}\n/**\n * Connect points for 4 points:\n * - In rect, draw ribbon used in Sankey.\n * - In polar, draw arc used in Chord.\n */\nexport const Ribbon = (options, context) => {\n const style = __rest(options, []);\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const { color = defaultColor, transform } = value;\n const path = getRibbonPath(points, coordinate);\n return select(document.createElement('path', {}))\n .call(applyStyle, rest)\n .style('d', path.toString())\n .style('fill', color || defaultColor)\n .style('stroke', color || defaultColor)\n .style('transform', transform)\n .call(applyStyle, style)\n .node();\n };\n};\nRibbon.props = {\n defaultMarker: 'square',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=ribbon.js.map","import { PolygonShape, PolygonRibbon } from '../shape';\nimport { baseGeometryChannels, basePostInference, basePreInference, tooltip2d, } from './utils';\nconst shape = {\n polygon: PolygonShape,\n ribbon: PolygonRibbon,\n};\n/**\n * Convert value for each channel to polygon shapes.\n */\nexport const Polygon = () => {\n return (index, scale, value, coordinate) => {\n const Xn = Object.entries(value)\n .filter(([key]) => key.startsWith('x'))\n .map(([, value]) => value);\n const Yn = Object.entries(value)\n .filter(([key]) => key.startsWith('y'))\n .map(([, value]) => value);\n const P = index.map((i) => {\n const Pn = [];\n for (let j = 0; j < Xn.length; j++) {\n const x = Xn[j][i];\n if (x === undefined)\n break;\n const y = Yn[j][i];\n Pn.push(coordinate.map([+x, +y]));\n }\n return Pn;\n });\n return [index, P];\n };\n};\nPolygon.props = {\n defaultShape: 'polygon',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseGeometryChannels({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n ],\n preInference: [...basePreInference()],\n postInference: [...basePostInference(), ...tooltip2d()],\n};\n//# sourceMappingURL=polygon.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { path as d3path } from '@antv/vendor/d3-path';\nimport { applyStyle } from '../utils';\nimport { select } from '../../utils/selection';\nimport { isPolar } from '../../utils/coordinate';\nimport { angle, sub, dist } from '../../utils/vector';\nfunction getPath(points, coordinate) {\n const path = d3path();\n if (!isPolar(coordinate)) {\n path.moveTo(...points[0]);\n path.lineTo(...points[1]);\n path.moveTo(...points[2]);\n path.lineTo(...points[3]);\n path.moveTo(...points[4]);\n path.lineTo(...points[5]);\n path.lineTo(...points[6]);\n path.lineTo(...points[7]);\n path.closePath();\n path.moveTo(...points[8]);\n path.lineTo(...points[9]);\n path.moveTo(...points[10]);\n path.lineTo(...points[11]);\n path.moveTo(...points[12]);\n path.lineTo(...points[13]);\n }\n else {\n // In polar coordinate.\n const center = coordinate.getCenter();\n const [x, y] = center;\n const startAngle = angle(sub(points[0], center));\n const endAngle = angle(sub(points[1], center));\n const radiusHigh = dist(center, points[2]);\n const radiusQ3 = dist(center, points[3]);\n const radiusMedian = dist(center, points[8]);\n const radiusQ1 = dist(center, points[10]);\n const radiusLow = dist(center, points[11]);\n path.moveTo(...points[0]);\n path.arc(x, y, radiusHigh, startAngle, endAngle);\n path.arc(x, y, radiusHigh, endAngle, startAngle, true);\n path.moveTo(...points[2]);\n path.lineTo(...points[3]);\n path.moveTo(...points[4]);\n path.arc(x, y, radiusQ3, startAngle, endAngle); // 4 -> 5\n path.lineTo(...points[6]); // 5 -> 6\n path.arc(x, y, radiusQ1, endAngle, startAngle, true); // 6 -> 7\n path.closePath();\n path.moveTo(...points[8]);\n path.arc(x, y, radiusMedian, startAngle, endAngle); // 8 -> 9\n path.arc(x, y, radiusMedian, endAngle, startAngle, true); // 9 -> 8\n path.moveTo(...points[10]);\n path.lineTo(...points[11]);\n path.moveTo(...points[12]);\n path.arc(x, y, radiusLow, startAngle, endAngle); // 12 -> 13\n path.arc(x, y, radiusLow, endAngle, startAngle, true); // 13 -> 12\n }\n return path;\n}\nexport const Box = (options, context) => {\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color, transform } = value;\n const { color: defaultColor, fill = defaultColor, stroke = defaultColor } = defaults, rest = __rest(defaults, [\"color\", \"fill\", \"stroke\"]);\n const path = getPath(points, coordinate);\n return select(document.createElement('path', {}))\n .call(applyStyle, rest)\n .style('d', path.toString())\n .style('stroke', stroke)\n .style('fill', color || fill)\n .style('transform', transform)\n .call(applyStyle, options)\n .node();\n };\n};\nBox.props = {\n defaultMarker: 'point',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=box.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { path as d3path } from '@antv/vendor/d3-path';\nimport { applyStyle } from '../utils';\nimport { select } from '../../utils/selection';\nimport { isPolar } from '../../utils/coordinate';\nimport { angle, sub, dist } from '../../utils/vector';\nfunction getPath(p, coordinate, size = 4) {\n const path = d3path();\n if (!isPolar(coordinate)) {\n path.moveTo(...p[2]);\n path.lineTo(...p[3]);\n path.lineTo(p[3][0] - size, p[3][1]);\n path.lineTo(p[10][0] - size, p[10][1]);\n path.lineTo(p[10][0] + size, p[10][1]);\n path.lineTo(p[3][0] + size, p[3][1]);\n path.lineTo(...p[3]);\n path.closePath();\n path.moveTo(...p[10]);\n path.lineTo(...p[11]);\n path.moveTo(p[3][0] + size / 2, p[8][1]);\n path.arc(p[3][0], p[8][1], size / 2, 0, Math.PI * 2);\n path.closePath();\n return path;\n }\n const center = coordinate.getCenter();\n const [x, y] = center;\n const radiusQ3 = dist(center, p[3]);\n const radiusMedian = dist(center, p[8]);\n const radiusQ1 = dist(center, p[10]);\n const middleAngle = angle(sub(p[2], center));\n const rectAngle = Math.asin(size / radiusMedian);\n const startAngle = middleAngle - rectAngle;\n const endAngle = middleAngle + rectAngle;\n path.moveTo(...p[2]);\n path.lineTo(...p[3]);\n path.moveTo(Math.cos(startAngle) * radiusQ3 + x, Math.sin(startAngle) * radiusQ3 + y);\n path.arc(x, y, radiusQ3, startAngle, endAngle);\n path.lineTo(Math.cos(endAngle) * radiusQ1 + x, Math.sin(endAngle) * radiusQ1 + y);\n path.arc(x, y, radiusQ1, endAngle, startAngle, true);\n path.lineTo(Math.cos(startAngle) * radiusQ3 + x, Math.sin(startAngle) * radiusQ3 + y);\n path.closePath();\n path.moveTo(...p[10]);\n path.lineTo(...p[11]);\n const a = (startAngle + endAngle) / 2;\n path.moveTo(Math.cos(a) * (radiusMedian + size / 2) + x, Math.sin(a) * (radiusMedian + size / 2) + y);\n path.arc(Math.cos(a) * radiusMedian + x, Math.sin(a) * radiusMedian + y, size / 2, a, Math.PI * 2 + a);\n path.closePath();\n return path;\n}\nexport const Violin = (options, context) => {\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color, transform } = value;\n // TODO: how to setting it by size channel.\n const size = 4;\n const { color: defaultColor, fill = defaultColor, stroke = defaultColor } = defaults, rest = __rest(defaults, [\"color\", \"fill\", \"stroke\"]);\n const path = getPath(points, coordinate, size);\n return select(document.createElement('path', {}))\n .call(applyStyle, rest)\n .style('d', path.toString())\n .style('stroke', stroke)\n .style('fill', color || fill)\n .style('transform', transform)\n .call(applyStyle, options)\n .node();\n };\n};\nViolin.props = {\n defaultMarker: 'point',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=violin.js.map","import { BoxShape, BoxViolin } from '../shape';\nimport { MaybeZeroX } from '../transform';\nimport { baseGeometryChannels, basePostInference, basePreInference, tooltip1d, } from './utils';\nconst shape = {\n box: BoxShape,\n violin: BoxViolin,\n};\n/**\n * Convert value for each channel to box shapes.\n *\n * p0 p2 p1\n * ──────────┬──────────\n * │\n * │\n * │\n * │\n * │\n * │\n * │ p3\n * p4 ┌─────────┴──────────┐ p5\n * │ │\n * │ │\n * p8 ├────────────────────┤ p9\n * │ │\n * │ p10 │\n * p7 └─────────┬──────────┘ p6\n * │\n * │\n * │\n * │\n * │\n * │\n * │\n * │\n * ───────────┴───────────\n * p12 p11 p13\n */\nexport const Box = () => {\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y, y1: Y1, y2: Y2, y3: Y3, y4: Y4, series: S } = value;\n // Calc width for each box.\n // The scales for x and series channels must be band scale.\n const xScale = scale.x;\n const series = scale.series;\n const P = Array.from(index, (i) => {\n const groupWidth = xScale.getBandWidth(xScale.invert(+X[i]));\n const ratio = series ? series.getBandWidth(series.invert(+(S === null || S === void 0 ? void 0 : S[i]))) : 1;\n const width = groupWidth * ratio;\n const offset = (+(S === null || S === void 0 ? void 0 : S[i]) || 0) * groupWidth;\n const x = +X[i] + offset + width / 2;\n const [low, q1, median, q3, high] = [\n +Y[i],\n +Y1[i],\n +Y2[i],\n +Y3[i],\n +Y4[i],\n ];\n const P13 = [\n [x - width / 2, high],\n [x + width / 2, high],\n [x, high],\n [x, q3],\n [x - width / 2, q3],\n [x + width / 2, q3],\n [x + width / 2, q1],\n [x - width / 2, q1],\n [x - width / 2, median],\n [x + width / 2, median],\n [x, q1],\n [x, low],\n [x - width / 2, low],\n [x + width / 2, low],\n ];\n return P13.map((d) => coordinate.map(d));\n });\n return [index, P];\n };\n};\nBox.props = {\n defaultShape: 'box',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseGeometryChannels({ shapes: Object.keys(shape) }),\n { name: 'x', scale: 'band', required: true },\n { name: 'y', required: true },\n { name: 'series', scale: 'band' },\n ],\n preInference: [...basePreInference(), { type: MaybeZeroX }],\n postInference: [...basePostInference(), ...tooltip1d()],\n interaction: {\n shareTooltip: true,\n },\n};\n//# sourceMappingURL=box.js.map","import { VectorShape } from '../shape';\nimport { baseGeometryChannels, basePostInference, basePreInference, tooltip2d, } from './utils';\nconst shape = {\n vector: VectorShape,\n};\n/**\n * Convert value for each channel to start, end.\n * The angle starts from the X axis(right direction).\n */\nexport const Vector = () => {\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y, size: S, rotate: R } = value;\n const [width, height] = coordinate.getSize();\n const P = index.map((i) => {\n const angle = (+R[i] / 180) * Math.PI;\n const s = +S[i];\n const a = s / width;\n const b = s / height;\n const vx = a * Math.cos(angle);\n const vy = -b * Math.sin(angle);\n return [\n coordinate.map([+X[i] - vx / 2, +Y[i] - vy / 2]),\n coordinate.map([+X[i] + vx / 2, +Y[i] + vy / 2]),\n ];\n });\n return [index, P];\n };\n};\nVector.props = {\n defaultShape: 'vector',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseGeometryChannels({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n { name: 'rotate', required: true, scale: 'identity' },\n { name: 'size', required: true },\n ],\n preInference: [...basePreInference()],\n postInference: [...basePostInference(), ...tooltip2d()],\n};\n//# sourceMappingURL=vector.js.map","import { deepMix } from '@antv/util';\nimport { column, columnOf } from './utils/helper';\n/**\n * Add 3 constant encode for size channel.\n * This is useful for point geometry.\n */\nexport const MaybeIdentityX = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { x1 } = encode;\n if (x1)\n return [I, mark];\n const [X] = columnOf(encode, 'x');\n return [I, deepMix({}, mark, { encode: { x1: column([...X]) } })];\n };\n};\nMaybeIdentityX.props = {};\n//# sourceMappingURL=maybeIdentityX.js.map","import { deepMix } from '@antv/util';\nimport { column, columnOf } from './utils/helper';\n/**\n * Add 3 constant encode for size channel.\n * This is useful for point geometry.\n */\nexport const MaybeIdentityY = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { y1 } = encode;\n if (y1)\n return [I, mark];\n const [Y] = columnOf(encode, 'y');\n return [I, deepMix({}, mark, { encode: { y1: column([...Y]) } })];\n };\n};\nMaybeIdentityY.props = {};\n//# sourceMappingURL=maybeIdentityY.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { path as d3path } from '@antv/vendor/d3-path';\nimport { appendArc, applyStyle } from '../utils';\nimport { select } from '../../utils/selection';\nimport { isPolar } from '../../utils/coordinate';\nimport { dist, mid } from '../../utils/vector';\n/**\n * Connect points for 2 points:\n * - In rect, draw half circle.\n * - In polar, draw quadratic curve.\n */\nexport const Arc = (options, context) => {\n const style = __rest(options, []);\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const { color = defaultColor, transform } = value;\n const [from, to] = points;\n const path = d3path();\n path.moveTo(from[0], from[1]);\n if (isPolar(coordinate)) {\n const center = coordinate.getCenter();\n path.quadraticCurveTo(center[0], center[1], to[0], to[1]);\n }\n else {\n const center = mid(from, to);\n const raduis = dist(from, to) / 2;\n appendArc(path, from, to, center, raduis);\n }\n return select(document.createElement('path', {}))\n .call(applyStyle, rest)\n .style('d', path.toString())\n .style('stroke', color)\n .style('transform', transform)\n .call(applyStyle, style)\n .node();\n };\n};\nArc.props = {\n defaultMarker: 'smooth',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=arc.js.map","import { Vector } from '../../shape/vector/vector';\n/**\n * Connect 2 points with a single line with arrow.\n * ----->\n */\nexport const Link = (options, context) => {\n const { arrow = false } = options;\n return (...params) => {\n return Vector(Object.assign(Object.assign({}, options), { arrow }), context)(...params);\n };\n};\nLink.props = {\n defaultMarker: 'line',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=link.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { path as d3path } from '@antv/vendor/d3-path';\nimport { applyStyle } from '../utils';\nimport { select } from '../../utils/selection';\n/**\n * Connect 2 points with a smooth line, used in tree.\n */\nexport const Smooth = (options, context) => {\n const style = __rest(options, []);\n const { document } = context;\n return (points, value, defaults) => {\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const { color = defaultColor, transform } = value;\n const [from, to] = points;\n const path = d3path();\n path.moveTo(from[0], from[1]);\n path.bezierCurveTo(from[0] / 2 + to[0] / 2, from[1], from[0] / 2 + to[0] / 2, to[1], to[0], to[1]);\n return select(document.createElement('path', {}))\n .call(applyStyle, rest)\n .style('d', path.toString())\n .style('stroke', color)\n .style('transform', transform)\n .call(applyStyle, style)\n .node();\n };\n};\nSmooth.props = {\n defaultMarker: 'smooth',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=smooth.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { path as d3path } from '@antv/vendor/d3-path';\nimport { appendArc, applyStyle } from '../utils';\nimport { select } from '../../utils/selection';\nimport { isTranspose, isPolar } from '../../utils/coordinate';\nimport { dist } from '../../utils/vector';\n/**\n * Get vhv path in different coordinate.\n */\nfunction getVHVPath(from, to, coordinate, ratio) {\n const path = d3path();\n if (isPolar(coordinate)) {\n const center = coordinate.getCenter();\n const a = dist(from, center);\n const b = dist(to, center);\n const radius = (b - a) * ratio + a;\n path.moveTo(from[0], from[1]);\n appendArc(path, from, to, center, radius);\n path.lineTo(to[0], to[1]);\n return path;\n }\n if (isTranspose(coordinate)) {\n path.moveTo(from[0], from[1]);\n // VHV in x.\n path.lineTo(from[0] + (to[0] - from[0]) * ratio, from[1]);\n path.lineTo(from[0] + (to[0] - from[0]) * ratio, to[1]);\n path.lineTo(to[0], to[1]);\n return path;\n }\n path.moveTo(from[0], from[1]);\n // VHV in y.\n path.lineTo(from[0], from[1] + (to[1] - from[1]) * ratio);\n path.lineTo(to[0], from[1] + (to[1] - from[1]) * ratio);\n path.lineTo(to[0], to[1]);\n return path;\n}\n/**\n * Connect 2 points with a VHV line, used in tree.\n */\nexport const VHV = (options, context) => {\n const { cornerRatio = 1 / 3 } = options, style = __rest(options, [\"cornerRatio\"]);\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { defaultColor } = defaults, rest = __rest(defaults, [\"defaultColor\"]);\n const { color = defaultColor, transform } = value;\n const [from, to] = points;\n const path = getVHVPath(from, to, coordinate, cornerRatio);\n return select(document.createElement('path', {}))\n .call(applyStyle, rest)\n .style('d', path.toString())\n .style('stroke', color)\n .style('transform', transform)\n .call(applyStyle, style)\n .node();\n };\n};\nVHV.props = {\n defaultMarker: 'vhv',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=vhv.js.map","import { MaybeIdentityX, MaybeIdentityY } from '../transform';\nimport { LinkArc, LinkShape, LinkSmooth, LinkVHV } from '../shape';\nimport { baseGeometryChannels, basePostInference, basePreInference, createBandOffset, tooltip2d, } from './utils';\nconst shape = {\n link: LinkShape,\n arc: LinkArc,\n smooth: LinkSmooth,\n vhv: LinkVHV,\n};\n/**\n * Connect `start` to `end` with single line.\n */\nexport const Link = (options) => {\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y, x1: X1 = X, y1: Y1 = Y } = value;\n const offset = createBandOffset(scale, value, options);\n const P = index.map((i) => [\n coordinate.map(offset([+X[i], +Y[i]], i)),\n coordinate.map(offset([+X1[i], +Y1[i]], i)),\n ]);\n return [index, P];\n };\n};\nLink.props = {\n defaultShape: 'link',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseGeometryChannels({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n ],\n preInference: [\n ...basePreInference(),\n { type: MaybeIdentityY },\n { type: MaybeIdentityX },\n ],\n postInference: [...basePostInference(), ...tooltip2d()],\n};\n//# sourceMappingURL=link.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { arc, line } from '@antv/vendor/d3-shape';\nimport { isPolar } from '../../utils/coordinate';\nimport { select } from '../../utils/selection';\nimport { dist } from '../../utils/vector';\nimport { subObject } from '../../utils/helper';\nimport { applyStyle } from '../utils';\nfunction getArrowMarker(document, arrowSize, arrowStyle) {\n const arrowMarker = document.createElement('path', {\n style: Object.assign({ d: `M ${arrowSize},${arrowSize} L -${arrowSize},0 L ${arrowSize},-${arrowSize} L 0,0 Z`, transformOrigin: 'center' }, arrowStyle),\n });\n return arrowMarker;\n}\nfunction getPath(points, coordinate) {\n if (!isPolar(coordinate))\n return line()\n .x((d) => d[0])\n .y((d) => d[1])(points);\n const center = coordinate.getCenter();\n return arc()({\n startAngle: 0,\n endAngle: Math.PI * 2,\n outerRadius: dist(points[0], center),\n innerRadius: dist(points[1], center),\n });\n}\nfunction getTransform(coordinate, transform) {\n if (!isPolar(coordinate))\n return transform;\n const [cx, cy] = coordinate.getCenter();\n return `translate(${cx}, ${cy}) ${transform || ''}`;\n}\nexport const Line = (options, context) => {\n const { arrow, arrowSize = 4 } = options, style = __rest(options, [\"arrow\", \"arrowSize\"]);\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color: defaultColor, lineWidth } = defaults, shapeTheme = __rest(defaults, [\"color\", \"lineWidth\"]);\n const { color = defaultColor, size = lineWidth } = value;\n const arrowMarker = arrow\n ? getArrowMarker(document, arrowSize, Object.assign({ fill: style.stroke || color, stroke: style.stroke || color }, subObject(style, 'arrow')))\n : null;\n const path = getPath(points, coordinate);\n const transform = getTransform(coordinate, value.transform);\n return select(document.createElement('path', {}))\n .call(applyStyle, shapeTheme)\n .style('d', path)\n .style('stroke', color)\n .style('lineWidth', size)\n .style('transform', transform)\n .style('markerEnd', arrowMarker)\n .call(applyStyle, style)\n .node();\n };\n};\nLine.props = {\n defaultMarker: 'line',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=line.js.map","import { deepMix } from '@antv/util';\nimport { column, isObject } from './utils/helper';\n/**\n * Add 3 constant encode for size channel.\n * This is useful for point geometry.\n */\nexport const MaybeTupleX = () => {\n return (I, mark) => {\n const { data } = mark;\n if (!Array.isArray(data) || data.some(isObject))\n return [I, mark];\n return [I, deepMix({}, mark, { encode: { x: column(data) } })];\n };\n};\nMaybeTupleX.props = {};\n//# sourceMappingURL=maybeTupleX.js.map","import { deepMix } from '@antv/util';\nimport { LineXY } from '../shape';\nimport { MaybeTupleX } from '../transform';\nimport { basePostInference, baseAnnotationChannels, basePreInference, createBandOffset, } from './utils';\nconst shape = {\n line: LineXY,\n};\nexport const LineX = (options) => {\n return (index, scale, value, coordinate) => {\n const { x: X } = value;\n const offset = createBandOffset(scale, value, deepMix({ style: { bandOffset: 0 } }, options));\n const P = Array.from(index, (i) => {\n const p1 = [X[i], 1];\n const p2 = [X[i], 0];\n return [p1, p2].map((d) => coordinate.map(offset(d, i)));\n });\n return [index, P];\n };\n};\nLineX.props = {\n defaultShape: 'line',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseAnnotationChannels({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n ],\n preInference: [...basePreInference(), { type: MaybeTupleX }],\n postInference: [...basePostInference()],\n};\n//# sourceMappingURL=lineX.js.map","import { deepMix } from '@antv/util';\nimport { column, isObject } from './utils/helper';\n/**\n * Add 3 constant encode for size channel.\n * This is useful for point geometry.\n */\nexport const MaybeTupleY = () => {\n return (I, mark) => {\n const { data } = mark;\n if (!Array.isArray(data) || data.some(isObject))\n return [I, mark];\n return [I, deepMix({}, mark, { encode: { y: column(data) } })];\n };\n};\nMaybeTupleY.props = {};\n//# sourceMappingURL=maybeTupleY.js.map","import { deepMix } from '@antv/util';\nimport { LineXY } from '../shape';\nimport { MaybeTupleY } from '../transform';\nimport { baseAnnotationChannels, basePreInference, basePostInference, createBandOffset, } from './utils';\nconst shape = {\n line: LineXY,\n};\nexport const LineY = (options) => {\n return (index, scale, value, coordinate) => {\n const { y: Y } = value;\n const offset = createBandOffset(scale, value, deepMix({ style: { bandOffset: 0 } }, options));\n const P = Array.from(index, (i) => {\n const p1 = [0, Y[i]];\n const p2 = [1, Y[i]];\n return [p1, p2].map((d) => coordinate.map(offset(d, i)));\n });\n return [index, P];\n };\n};\nLineY.props = {\n defaultShape: 'line',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseAnnotationChannels({ shapes: Object.keys(shape) }),\n { name: 'y', required: true },\n ],\n preInference: [...basePreInference(), { type: MaybeTupleY }],\n postInference: [...basePostInference()],\n};\n//# sourceMappingURL=lineY.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Path } from '@antv/g';\nimport { Marker } from '@antv/component';\nimport { line as d3line } from '@antv/vendor/d3-shape';\nimport { isTranspose } from '../../utils/coordinate';\nimport { subObject } from '../../utils/helper';\nimport { select } from '../../utils/selection';\nimport { applyStyle } from '../utils';\nfunction inferSymbol(x, y, r) {\n return [['M', x, y], ['L', x + 2 * r, y - r], ['L', x + 2 * r, y + r], ['Z']];\n}\n/**\n * @todo support polar later.\n */\nfunction inferConnectorPath(points) {\n return d3line()\n .x((d) => d[0])\n .y((d) => d[1])(points);\n}\nfunction getPoints(coordinate, points, sourceOffsetY, targetOffsetY, sourceOffsetX, targetOffsetX, length1 = 0) {\n const [[x0, y0], [x1, y1]] = points;\n if (isTranspose(coordinate)) {\n const X0 = x0 + sourceOffsetY;\n const X1 = x1 + targetOffsetY;\n const X = X0 + length1;\n const Y0 = y0 + sourceOffsetX;\n const Y1 = y1 + targetOffsetX;\n return [\n [X0, Y0],\n [X, Y0],\n [X, Y1],\n [X1, Y1],\n ];\n }\n const Y0 = y0 - sourceOffsetY;\n const Y1 = y1 - targetOffsetY;\n const Y = Y0 - length1;\n const X0 = x0 - sourceOffsetX;\n const X1 = x1 - targetOffsetX;\n return [\n [X0, Y0],\n [X0, Y],\n [X1, Y],\n [X1, Y1],\n ];\n}\nexport const Connector = (options, context) => {\n const { offsetX = 0, sourceOffsetX = offsetX, targetOffsetX = offsetX, offsetY = 0, sourceOffsetY = offsetY, targetOffsetY = offsetY, connectLength1: length1, endMarker = true } = options, style = __rest(options, [\"offsetX\", \"sourceOffsetX\", \"targetOffsetX\", \"offsetY\", \"sourceOffsetY\", \"targetOffsetY\", \"connectLength1\", \"endMarker\"]);\n const { coordinate } = context;\n return (points, value, defaults) => {\n const { color: defaultColor, connectLength1 } = defaults, rest = __rest(defaults, [\"color\", \"connectLength1\"]);\n const { color, transform } = value;\n const P = getPoints(coordinate, points, sourceOffsetY, targetOffsetY, sourceOffsetX, targetOffsetX, length1 !== null && length1 !== void 0 ? length1 : connectLength1);\n const makerStyle = subObject(Object.assign(Object.assign({}, style), defaults), 'endMarker');\n return select(new Path())\n .call(applyStyle, rest)\n .style('d', inferConnectorPath(P))\n .style('stroke', color || defaultColor)\n .style('transform', transform)\n .style('markerEnd', endMarker\n ? new Marker({\n className: 'marker',\n style: Object.assign(Object.assign({}, makerStyle), { symbol: inferSymbol }),\n })\n : null)\n .call(applyStyle, style)\n .node();\n };\n};\nConnector.props = {\n defaultMarker: 'line',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=connector.js.map","import { ConnectorShape } from '../shape';\nimport { baseAnnotationChannels, basePostInference, basePreInference, } from './utils';\nimport { Link } from './link';\nconst shape = {\n connector: ConnectorShape,\n};\nexport const Connector = (...args) => {\n return Link(...args);\n};\nConnector.props = {\n defaultShape: 'connector',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseAnnotationChannels({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n ],\n preInference: [...basePreInference()],\n postInference: [...basePostInference()],\n};\n//# sourceMappingURL=connector.js.map","import { RangeShape } from '../shape';\nimport { baseAnnotationChannels, basePostInference, basePreInference, } from './utils';\nfunction extend(channel, extended, value, scale) {\n if (extended)\n return () => [0, 1];\n const { [channel]: C, [`${channel}1`]: C1 } = value;\n return (i) => {\n var _a;\n const offset = ((_a = scale.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(scale, scale.invert(+C1[i]))) || 0;\n return [C[i], C1[i] + offset];\n };\n}\nexport function AbstractRange(options = {}) {\n const { extendX = false, extendY = false } = options;\n return (index, scale, value, coordinate) => {\n const x = extend('x', extendX, value, scale.x);\n const y = extend('y', extendY, value, scale.y);\n const P = Array.from(index, (i) => {\n const [x1, x2] = x(i);\n const [y1, y2] = y(i);\n const p1 = [x1, y1];\n const p2 = [x2, y1];\n const p3 = [x2, y2];\n const p4 = [x1, y2];\n return [p1, p2, p3, p4].map((d) => coordinate.map(d));\n });\n return [index, P];\n };\n}\nconst shape = { range: RangeShape };\nexport const Range = () => {\n return AbstractRange();\n};\nRange.props = {\n defaultShape: 'range',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseAnnotationChannels({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n ],\n preInference: [...basePreInference()],\n postInference: [...basePostInference()],\n};\n//# sourceMappingURL=range.js.map","import { deepMix } from '@antv/util';\nimport { column, isObject } from './utils/helper';\n/**\n * Add a default encode for rangeX\n * when data is just an array\n */\nexport const MaybeDefaultX = () => {\n return (I, mark) => {\n const { data } = mark;\n if (Array.isArray(data) &&\n (data.every(Array.isArray) || !data.some(isObject))) {\n const extractX = (data, index) => Array.isArray(data[0])\n ? data.map((item) => item[index])\n : [data[index]];\n return [\n I,\n deepMix({}, mark, {\n encode: {\n x: column(extractX(data, 0)),\n x1: column(extractX(data, 1)),\n },\n }),\n ];\n }\n return [I, mark];\n };\n};\nMaybeDefaultX.props = {};\n//# sourceMappingURL=maybeDefaultX.js.map","import { RangeShape } from '../shape';\nimport { MaybeDefaultX } from '../transform';\nimport { baseAnnotationChannels, basePostInference, basePreInference, } from './utils';\nimport { AbstractRange } from './range';\nconst shape = {\n range: RangeShape,\n};\nexport const RangeX = () => {\n return AbstractRange({ extendY: true });\n};\nRangeX.props = {\n defaultShape: 'range',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseAnnotationChannels({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n ],\n preInference: [...basePreInference(), { type: MaybeDefaultX }],\n postInference: [...basePostInference()],\n};\n//# sourceMappingURL=rangeX.js.map","import { deepMix } from '@antv/util';\nimport { column, isObject } from './utils/helper';\n/**\n * Add a default encode for rangeY\n * when data is just an array\n */\nexport const MaybeDefaultY = () => {\n return (I, mark) => {\n const { data } = mark;\n if (Array.isArray(data) &&\n (data.every(Array.isArray) || !data.some(isObject))) {\n const extractY = (data, index) => Array.isArray(data[0])\n ? data.map((item) => item[index])\n : [data[index]];\n return [\n I,\n deepMix({}, mark, {\n encode: {\n y: column(extractY(data, 0)),\n y1: column(extractY(data, 1)),\n },\n }),\n ];\n }\n return [I, mark];\n };\n};\nMaybeDefaultY.props = {};\n//# sourceMappingURL=maybeDefaultY.js.map","import { RangeShape } from '../shape';\nimport { MaybeDefaultY } from '../transform';\nimport { baseAnnotationChannels, basePostInference, basePreInference, } from './utils';\nimport { AbstractRange } from './range';\nconst shape = {\n range: RangeShape,\n};\nexport const RangeY = () => {\n return AbstractRange({ extendX: true });\n};\nRangeY.props = {\n defaultShape: 'range',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseAnnotationChannels({ shapes: Object.keys(shape) }),\n { name: 'y', required: true },\n ],\n preInference: [...basePreInference(), { type: MaybeDefaultY }],\n postInference: [...basePostInference()],\n};\n//# sourceMappingURL=rangeY.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { applyStyle } from '../utils';\nimport { select } from '../../utils/selection';\n/**\n * Draw a filled or hollow path.\n */\nexport const Color = (options, context) => {\n const { arrow, colorAttribute } = options, style = __rest(options, [\"arrow\", \"colorAttribute\"]);\n const { coordinate, document } = context;\n return (points, value, defaults) => {\n const { color: defaultColor, stroke } = defaults, rest = __rest(defaults, [\"color\", \"stroke\"]);\n const { d, color = defaultColor } = value;\n const [width, height] = coordinate.getSize();\n return (select(document.createElement('path', {}))\n .call(applyStyle, rest)\n // Path support string, function with parameter { width, height }.\n .style('d', typeof d === 'function' ? d({ width, height }) : d)\n .style(colorAttribute, color)\n .call(applyStyle, style)\n .node());\n };\n};\nColor.props = {\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=color.js.map","import { Color } from './color';\n/**\n * A filled path.\n */\nexport const Path = (options, context) => {\n return Color(Object.assign({ colorAttribute: 'fill' }, options), context);\n};\nPath.props = {\n defaultMarker: 'hvh',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=path.js.map","import { Color } from './color';\n/**\n * A hollow path.\n */\nexport const Hollow = (options, context) => {\n return Color(Object.assign({ fill: 'none', colorAttribute: 'stroke' }, options), context);\n};\nHollow.props = {\n defaultMarker: 'hvh',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=hollow.js.map","import { PathShape, PathHollow } from '../shape';\nimport { baseGeometryChannels, basePostInference, basePreInference, } from './utils';\nconst shape = {\n path: PathShape,\n hollow: PathHollow,\n};\n/**\n * Draw a path.\n */\nexport const Path = (options) => {\n return (index, scale, value, coordinate) => {\n // The points is meaning less for path mark,\n // because the position of path shapes specified\n // by the d option. So set [0, 0] for render pipeline.\n return [index, index.map(() => [[0, 0]])];\n };\n};\nPath.props = {\n defaultShape: 'path',\n defaultLabelShape: 'label',\n shape,\n composite: false,\n channels: [\n ...baseGeometryChannels({ shapes: Object.keys(shape) }),\n { name: 'd', scale: 'identity' },\n ],\n preInference: [...basePreInference()],\n postInference: [...basePostInference()],\n};\n//# sourceMappingURL=path.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/**\n * Draw a custom shape.\n */\nexport const Shape = (options, context) => {\n const { render } = options, rest = __rest(options, [\"render\"]);\n return (points) => {\n const [[x0, y0]] = points;\n return render(Object.assign(Object.assign({}, rest), { x: x0, y: y0 }), context);\n };\n};\nShape.props = {\n defaultMarker: 'point',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=shape.js.map","import { deepMix } from '@antv/util';\n/**\n * Mark functional attribute constant.\n */\nexport const MaybeFunctionAttribute = () => {\n return (I, mark) => {\n const { style = {} } = mark;\n return [\n I,\n deepMix({}, mark, {\n style: Object.assign(Object.assign({}, style), Object.fromEntries(Object.entries(style)\n .filter(([, v]) => typeof v === 'function')\n .map(([k, v]) => [k, () => v]))),\n }),\n ];\n };\n};\nMaybeFunctionAttribute.props = {};\n//# sourceMappingURL=maybeFunctionAttribute.js.map","import { ShapeShape } from '../shape';\nimport { MaybeTuple, MaybeVisualPosition, MaybeFunctionAttribute, } from '../transform';\nimport { basePreInference, createBandOffset, visualMark } from './utils';\nconst shape = {\n shape: ShapeShape,\n};\n/**\n * @todo Unify with text, image and point.\n */\nexport const Shape = (options) => {\n const { cartesian } = options;\n if (cartesian)\n return visualMark;\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y } = value;\n const offset = createBandOffset(scale, value, options);\n const P = Array.from(index, (i) => {\n const p = [+X[i], +Y[i]];\n return [coordinate.map(offset(p, i))];\n });\n return [index, P];\n };\n};\nShape.props = {\n defaultShape: 'shape',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n { name: 'x', required: true },\n { name: 'y', required: true },\n ],\n preInference: [\n ...basePreInference(),\n { type: MaybeTuple },\n { type: MaybeVisualPosition },\n { type: MaybeFunctionAttribute },\n ],\n};\n//# sourceMappingURL=shape.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { path as d3path } from '@antv/vendor/d3-path';\nimport { applyStyle } from '../utils';\nimport { select } from '../../utils/selection';\n/**\n * Draw density shape.\n */\nexport const Density = (options, context) => {\n const { document } = context;\n return (points, value, defaults) => {\n const { transform } = value;\n const { color: defaultColor } = defaults, rest = __rest(defaults, [\"color\"]);\n const { color = defaultColor } = value;\n const [first, ...p] = points;\n // todo smooth, hollow\n const path = d3path();\n path.moveTo(...first);\n p.forEach(([x, y]) => {\n path.lineTo(x, y);\n });\n path.closePath();\n return select(document.createElement('path', {}))\n .call(applyStyle, rest)\n .style('d', path.toString())\n .style('stroke', color || defaultColor) // Always has stroke color.\n .style('fill', color || defaultColor)\n .style('fillOpacity', 0.4)\n .style('transform', transform)\n .call(applyStyle, options)\n .node();\n };\n};\nDensity.props = {\n defaultMarker: 'square',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=density.js.map","import { DensityShape } from '../shape';\nimport { MaybeZeroY1, MaybeZeroX } from '../transform';\nimport { baseGeometryChannels, basePostInference, basePreInference, tooltip1d, } from './utils';\nconst shape = {\n density: DensityShape,\n};\nexport const Density = () => {\n return (index, scale, value, coordinate) => {\n const { x: X, series: S } = value;\n const Yn = Object.entries(value)\n .filter(([key]) => key.startsWith('y'))\n .map(([, value]) => value);\n const SZn = Object.entries(value)\n .filter(([key]) => key.startsWith('size'))\n .map(([, value]) => value);\n // Because x and y channel is not strictly required in Line.props,\n // it should throw error with empty x or y channels.\n if (X === undefined || Yn === undefined || SZn === undefined) {\n throw new Error('Missing encode for x or y or size channel.');\n }\n // Calc width for each box.\n // The scales for x and series channels must be band scale.\n const xScale = scale.x;\n const series = scale.series;\n const P = Array.from(index, (i) => {\n const groupWidth = xScale.getBandWidth(xScale.invert(+X[i]));\n const ratio = series ? series.getBandWidth(series.invert(+(S === null || S === void 0 ? void 0 : S[i]))) : 1;\n const width = groupWidth * ratio;\n const offset = (+(S === null || S === void 0 ? void 0 : S[i]) || 0) * groupWidth;\n const x = +X[i] + offset + width / 2;\n const PN = [\n ...Yn.map((_, idx) => [x + +SZn[idx][i] / index.length, +Yn[idx][i]]),\n ...Yn.map((_, idx) => [\n x - +SZn[idx][i] / index.length,\n +Yn[idx][i],\n ]).reverse(), // left\n ];\n return PN.map((p) => coordinate.map(p));\n });\n return [index, P];\n };\n};\nDensity.props = {\n defaultShape: 'density',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseGeometryChannels({ shapes: Object.keys(shape) }),\n { name: 'x', scale: 'band', required: true },\n { name: 'y', required: true },\n { name: 'size', required: true },\n { name: 'series', scale: 'band' },\n { name: 'size', required: true, scale: 'identity' },\n ],\n preInference: [\n ...basePreInference(),\n { type: MaybeZeroY1 },\n { type: MaybeZeroX },\n ],\n postInference: [...basePostInference(), ...tooltip1d()],\n interaction: { shareTooltip: true },\n};\n//# sourceMappingURL=density.js.map","import { lru } from '../../../utils/lru';\nimport { parseGradient } from './gradient';\nfunction newCanvas(createCanvas, width, height) {\n const c = createCanvas ? createCanvas() : document.createElement('canvas');\n c.width = width;\n c.height = height;\n return c;\n}\n/**\n * Get a point with template.\n * @param radius\n * @param blurFactor\n * @returns\n */\nconst getPointTemplate = lru((radius, blurFactor, createCanvas) => {\n const tplCanvas = newCanvas(createCanvas, radius * 2, radius * 2);\n const tplCtx = tplCanvas.getContext('2d');\n const x = radius;\n const y = radius;\n if (blurFactor === 1) {\n tplCtx.beginPath();\n tplCtx.arc(x, y, radius, 0, 2 * Math.PI, false);\n tplCtx.fillStyle = 'rgba(0,0,0,1)';\n tplCtx.fill();\n }\n else {\n const gradient = tplCtx.createRadialGradient(x, y, radius * blurFactor, x, y, radius);\n gradient.addColorStop(0, 'rgba(0,0,0,1)');\n gradient.addColorStop(1, 'rgba(0,0,0,0)');\n tplCtx.fillStyle = gradient;\n tplCtx.fillRect(0, 0, 2 * radius, 2 * radius);\n }\n return tplCanvas;\n}, (radius) => `${radius}`);\n/**\n * Get a color palette with len = 256 base on gradient.\n * @param gradientConfig\n * @returns\n */\nfunction getColorPalette(gradientConfig, createCanvas) {\n const paletteCanvas = newCanvas(createCanvas, 256, 1);\n const paletteCtx = paletteCanvas.getContext('2d');\n const gradient = paletteCtx.createLinearGradient(0, 0, 256, 1);\n parseGradient(gradientConfig).forEach(([r, c]) => {\n gradient.addColorStop(r, c);\n });\n paletteCtx.fillStyle = gradient;\n paletteCtx.fillRect(0, 0, 256, 1);\n return paletteCtx.getImageData(0, 0, 256, 1).data;\n}\n/**\n * Draw all circle with alpha.\n */\nfunction drawAlpha(shadowCtx, min, max, data, options, createCanvas) {\n const { blur } = options;\n let len = data.length;\n while (len--) {\n const { x, y, value: v, radius } = data[len];\n // Ff value is bigger than max, use max as value.\n const value = Math.min(v, max);\n const rectX = x - radius;\n const rectY = y - radius;\n const tpl = getPointTemplate(radius, 1 - blur, createCanvas);\n // Value from minimum / value range, => [0, 1].\n const templateAlpha = (value - min) / (max - min);\n // Small values are not visible because globalAlpha < .001 cannot be read from imageData.\n shadowCtx.globalAlpha = Math.max(templateAlpha, 0.001);\n shadowCtx.drawImage(tpl, rectX, rectY);\n }\n return shadowCtx;\n}\nfunction colorize(shadowCtx, maxWidth, maxHeight, palette, options) {\n const { minOpacity, opacity, maxOpacity, useGradientOpacity } = options;\n const x = 0;\n const y = 0;\n const width = maxWidth;\n const height = maxHeight;\n const img = shadowCtx.getImageData(x, y, width, height);\n const imgData = img.data;\n const len = imgData.length;\n for (let i = 3; i < len; i += 4) {\n const alpha = imgData[i];\n const offset = alpha * 4;\n if (!offset) {\n continue;\n }\n // Should be in [min, max], min >= 0.\n const finalAlpha = opacity || Math.max(0, Math.min(maxOpacity, Math.max(minOpacity, alpha)));\n // Update rgba.\n imgData[i - 3] = palette[offset];\n imgData[i - 2] = palette[offset + 1];\n imgData[i - 1] = palette[offset + 2];\n imgData[i] = useGradientOpacity ? palette[offset + 3] : finalAlpha;\n }\n return img;\n}\n/**\n * Render a heatmap with canvas.\n * See [heatmap.js](https://github.com/pa7/heatmap.js/blob/master/src/renderer/canvas2d.js).\n */\nexport function HeatmapRenderer(width, height, min, max, data, options, createCanvas) {\n const opts = Object.assign({ blur: 0.85, minOpacity: 0, opacity: 0.6, maxOpacity: 1, gradient: [\n [0.25, 'rgb(0,0,255)'],\n [0.55, 'rgb(0,255,0)'],\n [0.85, 'yellow'],\n [1.0, 'rgb(255,0,0)'],\n ] }, options);\n opts.minOpacity *= 255;\n opts.opacity *= 255;\n opts.maxOpacity *= 255;\n const shadowCanvas = newCanvas(createCanvas, width, height);\n const shadowCtx = shadowCanvas.getContext('2d');\n const palette = getColorPalette(opts.gradient, createCanvas);\n shadowCtx.clearRect(0, 0, width, height);\n drawAlpha(shadowCtx, min, max, data, opts, createCanvas);\n const img = colorize(shadowCtx, width, height, palette, opts);\n const canvas = newCanvas(createCanvas, width, height);\n const ctx = canvas.getContext('2d');\n ctx.putImageData(img, 0, 0);\n return ctx;\n}\n//# sourceMappingURL=index.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { max as d3max, min as d3min } from '@antv/vendor/d3-array';\nimport { applyStyle } from '../utils';\nimport { select } from '../../utils/selection';\nimport { HeatmapRenderer } from './renderer';\nfunction deleteKey(obj, fn) {\n return Object.keys(obj).reduce((r, k) => {\n const v = obj[k];\n if (!fn(v, k))\n r[k] = v;\n return r;\n }, {});\n}\nexport const Heatmap = (options, context) => {\n const { gradient, opacity, maxOpacity, minOpacity, blur, useGradientOpacity } = options, style = __rest(options, [\"gradient\", \"opacity\", \"maxOpacity\", \"minOpacity\", \"blur\", \"useGradientOpacity\"]);\n const { coordinate, createCanvas, document } = context;\n return (points, value, defaults) => {\n const { transform } = value;\n const [width, height] = coordinate.getSize();\n const data = points.map((p) => ({\n x: p[0],\n y: p[1],\n value: p[2],\n radius: p[3],\n }));\n const min = d3min(points, (p) => p[2]);\n const max = d3max(points, (p) => p[2]);\n const options = {\n gradient,\n opacity,\n minOpacity,\n maxOpacity,\n blur,\n useGradientOpacity,\n };\n const ctx = width && height\n ? HeatmapRenderer(width, height, min, max, data, deleteKey(options, (v) => v === undefined), createCanvas)\n : { canvas: null };\n return select(document.createElement('image', {}))\n .call(applyStyle, defaults)\n .style('x', 0)\n .style('y', 0)\n .style('width', width)\n .style('height', height)\n .style('src', ctx.canvas.toDataURL())\n .style('transform', transform)\n .call(applyStyle, style)\n .node();\n };\n};\nHeatmap.props = {\n defaultMarker: 'point',\n defaultEnterAnimation: 'fadeIn',\n defaultUpdateAnimation: 'morphing',\n defaultExitAnimation: 'fadeOut',\n};\n//# sourceMappingURL=heatmap.js.map","/**\n * Parse heatmap gradient.\n */\nexport function parseGradient(gradient) {\n if (typeof gradient === 'string') {\n return gradient.split(' ').map((stop) => {\n const [r, c] = stop.split(':');\n return [+r, c];\n });\n }\n return gradient;\n}\n//# sourceMappingURL=gradient.js.map","import { HeatmapShape } from '../shape';\nimport { MaybeZeroX, MaybeZeroY } from '../transform';\nimport { baseGeometryChannels, basePostInference, basePreInference, tooltip2d, } from './utils';\nconst shape = {\n heatmap: HeatmapShape,\n};\n/**\n * Draw heatmap with gradient.\n */\nexport const Heatmap = (options) => {\n return (index, scale, value, coordinate) => {\n const { x: X, y: Y, size: S, color: C } = value;\n const P = Array.from(index, (i) => {\n // Default size = 40.\n const r = S ? +S[i] : 40;\n // Warning: x, y, value, radius.\n return [...coordinate.map([+X[i], +Y[i]]), C[i], r];\n });\n return [[0], [P]];\n };\n};\nHeatmap.props = {\n defaultShape: 'heatmap',\n defaultLabelShape: 'label',\n composite: false,\n shape,\n channels: [\n ...baseGeometryChannels({ shapes: Object.keys(shape) }),\n { name: 'x', required: true },\n { name: 'y', required: true },\n { name: 'color', scale: 'identity', required: true },\n { name: 'size' },\n ],\n preInference: [\n ...basePreInference(),\n { type: MaybeZeroX },\n { type: MaybeZeroY },\n ],\n postInference: [...basePostInference(), ...tooltip2d()],\n};\n//# sourceMappingURL=heatmap.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix } from '@antv/util';\nfunction initializeData(data, encode) {\n const { text = 'text', value = 'value' } = encode;\n return data.map((d) => (Object.assign(Object.assign({}, d), { text: d[text], value: d[value] })));\n}\nconst GET_DEFAULT_OPTIONS = () => ({\n axis: false,\n type: 'text',\n encode: {\n x: 'x',\n y: 'y',\n text: 'text',\n rotate: 'rotate',\n fontSize: 'size',\n shape: 'tag',\n },\n scale: {\n x: { range: [0, 1] },\n y: { range: [0, 1] },\n },\n style: {\n fontFamily: (d) => d.fontFamily,\n },\n tooltip: {\n items: [\n (datum) => ({\n name: datum.text,\n value: datum.value,\n }),\n ],\n },\n});\nexport const WordCloud = (options, context) => __awaiter(void 0, void 0, void 0, function* () {\n const { width, height } = context;\n const { data, encode = {}, scale, style = {}, layout = {} } = options, resOptions = __rest(options, [\"data\", \"encode\", \"scale\", \"style\", \"layout\"]);\n const initializedData = initializeData(data, encode);\n return deepMix({}, GET_DEFAULT_OPTIONS(), Object.assign(Object.assign({ data: {\n value: initializedData,\n transform: [\n Object.assign({ type: 'wordCloud', size: [width, height] }, layout),\n ],\n }, encode,\n scale,\n style }, resOptions), { axis: false }));\n});\nWordCloud.props = {};\n//# sourceMappingURL=wordCloud.js.map","/**\n * Classic palette of AntV for ordinal data with 10 colors.\n */\nexport const Category10 = () => {\n return [\n '#5B8FF9',\n '#5AD8A6',\n '#5D7092',\n '#F6BD16',\n '#6F5EF9',\n '#6DC8EC',\n '#945FB9',\n '#FF9845',\n '#1E9493',\n '#FF99C3',\n ];\n};\nCategory10.props = {};\n//# sourceMappingURL=category10.js.map","/**\n * Classic palette of AntV for ordinal data with 20 colors.\n */\nexport const Category20 = () => {\n return [\n '#5B8FF9',\n '#CDDDFD',\n '#5AD8A6',\n '#CDF3E4',\n '#5D7092',\n '#CED4DE',\n '#F6BD16',\n '#FCEBB9',\n '#6F5EF9',\n '#D3CEFD',\n '#6DC8EC',\n '#D3EEF9',\n '#945FB9',\n '#DECFEA',\n '#FF9845',\n '#FFE0C7',\n '#1E9493',\n '#BBDEDE',\n '#FF99C3',\n '#FFE0ED',\n ];\n};\nCategory20.props = {};\n//# sourceMappingURL=category20.js.map","import { Linear as LinearScale } from '@antv/scale';\nexport const Linear = (options) => {\n return new LinearScale(options);\n};\nLinear.props = {};\n//# sourceMappingURL=linear.js.map","import { Ordinal as OrdinalScale } from '@antv/scale';\nexport const Ordinal = (options) => {\n return new OrdinalScale(options);\n};\nOrdinal.props = {};\n//# sourceMappingURL=ordinal.js.map","import { Band as BandScale } from '@antv/scale';\nexport const Band = (options) => {\n return new BandScale(options);\n};\nBand.props = {};\n//# sourceMappingURL=band.js.map","import { isNumber } from '@antv/util';\nimport { Base } from './base';\nimport { wilkinsonExtended } from '../tick-methods/wilkinson-extended';\nimport { isValid } from '../utils';\nexport class Identity extends Base {\n /**\n * 返回需要覆盖的默认选项\n * @returns 需要覆盖的默认选项\n */\n getDefaultOptions() {\n return {\n domain: [0, 1],\n range: [0, 1],\n tickCount: 5,\n unknown: undefined,\n tickMethod: wilkinsonExtended,\n };\n }\n /**\n * 输入和输出满足:y = x\n * @param x 输入值\n * @returns 输出值\n */\n map(x) {\n return isValid(x) ? x : this.options.unknown;\n }\n /**\n * map 的逆运算:x = y,在这里和 map 是相同方法\n * @param x 输出值\n * @returns 输入值\n */\n invert(x) {\n return this.map(x);\n }\n /**\n * 克隆 Identity Scale\n * @returns 拥有相同选项且独立的 Identity Scale\n */\n clone() {\n return new Identity(this.options);\n }\n /**\n * 根据比例尺的配置去生成 ticks,该 ticks 主要用于生成坐标轴\n * @returns 返回一个 ticks 的数组\n */\n getTicks() {\n const { domain, tickCount, tickMethod } = this.options;\n const [min, max] = domain;\n if (!isNumber(min) || !isNumber(max))\n return [];\n return tickMethod(min, max, tickCount);\n }\n}\n//# sourceMappingURL=identity.js.map","import { Identity as IdentityScale } from '@antv/scale';\nexport const Identity = (options) => {\n return new IdentityScale(options);\n};\nIdentity.props = {};\n//# sourceMappingURL=identity.js.map","import { Band } from './band';\nimport { defaultUnknown } from './ordinal';\n/**\n * Point 比例尺\n *\n * 一种特殊的 band scale,它的 bandWidth 恒为 0。\n *\n * 由于部分选项较为抽象,见下图描述:\n *\n * PO = Padding = PaddingInner\n * domain = [\"A\", \"B\", \"C\"]\n *\n * |<------------------------------------------- range ------------------------------------------->|\n * | | | | |\n * |<--step*PO-->|<--------------step------------->|<--------------step------------->|<--step*PO-->|\n * | | | | |\n * | A B C |\n * |-----------------------------------------------------------------------------------------------|\n *\n * 性能方便较 d3 快出 8 - 9 倍\n */\nexport class Point extends Band {\n // 覆盖默认配置\n getDefaultOptions() {\n return {\n domain: [],\n range: [0, 1],\n align: 0.5,\n round: false,\n padding: 0,\n unknown: defaultUnknown,\n paddingInner: 1,\n paddingOuter: 0,\n };\n }\n // 能接受的参数只是 PointOptions,不能有 paddingInner 这些属性\n constructor(options) {\n super(options);\n }\n // Point 的 paddingInner 只能是1,不能被覆盖\n getPaddingInner() {\n return 1;\n }\n clone() {\n return new Point(this.options);\n }\n update(options) {\n super.update(options);\n }\n getPaddingOuter() {\n return this.options.padding;\n }\n}\n//# sourceMappingURL=point.js.map","import { Point as PointScale } from '@antv/scale';\nexport const Point = (options) => {\n return new PointScale(options);\n};\nPoint.props = {};\n//# sourceMappingURL=point.js.map","var token = /d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|Z|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g;\nvar twoDigitsOptional = \"\\\\d\\\\d?\";\nvar twoDigits = \"\\\\d\\\\d\";\nvar threeDigits = \"\\\\d{3}\";\nvar fourDigits = \"\\\\d{4}\";\nvar word = \"[^\\\\s]+\";\nvar literal = /\\[([^]*?)\\]/gm;\nfunction shorten(arr, sLen) {\n var newArr = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n newArr.push(arr[i].substr(0, sLen));\n }\n return newArr;\n}\nvar monthUpdate = function (arrName) { return function (v, i18n) {\n var lowerCaseArr = i18n[arrName].map(function (v) { return v.toLowerCase(); });\n var index = lowerCaseArr.indexOf(v.toLowerCase());\n if (index > -1) {\n return index;\n }\n return null;\n}; };\nfunction assign(origObj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n var obj = args_1[_a];\n for (var key in obj) {\n // @ts-ignore ex\n origObj[key] = obj[key];\n }\n }\n return origObj;\n}\nvar dayNames = [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\"\n];\nvar monthNames = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n];\nvar monthNamesShort = shorten(monthNames, 3);\nvar dayNamesShort = shorten(dayNames, 3);\nvar defaultI18n = {\n dayNamesShort: dayNamesShort,\n dayNames: dayNames,\n monthNamesShort: monthNamesShort,\n monthNames: monthNames,\n amPm: [\"am\", \"pm\"],\n DoFn: function (dayOfMonth) {\n return (dayOfMonth +\n [\"th\", \"st\", \"nd\", \"rd\"][dayOfMonth % 10 > 3\n ? 0\n : ((dayOfMonth - (dayOfMonth % 10) !== 10 ? 1 : 0) * dayOfMonth) % 10]);\n }\n};\nvar globalI18n = assign({}, defaultI18n);\nvar setGlobalDateI18n = function (i18n) {\n return (globalI18n = assign(globalI18n, i18n));\n};\nvar regexEscape = function (str) {\n return str.replace(/[|\\\\{()[^$+*?.-]/g, \"\\\\$&\");\n};\nvar pad = function (val, len) {\n if (len === void 0) { len = 2; }\n val = String(val);\n while (val.length < len) {\n val = \"0\" + val;\n }\n return val;\n};\nvar formatFlags = {\n D: function (dateObj) { return String(dateObj.getDate()); },\n DD: function (dateObj) { return pad(dateObj.getDate()); },\n Do: function (dateObj, i18n) {\n return i18n.DoFn(dateObj.getDate());\n },\n d: function (dateObj) { return String(dateObj.getDay()); },\n dd: function (dateObj) { return pad(dateObj.getDay()); },\n ddd: function (dateObj, i18n) {\n return i18n.dayNamesShort[dateObj.getDay()];\n },\n dddd: function (dateObj, i18n) {\n return i18n.dayNames[dateObj.getDay()];\n },\n M: function (dateObj) { return String(dateObj.getMonth() + 1); },\n MM: function (dateObj) { return pad(dateObj.getMonth() + 1); },\n MMM: function (dateObj, i18n) {\n return i18n.monthNamesShort[dateObj.getMonth()];\n },\n MMMM: function (dateObj, i18n) {\n return i18n.monthNames[dateObj.getMonth()];\n },\n YY: function (dateObj) {\n return pad(String(dateObj.getFullYear()), 4).substr(2);\n },\n YYYY: function (dateObj) { return pad(dateObj.getFullYear(), 4); },\n h: function (dateObj) { return String(dateObj.getHours() % 12 || 12); },\n hh: function (dateObj) { return pad(dateObj.getHours() % 12 || 12); },\n H: function (dateObj) { return String(dateObj.getHours()); },\n HH: function (dateObj) { return pad(dateObj.getHours()); },\n m: function (dateObj) { return String(dateObj.getMinutes()); },\n mm: function (dateObj) { return pad(dateObj.getMinutes()); },\n s: function (dateObj) { return String(dateObj.getSeconds()); },\n ss: function (dateObj) { return pad(dateObj.getSeconds()); },\n S: function (dateObj) {\n return String(Math.round(dateObj.getMilliseconds() / 100));\n },\n SS: function (dateObj) {\n return pad(Math.round(dateObj.getMilliseconds() / 10), 2);\n },\n SSS: function (dateObj) { return pad(dateObj.getMilliseconds(), 3); },\n a: function (dateObj, i18n) {\n return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1];\n },\n A: function (dateObj, i18n) {\n return dateObj.getHours() < 12\n ? i18n.amPm[0].toUpperCase()\n : i18n.amPm[1].toUpperCase();\n },\n ZZ: function (dateObj) {\n var offset = dateObj.getTimezoneOffset();\n return ((offset > 0 ? \"-\" : \"+\") +\n pad(Math.floor(Math.abs(offset) / 60) * 100 + (Math.abs(offset) % 60), 4));\n },\n Z: function (dateObj) {\n var offset = dateObj.getTimezoneOffset();\n return ((offset > 0 ? \"-\" : \"+\") +\n pad(Math.floor(Math.abs(offset) / 60), 2) +\n \":\" +\n pad(Math.abs(offset) % 60, 2));\n }\n};\nvar monthParse = function (v) { return +v - 1; };\nvar emptyDigits = [null, twoDigitsOptional];\nvar emptyWord = [null, word];\nvar amPm = [\n \"isPm\",\n word,\n function (v, i18n) {\n var val = v.toLowerCase();\n if (val === i18n.amPm[0]) {\n return 0;\n }\n else if (val === i18n.amPm[1]) {\n return 1;\n }\n return null;\n }\n];\nvar timezoneOffset = [\n \"timezoneOffset\",\n \"[^\\\\s]*?[\\\\+\\\\-]\\\\d\\\\d:?\\\\d\\\\d|[^\\\\s]*?Z?\",\n function (v) {\n var parts = (v + \"\").match(/([+-]|\\d\\d)/gi);\n if (parts) {\n var minutes = +parts[1] * 60 + parseInt(parts[2], 10);\n return parts[0] === \"+\" ? minutes : -minutes;\n }\n return 0;\n }\n];\nvar parseFlags = {\n D: [\"day\", twoDigitsOptional],\n DD: [\"day\", twoDigits],\n Do: [\"day\", twoDigitsOptional + word, function (v) { return parseInt(v, 10); }],\n M: [\"month\", twoDigitsOptional, monthParse],\n MM: [\"month\", twoDigits, monthParse],\n YY: [\n \"year\",\n twoDigits,\n function (v) {\n var now = new Date();\n var cent = +(\"\" + now.getFullYear()).substr(0, 2);\n return +(\"\" + (+v > 68 ? cent - 1 : cent) + v);\n }\n ],\n h: [\"hour\", twoDigitsOptional, undefined, \"isPm\"],\n hh: [\"hour\", twoDigits, undefined, \"isPm\"],\n H: [\"hour\", twoDigitsOptional],\n HH: [\"hour\", twoDigits],\n m: [\"minute\", twoDigitsOptional],\n mm: [\"minute\", twoDigits],\n s: [\"second\", twoDigitsOptional],\n ss: [\"second\", twoDigits],\n YYYY: [\"year\", fourDigits],\n S: [\"millisecond\", \"\\\\d\", function (v) { return +v * 100; }],\n SS: [\"millisecond\", twoDigits, function (v) { return +v * 10; }],\n SSS: [\"millisecond\", threeDigits],\n d: emptyDigits,\n dd: emptyDigits,\n ddd: emptyWord,\n dddd: emptyWord,\n MMM: [\"month\", word, monthUpdate(\"monthNamesShort\")],\n MMMM: [\"month\", word, monthUpdate(\"monthNames\")],\n a: amPm,\n A: amPm,\n ZZ: timezoneOffset,\n Z: timezoneOffset\n};\n// Some common format strings\nvar globalMasks = {\n default: \"ddd MMM DD YYYY HH:mm:ss\",\n shortDate: \"M/D/YY\",\n mediumDate: \"MMM D, YYYY\",\n longDate: \"MMMM D, YYYY\",\n fullDate: \"dddd, MMMM D, YYYY\",\n isoDate: \"YYYY-MM-DD\",\n isoDateTime: \"YYYY-MM-DDTHH:mm:ssZ\",\n shortTime: \"HH:mm\",\n mediumTime: \"HH:mm:ss\",\n longTime: \"HH:mm:ss.SSS\"\n};\nvar setGlobalDateMasks = function (masks) { return assign(globalMasks, masks); };\n/***\n * Format a date\n * @method format\n * @param {Date|number} dateObj\n * @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'\n * @returns {string} Formatted date string\n */\nvar format = function (dateObj, mask, i18n) {\n if (mask === void 0) { mask = globalMasks[\"default\"]; }\n if (i18n === void 0) { i18n = {}; }\n if (typeof dateObj === \"number\") {\n dateObj = new Date(dateObj);\n }\n if (Object.prototype.toString.call(dateObj) !== \"[object Date]\" ||\n isNaN(dateObj.getTime())) {\n throw new Error(\"Invalid Date pass to format\");\n }\n mask = globalMasks[mask] || mask;\n var literals = [];\n // Make literals inactive by replacing them with @@@\n mask = mask.replace(literal, function ($0, $1) {\n literals.push($1);\n return \"@@@\";\n });\n var combinedI18nSettings = assign(assign({}, globalI18n), i18n);\n // Apply formatting rules\n mask = mask.replace(token, function ($0) {\n return formatFlags[$0](dateObj, combinedI18nSettings);\n });\n // Inline literal values back into the formatted value\n return mask.replace(/@@@/g, function () { return literals.shift(); });\n};\n/**\n * Parse a date string into a Javascript Date object /\n * @method parse\n * @param {string} dateStr Date string\n * @param {string} format Date parse format\n * @param {i18n} I18nSettingsOptional Full or subset of I18N settings\n * @returns {Date|null} Returns Date object. Returns null what date string is invalid or doesn't match format\n */\nfunction parse(dateStr, format, i18n) {\n if (i18n === void 0) { i18n = {}; }\n if (typeof format !== \"string\") {\n throw new Error(\"Invalid format in fecha parse\");\n }\n // Check to see if the format is actually a mask\n format = globalMasks[format] || format;\n // Avoid regular expression denial of service, fail early for really long strings\n // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS\n if (dateStr.length > 1000) {\n return null;\n }\n // Default to the beginning of the year.\n var today = new Date();\n var dateInfo = {\n year: today.getFullYear(),\n month: 0,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n isPm: null,\n timezoneOffset: null\n };\n var parseInfo = [];\n var literals = [];\n // Replace all the literals with @@@. Hopefully a string that won't exist in the format\n var newFormat = format.replace(literal, function ($0, $1) {\n literals.push(regexEscape($1));\n return \"@@@\";\n });\n var specifiedFields = {};\n var requiredFields = {};\n // Change every token that we find into the correct regex\n newFormat = regexEscape(newFormat).replace(token, function ($0) {\n var info = parseFlags[$0];\n var field = info[0], regex = info[1], requiredField = info[3];\n // Check if the person has specified the same field twice. This will lead to confusing results.\n if (specifiedFields[field]) {\n throw new Error(\"Invalid format. \" + field + \" specified twice in format\");\n }\n specifiedFields[field] = true;\n // Check if there are any required fields. For instance, 12 hour time requires AM/PM specified\n if (requiredField) {\n requiredFields[requiredField] = true;\n }\n parseInfo.push(info);\n return \"(\" + regex + \")\";\n });\n // Check all the required fields are present\n Object.keys(requiredFields).forEach(function (field) {\n if (!specifiedFields[field]) {\n throw new Error(\"Invalid format. \" + field + \" is required in specified format\");\n }\n });\n // Add back all the literals after\n newFormat = newFormat.replace(/@@@/g, function () { return literals.shift(); });\n // Check if the date string matches the format. If it doesn't return null\n var matches = dateStr.match(new RegExp(newFormat, \"i\"));\n if (!matches) {\n return null;\n }\n var combinedI18nSettings = assign(assign({}, globalI18n), i18n);\n // For each match, call the parser function for that date part\n for (var i = 1; i < matches.length; i++) {\n var _a = parseInfo[i - 1], field = _a[0], parser = _a[2];\n var value = parser\n ? parser(matches[i], combinedI18nSettings)\n : +matches[i];\n // If the parser can't make sense of the value, return null\n if (value == null) {\n return null;\n }\n dateInfo[field] = value;\n }\n if (dateInfo.isPm === 1 && dateInfo.hour != null && +dateInfo.hour !== 12) {\n dateInfo.hour = +dateInfo.hour + 12;\n }\n else if (dateInfo.isPm === 0 && +dateInfo.hour === 12) {\n dateInfo.hour = 0;\n }\n var dateTZ;\n if (dateInfo.timezoneOffset == null) {\n dateTZ = new Date(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute, dateInfo.second, dateInfo.millisecond);\n var validateFields = [\n [\"month\", \"getMonth\"],\n [\"day\", \"getDate\"],\n [\"hour\", \"getHours\"],\n [\"minute\", \"getMinutes\"],\n [\"second\", \"getSeconds\"]\n ];\n for (var i = 0, len = validateFields.length; i < len; i++) {\n // Check to make sure the date field is within the allowed range. Javascript dates allows values\n // outside the allowed range. If the values don't match the value was invalid\n if (specifiedFields[validateFields[i][0]] &&\n dateInfo[validateFields[i][0]] !== dateTZ[validateFields[i][1]]()) {\n return null;\n }\n }\n }\n else {\n dateTZ = new Date(Date.UTC(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute - dateInfo.timezoneOffset, dateInfo.second, dateInfo.millisecond));\n // We can't validate dates in another timezone unfortunately. Do a basic check instead\n if (dateInfo.month > 11 ||\n dateInfo.month < 0 ||\n dateInfo.day > 31 ||\n dateInfo.day < 1 ||\n dateInfo.hour > 23 ||\n dateInfo.hour < 0 ||\n dateInfo.minute > 59 ||\n dateInfo.minute < 0 ||\n dateInfo.second > 59 ||\n dateInfo.second < 0) {\n return null;\n }\n }\n // Don't allow invalid dates\n return dateTZ;\n}\nvar fecha = {\n format: format,\n parse: parse,\n defaultI18n: defaultI18n,\n setGlobalDateI18n: setGlobalDateI18n,\n setGlobalDateMasks: setGlobalDateMasks\n};\n\nexport default fecha;\nexport { assign, format, parse, defaultI18n, setGlobalDateI18n, setGlobalDateMasks };\n//# sourceMappingURL=fecha.js.map\n","export const DURATION_SECOND = 1000;\nexport const DURATION_MINUTE = DURATION_SECOND * 60;\nexport const DURATION_HOUR = DURATION_MINUTE * 60;\nexport const DURATION_DAY = DURATION_HOUR * 24;\nexport const DURATION_WEEK = DURATION_DAY * 7;\nexport const DURATION_MONTH = DURATION_DAY * 30;\nexport const DURATION_YEAR = DURATION_DAY * 365;\nexport function createInterval(duration, floorish, offseti, field) {\n const adjust = (date, step) => {\n const test = (date) => field(date) % step === 0;\n let i = step;\n while (i && !test(date)) {\n offseti(date, -1);\n i -= 1;\n }\n return date;\n };\n const floori = (date, step) => {\n if (step)\n adjust(date, step);\n floorish(date);\n };\n const floor = (date, step) => {\n const d = new Date(+date);\n floori(d, step);\n return d;\n };\n const ceil = (date, step) => {\n const d = new Date(+date - 1);\n floori(d, step);\n offseti(d, step);\n floori(d);\n return d;\n };\n const range = (start, stop, step, shouldAdjust) => {\n const ticks = [];\n const roundStep = Math.floor(step);\n const t = shouldAdjust ? ceil(start, step) : ceil(start);\n for (let i = t; i < stop; offseti(i, roundStep), floori(i)) {\n ticks.push(new Date(+i));\n }\n return ticks;\n };\n return {\n ceil,\n floor,\n range,\n duration,\n };\n}\nexport const millisecond = createInterval(1, (date) => date, (date, step = 1) => {\n date.setTime(+date + step);\n}, (date) => date.getTime());\nexport const second = createInterval(DURATION_SECOND, (date) => {\n date.setMilliseconds(0);\n}, (date, step = 1) => {\n date.setTime(+date + DURATION_SECOND * step);\n}, (date) => date.getSeconds());\nexport const minute = createInterval(DURATION_MINUTE, (date) => {\n date.setSeconds(0, 0);\n}, (date, step = 1) => {\n date.setTime(+date + DURATION_MINUTE * step);\n}, (date) => date.getMinutes());\nexport const hour = createInterval(DURATION_HOUR, (date) => {\n date.setMinutes(0, 0, 0);\n}, (date, step = 1) => {\n date.setTime(+date + DURATION_HOUR * step);\n}, (date) => date.getHours());\nexport const day = createInterval(DURATION_DAY, (date) => {\n date.setHours(0, 0, 0, 0);\n}, (date, step = 1) => {\n date.setTime(+date + DURATION_DAY * step);\n}, (date) => date.getDate() - 1);\nexport const month = createInterval(DURATION_MONTH, (date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step = 1) => {\n const month = date.getMonth();\n date.setMonth(month + step);\n}, (date) => date.getMonth());\nexport const week = createInterval(DURATION_WEEK, (date) => {\n date.setDate(date.getDate() - (date.getDay() % 7));\n date.setHours(0, 0, 0, 0);\n}, (date, step = 1) => {\n date.setDate(date.getDate() + 7 * step);\n}, (date) => {\n const start = month.floor(date);\n const end = new Date(+date);\n return Math.floor((+end - +start) / DURATION_WEEK);\n});\nexport const year = createInterval(DURATION_YEAR, (date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step = 1) => {\n const year = date.getFullYear();\n date.setFullYear(year + step);\n}, (date) => date.getFullYear());\nexport const localIntervalMap = {\n millisecond,\n second,\n minute,\n hour,\n day,\n week,\n month,\n year,\n};\n//# sourceMappingURL=time-interval.js.map","import { createInterval, DURATION_SECOND, DURATION_MINUTE, DURATION_HOUR, DURATION_DAY, DURATION_WEEK, DURATION_MONTH, DURATION_YEAR, } from './time-interval';\nexport const utcMillisecond = createInterval(1, (date) => date, (date, step = 1) => {\n date.setTime(+date + step);\n}, (date) => date.getTime());\nexport const utcSecond = createInterval(DURATION_SECOND, (date) => {\n date.setUTCMilliseconds(0);\n}, (date, step = 1) => {\n date.setTime(+date + DURATION_SECOND * step);\n}, (date) => date.getUTCSeconds());\nexport const utcMinute = createInterval(DURATION_MINUTE, (date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step = 1) => {\n date.setTime(+date + DURATION_MINUTE * step);\n}, (date) => date.getUTCMinutes());\nexport const utcHour = createInterval(DURATION_HOUR, (date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step = 1) => {\n date.setTime(+date + DURATION_HOUR * step);\n}, (date) => date.getUTCHours());\nexport const utcDay = createInterval(DURATION_DAY, (date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step = 1) => {\n date.setTime(+date + DURATION_DAY * step);\n}, (date) => date.getUTCDate() - 1);\nexport const utcMonth = createInterval(DURATION_MONTH, (date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step = 1) => {\n const month = date.getUTCMonth();\n date.setUTCMonth(month + step);\n}, (date) => date.getUTCMonth());\nexport const utcWeek = createInterval(DURATION_WEEK, (date) => {\n date.setUTCDate(date.getUTCDate() - ((date.getUTCDay() + 7) % 7));\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step = 1) => {\n date.setTime(+date + DURATION_WEEK * step);\n}, (date) => {\n const start = utcMonth.floor(date);\n const end = new Date(+date);\n return Math.floor((+end - +start) / DURATION_WEEK);\n});\nexport const utcYear = createInterval(DURATION_YEAR, (date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step = 1) => {\n const year = date.getUTCFullYear();\n date.setUTCFullYear(year + step);\n}, (date) => date.getUTCFullYear());\nexport const utcIntervalMap = {\n millisecond: utcMillisecond,\n second: utcSecond,\n minute: utcMinute,\n hour: utcHour,\n day: utcDay,\n week: utcWeek,\n month: utcMonth,\n year: utcYear,\n};\n//# sourceMappingURL=utc-interval.js.map","import { localIntervalMap } from './time-interval';\nimport { utcIntervalMap } from './utc-interval';\nimport { bisect } from './bisect';\nimport { tickStep } from './ticks';\nfunction chooseTickIntervals(utc) {\n const intervalMap = utc ? utcIntervalMap : localIntervalMap;\n const { year, month, week, day, hour, minute, second, millisecond } = intervalMap;\n const tickIntervals = [\n [second, 1],\n [second, 5],\n [second, 15],\n [second, 30],\n [minute, 1],\n [minute, 5],\n [minute, 15],\n [minute, 30],\n [hour, 1],\n [hour, 3],\n [hour, 6],\n [hour, 12],\n [day, 1],\n [day, 2],\n [week, 1],\n [month, 1],\n [month, 3],\n [year, 1],\n ];\n return {\n tickIntervals,\n year,\n millisecond,\n };\n}\nexport function findTickInterval(start, stop, count, interval, utc) {\n const lo = +start;\n const hi = +stop;\n const { tickIntervals, year, millisecond } = chooseTickIntervals(utc);\n const getter = ([interval, count]) => interval.duration * count;\n const targetCount = interval ? (hi - lo) / interval : count || 5;\n const targetInterval = interval || (hi - lo) / targetCount;\n const len = tickIntervals.length;\n const i = bisect(tickIntervals, targetInterval, 0, len, getter);\n let matchInterval;\n if (i === len) {\n const step = tickStep(lo / year.duration, hi / year.duration, targetCount);\n matchInterval = [year, step];\n }\n else if (i) {\n const closeToLow = targetInterval / getter(tickIntervals[i - 1]) < getter(tickIntervals[i]) / targetInterval;\n const [timeInterval, targetStep] = closeToLow ? tickIntervals[i - 1] : tickIntervals[i];\n const step = interval ? Math.ceil(interval / timeInterval.duration) : targetStep;\n matchInterval = [timeInterval, step];\n }\n else {\n const step = Math.max(tickStep(lo, hi, targetCount), 1);\n matchInterval = [millisecond, step];\n }\n return matchInterval;\n}\n//# sourceMappingURL=find-tick-interval.js.map","import { findTickInterval } from '../utils';\nexport const d3Time = (min, max, count, interval, utc) => {\n const r = min > max;\n const lo = r ? max : min;\n const hi = r ? min : max;\n const [tickInterval, step] = findTickInterval(lo, hi, count, interval, utc);\n const ticks = tickInterval.range(lo, new Date(+hi + 1), step, true);\n return r ? ticks.reverse() : ticks;\n};\n//# sourceMappingURL=d3-time.js.map","import { findTickInterval } from './find-tick-interval';\nexport const d3TimeNice = (min, max, count, interval, utc) => {\n const r = min > max;\n const lo = r ? max : min;\n const hi = r ? min : max;\n const [tickInterval, step] = findTickInterval(lo, hi, count, interval, utc);\n const domain = [tickInterval.floor(lo, step), tickInterval.ceil(hi, step)];\n return r ? domain.reverse() : domain;\n};\n//# sourceMappingURL=d3-time-nice.js.map","import { identity } from '@antv/util';\nimport { format } from 'fecha';\nimport { Continuous } from './continuous';\nimport { d3Time } from '../tick-methods/d3-time';\nimport { d3TimeNice, createInterpolateNumber, localIntervalMap, utcIntervalMap, chooseNiceTimeMask } from '../utils';\nfunction offset(date) {\n const minuteOffset = date.getTimezoneOffset();\n const d = new Date(date);\n d.setMinutes(d.getMinutes() + minuteOffset, d.getSeconds(), d.getMilliseconds());\n return d;\n}\nexport class Time extends Continuous {\n getDefaultOptions() {\n return {\n domain: [new Date(2000, 0, 1), new Date(2000, 0, 2)],\n range: [0, 1],\n nice: false,\n tickCount: 5,\n tickInterval: undefined,\n unknown: undefined,\n clamp: false,\n tickMethod: d3Time,\n interpolate: createInterpolateNumber,\n mask: undefined,\n utc: false,\n };\n }\n chooseTransforms() {\n const transform = (x) => +x;\n const untransform = (x) => new Date(x);\n return [transform, untransform];\n }\n chooseNice() {\n return d3TimeNice;\n }\n getTickMethodOptions() {\n const { domain, tickCount, tickInterval, utc } = this.options;\n const min = domain[0];\n const max = domain[domain.length - 1];\n return [min, max, tickCount, tickInterval, utc];\n }\n getFormatter() {\n const { mask, utc } = this.options;\n const maskMap = utc ? utcIntervalMap : localIntervalMap;\n const time = utc ? offset : identity; // fecha 不支持 utc 格式化,所以需要设置一个偏移\n return (d) => format(time(d), mask || chooseNiceTimeMask(d, maskMap));\n }\n clone() {\n return new Time(this.options);\n }\n}\n//# sourceMappingURL=time.js.map","export function chooseNiceTimeMask(date, intervalMap) {\n const { second, minute, hour, day, week, month, year } = intervalMap;\n if (second.floor(date) < date)\n return '.SSS';\n if (minute.floor(date) < date)\n return ':ss';\n if (hour.floor(date) < date)\n return 'hh:mm';\n if (day.floor(date) < date)\n return 'hh A';\n if (month.floor(date) < date) {\n if (week.floor(date) < date)\n return 'MMM DD';\n return 'ddd DD';\n }\n if (year.floor(date) < date)\n return 'MMMM';\n return 'YYYY';\n}\n//# sourceMappingURL=choose-mask.js.map","import { Time as TimeScale } from '@antv/scale';\nexport const Time = (options) => {\n return new TimeScale(options);\n};\nTime.props = {};\n//# sourceMappingURL=time.js.map","const reflect = (f) => {\n return (x) => -f(-x);\n};\nexport const logs = (base, shouldReflect) => {\n const baseCache = Math.log(base);\n const log = base === Math.E\n ? Math.log\n : base === 10\n ? Math.log10\n : base === 2\n ? Math.log2\n : (x) => Math.log(x) / baseCache;\n return shouldReflect ? reflect(log) : log;\n};\nexport const pows = (base, shouldReflect) => {\n const pow = base === Math.E ? Math.exp : (x) => base ** x;\n return shouldReflect ? reflect(pow) : pow;\n};\n//# sourceMappingURL=log.js.map","import { d3Ticks } from './d3-ticks';\nimport { pows, logs } from '../utils';\nexport const d3Log = (a, b, n, base = 10) => {\n const shouldReflect = a < 0;\n const pow = pows(base, shouldReflect);\n const log = logs(base, shouldReflect);\n const r = b < a;\n const min = r ? b : a;\n const max = r ? a : b;\n let i = log(min);\n let j = log(max);\n let ticks = [];\n // 如果 base 是整数\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i);\n j = Math.ceil(j);\n if (shouldReflect) {\n for (; i <= j; i += 1) {\n const p = pow(i);\n for (let k = base - 1; k >= 1; k -= 1) {\n const t = p * k;\n if (t > max)\n break;\n if (t >= min)\n ticks.push(t);\n }\n }\n }\n else {\n for (; i <= j; i += 1) {\n const p = pow(i);\n for (let k = 1; k < base; k += 1) {\n const t = p * k;\n if (t > max)\n break;\n if (t >= min)\n ticks.push(t);\n }\n }\n }\n if (ticks.length * 2 < n)\n ticks = d3Ticks(min, max, n);\n }\n else {\n const count = n === -1 ? j - i : Math.min(j - i, n);\n ticks = d3Ticks(i, j, count).map(pow);\n }\n return r ? ticks.reverse() : ticks;\n};\n//# sourceMappingURL=d3-log.js.map","import { logs, pows } from './log';\nexport const d3LogNice = (a, b, _, base) => {\n const shouldReflect = a < 0;\n const log = logs(base, shouldReflect);\n const pow = pows(base, shouldReflect);\n const r = a > b;\n const min = r ? b : a;\n const max = r ? a : b;\n const niceDomain = [pow(Math.floor(log(min))), pow(Math.ceil(log(max)))];\n return r ? niceDomain.reverse() : niceDomain;\n};\n//# sourceMappingURL=d3-log-nice.js.map","import { Continuous } from './continuous';\nimport { createInterpolateValue, logs, pows } from '../utils';\nimport { d3Log } from '../tick-methods/d3-log';\nimport { d3LogNice } from '../utils/d3-log-nice';\n/**\n * Linear 比例尺\n *\n * 构造一个线性的对数比例尺\n */\nexport class Log extends Continuous {\n getDefaultOptions() {\n return {\n domain: [1, 10],\n range: [0, 1],\n base: 10,\n interpolate: createInterpolateValue,\n tickMethod: d3Log,\n tickCount: 5,\n };\n }\n chooseNice() {\n return d3LogNice;\n }\n getTickMethodOptions() {\n const { domain, tickCount, base } = this.options;\n const min = domain[0];\n const max = domain[domain.length - 1];\n return [min, max, tickCount, base];\n }\n chooseTransforms() {\n const { base, domain } = this.options;\n const shouldReflect = domain[0] < 0;\n return [logs(base, shouldReflect), pows(base, shouldReflect)];\n }\n clone() {\n return new Log(this.options);\n }\n}\n//# sourceMappingURL=log.js.map","import { Log as LogScale } from '@antv/scale';\nexport const Log = (options) => {\n return new LogScale(options);\n};\nLog.props = {};\n//# sourceMappingURL=log.js.map","import { Pow as PowScale } from '@antv/scale';\nexport const Pow = (options) => {\n return new PowScale(options);\n};\nPow.props = {};\n//# sourceMappingURL=pow.js.map","import { Threshold as ThresholdScale } from '@antv/scale';\nexport const Threshold = (options) => {\n return new ThresholdScale(options);\n};\nThreshold.props = {};\n//# sourceMappingURL=threshold.js.map","import { Quantile as QuantileScale } from '@antv/scale';\nexport const Quantile = (options) => {\n return new QuantileScale(options);\n};\nQuantile.props = {};\n//# sourceMappingURL=quantile.js.map","import { Quantize as QuantizeScale } from '@antv/scale';\nexport const Quantize = (options) => {\n return new QuantizeScale(options);\n};\nQuantize.props = {};\n//# sourceMappingURL=quantize.js.map","import { createInterpolateValue } from '../utils';\nimport { Pow } from './pow';\nimport { d3Ticks } from '../tick-methods/d3-ticks';\nexport class Sqrt extends Pow {\n getDefaultOptions() {\n return {\n domain: [0, 1],\n range: [0, 1],\n nice: false,\n clamp: false,\n round: false,\n interpolate: createInterpolateValue,\n tickMethod: d3Ticks,\n tickCount: 5,\n exponent: 0.5,\n };\n }\n constructor(options) {\n super(options);\n }\n update(options) {\n super.update(options);\n }\n clone() {\n return new Sqrt(this.options);\n }\n}\n//# sourceMappingURL=sqrt.js.map","import { Sqrt as SqrtScale } from '@antv/scale';\nexport const Sqrt = (options) => {\n return new SqrtScale(options);\n};\nSqrt.props = {};\n//# sourceMappingURL=sqrt.js.map","import { Sequential as SequentialScale } from '@antv/scale';\nexport const Sequential = (options) => {\n return new SequentialScale(options);\n};\nSequential.props = {};\n//# sourceMappingURL=sequential.js.map","import { Constant as ConstantScale } from '@antv/scale';\nexport const Constant = (options) => {\n return new ConstantScale(options);\n};\nConstant.props = {};\n//# sourceMappingURL=constant.js.map","export function create({ colorDefault, colorBlack, colorWhite, colorStroke, colorBackground, padding1, padding2, padding3, alpha90, alpha65, alpha45, alpha25, alpha10, category10, category20, sizeDefault = 1, padding = 'auto', margin = 16, }) {\n return {\n padding,\n margin,\n size: sizeDefault,\n color: colorDefault,\n category10,\n category20,\n enter: {\n duration: 300,\n fill: 'both',\n delay: 0,\n },\n update: {\n duration: 300,\n fill: 'both',\n delay: 0,\n },\n exit: {\n duration: 300,\n fill: 'both',\n delay: 0,\n },\n view: {\n viewFill: colorBackground,\n plotFill: 'transparent',\n mainFill: 'transparent',\n contentFill: 'transparent',\n },\n line: {\n line: {\n fill: '',\n strokeOpacity: 1,\n lineWidth: 1,\n lineCap: 'round',\n },\n },\n point: {\n point: {\n r: 3,\n fillOpacity: 0.95,\n lineWidth: 0,\n },\n hollow: {\n r: 3,\n strokeOpacity: 0.95,\n lineWidth: 1,\n },\n plus: {\n r: 3,\n strokeOpacity: 0.95,\n lineWidth: 3,\n },\n diamond: {\n r: 3,\n strokeOpacity: 0.95,\n lineWidth: 1,\n },\n },\n interval: {\n rect: {\n fillOpacity: 0.95,\n },\n hollow: {\n fill: '',\n strokeOpacity: 1,\n lineWidth: 2,\n },\n },\n area: {\n area: {\n fillOpacity: 0.85,\n lineWidth: 0,\n },\n },\n polygon: {\n polygon: {\n fillOpacity: 0.95,\n },\n },\n cell: {\n cell: {\n fillOpacity: 0.95,\n },\n hollow: {\n fill: '',\n strokeOpacity: 1,\n lineWidth: 2,\n },\n },\n rect: {\n rect: {\n fillOpacity: 0.95,\n },\n hollow: {\n fill: '',\n strokeOpacity: 1,\n lineWidth: 2,\n },\n },\n link: {\n link: {\n fill: '',\n strokeOpacity: 1,\n },\n },\n vector: {\n vector: {\n fillOpacity: 1,\n },\n },\n box: {\n box: {\n fillOpacity: 0.95,\n stroke: colorBlack,\n lineWidth: 1,\n },\n },\n text: {\n text: {\n fill: '#1D2129',\n fontSize: 12,\n lineWidth: 0,\n connectorStroke: colorStroke,\n connectorStrokeOpacity: 0.45,\n connectorLineWidth: 1,\n backgroundFill: colorStroke,\n backgroundFillOpacity: 0.15,\n backgroundPadding: [2, 4],\n startMarkerSymbol: 'circle',\n startMarkerSize: 4,\n endMarkerSymbol: 'circle',\n endMarkerSize: 4,\n },\n badge: {\n fill: '#1D2129',\n fillOpacity: 0.65,\n lineWidth: 0,\n fontSize: 10,\n textAlign: 'center',\n textBaseline: 'middle',\n markerFill: colorStroke,\n markerFillOpacity: 0.25,\n markerStrokeOpacity: 0,\n },\n },\n lineX: {\n line: {\n stroke: colorStroke,\n strokeOpacity: 0.45,\n lineWidth: 1,\n },\n },\n lineY: {\n line: {\n stroke: colorStroke,\n strokeOpacity: 0.45,\n lineWidth: 1,\n },\n },\n rangeX: {\n range: {\n fill: colorStroke,\n fillOpacity: 0.15,\n lineWidth: 0,\n },\n },\n rangeY: {\n range: {\n fill: colorStroke,\n fillOpacity: 0.15,\n lineWidth: 0,\n },\n },\n connector: {\n connector: {\n stroke: colorStroke,\n strokeOpacity: 0.45,\n lineWidth: 1,\n connectLength1: 12,\n endMarker: true,\n endMarkerSize: 6,\n endMarkerFill: colorStroke,\n endMarkerFillOpacity: 0.95,\n },\n },\n axis: {\n arrow: false,\n gridLineDash: [3, 4],\n gridLineWidth: 0.5,\n gridStroke: colorBlack,\n gridStrokeOpacity: alpha10,\n labelAlign: 'horizontal',\n labelFill: colorBlack,\n labelOpacity: alpha45,\n labelFontSize: 12,\n labelFontWeight: 'normal',\n labelSpacing: padding1,\n line: false,\n lineLineWidth: 0.5,\n lineStroke: colorBlack,\n lineStrokeOpacity: alpha45,\n tickLength: 4,\n tickLineWidth: 1,\n tickStroke: colorBlack,\n tickOpacity: alpha45,\n titleFill: colorBlack,\n titleOpacity: alpha90,\n titleFontSize: 12,\n titleFontWeight: 'normal',\n titleSpacing: 12,\n titleTransformOrigin: 'center',\n lineArrowOffset: 6,\n lineArrowSize: 6,\n },\n axisTop: {\n gridDirection: 'positive',\n labelDirection: 'negative',\n tickDirection: 'negative',\n titlePosition: 'top',\n titleSpacing: 12,\n labelSpacing: 4,\n titleTextBaseline: 'middle',\n },\n axisBottom: {\n gridDirection: 'negative',\n labelDirection: 'positive',\n tickDirection: 'positive',\n titlePosition: 'bottom',\n titleSpacing: 12,\n labelSpacing: 4,\n titleTextBaseline: 'bottom',\n titleTransform: 'translate(0, 8)',\n },\n axisLeft: {\n gridDirection: 'positive',\n labelDirection: 'negative',\n labelSpacing: 4,\n tickDirection: 'negative',\n titlePosition: 'left',\n titleSpacing: 12,\n titleTextBaseline: 'middle',\n titleDirection: 'vertical',\n titleTransform: 'rotate(-90) translate(0, -8)',\n titleTransformOrigin: 'center',\n },\n axisRight: {\n gridDirection: 'negative',\n labelDirection: 'positive',\n labelSpacing: 4,\n tickDirection: 'positive',\n titlePosition: 'right',\n titleSpacing: 12,\n titleTextBaseline: 'top',\n titleDirection: 'vertical',\n titleTransformOrigin: 'center',\n },\n axisLinear: {\n girdClosed: true,\n gridConnect: 'arc',\n gridDirection: 'negative',\n gridType: 'surround',\n titlePosition: 'top',\n titleSpacing: 0,\n },\n axisArc: {\n title: false,\n titlePosition: 'inner',\n line: false,\n tick: true,\n labelSpacing: 4,\n },\n axisRadar: {\n girdClosed: true,\n gridStrokeOpacity: 0.3,\n gridType: 'surround',\n tick: false,\n titlePosition: 'start',\n },\n legendCategory: {\n backgroundFill: 'transparent',\n itemBackgroundFill: 'transparent',\n itemLabelFill: colorBlack,\n itemLabelFillOpacity: alpha90,\n itemLabelFontSize: 12,\n itemLabelFontWeight: 'normal',\n itemMarkerFillOpacity: 1,\n itemMarkerSize: 8,\n itemSpacing: [padding1, padding1],\n itemValueFill: colorBlack,\n itemValueFillOpacity: 0.65,\n itemValueFontSize: 12,\n itemValueFontWeight: 'normal',\n navButtonFill: colorBlack,\n navButtonFillOpacity: 0.65,\n navPageNumFill: colorBlack,\n navPageNumFillOpacity: 0.45,\n navPageNumFontSize: 12,\n padding: 8,\n title: false,\n titleFill: colorBlack,\n titleFillOpacity: 0.65,\n titleFontSize: 12,\n titleFontWeight: 'normal',\n titleSpacing: 4,\n tickStroke: colorBlack,\n tickStrokeOpacity: 0.25,\n rowPadding: padding1,\n colPadding: padding2,\n maxRows: 3,\n maxCols: 3,\n },\n legendContinuous: {\n handleHeight: 12,\n handleLabelFill: colorBlack,\n handleLabelFillOpacity: alpha45,\n handleLabelFontSize: 12,\n handleLabelFontWeight: 'normal',\n handleMarkerFill: colorBlack,\n handleMarkerFillOpacity: 0.6,\n handleMarkerLineWidth: 1,\n handleMarkerStroke: colorBlack,\n handleMarkerStrokeOpacity: 0.25,\n handleWidth: 10,\n labelFill: colorBlack,\n labelFillOpacity: alpha45,\n labelFontSize: 12,\n labelFontWeight: 'normal',\n labelSpacing: 3,\n tick: true,\n tickLength: 12,\n ribbonSize: 12,\n ribbonFill: '#aaa',\n handle: true,\n handleLabel: false,\n handleShape: 'slider',\n handleIconSize: 12 / 1.8,\n indicator: false,\n titleFontSize: 12,\n titleSpacing: 4,\n titleFontWeight: 'normal',\n titleFillOpacity: alpha90,\n tickStroke: colorBlack,\n tickStrokeOpacity: alpha45,\n },\n label: {\n fill: colorBlack,\n fillOpacity: 0.65,\n fontSize: 12,\n fontWeight: 'normal',\n stroke: undefined,\n offset: 12,\n connectorStroke: colorBlack,\n connectorStrokeOpacity: 0.45,\n connectorLineWidth: 1,\n connectorLength: 12,\n connectorLength2: 8,\n connectorDistance: 4,\n },\n innerLabel: {\n fill: colorWhite,\n fontSize: 12,\n fillOpacity: 0.85,\n fontWeight: 'normal',\n stroke: undefined,\n offset: 0,\n },\n htmlLabel: {\n fontSize: 12,\n opacity: 0.65,\n color: colorBlack,\n fontWeight: 'normal',\n },\n slider: {\n trackSize: 16,\n trackFill: colorStroke,\n trackFillOpacity: 1,\n selectionFill: colorDefault,\n selectionFillOpacity: 0.15,\n handleIconSize: 10,\n handleIconFill: '#f7f7f7',\n handleIconFillOpacity: 1,\n handleIconStroke: colorBlack,\n handleIconStrokeOpacity: 0.25,\n handleIconLineWidth: 1,\n handleIconRadius: 2,\n handleLabelFill: colorBlack,\n handleLabelFillOpacity: 0.45,\n handleLabelFontSize: 12,\n handleLabelFontWeight: 'normal',\n },\n scrollbar: {\n padding: [0, 0, 0, 0],\n trackSize: 6,\n isRound: true,\n slidable: true,\n scrollable: true,\n trackFill: '#e5e5e5',\n trackFillOpacity: 0,\n thumbFill: '#000',\n thumbFillOpacity: 0.15,\n thumbHighlightedFillOpacity: 0.2,\n },\n title: {\n spacing: 8,\n titleFill: colorBlack,\n titleFillOpacity: alpha90,\n titleFontSize: 16,\n titleFontWeight: 'bold',\n titleTextBaseline: 'top',\n subtitleFill: colorBlack,\n subtitleFillOpacity: alpha65,\n subtitleFontSize: 12,\n subtitleFontWeight: 'normal',\n subtitleTextBaseline: 'top',\n },\n tooltip: {\n css: {\n '.g2-tooltip': {\n 'font-family': 'sans-serif',\n },\n },\n },\n };\n}\n//# sourceMappingURL=create.js.map","import { deepMix } from '@antv/util';\nimport { create } from './create';\nexport const tokens = {\n colorBlack: '#1D2129',\n colorWhite: '#ffffff',\n colorStroke: '#416180',\n colorDefault: '#1783FF',\n colorBackground: 'transparent',\n category10: [\n '#1783FF',\n '#00C9C9',\n '#F0884D',\n '#D580FF',\n '#7863FF',\n '#60C42D',\n '#BD8F24',\n '#FF80CA',\n '#2491B3',\n '#17C76F',\n ],\n category20: [\n '#1783FF',\n '#00C9C9',\n '#F0884D',\n '#D580FF',\n '#7863FF',\n '#60C42D',\n '#BD8F24',\n '#FF80CA',\n '#2491B3',\n '#17C76F',\n '#AABA01',\n '#BC7CFC',\n '#237CBC',\n '#2DE379',\n '#CE8032',\n '#FF7AF4',\n '#545FD3',\n '#AFE410',\n '#D8C608',\n '#FFA1E0',\n ],\n padding1: 8,\n padding2: 12,\n padding3: 20,\n alpha90: 0.9,\n alpha65: 0.65,\n alpha45: 0.45,\n alpha25: 0.25,\n alpha10: 0.1,\n};\nconst defaults = create(tokens);\n/**\n * Default theme.\n */\nexport const Light = (options) => {\n return deepMix({}, defaults, options);\n};\nLight.props = {};\n//# sourceMappingURL=light.js.map","import { deepMix } from '@antv/util';\nimport { Light } from './light';\n/**\n * Default theme.\n */\nexport const Classic = (options) => {\n return deepMix({}, Light(), {\n category10: 'category10',\n category20: 'category20',\n }, options);\n};\nClassic.props = {};\n//# sourceMappingURL=classic.js.map","import { deepMix } from '@antv/util';\nimport { create } from './create';\nexport const tokens = {\n colorBlack: '#fff',\n colorWhite: '#000',\n colorStroke: '#416180',\n colorDefault: '#1783FF',\n colorBackground: 'transparent',\n category10: [\n '#1783FF',\n '#00C9C9',\n '#F0884D',\n '#D580FF',\n '#7863FF',\n '#60C42D',\n '#BD8F24',\n '#FF80CA',\n '#2491B3',\n '#17C76F',\n ],\n category20: [\n '#1783FF',\n '#00C9C9',\n '#F0884D',\n '#D580FF',\n '#7863FF',\n '#60C42D',\n '#BD8F24',\n '#FF80CA',\n '#2491B3',\n '#17C76F',\n '#AABA01',\n '#BC7CFC',\n '#237CBC',\n '#2DE379',\n '#CE8032',\n '#FF7AF4',\n '#545FD3',\n '#AFE410',\n '#D8C608',\n '#FFA1E0',\n ],\n padding1: 8,\n padding2: 12,\n padding3: 20,\n alpha90: 0.9,\n alpha65: 0.65,\n alpha45: 0.45,\n alpha25: 0.25,\n alpha10: 0.25,\n};\nconst defaults = create(tokens);\nexport const Dark = (options) => {\n return deepMix({}, defaults, {\n tooltip: {\n crosshairsStroke: '#fff',\n crosshairsLineWidth: 1,\n crosshairsStrokeOpacity: 0.25,\n css: {\n '.g2-tooltip': {\n background: '#1f1f1f',\n opacity: 0.95,\n },\n '.g2-tooltip-title': {\n color: '#A6A6A6',\n },\n '.g2-tooltip-list-item-name-label': {\n color: '#A6A6A6',\n },\n '.g2-tooltip-list-item-value': {\n color: '#A6A6A6',\n },\n },\n },\n }, options);\n};\n//# sourceMappingURL=dark.js.map","import { Dark } from './dark';\n/**\n * Dark theme.\n */\nexport const ClassicDark = (options) => {\n return Object.assign({}, Dark(), {\n category10: 'category10',\n category20: 'category20',\n }, options);\n};\nClassicDark.props = {};\n//# sourceMappingURL=classicDark.js.map","import { deepMix } from '@antv/util';\nimport { create } from './create';\nexport const tokens = {\n colorBlack: '#000',\n colorWhite: '#fff',\n colorStroke: '#888',\n colorDefault: '#4e79a7',\n colorBackground: 'transparent',\n category10: [\n '#4e79a7',\n '#f28e2c',\n '#e15759',\n '#76b7b2',\n '#59a14f',\n '#edc949',\n '#af7aa1',\n '#ff9da7',\n '#9c755f',\n '#bab0ab',\n ],\n category20: [\n '#4e79a7',\n '#f28e2c',\n '#e15759',\n '#76b7b2',\n '#59a14f',\n '#edc949',\n '#af7aa1',\n '#ff9da7',\n '#9c755f',\n '#bab0ab',\n ],\n padding1: 8,\n padding2: 12,\n padding3: 20,\n alpha90: 0.9,\n alpha65: 0.65,\n alpha45: 0.45,\n alpha25: 0.25,\n alpha10: 0.1,\n};\nconst defaults = create(tokens);\nexport const Academy = (options) => {\n return deepMix({}, defaults, {\n text: { text: { fontSize: 10 } },\n axis: {\n gridLineDash: [0, 0],\n gridLineWidth: 1,\n gridStroke: '#ddd',\n gridStrokeOpacity: 1,\n labelOpacity: 1,\n labelStrokeOpacity: 1,\n labelFontSize: 10,\n line: true,\n lineLineWidth: 1,\n lineStroke: '#888',\n lineStrokeOpacity: 1,\n tickLength: 5,\n tickStrokeOpacity: 1,\n titleOpacity: 1,\n titleStrokeOpacity: 1,\n titleFillOpacity: 1,\n titleFontSize: 11,\n titleFontWeight: 'bold',\n },\n axisLeft: {\n gridFilter: (_, i) => i !== 0,\n },\n axisRight: {\n gridFilter: (_, i) => i !== 0,\n },\n legendCategory: {\n itemLabelFillOpacity: 1,\n itemLabelFontSize: 10,\n itemValueFillOpacity: 1,\n itemValueFontSize: 10,\n titleFillOpacity: 1,\n titleFontSize: 11,\n titleFontWeight: 'bold',\n },\n legendContinuous: {\n handleLabelFontSize: 10,\n labelFillOpacity: 0.45,\n labelFontSize: 10,\n },\n label: {\n fontSize: 10,\n },\n innerLabel: {\n fontSize: 10,\n },\n htmlLabel: {\n fontSize: 10,\n },\n slider: {\n handleLabelFontSize: 10,\n trackFillOpacity: 0.05,\n },\n }, options);\n};\nAcademy.props = {};\n//# sourceMappingURL=academy.js.map","import { LinearAxis, rotateAxis } from './axis';\n/**\n * LinearAxis component bind to x scale.\n */\nexport const AxisX = (options) => {\n return (...args) => {\n // empirical value for crossPadding\n const axisX = LinearAxis(Object.assign({}, { crossPadding: 50 }, options))(...args);\n rotateAxis(axisX, options);\n return axisX;\n };\n};\nAxisX.props = Object.assign(Object.assign({}, LinearAxis.props), { defaultPosition: 'bottom' });\nexport function axisXConfig() { }\n//# sourceMappingURL=axisX.js.map","import { LinearAxis, rotateAxis } from './axis';\n/**\n * LinearAxis component bind to y scale.\n */\nexport const AxisY = (options) => {\n return (...args) => {\n const axisY = LinearAxis(Object.assign({}, { crossPadding: 10 }, options))(...args);\n rotateAxis(axisY, options);\n return axisY;\n };\n};\nAxisY.props = Object.assign(Object.assign({}, LinearAxis.props), { defaultPosition: 'left' });\n//# sourceMappingURL=axisY.js.map","export default (function () { });\n//# sourceMappingURL=noop.js.map","import isObject from './is-object';\nimport isString from './is-string';\nimport isNumber from './is-number';\n/**\n * https://github.com/developit/dlv/blob/master/index.js\n * @param obj\n * @param path\n * @param value\n */\nexport default (function (obj, path, value) {\n var o = obj;\n var keyArr = isString(path) ? path.split('.') : path;\n keyArr.forEach(function (key, idx) {\n // 不是最后一个\n if (idx < keyArr.length - 1) {\n if (!isObject(o[key])) {\n o[key] = isNumber(keyArr[idx + 1]) ? [] : {};\n }\n o = o[key];\n }\n else {\n o[key] = value;\n }\n });\n return obj;\n});\n//# sourceMappingURL=set.js.map","import { __assign, __extends, __read, __rest, __spreadArray } from \"tslib\";\nimport { ElementEvent } from '@antv/g';\nimport { clamp, debounce } from '@antv/util';\nimport { animate, onAnimateFinished } from '../../animation';\nimport { Component } from '../../core';\nimport { Group } from '../../shapes';\nimport { BBox, classNames, hide, scaleToPixel, select, show, splitStyle, subStyleProps, transpose, visibility, } from '../../util';\nimport { button } from '../marker/symbol';\nvar CLASS_NAMES = classNames({\n prevBtnGroup: 'prev-btn-group',\n prevBtn: 'prev-btn',\n nextBtnGroup: 'next-btn-group',\n nextBtn: 'next-btn',\n pageInfoGroup: 'page-info-group',\n pageInfo: 'page-info',\n playWindow: 'play-window',\n contentGroup: 'content-group',\n controller: 'controller',\n clipPath: 'clip-path',\n}, 'navigator');\nvar Navigator = /** @class */ (function (_super) {\n __extends(Navigator, _super);\n function Navigator(options) {\n var _this = _super.call(this, options, {\n x: 0,\n y: 0,\n animate: {\n easing: 'linear',\n duration: 200,\n fill: 'both',\n },\n buttonCursor: 'pointer',\n buttonFill: 'black',\n buttonD: button(0, 0, 6),\n buttonSize: 12,\n controllerPadding: 5,\n controllerSpacing: 5,\n formatter: function (curr, total) { return \"\".concat(curr, \"/\").concat(total); },\n defaultPage: 0,\n loop: false,\n orientation: 'horizontal',\n pageNumFill: 'black',\n pageNumFontSize: 12,\n pageNumTextAlign: 'start',\n pageNumTextBaseline: 'middle',\n }) || this;\n _this.playState = 'idle';\n _this.contentGroup = _this.appendChild(new Group({ class: CLASS_NAMES.contentGroup.name }));\n _this.playWindow = _this.contentGroup.appendChild(new Group({ class: CLASS_NAMES.playWindow.name }));\n _this.innerCurrPage = _this.defaultPage;\n return _this;\n }\n Object.defineProperty(Navigator.prototype, \"defaultPage\", {\n get: function () {\n var defaultPage = this.attributes.defaultPage;\n return clamp(defaultPage, 0, Math.max(this.pageViews.length - 1, 0));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Navigator.prototype, \"pageViews\", {\n get: function () {\n return this.playWindow.children;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Navigator.prototype, \"controllerShape\", {\n // todo fixme\n get: function () {\n return this.totalPages > 1 ? { width: 55, height: 0 } : { width: 0, height: 0 };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Navigator.prototype, \"pageShape\", {\n get: function () {\n var pageViews = this.pageViews;\n var _a = __read(transpose(pageViews.map(function (pageView) {\n var _a = pageView.getBBox(), width = _a.width, height = _a.height;\n return [width, height];\n })).map(function (arr) { return Math.max.apply(Math, __spreadArray([], __read(arr), false)); }), 2), maxWidth = _a[0], maxHeight = _a[1];\n var _b = this.attributes, _c = _b.pageWidth, pageWidth = _c === void 0 ? maxWidth : _c, _d = _b.pageHeight, pageHeight = _d === void 0 ? maxHeight : _d;\n return { pageWidth: pageWidth, pageHeight: pageHeight };\n },\n enumerable: false,\n configurable: true\n });\n Navigator.prototype.getContainer = function () {\n return this.playWindow;\n };\n Object.defineProperty(Navigator.prototype, \"totalPages\", {\n get: function () {\n return this.pageViews.length;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Navigator.prototype, \"currPage\", {\n get: function () {\n return this.innerCurrPage;\n },\n enumerable: false,\n configurable: true\n });\n Navigator.prototype.getBBox = function () {\n var _a = _super.prototype.getBBox.call(this), x = _a.x, y = _a.y;\n var controllerShape = this.controllerShape;\n var _b = this.pageShape, pageWidth = _b.pageWidth, pageHeight = _b.pageHeight;\n return new BBox(x, y, pageWidth + controllerShape.width, pageHeight);\n };\n Navigator.prototype.goTo = function (pageNum) {\n var _this = this;\n var animateOptions = this.attributes.animate;\n var _a = this, currPage = _a.currPage, playState = _a.playState, playWindow = _a.playWindow, pageViews = _a.pageViews;\n if (playState !== 'idle' || pageNum < 0 || pageViews.length <= 0 || pageNum >= pageViews.length)\n return null;\n pageViews[currPage].setLocalPosition(0, 0);\n this.prepareFollowingPage(pageNum);\n var _b = __read(this.getFollowingPageDiff(pageNum), 2), dx = _b[0], dy = _b[1];\n this.playState = 'running';\n var animation = animate(playWindow, [{ transform: \"translate(0, 0)\" }, { transform: \"translate(\".concat(-dx, \", \").concat(-dy, \")\") }], animateOptions);\n onAnimateFinished(animation, function () {\n _this.innerCurrPage = pageNum;\n _this.playState = 'idle';\n _this.setVisiblePages([pageNum]);\n _this.updatePageInfo();\n });\n return animation;\n };\n Navigator.prototype.prev = function () {\n var loop = this.attributes.loop;\n var pages = this.pageViews.length;\n var page = this.currPage;\n if (!loop && page <= 0)\n return null;\n var following = loop ? (page - 1 + pages) % pages : clamp(page - 1, 0, pages);\n return this.goTo(following);\n };\n Navigator.prototype.next = function () {\n var loop = this.attributes.loop;\n var pages = this.pageViews.length;\n var page = this.currPage;\n if (!loop && page >= pages - 1)\n return null;\n var following = loop ? (page + 1) % pages : clamp(page + 1, 0, pages);\n return this.goTo(following);\n };\n Navigator.prototype.renderClipPath = function (container) {\n var _a = this.pageShape, pageWidth = _a.pageWidth, pageHeight = _a.pageHeight;\n if (!pageWidth || !pageHeight) {\n this.contentGroup.style.clipPath = undefined;\n return;\n }\n this.clipPath = container.maybeAppendByClassName(CLASS_NAMES.clipPath, 'rect').styles({\n width: pageWidth,\n height: pageHeight,\n });\n this.contentGroup.attr('clipPath', this.clipPath.node());\n };\n Navigator.prototype.setVisiblePages = function (pages) {\n this.playWindow.children.forEach(function (page, index) {\n if (pages.includes(index))\n show(page);\n else\n hide(page);\n });\n };\n Navigator.prototype.adjustControllerLayout = function () {\n var _a = this, prevBtn = _a.prevBtnGroup, nextBtn = _a.nextBtnGroup, pageNum = _a.pageInfoGroup;\n var _b = this.attributes, orientation = _b.orientation, padding = _b.controllerPadding;\n var _c = pageNum.getBBox(), pW = _c.width, pH = _c.height;\n var _d = __read(orientation === 'horizontal' ? [-180, 0] : [-90, 90], 2), r1 = _d[0], r2 = _d[1];\n prevBtn.setLocalEulerAngles(r1);\n nextBtn.setLocalEulerAngles(r2);\n var _e = prevBtn.getBBox(), bpW = _e.width, bpH = _e.height;\n var _f = nextBtn.getBBox(), bnW = _f.width, bnH = _f.height;\n var maxWidth = Math.max(bpW, pW, bnW);\n var _g = orientation === 'horizontal'\n ? {\n offset: [\n [0, 0],\n [bpW / 2 + padding, 0],\n [bpW + pW + padding * 2, 0],\n ],\n textAlign: 'start',\n }\n : {\n offset: [\n [maxWidth / 2, -bpH - padding],\n [maxWidth / 2, 0],\n [maxWidth / 2, bnH + padding],\n ],\n textAlign: 'center',\n }, _h = __read(_g.offset, 3), _j = __read(_h[0], 2), o1x = _j[0], o1y = _j[1], _k = __read(_h[1], 2), o2x = _k[0], o2y = _k[1], _l = __read(_h[2], 2), o3x = _l[0], o3y = _l[1], textAlign = _g.textAlign;\n var pageNumText = pageNum.querySelector('text');\n pageNumText && (pageNumText.style.textAlign = textAlign);\n prevBtn.setLocalPosition(o1x, o1y);\n pageNum.setLocalPosition(o2x, o2y);\n nextBtn.setLocalPosition(o3x, o3y);\n };\n Navigator.prototype.updatePageInfo = function () {\n var _a;\n var _b = this, currPage = _b.currPage, pageViews = _b.pageViews, formatter = _b.attributes.formatter;\n if (pageViews.length < 2)\n return;\n (_a = this.pageInfoGroup.querySelector(CLASS_NAMES.pageInfo.class)) === null || _a === void 0 ? void 0 : _a.attr('text', formatter(currPage + 1, pageViews.length));\n this.adjustControllerLayout();\n };\n Navigator.prototype.getFollowingPageDiff = function (pageNum) {\n var currPage = this.currPage;\n if (currPage === pageNum)\n return [0, 0];\n var orientation = this.attributes.orientation;\n var _a = this.pageShape, pageWidth = _a.pageWidth, pageHeight = _a.pageHeight;\n var sign = pageNum < currPage ? -1 : 1;\n return orientation === 'horizontal' ? [sign * pageWidth, 0] : [0, sign * pageHeight];\n };\n Navigator.prototype.prepareFollowingPage = function (pageNum) {\n var _a = this, currPage = _a.currPage, pageViews = _a.pageViews;\n this.setVisiblePages([pageNum, currPage]);\n if (pageNum !== currPage) {\n var _b = __read(this.getFollowingPageDiff(pageNum), 2), dx = _b[0], dy = _b[1];\n pageViews[pageNum].setLocalPosition(dx, dy);\n }\n };\n Navigator.prototype.renderController = function (container) {\n var _this = this;\n var spacing = this.attributes.controllerSpacing;\n var _a = this.pageShape, pageWidth = _a.pageWidth, pageHeight = _a.pageHeight;\n var visible = this.pageViews.length >= 2;\n var group = container.maybeAppendByClassName(CLASS_NAMES.controller, 'g');\n visibility(group.node(), visible);\n if (!visible)\n return;\n var style = subStyleProps(this.attributes, 'button');\n var textStyle = subStyleProps(this.attributes, 'pageNum');\n var _b = __read(splitStyle(style), 2), _c = _b[0], groupStyle = _b[1], size = _c.size, pathStyle = __rest(_c, [\"size\"]);\n var whetherToAddEventListener = !group.select(CLASS_NAMES.prevBtnGroup.class).node();\n var prevBtnGroup = group.maybeAppendByClassName(CLASS_NAMES.prevBtnGroup, 'g').styles(groupStyle);\n this.prevBtnGroup = prevBtnGroup.node();\n var prevBtn = prevBtnGroup.maybeAppendByClassName(CLASS_NAMES.prevBtn, 'path');\n var nextBtnGroup = group.maybeAppendByClassName(CLASS_NAMES.nextBtnGroup, 'g').styles(groupStyle);\n this.nextBtnGroup = nextBtnGroup.node();\n var nextBtn = nextBtnGroup.maybeAppendByClassName(CLASS_NAMES.nextBtn, 'path');\n [prevBtn, nextBtn].forEach(function (btn) {\n btn.styles(__assign(__assign({}, pathStyle), { transformOrigin: 'center' }));\n scaleToPixel(btn.node(), size, true);\n });\n var pageInfoGroup = group.maybeAppendByClassName(CLASS_NAMES.pageInfoGroup, 'g');\n this.pageInfoGroup = pageInfoGroup.node();\n pageInfoGroup.maybeAppendByClassName(CLASS_NAMES.pageInfo, 'text').styles(textStyle);\n this.updatePageInfo();\n // group.node().style.transform = `translate(${pageWidth + spacing}, ${pageHeight / 2})`;\n // put it on the right side of the container\n group.node().setLocalPosition(pageWidth + spacing, pageHeight / 2);\n if (whetherToAddEventListener) {\n this.prevBtnGroup.addEventListener('click', function () {\n _this.prev();\n });\n this.nextBtnGroup.addEventListener('click', function () {\n _this.next();\n });\n }\n };\n Navigator.prototype.render = function (attributes, container) {\n var _a = attributes.x, x = _a === void 0 ? 0 : _a, _b = attributes.y, y = _b === void 0 ? 0 : _b;\n this.attr('transform', \"translate(\".concat(x, \", \").concat(y, \")\"));\n /**\n * container\n * |- contentGroup (with clip path)\n * |- playWindow (with animation)\n * |- pages\n * |- clipPath\n */\n var containerSelection = select(container);\n this.renderClipPath(containerSelection);\n this.renderController(containerSelection);\n this.setVisiblePages([this.defaultPage]);\n this.goTo(this.defaultPage);\n };\n Navigator.prototype.bindEvents = function () {\n var _this = this;\n var render = debounce(function () { return _this.render(_this.attributes, _this); }, 50);\n this.playWindow.addEventListener(ElementEvent.INSERTED, render);\n this.playWindow.addEventListener(ElementEvent.REMOVED, render);\n };\n return Navigator;\n}(Component));\nexport { Navigator };\n//# sourceMappingURL=index.js.map","export function transpose(m) {\n var _a;\n return ((_a = m[0]) === null || _a === void 0 ? void 0 : _a.map(function (x, i) { return m.map(function (x) { return x[i]; }); })) || [];\n}\n//# sourceMappingURL=transpose.js.map","import { __assign, __extends, __read, __rest } from \"tslib\";\nimport { Circle, } from '@antv/g';\nimport { Marker } from '../../marker';\nimport { Component } from '../../../core';\nimport { classNames, copyAttributes, ellipsisIt, ifShow, parseSeriesAttr, renderExtDo, scaleToPixel, select, subStyleProps, } from '../../../util';\nvar CLASS_NAMES = classNames({\n layout: 'flex',\n markerGroup: 'marker-group',\n marker: 'marker',\n labelGroup: 'label-group',\n label: 'label',\n valueGroup: 'value-group',\n value: 'value',\n backgroundGroup: 'background-group',\n background: 'background',\n}, 'legend-category-item');\nfunction styleOfMarker(group) {\n var marker = group.querySelector(CLASS_NAMES.marker.class);\n if (marker)\n return marker.style;\n return {};\n}\nvar CategoryItem = /** @class */ (function (_super) {\n __extends(CategoryItem, _super);\n function CategoryItem(options) {\n return _super.call(this, options, {\n span: [1, 1],\n marker: function () { return new Circle({ style: { r: 6 } }); },\n markerSize: 10,\n labelFill: '#646464',\n valueFill: '#646464',\n labelFontSize: 12,\n valueFontSize: 12,\n labelTextBaseline: 'middle',\n valueTextBaseline: 'middle',\n }) || this;\n }\n Object.defineProperty(CategoryItem.prototype, \"showValue\", {\n get: function () {\n var valueText = this.attributes.valueText;\n if (!valueText)\n return false;\n if (typeof valueText === 'string' || typeof valueText === 'number')\n return valueText !== '';\n if (typeof valueText === 'function')\n return true;\n return valueText.attr('text') !== '';\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CategoryItem.prototype, \"actualSpace\", {\n get: function () {\n var label = this.labelGroup;\n var value = this.valueGroup;\n var markerSize = this.attributes.markerSize;\n var _a = label.node().getBBox(), labelWidth = _a.width, labelHeight = _a.height;\n var _b = value.node().getBBox(), valueWidth = _b.width, valueHeight = _b.height;\n return {\n markerWidth: markerSize,\n labelWidth: labelWidth,\n valueWidth: valueWidth,\n height: Math.max(markerSize, labelHeight, valueHeight),\n };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CategoryItem.prototype, \"span\", {\n get: function () {\n var span = this.attributes.span;\n if (!span)\n return [1, 1];\n var _a = __read(parseSeriesAttr(span), 2), span1 = _a[0], innerSpan = _a[1];\n var span2 = this.showValue ? innerSpan : 0;\n var basis = span1 + span2;\n return [span1 / basis, span2 / basis];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CategoryItem.prototype, \"shape\", {\n get: function () {\n var _a;\n var _b = this.attributes, markerSize = _b.markerSize, fullWidth = _b.width;\n var actualSpace = this.actualSpace;\n var markerWidth = actualSpace.markerWidth, height = actualSpace.height;\n var _c = this.actualSpace, labelWidth = _c.labelWidth, valueWidth = _c.valueWidth;\n var _d = __read(this.spacing, 2), spacing1 = _d[0], spacing2 = _d[1];\n if (fullWidth) {\n var width_1 = fullWidth - markerSize - spacing1 - spacing2;\n var _e = __read(this.span, 2), span1 = _e[0], span2 = _e[1];\n _a = __read([span1 * width_1, span2 * width_1], 2), labelWidth = _a[0], valueWidth = _a[1];\n }\n var width = markerWidth + labelWidth + valueWidth + spacing1 + spacing2;\n return { width: width, height: height, markerWidth: markerWidth, labelWidth: labelWidth, valueWidth: valueWidth };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CategoryItem.prototype, \"spacing\", {\n get: function () {\n var spacing = this.attributes.spacing;\n if (!spacing)\n return [0, 0];\n var _a = __read(parseSeriesAttr(spacing), 2), spacing1 = _a[0], spacing2 = _a[1];\n if (this.showValue)\n return [spacing1, spacing2];\n return [spacing1, 0];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CategoryItem.prototype, \"layout\", {\n get: function () {\n var _a = this.shape, markerWidth = _a.markerWidth, labelWidth = _a.labelWidth, valueWidth = _a.valueWidth, width = _a.width, height = _a.height;\n var _b = __read(this.spacing, 2), spacing1 = _b[0], spacing2 = _b[1];\n return {\n height: height,\n width: width,\n markerWidth: markerWidth,\n labelWidth: labelWidth,\n valueWidth: valueWidth,\n position: [markerWidth / 2, markerWidth + spacing1, markerWidth + labelWidth + spacing1 + spacing2],\n };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CategoryItem.prototype, \"scaleSize\", {\n get: function () {\n var markerShapeStyle = styleOfMarker(this.markerGroup.node());\n var _a = this.attributes, markerSize = _a.markerSize, _b = _a.markerStrokeWidth, markerStrokeWidth = _b === void 0 ? markerShapeStyle.strokeWidth : _b, _c = _a.markerLineWidth, markerLineWidth = _c === void 0 ? markerShapeStyle.lineWidth : _c, _d = _a.markerStroke, markerStroke = _d === void 0 ? markerShapeStyle.stroke : _d;\n // empirical value\n var strokeWidth = +(markerStrokeWidth || markerLineWidth || (markerStroke ? 1 : 0)) * Math.sqrt(2);\n var _e = this.markerGroup.node().getBBox(), width = _e.width, height = _e.height;\n return (1 - strokeWidth / Math.max(width, height)) * markerSize;\n },\n enumerable: false,\n configurable: true\n });\n CategoryItem.prototype.renderMarker = function (container) {\n var _this = this;\n var marker = this.attributes.marker;\n var style = subStyleProps(this.attributes, 'marker');\n this.markerGroup = container.maybeAppendByClassName(CLASS_NAMES.markerGroup, 'g').style('zIndex', 0);\n ifShow(!!marker, this.markerGroup, function () {\n var _a;\n var parent = _this.markerGroup.node();\n var oldMarker = (_a = parent.childNodes) === null || _a === void 0 ? void 0 : _a[0];\n var newMarker = typeof marker === 'string'\n ? new Marker({ style: { symbol: marker }, className: CLASS_NAMES.marker.name })\n : marker();\n if (!oldMarker) {\n if (!(newMarker instanceof Marker))\n select(newMarker).attr('className', CLASS_NAMES.marker.name).styles(style);\n parent.appendChild(newMarker);\n }\n else if (newMarker.nodeName === oldMarker.nodeName) {\n if (oldMarker instanceof Marker)\n oldMarker.update(__assign(__assign({}, style), { symbol: marker }));\n else {\n copyAttributes(oldMarker, newMarker);\n select(oldMarker).styles(style);\n }\n }\n else {\n oldMarker.remove();\n select(newMarker).attr('className', CLASS_NAMES.marker.name).styles(style);\n parent.appendChild(newMarker);\n }\n // record the scale of marker\n _this.markerGroup.node().scale(1 / _this.markerGroup.node().getScale()[0]);\n var scale = scaleToPixel(_this.markerGroup.node(), _this.scaleSize, true);\n _this.markerGroup.node().style._transform = \"scale(\".concat(scale, \")\");\n });\n };\n CategoryItem.prototype.renderLabel = function (container) {\n var _a = subStyleProps(this.attributes, 'label'), label = _a.text, style = __rest(_a, [\"text\"]);\n this.labelGroup = container.maybeAppendByClassName(CLASS_NAMES.labelGroup, 'g').style('zIndex', 0);\n this.labelGroup.maybeAppendByClassName(CLASS_NAMES.label, function () { return renderExtDo(label); }).styles(style);\n };\n CategoryItem.prototype.renderValue = function (container) {\n var _this = this;\n var _a = subStyleProps(this.attributes, 'value'), value = _a.text, style = __rest(_a, [\"text\"]);\n this.valueGroup = container.maybeAppendByClassName(CLASS_NAMES.valueGroup, 'g').style('zIndex', 0);\n ifShow(this.showValue, this.valueGroup, function () {\n _this.valueGroup.maybeAppendByClassName(CLASS_NAMES.value, function () { return renderExtDo(value); }).styles(style);\n });\n };\n CategoryItem.prototype.renderBackground = function (container) {\n var _a = this.shape, width = _a.width, height = _a.height;\n var style = subStyleProps(this.attributes, 'background');\n this.background = container.maybeAppendByClassName(CLASS_NAMES.backgroundGroup, 'g').style('zIndex', -1);\n this.background.maybeAppendByClassName(CLASS_NAMES.background, 'rect').styles(__assign({ width: width, height: height }, style));\n };\n CategoryItem.prototype.adjustLayout = function () {\n var _a = this.layout, labelWidth = _a.labelWidth, valueWidth = _a.valueWidth, height = _a.height, _b = __read(_a.position, 3), markerX = _b[0], labelX = _b[1], valueX = _b[2];\n var halfHeight = height / 2;\n // console.log(this.markerGroup.node().style._transform);\n this.markerGroup.styles({\n transform: \"translate(\".concat(markerX, \", \").concat(halfHeight, \")\").concat(this.markerGroup.node().style._transform),\n });\n this.labelGroup.styles({ transform: \"translate(\".concat(labelX, \", \").concat(halfHeight, \")\") });\n ellipsisIt(this.labelGroup.select(CLASS_NAMES.label.class).node(), Math.ceil(labelWidth));\n if (this.showValue) {\n this.valueGroup.styles({ transform: \"translate(\".concat(valueX, \", \").concat(halfHeight, \")\") });\n ellipsisIt(this.valueGroup.select(CLASS_NAMES.value.class).node(), Math.ceil(valueWidth));\n }\n };\n CategoryItem.prototype.render = function (attributes, container) {\n var ctn = select(container);\n var _a = attributes.x, x = _a === void 0 ? 0 : _a, _b = attributes.y, y = _b === void 0 ? 0 : _b;\n ctn.styles({ transform: \"translate(\".concat(x, \", \").concat(y, \")\") });\n this.renderMarker(ctn);\n this.renderLabel(ctn);\n this.renderValue(ctn);\n this.renderBackground(ctn);\n this.adjustLayout();\n };\n return CategoryItem;\n}(Component));\nexport { CategoryItem };\n//# sourceMappingURL=item.js.map","import { __assign, __extends, __read, __spreadArray } from \"tslib\";\nimport { CustomEvent } from '@antv/g';\nimport { noop, set } from '@antv/util';\nimport { Component } from '../../../core';\nimport { Group } from '../../../shapes';\nimport { classNames, deepAssign, getCallbackValue, groupBy, select, subStyleProps, } from '../../../util';\nimport { Navigator } from '../../navigator';\nimport { ifHorizontal } from '../utils';\nimport { CategoryItem } from './item';\nvar CLASS_NAMES = classNames({\n page: 'item-page',\n navigator: 'navigator',\n item: 'item',\n}, 'items');\n/**\n * if value exists, it need to follow rule, otherwise, return default value\n * @param value\n * @param rule\n * @param defaultValue\n * @returns\n */\nvar ifSatisfied = function (value, rule, defaultValue) {\n if (defaultValue === void 0) { defaultValue = true; }\n if (value) {\n return rule(value);\n }\n return defaultValue;\n};\nvar CategoryItems = /** @class */ (function (_super) {\n __extends(CategoryItems, _super);\n function CategoryItems(options) {\n var _this = _super.call(this, options, {\n data: [],\n gridRow: Infinity,\n gridCol: undefined,\n padding: 0,\n width: 1000,\n height: 100,\n rowPadding: 0,\n colPadding: 0,\n layout: 'flex',\n orientation: 'horizontal',\n click: noop,\n mouseenter: noop,\n mouseleave: noop,\n }) || this;\n _this.navigatorShape = [0, 0];\n return _this;\n }\n Object.defineProperty(CategoryItems.prototype, \"pageViews\", {\n get: function () {\n return this.navigator.getContainer();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CategoryItems.prototype, \"grid\", {\n get: function () {\n var _a = this.attributes, gridRow = _a.gridRow, gridCol = _a.gridCol, data = _a.data;\n if (!gridRow && !gridCol)\n throw new Error('gridRow and gridCol can not be set null at the same time');\n if (!!gridRow && !!gridCol)\n return [gridRow, gridCol];\n if (gridRow)\n return [gridRow, data.length];\n return [data.length, gridCol]; // !!gridCol\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(CategoryItems.prototype, \"renderData\", {\n get: function () {\n var _a = this.attributes, data = _a.data, layout = _a.layout;\n var style = subStyleProps(this.attributes, 'item');\n var d = data.map(function (datum, index) {\n var _a = datum.id, id = _a === void 0 ? index : _a, labelText = datum.label, valueText = datum.value;\n return {\n id: \"\".concat(id),\n index: index,\n style: __assign({ layout: layout, labelText: labelText, valueText: valueText }, Object.fromEntries(Object.entries(style).map(function (_a) {\n var _b = __read(_a, 2), key = _b[0], val = _b[1];\n return [key, getCallbackValue(val, [datum, index, data])];\n }))),\n };\n });\n return d;\n },\n enumerable: false,\n configurable: true\n });\n CategoryItems.prototype.getGridLayout = function () {\n var _this = this;\n var _a = this.attributes, orientation = _a.orientation, width = _a.width, rowPadding = _a.rowPadding, colPadding = _a.colPadding;\n var _b = __read(this.navigatorShape, 1), navWidth = _b[0];\n var _c = __read(this.grid, 2), gridRow = _c[0], gridCol = _c[1];\n var pageSize = gridCol * gridRow;\n var prevOffset = 0;\n return this.pageViews.children.map(function (item, index) {\n var _a, _b;\n // calc page, row and column\n var page = Math.floor(index / pageSize);\n var pageIndex = index % pageSize;\n var dir = _this.ifHorizontal(gridCol, gridRow);\n var pos = [Math.floor(pageIndex / dir), pageIndex % dir];\n if (orientation === 'vertical')\n pos.reverse();\n var _c = __read(pos, 2), row = _c[0], col = _c[1];\n // calc x, y and shape\n var colWidth = (width - navWidth - (gridCol - 1) * colPadding) / gridCol;\n // const rowHeight = getRenderBBox(item).height;\n var rowHeight = item.getBBox().height;\n var _d = __read([0, 0], 2), x = _d[0], y = _d[1];\n if (orientation === 'horizontal') {\n _a = __read([prevOffset, row * (rowHeight + rowPadding)], 2), x = _a[0], y = _a[1];\n prevOffset = col === gridCol - 1 ? 0 : prevOffset + colWidth + colPadding;\n }\n else {\n _b = __read([col * (colWidth + colPadding), prevOffset], 2), x = _b[0], y = _b[1];\n prevOffset = row === gridRow - 1 ? 0 : prevOffset + rowHeight + rowPadding;\n }\n return { page: page, index: index, row: row, col: col, pageIndex: pageIndex, width: colWidth, height: rowHeight, x: x, y: y };\n });\n };\n CategoryItems.prototype.getFlexLayout = function () {\n var _a = this.attributes, maxWidth = _a.width, maxHeight = _a.height, rowPadding = _a.rowPadding, cP = _a.colPadding;\n var _b = __read(this.navigatorShape, 1), navWidth = _b[0];\n var _c = __read(this.grid, 2), gridRow = _c[0], gridCol = _c[1];\n var _d = __read([maxWidth - navWidth, maxHeight], 2), limitWidth = _d[0], limitHeight = _d[1];\n var _e = __read([0, 0, 0, 0, 0, 0, 0, 0], 8), x = _e[0], y = _e[1], page = _e[2], pageIndex = _e[3], col = _e[4], row = _e[5], prevWidth = _e[6], prevHeight = _e[7];\n return this.pageViews.children.map(function (item, index) {\n var _a, _b, _c, _d;\n // const { width, height } = getRenderBBox(item);\n var _e = item.getBBox(), width = _e.width, height = _e.height;\n var colPadding = prevWidth === 0 ? 0 : cP;\n // assume that every item has the same height\n var nextWidth = prevWidth + colPadding + width;\n // inline\n if (nextWidth <= limitWidth && ifSatisfied(col, function (c) { return c < gridCol; })) {\n _a = __read([prevWidth + colPadding, prevHeight, nextWidth], 3), x = _a[0], y = _a[1], prevWidth = _a[2];\n return { width: width, height: height, x: x, y: y, page: page, index: index, pageIndex: pageIndex++, row: row, col: col++ };\n }\n // wrap\n _b = __read([row + 1, 0, 0, prevHeight + height + rowPadding], 4), row = _b[0], col = _b[1], prevWidth = _b[2], prevHeight = _b[3];\n var nextHeight = prevHeight + height;\n if (nextHeight <= limitHeight && ifSatisfied(row, function (r) { return r < gridRow; })) {\n _c = __read([prevWidth, prevHeight, width], 3), x = _c[0], y = _c[1], prevWidth = _c[2];\n return { width: width, height: height, x: x, y: y, page: page, index: index, pageIndex: pageIndex++, row: row, col: col++ };\n }\n // paging\n _d = __read([0, 0, width, 0, page + 1, 0, 0, 0], 8), x = _d[0], y = _d[1], prevWidth = _d[2], prevHeight = _d[3], page = _d[4], pageIndex = _d[5], row = _d[6], col = _d[7];\n return { width: width, height: height, x: x, y: y, page: page, index: index, pageIndex: pageIndex++, row: row, col: col++ };\n });\n };\n Object.defineProperty(CategoryItems.prototype, \"itemsLayout\", {\n get: function () {\n this.navigatorShape = [0, 0];\n var cb = this.attributes.layout === 'grid' ? this.getGridLayout : this.getFlexLayout;\n var layout = cb.call(this);\n // re layout\n if (layout.slice(-1)[0].page > 0) {\n this.navigatorShape = [55, 0];\n return cb.call(this);\n }\n return layout;\n },\n enumerable: false,\n configurable: true\n });\n CategoryItems.prototype.ifHorizontal = function (a, b) {\n var orientation = this.attributes.orientation;\n return ifHorizontal(orientation, a, b);\n };\n CategoryItems.prototype.flattenPage = function (container) {\n container.querySelectorAll(CLASS_NAMES.item.class).forEach(function (item) {\n container.appendChild(item);\n });\n container.querySelectorAll(CLASS_NAMES.page.class).forEach(function (page) {\n var removedPage = container.removeChild(page);\n removedPage.destroy();\n });\n };\n CategoryItems.prototype.renderItems = function (container) {\n var _a = this.attributes, click = _a.click, mouseenter = _a.mouseenter, mouseleave = _a.mouseleave;\n this.flattenPage(container);\n var dispatchCustomEvent = this.dispatchCustomEvent.bind(this);\n select(container)\n .selectAll(CLASS_NAMES.item.class)\n .data(this.renderData, function (d) { return d.id; })\n .join(function (enter) {\n return enter\n .append(function (_a) {\n var style = _a.style;\n return new CategoryItem({ style: style });\n })\n .attr('className', CLASS_NAMES.item.name)\n .on('click', function () {\n click === null || click === void 0 ? void 0 : click(this);\n dispatchCustomEvent('itemClick', { item: this });\n })\n .on('pointerenter', function () {\n mouseenter === null || mouseenter === void 0 ? void 0 : mouseenter(this);\n dispatchCustomEvent('itemMouseenter', { item: this });\n })\n .on('pointerleave', function () {\n mouseleave === null || mouseleave === void 0 ? void 0 : mouseleave(this);\n dispatchCustomEvent('itemMouseleave', { item: this });\n });\n }, function (update) {\n return update.each(function (_a) {\n var style = _a.style;\n this.update(style);\n });\n }, function (exit) { return exit.remove(); });\n };\n CategoryItems.prototype.relayoutNavigator = function () {\n var _a;\n var _b = this.attributes, layout = _b.layout, width = _b.width;\n var height = ((_a = this.pageViews.children[0]) === null || _a === void 0 ? void 0 : _a.getBBox().height) || 0;\n var _c = __read(this.navigatorShape, 2), navWidth = _c[0], navHeight = _c[1];\n this.navigator.update(layout === 'grid' ? { pageWidth: width - navWidth, pageHeight: height - navHeight } : {});\n };\n CategoryItems.prototype.adjustLayout = function () {\n var _this = this;\n var itemsLayouts = Object.entries(groupBy(this.itemsLayout, 'page')).map(function (_a) {\n var _b = __read(_a, 2), page = _b[0], layouts = _b[1];\n return ({\n page: page,\n layouts: layouts,\n });\n });\n var categoryItems = __spreadArray([], __read(this.navigator.getContainer().children), false);\n itemsLayouts.forEach(function (_a) {\n var layouts = _a.layouts;\n var page = _this.pageViews.appendChild(new Group({ className: CLASS_NAMES.page.name }));\n layouts.forEach(function (layout) {\n var x = layout.x, y = layout.y, index = layout.index, width = layout.width, height = layout.height;\n var item = categoryItems[index];\n // @ts-ignore\n page.appendChild(item);\n set(item, '__layout__', layout);\n item.update({ x: x, y: y, width: width, height: height });\n });\n });\n this.relayoutNavigator();\n };\n CategoryItems.prototype.renderNavigator = function (container) {\n var orientation = this.attributes.orientation;\n var navStyle = subStyleProps(this.attributes, 'nav');\n var style = deepAssign({ orientation: orientation }, navStyle);\n var that = this;\n container\n .selectAll(CLASS_NAMES.navigator.class)\n .data(['nav'])\n .join(function (enter) {\n return enter\n .append(function () { return new Navigator({ style: style }); })\n .attr('className', CLASS_NAMES.navigator.name)\n .each(function () {\n that.navigator = this;\n });\n }, function (update) {\n return update.each(function () {\n this.update(style);\n });\n }, function (exit) { return exit.remove(); });\n return this.navigator;\n };\n CategoryItems.prototype.getBBox = function () {\n return this.navigator.getBBox();\n };\n CategoryItems.prototype.render = function (attributes, container) {\n var data = this.attributes.data;\n if (!data || data.length === 0)\n return;\n /**\n * 1. render items\n * 2. paging\n * 3. layout\n */\n var navigator = this.renderNavigator(select(container));\n this.renderItems(navigator.getContainer());\n this.adjustLayout();\n };\n CategoryItems.prototype.dispatchCustomEvent = function (type, payload) {\n var evt = new CustomEvent(type, {\n detail: payload,\n });\n this.dispatchEvent(evt);\n };\n return CategoryItems;\n}(Component));\nexport { CategoryItems };\n//# sourceMappingURL=items.js.map","export function groupBy(source, by) {\n return source.reduce(function (acc, curr) {\n (acc[curr[by]] = acc[curr[by]] || []).push(curr);\n return acc;\n }, {});\n}\n//# sourceMappingURL=group-by.js.map","import { __assign, __extends, __read } from \"tslib\";\nimport { Component } from '../../core';\nimport { BBox, select, splitStyle, subStyleProps } from '../../util';\nimport { getBBox, Title } from '../title';\nimport { CategoryItems } from './category/items';\nimport { CATEGORY_DEFAULT_OPTIONS, CLASS_NAMES } from './constant';\nvar Category = /** @class */ (function (_super) {\n __extends(Category, _super);\n function Category(options) {\n return _super.call(this, options, CATEGORY_DEFAULT_OPTIONS) || this;\n }\n Category.prototype.renderTitle = function (container, width, height) {\n var _a = this.attributes, showTitle = _a.showTitle, titleText = _a.titleText;\n var style = subStyleProps(this.attributes, 'title');\n var _b = __read(splitStyle(style), 2), titleStyle = _b[0], groupStyle = _b[1];\n this.titleGroup = container.maybeAppendByClassName(CLASS_NAMES.titleGroup, 'g').styles(groupStyle);\n var finalTitleStyle = __assign(__assign({ width: width, height: height }, titleStyle), { text: showTitle ? titleText : '' });\n this.title = this.titleGroup\n .maybeAppendByClassName(CLASS_NAMES.title, function () { return new Title({ style: finalTitleStyle }); })\n .update(finalTitleStyle);\n };\n Category.prototype.renderItems = function (container, bbox) {\n var x = bbox.x, y = bbox.y, width = bbox.width, height = bbox.height;\n var style = subStyleProps(this.attributes, 'title', true);\n var _a = __read(splitStyle(style), 2), partialItemStyle = _a[0], groupStyle = _a[1];\n // overwrite width and height to available space\n // overwrite x and y to 0\n var itemStyle = __assign(__assign({}, partialItemStyle), { width: width, height: height, x: 0, y: 0 });\n this.itemsGroup = container\n .maybeAppendByClassName(CLASS_NAMES.itemsGroup, 'g')\n .styles(__assign(__assign({}, groupStyle), { transform: \"translate(\".concat(x, \", \").concat(y, \")\") }));\n var that = this;\n this.itemsGroup\n .selectAll(CLASS_NAMES.items.class)\n .data(['items'])\n .join(function (enter) {\n return enter\n .append(function () { return new CategoryItems({ style: itemStyle }); })\n .attr('className', CLASS_NAMES.items.name)\n .each(function () {\n that.items = select(this);\n });\n }, function (update) { return update.update(itemStyle); }, function (exit) { return exit.remove(); });\n };\n Category.prototype.adjustLayout = function () {\n var showTitle = this.attributes.showTitle;\n if (showTitle) {\n var _a = this.title.node().getAvailableSpace(), x = _a.x, y = _a.y;\n this.itemsGroup.node().style.transform = \"translate(\".concat(x, \", \").concat(y, \")\");\n }\n };\n Object.defineProperty(Category.prototype, \"availableSpace\", {\n get: function () {\n var _a = this.attributes, showTitle = _a.showTitle, width = _a.width, height = _a.height;\n if (!showTitle)\n return new BBox(0, 0, width, height);\n return this.title.node().getAvailableSpace();\n },\n enumerable: false,\n configurable: true\n });\n Category.prototype.getBBox = function () {\n var _a, _b;\n var title = (_a = this.title) === null || _a === void 0 ? void 0 : _a.node();\n var items = (_b = this.items) === null || _b === void 0 ? void 0 : _b.node();\n if (!title || !items)\n return _super.prototype.getBBox.call(this);\n return getBBox(title, items);\n };\n Category.prototype.render = function (attributes, container) {\n var _a = this.attributes, width = _a.width, height = _a.height, _b = _a.x, x = _b === void 0 ? 0 : _b, _c = _a.y, y = _c === void 0 ? 0 : _c;\n var ctn = select(container);\n container.style.transform = \"translate(\".concat(x, \", \").concat(y, \")\");\n this.renderTitle(ctn, width, height);\n this.renderItems(ctn, this.availableSpace);\n this.adjustLayout();\n };\n return Category;\n}(Component));\nexport { Category };\n//# sourceMappingURL=category.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Category } from '@antv/component';\nimport { last } from '@antv/util';\nimport { format } from '@antv/vendor/d3-format';\nimport { Identity } from '@antv/scale';\nimport { useMarker } from '../utils/marker';\nimport { adaptor, domainOf, LegendCategoryLayout, inferComponentLayout, inferComponentShape, scaleOf, titleContent, } from './utils';\nfunction inferShape(scales, markState) {\n const shapeScale = scaleOf(scales, 'shape');\n const colorScale = scaleOf(scales, 'color');\n // NOTE!!!\n // scaleOrdinal.map will mute domain.\n const shapeScale1 = shapeScale ? shapeScale.clone() : null;\n // Infer the main shape if multiple marks are used.\n const shapes = [];\n for (const [mark, state] of markState) {\n const namespace = mark.type;\n const domain = (colorScale === null || colorScale === void 0 ? void 0 : colorScale.getOptions().domain.length) > 0\n ? colorScale === null || colorScale === void 0 ? void 0 : colorScale.getOptions().domain\n : state.data;\n const shape = domain.map((d, i) => {\n var _a;\n if (shapeScale1)\n return shapeScale1.map(d || 'point');\n return ((_a = mark === null || mark === void 0 ? void 0 : mark.style) === null || _a === void 0 ? void 0 : _a.shape) || state.defaultShape || 'point';\n });\n if (typeof namespace === 'string')\n shapes.push([namespace, shape]);\n }\n if (shapes.length === 0)\n return ['point', ['point']];\n if (shapes.length === 1)\n return shapes[0];\n if (!shapeScale)\n return shapes[0];\n // Evaluate the maximum likelihood of shape\n const { range } = shapeScale.getOptions();\n return shapes\n .map(([namespace, shape]) => {\n let sum = 0;\n for (let i = 0; i < shapes.length; i++) {\n const targetShape = range[i % range.length];\n if (shape[i] === targetShape)\n sum++;\n }\n return [sum / shape.length, [namespace, shape]];\n })\n .sort((a, b) => b[0] - a[0])[0][1];\n}\nfunction inferItemMarker(options, context) {\n const { scales, library, markState } = context;\n const [mark, shapes] = inferShape(scales, markState);\n const { itemMarker, itemMarkerSize: size } = options;\n const create = (name, d) => {\n var _a, _b, _c;\n const marker = ((_c = (_b = (_a = library[`mark.${mark}`]) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.shape[name]) === null || _c === void 0 ? void 0 : _c.props.defaultMarker) || last(name.split('.'));\n const radius = typeof size === 'function' ? size(d) : size;\n return () => useMarker(marker, { color: d.color })(0, 0, radius);\n };\n const shapeOf = (i) => `${shapes[i]}`;\n const shapeScale = scaleOf(scales, 'shape');\n if (shapeScale && !itemMarker)\n return (d, i) => create(shapeOf(i), d);\n if (typeof itemMarker === 'function') {\n return (d, i) => {\n // @todo Fix this in GUI.\n // It should pass primitive value rather object.\n const node = itemMarker(d.id, i);\n if (typeof node === 'string')\n return create(node, d);\n return node;\n };\n }\n return (d, i) => create(itemMarker || shapeOf(i), d);\n}\nfunction inferItemMarkerOpacity(scales) {\n const scale = scaleOf(scales, 'opacity');\n if (scale) {\n const { range } = scale.getOptions();\n return (d, i) => range[i];\n }\n return undefined;\n}\nfunction inferItemMarkerSize(scales, defaults) {\n const scale = scaleOf(scales, 'size');\n if (scale instanceof Identity)\n return scale.map(NaN) * 2;\n return defaults;\n}\nfunction inferItemMarkerLineWidth(options, context) {\n const { scales, markState } = context;\n const [mark, shapes] = inferShape(scales, markState);\n const { itemMarker, itemMarkerLineWidth } = options;\n // If user explicitly set itemMarkerLineWidth, use it\n if (itemMarkerLineWidth !== undefined) {\n return itemMarkerLineWidth;\n }\n // Define line-based shapes that should have thicker line width\n const lineShapes = [\n 'line',\n 'hyphen',\n 'dash',\n 'smooth',\n 'hv',\n 'hvh',\n 'vh',\n 'vhv',\n ];\n // If itemMarker is explicitly set to a line shape\n if (typeof itemMarker === 'string' && lineShapes.includes(itemMarker)) {\n return 4;\n }\n // If itemMarker is a function, we need to return a function that checks each shape\n if (typeof itemMarker === 'function') {\n return (d, i) => {\n const markerShape = itemMarker(d.id, i);\n if (typeof markerShape === 'string' && lineShapes.includes(markerShape)) {\n return 4;\n }\n return undefined;\n };\n }\n // Check if any of the inferred shapes are line-based\n const shapesArray = Array.isArray(shapes) ? shapes : [shapes];\n const hasLineShape = shapesArray.some((shape) => lineShapes.includes(shape));\n if (hasLineShape) {\n return 4;\n }\n return undefined;\n}\nfunction inferCategoryStyle(options, context) {\n const { labelFormatter = (d) => `${d}` } = options;\n const { scales, theme } = context;\n const defaultSize = theme.legendCategory.itemMarkerSize;\n const itemMarkerSize = inferItemMarkerSize(scales, defaultSize);\n const baseStyle = {\n itemMarker: inferItemMarker(Object.assign(Object.assign({}, options), { itemMarkerSize }), context),\n itemMarkerSize: itemMarkerSize,\n itemMarkerOpacity: inferItemMarkerOpacity(scales),\n itemMarkerLineWidth: inferItemMarkerLineWidth(options, context),\n };\n const finalLabelFormatter = typeof labelFormatter === 'string'\n ? format(labelFormatter)\n : labelFormatter;\n const colorScale = scaleOf(scales, 'color');\n const domain = domainOf(scales);\n const colorOf = colorScale\n ? (d) => colorScale.map(d)\n : () => context.theme.color;\n return Object.assign(Object.assign({}, baseStyle), { data: domain.map((d) => ({\n id: d,\n label: finalLabelFormatter(d),\n color: colorOf(d),\n })) });\n}\nfunction inferLegendShape(value, options, component) {\n const { position } = options;\n if (position === 'center') {\n const { bbox } = value;\n // to be confirm: if position is center, we should use the width and height of user definition.\n const { width, height } = bbox;\n return { width, height };\n }\n const { width, height } = inferComponentShape(value, options, component);\n return { width, height };\n}\nfunction filterEmptyIds(legendStyle) {\n return Object.assign(Object.assign({}, legendStyle), { data: (legendStyle === null || legendStyle === void 0 ? void 0 : legendStyle.data.filter((item) => item.id !== '')) || [] });\n}\n/**\n * Guide Component for ordinal color scale.\n */\nexport const LegendCategory = (options) => {\n const { labelFormatter, layout, order, orientation, position, size, title, cols, itemMarker } = options, style = __rest(options, [\"labelFormatter\", \"layout\", \"order\", \"orientation\", \"position\", \"size\", \"title\", \"cols\", \"itemMarker\"]);\n const { gridRow } = style;\n return (context) => {\n const { value, theme } = context;\n const { bbox } = value;\n const { width, height } = inferLegendShape(value, options, LegendCategory);\n const finalLayout = inferComponentLayout(position, layout);\n const legendStyle = Object.assign(Object.assign(Object.assign(Object.assign({ orientation: ['right', 'left', 'center'].includes(position)\n ? 'vertical'\n : 'horizontal', width,\n height, layout: cols !== undefined ? 'grid' : 'flex' }, (cols !== undefined && { gridCol: cols })), (gridRow !== undefined && { gridRow })), { titleText: titleContent(title) }), inferCategoryStyle(options, context));\n const { legendCategory: legendTheme = {} } = theme;\n // Filter out the data items with empty string IDs in the wordCloud's data before generating the legend.\n const categoryStyle = adaptor(Object.assign({}, legendTheme, filterEmptyIds(legendStyle), style));\n const layoutWrapper = new LegendCategoryLayout({\n style: Object.assign(Object.assign({ x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height }, finalLayout), { \n // @ts-ignore\n subOptions: categoryStyle }),\n });\n layoutWrapper.appendChild(new Category({\n className: 'legend-category',\n style: categoryStyle,\n }));\n return layoutWrapper;\n };\n};\nLegendCategory.props = {\n defaultPosition: 'top',\n defaultOrder: 1,\n defaultSize: 40,\n defaultCrossPadding: [12, 12],\n defaultPadding: [12, 12],\n};\n//# sourceMappingURL=legendCategory.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix } from '@antv/util';\nimport { applyStyle } from '../shape/utils';\nimport { subObject } from '../utils/helper';\nimport { createComponent, maybeAppend } from './utils';\nfunction inferStyleByAlign(x, y, width, align) {\n switch (align) {\n case 'center':\n return {\n x: x + width / 2,\n y,\n textAlign: 'middle',\n };\n case 'right':\n return {\n x: x + width,\n y,\n textAlign: 'right',\n };\n default:\n return {\n x,\n y,\n textAlign: 'left',\n };\n }\n}\nconst Title = createComponent({\n render(attributes, container) {\n const { width, title, subtitle, spacing = 2, align = 'left', x, y } = attributes, style = __rest(attributes, [\"width\", \"title\", \"subtitle\", \"spacing\", \"align\", \"x\", \"y\"]);\n container.style.transform = `translate(${x}, ${y})`;\n const titleStyle = subObject(style, 'title');\n const subtitleStyle = subObject(style, 'subtitle');\n const mainTitle = maybeAppend(container, '.title', 'text')\n .attr('className', 'title')\n .call(applyStyle, Object.assign(Object.assign(Object.assign({}, inferStyleByAlign(0, 0, width, align)), { fontSize: 14, textBaseline: 'top', text: title }), titleStyle))\n .node();\n const bounds = mainTitle.getLocalBounds();\n maybeAppend(container, '.sub-title', 'text')\n .attr('className', 'sub-title')\n .call((selection) => {\n if (!subtitle)\n return selection.node().remove();\n selection.node().attr(Object.assign(Object.assign(Object.assign({}, inferStyleByAlign(0, bounds.max[1] + spacing, width, align)), { fontSize: 12, textBaseline: 'top', text: subtitle }), subtitleStyle));\n });\n },\n});\n/**\n * Title Component.\n */\nexport const TitleComponent = (options) => {\n return ({ value, theme }) => {\n const { x, y, width, height } = value.bbox;\n return new Title({\n style: deepMix({}, theme.title, Object.assign({ x,\n y,\n width,\n height }, options)),\n });\n };\n};\nTitleComponent.props = {\n defaultPosition: 'top',\n defaultOrder: 2,\n defaultSize: 36,\n defaultCrossPadding: [20, 20],\n defaultPadding: [12, 12],\n};\n//# sourceMappingURL=title.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Slider as SliderComponent } from '@antv/component';\nimport { format } from '@antv/vendor/d3-format';\nimport { isArray } from '@antv/util';\nimport { isTranspose } from '../utils/coordinate';\nimport { invert } from '../utils/scale';\nfunction inferPosition(bbox, position, trackSize) {\n const { x, y, width, height } = bbox;\n if (position === 'left')\n return [x + width - trackSize, y];\n if (position === 'right')\n return [x, y];\n if (position === 'bottom')\n return [x, y];\n if (position === 'top')\n return [x, y + height - trackSize];\n}\n/**\n * Slider component.\n */\nexport const Slider = (options) => {\n // do not pass size.\n const { orientation, labelFormatter, size, style = {}, position } = options, rest = __rest(options, [\"orientation\", \"labelFormatter\", \"size\", \"style\", \"position\"]);\n return (context) => {\n var _a;\n const { scales: [scale], value, theme, coordinate, } = context;\n const { bbox } = value;\n const { width, height } = bbox;\n const { slider: sliderTheme = {} } = theme;\n const defaultFormatter = ((_a = scale.getFormatter) === null || _a === void 0 ? void 0 : _a.call(scale)) || ((v) => v + '');\n const formatter = typeof labelFormatter === 'string'\n ? format(labelFormatter)\n : labelFormatter;\n const isHorizontal = orientation === 'horizontal';\n const reverse = isTranspose(coordinate) && isHorizontal;\n const { trackSize = sliderTheme.trackSize } = style;\n const [x0, y0] = inferPosition(bbox, position, trackSize);\n return new SliderComponent({\n className: 'slider',\n style: Object.assign({}, sliderTheme, Object.assign(Object.assign({ x: x0, y: y0, trackLength: isHorizontal ? width : height, orientation, formatter: (v) => {\n const f = formatter || defaultFormatter;\n const v1 = reverse ? 1 - v : v;\n const tick = invert(scale, v1, true);\n return f(tick);\n }, sparklineData: inferSparklineData(options, context) }, style), rest)),\n });\n };\n};\nfunction markValue(markState, channels) {\n const [value] = Array.from(markState.entries())\n .filter(([mark]) => mark.type === 'line' || mark.type === 'area')\n .filter(([mark]) => mark.slider)\n .map(([mark]) => {\n const { encode, slider } = mark;\n if (slider === null || slider === void 0 ? void 0 : slider.x) {\n const channel = (name) => {\n const channel = encode[name];\n return [name, channel ? channel.value : undefined];\n };\n return Object.fromEntries(channels.map(channel));\n }\n });\n if (!(value === null || value === void 0 ? void 0 : value.series))\n return value === null || value === void 0 ? void 0 : value.y;\n const result = value.series.reduce((acc, curr, index) => {\n acc[curr] = acc[curr] || [];\n acc[curr].push(value.y[index]);\n return acc;\n }, {});\n return Object.values(result);\n}\nfunction inferSparklineData(options, context) {\n const { markState } = context;\n if (isArray(options.sparklineData))\n return options.sparklineData;\n return markValue(markState, ['y', 'series']);\n}\nSlider.props = {\n defaultPosition: 'bottom',\n defaultSize: 24,\n defaultOrder: 1,\n defaultCrossPadding: [12, 12],\n defaultPadding: [12, 12],\n};\n//# sourceMappingURL=slider.js.map","import { Slider } from './slider';\n/**\n * SliderX component.\n */\nexport const SliderX = (options) => {\n return Slider(Object.assign(Object.assign({}, options), { orientation: 'horizontal' }));\n};\nSliderX.props = Object.assign(Object.assign({}, Slider.props), { defaultPosition: 'bottom' });\n//# sourceMappingURL=sliderX.js.map","import { Slider } from './slider';\n/**\n * SliderY component.\n */\nexport const SliderY = (options) => {\n return Slider(Object.assign(Object.assign({}, options), { orientation: 'vertical' }));\n};\nSliderY.props = Object.assign(Object.assign({}, Slider.props), { defaultPosition: 'left' });\n//# sourceMappingURL=sliderY.js.map","import { __assign, __extends, __read } from \"tslib\";\nimport { CustomEvent } from '@antv/g';\nimport { clamp } from '@antv/util';\nimport { Component } from '../../core';\nimport { getEventPos, parseSeriesAttr, select, subStyleProps, superStyleProps } from '../../util';\nimport { Slider } from '../slider';\nvar Scrollbar = /** @class */ (function (_super) {\n __extends(Scrollbar, _super);\n function Scrollbar(options) {\n var _this = _super.call(this, options, {\n x: 0,\n y: 0,\n isRound: true,\n orientation: 'vertical',\n padding: [2, 2, 2, 2],\n scrollable: true,\n slidable: true,\n thumbCursor: 'default',\n trackSize: 10,\n value: 0,\n }) || this;\n _this.range = [0, 1];\n /**\n * 值改变事件\n */\n _this.onValueChange = function (oldValue) {\n var newValue = _this.attributes.value;\n if (oldValue === newValue)\n return;\n var evtVal = {\n detail: {\n oldValue: oldValue,\n value: newValue,\n },\n };\n _this.dispatchEvent(new CustomEvent('scroll', evtVal));\n _this.dispatchEvent(new CustomEvent('valuechange', evtVal));\n };\n /**\n * 点击轨道事件\n */\n _this.onTrackClick = function (e) {\n var slidable = _this.attributes.slidable;\n if (!slidable)\n return;\n var _a = __read(_this.getLocalPosition(), 2), x = _a[0], y = _a[1];\n var _b = __read(_this.padding, 4), top = _b[0], left = _b[3];\n var basePos = _this.getOrientVal([x + left, y + top]);\n var clickPos = _this.getOrientVal(getEventPos(e));\n var value = (clickPos - basePos) / _this.trackLength;\n _this.setValue(value, true);\n };\n _this.onThumbMouseenter = function (e) {\n _this.dispatchEvent(new CustomEvent('thumbMouseenter', { detail: e.detail }));\n };\n _this.onTrackMouseenter = function (e) {\n _this.dispatchEvent(new CustomEvent('trackMouseenter', { detail: e.detail }));\n };\n _this.onThumbMouseleave = function (e) {\n _this.dispatchEvent(new CustomEvent('thumbMouseleave', { detail: e.detail }));\n };\n _this.onTrackMouseleave = function (e) {\n _this.dispatchEvent(new CustomEvent('trackMouseleave', { detail: e.detail }));\n };\n return _this;\n }\n Object.defineProperty(Scrollbar.prototype, \"padding\", {\n get: function () {\n var padding = this.attributes.padding;\n return parseSeriesAttr(padding);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"value\", {\n get: function () {\n var value = this.attributes.value;\n var _a = __read(this.range, 2), min = _a[0], max = _a[1];\n return clamp(value, min, max);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"trackLength\", {\n get: function () {\n var _a = this.attributes, viewportLength = _a.viewportLength, _b = _a.trackLength, trackLength = _b === void 0 ? viewportLength : _b;\n return trackLength;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"availableSpace\", {\n get: function () {\n var trackSize = this.attributes.trackSize;\n var trackLength = this.trackLength;\n var _a = __read(this.padding, 4), top = _a[0], right = _a[1], bottom = _a[2], left = _a[3];\n var _b = __read(this.getOrientVal([\n [trackLength, trackSize],\n [trackSize, trackLength],\n ]), 2), width = _b[0], height = _b[1];\n return {\n x: left,\n y: top,\n width: +width - (left + right),\n height: +height - (top + bottom),\n };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"trackRadius\", {\n get: function () {\n var _a = this.attributes, isRound = _a.isRound, trackSize = _a.trackSize;\n if (!isRound)\n return 0;\n return trackSize / 2;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"thumbRadius\", {\n get: function () {\n var _a = this.attributes, isRound = _a.isRound, thumbRadius = _a.thumbRadius;\n if (!isRound)\n return 0;\n var _b = this.availableSpace, width = _b.width, height = _b.height;\n return thumbRadius || this.getOrientVal([height, width]) / 2;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * accord to thumbLen and value, calculate the values of slider\n */\n Scrollbar.prototype.getValues = function (value) {\n if (value === void 0) { value = this.value; }\n var _a = this.attributes, viewportLength = _a.viewportLength, contentLength = _a.contentLength;\n var unit = viewportLength / contentLength;\n var _b = __read(this.range, 2), min = _b[0], max = _b[1];\n var start = value * (max - min - unit);\n return [start, start + unit];\n };\n Scrollbar.prototype.getValue = function () {\n return this.value;\n };\n Scrollbar.prototype.renderSlider = function (container) {\n var _a = this.attributes, x = _a.x, y = _a.y, orientation = _a.orientation, trackSize = _a.trackSize, padding = _a.padding, slidable = _a.slidable;\n var trackStyle = subStyleProps(this.attributes, 'track');\n var selectionStyle = subStyleProps(this.attributes, 'thumb');\n var style = __assign(__assign({ x: x, y: y, brushable: false, orientation: orientation, padding: padding, selectionRadius: this.thumbRadius, showHandle: false, slidable: slidable, trackLength: this.trackLength, trackRadius: this.trackRadius, trackSize: trackSize, values: this.getValues() }, superStyleProps(trackStyle, 'track')), superStyleProps(selectionStyle, 'selection'));\n this.slider = select(container)\n .maybeAppendByClassName('scrollbar', function () { return new Slider({ style: style }); })\n .update(style)\n .node();\n };\n Scrollbar.prototype.render = function (attributes, container) {\n this.renderSlider(container);\n };\n /**\n * 设置value\n * @param value 当前位置的占比\n */\n Scrollbar.prototype.setValue = function (value, animate) {\n if (animate === void 0) { animate = false; }\n var oldValue = this.attributes.value;\n var _a = __read(this.range, 2), min = _a[0], max = _a[1];\n this.slider.setValues(this.getValues(clamp(value, min, max)), animate);\n // 通知触发valueChange\n // todo 调用 setValue 不触发 valuechange\n this.onValueChange(oldValue);\n };\n Scrollbar.prototype.bindEvents = function () {\n var _this = this;\n this.slider.addEventListener('trackClick', function (e) {\n e.stopPropagation();\n _this.onTrackClick(e.detail);\n });\n this.onHover();\n };\n /**\n * 根据orient取出对应轴向上的值\n * 主要用于取鼠标坐标在orient方向上的位置\n */\n Scrollbar.prototype.getOrientVal = function (values) {\n var orientation = this.attributes.orientation;\n return orientation === 'horizontal' ? values[0] : values[1];\n };\n /**\n * 悬浮事件\n */\n Scrollbar.prototype.onHover = function () {\n this.slider.addEventListener('selectionMouseenter', this.onThumbMouseenter);\n this.slider.addEventListener('trackMouseenter', this.onTrackMouseenter);\n this.slider.addEventListener('selectionMouseleave', this.onThumbMouseleave);\n this.slider.addEventListener('trackMouseleave', this.onTrackMouseleave);\n };\n Scrollbar.tag = 'scrollbar';\n return Scrollbar;\n}(Component));\nexport { Scrollbar };\n//# sourceMappingURL=index.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Scrollbar as ScrollbarComponent } from '@antv/component';\n/**\n * Scrollbar component.\n */\nexport const Scrollbar = (options) => {\n const { orientation, labelFormatter, style } = options, rest = __rest(options, [\"orientation\", \"labelFormatter\", \"style\"]);\n return ({ scales: [scale], value, theme }) => {\n const { bbox } = value;\n const { x, y, width, height } = bbox;\n const { scrollbar: scrollbarTheme = {} } = theme;\n const { ratio, range } = scale.getOptions();\n const mainSize = orientation === 'horizontal' ? width : height;\n const actualSize = mainSize / ratio;\n const [r0, r1] = range;\n const value1 = r1 > r0 ? 0 : 1;\n return new ScrollbarComponent({\n className: 'g2-scrollbar',\n style: Object.assign({}, scrollbarTheme, Object.assign(Object.assign(Object.assign(Object.assign({}, style), { x,\n y, trackLength: mainSize, value: value1 }), rest), { orientation, contentLength: actualSize, viewportLength: mainSize })),\n });\n };\n};\nScrollbar.props = {\n defaultPosition: 'bottom',\n defaultSize: 24,\n defaultOrder: 1,\n defaultCrossPadding: [12, 12],\n defaultPadding: [12, 12],\n};\n//# sourceMappingURL=scrollbar.js.map","import { Scrollbar } from './scrollbar';\n/**\n * ScrollbarX component.\n */\nexport const ScrollbarX = (options) => {\n return Scrollbar(Object.assign(Object.assign({}, options), { orientation: 'horizontal' }));\n};\nScrollbarX.props = Object.assign(Object.assign({}, Scrollbar.props), { defaultPosition: 'bottom' });\n//# sourceMappingURL=scrollbarX.js.map","import { Scrollbar } from './scrollbar';\n/**\n * ScrollbarY component.\n */\nexport const ScrollbarY = (options) => {\n return Scrollbar(Object.assign(Object.assign({}, options), { orientation: 'vertical' }));\n};\nScrollbarY.props = Object.assign(Object.assign({}, Scrollbar.props), { defaultPosition: 'left' });\n//# sourceMappingURL=scrollbarY.js.map","import { Group } from '@antv/g';\n// A empty component to pass parse view tree stage.\nexport const Legends = (options) => {\n return () => {\n return new Group();\n };\n};\nLegends.props = {};\n//# sourceMappingURL=legends.js.map","import { isTranspose } from '../utils/coordinate';\n/**\n * Scale mark from nothing to desired shape in x direction.\n */\nexport const ScaleInX = (options, context) => {\n // Small enough to hide or show very small part of mark,\n // but bigger enough to not cause bug.\n const ZERO = 0.0001;\n const { coordinate } = context;\n return (from, _, defaults) => {\n const [shape] = from;\n const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = shape.style;\n const [transformOrigin, transform] = isTranspose(coordinate)\n ? [`left bottom`, `scale(1, ${ZERO})`] // left-bottom corner\n : [`left top`, `scale(${ZERO}, 1)`]; // left-top corner\n // Using a short fadeIn transition to hide element with scale(0.001)\n // which is still visible.\n const keyframes = [\n {\n transform: `${prefix} ${transform}`.trimStart(),\n transformOrigin,\n fillOpacity: 0,\n strokeOpacity: 0,\n opacity: 0,\n },\n {\n transform: `${prefix} ${transform}`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n offset: 0.01,\n },\n {\n transform: `${prefix} scale(1, 1)`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n },\n ];\n const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n return animation;\n };\n};\n//# sourceMappingURL=scaleInX.js.map","import { CSS, PropertySyntax } from '@antv/g';\nimport { isTranspose, isPolar } from '../utils/coordinate';\nimport { getArcObject } from '../shape/utils';\n/**\n * Scale mark from nothing to desired shape in y direction.\n */\nexport const ScaleInY = (options, context) => {\n // Small enough to hide or show very small part of mark,\n // but bigger enough to not cause bug.\n const ZERO = 0.0001;\n const { coordinate } = context;\n // the polar coordinate need\n CSS.registerProperty({\n name: 'scaleInYRadius',\n inherits: false,\n initialValue: '',\n interpolable: true,\n syntax: PropertySyntax.NUMBER,\n });\n return (from, _, defaults) => {\n const [shape] = from;\n const PolarScaleInY = (shape) => {\n const { __data__, style } = shape;\n const { fillOpacity = 1, strokeOpacity = 1, opacity = 1 } = style;\n const { points, y, y1 } = __data__;\n const arcObject = getArcObject(coordinate, points, [y, y1]);\n const { innerRadius, outerRadius } = arcObject;\n const keyframes = [\n {\n scaleInYRadius: innerRadius + ZERO,\n fillOpacity: 0,\n strokeOpacity: 0,\n opacity: 0,\n },\n {\n scaleInYRadius: innerRadius + ZERO,\n fillOpacity,\n strokeOpacity,\n opacity,\n offset: 0.01,\n },\n {\n scaleInYRadius: outerRadius,\n fillOpacity,\n strokeOpacity,\n opacity,\n },\n ];\n const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n return animation;\n };\n const RectangularScaleInY = (shape) => {\n const { style } = shape;\n const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = style;\n const [transformOrigin, transform] = isTranspose(coordinate)\n ? [`left top`, `scale(${ZERO}, 1)`] // left-top corner\n : [`left bottom`, `scale(1, ${ZERO})`]; // left-bottom corner\n // Using a short fadeIn transition to hide element with scale(0.001)\n // which is still visible.\n const keyframes = [\n {\n transform: `${prefix} ${transform}`.trimStart(),\n transformOrigin,\n fillOpacity: 0,\n strokeOpacity: 0,\n opacity: 0,\n },\n {\n transform: `${prefix} ${transform}`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n offset: 0.01,\n },\n {\n transform: `${prefix} scale(1, 1)`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n },\n ];\n const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n return animation;\n };\n if (isPolar(coordinate)) {\n return PolarScaleInY(shape);\n }\n else {\n return RectangularScaleInY(shape);\n }\n };\n};\n//# sourceMappingURL=scaleInY.js.map","import { arc } from '@antv/vendor/d3-shape';\nimport { CSS, PropertySyntax } from '@antv/g';\nimport { getArcObject } from '../shape/utils';\nimport { isPolar } from '../utils/coordinate';\nimport { ScaleInX } from './scaleInX';\n/**\n * Transform mark from transparent to solid.\n */\nexport const WaveIn = (options, context) => {\n const ZERO = 0.0001;\n // @see https://g-next.antv.vision/zh/docs/api/css/css-properties-values-api#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%B1%9E%E6%80%A7\n CSS.registerProperty({\n name: 'waveInArcAngle',\n inherits: false,\n initialValue: '',\n interpolable: true,\n syntax: PropertySyntax.NUMBER,\n });\n const { coordinate } = context;\n return (from, to, defaults) => {\n const [shape] = from;\n if (!isPolar(coordinate)) {\n return ScaleInX(options, context)(from, to, defaults);\n }\n const { __data__, style } = shape;\n const { radius = 0, inset = 0, fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = style;\n const { points, y, y1 } = __data__;\n const path = arc()\n .cornerRadius(radius)\n .padAngle((inset * Math.PI) / 180);\n const arcObject = getArcObject(coordinate, points, [y, y1]);\n const { startAngle, endAngle } = arcObject;\n const keyframes = [\n // Use custom interpolable CSS property.\n {\n waveInArcAngle: startAngle + ZERO,\n fillOpacity: 0,\n strokeOpacity: 0,\n opacity: 0,\n },\n {\n waveInArcAngle: startAngle + ZERO,\n fillOpacity,\n strokeOpacity,\n opacity,\n offset: 0.01,\n },\n {\n waveInArcAngle: endAngle,\n fillOpacity,\n strokeOpacity,\n opacity,\n },\n ];\n const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n animation.onframe = function () {\n shape.style.d = path(Object.assign(Object.assign({}, arcObject), { endAngle: Number(shape.style.waveInArcAngle) }));\n };\n animation.onfinish = function () {\n shape.style.d = path(Object.assign(Object.assign({}, arcObject), { endAngle: endAngle }));\n };\n return animation;\n };\n};\nWaveIn.props = {};\n//# sourceMappingURL=waveIn.js.map","/**\n * Transform mark from transparent to solid.\n */\nexport const FadeIn = (options) => {\n return (from, _, defaults) => {\n const [shape] = from;\n const { fillOpacity = 1, strokeOpacity = 1, opacity = 1 } = shape.style;\n const keyframes = [\n { fillOpacity: 0, strokeOpacity: 0, opacity: 0 },\n {\n fillOpacity,\n strokeOpacity,\n opacity,\n },\n ];\n return shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n };\n};\nFadeIn.props = {};\n//# sourceMappingURL=fadeIn.js.map","/**\n * Transform mark from solid to transparent.\n */\nexport const FadeOut = (options) => {\n return (from, _, defaults) => {\n const [shape] = from;\n const { fillOpacity = 1, strokeOpacity = 1, opacity = 1 } = shape.style;\n const keyframes = [\n {\n fillOpacity,\n strokeOpacity,\n opacity,\n },\n { fillOpacity: 0, strokeOpacity: 0, opacity: 0 },\n ];\n return shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n };\n};\nFadeOut.props = {};\n//# sourceMappingURL=fadeOut.js.map","import { Shape } from '@antv/g';\nconst DEFAULT_ATTRIBUTE_VALUE = {\n opacity: 1,\n strokeOpacity: 1,\n fillOpacity: 1,\n lineWidth: 0,\n x: 0,\n y: 0,\n cx: 0,\n cy: 0,\n r: 0,\n rx: 0,\n ry: 0,\n width: 0,\n height: 0,\n};\nexport const GEOMETRY_ATTRIBUTES = {\n [Shape.CIRCLE]: ['cx', 'cy', 'r'],\n [Shape.ELLIPSE]: ['cx', 'cy', 'rx', 'ry'],\n [Shape.RECT]: ['x', 'y', 'width', 'height'],\n [Shape.IMAGE]: ['x', 'y', 'width', 'height'],\n [Shape.LINE]: ['x1', 'y1', 'x2', 'y2'],\n [Shape.POLYLINE]: ['points'],\n [Shape.POLYGON]: ['points'],\n};\nexport function attributeOf(shape, keys, useDefaultValue = false) {\n const attribute = {};\n for (const key of keys) {\n const value = shape.style[key];\n if (value) {\n attribute[key] = value;\n }\n else if (useDefaultValue) {\n attribute[key] = DEFAULT_ATTRIBUTE_VALUE[key];\n }\n }\n return attribute;\n}\nexport const attributeKeys = [\n 'fill',\n 'stroke',\n 'fillOpacity',\n 'strokeOpacity',\n 'opacity',\n 'lineWidth',\n];\n//# sourceMappingURL=utils.js.map","import { convertToPath, Path, Shape, } from '@antv/g';\nimport { get } from '@antv/util';\nimport { copyAttributes } from '../utils/helper';\nimport { attributeKeys, attributeOf, GEOMETRY_ATTRIBUTES } from './utils';\nfunction localBBoxOf(shape) {\n const { min, max } = shape.getLocalBounds();\n const [x0, y0] = min;\n const [x1, y1] = max;\n const height = y1 - y0;\n const width = x1 - x0;\n return [x0, y0, width, height];\n}\nfunction d(bbox) {\n const [x, y, width, height] = bbox;\n return `\n M ${x} ${y}\n L ${x + width} ${y}\n L ${x + width} ${y + height}\n L ${x} ${y + height}\n Z\n `;\n}\nfunction pack(shape, count) {\n const [x0, y0, width, height] = localBBoxOf(shape);\n const aspect = height / width;\n const col = Math.ceil(Math.sqrt(count / aspect));\n const row = Math.ceil(count / col);\n const B = [];\n const h = height / row;\n let j = 0;\n let n = count;\n while (n > 0) {\n const c = Math.min(n, col);\n const w = width / c;\n for (let i = 0; i < c; i++) {\n const x = x0 + i * w;\n const y = y0 + j * h;\n B.push(d([x, y, w, h]));\n }\n n -= c;\n j += 1;\n }\n return B;\n}\nfunction normalizeSplit(split = 'pack') {\n if (typeof split == 'function')\n return split;\n return pack;\n}\n/**\n * Use attributes relative to geometry to do shape to shape animation.\n *\n * For example, the x, y, width, height of `Rect`, the cx, cy, r of `Circle`.\n * And for `Group`, it will use the bbox of the group.\n */\nfunction shapeToShape(from, to, timeEffect) {\n let { transform: fromTransform } = from.style;\n const { transform: toTransform } = to.style;\n // Replace first to get right bbox after mounting.\n replaceChild(to, from);\n let keys = attributeKeys;\n if (from.nodeName === Shape.GROUP) {\n // Apply translate and scale transform.\n const [x0, y0, w0, h0] = localBBoxOf(from);\n const [x1, y1, w1, h1] = localBBoxOf(to);\n const dx = x0 - x1;\n const dy = y0 - y1;\n const sx = w0 / w1;\n const sy = h0 / h1;\n fromTransform = `translate(${dx}, ${dy}) scale(${sx}, ${sy})`;\n }\n else {\n keys = keys.concat(GEOMETRY_ATTRIBUTES[from.nodeName] || []);\n }\n const keyframes = [\n Object.assign({ transform: fromTransform !== null && fromTransform !== void 0 ? fromTransform : 'none' }, attributeOf(from, keys, true)),\n Object.assign({ transform: toTransform !== null && toTransform !== void 0 ? toTransform : 'none' }, attributeOf(to, keys, true)),\n ];\n const animation = to.animate(keyframes, timeEffect);\n return animation;\n}\n/**\n * Replace object and copy className and __data__\n */\nfunction replaceChild(newChild, oldChild) {\n newChild['__data__'] = oldChild['__data__'];\n newChild.className = oldChild.className;\n // @ts-ignore\n newChild.markType = oldChild.markType;\n oldChild.parentNode.replaceChild(newChild, oldChild);\n}\n/**\n * Replace element with a path shape.\n */\nfunction maybePath(node, d) {\n const { nodeName } = node;\n if (nodeName === 'path')\n return node;\n const path = new Path({\n style: Object.assign(Object.assign({}, attributeOf(node, attributeKeys)), { d }),\n });\n replaceChild(path, node);\n return path;\n}\nfunction hasUniqueString(search, pattern) {\n const first = search.indexOf(pattern);\n const last = search.lastIndexOf(pattern);\n return first === last;\n}\n// Path definition with multiple m and M command has sub path.\n// eg. 'M10,10...M20,20', 'm10,10...m20,20'\nfunction hasSubPath(path) {\n return !hasUniqueString(path, 'm') || !hasUniqueString(path, 'M');\n}\nfunction shape2path(shape) {\n const path = convertToPath(shape);\n if (!path)\n return;\n // Path definition with sub path can't do path morphing animation,\n // so skip this kind of path.\n if (hasSubPath(path))\n return;\n return path;\n}\n// Check if the path has a markerEnd | markerStart\nfunction hasMarker(shape) {\n const { nodeName } = shape;\n if (nodeName === 'path') {\n const attributes = get(shape, 'attributes');\n return attributes.markerEnd || attributes.markerStart;\n }\n return false;\n}\nfunction oneToOne(shape, from, to, timeEffect) {\n // If the nodeTypes of from and to are equal,\n // or non of them can convert to path,\n // the apply shape to shape animation.\n const { nodeName: fromName } = from;\n const { nodeName: toName } = to;\n const fromPath = shape2path(from);\n const toPath = shape2path(to);\n const isSameNodes = fromName === toName && fromName !== 'path';\n const hasNonPathNode = fromPath === undefined || toPath === undefined;\n // Path with mark can not use animate like ordinary path.\n const isPathWithMarker = hasMarker(from) || hasMarker(to);\n if (isSameNodes || hasNonPathNode || isPathWithMarker)\n return shapeToShape(from, to, timeEffect);\n const pathShape = maybePath(shape, fromPath);\n // Convert Path will take transform, anchor, etc into account,\n // so there is no need to specify these attributes in keyframes.\n const keyframes = [\n Object.assign({}, attributeOf(from, attributeKeys)),\n Object.assign({}, attributeOf(to, attributeKeys)),\n ];\n if (fromPath !== toPath) {\n keyframes[0].d = fromPath;\n keyframes[1].d = toPath;\n const animation = pathShape.animate(keyframes, timeEffect);\n animation.onfinish = () => {\n // Should keep the original path definition.\n copyAttributes(pathShape, to);\n pathShape.style.d = toPath;\n pathShape.style.transform = 'none';\n };\n // Remove transform because it already applied in path\n // converted by convertToPath.\n pathShape.style.transform = 'none';\n return animation;\n }\n // No need to apply animation since fromPath equals toPath.\n return null;\n}\nfunction oneToMultiple(from, to, timeEffect, split) {\n // Hide the shape to be split before being removing.\n from.style.visibility = 'hidden';\n const D = split(from, to.length);\n return to.map((shape, i) => {\n const path = new Path({\n style: Object.assign({ d: D[i] }, attributeOf(from, attributeKeys)),\n });\n return oneToOne(shape, path, shape, timeEffect);\n });\n}\nfunction multipleToOne(from, to, timeEffect, split) {\n const D = split(to, from.length);\n const { fillOpacity = 1, strokeOpacity = 1, opacity = 1 } = to.style;\n const keyframes = [\n { fillOpacity: 0, strokeOpacity: 0, opacity: 0 },\n { fillOpacity: 0, strokeOpacity: 0, opacity: 0, offset: 0.99 },\n {\n fillOpacity,\n strokeOpacity,\n opacity,\n },\n ];\n const animation = to.animate(keyframes, timeEffect);\n const animations = from.map((shape, i) => {\n const path = new Path({\n style: {\n d: D[i],\n fill: to.style.fill,\n },\n });\n return oneToOne(shape, shape, path, timeEffect);\n });\n return [...animations, animation];\n}\n/**\n * Morphing animations.\n * @todo Support more split function.\n */\nexport const Morphing = (options) => {\n return (from, to, defaults) => {\n const split = normalizeSplit(options.split);\n const timeEffect = Object.assign(Object.assign({}, defaults), options);\n const { length: fl } = from;\n const { length: tl } = to;\n if ((fl === 1 && tl === 1) || (fl > 1 && tl > 1)) {\n const [f] = from;\n const [t] = to;\n return oneToOne(f, f, t, timeEffect);\n }\n if (fl === 1 && tl > 1) {\n const [f] = from;\n return oneToMultiple(f, to, timeEffect, split);\n }\n if (fl > 1 && tl === 1) {\n const [t] = to;\n return multipleToOne(from, t, timeEffect, split);\n }\n return null;\n };\n};\nMorphing.props = {};\n//# sourceMappingURL=morphing.js.map","export const ZoomIn = (options) => {\n // Small enough to hide or show very small part of mark,\n // but bigger enough to not cause bug.\n const ZERO = 0.0001;\n return (from, _, defaults) => {\n const [shape] = from;\n const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = shape.style;\n const transformOrigin = 'center center';\n const keyframes = [\n {\n transform: `${prefix} scale(${ZERO})`.trimStart(),\n transformOrigin,\n fillOpacity: 0,\n strokeOpacity: 0,\n opacity: 0,\n },\n {\n transform: `${prefix} scale(${ZERO})`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n offset: 0.01,\n },\n {\n transform: `${prefix} scale(1)`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n },\n ];\n const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n return animation;\n };\n};\n//# sourceMappingURL=zoomIn.js.map","/**\n * Transform mark from transparent to solid.\n */\nexport const PathIn = (options) => {\n return (from, _, defaults) => {\n var _a, _b;\n const [shape] = from;\n const length = ((_b = (_a = shape).getTotalLength) === null || _b === void 0 ? void 0 : _b.call(_a)) || 0;\n const keyframes = [\n { lineDash: [0, length] },\n { lineDash: [length, 0] },\n ];\n return shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n };\n};\nPathIn.props = {};\n//# sourceMappingURL=pathIn.js.map","import { Path } from '@antv/g';\nimport { ScaleInX } from './scaleInX';\n/**\n * Scale mark from nothing to desired shape in x direction.\n */\nexport const GrowInX = (options, context) => {\n return (from, to, defaults) => {\n const [shape] = from;\n const { min: [x, y], halfExtents, } = shape.getLocalBounds();\n const width = halfExtents[0] * 2;\n const height = halfExtents[1] * 2;\n const clipPath = new Path({\n style: {\n d: `M${x},${y}L${x + width},${y}L${x + width},${y + height}L${x},${y + height}Z`,\n },\n });\n shape.appendChild(clipPath);\n shape.style.clipPath = clipPath;\n const animation = ScaleInX(options, context)([clipPath], to, defaults);\n return animation;\n };\n};\nGrowInX.props = {};\n//# sourceMappingURL=growInX.js.map","import { Path } from '@antv/g';\nimport { ScaleInY } from './scaleInY';\n/**\n * Scale mark from nothing to desired shape in x direction.\n */\nexport const GrowInY = (options, context) => {\n return (from, to, defaults) => {\n const [shape] = from;\n const { min: [x, y], halfExtents, } = shape.getLocalBounds();\n const width = halfExtents[0] * 2;\n const height = halfExtents[1] * 2;\n const clipPath = new Path({\n style: {\n d: `M${x},${y}L${x + width},${y}L${x + width},${y + height}L${x},${y + height}Z`,\n },\n });\n shape.appendChild(clipPath);\n shape.style.clipPath = clipPath;\n const animation = ScaleInY(options, context)([clipPath], to, defaults);\n return animation;\n };\n};\nGrowInY.props = {};\n//# sourceMappingURL=growInY.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix } from '@antv/util';\nimport { group } from '@antv/vendor/d3-array';\nimport { subObject } from '../utils/helper';\nimport { createDatumof, createFindElementByEvent, createUseState, createValueof, createXKey, mergeState, offsetTransform, renderBackground, renderLink, selectElementByData, selectG2Elements, selectPlotArea, VALID_FIND_BY_X_MARKS, } from './utils';\n/**\n * highlight a group of elements.\n */\nexport function elementHighlight(root, { elements: elementsof, // given the root of chart returns elements to be manipulated\ndatum, // given each element returns the datum of it\ngroupKey: eleGroupKey = (d) => d, // group elements by specified key\nregionGroupKey = (d) => d, // how to group elements when hover region\nlink = false, // draw link or not\nbackground = false, // draw background or not\ndelay = 60, // delay to unhighlighted element\nscale, coordinate, emitter, state = {}, region = false, regionEleFilter = (el) => VALID_FIND_BY_X_MARKS.includes(el.markType), // some elements can not be highlighted by region, like shapes in pie.\n }) {\n var _a, _b;\n const allElements = (_a = elementsof(root)) !== null && _a !== void 0 ? _a : [];\n const elements = region ? allElements.filter(regionEleFilter) : allElements;\n const elementSet = new Set(elements);\n const groupKey = region ? regionGroupKey : eleGroupKey;\n const keyGroup = group(elements, groupKey);\n const findElement = createFindElementByEvent({\n elementsof,\n root,\n coordinate,\n scale,\n });\n const valueof = createValueof(elements, datum);\n const [appendLink, removeLink] = renderLink(Object.assign({ elements,\n valueof,\n link,\n coordinate }, subObject(state.active, 'link')));\n const [appendBackground, removeBackground, isBackground] = renderBackground(Object.assign({ document: root.ownerDocument, scale,\n coordinate,\n background,\n valueof }, subObject(state.active, 'background')));\n const elementStyle = deepMix(state, {\n active: Object.assign({}, (((_b = state.active) === null || _b === void 0 ? void 0 : _b.offset) && {\n //Apply translate to mock slice out.\n transform: (...params) => {\n const value = state.active.offset(...params);\n const [, i] = params;\n return offsetTransform(elements[i], value, coordinate);\n },\n })),\n });\n const useState = createUseState(elementStyle, elements);\n const { updateState, removeState, hasState } = useState(valueof);\n let out; // Timer for delaying unhighlighted.\n const pointerover = (event) => {\n const { nativeEvent = true } = event;\n let element = event.target;\n if (region) {\n element = findElement(event);\n }\n if (!elementSet.has(element))\n return;\n if (out)\n clearTimeout(out);\n const k = groupKey(element);\n const group = keyGroup.get(k);\n const groupSet = new Set(group);\n for (const e of elements) {\n if (groupSet.has(e)) {\n if (!hasState(e, 'active'))\n updateState(e, 'active');\n }\n else {\n updateState(e, 'inactive');\n removeLink(e);\n }\n if (e !== element)\n removeBackground(e);\n }\n appendBackground(element);\n appendLink(group);\n // Emit events.\n if (!nativeEvent)\n return;\n emitter.emit('element:highlight', {\n nativeEvent,\n data: {\n data: datum(element),\n group: group.map(datum),\n },\n });\n };\n const delayUnhighlighted = () => {\n if (out)\n clearTimeout(out);\n out = setTimeout(() => {\n unhighlighted();\n out = null;\n }, delay);\n };\n const unhighlighted = (nativeEvent = true) => {\n for (const e of elements) {\n removeState(e, 'active', 'inactive');\n removeBackground(e);\n removeLink(e);\n }\n if (nativeEvent) {\n emitter.emit('element:unhighlight', { nativeEvent });\n }\n };\n const pointerout = (event) => {\n let element = event.target;\n if (region) {\n element = findElement(event);\n }\n if (!element) {\n if (delay > 0)\n delayUnhighlighted();\n else\n unhighlighted();\n return;\n }\n if (background && !isBackground(element))\n return;\n if (!background && !elementSet.has(element))\n return;\n if (delay > 0)\n delayUnhighlighted();\n else\n unhighlighted();\n };\n const pointerleave = () => {\n unhighlighted();\n };\n root.addEventListener('pointerover', pointerover);\n root.addEventListener('pointermove', pointerover);\n root.addEventListener('pointerout', pointerout);\n root.addEventListener('pointerleave', pointerleave);\n const onRest = (e) => {\n const { nativeEvent } = e;\n if (nativeEvent)\n return;\n unhighlighted(false);\n };\n const onHighlight = (e) => {\n const { nativeEvent } = e;\n if (nativeEvent)\n return;\n const { data } = e.data;\n const element = selectElementByData(elements, data, datum);\n if (!element)\n return;\n pointerover({ target: element, nativeEvent: false });\n };\n emitter.on('element:highlight', onHighlight);\n emitter.on('element:unhighlight', onRest);\n return () => {\n root.removeEventListener('pointerover', pointerover);\n root.removeEventListener('pointermove', pointerover);\n root.removeEventListener('pointerout', pointerout);\n root.removeEventListener('pointerleave', pointerleave);\n emitter.off('element:highlight', onHighlight);\n emitter.off('element:unhighlight', onRest);\n for (const e of elements) {\n removeBackground(e);\n removeLink(e);\n }\n };\n}\nexport function ElementHighlight(_a) {\n var { delay, createGroup, createRegionGroup, background = false, link = false } = _a, rest = __rest(_a, [\"delay\", \"createGroup\", \"createRegionGroup\", \"background\", \"link\"]);\n return (context, _, emitter) => {\n const { container, view, options } = context;\n const { scale, coordinate } = view;\n const plotArea = selectPlotArea(container);\n return elementHighlight(plotArea, Object.assign({ elements: selectG2Elements, datum: createDatumof(view), groupKey: createGroup ? createGroup(view) : undefined, regionGroupKey: createRegionGroup\n ? createRegionGroup(view)\n : createXKey(view), coordinate,\n scale, state: mergeState(options, [\n ['active', background ? {} : { lineWidth: '1', stroke: '#000' }],\n 'inactive',\n ]), background,\n link,\n delay,\n emitter }, rest));\n };\n}\nElementHighlight.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=elementHighlight.js.map","import { createXKey } from './utils';\nimport { ElementHighlight } from './elementHighlight';\nexport function ElementHighlightByX(options) {\n return ElementHighlight(Object.assign(Object.assign({}, options), { createGroup: createXKey }));\n}\nElementHighlightByX.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=elementHighlightByX.js.map","import { createColorKey } from './utils';\nimport { ElementHighlight } from './elementHighlight';\nexport function ElementHighlightByColor(options) {\n return ElementHighlight(Object.assign(Object.assign({}, options), { createGroup: createColorKey }));\n}\nElementHighlightByColor.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=elementHighlightByColor.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { group } from '@antv/vendor/d3-array';\nimport { deepMix } from '@antv/util';\nimport { subObject } from '../utils/helper';\nimport { traverseElements } from '../utils/traverse-elements';\nimport { createValueof, createDatumof, selectG2Elements, renderLink, renderBackground, selectPlotArea, offsetTransform, mergeState, selectElementByData, createXKey, createFindElementByEvent, VALID_FIND_BY_X_MARKS, createUseState, } from './utils';\n/**\n * Active a group of elements.\n */\nexport function elementSelect(root, { elements: elementsof, // given the root of chart returns elements to be manipulated\ndatum, // given each element returns the datum of it\ngroupKey = (d) => d, // group elements by specified key\nregionGroupKey = (d) => d, // how to group elements when click region\nlink = false, // draw link or not\nsingle = false, // single select or not\nmultipleSelectHotkey, // hotkey for multi-select mode\ncoordinate, background = false, scale, emitter, state = {}, region = false, regionEleFilter = (el) => VALID_FIND_BY_X_MARKS.includes(el.markType), }) {\n var _a;\n const elements = elementsof(root);\n const elementSet = new Set(elements);\n const findElement = createFindElementByEvent({\n elementsof,\n root,\n coordinate,\n scale,\n });\n const keyGroup = group(elements, groupKey);\n const regionGroup = group(elements, regionGroupKey);\n const valueof = createValueof(elements, datum);\n const [appendLink, removeLink] = renderLink(Object.assign({ link,\n elements,\n valueof,\n coordinate }, subObject(state.selected, 'link')));\n const [appendBackground, removeBackground] = renderBackground(Object.assign({ document: root.ownerDocument, background,\n coordinate,\n scale,\n valueof }, subObject(state.selected, 'background')));\n const elementStyle = deepMix(state, {\n selected: Object.assign({}, (((_a = state.selected) === null || _a === void 0 ? void 0 : _a.offset) && {\n // Apply translate to mock slice out.\n transform: (...params) => {\n const value = state.selected.offset(...params);\n const [, i] = params;\n return offsetTransform(elements[i], value, coordinate);\n },\n })),\n });\n const useState = createUseState(elementStyle, elements);\n const { updateState, removeState, hasState } = useState(valueof);\n let isMultiSelectMode = !single; // \"single\" determines whether to multi-select by default\n let activeHotkey = null; // Track the currently active hotkey\n const clear = (nativeEvent = true) => {\n for (const e of elements) {\n removeState(e, 'selected', 'unselected');\n removeLink(e);\n removeBackground(e);\n }\n if (nativeEvent)\n emitter.emit('element:unselect', { nativeEvent: true });\n return;\n };\n const singleSelect = ({ event, element, nativeEvent = true, filter = (el) => true, groupBy = groupKey, groupMap = keyGroup, }) => {\n const filteredElements = elements.filter(filter);\n // Clear states if clicked selected element.\n if (hasState(element, 'selected'))\n clear();\n else {\n const k = groupBy(element);\n const group = groupMap.get(k);\n const groupSet = new Set(group);\n for (const e of filteredElements) {\n if (groupSet.has(e))\n updateState(e, 'selected');\n else {\n updateState(e, 'unselected');\n removeLink(e);\n }\n if (e !== element)\n removeBackground(e);\n }\n appendLink(group);\n appendBackground(element);\n if (!nativeEvent)\n return;\n emitter.emit('element:select', Object.assign(Object.assign({}, event), { nativeEvent, data: {\n data: [datum(element), ...group.map(datum)],\n } }));\n }\n };\n const multipleSelect = ({ event, element, nativeEvent = true, filter = (el) => true, groupBy = groupKey, groupMap = keyGroup, }) => {\n const k = groupBy(element);\n const group = groupMap.get(k);\n const groupSet = new Set(group);\n const filteredElements = elements.filter(filter);\n if (!hasState(element, 'selected')) {\n const hasSelectedGroup = group.some((e) => hasState(e, 'selected'));\n for (const e of filteredElements) {\n if (groupSet.has(e))\n updateState(e, 'selected');\n else if (!hasState(e, 'selected'))\n updateState(e, 'unselected');\n }\n // Append link for each group only once.\n if (!hasSelectedGroup && link)\n appendLink(group);\n appendBackground(element);\n }\n else {\n // If there is no selected elements after resetting this group,\n // clear the states.\n const hasSelected = elements.some((e) => !groupSet.has(e) && hasState(e, 'selected'));\n if (!hasSelected)\n return clear();\n // If there are still some selected elements after resetting this group,\n // only remove the link.\n for (const e of group) {\n updateState(e, 'unselected');\n removeLink(e);\n removeBackground(e);\n }\n }\n if (!nativeEvent)\n return;\n emitter.emit('element:select', Object.assign(Object.assign({}, event), { nativeEvent, data: {\n data: elements.filter((e) => hasState(e, 'selected')).map(datum),\n } }));\n };\n const isClickElementOrGroup = (element) => {\n if (elementSet.has(element))\n return true;\n for (const group of elementSet) {\n const found = traverseElements(group, (el) => el === element);\n if (found)\n return true;\n }\n return false;\n };\n const getRealElement = (element) => {\n if (elementSet.has(element))\n return element;\n for (const group of elementSet) {\n let match = null;\n traverseElements(group, (el) => {\n if (el === element)\n match = group;\n });\n if (match)\n return match;\n }\n return element;\n };\n const click = (event) => {\n const { target: element, nativeEvent = true } = event;\n const select = !isMultiSelectMode ? singleSelect : multipleSelect;\n let el = element;\n const isClickElement = isClickElementOrGroup(element);\n if (!region || isClickElement) {\n // Click non-element shape, reset.\n // Such as the rest of content area(background).\n if (!isClickElement)\n return clear();\n return select({\n event,\n element: getRealElement(el),\n nativeEvent,\n groupBy: groupKey,\n });\n }\n else {\n // Click background region area, select elements in the region.\n // Get element at cursor.x position.\n el = findElement(event);\n if (!elementSet.has(el))\n return clear();\n return select({\n event,\n element: el,\n nativeEvent,\n filter: regionEleFilter,\n groupBy: regionGroupKey,\n groupMap: regionGroup,\n });\n }\n };\n // Handle keyboard events for multi-select mode\n const hotkeys = Array.isArray(multipleSelectHotkey)\n ? multipleSelectHotkey\n : [multipleSelectHotkey];\n const handleKeyDown = (event) => {\n if (hotkeys.includes(event.code) && !activeHotkey) {\n activeHotkey = event.code;\n isMultiSelectMode = true;\n }\n };\n const handleKeyUp = (event) => {\n if (event.code === activeHotkey) {\n activeHotkey = null;\n isMultiSelectMode = false;\n }\n };\n root.addEventListener('click', click);\n if (multipleSelectHotkey) {\n // If a hotkey is set, the initial state should be single mode\n isMultiSelectMode = false;\n document.addEventListener('keydown', handleKeyDown);\n document.addEventListener('keyup', handleKeyUp);\n }\n const onSelect = (e) => {\n const { nativeEvent, data } = e;\n if (nativeEvent)\n return;\n const selectedData = !isMultiSelectMode ? data.data.slice(0, 1) : data.data;\n for (const d of selectedData) {\n const element = selectElementByData(elements, d, datum);\n click({ target: element, nativeEvent: false });\n }\n };\n const onUnSelect = () => {\n clear(false);\n };\n emitter.on('element:select', onSelect);\n emitter.on('element:unselect', onUnSelect);\n return () => {\n for (const e of elements)\n removeLink(e);\n root.removeEventListener('click', click);\n if (multipleSelectHotkey) {\n document.removeEventListener('keydown', handleKeyDown);\n document.removeEventListener('keyup', handleKeyUp);\n }\n emitter.off('element:select', onSelect);\n emitter.off('element:unselect', onUnSelect);\n };\n}\nexport function ElementSelect(_a) {\n var { createGroup, createRegionGroup, background = false, link = false } = _a, rest = __rest(_a, [\"createGroup\", \"createRegionGroup\", \"background\", \"link\"]);\n return (context, _, emitter) => {\n const { container, view, options } = context;\n const { coordinate, scale } = view;\n const plotArea = selectPlotArea(container);\n return elementSelect(plotArea, Object.assign({ elements: selectG2Elements, datum: createDatumof(view), groupKey: createGroup ? createGroup(view) : undefined, regionGroupKey: createRegionGroup\n ? createRegionGroup(view)\n : createXKey(view), coordinate,\n scale, state: mergeState(options, [\n ['selected', background ? {} : { lineWidth: '1', stroke: '#000' }],\n 'unselected',\n ]), background,\n link,\n emitter }, rest));\n };\n}\nElementSelect.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=elementSelect.js.map","import { createXKey } from './utils';\nimport { ElementSelect } from './elementSelect';\nexport function ElementSelectByX(options) {\n return ElementSelect(Object.assign(Object.assign({}, options), { createGroup: createXKey }));\n}\nElementSelectByX.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=elementSelectByX.js.map","import { createColorKey } from './utils';\nimport { ElementSelect } from './elementSelect';\nexport function ElementSelectByColor(options) {\n return ElementSelect(Object.assign(Object.assign({}, options), { createGroup: createColorKey }));\n}\nElementSelectByColor.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=elementSelectByColor.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Line, Text } from '@antv/g';\nimport { deepMix, throttle } from '@antv/util';\nimport { max, min, rollup, sort, bisectCenter, bisector, group, } from '@antv/vendor/d3-array';\nimport { subObject } from '../utils/helper';\nimport { ELEMENT_CLASS_NAME, LABEL_CLASS_NAME, } from '../runtime';\nimport { selectPlotArea, mousePosition } from './utils';\nfunction maybeTransform(options) {\n const { transform = [] } = options;\n const normalizeY = transform.find((d) => d.type === 'normalizeY');\n if (normalizeY)\n return normalizeY;\n const newNormalizeY = { type: 'normalizeY' };\n transform.push(newNormalizeY);\n options.transform = transform;\n return newNormalizeY;\n}\nfunction markValue(markState, markName, channels) {\n const [value] = Array.from(markState.entries())\n .filter(([mark]) => mark.type === markName)\n .map(([mark]) => {\n const { encode } = mark;\n const channel = (name) => {\n const channel = encode[name];\n return [name, channel ? channel.value : undefined];\n };\n return Object.fromEntries(channels.map(channel));\n });\n return value;\n}\n/**\n * @todo Perf\n */\nexport function ChartIndex(_a) {\n var { wait = 20, leading, trailing = false, labelFormatter = (date) => `${date}` } = _a, style = __rest(_a, [\"wait\", \"leading\", \"trailing\", \"labelFormatter\"]);\n return (context) => {\n const { view, container, update, setState } = context;\n const { markState, scale, coordinate } = view;\n // Get line mark value, exit if it is not existed.\n const value = markValue(markState, 'line', ['x', 'y', 'series']);\n if (!value)\n return;\n // Prepare channel value.\n const { y: Y, x: X, series: S = [] } = value;\n const I = Y.map((_, i) => i);\n const sortedX = sort(I.map((i) => X[i]));\n // Prepare shapes.\n const plotArea = selectPlotArea(container);\n const lines = container.getElementsByClassName(ELEMENT_CLASS_NAME);\n const labels = container.getElementsByClassName(LABEL_CLASS_NAME);\n // The format of label key: `${elementKey}-index`,\n // group labels by elementKey.\n const keyofLabel = (d) => d.__data__.key.split('-')[0];\n const keyLabels = group(labels, keyofLabel);\n const rule = new Line({\n style: Object.assign({ x1: 0, y1: 0, x2: 0, y2: plotArea.getAttribute('height'), stroke: 'black', lineWidth: 1 }, subObject(style, 'rule')),\n });\n const text = new Text({\n style: Object.assign({ x: 0, y: plotArea.getAttribute('height'), text: '', fontSize: 10 }, subObject(style, 'label')),\n });\n rule.append(text);\n plotArea.appendChild(rule);\n // Get the closet date to the rule.\n const dateByFocus = (coordinate, scaleX, focus) => {\n const [normalizedX] = coordinate.invert(focus);\n const date = scaleX.invert(normalizedX);\n return sortedX[bisectCenter(sortedX, date)];\n };\n // Update rule and label content.\n const updateRule = (focus, date) => {\n rule.setAttribute('x1', focus[0]);\n rule.setAttribute('x2', focus[0]);\n text.setAttribute('text', labelFormatter(date));\n };\n // Store the new inner state alter rerender the view.\n let newView;\n // Rerender the view to update basis for each line.\n const updateBasisByRerender = (focus) => __awaiter(this, void 0, void 0, function* () {\n // Find the closetDate to the rule.\n const { x: scaleX } = scale;\n const date = dateByFocus(coordinate, scaleX, focus);\n updateRule(focus, date);\n setState('chartIndex', (options) => {\n // Clone options and get line mark.\n const clonedOptions = deepMix({}, options);\n const lineMark = clonedOptions.marks.find((d) => d.type === 'line');\n // Update domain of y scale for the line mark.\n const r = (I) => max(I, (i) => +Y[i]) / min(I, (i) => +Y[i]);\n const k = max(rollup(I, r, (i) => S[i]).values());\n const domainY = [1 / k, k];\n deepMix(lineMark, {\n scale: { y: { domain: domainY } },\n });\n // Update normalize options.\n const normalizeY = maybeTransform(lineMark);\n normalizeY.groupBy = 'color';\n normalizeY.basis = (I, Y) => {\n const i = I[bisector((i) => X[+i]).center(I, date)];\n return Y[i];\n };\n // Disable animation.\n for (const mark of clonedOptions.marks)\n mark.animate = false;\n return clonedOptions;\n });\n const newState = yield update('chartIndex');\n newView = newState.view;\n });\n // Only apply translate to update basis for each line.\n // If performance is ok, there is no need to use this\n // strategy to update basis.\n const updateBasisByTranslate = (focus) => {\n // Find the closetDate to the rule.\n const { scale, coordinate } = newView;\n const { x: scaleX, y: scaleY } = scale;\n const date = dateByFocus(coordinate, scaleX, focus);\n updateRule(focus, date);\n // Translate mark and label for better performance.\n for (const line of lines) {\n // Compute transform in y direction.\n const { seriesIndex: SI, key } = line.__data__;\n const i = SI[bisector((i) => X[+i]).center(SI, date)];\n const p0 = [0, scaleY.map(1)]; // basis point\n const p1 = [0, scaleY.map(Y[i] / Y[SI[0]])];\n const [, y0] = coordinate.map(p0);\n const [, y1] = coordinate.map(p1);\n const dy = y0 - y1;\n line.setAttribute('transform', `translate(0, ${dy})`);\n // Update line and related label.\n const labels = keyLabels.get(key) || [];\n for (const label of labels) {\n // @todo Replace with style.transform.\n // It now has unexpected behavior.\n label.setAttribute('dy', dy);\n }\n }\n };\n const updateBasis = throttle((event) => {\n const focus = mousePosition(plotArea, event);\n if (!focus)\n return;\n updateBasisByTranslate(focus);\n }, wait, { leading, trailing });\n updateBasisByRerender([0, 0]);\n plotArea.addEventListener('pointerenter', updateBasis);\n plotArea.addEventListener('pointermove', updateBasis);\n plotArea.addEventListener('pointerleave', updateBasis);\n return () => {\n rule.remove();\n plotArea.removeEventListener('pointerenter', updateBasis);\n plotArea.removeEventListener('pointermove', updateBasis);\n plotArea.removeEventListener('pointerleave', updateBasis);\n };\n };\n}\nChartIndex.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=chartIndex.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { deepMix, throttle } from '@antv/util';\nimport { subObject } from '../utils/helper';\nimport { useState, setCursor, restoreCursor } from './utils';\nexport const CATEGORY_LEGEND_CLASS_NAME = 'legend-category';\nexport const CONTINUOUS_LEGEND_CLASS_NAME = 'legend-continuous';\nexport const LEGEND_ITEMS_CLASS_NAME = 'items-item';\nexport const LEGEND_MAKER_CLASS_NAME = 'legend-category-item-marker';\nexport const LEGEND_LABEL_CLASS_NAME = 'legend-category-item-label';\nexport function markerOf(item) {\n return item.getElementsByClassName(LEGEND_MAKER_CLASS_NAME)[0];\n}\nexport function labelOf(item) {\n return item.getElementsByClassName(LEGEND_LABEL_CLASS_NAME)[0];\n}\nexport function itemsOf(root) {\n return root.getElementsByClassName(LEGEND_ITEMS_CLASS_NAME);\n}\nexport function legendsOf(root) {\n return root.getElementsByClassName(CATEGORY_LEGEND_CLASS_NAME);\n}\nexport function legendsContinuousOf(root) {\n return root.getElementsByClassName(CONTINUOUS_LEGEND_CLASS_NAME);\n}\nexport function legendClearSetState(root, setState) {\n const legends = [...legendsOf(root), ...legendsContinuousOf(root)];\n legends.forEach((legend) => {\n setState(legend, (v) => v);\n });\n}\nexport function dataOf(root) {\n // legend -> layout -> container\n let parent = root.parentNode;\n while (parent && !parent.__data__) {\n parent = parent.parentNode;\n }\n return parent.__data__;\n}\nexport function attributesOf(root) {\n let child = root;\n while (child && !child.attr('class').startsWith('legend')) {\n child = child.children[0];\n }\n return child.attributes;\n}\nfunction legendFilterOrdinal(root, { legends, // given the root of chart returns legends to be manipulated\nmarker: markerOf, // given the legend returns the marker\nlabel: labelOf, // given the legend returns the label\ndatum, // given the legend returns the value\nfilter, // invoke when dispatch filter event,\nemitter, channel, state = {}, // state options\n }) {\n // Index handler by item.\n const itemClick = new Map();\n const itemPointerenter = new Map();\n const itemPointerout = new Map();\n const { unselected = {\n markerStroke: '#aaa',\n markerFill: '#aaa',\n labelFill: '#aaa',\n }, } = state;\n const markerStyle = { unselected: subObject(unselected, 'marker') };\n const labelStyle = { unselected: subObject(unselected, 'label') };\n const { setState: setM, removeState: removeM } = useState(markerStyle, undefined);\n const { setState: setL, removeState: removeL } = useState(labelStyle, undefined);\n const items = Array.from(legends(root));\n let selectedValues = items.map(datum);\n const updateLegendState = () => {\n for (const item of items) {\n const value = datum(item);\n const marker = markerOf(item);\n const label = labelOf(item);\n if (!selectedValues.includes(value)) {\n setM(marker, 'unselected');\n setL(label, 'unselected');\n }\n else {\n removeM(marker, 'unselected');\n removeL(label, 'unselected');\n }\n }\n };\n for (const item of items) {\n // Defined handlers.\n const pointerenter = () => {\n setCursor(root, 'pointer');\n };\n const pointerout = () => {\n restoreCursor(root);\n };\n const click = (event) => __awaiter(this, void 0, void 0, function* () {\n const value = datum(item);\n const index = selectedValues.indexOf(value);\n if (index === -1)\n selectedValues.push(value);\n else\n selectedValues.splice(index, 1);\n yield filter(selectedValues);\n updateLegendState();\n const { nativeEvent = true } = event;\n if (!nativeEvent)\n return;\n if (selectedValues.length === items.length) {\n emitter.emit('legend:reset', { nativeEvent });\n }\n else {\n // Emit events.\n emitter.emit('legend:filter', Object.assign(Object.assign({}, event), { nativeEvent, data: {\n channel,\n values: selectedValues,\n } }));\n }\n });\n // Bind and store handlers.\n item.addEventListener('click', click);\n item.addEventListener('pointerenter', pointerenter);\n item.addEventListener('pointerout', pointerout);\n itemClick.set(item, click);\n itemPointerenter.set(item, pointerenter);\n itemPointerout.set(item, pointerout);\n }\n const onFilter = (event) => __awaiter(this, void 0, void 0, function* () {\n const { nativeEvent } = event;\n if (nativeEvent)\n return;\n const { data } = event;\n const { channel: specifiedChannel, values } = data;\n if (specifiedChannel !== channel)\n return;\n selectedValues = values;\n yield filter(selectedValues);\n updateLegendState();\n });\n const onEnd = (event) => __awaiter(this, void 0, void 0, function* () {\n const { nativeEvent } = event;\n if (nativeEvent)\n return;\n selectedValues = items.map(datum);\n yield filter(selectedValues);\n updateLegendState();\n });\n emitter.on('legend:filter', onFilter);\n emitter.on('legend:reset', onEnd);\n return () => {\n for (const item of items) {\n item.removeEventListener('click', itemClick.get(item));\n item.removeEventListener('pointerenter', itemPointerenter.get(item));\n item.removeEventListener('pointerout', itemPointerout.get(item));\n emitter.off('legend:filter', onFilter);\n emitter.off('legend:reset', onEnd);\n }\n };\n}\nfunction legendFilterContinuous(_, { legend, filter, emitter, channel }) {\n const onValueChange = ({ detail: { value } }) => {\n filter(value);\n emitter.emit({\n nativeEvent: true,\n data: {\n channel,\n values: value,\n },\n });\n };\n legend.addEventListener('valuechange', onValueChange);\n return () => {\n legend.removeEventListener('valuechange', onValueChange);\n };\n}\nfunction filterView(context, // View instance,\n{ legend, // Legend instance.\nchannel, // Filter Channel.\nvalue, // Filtered Values.\nordinal, // Data type of the legend.\nchannels, // Channels for this legend.\nallChannels, // Channels for all legends.\nfacet = false, // For facet.\n }) {\n return __awaiter(this, void 0, void 0, function* () {\n const { view, update, setState } = context;\n setState(legend, (viewOptions) => {\n const { marks } = viewOptions;\n // Add filter transform for every marks,\n // which will skip for mark without color channel.\n const newMarks = marks.map((mark) => {\n if (mark.type === 'legends')\n return mark;\n // Inset after aggregate transform, such as group, and bin.\n const { transform = [], data = [] } = mark;\n const index = transform.findIndex(({ type }) => type.startsWith('group') || type.startsWith('bin'));\n const newTransform = [...transform];\n if (data.length) {\n newTransform.splice(index + 1, 0, {\n type: 'filter',\n [channel]: { value, ordinal },\n });\n }\n // Set domain of scale to preserve encoding.\n const newScale = Object.fromEntries(channels.map((channel) => [\n channel,\n { domain: view.scale[channel].getOptions().domain },\n ]));\n return deepMix({}, mark, Object.assign(Object.assign({ transform: newTransform, scale: newScale }, (!ordinal && { animate: false })), { legend: facet\n ? false\n : Object.fromEntries(allChannels.map((d) => [d, { preserve: true }])) }));\n });\n return Object.assign(Object.assign({}, viewOptions), { marks: newMarks });\n });\n yield update();\n });\n}\nfunction filterFacets(facets, options) {\n for (const facet of facets) {\n filterView(facet, Object.assign(Object.assign({}, options), { facet: true }));\n }\n}\nexport function LegendFilter() {\n return (context, contexts, emitter) => {\n const { container } = context;\n const facets = contexts.filter((d) => d !== context);\n const isFacet = facets.length > 0;\n const channelsOf = (legend) => {\n return dataOf(legend).scales.map((d) => d.name);\n };\n const legends = [\n ...legendsOf(container),\n ...legendsContinuousOf(container),\n ];\n const allChannels = legends.flatMap(channelsOf);\n const filter = isFacet\n ? throttle(filterFacets, 50, { trailing: true })\n : throttle(filterView, 50, { trailing: true });\n const removes = legends.map((legend) => {\n const { name: channel, domain } = dataOf(legend).scales[0];\n const channels = channelsOf(legend);\n const common = {\n legend,\n channel,\n channels,\n allChannels,\n };\n if (legend.className === CATEGORY_LEGEND_CLASS_NAME) {\n return legendFilterOrdinal(container, {\n legends: itemsOf,\n marker: markerOf,\n label: labelOf,\n datum: (d) => {\n const { __data__: datum } = d;\n const { index } = datum;\n return domain[index];\n },\n filter: (value) => {\n const options = Object.assign(Object.assign({}, common), { value, ordinal: true });\n if (isFacet)\n filter(facets, options);\n else\n filter(context, options);\n },\n state: legend.attributes.state,\n channel,\n emitter,\n });\n }\n else {\n return legendFilterContinuous(container, {\n legend,\n filter: (value) => {\n const options = Object.assign(Object.assign({}, common), { value, ordinal: false });\n if (isFacet)\n filter(facets, options);\n else\n filter(context, options);\n },\n emitter,\n channel,\n });\n }\n });\n return () => {\n removes.forEach((remove) => remove());\n };\n };\n}\n//# sourceMappingURL=legendFilter.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Rect, Path } from '@antv/g';\nimport { subObject, omitPrefixObject } from '../utils/helper';\nimport { selectionOf, pixelsOf } from '../utils/scale';\nimport { createElement } from '../utils/createElement';\nimport { select } from '../utils/selection';\nimport { selectG2Elements, selectPlotArea, createDatumof, useState, createValueof, setCursor, brushMousePosition, selectFacetG2Elements, mergeState, selectFacetViews, } from './utils';\nfunction intersect(bbox1, bbox2) {\n const [minX1, minY1, maxX1, maxY1] = bbox1;\n const [minX2, minY2, maxX2, maxY2] = bbox2;\n return !(minX2 > maxX1 || maxX2 < minX1 || minY2 > maxY1 || maxY2 < minY1);\n}\nfunction normalizeBounds(x, y, x1, y1, extent) {\n const [minX, minY, maxX, maxY] = extent;\n return [\n Math.max(minX, Math.min(x, x1)),\n Math.max(minY, Math.min(y, y1)),\n Math.min(maxX, Math.max(x, x1)),\n Math.min(maxY, Math.max(y, y1)),\n ];\n}\nfunction bboxOf(root) {\n const { width, height } = root.getBBox();\n return [0, 0, width, height];\n}\nfunction applyStyle(selection, style) {\n for (const [key, value] of Object.entries(style)) {\n selection.style(key, value);\n }\n}\nconst ResizableMask = createElement((g) => {\n const _a = g.attributes, { x, y, width, height, class: className, renders = {}, handleSize: size = 10, document } = _a, style = __rest(_a, [\"x\", \"y\", \"width\", \"height\", \"class\", \"renders\", \"handleSize\", \"document\"]);\n if (!document ||\n width === undefined ||\n height === undefined ||\n x === undefined ||\n y === undefined)\n return;\n const half = size / 2;\n const renderRect = (g, options, document) => {\n if (!g.handle) {\n g.handle = document.createElement('rect');\n g.append(g.handle);\n }\n const { handle } = g;\n handle.attr(options);\n return handle;\n };\n const _b = subObject(omitPrefixObject(style, 'handleNW', 'handleNE'), 'handleN'), { render: handleNRender = renderRect } = _b, handleNStyle = __rest(_b, [\"render\"]);\n const _c = subObject(style, 'handleE'), { render: handleERender = renderRect } = _c, handleEStyle = __rest(_c, [\"render\"]);\n const _d = subObject(omitPrefixObject(style, 'handleSE', 'handleSW'), 'handleS'), { render: handleSRender = renderRect } = _d, handleSStyle = __rest(_d, [\"render\"]);\n const _e = subObject(style, 'handleW'), { render: handleWRender = renderRect } = _e, handleWStyle = __rest(_e, [\"render\"]);\n const _f = subObject(style, 'handleNW'), { render: handleNWRender = renderRect } = _f, handleNWStyle = __rest(_f, [\"render\"]);\n const _g = subObject(style, 'handleNE'), { render: handleNERender = renderRect } = _g, handleNEStyle = __rest(_g, [\"render\"]);\n const _h = subObject(style, 'handleSE'), { render: handleSERender = renderRect } = _h, handleSEStyle = __rest(_h, [\"render\"]);\n const _j = subObject(style, 'handleSW'), { render: handleSWRender = renderRect } = _j, handleSWStyle = __rest(_j, [\"render\"]);\n const renderHandle = (g, renderNode) => {\n const { id } = g;\n const handle = renderNode(g, g.attributes, document);\n handle.id = id;\n handle.style.draggable = true;\n };\n const appendHandle = (handleRender) => {\n return () => {\n const Node = createElement((g) => renderHandle(g, handleRender));\n return new Node({});\n };\n };\n const container = select(g)\n .attr('className', className)\n .style('transform', `translate(${x}, ${y})`)\n .style('draggable', true);\n container\n .maybeAppend('selection', 'rect')\n .style('draggable', true)\n .style('fill', 'transparent')\n .call(applyStyle, Object.assign(Object.assign({ width,\n height }, omitPrefixObject(style, 'handle')), { transform: undefined }));\n container\n .maybeAppend('handle-n', appendHandle(handleNRender))\n .style('x', half)\n .style('y', -half)\n .style('width', width - size)\n .style('height', size)\n .style('fill', 'transparent')\n .call(applyStyle, handleNStyle);\n container\n .maybeAppend('handle-e', appendHandle(handleERender))\n .style('x', width - half)\n .style('y', half)\n .style('width', size)\n .style('height', height - size)\n .style('fill', 'transparent')\n .call(applyStyle, handleEStyle);\n container\n .maybeAppend('handle-s', appendHandle(handleSRender))\n .style('x', half)\n .style('y', height - half)\n .style('width', width - size)\n .style('height', size)\n .style('fill', 'transparent')\n .call(applyStyle, handleSStyle);\n container\n .maybeAppend('handle-w', appendHandle(handleWRender))\n .style('x', -half)\n .style('y', half)\n .style('width', size)\n .style('height', height - size)\n .style('fill', 'transparent')\n .call(applyStyle, handleWStyle);\n container\n .maybeAppend('handle-nw', appendHandle(handleNWRender))\n .style('x', -half)\n .style('y', -half)\n .style('width', size)\n .style('height', size)\n .style('fill', 'transparent')\n .call(applyStyle, handleNWStyle);\n container\n .maybeAppend('handle-ne', appendHandle(handleNERender))\n .style('x', width - half)\n .style('y', -half)\n .style('width', size)\n .style('height', size)\n .style('fill', 'transparent')\n .call(applyStyle, handleNEStyle);\n container\n .maybeAppend('handle-se', appendHandle(handleSERender))\n .style('x', width - half)\n .style('y', height - half)\n .style('width', size)\n .style('height', size)\n .style('fill', 'transparent')\n .call(applyStyle, handleSEStyle);\n container\n .maybeAppend('handle-sw', appendHandle(handleSWRender))\n .style('x', -half)\n .style('y', height - half)\n .style('width', size)\n .style('height', size)\n .style('fill', 'transparent')\n .call(applyStyle, handleSWStyle);\n});\nexport function brush(root, _a) {\n var { brushed = () => { }, brushended = () => { }, brushcreated = () => { }, brushstarted = () => { }, brushupdated = () => { }, extent = bboxOf(root), brushRegion = (x, y, x1, y1, extent) => [x, y, x1, y1], reverse = false, fill = '#777', fillOpacity = '0.3', stroke = '#fff', selectedHandles = [\n 'handle-n',\n 'handle-e',\n 'handle-s',\n 'handle-w',\n 'handle-nw',\n 'handle-ne',\n 'handle-se',\n 'handle-sw',\n ] } = _a, style = __rest(_a, [\"brushed\", \"brushended\", \"brushcreated\", \"brushstarted\", \"brushupdated\", \"extent\", \"brushRegion\", \"reverse\", \"fill\", \"fillOpacity\", \"stroke\", \"selectedHandles\"]);\n let start = null; // Start point of mask.\n let end = null; // End point of mask.\n let moveStart = null; // Start point of moving mask.\n let mask = null; // Mask instance.\n let background = null;\n let creating = false;\n const [originX, originY, width, height] = extent;\n setCursor(root, 'crosshair');\n root.style.draggable = true; // Make it response to drag event.\n // Remove old mask and init new mask.\n const initMask = (x, y, event) => {\n brushstarted(event);\n if (mask)\n mask.remove();\n if (background)\n background.remove();\n start = [x, y];\n if (reverse)\n return initReverseMask();\n initNormalMask();\n };\n const initReverseMask = () => {\n background = new Path({\n style: Object.assign(Object.assign({}, style), { fill,\n fillOpacity,\n stroke, pointerEvents: 'none' }),\n });\n mask = new ResizableMask({\n // @ts-ignore\n style: {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n draggable: true,\n document: root.ownerDocument,\n },\n className: 'mask',\n });\n root.appendChild(background);\n root.appendChild(mask);\n };\n const initNormalMask = () => {\n mask = new ResizableMask({\n // @ts-ignore\n style: Object.assign(Object.assign({ document: root.ownerDocument, x: 0, y: 0 }, style), { fill,\n fillOpacity,\n stroke, draggable: true }),\n className: 'mask',\n });\n root.appendChild(mask);\n };\n // Remove mask and reset states.\n const removeMask = (emit = true) => {\n if (mask)\n mask.remove();\n if (background)\n background.remove();\n start = null;\n end = null;\n moveStart = null;\n creating = false;\n mask = null;\n background = null;\n brushended(emit);\n };\n // Update mask and invoke brushended callback.\n const updateMask = (start, end, emit = true) => {\n const [x, y, x1, y1] = normalizeBounds(start[0], start[1], end[0], end[1], extent);\n const [fx, fy, fx1, fy1] = brushRegion(x, y, x1, y1, extent);\n if (reverse)\n updateReverseMask(fx, fy, fx1, fy1);\n else\n updateNormalMask(fx, fy, fx1, fy1);\n brushed(fx, fy, fx1, fy1, emit);\n return [fx, fy, fx1, fy1];\n };\n const updateNormalMask = (x, y, x1, y1) => {\n mask.style.x = x;\n mask.style.y = y;\n mask.style.width = x1 - x;\n mask.style.height = y1 - y;\n };\n const updateReverseMask = (x, y, x1, y1) => {\n background.style.d = `\n M${originX},${originY}L${width},${originY}L${width},${height}L${originX},${height}Z\n M${x},${y}L${x},${y1}L${x1},${y1}L${x1},${y}Z\n `;\n mask.style.x = x;\n mask.style.y = y;\n mask.style.width = x1 - x;\n mask.style.height = y1 - y;\n };\n // Move and update mask.\n const moveMask = (current) => {\n const clip = (dt, start, end, min, max) => {\n if (dt + start < min)\n return min - start;\n if (dt + end > max)\n return max - end;\n return dt;\n };\n const dx = current[0] - moveStart[0];\n const dy = current[1] - moveStart[1];\n const dx1 = clip(dx, start[0], end[0], originX, width);\n const dy1 = clip(dy, start[1], end[1], originY, height);\n const currentStart = [start[0] + dx1, start[1] + dy1];\n const currentEnd = [end[0] + dx1, end[1] + dy1];\n updateMask(currentStart, currentEnd);\n };\n const handles = {\n 'handle-n': { vector: [0, 1, 0, 0], cursor: 'ns-resize' },\n 'handle-e': { vector: [0, 0, 1, 0], cursor: 'ew-resize' },\n 'handle-s': { vector: [0, 0, 0, 1], cursor: 'ns-resize' },\n 'handle-w': { vector: [1, 0, 0, 0], cursor: 'ew-resize' },\n 'handle-nw': { vector: [1, 1, 0, 0], cursor: 'nwse-resize' },\n 'handle-ne': { vector: [0, 1, 1, 0], cursor: 'nesw-resize' },\n 'handle-se': { vector: [0, 0, 1, 1], cursor: 'nwse-resize' },\n 'handle-sw': { vector: [1, 0, 0, 1], cursor: 'nesw-resize' },\n };\n const isMask = (target) => {\n return isSelection(target) || isHandle(target);\n };\n const isHandle = (target) => {\n const { id } = target;\n if (selectedHandles.indexOf(id) === -1)\n return false;\n return new Set(Object.keys(handles)).has(id);\n };\n const isSelection = (target) => {\n return target === mask.getElementById('selection');\n };\n // If target is plot area, create mask.\n // If target is mask, about to update position.\n const dragstart = (event) => {\n const { target } = event;\n const [offsetX, offsetY] = brushMousePosition(root, event);\n if (!mask || !isMask(target)) {\n initMask(offsetX, offsetY, event);\n creating = true;\n return;\n }\n if (isMask(target)) {\n moveStart = [offsetX, offsetY];\n }\n };\n const drag = (event) => {\n const { target } = event;\n const mouse = brushMousePosition(root, event);\n if (!start)\n return;\n // If target is plot area, resize mask.\n if (!moveStart)\n return updateMask(start, mouse);\n // If target is selection area, move mask.\n if (isSelection(target))\n return moveMask(mouse);\n // If target is handle area, resize mask.\n const [dx, dy] = [mouse[0] - moveStart[0], mouse[1] - moveStart[1]];\n const { id } = target;\n if (handles[id]) {\n const [sx, sy, ex, ey] = handles[id].vector;\n return updateMask([start[0] + dx * sx, start[1] + dy * sy], [end[0] + dx * ex, end[1] + dy * ey]);\n }\n };\n // If target is plot area, finish creating.\n // If target is mask, finish moving mask.\n const dragend = (event) => {\n if (moveStart) {\n moveStart = null;\n // Update start and end;\n const { x, y, width, height } = mask.style;\n start = [x, y];\n end = [x + width, y + height];\n brushupdated(x, y, x + width, y + height, event);\n return;\n }\n end = brushMousePosition(root, event);\n const [fx, fy, fx1, fy1] = updateMask(start, end);\n creating = false;\n brushcreated(fx, fy, fx1, fy1, event);\n };\n // Hide mask.\n const click = (event) => {\n const { target } = event;\n if (mask && !isMask(target))\n removeMask();\n };\n // Update cursor depends on hovered element.\n const pointermove = (event) => {\n const { target } = event;\n if (!mask || !isMask(target) || creating)\n setCursor(root, 'crosshair');\n else if (isSelection(target))\n setCursor(root, 'move');\n else if (isHandle(target))\n setCursor(root, handles[target.id].cursor);\n };\n const pointerleave = () => {\n setCursor(root, 'default');\n };\n root.addEventListener('dragstart', dragstart);\n root.addEventListener('drag', drag);\n root.addEventListener('dragend', dragend);\n root.addEventListener('click', click);\n root.addEventListener('pointermove', pointermove);\n root.addEventListener('pointerleave', pointerleave);\n return {\n mask,\n move(x, y, x1, y1, emit = true) {\n if (!mask)\n initMask(x, y, {});\n start = [x, y];\n end = [x1, y1];\n updateMask([x, y], [x1, y1], emit);\n },\n remove(emit = true) {\n if (mask)\n removeMask(emit);\n },\n destroy() {\n // Do not emit brush:end event.\n if (mask)\n removeMask(false);\n setCursor(root, 'default');\n root.removeEventListener('dragstart', dragstart);\n root.removeEventListener('drag', drag);\n root.removeEventListener('dragend', dragend);\n root.removeEventListener('click', click);\n root.removeEventListener('pointermove', pointermove);\n root.removeEventListener('pointerleave', pointerleave);\n },\n };\n}\nfunction selectSiblingViews(target, viewInstances, brushKey) {\n return viewInstances.filter((d) => {\n if (d === target)\n return false;\n const { interaction = {} } = d.options;\n return Object.values(interaction).find((d) => d.brushKey === brushKey);\n });\n}\nfunction selectSiblingContainers(target, viewInstances, brushKey) {\n return selectSiblingViews(target, viewInstances, brushKey).map((d) => selectPlotArea(d.container));\n}\nfunction selectSiblingOptions(target, viewInstances, brushKey) {\n return selectSiblingViews(target, viewInstances, brushKey).map((d) => d.options);\n}\n/**\n * @todo Brush over view for series view.\n * @todo Test perf.\n */\nexport function brushHighlight(root, _a) {\n var { elements: elementof, selectedHandles, siblings: siblingsof = (root) => [], datum, brushRegion, extent: optionalExtent, reverse, scale, coordinate, series = false, key = (d) => d, bboxOf = (root) => {\n const { x, y, width, height } = root.style;\n return { x, y, width, height };\n }, state = {}, emitter } = _a, rest = __rest(_a, [\"elements\", \"selectedHandles\", \"siblings\", \"datum\", \"brushRegion\", \"extent\", \"reverse\", \"scale\", \"coordinate\", \"series\", \"key\", \"bboxOf\", \"state\", \"emitter\"]);\n const elements = elementof(root);\n const siblings = siblingsof(root);\n const siblingElements = siblings.flatMap(elementof);\n const valueof = createValueof(elements, datum);\n const brushStyle = subObject(rest, 'mask');\n const { setState, removeState } = useState(state, valueof);\n const clonedElement = new Map();\n const { width: rootWidth, height: rootHeight, x: ordinalX = 0, y: ordinalY = 0, } = bboxOf(root);\n const extent = optionalExtent\n ? optionalExtent\n : [0, 0, rootWidth, rootHeight];\n const brushended = () => {\n for (const element of [...elements, ...siblingElements]) {\n removeState(element, 'active', 'inactive');\n }\n };\n const brushed = (x, y, x1, y1) => {\n var _a;\n // Hide brush for the sibling view.\n for (const sibling of siblings)\n (_a = sibling.brush) === null || _a === void 0 ? void 0 : _a.remove();\n // Store the key of the active element.\n const keys = new Set();\n // Highlight and store selected elements.\n for (const element of elements) {\n const { min, max } = element.getLocalBounds();\n const [ex, ey] = min;\n const [ex1, ey1] = max;\n if (!intersect([ex, ey, ex1, ey1], [x, y, x1, y1])) {\n setState(element, 'inactive');\n }\n else {\n setState(element, 'active');\n keys.add(key(element));\n }\n }\n // Highlight elements with same key in sibling view.\n for (const element of siblingElements) {\n if (keys.has(key(element)))\n setState(element, 'active');\n else\n setState(element, 'inactive');\n }\n };\n const seriesBrushend = () => {\n for (const element of elements)\n removeState(element, 'inactive');\n for (const cloned of clonedElement.values())\n cloned.remove();\n clonedElement.clear();\n };\n const seriesBrushed = (x, y, x1, y1) => {\n const clone = (element) => {\n const cloned = element.cloneNode();\n cloned.__data__ = element.__data__;\n element.parentNode.appendChild(cloned);\n clonedElement.set(element, cloned);\n return cloned;\n };\n // Create a clipPath shared between all children.\n const clipPath = new Rect({\n style: {\n x: x + ordinalX,\n y: y + ordinalY,\n width: x1 - x,\n height: y1 - y,\n },\n });\n root.appendChild(clipPath);\n for (const element of elements) {\n const cloned = clonedElement.get(element) || clone(element);\n cloned.style.clipPath = clipPath;\n setState(element, 'inactive');\n setState(cloned, 'active');\n }\n };\n const brushHandler = brush(root, Object.assign(Object.assign({}, brushStyle), { extent,\n brushRegion,\n reverse,\n selectedHandles, brushended: (emit) => {\n const handler = series ? seriesBrushend : brushended;\n if (emit) {\n emitter.emit('brush:remove', { nativeEvent: true });\n }\n handler();\n }, brushed: (x, y, x1, y1, emit) => {\n const selection = selectionOf(x, y, x1, y1, scale, coordinate);\n if (emit) {\n emitter.emit('brush:highlight', {\n nativeEvent: true,\n data: { selection },\n });\n }\n const handler = series ? seriesBrushed : brushed;\n handler(x, y, x1, y1);\n }, brushcreated: (x, y, x1, y1, event) => {\n const selection = selectionOf(x, y, x1, y1, scale, coordinate);\n emitter.emit('brush:end', Object.assign(Object.assign({}, event), { nativeEvent: true, data: { selection } }));\n }, brushupdated: (x, y, x1, y1, event) => {\n const selection = selectionOf(x, y, x1, y1, scale, coordinate);\n emitter.emit('brush:end', Object.assign(Object.assign({}, event), { nativeEvent: true, data: { selection } }));\n }, brushstarted: (e) => {\n emitter.emit('brush:start', e);\n } }));\n // Move brush and highlight data.\n const onHighlight = ({ nativeEvent, data }) => {\n if (nativeEvent)\n return;\n const { selection } = data;\n const [x, y, x1, y1] = pixelsOf(selection, scale, coordinate);\n brushHandler.move(x, y, x1, y1, false);\n };\n emitter.on('brush:highlight', onHighlight);\n // Remove brush and reset data.\n const onRemove = ({ nativeEvent } = {}) => {\n if (nativeEvent)\n return;\n brushHandler.remove(false);\n };\n emitter.on('brush:remove', onRemove);\n // Remove event handlers.\n const preBrushDestroy = brushHandler.destroy.bind(brushHandler);\n brushHandler.destroy = () => {\n emitter.off('brush:highlight', onHighlight);\n emitter.off('brush:remove', onRemove);\n preBrushDestroy();\n };\n return brushHandler;\n}\nexport function BrushHighlight(_a) {\n var { facet, brushKey } = _a, rest = __rest(_a, [\"facet\", \"brushKey\"]);\n return (target, viewInstances, emitter) => {\n const { container, view, options } = target;\n const plotArea = selectPlotArea(container);\n const defaultOptions = {\n maskFill: '#777',\n maskFillOpacity: '0.3',\n maskStroke: '#fff',\n reverse: false,\n };\n const defaultStates = ['active', ['inactive', { opacity: 0.5 }]];\n const { scale, coordinate } = view;\n if (facet) {\n const bbox = plotArea.getBounds();\n const x = bbox.min[0];\n const y = bbox.min[1];\n const x1 = bbox.max[0];\n const y1 = bbox.max[1];\n return brushHighlight(plotArea.parentNode.parentNode, Object.assign(Object.assign({ elements: () => selectFacetG2Elements(target, viewInstances), datum: createDatumof(selectFacetViews(target, viewInstances).map((d) => d.view)), brushRegion: (x, y, x1, y1) => [x, y, x1, y1], extent: [x, y, x1, y1], state: mergeState(selectFacetViews(target, viewInstances).map((d) => d.options), defaultStates), emitter,\n scale,\n coordinate, selectedHandles: undefined }, defaultOptions), rest));\n }\n const brush = brushHighlight(plotArea, Object.assign(Object.assign({ elements: selectG2Elements, key: (element) => element.__data__.key, siblings: () => selectSiblingContainers(target, viewInstances, brushKey), datum: createDatumof([\n view,\n ...selectSiblingViews(target, viewInstances, brushKey).map((d) => d.view),\n ]), brushRegion: (x, y, x1, y1) => [x, y, x1, y1], extent: undefined, state: mergeState([options, ...selectSiblingOptions(target, viewInstances, brushKey)], defaultStates), emitter,\n scale,\n coordinate, selectedHandles: undefined }, defaultOptions), rest));\n // Bind brush to the view it belongs to.\n //@ts-ignore\n plotArea.brush = brush;\n return () => brush.destroy();\n };\n}\n//# sourceMappingURL=brushHighlight.js.map","import { BrushHighlight } from './brushHighlight';\nexport function brushXRegion(x, y, x1, y1, extent) {\n const [, minY, , maxY] = extent;\n return [x, minY, x1, maxY];\n}\nexport function BrushXHighlight(options) {\n return BrushHighlight(Object.assign(Object.assign({}, options), { brushRegion: brushXRegion, selectedHandles: ['handle-e', 'handle-w'] }));\n}\n//# sourceMappingURL=brushXHighlight.js.map","import { BrushHighlight } from './brushHighlight';\nexport function brushYRegion(x, y, x1, y1, extent) {\n const [minX, , maxX] = extent;\n return [minX, y, maxX, y1];\n}\nexport function BrushYHighlight(options) {\n return BrushHighlight(Object.assign(Object.assign({}, options), { brushRegion: brushYRegion, selectedHandles: ['handle-n', 'handle-s'] }));\n}\n//# sourceMappingURL=brushYHighlight.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Rect } from '@antv/g';\nimport { subObject } from '../utils/helper';\nimport { domainOf } from '../utils/scale';\nimport { brush } from './brushHighlight';\nimport { brushXRegion } from './brushXHighlight';\nimport { brushYRegion } from './brushYHighlight';\nimport { selectG2Elements, createDatumof, createValueof, useState, selectPlotArea, mergeState, } from './utils';\nexport const AXIS_CLASS_NAME = 'axis';\nexport const AXIS_LINE_CLASS_NAME = 'axis-line';\nexport const AXIS_MAIN_CLASS_NAME = 'axis-main-group';\nexport const AXIS_HOT_AREA_CLASS_NAME = 'axis-hot-area';\nfunction axesOf(container) {\n return container.getElementsByClassName(AXIS_CLASS_NAME);\n}\nfunction lineOf(axis) {\n return axis.getElementsByClassName(AXIS_LINE_CLASS_NAME)[0];\n}\nfunction mainGroupOf(axis) {\n return axis.getElementsByClassName(AXIS_MAIN_CLASS_NAME)[0];\n}\n// Use the bounds of main group of axis as the bounds of axis,\n// get rid of grid and title.\nfunction boundsOfAxis(axis) {\n return mainGroupOf(axis).getLocalBounds();\n}\n// Brush for vertical axis.\nfunction verticalBrush(axis, _a) {\n var { cross, offsetX, offsetY } = _a, style = __rest(_a, [\"cross\", \"offsetX\", \"offsetY\"]);\n const bounds = boundsOfAxis(axis);\n const axisLine = lineOf(axis);\n const [lineX] = axisLine.getLocalBounds().min;\n const [minX, minY] = bounds.min;\n const [maxX, maxY] = bounds.max;\n const size = (maxX - minX) * 2;\n return {\n brushRegion: brushYRegion,\n hotZone: new Rect({\n className: AXIS_HOT_AREA_CLASS_NAME,\n style: Object.assign({ \n // If it is not cross, draw brush in both side of axisLine,\n // otherwise the draw brush within bounds area.\n width: cross ? size / 2 : size, transform: `translate(${(cross ? minX : lineX - size / 2).toFixed(2)}, ${minY})`, height: maxY - minY }, style),\n }),\n extent: cross\n ? // If it is cross, the x range is ignored.\n (x, y, x1, y1) => [-Infinity, y, Infinity, y1]\n : (x, y, x1, y1) => [\n Math.floor(minX - offsetX),\n y,\n Math.ceil(maxX - offsetX),\n y1,\n ],\n };\n}\n// Brush for horizontal axis.\nfunction horizontalBrush(axis, _a) {\n var { offsetY, offsetX, cross = false } = _a, style = __rest(_a, [\"offsetY\", \"offsetX\", \"cross\"]);\n const bounds = boundsOfAxis(axis);\n const axisLine = lineOf(axis);\n const [, lineY] = axisLine.getLocalBounds().min;\n const [minX, minY] = bounds.min;\n const [maxX, maxY] = bounds.max;\n const size = maxY - minY;\n return {\n brushRegion: brushXRegion,\n hotZone: new Rect({\n className: AXIS_HOT_AREA_CLASS_NAME,\n style: Object.assign({ width: maxX - minX, \n // If it is not cross, draw brush in both side of axisLine,\n // otherwise the draw brush within bounds area.\n height: cross ? size : size * 2, transform: `translate(${minX}, ${cross ? minY : lineY - size})` }, style),\n }),\n extent: cross\n ? // If it is cross, the y range is ignored.\n (x, y, x1, y1) => [x, -Infinity, x1, Infinity]\n : (x, y, x1, y1) => [\n x,\n Math.floor(minY - offsetY),\n x1,\n Math.ceil(maxY - offsetY),\n ],\n };\n}\nexport function brushAxisHighlight(root, _a) {\n var { axes: axesOf, // given root, return axes\n elements: elementsOf, // given root, return elements\n points: pointsOf, // given shape, return control points\n horizontal: isHorizontal, // given axis, return direction\n datum, // given shape, return datum\n offsetY, // offsetY for shape area\n offsetX, // offsetX for shape area\n reverse = false, state = {}, emitter, coordinate } = _a, rest = __rest(_a, [\"axes\", \"elements\", \"points\", \"horizontal\", \"datum\", \"offsetY\", \"offsetX\", \"reverse\", \"state\", \"emitter\", \"coordinate\"]) // style\n ;\n const elements = elementsOf(root);\n const axes = axesOf(root);\n const valueof = createValueof(elements, datum);\n const { setState, removeState } = useState(state, valueof);\n const axisExtent = new Map();\n const brushStyle = subObject(rest, 'mask');\n // Only some of shape's points in all mask, it is selected.\n const brushed = (points) => Array.from(axisExtent.values()).every(([x, y, x1, y1]) => points.some(([x0, y0]) => {\n return x0 >= x && x0 <= x1 && y0 >= y && y0 <= y1;\n }));\n const scales = axes.map((d) => d.attributes.scale);\n const extentOf = (D) => (D.length > 2 ? [D[0], D[D.length - 1]] : D);\n const indexDomain = new Map();\n const initIndexDomain = () => {\n indexDomain.clear();\n for (let i = 0; i < axes.length; i++) {\n const scale = scales[i];\n const { domain } = scale.getOptions();\n indexDomain.set(i, extentOf(domain));\n }\n };\n initIndexDomain();\n // Update element when brush changed.\n const updateElement = (i, emit) => {\n const selectedElements = [];\n for (const element of elements) {\n const points = pointsOf(element);\n if (brushed(points)) {\n setState(element, 'active');\n selectedElements.push(element);\n }\n else\n setState(element, 'inactive');\n }\n indexDomain.set(i, selectionOf(selectedElements, i));\n if (!emit)\n return;\n // Emit events.\n const selection = () => {\n if (!cross)\n return Array.from(indexDomain.values());\n const S = [];\n for (const [index, domain] of indexDomain) {\n const scale = scales[index];\n const { name } = scale.getOptions();\n if (name === 'x')\n S[0] = domain;\n else\n S[1] = domain;\n }\n return S;\n };\n emitter.emit('brushAxis:highlight', {\n nativeEvent: true,\n data: {\n selection: selection(),\n },\n });\n };\n const clearElement = (emit) => {\n for (const element of elements)\n removeState(element, 'active', 'inactive');\n initIndexDomain();\n if (!emit)\n return;\n emitter.emit('brushAxis:remove', { nativeEvent: true });\n };\n const selectionOf = (selected, i) => {\n const scale = scales[i];\n const { name } = scale.getOptions();\n const domain = selected.map((d) => {\n const data = d.__data__;\n return scale.invert(data[name]);\n });\n return extentOf(domainOf(scale, domain));\n };\n // Distinguish between parallel coordinates and normal charts.\n const cross = axes.some(isHorizontal) && axes.some((d) => !isHorizontal(d));\n const handlers = [];\n for (let i = 0; i < axes.length; i++) {\n const axis = axes[i];\n const createBrush = isHorizontal(axis) ? horizontalBrush : verticalBrush;\n const { hotZone, brushRegion, extent } = createBrush(axis, {\n offsetY,\n offsetX,\n cross,\n zIndex: 999,\n fill: 'transparent', // Make it interactive.\n });\n axis.parentNode.appendChild(hotZone);\n const brushHandler = brush(hotZone, Object.assign(Object.assign({}, brushStyle), { reverse,\n brushRegion,\n brushended(emit) {\n axisExtent.delete(axis);\n if (Array.from(axisExtent.entries()).length === 0)\n clearElement(emit);\n else\n updateElement(i, emit);\n },\n brushed(x, y, x1, y1, emit) {\n axisExtent.set(axis, extent(x, y, x1, y1));\n updateElement(i, emit);\n } }));\n handlers.push(brushHandler);\n }\n const onRemove = (event = {}) => {\n const { nativeEvent } = event;\n if (nativeEvent)\n return;\n handlers.forEach((d) => d.remove(false));\n };\n const rangeOf = (domain, scale, axis) => {\n const [d0, d1] = domain;\n const maybeStep = (scale) => (scale.getStep ? scale.getStep() : 0);\n const x = abstractOf(d0, scale, axis);\n const x1 = abstractOf(d1, scale, axis) + maybeStep(scale);\n if (isHorizontal(axis))\n return [x, -Infinity, x1, Infinity];\n return [-Infinity, x, Infinity, x1];\n };\n const abstractOf = (x, scale, axis) => {\n const { height, width } = coordinate.getOptions();\n const scale1 = scale.clone();\n if (isHorizontal(axis))\n scale1.update({ range: [0, width] });\n else\n scale1.update({ range: [height, 0] });\n return scale1.map(x);\n };\n const onHighlight = (event) => {\n const { nativeEvent } = event;\n if (nativeEvent)\n return;\n const { selection } = event.data;\n for (let i = 0; i < handlers.length; i++) {\n const domain = selection[i];\n const handler = handlers[i];\n const axis = axes[i];\n if (domain) {\n const scale = scales[i];\n handler.move(...rangeOf(domain, scale, axis), false);\n }\n else {\n handler.remove(false);\n }\n }\n };\n emitter.on('brushAxis:remove', onRemove);\n emitter.on('brushAxis:highlight', onHighlight);\n return () => {\n handlers.forEach((d) => d.destroy());\n emitter.off('brushAxis:remove', onRemove);\n emitter.off('brushAxis:highlight', onHighlight);\n };\n}\n/**\n * @todo Support mask size.\n */\nexport function BrushAxisHighlight(options) {\n return (target, _, emitter) => {\n const { container, view, options: viewOptions } = target;\n const plotArea = selectPlotArea(container);\n const { x: x0, y: y0 } = plotArea.getBBox();\n const { coordinate } = view;\n return brushAxisHighlight(container, Object.assign({ elements: selectG2Elements, axes: axesOf, offsetY: y0, offsetX: x0, points: (element) => element.__data__.points, horizontal: (axis) => {\n const { startPos: [sx, sy], endPos: [ex, ey], } = axis.attributes;\n // attention, non-horizontal does not mean vertical\n // it may has a specific degree angle\n return sx !== ex && sy === ey;\n }, datum: createDatumof(view), state: mergeState(viewOptions, [\n 'active',\n ['inactive', { opacity: 0.5 }],\n ]), coordinate,\n emitter }, options));\n };\n}\n//# sourceMappingURL=brushAxisHighlight.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix } from '@antv/util';\nimport { subObject } from '../utils/helper';\nimport { selectionOf } from '../utils/scale';\nimport { brush as createBrush } from './brushHighlight';\nimport { selectPlotArea } from './utils';\n// Mock dblclick events.\nfunction dblclick(interval = 300) {\n let preTimeStamp = null;\n return (e) => {\n const { timeStamp } = e;\n if (preTimeStamp !== null && timeStamp - preTimeStamp < interval) {\n preTimeStamp = timeStamp;\n return true;\n }\n preTimeStamp = timeStamp;\n return false;\n };\n}\nexport function brushFilter(root, _a) {\n var { filter, reset, brushRegion, extent: optionalExtent, reverse, emitter, scale, coordinate, selection, series = false } = _a, rest = __rest(_a, [\"filter\", \"reset\", \"brushRegion\", \"extent\", \"reverse\", \"emitter\", \"scale\", \"coordinate\", \"selection\", \"series\"]);\n const brushStyle = subObject(rest, 'mask');\n const { width: rootWidth, height: rootHeight } = root.getBBox();\n const extent = optionalExtent\n ? optionalExtent\n : [0, 0, rootWidth, rootHeight];\n const isDblclick = dblclick();\n const brush = createBrush(root, Object.assign(Object.assign({}, brushStyle), { extent,\n brushRegion,\n reverse,\n brushcreated }));\n root.addEventListener('click', click);\n // Filter when brush created.\n function brushcreated(x, y, x1, y1, event) {\n if (x === x1 && y === y1)\n return;\n event.nativeEvent = true;\n filter(selection(x, y, x1, y1), event);\n brush.remove();\n }\n // Reset when dblclick.\n function click(e) {\n if (isDblclick(e)) {\n e.nativeEvent = true;\n reset(e);\n }\n }\n const onFilter = ({ nativeEvent, data }) => {\n if (nativeEvent)\n return;\n const { selection } = data;\n filter(selection, { nativeEvent: false });\n };\n emitter.on('brush:filter', onFilter);\n return () => {\n brush.destroy();\n emitter.off('brush:filter', onFilter);\n root.removeEventListener('click', click);\n };\n}\nexport function BrushFilter(_a) {\n var { hideX = true, hideY = true } = _a, rest = __rest(_a, [\"hideX\", \"hideY\"]);\n return (target, viewInstances, emitter) => {\n const { container, view, options: viewOptions, update, setState } = target;\n const plotArea = selectPlotArea(container);\n const defaultOptions = {\n maskFill: '#777',\n maskFillOpacity: '0.3',\n maskStroke: '#fff',\n unhighlightedOpacity: 0.5,\n reverse: false,\n };\n let filtered = false;\n let filtering = false;\n let newView = view;\n const { scale, coordinate } = view;\n return brushFilter(plotArea, Object.assign(Object.assign({ brushRegion: (x, y, x1, y1) => [x, y, x1, y1], selection: (x, y, x1, y1) => {\n const { scale, coordinate } = newView;\n return selectionOf(x, y, x1, y1, scale, coordinate);\n }, filter: (selection, event) => __awaiter(this, void 0, void 0, function* () {\n // Avoid redundant filter.\n if (filtering)\n return;\n filtering = true;\n // Update the domain of x and y scale to filter data.\n const [domainX, domainY] = selection;\n setState('brushFilter', (options) => {\n const { marks } = options;\n const newMarks = marks.map((mark) => deepMix({\n // Hide label to keep smooth transition.\n axis: Object.assign(Object.assign({}, (hideX && { x: { transform: [{ type: 'hide' }] } })), (hideY && { y: { transform: [{ type: 'hide' }] } })),\n }, mark, {\n // Set nice to false to avoid modify domain.\n scale: {\n x: { domain: domainX, nice: false },\n y: { domain: domainY, nice: false },\n },\n }));\n return Object.assign(Object.assign({}, viewOptions), { marks: newMarks, clip: true });\n });\n // Emit event.\n emitter.emit('brush:filter', Object.assign(Object.assign({}, event), { data: { selection: [domainX, domainY] } }));\n const newState = yield update();\n newView = newState.view;\n filtering = false;\n filtered = true;\n }), reset: (event) => {\n if (filtering || !filtered)\n return;\n // Emit event.\n const { scale } = view;\n const { x: scaleX, y: scaleY } = scale;\n const domainX = scaleX.getOptions().domain;\n const domainY = scaleY.getOptions().domain;\n emitter.emit('brush:filter', Object.assign(Object.assign({}, event), { data: { selection: [domainX, domainY] } }));\n filtered = false;\n newView = view;\n setState('brushFilter');\n update();\n }, extent: undefined, emitter,\n scale,\n coordinate }, defaultOptions), rest));\n };\n}\n//# sourceMappingURL=brushFilter.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { deepMix, throttle, upperFirst } from '@antv/util';\nimport { CustomEvent } from '@antv/g';\nimport { isTranspose } from '../utils/coordinate';\nimport { invert, domainOf, abstractOf } from '../utils/scale';\nexport const SLIDER_CLASS_NAME = 'slider';\nfunction filterDataByDomain(options, scaleOptions, prefix, hasState = false, channel0 = 'x', channel1 = 'y') {\n const { marks } = options;\n const newMarks = marks.map((mark) => {\n var _a, _b;\n return deepMix({\n // Hide label to keep smooth transition.\n axis: {\n x: { transform: [{ type: 'hide' }] },\n y: { transform: [{ type: 'hide' }] },\n },\n }, mark, {\n scale: scaleOptions,\n // Don't rerender sliders.\n [prefix]: Object.assign(Object.assign({}, (((_a = mark[prefix]) === null || _a === void 0 ? void 0 : _a[channel0]) && {\n [channel0]: Object.assign({ preserve: true }, (hasState && { ratio: null })),\n })), (((_b = mark[prefix]) === null || _b === void 0 ? void 0 : _b[channel1]) && {\n [channel1]: { preserve: true },\n })),\n animate: false,\n });\n });\n // Rerender and update view.\n return Object.assign(Object.assign({}, options), { marks: newMarks, clip: true, animate: false });\n}\nfunction abstractValue(values, scale, reverse) {\n const [x, x1] = values;\n const v = reverse ? (d) => 1 - d : (d) => d;\n const d0 = invert(scale, v(x), true);\n const d1 = invert(scale, v(x1), false);\n return domainOf(scale, [d0, d1]);\n}\nfunction extentOf(domain) {\n return [domain[0], domain[domain.length - 1]];\n}\n/**\n * @todo Support click to reset after fix click and dragend conflict.\n */\nexport function SliderFilter({ initDomain = {}, className = SLIDER_CLASS_NAME, prefix = 'slider', setValue = (component, values) => component.setValues(values), hasState = false, wait = 50, leading = true, trailing = false, getInitValues = (slider) => {\n var _a;\n const values = (_a = slider === null || slider === void 0 ? void 0 : slider.attributes) === null || _a === void 0 ? void 0 : _a.values;\n if (values[0] !== 0 || values[1] !== 1)\n return values;\n}, }) {\n return (context, _, emitter) => {\n const { container, view, update, setState } = context;\n const sliders = container.getElementsByClassName(className);\n if (!sliders.length)\n return () => { };\n let filtering = false;\n const { scale, coordinate, layout } = view;\n const { paddingLeft, paddingTop, paddingBottom, paddingRight } = layout;\n const { x: scaleX, y: scaleY } = scale;\n const transposed = isTranspose(coordinate);\n const channelOf = (orientation) => {\n const channel0 = orientation === 'vertical' ? 'y' : 'x';\n const channel1 = orientation === 'vertical' ? 'x' : 'y';\n if (transposed)\n return [channel1, channel0];\n return [channel0, channel1];\n };\n const sliderHandler = new Map();\n const emitHandlers = new Set();\n // Store current domain of x and y scale.\n const channelDomain = {\n x: initDomain.x || scaleX.getOptions().domain,\n y: initDomain.y || scaleY.getOptions().domain,\n };\n for (const slider of sliders) {\n const { orientation } = slider.attributes;\n const [channel0, channel1] = channelOf(orientation);\n const eventName = `${prefix}${upperFirst(channel0)}:filter`;\n const isX = channel0 === 'x';\n const { ratio: ratioX } = scaleX.getOptions();\n const { ratio: ratioY } = scaleY.getOptions();\n const domainsOf = (event) => {\n // From abstract values.\n if (event.data) {\n const { selection } = event.data;\n const [X = extentOf(channelDomain.x), Y = extentOf(channelDomain.y)] = selection;\n return isX\n ? [domainOf(scaleX, X, ratioX), domainOf(scaleY, Y, ratioY)]\n : [domainOf(scaleY, Y, ratioY), domainOf(scaleX, X, ratioX)];\n }\n // From visual values.\n const { value: values } = event.detail;\n const scale0 = scale[channel0];\n const domain0 = abstractValue(values, scale0, transposed && orientation === 'horizontal');\n const domain1 = channelDomain[channel1];\n return [domain0, domain1];\n };\n const onValueChange = throttle((event) => __awaiter(this, void 0, void 0, function* () {\n const { initValue = false } = event;\n if (filtering && !initValue)\n return;\n filtering = true;\n const { nativeEvent = true } = event;\n // Get and update domain.\n const [domain0, domain1] = domainsOf(event);\n channelDomain[channel0] = domain0;\n channelDomain[channel1] = domain1;\n if (nativeEvent) {\n // Emit events.\n const X = isX ? domain0 : domain1;\n const Y = isX ? domain1 : domain0;\n emitter.emit(eventName, Object.assign(Object.assign({}, event), { nativeEvent, data: { selection: [extentOf(X), extentOf(Y)] } }));\n }\n setState(slider, (options) => (Object.assign(Object.assign({}, filterDataByDomain(options, \n // Set nice to false to avoid modify domain.\n // Only update domain of current slider / scrollbar.\n { [channel0]: { domain: domain0, nice: false } }, prefix, hasState, channel0, channel1)), { paddingLeft,\n paddingTop,\n paddingBottom,\n paddingRight })));\n yield update();\n filtering = false;\n }), wait, { leading, trailing });\n const emitHandler = (event) => {\n const { nativeEvent } = event;\n if (nativeEvent)\n return;\n const { data } = event;\n const { selection } = data;\n const [X, Y] = selection;\n // Update data.\n slider.dispatchEvent(new CustomEvent('valuechange', {\n data,\n nativeEvent: false,\n }));\n // Update slider.\n const V = isX ? abstractOf(X, scaleX) : abstractOf(Y, scaleY);\n setValue(slider, V);\n };\n emitter.on(eventName, emitHandler);\n slider.addEventListener('valuechange', onValueChange);\n sliderHandler.set(slider, onValueChange);\n emitHandlers.add([eventName, emitHandler]);\n const values = getInitValues(slider);\n if (values) {\n // Init values.\n slider.dispatchEvent(new CustomEvent('valuechange', {\n detail: {\n value: values,\n },\n nativeEvent: false,\n initValue: true,\n }));\n }\n }\n return () => {\n for (const [slider, handler] of sliderHandler) {\n slider.removeEventListener('valuechange', handler);\n }\n for (const [name, handler] of emitHandlers) {\n emitter.off(name, handler);\n }\n };\n };\n}\n//# sourceMappingURL=sliderFilter.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { HTML } from '@antv/g';\nimport { kebabCase } from '../utils/string';\nimport { subObject } from '../utils/helper';\nfunction dom(tag, children, style) {\n return `<${tag} style=\"${Object.entries(style)\n .map(([key, value]) => `${kebabCase(key)}:${value}`)\n .join(';')}\">${children}`;\n}\nconst defaultTipStyle = {\n backgroundColor: 'rgba(0,0,0,0.75)',\n color: '#fff',\n width: 'max-content',\n padding: '1px 4px',\n fontSize: '12px',\n borderRadius: '2.5px',\n boxShadow: '0 3px 6px -4px rgba(0,0,0,0.12), 0 6px 16px 0 rgba(0,0,0,0.08), 0 9px 28px 8px rgba(0,0,0,0.05)',\n};\nfunction isTipText(element) {\n if (element.nodeName !== 'text')\n return false;\n if (element.isOverflowing())\n return true;\n return false;\n}\nexport function Poptip(_a) {\n var { offsetX = 8, offsetY = 8 } = _a, style = __rest(_a, [\"offsetX\", \"offsetY\"]);\n return (context) => {\n const { container } = context;\n const [x0, y0] = container.getBounds().min;\n const tipStyle = subObject(style, 'tip');\n const tips = new Set();\n const pointerover = (e) => {\n const { target } = e;\n if (!isTipText(target)) {\n e.stopPropagation();\n return;\n }\n const { offsetX: mouseX, offsetY: mouseY } = e;\n const x = mouseX + offsetX - x0;\n const y = mouseY + offsetY - y0;\n if (target.tip) {\n target.tip.style.x = x;\n target.tip.style.y = y;\n return;\n }\n const { text } = target.style;\n const tipELement = new HTML({\n className: 'poptip',\n style: {\n innerHTML: dom('div', text, Object.assign(Object.assign({}, defaultTipStyle), tipStyle)),\n x,\n y,\n },\n });\n container.appendChild(tipELement);\n target.tip = tipELement;\n tips.add(tipELement);\n };\n const pointerout = (e) => {\n const { target } = e;\n if (!isTipText(target)) {\n e.stopPropagation();\n return;\n }\n if (!target.tip)\n return;\n target.tip.remove();\n target.tip = null;\n tips.delete(target.tip);\n };\n container.addEventListener('pointerover', pointerover);\n container.addEventListener('pointerout', pointerout);\n return () => {\n container.removeEventListener('pointerover', pointerover);\n container.removeEventListener('pointerout', pointerout);\n tips.forEach((tip) => tip.remove());\n };\n };\n}\nPoptip.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=poptip.js.map","import { SliderFilter } from './sliderFilter';\nexport const SCROLLBAR_CLASS_NAME = 'g2-scrollbar';\nexport function ScrollbarFilter(options = {}) {\n return (context, _, emitter) => {\n const { view, container } = context;\n const scrollbars = container.getElementsByClassName(SCROLLBAR_CLASS_NAME);\n if (!scrollbars.length)\n return () => { };\n const { scale } = view;\n const { x: scaleX, y: scaleY } = scale;\n // The filtered domain, computed by the ratio attribute.\n const initDomain = {\n x: [...scaleX.getOptions().domain],\n y: [...scaleY.getOptions().domain],\n };\n // The ordinal domain for each channel.\n scaleX.update({ domain: scaleX.getOptions().expectedDomain });\n scaleY.update({ domain: scaleY.getOptions().expectedDomain });\n const interaction = SliderFilter(Object.assign(Object.assign({}, options), { initDomain, className: SCROLLBAR_CLASS_NAME, prefix: 'scrollbar', hasState: true, setValue: (component, values) => component.setValue(values[0]), getInitValues: (scrollbar) => {\n const values = scrollbar.slider.attributes.values;\n if (values[0] !== 0)\n return values;\n } }));\n return interaction(context, _, emitter);\n };\n}\n//# sourceMappingURL=scrollbarFilter.js.map","import isFunction from './is-function';\nimport isMatch from './is-match';\nimport isArray from './is-array';\nimport isPlainObject from './is-plain-object';\nfunction find(arr, predicate) {\n if (!isArray(arr))\n return null;\n var _predicate;\n if (isFunction(predicate)) {\n _predicate = predicate;\n }\n if (isPlainObject(predicate)) {\n _predicate = function (a) { return isMatch(a, predicate); };\n }\n if (_predicate) {\n for (var i = 0; i < arr.length; i += 1) {\n if (_predicate(arr[i])) {\n return arr[i];\n }\n }\n }\n return null;\n}\nexport default find;\n//# sourceMappingURL=find.js.map","import isNil from './is-nil';\nimport keys from './keys';\nfunction isMatch(obj, attrs) {\n var _keys = keys(attrs);\n var length = _keys.length;\n if (isNil(obj))\n return !length;\n for (var i = 0; i < length; i += 1) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) {\n return false;\n }\n }\n return true;\n}\nexport default isMatch;\n//# sourceMappingURL=is-match.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Text, Group, Shape } from '@antv/g';\nimport { get, deepMix, pick, keys, find, size, last } from '@antv/util';\nimport { subObject } from '../utils/helper';\nimport { PLOT_CLASS_NAME } from '../runtime';\nimport { select } from '../utils/selection';\nimport { treeDataTransform } from '../utils/treeDataTransform';\nimport { legendClearSetState } from './legendFilter';\nimport { getElements } from './utils';\nfunction selectPlotArea(root) {\n return select(root).select(`.${PLOT_CLASS_NAME}`).node();\n}\n// Default breadCrumb config.\nconst DEFAULT_BREADCRUMB_STYLE = {\n breadCrumbFill: 'rgba(0, 0, 0, 0.85)',\n breadCrumbFontSize: 12,\n breadCrumbY: 12,\n activeFill: 'rgba(0, 0, 0, 0.5)',\n};\n/**\n * TreemapDrillDown interaction.\n */\nexport function TreemapDrillDown(drillDownOptions = {}) {\n const { originData = [], layout } = drillDownOptions, style = __rest(drillDownOptions, [\"originData\", \"layout\"]);\n const breadCrumb = deepMix({}, DEFAULT_BREADCRUMB_STYLE, style);\n const breadCrumbStyle = subObject(breadCrumb, 'breadCrumb');\n const breadCrumbActiveStyle = subObject(breadCrumb, 'active');\n return (context) => {\n const { update, setState, container, options } = context;\n const plotArea = selectPlotArea(container);\n const mark = options.marks[0];\n const { state } = mark;\n // Create breadCrumbTextsGroup,save textSeparator、drillTexts.\n const textGroup = new Group();\n plotArea.appendChild(textGroup);\n // Modify the data and scale according to the path and the level of the current click, so as to achieve the effect of drilling down and drilling up and initialization.\n const drillDownClick = (path, depth) => __awaiter(this, void 0, void 0, function* () {\n // Clear text.\n textGroup.removeChildren();\n // More path creation text.\n if (depth) {\n let name = '';\n let y = breadCrumbStyle.y;\n let x = 0;\n const textPath = [];\n const maxWidth = plotArea.getBBox().width;\n // Create path: 'type1 / type2 / type3' -> '/ type1 / type2 / type3'.\n const drillTexts = path.map((text, index) => {\n name = `${name}${text}/`;\n textPath.push(text);\n const drillText = new Text({\n name: name.replace(/\\/$/, ''),\n style: Object.assign(Object.assign({ text,\n x, \n // @ts-ignore\n path: [...textPath], depth: index }, breadCrumbStyle), { y }),\n });\n textGroup.appendChild(drillText);\n x += drillText.getBBox().width;\n const textSeparator = new Text({\n style: Object.assign(Object.assign({ x, text: ' / ' }, breadCrumbStyle), { y }),\n });\n textGroup.appendChild(textSeparator);\n x += textSeparator.getBBox().width;\n /**\n * Page width exceeds maximum, line feed.\n * | ----maxWidth---- |\n * | / tyep1 / tyep2 / type3 |\n * ->\n * | ----maxWidth---- |\n * | / tyep1 / tyep2 |\n * | / type3 |\n */\n if (x > maxWidth) {\n y = textGroup.getBBox().height + breadCrumbStyle.y;\n x = 0;\n drillText.attr({\n x,\n y,\n });\n x += drillText.getBBox().width;\n textSeparator.attr({\n x,\n y,\n });\n x += textSeparator.getBBox().width;\n }\n if (index === size(path) - 1) {\n textSeparator.remove();\n }\n return drillText;\n });\n // Add Active, Add TreemapDrillDown\n drillTexts.forEach((item, index) => {\n // Last drillText\n if (index === size(drillTexts) - 1)\n return;\n const originalAttrs = Object.assign({}, item.attributes);\n item.attr('cursor', 'pointer');\n item.addEventListener('mouseenter', () => {\n item.attr(breadCrumbActiveStyle);\n });\n item.addEventListener('mouseleave', () => {\n item.attr(originalAttrs);\n });\n item.addEventListener('click', () => {\n drillDownClick(get(item, ['style', 'path']), get(item, ['style', 'depth']));\n });\n });\n }\n // LegendFilter interaction and treemapDrillDown clash.\n legendClearSetState(container, setState);\n // Update marks.\n setState('treemapDrillDown', (viewOptions) => {\n const { marks } = viewOptions;\n // Add filter transform for every marks,\n // which will skip for mark without color channel.\n const strPath = path.join('/');\n const newMarks = marks.map((mark) => {\n if (mark.type !== 'rect')\n return mark;\n let newData = originData;\n if (depth) {\n const filterData = originData\n .filter((item) => {\n const id = get(item, ['id']);\n return id && (id.match(`${strPath}/`) || strPath.match(id));\n })\n .map((item) => ({\n value: item.height === 0 ? get(item, ['value']) : undefined,\n name: get(item, ['id']),\n }));\n const { paddingLeft, paddingBottom, paddingRight } = layout;\n // New drill layout for calculation x y and filtration data.\n const newLayout = Object.assign(Object.assign({}, layout), { paddingTop: (layout.paddingTop || textGroup.getBBox().height + 10) /\n (depth + 1), paddingLeft: paddingLeft / (depth + 1), paddingBottom: paddingBottom / (depth + 1), paddingRight: paddingRight / (depth + 1), path: (d) => d.name, layer: (d) => d.depth === depth + 1 });\n // Transform the new matrix tree data.\n newData = treeDataTransform(filterData, newLayout, {\n value: 'value',\n })[0];\n }\n else {\n newData = originData.filter((item) => {\n return item.depth === 1;\n });\n }\n const colorDomain = [];\n newData.forEach(({ path }) => {\n colorDomain.push(last(path));\n });\n // TreemapDrillDown by filtering the data and scale.\n return deepMix({}, mark, {\n data: newData,\n scale: {\n color: { domain: colorDomain },\n },\n });\n });\n return Object.assign(Object.assign({}, viewOptions), { marks: newMarks });\n });\n // The second argument is to allow the legendFilter event to be re-added; the update method itself causes legend to lose the interaction event.\n yield update(undefined, ['legendFilter']);\n });\n //\n const keyofLabel = (d) => d.attributes.key.split('-')[0];\n const keyofRect = (d) => get(d, ['__data__', 'key']);\n // Elements and BreadCrumb click.\n const createDrillClick = (e) => {\n const item = e.target;\n const { markType, nodeName, attributes } = item || {};\n if (markType !== 'rect' && nodeName !== Shape.TEXT)\n return;\n const key = nodeName === Shape.TEXT && get(attributes, 'isTreemapLabel') === true\n ? keyofLabel(item)\n : keyofRect(item);\n const node = find(originData, (d) => d.id === key);\n // Node height = 0 no children\n if (get(node, 'height')) {\n drillDownClick(get(node, 'path'), get(node, 'depth'));\n }\n };\n // Add click drill interaction.\n plotArea.addEventListener('click', createDrillClick);\n // Change attributes keys.\n const changeStyleKey = keys(Object.assign(Object.assign({}, state.active), state.inactive));\n const createActive = () => {\n const elements = getElements(plotArea);\n elements.forEach((element) => {\n const cursor = get(element, ['style', 'cursor']);\n const node = find(originData, (d) => d.id === get(element, ['__data__', 'key']));\n if (cursor !== 'pointer' && (node === null || node === void 0 ? void 0 : node.height)) {\n element.style.cursor = 'pointer';\n const originalAttrs = pick(element.attributes, changeStyleKey);\n element.addEventListener('mouseenter', () => {\n element.attr(state.active);\n });\n element.addEventListener('mouseleave', () => {\n element.attr(deepMix(originalAttrs, state.inactive));\n });\n }\n });\n };\n createActive();\n // Animate elements update, Add active.\n plotArea.addEventListener('mousemove', createActive);\n return () => {\n textGroup.remove();\n plotArea.removeEventListener('click', createDrillClick);\n plotArea.removeEventListener('mousemove', createActive);\n };\n };\n}\n//# sourceMappingURL=treemapDrillDown.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Text, Group, Circle, Path } from '@antv/g';\nimport { deepMix, isUndefined, find, get } from '@antv/util';\nimport { subObject } from '../utils/helper';\nimport { selectPlotArea, getPointsR, getPointsPath, getElements, getThetaPath, } from './utils';\nconst DEFAULT_STYLE = {\n pointR: 6,\n pointStrokeWidth: 1,\n pointStroke: '#888',\n pointActiveStroke: '#f5f5f5',\n pathStroke: '#888',\n pathLineDash: [3, 4],\n labelFontSize: 12,\n labelFill: '#888',\n labelStroke: '#fff',\n labelLineWidth: 1,\n labelY: -6,\n labelX: 2,\n};\n// point shape name.\nconst MOVE_POINT_NAME = 'movePoint';\n// Element mouseenter change style.\nconst elementMouseenter = (e) => {\n const element = e.target;\n const { markType } = element;\n // Mark line.\n if (markType === 'line') {\n element.attr('_lineWidth', element.attr('lineWidth') || 1);\n element.attr('lineWidth', element.attr('_lineWidth') + 3);\n }\n // Mark interval.\n if (markType === 'interval') {\n element.attr('_opacity', element.attr('opacity') || 1);\n element.attr('opacity', 0.7 * element.attr('_opacity'));\n }\n};\n// Element mouseleave change style.\nconst elementMouseleave = (e) => {\n const element = e.target;\n const { markType } = element;\n // Mark line.\n if (markType === 'line') {\n element.attr('lineWidth', element.attr('_lineWidth'));\n }\n // Mark interval.\n if (markType === 'interval') {\n element.attr('opacity', element.attr('_opacity'));\n }\n};\n// Get the latest overall data based on the individual data changes.\nconst getNewData = (newChangeData, data, encode) => {\n return data.map((d) => {\n const isUpdate = ['x', 'color'].reduce((v, key) => {\n const field = encode[key];\n if (!field)\n return v;\n if (d[field] !== newChangeData[field])\n return false;\n return v;\n }, true);\n return isUpdate ? Object.assign(Object.assign({}, d), newChangeData) : d;\n });\n};\n// Find mark interval origin element data.\nconst getIntervalDataRatioTransformFn = (element) => {\n const y = get(element, ['__data__', 'y']);\n const y1 = get(element, ['__data__', 'y1']);\n const v = y1 - y;\n const { __data__: { data, encode, transform }, childNodes, } = element.parentNode;\n const isNormalizeY = find(transform, ({ type }) => type === 'normalizeY');\n const yField = get(encode, ['y', 'field']);\n const value = data[childNodes.indexOf(element)][yField];\n return (newValue, isTheta = false) => {\n if (isNormalizeY || isTheta) {\n return (newValue / (1 - newValue) / (v / (1 - v))) * value;\n }\n return newValue;\n };\n};\n// Find origin path data.\nconst getPathDataRatioTransformFn = (element, index) => {\n const v = get(element, ['__data__', 'seriesItems', index, '0', 'value']);\n const i = get(element, ['__data__', 'seriesIndex', index]);\n const { __data__: { data, encode, transform }, } = element.parentNode;\n const isNormalizeY = find(transform, ({ type }) => type === 'normalizeY');\n const yField = get(encode, ['y', 'field']);\n const value = data[i][yField];\n return (newValue) => {\n if (isNormalizeY) {\n if (v === 1) {\n return newValue;\n }\n return (newValue / (1 - newValue) / (v / (1 - v))) * value;\n }\n return newValue;\n };\n};\n// Point shape select change style.\nconst selectedPointsStyle = (pointsShape, selection, defaultStyle) => {\n pointsShape.forEach((shape, index) => {\n shape.attr('stroke', selection[1] === index\n ? defaultStyle['activeStroke']\n : defaultStyle['stroke']);\n });\n};\n// Create help show message shape.\nconst createHelpShape = (group, circle, pathStyle, labelStyle) => {\n const pathShape = new Path({\n style: pathStyle,\n });\n const labelShape = new Text({\n style: labelStyle,\n });\n circle.appendChild(labelShape);\n group.appendChild(pathShape);\n return [pathShape, labelShape];\n};\n// Get color scale type.\nconst getColorType = (scaleColor, color) => {\n const indexOf = get(scaleColor, ['options', 'range', 'indexOf']);\n if (!indexOf)\n return;\n const i = scaleColor.options.range.indexOf(color);\n return scaleColor.sortedDomain[i];\n};\n// Get the same direction new point.\nconst getSamePointPosition = (center, point, target) => {\n const oldR = getPointsR(center, point);\n const newR = getPointsR(center, target);\n const ratio = newR / oldR;\n const newX = center[0] + (point[0] - center[0]) * ratio;\n const newY = center[1] + (point[1] - center[1]) * ratio;\n return [newX, newY];\n};\n/**\n * ElementPointMove interaction.\n */\nexport function ElementPointMove(elementPointMoveOptions = {}) {\n const { selection = [], precision = 2 } = elementPointMoveOptions, style = __rest(elementPointMoveOptions, [\"selection\", \"precision\"]);\n const defaultStyle = Object.assign(Object.assign({}, DEFAULT_STYLE), (style || {}));\n // Shape default style.\n const pathDefaultStyle = subObject(defaultStyle, 'path');\n const labelDefaultStyle = subObject(defaultStyle, 'label');\n const pointDefaultStyle = subObject(defaultStyle, 'point');\n return (context, _, emitter) => {\n const { update, setState, container, view, options: { marks, coordinate: coordinateOptions }, } = context;\n const plotArea = selectPlotArea(container);\n let elements = getElements(plotArea);\n let newState;\n let newSelection = selection;\n const { transform = [], type: coordinateType } = coordinateOptions;\n const isTranspose = !!find(transform, ({ type }) => type === 'transpose');\n const isPolar = coordinateType === 'polar';\n const isTheta = coordinateType === 'theta';\n const isArea = !!find(elements, ({ markType }) => markType === 'area');\n if (isArea) {\n elements = elements.filter(({ markType }) => markType === 'area');\n }\n // Create points\n const pointsGroup = new Group({\n style: {\n // Tooltip point need down.\n zIndex: 2,\n },\n });\n plotArea.appendChild(pointsGroup);\n const selectedChange = () => {\n emitter.emit('element-point:select', {\n nativeEvent: true,\n data: {\n selection: newSelection,\n },\n });\n };\n const dataChange = (changeData, data) => {\n emitter.emit('element-point:moved', {\n nativeEvent: true,\n data: {\n changeData,\n data,\n },\n });\n };\n // Element click change style.\n const elementClick = (e) => {\n const element = e.target;\n newSelection = [element.parentNode.childNodes.indexOf(element)];\n selectedChange();\n createPoints(element);\n };\n const elementSelect = (d) => {\n const { data: { selection }, nativeEvent, } = d;\n if (nativeEvent)\n return;\n newSelection = selection;\n const element = get(elements, [newSelection === null || newSelection === void 0 ? void 0 : newSelection[0]]);\n if (element) {\n createPoints(element);\n }\n };\n // Create select element points.\n const createPoints = (element) => {\n const { attributes, markType, __data__: data } = element;\n const { stroke: fill } = attributes;\n const { points, seriesTitle, color, title, seriesX, y1 } = data;\n // Transpose Currently only do mark interval;\n if (isTranspose && markType !== 'interval')\n return;\n const { scale, coordinate } = (newState === null || newState === void 0 ? void 0 : newState.view) || view;\n const { color: scaleColor, y: scaleY, x: scaleX } = scale;\n const center = coordinate.getCenter();\n pointsGroup.removeChildren();\n let downPoint;\n const updateView = (x, y, color, markTypes) => __awaiter(this, void 0, void 0, function* () {\n setState('elementPointMove', (viewOptions) => {\n var _a;\n // Update marks.\n const newMarks = (((_a = newState === null || newState === void 0 ? void 0 : newState.options) === null || _a === void 0 ? void 0 : _a.marks) || marks).map((mark) => {\n if (!markTypes.includes(mark.type))\n return mark;\n const { data, encode } = mark;\n const encodeKeys = Object.keys(encode);\n // Get change new one element data.\n const newChangeData = encodeKeys.reduce((value, key) => {\n const dataKey = encode[key];\n if (key === 'x') {\n value[dataKey] = x;\n }\n if (key === 'y') {\n value[dataKey] = y;\n }\n if (key === 'color') {\n value[dataKey] = color;\n }\n return value;\n }, {});\n // Get change new all data.\n const newData = getNewData(newChangeData, data, encode);\n dataChange(newChangeData, newData);\n return deepMix({}, mark, {\n data: newData,\n // No need animate\n animate: false,\n });\n });\n return Object.assign(Object.assign({}, viewOptions), { marks: newMarks });\n });\n return yield update('elementPointMove');\n });\n if (['line', 'area'].includes(markType)) {\n points.forEach((p, index) => {\n const title = scaleX.invert(seriesX[index]);\n // Area points have bottom point.\n if (!title)\n return;\n const circle = new Circle({\n name: MOVE_POINT_NAME,\n style: Object.assign({ cx: p[0], cy: p[1], fill }, pointDefaultStyle),\n });\n const ratioTransform = getPathDataRatioTransformFn(element, index);\n circle.addEventListener('mousedown', (e) => {\n const oldPoint = coordinate.output([seriesX[index], 0]);\n const pathLength = seriesTitle === null || seriesTitle === void 0 ? void 0 : seriesTitle.length;\n container.attr('cursor', 'move');\n if (newSelection[1] !== index) {\n newSelection[1] = index;\n selectedChange();\n }\n selectedPointsStyle(pointsGroup.childNodes, newSelection, pointDefaultStyle);\n const [pathShape, labelShape] = createHelpShape(pointsGroup, circle, pathDefaultStyle, labelDefaultStyle);\n // Point move change text\n const pointMousemove = (e) => {\n const newCy = p[1] + e.clientY - downPoint[1];\n // Area/Radar chart.\n if (isArea) {\n // Radar chart.\n if (isPolar) {\n const newCx = p[0] + e.clientX - downPoint[0];\n const [newX, newY] = getSamePointPosition(center, oldPoint, [\n newCx,\n newCy,\n ]);\n const [, initY] = coordinate.output([1, scaleY.output(0)]);\n const [, y] = coordinate.invert([\n newX,\n initY - (points[index + pathLength][1] - newY),\n ]);\n const nextIndex = (index + 1) % pathLength;\n const lastIndex = (index - 1 + pathLength) % pathLength;\n const newPath = getPointsPath([\n points[lastIndex],\n [newX, newY],\n seriesTitle[nextIndex] && points[nextIndex],\n ]);\n labelShape.attr('text', ratioTransform(scaleY.invert(y)).toFixed(precision));\n pathShape.attr('d', newPath);\n circle.attr('cx', newX);\n circle.attr('cy', newY);\n }\n else {\n // Area chart.\n const [, initY] = coordinate.output([1, scaleY.output(0)]);\n const [, y] = coordinate.invert([\n p[0],\n initY - (points[index + pathLength][1] - newCy),\n ]);\n const newPath = getPointsPath([\n points[index - 1],\n [p[0], newCy],\n seriesTitle[index + 1] && points[index + 1],\n ]);\n labelShape.attr('text', ratioTransform(scaleY.invert(y)).toFixed(precision));\n pathShape.attr('d', newPath);\n circle.attr('cy', newCy);\n }\n }\n else {\n // Line chart.\n const [, y] = coordinate.invert([p[0], newCy]);\n const newPath = getPointsPath([\n points[index - 1],\n [p[0], newCy],\n points[index + 1],\n ]);\n labelShape.attr('text', scaleY.invert(y).toFixed(precision));\n pathShape.attr('d', newPath);\n circle.attr('cy', newCy);\n }\n };\n downPoint = [e.clientX, e.clientY];\n window.addEventListener('mousemove', pointMousemove);\n const mouseupFn = () => __awaiter(this, void 0, void 0, function* () {\n container.attr('cursor', 'default');\n window.removeEventListener('mousemove', pointMousemove);\n container.removeEventListener('mouseup', mouseupFn);\n if (isUndefined(labelShape.attr('text')))\n return;\n const y = Number(labelShape.attr('text'));\n const colorType = getColorType(scaleColor, color);\n newState = yield updateView(title, y, colorType, [\n 'line',\n 'area',\n ]);\n labelShape.remove();\n pathShape.remove();\n createPoints(element);\n });\n container.addEventListener('mouseup', mouseupFn);\n });\n pointsGroup.appendChild(circle);\n });\n selectedPointsStyle(pointsGroup.childNodes, newSelection, pointDefaultStyle);\n }\n else if (markType === 'interval') {\n // Column chart point.\n let circlePoint = [(points[0][0] + points[1][0]) / 2, points[0][1]];\n // Bar chart point.\n if (isTranspose) {\n circlePoint = [points[0][0], (points[0][1] + points[1][1]) / 2];\n }\n else if (isTheta) {\n // Pie chart point.\n circlePoint = points[0];\n }\n const ratioTransform = getIntervalDataRatioTransformFn(element);\n const circle = new Circle({\n name: MOVE_POINT_NAME,\n style: Object.assign(Object.assign({ cx: circlePoint[0], cy: circlePoint[1], fill }, pointDefaultStyle), { stroke: pointDefaultStyle['activeStroke'] }),\n });\n circle.addEventListener('mousedown', (e) => {\n container.attr('cursor', 'move');\n const colorType = getColorType(scaleColor, color);\n const [pathShape, labelShape] = createHelpShape(pointsGroup, circle, pathDefaultStyle, labelDefaultStyle);\n // Point move change text\n const pointMousemove = (e) => {\n if (isTranspose) {\n // Bar chart.\n const newCx = circlePoint[0] + e.clientX - downPoint[0];\n const [initX] = coordinate.output([\n scaleY.output(0),\n scaleY.output(0),\n ]);\n const [, x] = coordinate.invert([\n initX + (newCx - points[2][0]),\n circlePoint[1],\n ]);\n const newPath = getPointsPath([\n [newCx, points[0][1]],\n [newCx, points[1][1]],\n points[2],\n points[3],\n ], true);\n labelShape.attr('text', ratioTransform(scaleY.invert(x)).toFixed(precision));\n pathShape.attr('d', newPath);\n circle.attr('cx', newCx);\n }\n else if (isTheta) {\n // Pie chart.\n const newCy = circlePoint[1] + e.clientY - downPoint[1];\n const newCx = circlePoint[0] + e.clientX - downPoint[0];\n const [newXOut, newYOut] = getSamePointPosition(center, [newCx, newCy], circlePoint);\n const [newXIn, newYIn] = getSamePointPosition(center, [newCx, newCy], points[1]);\n const lastPercent = coordinate.invert([newXOut, newYOut])[1];\n const percent = y1 - lastPercent;\n if (percent < 0)\n return;\n const newPath = getThetaPath(center, [[newXOut, newYOut], [newXIn, newYIn], points[2], points[3]], percent > 0.5 ? 1 : 0);\n labelShape.attr('text', ratioTransform(percent, true).toFixed(precision));\n pathShape.attr('d', newPath);\n circle.attr('cx', newXOut);\n circle.attr('cy', newYOut);\n }\n else {\n // Column chart.\n const newCy = circlePoint[1] + e.clientY - downPoint[1];\n const [, initY] = coordinate.output([1, scaleY.output(0)]);\n const [, y] = coordinate.invert([\n circlePoint[0],\n initY - (points[2][1] - newCy),\n ]);\n const newPath = getPointsPath([\n [points[0][0], newCy],\n [points[1][0], newCy],\n points[2],\n points[3],\n ], true);\n labelShape.attr('text', ratioTransform(scaleY.invert(y)).toFixed(precision));\n pathShape.attr('d', newPath);\n circle.attr('cy', newCy);\n }\n };\n downPoint = [e.clientX, e.clientY];\n window.addEventListener('mousemove', pointMousemove);\n // Change mosueup change data and update 、clear shape.\n const mouseupFn = () => __awaiter(this, void 0, void 0, function* () {\n container.attr('cursor', 'default');\n container.removeEventListener('mouseup', mouseupFn);\n window.removeEventListener('mousemove', pointMousemove);\n if (isUndefined(labelShape.attr('text')))\n return;\n const y = Number(labelShape.attr('text'));\n newState = yield updateView(title, y, colorType, [markType]);\n labelShape.remove();\n pathShape.remove();\n createPoints(element);\n });\n container.addEventListener('mouseup', mouseupFn);\n });\n pointsGroup.appendChild(circle);\n }\n };\n // Add EventListener.\n elements.forEach((element, index) => {\n if (newSelection[0] === index) {\n createPoints(element);\n }\n element.addEventListener('click', elementClick);\n element.addEventListener('mouseenter', elementMouseenter);\n element.addEventListener('mouseleave', elementMouseleave);\n });\n const rootClick = (e) => {\n const element = e === null || e === void 0 ? void 0 : e.target;\n if (!element ||\n (element.name !== MOVE_POINT_NAME && !elements.includes(element))) {\n newSelection = [];\n selectedChange();\n pointsGroup.removeChildren();\n }\n };\n emitter.on('element-point:select', elementSelect);\n emitter.on('element-point:unselect', rootClick);\n container.addEventListener('mousedown', rootClick);\n // Remove EventListener.\n return () => {\n pointsGroup.remove();\n emitter.off('element-point:select', elementSelect);\n emitter.off('element-point:unselect', rootClick);\n container.removeEventListener('mousedown', rootClick);\n elements.forEach((element) => {\n element.removeEventListener('click', elementClick);\n element.removeEventListener('mouseenter', elementMouseenter);\n element.removeEventListener('mouseleave', elementMouseleave);\n });\n };\n };\n}\n//# sourceMappingURL=elementPointMove.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { mergeData } from './utils';\n/**\n * @todo Propagate more options to children.\n */\nexport const SpaceLayer = () => {\n return (options) => {\n const { children } = options;\n if (!Array.isArray(children))\n return [];\n const { x: viewX = 0, y: viewY = 0, width: viewWidth, height: viewHeight, data: layerData, } = options;\n return children.map((_a) => {\n var { data, x, y, width, height } = _a, rest = __rest(_a, [\"data\", \"x\", \"y\", \"width\", \"height\"]);\n return (Object.assign(Object.assign({}, rest), { data: mergeData(data, layerData), x: x !== null && x !== void 0 ? x : viewX, y: y !== null && y !== void 0 ? y : viewY, width: width !== null && width !== void 0 ? width : viewWidth, height: height !== null && height !== void 0 ? height : viewHeight }));\n });\n };\n};\nSpaceLayer.props = {};\n//# sourceMappingURL=spaceLayer.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { mergeData } from './utils';\n/**\n * @todo Propagate more options to children.\n */\nexport const SpaceFlex = () => {\n return (options) => {\n const { children } = options;\n if (!Array.isArray(children))\n return [];\n const { direction = 'row', ratio = children.map(() => 1), padding = 0, data: flexData, } = options;\n const [mainStart, mainSize, crossSize, crossStart] = direction === 'col'\n ? ['y', 'height', 'width', 'x']\n : ['x', 'width', 'height', 'y'];\n const sum = ratio.reduce((total, value) => total + value);\n const totalSize = options[mainSize] - padding * (children.length - 1);\n const sizes = ratio.map((value) => totalSize * (value / sum));\n const newChildren = [];\n let next = options[mainStart] || 0;\n for (let i = 0; i < sizes.length; i += 1) {\n const _a = children[i], { data } = _a, rest = __rest(_a, [\"data\"]);\n const newData = mergeData(data, flexData);\n newChildren.push(Object.assign({ [mainStart]: next, [mainSize]: sizes[i], [crossStart]: options[crossStart] || 0, [crossSize]: options[crossSize], data: newData }, rest));\n next += sizes[i] + padding;\n }\n return newChildren;\n };\n};\nSpaceFlex.props = {};\n//# sourceMappingURL=spaceFlex.js.map","class Container {\n constructor(x) {\n this.$value = x;\n }\n static of(x) {\n return new Container(x);\n }\n call(f, ...rest) {\n return (this.$value = f(this.$value, ...rest)), this;\n }\n value() {\n return this.$value;\n }\n}\nexport { Container };\n//# sourceMappingURL=container.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix } from '@antv/util';\nimport { extent, group, max } from '@antv/vendor/d3-array';\nimport { calcBBox } from '../utils/vector';\nimport { Container } from '../utils/container';\nimport { indexOf } from '../utils/array';\nimport { useDefaultAdaptor, useOverrideAdaptor } from './utils';\nconst setScale = useDefaultAdaptor((options) => {\n const { encode, data, scale, shareSize = false } = options;\n const { x, y } = encode;\n const flexDomain = (encode, channel) => {\n var _a;\n if (encode === undefined || !shareSize)\n return {};\n const groups = group(data, (d) => d[encode]);\n const domain = ((_a = scale === null || scale === void 0 ? void 0 : scale[channel]) === null || _a === void 0 ? void 0 : _a.domain) || Array.from(groups.keys());\n const flex = domain.map((key) => {\n if (!groups.has(key))\n return 1;\n return groups.get(key).length;\n });\n return { domain, flex };\n };\n return {\n scale: {\n x: Object.assign(Object.assign({ paddingOuter: 0, paddingInner: 0.1, guide: x === undefined ? null : { position: 'top' } }, (x === undefined && { paddingInner: 0 })), flexDomain(x, 'x')),\n y: Object.assign(Object.assign({ range: [0, 1], paddingOuter: 0, paddingInner: 0.1, guide: y === undefined ? null : { position: 'right' } }, (y === undefined && { paddingInner: 0 })), flexDomain(y, 'y')),\n },\n };\n});\n/**\n * BFS view tree and using the last discovered color encode\n * as the top-level encode for this plot. This is useful when\n * color encode and color scale is specified in mark node.\n * It makes sense because the whole facet should shared the same\n * color encoding, but it also can be override with explicity\n * encode and scale specification.\n */\nexport const inferColor = useOverrideAdaptor((options) => {\n const { data, scale, legend } = options;\n const discovered = [options];\n let encodeColor;\n let scaleColor;\n let legendColor;\n while (discovered.length) {\n const node = discovered.shift();\n const { children, encode = {}, scale = {}, legend = {} } = node;\n const { color: c } = encode;\n const { color: cs } = scale;\n const { color: cl } = legend;\n if (c !== undefined)\n encodeColor = c;\n if (cs !== undefined)\n scaleColor = cs;\n if (cl !== undefined)\n legendColor = cl;\n if (Array.isArray(children)) {\n discovered.push(...children);\n }\n }\n const domainColor = () => {\n var _a;\n const domain = (_a = scale === null || scale === void 0 ? void 0 : scale.color) === null || _a === void 0 ? void 0 : _a.domain;\n if (domain !== undefined)\n return [domain];\n if (encodeColor === undefined)\n return [undefined];\n const color = typeof encodeColor === 'function' ? encodeColor : (d) => d[encodeColor];\n const values = data.map(color);\n if (values.some((d) => typeof d === 'number'))\n return [extent(values)];\n return [Array.from(new Set(values)), 'ordinal'];\n };\n const title = typeof encodeColor === 'string' ? encodeColor : '';\n const [domain, type] = domainColor();\n return Object.assign({ encode: { color: { type: 'column', value: domain !== null && domain !== void 0 ? domain : [] } }, scale: { color: deepMix({}, scaleColor, { domain, type }) } }, (legend === undefined && {\n legend: { color: deepMix({ title }, legendColor) },\n }));\n});\nexport const setAnimation = useDefaultAdaptor(() => ({\n animate: {\n enterType: 'fadeIn',\n },\n}));\nexport const setStyle = useOverrideAdaptor(() => ({\n frame: false,\n encode: {\n shape: 'hollow',\n },\n style: {\n lineWidth: 0,\n },\n}));\nexport const toCell = useOverrideAdaptor(() => ({\n type: 'cell',\n}));\n/**\n * Do not set cell data directly, the children will get wrong do if do\n * so. Use transform to set new data.\n **/\nexport const setData = useOverrideAdaptor((options) => {\n const { data } = options;\n const connector = {\n type: 'custom',\n callback: () => {\n const { data, encode } = options;\n const { x, y } = encode;\n const X = x ? Array.from(new Set(data.map((d) => d[x]))) : [];\n const Y = y ? Array.from(new Set(data.map((d) => d[y]))) : [];\n const cellData = () => {\n if (X.length && Y.length) {\n const cellData = [];\n for (const vx of X) {\n for (const vy of Y) {\n cellData.push({ [x]: vx, [y]: vy });\n }\n }\n return cellData;\n }\n if (X.length)\n return X.map((d) => ({ [x]: d }));\n if (Y.length)\n return Y.map((d) => ({ [y]: d }));\n };\n return cellData();\n },\n };\n return {\n data: { type: 'inline', value: data, transform: [connector] },\n };\n});\n/**\n * @todo Move some options assignment to runtime.\n */\nexport const setChildren = useOverrideAdaptor((options, subLayout = subLayoutRect, createGuideX = createGuideXRect, createGuideY = createGuideYRect, childOptions = {}) => {\n const { data: dataValue, encode, children, scale: facetScale, x: originX = 0, y: originY = 0, shareData = false, key: viewKey, } = options;\n const { value: data } = dataValue;\n // Only support field encode now.\n const { x: encodeX, y: encodeY } = encode;\n const { color: facetScaleColor } = facetScale;\n const { domain: facetDomainColor } = facetScaleColor;\n const createChildren = (visualData, scale, layout) => {\n const { x: scaleX, y: scaleY } = scale;\n const { paddingLeft, paddingTop, marginLeft, marginTop } = layout;\n const { domain: domainX } = scaleX.getOptions();\n const { domain: domainY } = scaleY.getOptions();\n const index = indexOf(visualData);\n const bboxs = visualData.map(subLayout);\n const values = visualData.map(({ x, y }) => [\n scaleX.invert(x),\n scaleY.invert(y),\n ]);\n const filters = values.map(([fx, fy]) => (d) => {\n const { [encodeX]: x, [encodeY]: y } = d;\n const inX = encodeX !== undefined ? x === fx : true;\n const inY = encodeY !== undefined ? y === fy : true;\n return inX && inY;\n });\n const facetData2d = filters.map((f) => data.filter(f));\n const maxDataDomain = shareData\n ? max(facetData2d, (data) => data.length)\n : undefined;\n const facets = values.map(([fx, fy]) => ({\n columnField: encodeX,\n columnIndex: domainX.indexOf(fx),\n columnValue: fx,\n columnValuesLength: domainX.length,\n rowField: encodeY,\n rowIndex: domainY.indexOf(fy),\n rowValue: fy,\n rowValuesLength: domainY.length,\n }));\n const normalizedChildren = facets.map((facet) => {\n if (Array.isArray(children))\n return children;\n return [children(facet)].flat(1);\n });\n return index.flatMap((i) => {\n const [left, top, width, height] = bboxs[i];\n const facet = facets[i];\n const facetData = facetData2d[i];\n const children = normalizedChildren[i];\n return children.map((_a) => {\n var _b, _c;\n var { scale, key, facet: isFacet = true, axis = {}, legend = {} } = _a, rest = __rest(_a, [\"scale\", \"key\", \"facet\", \"axis\", \"legend\"]);\n const guideY = ((_b = scale === null || scale === void 0 ? void 0 : scale.y) === null || _b === void 0 ? void 0 : _b.guide) || axis.y;\n const guideX = ((_c = scale === null || scale === void 0 ? void 0 : scale.x) === null || _c === void 0 ? void 0 : _c.guide) || axis.x;\n const defaultScale = {\n x: { tickCount: encodeX ? 5 : undefined },\n y: { tickCount: encodeY ? 5 : undefined },\n };\n const newData = isFacet\n ? facetData\n : facetData.length === 0\n ? []\n : data;\n const newScale = {\n color: { domain: facetDomainColor },\n };\n const newAxis = {\n x: createGuide(guideX, createGuideX)(facet, newData),\n y: createGuide(guideY, createGuideY)(facet, newData),\n };\n return Object.assign(Object.assign({ key: `${key}-${i}`, data: newData, margin: 0, x: left + paddingLeft + originX + marginLeft, y: top + paddingTop + originY + marginTop, parentKey: viewKey, width,\n height, paddingLeft: 0, paddingRight: 0, paddingTop: 0, paddingBottom: 0, frame: newData.length ? true : false, dataDomain: maxDataDomain, scale: deepMix(defaultScale, scale, newScale), axis: deepMix({}, axis, newAxis), \n // Hide all legends for child mark by default,\n // they are displayed in the top-level.\n legend: false }, rest), childOptions);\n });\n });\n };\n return {\n children: createChildren,\n };\n});\nfunction subLayoutRect(data) {\n const { points } = data;\n return calcBBox(points);\n}\n/**\n * Inner guide not show title, tickLine, label and subTickLine,\n * if data is empty, do not show guide.\n */\nexport function createInnerGuide(guide, data) {\n return data.length\n ? deepMix({\n title: false,\n tick: null,\n label: null,\n }, guide)\n : deepMix({\n title: false,\n tick: null,\n label: null,\n grid: null,\n }, guide);\n}\nfunction createGuideXRect(guide) {\n return (facet, data) => {\n const { rowIndex, rowValuesLength, columnIndex, columnValuesLength } = facet;\n // Only the bottom-most facet show axisX.\n if (rowIndex !== rowValuesLength - 1)\n return createInnerGuide(guide, data);\n // Only the bottom-left facet show title.\n const title = columnIndex !== columnValuesLength - 1 ? false : undefined;\n // If data is empty, do not show cell.\n const grid = data.length ? undefined : null;\n return deepMix({ title, grid }, guide);\n };\n}\nfunction createGuideYRect(guide) {\n return (facet, data) => {\n const { rowIndex, columnIndex } = facet;\n // Only the left-most facet show axisY.\n if (columnIndex !== 0)\n return createInnerGuide(guide, data);\n // Only the left-top facet show title.\n const title = rowIndex !== 0 ? false : undefined;\n // If data is empty, do not show cell.\n const grid = data.length ? undefined : null;\n return deepMix({ title, grid }, guide);\n };\n}\nfunction createGuide(guide, factory) {\n if (typeof guide === 'function')\n return guide;\n if (guide === null || guide === false)\n return () => null;\n return factory(guide);\n}\nexport const FacetRect = () => {\n return (options) => {\n const newOptions = Container.of(options)\n .call(toCell)\n .call(inferColor)\n .call(setAnimation)\n .call(setScale)\n .call(setStyle)\n .call(setData)\n .call(setChildren)\n .value();\n return [newOptions];\n };\n};\nFacetRect.props = {};\n//# sourceMappingURL=facetRect.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Container } from '../utils/container';\nimport { angleWithQuadrant, angleBetween, dist, sub } from '../utils/vector';\nimport { inferColor, setAnimation, setStyle, toCell, setChildren, setData, } from './facetRect';\nimport { useDefaultAdaptor } from './utils';\nconst setScale = useDefaultAdaptor((options) => {\n return {\n scale: {\n x: { guide: { type: 'axisArc' }, paddingOuter: 0, paddingInner: 0.1 },\n y: { guide: null, range: [0, 1], paddingOuter: 0, paddingInner: 0.1 },\n },\n };\n});\nconst setCoordinate = useDefaultAdaptor((options) => {\n return {\n coordinate: { type: 'polar' },\n };\n});\nconst setEncode = (options) => {\n const { encode } = options, rest = __rest(options, [\"encode\"]);\n const { position } = encode;\n return Object.assign(Object.assign({}, rest), { encode: { x: position } });\n};\n/**\n * Every facet should do not show both axisX and axisY by default.\n */\nfunction createGuideFacetCircle(guide) {\n return (facet) => null;\n}\n/**\n * Use the inscribed circle of the sector as the\n * circumscribed circle of the new bbox.\n */\nfunction subLayoutFacetCircle(data) {\n const { points } = data;\n const [p0, p1, p2, p3] = points;\n const sr = dist(p0, p3); // radius of sector\n const v0 = sub(p0, p3);\n const v1 = sub(p1, p2);\n const a01 = angleBetween(v0, v1);\n // sr = ir + ir / sin(theta/2)\n const t = 1 / Math.sin(a01 / 2);\n const ir = sr / (1 + t); // radius of inscribed circle\n const s = ir * Math.sqrt(2); // size of the bbox.\n // This assume the innerRadius of polar is 0.\n // @todo Compute the right origin if it's not 0,\n // or maybe pass the coordinates to get the right center.\n const [x0, y0] = p2;\n const a0 = angleWithQuadrant(v0);\n const a3 = a0 + a01 / 2;\n const d = ir * t;\n const cx = x0 + d * Math.sin(a3); // center x of inscribed circle\n const cy = y0 - d * Math.cos(a3); // center y of inscribed circle\n return [cx - s / 2, cy - s / 2, s, s];\n}\n/**\n * @todo Pack.\n */\nexport const FacetCircle = () => {\n return (options) => {\n const newOptions = Container.of(options)\n .call(toCell)\n .call(setEncode)\n .call(inferColor)\n .call(setCoordinate)\n .call(setData)\n .call(setChildren, subLayoutFacetCircle, createGuideFacetCircle, createGuideFacetCircle, { frame: false })\n .call(setAnimation)\n .call(setStyle)\n .call(setScale)\n .value();\n return [newOptions];\n };\n};\n//# sourceMappingURL=facetCircle.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix } from '@antv/util';\nimport { Container } from '../utils/container';\nimport { calcBBox } from '../utils/vector';\nimport { indexOf } from '../utils/array';\nimport { createInnerGuide, inferColor, setAnimation, setStyle, toCell, } from './facetRect';\nimport { useDefaultAdaptor, useOverrideAdaptor } from './utils';\nconst setScale = useDefaultAdaptor((options) => {\n return {\n scale: {\n x: { guide: null, paddingOuter: 0, paddingInner: 0.1 },\n y: { guide: null, range: [0, 1], paddingOuter: 0, paddingInner: 0.1 },\n },\n };\n});\nconst setChildren = useOverrideAdaptor((options) => {\n const { data, children, x: originX = 0, y: originY = 0, key: viewKey, } = options;\n const createChildren = (visualData, scale, layout) => {\n const { x: scaleX, y: scaleY } = scale;\n const { paddingLeft, paddingTop, marginLeft, marginTop } = layout;\n const { domain: domainX } = scaleX.getOptions();\n const { domain: domainY } = scaleY.getOptions();\n const index = indexOf(visualData);\n const bboxs = visualData.map(({ points }) => calcBBox(points));\n const values = visualData.map(({ x, y }) => [\n scaleX.invert(x),\n scaleY.invert(y),\n ]);\n const facets = values.map(([fx, fy]) => ({\n columnField: fx,\n columnIndex: domainX.indexOf(fx),\n columnValue: fx,\n columnValuesLength: domainX.length,\n rowField: fy,\n rowIndex: domainY.indexOf(fy),\n rowValue: fy,\n rowValuesLength: domainY.length,\n }));\n const normalizedChildren = facets.map((facet) => {\n if (Array.isArray(children))\n return children;\n return [children(facet)].flat(1);\n });\n return index.flatMap((i) => {\n const [left, top, width, height] = bboxs[i];\n const [fx, fy] = values[i];\n const facet = facets[i];\n const children = normalizedChildren[i];\n return children.map((d) => {\n var _a, _b;\n const { scale, key, encode, axis, interaction } = d, rest = __rest(d, [\"scale\", \"key\", \"encode\", \"axis\", \"interaction\"]);\n const guideY = (_a = scale === null || scale === void 0 ? void 0 : scale.y) === null || _a === void 0 ? void 0 : _a.guide;\n const guideX = (_b = scale === null || scale === void 0 ? void 0 : scale.x) === null || _b === void 0 ? void 0 : _b.guide;\n const defaultScale = {\n // Do not sync position scales among facets by default.\n x: { facet: false },\n // Do not sync position scales among facets by default.\n y: { facet: false },\n };\n const newAxis = {\n x: createGuideX(guideX)(facet, data),\n y: createGuideY(guideY)(facet, data),\n };\n const defaultAxis = {\n x: { tickCount: 5 },\n y: { tickCount: 5 },\n };\n return Object.assign({ data, parentKey: viewKey, key: `${key}-${i}`, x: left + paddingLeft + originX + marginLeft, y: top + paddingTop + originY + marginTop, width,\n height, margin: 0, paddingLeft: 0, paddingRight: 0, paddingTop: 0, paddingBottom: 0, frame: true, scale: deepMix(defaultScale, scale), axis: deepMix(defaultAxis, axis, newAxis), \n // Hide all legends for child mark by default,\n // they are displayed in the top-level.\n legend: false, encode: deepMix({}, encode, {\n x: fx,\n y: fy,\n }), interaction: deepMix({}, interaction, {\n // Register this interaction in parent node.\n legendFilter: false,\n }) }, rest);\n });\n });\n };\n return {\n children: createChildren,\n };\n});\n/**\n * @todo Use transform instead of override data directly.\n */\nconst setData = useOverrideAdaptor((options) => {\n const { encode } = options, rest = __rest(options, [\"encode\"]);\n const { position: P = [], x: X = P, y: Y = [...P].reverse() } = encode, restEncode = __rest(encode, [\"position\", \"x\", \"y\"]);\n const data = [];\n for (const $x of [X].flat(1)) {\n for (const $y of [Y].flat(1)) {\n data.push({ $x, $y });\n }\n }\n return Object.assign(Object.assign({}, rest), { data, encode: Object.assign(Object.assign({}, restEncode), { x: '$x', y: '$y' }), scale: Object.assign(Object.assign({}, ([X].flat(1).length === 1 && { x: { paddingInner: 0 } })), ([Y].flat(1).length === 1 && { y: { paddingInner: 0 } })) });\n});\nfunction createGuideX(guideX) {\n if (typeof guideX === 'function')\n return guideX;\n if (guideX === null)\n return () => null;\n return (facet, data) => {\n const { rowIndex, rowValuesLength } = facet;\n // Only the bottom-most facet show axisX.\n if (rowIndex !== rowValuesLength - 1)\n return createInnerGuide(guideX, data);\n };\n}\nfunction createGuideY(guideY) {\n if (typeof guideY === 'function')\n return guideY;\n if (guideY === null)\n return () => null;\n return (facet, data) => {\n const { columnIndex } = facet;\n // Only the left-most facet show axisY.\n if (columnIndex !== 0)\n return createInnerGuide(guideY, data);\n };\n}\n/**\n * @todo Layout mode: layer, row, col...\n * @todo Specify show axis or not.\n */\nexport const RepeatMatrix = () => {\n return (options) => {\n const newOptions = Container.of(options)\n .call(toCell)\n .call(inferColor)\n .call(setChildren)\n .call(setData)\n .call(setAnimation)\n .call(setStyle)\n .call(setScale)\n .value();\n return [newOptions];\n };\n};\n//# sourceMappingURL=repeatMatrix.js.map","import { deepMix } from '@antv/util';\nfunction range(direction, iterationCount, keyframeCount) {\n const start = 0;\n const end = keyframeCount;\n const normal = [start, end];\n const reverse = [-end + 1, -start + 1];\n if (direction === 'normal')\n return normal;\n if (direction === 'reverse')\n return reverse;\n if (direction === 'alternate') {\n return iterationCount % 2 === 0 ? normal : reverse;\n }\n if (direction === 'reverse-alternate') {\n return iterationCount % 2 === 0 ? reverse : normal;\n }\n}\n/**\n * Set animation options for all descendants.\n */\nfunction setAnimation(node, duration, easing) {\n const discovered = [node];\n while (discovered.length) {\n const n = discovered.pop();\n n.animate = deepMix({\n enter: {\n duration,\n },\n update: {\n duration,\n easing,\n type: 'morphing',\n fill: 'both',\n },\n exit: {\n type: 'fadeOut',\n duration,\n },\n }, n.animate || {});\n const { children } = n;\n if (Array.isArray(children))\n discovered.push(...children);\n }\n return node;\n}\n/**\n * @todo More options, such as fill, totalDuration...\n */\nexport const TimingKeyframe = () => {\n return (options) => {\n const { children = [], duration = 1000, iterationCount = 1, direction = 'normal', easing = 'ease-in-out-sine', } = options;\n const n = children.length;\n if (!Array.isArray(children) || n === 0)\n return [];\n const { key } = children[0];\n const newChildren = children\n .map((d) => (Object.assign(Object.assign({}, d), { key })))\n .map((d) => setAnimation(d, duration, easing));\n return function* () {\n let count = 0;\n let prevIndex;\n while (iterationCount === 'infinite' || count < iterationCount) {\n const [start, end] = range(direction, count, n);\n for (let i = start; i < end; i += 1) {\n // For reverse direction, the range is from negative to negative\n // so the absolute value of i is the real index for newChildren.\n const index = Math.abs(i);\n // This is for preventing alternate or reverse-alternate keyframe\n // to yield two same node one by one when the direction change.\n if (prevIndex !== index)\n yield newChildren[index];\n prevIndex = index;\n }\n count++;\n }\n };\n };\n};\nTimingKeyframe.props = {};\n//# sourceMappingURL=timingKeyframe.js.map","import { group, ascending, maxIndex } from '@antv/vendor/d3-array';\nimport { defined } from '../../utils/helper';\nimport { indexOf } from '../../utils/array';\nimport { columnOf } from './helper';\nexport function createGroups(groupBy, I, mark) {\n const { encode } = mark;\n if (groupBy === null)\n return [I];\n const G = normalizeGroupBy(groupBy)\n .map((k) => { var _a; return [k, (_a = columnOf(encode, k)) === null || _a === void 0 ? void 0 : _a[0]]; })\n .filter(([, column]) => defined(column));\n const key = (i) => G.map(([, V]) => V[i]).join('-');\n return Array.from(group(I, key).values());\n}\nexport function normalizeComparator(order) {\n if (Array.isArray(order))\n return createFieldsOrder(order);\n if (typeof order === 'function')\n return createFunctionOrder(order);\n if (order === 'series')\n return createSeriesOrder;\n if (order === 'value')\n return createValueOrder;\n if (order === 'sum')\n return createSumOrder;\n if (order === 'maxIndex')\n return createMaxIndexOrder;\n return null;\n}\nexport function applyOrder(groups, comparator) {\n for (const group of groups) {\n group.sort(comparator);\n }\n}\nexport function domainOf(value, scale) {\n return (scale === null || scale === void 0 ? void 0 : scale.domain) || Array.from(new Set(value));\n}\nfunction normalizeGroupBy(groupBy) {\n if (Array.isArray(groupBy))\n return groupBy;\n return [groupBy];\n}\nfunction createSeriesOrder(data, Y, S) {\n return ascendingComparator((i) => S[i]);\n}\nfunction createFunctionOrder(order) {\n return (data, Y, S) => {\n return ascendingComparator((i) => order(data[i]));\n };\n}\nfunction createFieldsOrder(order) {\n return (data, Y, S) => {\n return (i, j) => order.reduce((eq, f) => (eq !== 0 ? eq : ascending(data[i][f], data[j][f])), 0);\n };\n}\nfunction createValueOrder(data, Y, S) {\n return ascendingComparator((i) => Y[i]);\n}\nfunction createSumOrder(data, Y, S) {\n const I = indexOf(data);\n const groups = Array.from(group(I, (i) => S[+i]).entries());\n const seriesSum = new Map(groups.map(([k, GI]) => [k, GI.reduce((s, i) => s + +Y[i])]));\n return ascendingComparator((i) => seriesSum.get(S[i]));\n}\nfunction createMaxIndexOrder(data, Y, S) {\n const I = indexOf(data);\n const groups = Array.from(group(I, (i) => S[+i]).entries());\n const seriesMaxIndex = new Map(groups.map(([k, GI]) => [k, maxIndex(GI, (i) => Y[i])]));\n return ascendingComparator((i) => seriesMaxIndex.get(S[i]));\n}\nfunction ascendingComparator(order) {\n return (i, j) => ascending(order(i), order(j));\n}\n//# sourceMappingURL=order.js.map","import { deepMix } from '@antv/util';\nimport { column, columnOf, inferredColumn, maybeColumnOf, } from './utils/helper';\nimport { normalizeComparator, createGroups, applyOrder } from './utils/order';\n/**\n * The stack transform group marks into series by color channel,\n * and then produce new y channel for each series by specified order,\n * say to form vertical \"stacks\" by specified channels.\n */\nexport const StackY = (options = {}) => {\n const { groupBy = 'x', orderBy = null, reverse = false, y: fromY = 'y', y1: fromY1 = 'y1', series = true, } = options;\n return (I, mark) => {\n var _a;\n const { data, encode, style = {} } = mark;\n const [Y, fy] = columnOf(encode, 'y');\n const [Y1, fy1] = columnOf(encode, 'y1');\n const [S] = series\n ? maybeColumnOf(encode, 'series', 'color')\n : columnOf(encode, 'color');\n // Create groups and apply specified order for each group.\n const groups = createGroups(groupBy, I, mark);\n const createComparator = (_a = normalizeComparator(orderBy)) !== null && _a !== void 0 ? _a : (() => null);\n const comparator = createComparator(data, Y, S);\n if (comparator)\n applyOrder(groups, comparator);\n // Stack y channels to produce new y and y1 channel.\n const newY = new Array(I.length);\n const newY1 = new Array(I.length);\n const TY = new Array(I.length);\n const F = [];\n const L = [];\n for (const G of groups) {\n if (reverse)\n G.reverse();\n // For range interval with specified y and y1.\n const start = Y1 ? +Y1[G[0]] : 0;\n // Split positive indices of Y and negative Y.\n const PG = [];\n const NG = [];\n for (const i of G) {\n const y = (TY[i] = +Y[i] - start);\n if (y < 0)\n NG.push(i);\n else if (y >= 0)\n PG.push(i);\n }\n // Store the first and last layer.\n const FG = PG.length > 0 ? PG : NG;\n const LG = NG.length > 0 ? NG : PG;\n let i = PG.length - 1;\n let j = 0;\n // Find the last non-zero index.\n while (i > 0 && Y[FG[i]] === 0)\n i--;\n // Find the first non-zero index.\n while (j < LG.length - 1 && Y[LG[j]] === 0)\n j++;\n F.push(FG[i]);\n L.push(LG[j]);\n // Stack negative y in reverse order.\n let ny = start;\n for (const i of NG.reverse()) {\n const y = TY[i];\n ny = newY[i] = (newY1[i] = ny) + y;\n }\n // Stack positive y in input order.\n let py = start;\n for (const i of PG) {\n const y = TY[i];\n if (y > 0)\n py = newY[i] = (newY1[i] = py) + y;\n else\n newY[i] = newY1[i] = py;\n }\n }\n // Only set top radius for the first layer,\n // and set bottom radius for the last layer.\n const FS = new Set(F);\n const LS = new Set(L);\n // Choose new y or y1 channel as the new y channel.\n const V = fromY === 'y' ? newY : newY1;\n const V1 = fromY1 === 'y' ? newY : newY1;\n let newEncode;\n // mark point will compute the actural Y = (y + y1) / 2 if y1 exists\n if (mark.type === 'point') {\n newEncode = {\n y0: inferredColumn(Y, fy),\n y: column(V, fy),\n };\n }\n else {\n newEncode = {\n y0: inferredColumn(Y, fy),\n y: column(V, fy),\n y1: column(V1, fy1),\n };\n }\n return [\n I,\n deepMix({}, mark, {\n encode: Object.assign({}, newEncode),\n style: Object.assign({ first: (_, i) => FS.has(i), last: (_, i) => LS.has(i) }, style),\n }),\n ];\n };\n};\nStackY.props = {};\n//# sourceMappingURL=stackY.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix } from '@antv/util';\nimport { column, columnOf, maybeColumnOf } from './utils/helper';\nimport { createGroups, normalizeComparator, applyOrder, domainOf, } from './utils/order';\n/**\n * The dodge group marks into series by color or series channel,\n * and then produce new series channel for each series by specified order,\n * say to form horizontal \"columns\" by specified channels.\n */\nexport const DodgeX = (options = {}) => {\n const { groupBy = 'x', reverse = false, orderBy, padding } = options, rest = __rest(options, [\"groupBy\", \"reverse\", \"orderBy\", \"padding\"]);\n return (I, mark) => {\n const { data, encode, scale } = mark;\n const { series: scaleSeries } = scale;\n const [Y] = columnOf(encode, 'y');\n const [S] = maybeColumnOf(encode, 'series', 'color');\n const domainSeries = domainOf(S, scaleSeries);\n const newMark = deepMix({}, mark, {\n scale: {\n series: {\n domain: domainSeries,\n paddingInner: padding,\n },\n },\n });\n // Create groups and apply specified order for each group.\n const groups = createGroups(groupBy, I, mark);\n const createComparator = normalizeComparator(orderBy);\n if (!createComparator) {\n return [I, deepMix(newMark, { encode: { series: column(S) } })];\n }\n // Sort and Update series for each mark related to series domain.\n const comparator = createComparator(data, Y, S);\n if (comparator)\n applyOrder(groups, comparator);\n const newS = new Array(I.length);\n for (const G of groups) {\n if (reverse)\n G.reverse();\n for (let i = 0; i < G.length; i++) {\n newS[G[i]] = domainSeries[i];\n }\n }\n return [\n I,\n deepMix(newMark, {\n encode: {\n series: column(orderBy ? newS : S),\n },\n }),\n ];\n };\n};\nDodgeX.props = {};\n//# sourceMappingURL=dodgeX.js.map","import { deepMix } from '@antv/util';\nimport { group, max } from '@antv/vendor/d3-array';\nimport { columnOf, constant, maybeColumnOf, visualColumn, } from './utils/helper';\n/**\n * Group marks by channels into groups and stacking their enterDelay\n * to make marks show up groups by groups.\n * It will update enterDelay channel for each mark by its enterDuration and group.\n * @todo Support orderBy.\n * @todo Sort among groups(e.g. reverse).\n * @todo Stack enter in groups rather than between groups?\n * @todo Auto inter this statistic for scaleInY animation in stacked interval?\n * @todo All the groups shared the enterDuration?\n */\nexport const StackEnter = (options) => {\n const { groupBy = ['x'], reducer = (I, V) => V[I[0]], orderBy = null, reverse = false, duration, } = options;\n return (I, mark) => {\n const { encode } = mark;\n // Extract group information by each specified channel,\n // and skip if all values of channels are empty.\n const by = Array.isArray(groupBy) ? groupBy : [groupBy];\n const groupEntries = by.map((k) => [k, columnOf(encode, k)[0]]);\n if (groupEntries.length === 0)\n return [I, mark];\n // Nest group index and flatten them in right order among timeline.\n // [[1, 2, 3, 4, 5, 6]] ->\n // [[1, 2, 3], [4, 5, 6]] ->\n // [[1], [2], [3], [4], [5], [6]]\n let groups = [I];\n for (const [, V] of groupEntries) {\n const newGroups = [];\n for (const I of groups) {\n const G = Array.from(group(I, (i) => V[i]).values());\n // @todo sort by x.\n newGroups.push(...G);\n }\n groups = newGroups;\n }\n // const {color} = encode;\n if (orderBy) {\n const [V] = columnOf(encode, orderBy);\n if (V)\n groups.sort((I, J) => reducer(I, V) - reducer(J, V));\n if (reverse)\n groups.reverse();\n }\n // Stack delay for each group.\n const t = (duration || 3000) / groups.length;\n const [ED] = duration\n ? [constant(I, t)] // If specified duration, generate enter duration for each.\n : maybeColumnOf(encode, 'enterDuration', constant(I, t));\n const [EDL] = maybeColumnOf(encode, 'enterDelay', constant(I, 0));\n const newEnterDelay = new Array(I.length);\n for (let i = 0, pd = 0; i < groups.length; i++) {\n const I = groups[i];\n const maxDuration = max(I, (i) => +ED[i]);\n for (const j of I)\n newEnterDelay[j] = +EDL[j] + pd;\n pd += maxDuration;\n }\n return [\n I,\n deepMix({}, mark, {\n encode: {\n enterDuration: visualColumn(ED),\n enterDelay: visualColumn(newEnterDelay),\n },\n }),\n ];\n };\n};\nStackEnter.props = {};\n//# sourceMappingURL=stackEnter.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix } from '@antv/util';\nimport { mean, deviation, median, sum, max, min } from '@antv/vendor/d3-array';\nimport { isUnset } from '../utils/helper';\nimport { column, columnOf } from './utils/helper';\nimport { createGroups } from './utils/order';\nfunction normalizeBasis(basis) {\n if (typeof basis === 'function')\n return basis;\n const registry = {\n min: (I, Y) => min(I, (i) => Y[+i]),\n max: (I, Y) => max(I, (i) => Y[+i]),\n first: (I, Y) => Y[I[0]],\n last: (I, Y) => Y[I[I.length - 1]],\n mean: (I, Y) => mean(I, (i) => Y[+i]),\n median: (I, Y) => median(I, (i) => Y[+i]),\n sum: (I, Y) => sum(I, (i) => Y[+i]),\n deviation: (I, Y) => deviation(I, (i) => Y[+i]),\n };\n return registry[basis] || max;\n}\n/**\n * Group marks into series by specified channels, and then transform\n * each series's value, say to transform them relative to some basis\n * to apply a moving average.\n */\nexport const NormalizeY = (options = {}) => {\n const { groupBy = 'x', basis = 'max' } = options;\n return (I, mark) => {\n const { encode, tooltip } = mark;\n const { x } = encode, rest = __rest(encode, [\"x\"]);\n // Extract and create new channels starts with y, such as y, y1.\n const Yn = Object.entries(rest)\n .filter(([k]) => k.startsWith('y'))\n .map(([k]) => [k, columnOf(encode, k)[0]]);\n const [, Y] = Yn.find(([k]) => k === 'y');\n const newYn = Yn.map(([k]) => [k, new Array(I.length)]);\n // Group marks into series by specified keys.\n const groups = createGroups(groupBy, I, mark);\n // Transform y channels for each group based on basis.\n const basisFunction = normalizeBasis(basis);\n for (const I of groups) {\n // Compute basis only base on y.\n const basisValue = basisFunction(I, Y);\n for (const i of I) {\n for (let j = 0; j < Yn.length; j++) {\n const [, V] = Yn[j];\n const [, newV] = newYn[j];\n newV[i] = +V[i] / basisValue;\n }\n }\n }\n const specifiedTooltip = isUnset(tooltip) || ((tooltip === null || tooltip === void 0 ? void 0 : tooltip.items) && (tooltip === null || tooltip === void 0 ? void 0 : tooltip.items.length) !== 0);\n return [\n I,\n deepMix({}, mark, Object.assign({ encode: Object.fromEntries(newYn.map(([k, v]) => [k, column(v, columnOf(encode, k)[1])])) }, (!specifiedTooltip &&\n encode.y0 && {\n tooltip: { items: [{ channel: 'y0' }] },\n }))),\n ];\n };\n};\nNormalizeY.props = {};\n//# sourceMappingURL=normalizeY.js.map","import { Band } from '@antv/scale';\nimport { deepMix } from '@antv/util';\nimport { column, columnOf } from './utils/helper';\nimport { domainOf } from './utils/order';\nexport function rangeOf(value, scaleOptions, padding) {\n if (value === null)\n return [-0.5, 0.5];\n const domain = domainOf(value, scaleOptions);\n const scale = new Band({ domain, range: [0, 1], padding });\n const step = scale.getBandWidth();\n return [-step / 2, step / 2];\n}\nexport function interpolate(t, a, b) {\n return a * (1 - t) + b * t;\n}\n/**\n * The jitter transform produce dx and dy channels for marks (especially for point)\n * with ordinal x and y dimension, say to make them jitter in their own space.\n */\nexport const Jitter = (options = {}) => {\n const { padding = 0, paddingX = padding, paddingY = padding, random = Math.random, } = options;\n return (I, mark) => {\n const { encode, scale } = mark;\n const { x: scaleX, y: scaleY } = scale;\n const [X] = columnOf(encode, 'x');\n const [Y] = columnOf(encode, 'y');\n const rangeX = rangeOf(X, scaleX, paddingX);\n const rangeY = rangeOf(Y, scaleY, paddingY);\n const DY = I.map(() => interpolate(random(), ...rangeY));\n const DX = I.map(() => interpolate(random(), ...rangeX));\n return [\n I,\n deepMix({\n scale: {\n x: { padding: 0.5 },\n y: { padding: 0.5 },\n },\n }, mark, {\n encode: { dy: column(DY), dx: column(DX) },\n }),\n ];\n };\n};\nJitter.props = {};\n//# sourceMappingURL=jitter.js.map","import { deepMix } from '@antv/util';\nimport { column, columnOf } from './utils/helper';\nimport { rangeOf, interpolate } from './jitter';\n/**\n * The JitterX transform produce dy channels for marks (especially for point)\n * with ordinal x and y dimension, say to make them jitter in their own space.\n */\nexport const JitterX = (options = {}) => {\n const { padding = 0, random = Math.random } = options;\n return (I, mark) => {\n const { encode, scale } = mark;\n const { x: scaleX } = scale;\n const [X] = columnOf(encode, 'x');\n const rangeX = rangeOf(X, scaleX, padding);\n const DX = I.map(() => interpolate(random(), ...rangeX));\n return [\n I,\n deepMix({ scale: { x: { padding: 0.5 } } }, mark, {\n encode: { dx: column(DX) },\n }),\n ];\n };\n};\nJitterX.props = {};\n//# sourceMappingURL=jitterX.js.map","import { deepMix } from '@antv/util';\nimport { column, columnOf } from './utils/helper';\nimport { rangeOf, interpolate } from './jitter';\n/**\n * The JitterY transform produce dy channels for marks (especially for point)\n * with ordinal x and y dimension, say to make them jitter in their own space.\n */\nexport const JitterY = (options = {}) => {\n const { padding = 0, random = Math.random } = options;\n return (I, mark) => {\n const { encode, scale } = mark;\n const { y: scaleY } = scale;\n const [Y] = columnOf(encode, 'y');\n const rangeY = rangeOf(Y, scaleY, padding);\n const DY = I.map(() => interpolate(random(), ...rangeY));\n return [\n I,\n deepMix({ scale: { y: { padding: 0.5 } } }, mark, {\n encode: { dy: column(DY) },\n }),\n ];\n };\n};\nJitterY.props = {};\n//# sourceMappingURL=jitterY.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix } from '@antv/util';\nimport { extent } from '@antv/vendor/d3-array';\nimport { columnOf, column } from './utils/helper';\nimport { createGroups } from './utils/order';\n/**\n * The SymmetryY transform apply offset for y channels, say to transform\n * them to be symmetry.\n */\nexport const SymmetryY = (options = {}) => {\n const { groupBy = 'x' } = options;\n return (I, mark) => {\n const { encode } = mark;\n const { x } = encode, rest = __rest(encode, [\"x\"]);\n // Extract and create new channels starts with y, such as y, y1.\n const Yn = Object.entries(rest)\n .filter(([k]) => k.startsWith('y'))\n .map(([k]) => [k, columnOf(encode, k)[0]]);\n const newYn = Yn.map(([k]) => [k, new Array(I.length)]);\n // Group marks into series by specified keys.\n const groups = createGroups(groupBy, I, mark);\n const MY = new Array(groups.length);\n for (let i = 0; i < groups.length; i++) {\n const I = groups[i];\n const Y = I.flatMap((i) => Yn.map(([, V]) => +V[i]));\n const [minY, maxY] = extent(Y);\n MY[i] = (minY + maxY) / 2;\n }\n const maxMiddleY = Math.max(...MY);\n for (let m = 0; m < groups.length; m++) {\n const offset = maxMiddleY - MY[m];\n const I = groups[m];\n for (const i of I) {\n for (let j = 0; j < Yn.length; j++) {\n const [, V] = Yn[j];\n const [, newV] = newYn[j];\n newV[i] = +V[i] + offset;\n }\n }\n }\n return [\n I,\n deepMix({}, mark, {\n encode: Object.fromEntries(newYn.map(([k, v]) => [k, column(v, columnOf(encode, k)[1])])),\n }),\n ];\n };\n};\nSymmetryY.props = {};\n//# sourceMappingURL=symmetryY.js.map","import { deepMix } from '@antv/util';\nimport { column, columnOf } from './utils/helper';\nimport { createGroups } from './utils/order';\n/**\n * The DiffY transform apply offset for y0 channels.\n * Keep y unchanged, set y1 = max(otherY), if y1 > y, remove the data.\n */\nexport const DiffY = (options = {}) => {\n const { groupBy = 'x' } = options;\n return (I, mark) => {\n const { encode } = mark;\n const [Y] = columnOf(encode, 'y');\n const [_, fy1] = columnOf(encode, 'y1');\n // Create groups and apply specified order for each group.\n const groups = createGroups(groupBy, I, mark);\n // Only adjust Y1 channel.\n const newY1 = new Array(I.length);\n for (const G of groups) {\n const YG = G.map((i) => +Y[i]);\n // Process each series.\n for (let idx = 0; idx < G.length; idx++) {\n const i = G[idx];\n // Get the max Y of current group with current Y exclude.\n const max = Math.max(...YG.filter((_, _i) => _i !== idx));\n // Diff Y value.\n newY1[i] = +Y[i] > max ? max : Y[i];\n }\n }\n return [\n I,\n deepMix({}, mark, {\n encode: {\n y1: column(newY1, fy1),\n },\n }),\n ];\n };\n};\nDiffY.props = {};\n//# sourceMappingURL=diffY.js.map","import { maxIndex, minIndex } from '@antv/vendor/d3-array';\nimport { columnOf } from './utils/helper';\nimport { createGroups } from './utils/order';\nfunction first(I, V) {\n return [I[0]];\n}\nfunction last(I, V) {\n const i = I.length - 1;\n return [I[i]];\n}\nfunction max(I, V) {\n const i = maxIndex(I, (i) => V[i]);\n return [I[i]];\n}\nfunction min(I, V) {\n const i = minIndex(I, (i) => V[i]);\n return [I[i]];\n}\nfunction normalizeSelector(selector) {\n if (typeof selector === 'function')\n return selector;\n const registry = { first, last, max, min };\n return registry[selector] || first;\n}\n/**\n * The select transform groups marks with specified channels, and\n * filter index by specified selector for each series, say to\n * pull a single or multiple values out of each series.\n */\nexport const Select = (options = {}) => {\n const { groupBy = 'series', channel, selector } = options;\n return (I, mark) => {\n const { encode } = mark;\n const groups = createGroups(groupBy, I, mark);\n const [V] = columnOf(encode, channel);\n const selectFunction = normalizeSelector(selector);\n return [groups.flatMap((GI) => selectFunction(GI, V)), mark];\n };\n};\nSelect.props = {};\n//# sourceMappingURL=select.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Select } from './select';\n/**\n * The selectX transform filter index by y channel.\n */\nexport const SelectX = (options = {}) => {\n const { selector } = options, rest = __rest(options, [\"selector\"]);\n return Select(Object.assign({ channel: 'x', selector }, rest));\n};\nSelectX.props = {};\n//# sourceMappingURL=selectX.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Select } from './select';\n/**\n * The selectY transform filter index by y channel.\n */\nexport const SelectY = (options = {}) => {\n const { selector } = options, rest = __rest(options, [\"selector\"]);\n return Select(Object.assign({ channel: 'y', selector }, rest));\n};\nSelectY.props = {};\n//# sourceMappingURL=selectY.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix } from '@antv/util';\nimport { max as d3Max, mean as d3Mean, sum as d3Sum, min as d3Min, median as d3Median, } from '@antv/vendor/d3-array';\nimport { indexOf } from '../utils/array';\nimport { columnOf, column, nonConstantColumn } from './utils/helper';\nfunction builtinFormatter(summary) {\n return (d) => (d === null ? summary : `${summary} of ${d}`);\n}\nfunction normalizeReducer(reducer) {\n if (typeof reducer === 'function')\n return [reducer, null];\n const registry = { mean, max, count, first, last, sum, min, median };\n const reducerFunction = registry[reducer];\n if (!reducerFunction)\n throw new Error(`Unknown reducer: ${reducer}.`);\n return reducerFunction();\n}\nfunction mean() {\n const reducer = (I, V) => d3Mean(I, (i) => +V[i]);\n const formatter = builtinFormatter('mean');\n return [reducer, formatter];\n}\nfunction median() {\n const reducer = (I, V) => d3Median(I, (i) => +V[i]);\n const formatter = builtinFormatter('median');\n return [reducer, formatter];\n}\nfunction max() {\n const reducer = (I, V) => d3Max(I, (i) => +V[i]);\n const formatter = builtinFormatter('max');\n return [reducer, formatter];\n}\nfunction min() {\n const reducer = (I, V) => d3Min(I, (i) => +V[i]);\n const formatter = builtinFormatter('min');\n return [reducer, formatter];\n}\nfunction count() {\n const reducer = (I, V) => I.length;\n const formatter = builtinFormatter('count');\n return [reducer, formatter];\n}\nfunction sum() {\n const reducer = (I, V) => d3Sum(I, (i) => +V[i]);\n const formatter = builtinFormatter('sum');\n return [reducer, formatter];\n}\nfunction first() {\n const reducer = (I, V) => V[I[0]];\n const formatter = builtinFormatter('first');\n return [reducer, formatter];\n}\nfunction last() {\n const reducer = (I, V) => V[I[I.length - 1]];\n const formatter = builtinFormatter('last');\n return [reducer, formatter];\n}\n/**\n * The Group transform group data by x and y channels, and aggregate.\n */\nexport const GroupN = (options = {}) => {\n const { groupBy } = options, rest = __rest(options, [\"groupBy\"]);\n return (I, mark) => {\n const { data, encode } = mark;\n const groups = groupBy(I, mark);\n if (!groups)\n return [I, mark];\n // Extract field from from channel\n // x1 from x, y1 from y, etc,.\n const maybeFrom = (field, reducer) => {\n if (field)\n return field;\n const { from } = reducer;\n if (!from)\n return field;\n const [, field1] = columnOf(encode, from);\n return field1;\n };\n const outputs = Object.entries(rest).map(([channel, reducer]) => {\n const [reducerFunction, formatter] = normalizeReducer(reducer);\n const [V, field] = columnOf(encode, channel);\n const field1 = maybeFrom(field, reducer);\n const RV = groups.map((I) => reducerFunction(I, V !== null && V !== void 0 ? V : data));\n return [\n channel,\n Object.assign(Object.assign({}, nonConstantColumn(RV, (formatter === null || formatter === void 0 ? void 0 : formatter(field1)) || field1)), { aggregate: true }),\n ];\n });\n const reducedColumns = Object.keys(encode).map((key) => {\n const [V, fv] = columnOf(encode, key);\n const GV = groups.map((I) => V[I[0]]);\n return [key, column(GV, fv)];\n });\n const GD = groups.map((I) => data[I[0]]);\n const GI = indexOf(groups);\n return [\n GI,\n deepMix({}, mark, {\n data: GD,\n encode: Object.fromEntries([...reducedColumns, ...outputs]),\n }),\n ];\n };\n};\nGroupN.props = {};\n//# sourceMappingURL=groupN.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { createGroups } from './utils/order';\nimport { GroupN } from './groupN';\n/**\n * The Group transform group data by x and y channels, and aggregate.\n */\nexport const Group = (options = {}) => {\n const { channels = ['x', 'y'] } = options, rest = __rest(options, [\"channels\"]);\n const groupBy = (I, mark) => createGroups(channels, I, mark);\n return GroupN(Object.assign(Object.assign({}, rest), { groupBy }));\n};\nGroup.props = {};\n//# sourceMappingURL=group.js.map","import { Group } from './group';\n/**\n * The GroupX transform group data by x channel, and aggregate.\n */\nexport const GroupX = (options = {}) => {\n return Group(Object.assign(Object.assign({}, options), { channels: ['x', 'color', 'series'] }));\n};\nGroupX.props = {};\n//# sourceMappingURL=groupX.js.map","import { deepMix } from '@antv/util';\nimport { groupSort, max, min, sum, mean, median, sort, } from '@antv/vendor/d3-array';\nimport { columnOf } from './utils/helper';\nfunction createReducer(channel, options, encode) {\n const { by = channel, reducer = 'max' } = options;\n const [V] = columnOf(encode, by);\n if (typeof reducer === 'function')\n return (GI) => reducer(GI, V);\n if (reducer === 'max')\n return (GI) => max(GI, (i) => +V[i]);\n if (reducer === 'min')\n return (GI) => min(GI, (i) => +V[i]);\n if (reducer === 'sum')\n return (GI) => sum(GI, (i) => +V[i]);\n if (reducer === 'median')\n return (GI) => median(GI, (i) => +V[i]);\n if (reducer === 'mean')\n return (GI) => mean(GI, (i) => +V[i]);\n if (reducer === 'first')\n return (GI) => V[GI[0]];\n if (reducer === 'last')\n return (GI) => V[GI[GI.length - 1]];\n throw new Error(`Unknown reducer: ${reducer}`);\n}\n// If domain is specified, only sort data in the domain.\nfunction filterIndex(I, values, specifiedDomain) {\n if (!Array.isArray(specifiedDomain))\n return I;\n const domain = new Set(specifiedDomain);\n return I.filter((i) => domain.has(values[i]));\n}\n/**\n * Sort marks groups by groups.\n */\nexport const Sort = (options = {}) => {\n return (I, mark) => {\n const { reverse, slice, channel, by, ordinal = true, reducer } = options;\n const { encode, scale = {} } = mark;\n const domain = scale[channel].domain;\n const [V] = columnOf(encode, by !== null && by !== void 0 ? by : channel);\n const [T] = columnOf(encode, channel);\n const normalizeReducer = createReducer(channel, { by, reducer }, encode);\n const SI = filterIndex(I, T, domain);\n const sortedDomain = groupSort(SI, normalizeReducer, (i) => T[i]);\n // when ordinal is true, do not change the index of the data.\n const sortedI = !ordinal ? sort(I, (i) => V[i]) : I;\n if (reverse) {\n !ordinal && sortedI.reverse();\n sortedDomain.reverse();\n }\n const s = typeof slice === 'number' ? [0, slice] : slice;\n const slicedDomain = slice ? sortedDomain.slice(...s) : sortedDomain;\n return [\n sortedI,\n deepMix(mark, { scale: { [channel]: { domain: slicedDomain } } }),\n ];\n };\n};\nSort.props = {};\n//# sourceMappingURL=sort.js.map","import ascending from \"./ascending.js\";\nimport group, {rollup} from \"./group.js\";\nimport sort from \"./sort.js\";\n\nexport default function groupSort(values, reduce, key) {\n return (reduce.length !== 2\n ? sort(rollup(values, reduce, key), (([ak, av], [bk, bv]) => ascending(av, bv) || ascending(ak, bk)))\n : sort(group(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || ascending(ak, bk))))\n .map(([key]) => key);\n}\n","import { Sort } from './sort';\n/**\n * Sort domain of x scale of mark groups by groups.\n */\nexport const SortX = (options = {}) => {\n return Sort(Object.assign(Object.assign({}, options), { channel: 'x' }));\n};\nSortX.props = {};\n//# sourceMappingURL=sortX.js.map","import { deepMix } from '@antv/util';\nimport { rollups, sum } from '@antv/vendor/d3-array';\nimport { columnOf } from './utils/helper';\nfunction valueOf(data, field) {\n if (typeof field === 'string')\n return data.map((d) => d[field]);\n return data.map(field);\n}\nfunction createReducer(reducer, V) {\n if (typeof reducer === 'function')\n return (GI) => reducer(GI, V);\n if (reducer === 'sum')\n return (GI) => sum(GI, (i) => +V[i]);\n throw new Error(`Unknown reducer: ${reducer}`);\n}\n/**\n * Produce flex options from data for x scale.\n */\nexport const FlexX = (options = {}) => {\n const { field, channel = 'y', reducer = 'sum' } = options;\n return (I, mark) => {\n const { data, encode } = mark;\n const [x] = columnOf(encode, 'x');\n const V = field ? valueOf(data, field) : columnOf(encode, channel)[0];\n const reducerFunction = createReducer(reducer, V);\n const flex = rollups(I, reducerFunction, (i) => x[i]).map((d) => d[1]);\n return [I, deepMix({}, mark, { scale: { x: { flex } } })];\n };\n};\nFlexX.props = {};\n//# sourceMappingURL=flexX.js.map","import { Sort } from './sort';\n/**\n * Sort domain of x scale of mark groups by groups.\n */\nexport const SortY = (options = {}) => {\n return Sort(Object.assign(Object.assign({}, options), { channel: 'y' }));\n};\nSortY.props = {};\n//# sourceMappingURL=sortY.js.map","import { Group } from './group';\n/**\n * The GroupY transform group data by x channel, and aggregate.\n */\nexport const GroupY = (options = {}) => {\n return Group(Object.assign(Object.assign({}, options), { channels: ['y', 'color', 'series'] }));\n};\nGroupY.props = {};\n//# sourceMappingURL=groupY.js.map","import { Group } from './group';\n/**\n * The GroupColor transform group data by x channel, and aggregate.\n */\nexport const GroupColor = (options = {}) => {\n return Group(Object.assign(Object.assign({}, options), { channels: ['color'] }));\n};\nGroupColor.props = {};\n//# sourceMappingURL=groupColor.js.map","import { Sort } from './sort';\n/**\n * Sort domain of x scale of mark groups by groups.\n */\nexport const SortColor = (options = {}) => {\n return Sort(Object.assign(Object.assign({}, options), { channel: 'color' }));\n};\nSortColor.props = {};\n//# sourceMappingURL=sortColor.js.map","import { deepMix } from '@antv/util';\nimport { calcBBox } from '../utils/vector';\nfunction pack(options) {\n const { padding = 0, direction = 'col' } = options;\n return (P, count, layout) => {\n const pcount = P.length;\n if (pcount === 0)\n return [];\n // col * row >= count\n // row is close to col * aspect, so\n // col * (col * aspect) >= count\n const { innerWidth, innerHeight } = layout;\n const aspect = innerHeight / innerWidth;\n let col = Math.ceil(Math.sqrt(count / aspect));\n // Increase col to avoid total height of packed shape\n // being large than height of bbox.\n let size = innerWidth / col;\n let row = Math.ceil(count / col);\n let h0 = row * size;\n while (h0 > innerHeight) {\n col = col + 1;\n size = innerWidth / col;\n row = Math.ceil(count / col);\n h0 = row * size;\n }\n // Some offset to increase the space usage.\n const space = innerHeight - row * size;\n const intervalY = row <= 1 ? 0 : space / (row - 1);\n const [offsetX, offsetY] = row <= 1\n ? [\n (innerWidth - pcount * size) / (pcount - 1),\n (innerHeight - size) / 2,\n ]\n : [0, 0];\n return P.map((points, m) => {\n const [x, y, width, height] = calcBBox(points);\n const i = direction === 'col' ? m % col : Math.floor(m / row);\n const j = direction === 'col' ? Math.floor(m / col) : m % row;\n const newX = i * size;\n const newY = (row - j - 1) * size + space;\n const sx = (size - padding) / width;\n const sy = (size - padding) / height;\n // Translate the shape and mark to make sure the center of\n // shape is overlap before and after scale transformation.\n const tx = newX - x + offsetX * i + (1 / 2) * padding;\n const ty = newY - y - intervalY * j - offsetY + (1 / 2) * padding;\n return `translate(${tx}, ${ty}) scale(${sx}, ${sy})`;\n });\n };\n}\n/**\n * Uniform pack to avid overlap.\n * @todo Improve or change algorithm to increase space usage.\n * @todo Take some special case into account.\n */\nexport const Pack = (options) => {\n return (I, mark) => {\n return [I, deepMix({}, mark, { modifier: pack(options), axis: false })];\n };\n};\nPack.props = {};\n//# sourceMappingURL=pack.js.map","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export default function count(values, valueof) {\n let count = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count;\n }\n }\n }\n return count;\n}\n","import count from \"../count.js\";\n\nexport default function thresholdSturges(values) {\n return Math.max(1, Math.ceil(Math.log(count(values)) / Math.LN2) + 1);\n}\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { bin as d3Bin, group, thresholdScott, extent, } from '@antv/vendor/d3-array';\nimport { defined, subObject } from '../utils/helper';\nimport { GroupN } from './groupN';\nimport { columnOf } from './utils/helper';\nconst THRESHOLD = 'thresholds';\n/**\n * @see https://github.com/observablehq/plot/blob/main/src/transforms/bin.js\n */\nfunction thresholdAuto(values) {\n const [min, max] = extent(values);\n return Math.min(200, thresholdScott(values, min, max));\n}\n/**\n * The Bin aggregate data.\n * @todo More threshold method.\n * @todo Performance.\n */\nexport const Bin = (options = {}) => {\n const { groupChannels = ['color'], binChannels = ['x', 'y'] } = options, rest = __rest(options, [\"groupChannels\", \"binChannels\"]);\n const channelIndexKey = {};\n // Group indexes and update channelIndexKey.\n const groupBy = (I, mark) => {\n const { encode } = mark;\n const binValues = binChannels.map((channel) => {\n const [V] = columnOf(encode, channel);\n return V;\n });\n const thresholds = subObject(rest, THRESHOLD);\n const DI = I.filter((i) => binValues.every((V) => defined(V[i])));\n // Group indexes by both discrete and quantitative channels.\n const groupKeys = [\n // For discrete channels, use value as group key.\n ...groupChannels\n .map((d) => {\n const [V] = columnOf(encode, d);\n return V;\n })\n .filter(defined)\n .map((V) => (i) => V[i]),\n // For quantitative channels, use extent of bin as group key.\n ...binChannels.map((d, i) => {\n const V = binValues[i];\n const t = thresholds[d] || thresholdAuto(V);\n const bins = d3Bin()\n .thresholds(t)\n .value((i) => +V[i])(DI);\n const indexKey = new Map(bins.flatMap((bin) => {\n const { x0, x1 } = bin;\n const key = `${x0},${x1}`;\n return bin.map((i) => [i, key]);\n }));\n channelIndexKey[d] = indexKey;\n return (i) => indexKey.get(i);\n }),\n ];\n // Group by indexes by channel keys.\n const key = (i) => groupKeys.map((key) => key(i)).join('-');\n return Array.from(group(DI, key).values());\n };\n return GroupN(Object.assign(Object.assign(Object.assign({}, Object.fromEntries(Object.entries(rest).filter(([k]) => !k.startsWith(THRESHOLD)))), Object.fromEntries(binChannels.flatMap((channel) => {\n const start = ([i]) => +channelIndexKey[channel].get(i).split(',')[0];\n const end = ([i]) => +channelIndexKey[channel].get(i).split(',')[1];\n end.from = channel;\n return [\n [channel, start],\n [`${channel}1`, end],\n ];\n }))), { groupBy }));\n};\nBin.props = {};\n//# sourceMappingURL=bin.js.map","import count from \"../count.js\";\nimport deviation from \"../deviation.js\";\n\nexport default function thresholdScott(values, min, max) {\n const c = count(values), d = deviation(values);\n return c && d ? Math.ceil((max - min) * Math.cbrt(c) / (3.49 * d)) : 1;\n}\n","import {slice} from \"./array.js\";\nimport bisect from \"./bisect.js\";\nimport constant from \"./constant.js\";\nimport extent from \"./extent.js\";\nimport identity from \"./identity.js\";\nimport nice from \"./nice.js\";\nimport ticks, {tickIncrement} from \"./ticks.js\";\nimport sturges from \"./threshold/sturges.js\";\n\nexport default function bin() {\n var value = identity,\n domain = extent,\n threshold = sturges;\n\n function histogram(data) {\n if (!Array.isArray(data)) data = Array.from(data);\n\n var i,\n n = data.length,\n x,\n step,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1);\n\n // Convert number of thresholds into uniform thresholds, and nice the\n // default domain accordingly.\n if (!Array.isArray(tz)) {\n const max = x1, tn = +tz;\n if (domain === extent) [x0, x1] = nice(x0, x1, tn);\n tz = ticks(x0, x1, tn);\n\n // If the domain is aligned with the first tick (which it will by\n // default), then we can use quantization rather than bisection to bin\n // values, which is substantially faster.\n if (tz[0] <= x0) step = tickIncrement(x0, x1, tn);\n\n // If the last threshold is coincident with the domain’s upper bound, the\n // last bin will be zero-width. If the default domain is used, and this\n // last threshold is coincident with the maximum input value, we can\n // extend the niced upper bound by one tick to ensure uniform bin widths;\n // otherwise, we simply remove the last threshold. Note that we don’t\n // coerce values or the domain to numbers, and thus must be careful to\n // compare order (>=) rather than strict equality (===)!\n if (tz[tz.length - 1] >= x1) {\n if (max >= x1 && domain === extent) {\n const step = tickIncrement(x0, x1, tn);\n if (isFinite(step)) {\n if (step > 0) {\n x1 = (Math.floor(x1 / step) + 1) * step;\n } else if (step < 0) {\n x1 = (Math.ceil(x1 * -step) + 1) / -step;\n }\n }\n } else {\n tz.pop();\n }\n }\n }\n\n // Remove any thresholds outside the domain.\n // Be careful not to mutate an array owned by the user!\n var m = tz.length, a = 0, b = m;\n while (tz[a] <= x0) ++a;\n while (tz[b - 1] > x1) --b;\n if (a || b < m) tz = tz.slice(a, b), m = b - a;\n\n var bins = new Array(m + 1),\n bin;\n\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n\n // Assign data to bins by value, ignoring any outside the domain.\n if (isFinite(step)) {\n if (step > 0) {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]);\n }\n }\n } else if (step < 0) {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n const j = Math.floor((x0 - x) * step);\n bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding\n }\n }\n }\n } else {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n bins[bisect(tz, x, 0, m)].push(data[i]);\n }\n }\n }\n\n return bins;\n }\n\n histogram.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n };\n\n histogram.domain = function(_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : constant(Array.isArray(_) ? slice.call(_) : _), histogram) : threshold;\n };\n\n return histogram;\n}\n","import {tickIncrement} from \"./ticks.js\";\n\nexport default function nice(start, stop, count) {\n let prestep;\n while (true) {\n const step = tickIncrement(start, stop, count);\n if (step === prestep || step === 0 || !isFinite(step)) {\n return [start, stop];\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n }\n prestep = step;\n }\n}\n","export default function constant(x) {\n return () => x;\n}\n","import { Bin } from './bin';\nexport const BinX = (options = {}) => {\n const { thresholds } = options;\n return Bin(Object.assign(Object.assign({}, options), { thresholdsX: thresholds, groupChannels: ['color'], binChannels: ['x'] }));\n};\nBinX.props = {};\n//# sourceMappingURL=binX.js.map","/**\n * Sample data with lttb(Largest-Triangle-Three-Buckets) algo (https://github.com/pingec/downsample-lttb).\n * Return the sampled index array.\n */\nexport function lttb(I, X, Y, thresholds) {\n const length = I.length;\n if (thresholds >= length || thresholds === 0) {\n return I;\n }\n const x = (i) => X[I[i]] * 1;\n const y = (i) => Y[I[i]] * 1;\n const sampled = [];\n // Bucket size. Leave room for start and end data points.\n const every = (length - 2) / (thresholds - 2);\n let a = 0; // Initially a is the first point in the triangle.\n let maxArea;\n let area;\n let nextA;\n sampled.push(a); // Always add the first point.\n for (let i = 0; i < thresholds - 2; i++) {\n // Calculate point average for next bucket (containing c).\n let avgX = 0;\n let avgY = 0;\n let start = Math.floor((i + 1) * every) + 1;\n let end = Math.floor((i + 2) * every) + 1;\n end = Math.min(end, length);\n const size = end - start;\n for (; start < end; start++) {\n avgX += x(start);\n avgY += y(start);\n }\n avgX /= size;\n avgY /= size;\n // Get the range for this bucket.\n let frameStart = Math.floor((i + 0) * every) + 1;\n const frameEnd = Math.floor((i + 1) * every) + 1;\n // Point a.\n const pointA = [x(a), y(a)];\n maxArea = area = -1;\n for (; frameStart < frameEnd; frameStart++) {\n // Calculate triangle area over three buckets.\n area =\n Math.abs((pointA[0] - avgX) * (x(frameStart) - pointA[1]) -\n (pointA[0] - y(frameStart)) * (avgY - pointA[0])) * 0.5;\n if (area > maxArea) {\n maxArea = area;\n nextA = frameStart; // Next a is this b.\n }\n }\n sampled.push(nextA); // Pick this point from the bucket.\n a = nextA; // This a is the next a (chosen b).\n }\n sampled.push(length - 1); // Always add last.\n return sampled.map((a) => I[a]);\n}\n//# sourceMappingURL=lttb.js.map","// @ts-ignore medianIndex exist in d3-array@3.2.0, but @types/d3-array Expired.\nimport { maxIndex, minIndex, medianIndex } from '@antv/vendor/d3-array';\nimport { createGroups } from './utils/order';\nimport { columnOf } from './utils/helper';\nimport { lttb } from './utils/lttb';\nfunction normalizeSample(strategy) {\n if (typeof strategy === 'function')\n return strategy;\n if (strategy === 'lttb')\n return lttb;\n const strategies = {\n first: (f) => [f[0]],\n last: (f) => [f[f.length - 1]],\n min: (f, X, Y) => [\n f[minIndex(f, (i) => Y[i])],\n ],\n max: (f, X, Y) => [\n f[maxIndex(f, (i) => Y[i])],\n ],\n median: (f, X, Y) => [\n f[medianIndex(f, (i) => Y[i])],\n ],\n };\n const sampleFunction = strategies[strategy] || strategies.median;\n return (I, X, Y, thresholds) => {\n // Sepreate group to frames, then sample each frame.\n // Keep more data as possible.\n const frameSize = Math.max(1, Math.floor(I.length / thresholds));\n const frames = getFrames(I, frameSize);\n return frames.flatMap((frame) => sampleFunction(frame, X, Y));\n };\n}\n/**\n * Split the array into frame with each frameSize.\n */\nfunction getFrames(I, frameSize) {\n const size = I.length;\n const frames = [];\n let i = 0;\n while (i < size) {\n frames.push(I.slice(i, (i += frameSize)));\n }\n return frames;\n}\n/**\n * The sample transform groups marks with specified groupBy fields, and\n * sample data for each group when data.length >= threshold(default = 2000).\n */\nexport const Sample = (options = {}) => {\n const { strategy = 'median', thresholds = 2000, groupBy = ['series', 'color'], } = options;\n const sampleFunction = normalizeSample(strategy);\n return (I, mark) => {\n const { encode } = mark;\n const groups = createGroups(groupBy, I, mark);\n const [X] = columnOf(encode, 'x');\n const [Y] = columnOf(encode, 'y');\n return [\n groups.flatMap((g) => sampleFunction(g, X, Y, thresholds)),\n mark,\n ];\n };\n};\nSample.props = {};\n//# sourceMappingURL=sample.js.map","import { deepMix } from '@antv/util';\nimport { defined } from '../utils/helper';\nimport { columnOf } from './utils/helper';\nfunction normalizeValue(value) {\n if (typeof value === 'object')\n return [value.value, value.ordinal];\n else\n return [value, true];\n}\nfunction filterWhenNoElements(mark) {\n var _a;\n const { encode } = mark;\n // keep y-axis\n const noElementMark = Object.assign(Object.assign({}, mark), { encode: Object.assign(Object.assign({}, mark.encode), { y: Object.assign(Object.assign({}, mark.encode.y), { value: [] }) }) });\n const targetField = (_a = encode === null || encode === void 0 ? void 0 : encode.color) === null || _a === void 0 ? void 0 : _a.field;\n if (!encode || !targetField) {\n return noElementMark;\n }\n // 获取color的筛选源\n let filterObject;\n for (const [key, v] of Object.entries(encode)) {\n if ((key === 'x' || key === 'y') && v.field === targetField) {\n filterObject = Object.assign(Object.assign({}, filterObject), { [key]: Object.assign(Object.assign({}, v), { value: [] }) });\n }\n }\n if (!filterObject) {\n return noElementMark;\n }\n return Object.assign(Object.assign({}, mark), { encode: Object.assign(Object.assign({}, mark.encode), filterObject) });\n}\n/**\n * The Filter transform filter channels.\n */\nexport const Filter = (options = {}) => {\n return (I, mark) => {\n const { encode, data } = mark;\n const filters = Object.entries(options)\n .map(([key, v]) => {\n const [V] = columnOf(encode, key);\n // Skip empty channel.\n if (!V)\n return null;\n const [value, ordinal = true] = normalizeValue(v);\n if (typeof value === 'function')\n return (i) => value(V[i]);\n if (ordinal) {\n const expectedValues = Array.isArray(value) ? value : [value];\n // Skip empty expected values.\n if (expectedValues.length === 0)\n return null;\n return (i) => expectedValues.includes(V[i]);\n }\n else {\n const [start, end] = value;\n return (i) => V[i] >= start && V[i] <= end;\n }\n })\n .filter(defined);\n // Filter index and channels.\n const totalFilter = (i) => filters.every((f) => f(i));\n const FI = I.filter(totalFilter);\n const newIndex = FI.map((_, i) => i);\n if (filters.length === 0) {\n const targetMark = filterWhenNoElements(mark);\n return [I, targetMark];\n }\n const newEncodes = Object.entries(encode).map(([key, encode]) => {\n return [\n key,\n Object.assign(Object.assign({}, encode), { value: newIndex\n .map((i) => encode.value[FI[i]])\n .filter((v) => v !== undefined) }),\n ];\n });\n return [\n newIndex,\n deepMix({}, mark, {\n encode: Object.fromEntries(newEncodes),\n // Filter data for tooltip item.\n data: FI.map((i) => data[i]),\n }),\n ];\n };\n};\nFilter.props = {};\n//# sourceMappingURL=filter.js.map","export default function autoType(object) {\n for (var key in object) {\n var value = object[key].trim(), number, m;\n if (!value) value = null;\n else if (value === \"true\") value = true;\n else if (value === \"false\") value = false;\n else if (value === \"NaN\") value = NaN;\n else if (!isNaN(number = +value)) value = number;\n else if (m = value.match(/^([-+]\\d{2})?\\d{4}(-\\d{2}(-\\d{2})?)?(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[-+]\\d{2}:\\d{2})?)?$/)) {\n if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, \"/\").replace(/T/, \" \");\n value = new Date(value);\n }\n else continue;\n object[key] = value;\n }\n return object;\n}\n\n// https://github.com/d3/d3-dsv/issues/45\nconst fixtz = new Date(\"2019-01-01T00:00\").getHours() || new Date(\"2019-07-01T00:00\").getHours();","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { autoType as d3AutoType, dsvFormat } from '@antv/vendor/d3-dsv';\nimport { identity } from '../utils/helper';\nexport const Fetch = (options) => {\n const { value, format = value.split('.').pop(), delimiter = ',', autoType = true, } = options;\n return () => __awaiter(void 0, void 0, void 0, function* () {\n const response = yield fetch(value);\n if (format === 'csv') {\n // @see: https://github.com/d3/d3-dsv#dsv_parse\n const str = yield response.text();\n return dsvFormat(delimiter).parse(str, autoType ? d3AutoType : identity);\n }\n if (format === 'json') {\n return yield response.json();\n }\n throw new Error(`Unknown format: ${format}.`);\n });\n};\nFetch.props = {};\n//# sourceMappingURL=fetch.js.map","import { normalizeFields } from './utils/fields';\n/**\n * Immutable data sort by specified fields.\n */\nexport const SortBy = (options) => {\n const { fields: F = [] } = options;\n const normalizedF = normalizeFields(F, true);\n return (data) => {\n const comparator = (a, b) => normalizedF.reduce((ret, [field, order = true]) => {\n if (ret !== 0) {\n return ret;\n }\n if (order) {\n return a[field] < b[field] ? -1 : +(a[field] !== b[field]);\n }\n else {\n return a[field] > b[field] ? -1 : +(a[field] !== b[field]);\n }\n }, 0);\n return [...data].sort(comparator);\n };\n};\nSortBy.props = {};\n//# sourceMappingURL=sortBy.js.map","/**\n *\n * @description Converts a random format array into a regular two-dimensional array\n * @example ['a', 'b', ['c', value]] => [['a', defaultValue], ['b', defaultValue], ['c', value]]\n */\nexport function normalizeFields(fields, defaultValue) {\n return fields.map((d) => {\n if (Array.isArray(d)) {\n const [field, value = defaultValue] = d;\n return [field, value];\n }\n return [d, defaultValue];\n });\n}\n//# sourceMappingURL=fields.js.map","export function defined(d) {\n return d !== undefined && d !== null && !Number.isNaN(d);\n}\n/**\n * Filter data by specified fields and filter callback for each fields.\n * It saves datum with every fields defined by default.\n */\nexport const Filter = (options) => {\n const { callback = defined } = options;\n return (data) => data.filter(callback);\n};\nFilter.props = {};\n//# sourceMappingURL=filter.js.map","import { identity } from '../utils/helper';\n/**\n * Map transform by function.\n */\nexport const Map = (options) => {\n const { callback = identity } = options;\n return (data) => (Array.isArray(data) ? data.map(callback) : data);\n};\nMap.props = {};\n//# sourceMappingURL=map.js.map","function pick(v, fields = []) {\n return fields.reduce((datum, field) => {\n // Pick the data deeply.\n if (field in v) {\n datum[field] = v[field];\n }\n return datum;\n }, {});\n}\n/**\n * Immutable data pick by specified fields.\n */\nexport const Pick = (options) => {\n const { fields } = options;\n return (data) => data.map((d) => pick(d, fields));\n};\nPick.props = {};\n//# sourceMappingURL=pick.js.map","export function isEmpty(obj) {\n return Object.keys(obj).length === 0;\n}\n/**\n * Immutable data rename by specified fields.\n */\nexport const Rename = (options) => {\n return (data) => {\n if (!options || isEmpty(options))\n return data;\n const rename = (v) => Object.entries(v).reduce((datum, [key, value]) => ((datum[options[key] || key] = value), datum), {});\n return data.map(rename);\n };\n};\nRename.props = {};\n//# sourceMappingURL=rename.js.map","export function isEmpty(obj) {\n return !obj || Object.keys(obj).length === 0;\n}\n/**\n * Collapses (or “folds”) one or more data fields into two\n * properties: `key` (contains the original data field name)\n * and `value` (contains the original data value.)\n */\nexport const Fold = (options) => {\n const { fields, key = 'key', value = 'value' } = options;\n return (data) => {\n if (isEmpty(fields))\n return data;\n return data.flatMap((d) => fields.map((f) => (Object.assign(Object.assign({}, d), { [key]: f, [value]: d[f] }))));\n };\n};\nFold.props = {};\n//# sourceMappingURL=fold.js.map","/**\n * Slice data between `start` ~ `end`.\n * Same with https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice\n */\nexport const Slice = (options) => {\n const { start, end } = options;\n return (data) => data.slice(start, end);\n};\nSlice.props = {};\n//# sourceMappingURL=slice.js.map","export const Inline = (options) => {\n const { value } = options;\n return () => value;\n};\nInline.props = {};\n//# sourceMappingURL=inline.js.map","import { identity } from '../utils/helper';\n/**\n * Connector transfom by function.\n */\nexport const Custom = (options) => {\n const { callback = identity } = options;\n return (data) => callback(data);\n};\nCustom.props = {};\n//# sourceMappingURL=custom.js.map","import { rollup } from '@antv/vendor/d3-array';\nfunction field(key) {\n return typeof key === 'string' ? (d) => d[key] : key;\n}\n/**\n * Join data with another dataset by SQL style.\n */\nexport const Join = (options) => {\n // const { fromKey, from, key, unknown = NaN, ...rest } = options;\n const { join, on, select = [], as = select, unknown = NaN } = options;\n const [key, fromKey] = on;\n const fk = field(fromKey);\n const k = field(key);\n const keyData = rollup(join, ([d]) => d, // Get the first matched.\n (d) => fk(d));\n return (data) => data.map((d) => {\n const source = keyData.get(k(d));\n return Object.assign(Object.assign({}, d), select.reduce((prev, key, idx) => ((prev[as[idx]] = source ? source[key] : unknown), prev), {}));\n });\n};\nJoin.props = {};\n//# sourceMappingURL=join.js.map","export function defined(d) {\n return d !== undefined && d !== null && !Number.isNaN(d);\n}\n/**\n * Sort data similar with Array.prototypo.sort.\n */\nexport const Sort = (options) => {\n const { callback } = options;\n return (data) => (Array.isArray(data) ? [...data].sort(callback) : data);\n};\nSort.props = {};\n//# sourceMappingURL=sort.js.map","import pdf from 'pdfast';\nimport { group } from '@antv/vendor/d3-array';\nexport function defined(d) {\n return d !== undefined && d !== null && !Number.isNaN(d);\n}\n/**\n * Kernel Density Estimation base on [pdfast](https://www.npmjs.com/package/pdfast),\n * generating probability density function (pdf) using triangular kernel,\n * optimized to run in O(N + K).\n */\nexport const KDE = (options) => {\n const { field, groupBy, as = ['y', 'size'], min, max, size = 10, width, } = options;\n const [yField, sizeField] = as;\n return (data) => {\n const gs = Array.from(group(data, (d) => groupBy.map((gb) => d[gb]).join('-')).values());\n return gs.map((g) => {\n const pdfResult = pdf.create(g.map((i) => i[field]), {\n min,\n max,\n size,\n width,\n });\n const _y = pdfResult.map((result) => result.x);\n const _size = pdfResult.map((result) => result.y);\n return Object.assign(Object.assign({}, g[0]), { [yField]: _y, [sizeField]: _size });\n });\n };\n};\nKDE.props = {};\n//# sourceMappingURL=kde.js.map","/**\n * Console.log the data section for dev debugger.\n */\nexport const Log = () => {\n return (data) => {\n console.log('G2 data section:', data);\n return data;\n };\n};\nLog.props = {};\n//# sourceMappingURL=log.js.map","export function ema(values, alpha) {\n if (alpha < 0 || alpha > 1) {\n throw new Error('alpha must be between 0 and 1.');\n }\n if (values.length === 0) {\n return [];\n }\n let last = values[0];\n const smoothed = [];\n for (const point of values) {\n if (point === null || point === undefined) {\n // 如果没有数据的话,使用最近的值\n smoothed.push(point);\n console.warn('EMA:The value is null or undefined', values);\n continue;\n }\n if (last === null || last === undefined) {\n last = point;\n }\n const smoothedVal = last * alpha + (1 - alpha) * point;\n smoothed.push(smoothedVal);\n last = smoothedVal;\n }\n return smoothed;\n}\n/**\n * https://en.wikipedia.org/wiki/Exponential_smoothing\n * @param options\n * @returns\n */\nexport const EMA = (options) => {\n const { field = 'y', alpha = 0.6, as = field } = options;\n return (data) => {\n const values = data.map((d) => {\n return d[field];\n });\n const out = ema(values, alpha);\n return data.map((d, i) => {\n return Object.assign(Object.assign({}, d), { [as]: out[i] });\n });\n };\n};\nEMA.props = {};\n//# sourceMappingURL=ema.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n/**\n * @todo Combine with the `Container` util\n */\nexport function flow(target, source) {\n return {\n set(key, normalize, callback) {\n if (source[key] === undefined)\n return this;\n const value = normalize ? normalize.call(null, source[key]) : source[key];\n if (callback)\n callback.call(null, value);\n else if (typeof target[key] === 'function')\n target[key](value);\n else\n target[key] = value;\n return this;\n },\n setAsync(key, normalize, callback) {\n return __awaiter(this, void 0, void 0, function* () {\n if (source[key] === undefined)\n return this;\n const value = normalize\n ? yield normalize.call(null, source[key])\n : source[key];\n if (callback)\n callback.call(null, value);\n else if (typeof target[key] === 'function')\n target[key](value);\n else\n target[key] = value;\n return this;\n });\n },\n };\n}\n//# sourceMappingURL=flow.js.map","const cloudRadians = Math.PI / 180, cw = (1 << 11) >> 5, ch = 1 << 11;\nfunction cloudText(d) {\n return d.text;\n}\nfunction cloudFont() {\n return 'serif';\n}\nfunction cloudFontNormal() {\n return 'normal';\n}\nfunction cloudFontSize(d) {\n return d.value;\n}\nfunction cloudRotate() {\n return ~~(Math.random() * 2) * 90;\n}\nfunction cloudPadding() {\n return 1;\n}\nfunction cloudDispatch() {\n return;\n}\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite)\n return;\n const c = contextAndRatio.context, ratio = contextAndRatio.ratio;\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n let x = 0, y = 0, maxh = 0;\n const n = data.length;\n --di;\n while (++di < n) {\n d = data[di];\n c.save();\n c.font =\n d.style +\n ' ' +\n d.weight +\n ' ' +\n ~~((d.size + 1) / ratio) +\n 'px ' +\n d.font;\n let w = c.measureText(d.text + 'm').width * ratio, h = d.size << 1;\n if (d.rotate) {\n const sr = Math.sin(d.rotate * cloudRadians), cr = Math.cos(d.rotate * cloudRadians), wcr = w * cr, wsr = w * sr, hcr = h * cr, hsr = h * sr;\n w =\n ((Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5) << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n }\n else {\n w = ((w + 0x1f) >> 5) << 5;\n }\n if (h > maxh)\n maxh = h;\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n if (y + h >= ch)\n break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate)\n c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n const pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data, sprite = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText)\n continue;\n const w = d.width, w32 = w >> 5;\n let h = d.y1 - d.y0;\n // Zero the buffer\n for (let i = 0; i < h * w32; i++)\n sprite[i] = 0;\n x = d.xoff;\n if (x == null)\n return;\n y = d.yoff;\n let seen = 0, seenRow = -1;\n for (let j = 0; j < h; j++) {\n for (let i = 0; i < w; i++) {\n const k = w32 * j + (i >> 5), m = pixels[((y + j) * (cw << 5) + (x + i)) << 2]\n ? 1 << (31 - (i % 32))\n : 0;\n sprite[k] |= m;\n seen |= m;\n }\n if (seen)\n seenRow = j;\n else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n}\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n const sprite = tag.sprite, w = tag.width >> 5, lx = tag.x - (w << 4), sx = lx & 0x7f, msx = 32 - sx, h = tag.y1 - tag.y0;\n let x = (tag.y + tag.y0) * sw + (lx >> 5), last;\n for (let j = 0; j < h; j++) {\n last = 0;\n for (let i = 0; i <= w; i++) {\n if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) &\n board[x + i])\n return true;\n }\n x += sw;\n }\n return false;\n}\nfunction cloudBounds(bounds, d) {\n const b0 = bounds[0], b1 = bounds[1];\n if (d.x + d.x0 < b0.x)\n b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y)\n b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x)\n b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y)\n b1.y = d.y + d.y1;\n}\nfunction collideRects(a, b) {\n return (a.x + a.x1 > b[0].x &&\n a.x + a.x0 < b[1].x &&\n a.y + a.y1 > b[0].y &&\n a.y + a.y0 < b[1].y);\n}\nfunction archimedeanSpiral(size) {\n const e = size[0] / size[1];\n return function (t) {\n return [e * (t *= 0.1) * Math.cos(t), t * Math.sin(t)];\n };\n}\nfunction rectangularSpiral(size) {\n const dy = 4, dx = (dy * size[0]) / size[1];\n let x = 0, y = 0;\n return function (t) {\n const sign = t < 0 ? -1 : 1;\n // See triangular numbers: T_n = n * (n + 1) / 2.\n switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\n case 0:\n x += dx;\n break;\n case 1:\n y += dy;\n break;\n case 2:\n x -= dx;\n break;\n default:\n y -= dy;\n break;\n }\n return [x, y];\n };\n}\n// TODO reuse arrays?\nfunction zeroArray(n) {\n const a = [];\n let i = -1;\n while (++i < n)\n a[i] = 0;\n return a;\n}\nfunction cloudCanvas() {\n return document.createElement('canvas');\n}\nfunction functor(d) {\n return typeof d === 'function'\n ? d\n : function () {\n return d;\n };\n}\nconst spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral,\n};\nexport function tagCloud() {\n let size = [256, 256], text = cloudText, font = cloudFont, fontSize = cloudFontSize, fontWeight = cloudFontNormal, rotate = cloudRotate, padding = cloudPadding, spiral = archimedeanSpiral, random = Math.random, event = cloudDispatch, words = [], timer = null, timeInterval = Infinity, canvas = cloudCanvas;\n const fontStyle = cloudFontNormal;\n const cloud = {};\n cloud.start = function () {\n const [width, height] = size;\n const contextAndRatio = getContext(canvas()), board = cloud.board ? cloud.board : zeroArray((size[0] >> 5) * size[1]), n = words.length, tags = [], data = words\n .map(function (d, i, data) {\n d.text = text.call(this, d, i, data);\n d.font = font.call(this, d, i, data);\n d.style = fontStyle.call(this, d, i, data);\n d.weight = fontWeight.call(this, d, i, data);\n d.rotate = rotate.call(this, d, i, data);\n d.size = ~~fontSize.call(this, d, i, data);\n d.padding = padding.call(this, d, i, data);\n return d;\n })\n .sort(function (a, b) {\n return b.size - a.size;\n });\n let i = -1, bounds = !cloud.board\n ? undefined\n : [\n {\n x: 0,\n y: 0,\n },\n {\n x: width,\n y: height,\n },\n ];\n if (timer)\n clearInterval(timer);\n timer = setInterval(step, 0);\n step();\n function step() {\n const start = Date.now();\n while (Date.now() - start < timeInterval && ++i < n) {\n const d = data[i];\n d.x = (width * (random() + 0.5)) >> 1;\n d.y = (height * (random() + 0.5)) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n if (d.hasText && place(board, d, bounds)) {\n event.call(null, 'word', { cloud, word: d });\n tags.push(d);\n if (bounds) {\n if (!cloud.hasImage) {\n // update bounds if image mask not set\n cloudBounds(bounds, d);\n }\n }\n else {\n bounds = [\n { x: d.x + d.x0, y: d.y + d.y0 },\n { x: d.x + d.x1, y: d.y + d.y1 },\n ];\n }\n // Temporary hack\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n cloud._tags = tags;\n cloud._bounds = bounds;\n if (i >= n) {\n cloud.stop();\n event.call(null, 'end', { cloud, words: tags, bounds });\n }\n }\n return cloud;\n };\n cloud.stop = function () {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n return cloud;\n };\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n const ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n const context = canvas.getContext('2d');\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n context.textBaseline = 'middle';\n return { context, ratio };\n }\n function place(board, tag, bounds) {\n // const perimeter = [{ x: 0, y: 0 }, { x: size[0], y: size[1] }],\n const startX = tag.x, startY = tag.y, maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]), s = spiral(size), dt = random() < 0.5 ? 1 : -1;\n let dxdy, t = -dt, dx, dy;\n while ((dxdy = s((t += dt)))) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta)\n break;\n tag.x = startX + dx;\n tag.y = startY + dy;\n if (tag.x + tag.x0 < 0 ||\n tag.y + tag.y0 < 0 ||\n tag.x + tag.x1 > size[0] ||\n tag.y + tag.y1 > size[1])\n continue;\n // TODO only check for collisions within current bounds.\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n const sprite = tag.sprite, w = tag.width >> 5, sw = size[0] >> 5, lx = tag.x - (w << 4), sx = lx & 0x7f, msx = 32 - sx, h = tag.y1 - tag.y0;\n let last, x = (tag.y + tag.y0) * sw + (lx >> 5);\n for (let j = 0; j < h; j++) {\n last = 0;\n for (let i = 0; i <= w; i++) {\n board[x + i] |=\n (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n x += sw;\n }\n delete tag.sprite;\n return true;\n }\n }\n }\n return false;\n }\n cloud.createMask = (img) => {\n const can = document.createElement('canvas');\n const [width, height] = size;\n // 当 width 或 height 为 0 时,调用 cxt.getImageData 会报错\n if (!width || !height) {\n return;\n }\n const w32 = width >> 5;\n const board = zeroArray((width >> 5) * height);\n can.width = width;\n can.height = height;\n const cxt = can.getContext('2d');\n cxt.drawImage(img, 0, 0, img.width, img.height, 0, 0, width, height);\n const imageData = cxt.getImageData(0, 0, width, height).data;\n for (let j = 0; j < height; j++) {\n for (let i = 0; i < width; i++) {\n const k = w32 * j + (i >> 5);\n const tmp = (j * width + i) << 2;\n const flag = imageData[tmp] >= 250 &&\n imageData[tmp + 1] >= 250 &&\n imageData[tmp + 2] >= 250;\n const m = flag ? 1 << (31 - (i % 32)) : 0;\n board[k] |= m;\n }\n }\n cloud.board = board;\n cloud.hasImage = true;\n };\n cloud.timeInterval = function (_) {\n timeInterval = _ == null ? Infinity : _;\n };\n cloud.words = function (_) {\n words = _;\n };\n cloud.size = function (_ = []) {\n size = [+_[0], +_[1]];\n };\n cloud.text = function (_) {\n text = functor(_);\n };\n cloud.font = function (_) {\n font = functor(_);\n };\n cloud.fontWeight = function (_) {\n fontWeight = functor(_);\n };\n cloud.rotate = function (_) {\n rotate = functor(_);\n };\n cloud.canvas = function (_) {\n canvas = functor(_);\n };\n cloud.spiral = function (_) {\n spiral = spirals[_] || _;\n };\n cloud.fontSize = function (_) {\n fontSize = functor(_);\n };\n cloud.padding = function (_) {\n padding = functor(_);\n };\n cloud.random = function (_) {\n random = functor(_);\n };\n cloud.on = function (_) {\n event = functor(_);\n };\n return cloud;\n}\n//# sourceMappingURL=index.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { min, max } from '@antv/vendor/d3-array';\nimport { flow } from './utils/flow';\nimport { tagCloud } from './utils/d3-cloud';\nconst DEFAULT_OPTIONS = {\n fontSize: [20, 60],\n font: 'Impact',\n padding: 2,\n rotate: function () {\n return (~~(Math.random() * 6) - 3) * 30;\n },\n};\n/**\n * Process the image mask of wordCloud.\n * @param img\n * @returns\n */\nexport function processImageMask(img) {\n return new Promise((res, rej) => {\n if (img instanceof HTMLImageElement) {\n res(img);\n return;\n }\n if (typeof img === 'string') {\n const image = new Image();\n image.crossOrigin = 'anonymous';\n image.src = img;\n image.onload = () => res(image);\n image.onerror = () => {\n console.error(`'image ${img} load failed !!!'`);\n rej();\n };\n return;\n }\n rej();\n });\n}\n/**\n * normalize fontSize range to d3-cloud fontSize function.\n * @param fontSize\n * @param range\n * @returns\n */\nexport function normalizeFontSize(fontSize, range) {\n if (typeof fontSize === 'function')\n return fontSize;\n if (Array.isArray(fontSize)) {\n const [fMin, fMax] = fontSize;\n if (!range)\n return () => (fMax + fMin) / 2;\n const [min, max] = range;\n if (max === min)\n return () => (fMax + fMin) / 2;\n return ({ value }) => ((fMax - fMin) / (max - min)) * (value - min) + fMin;\n }\n return () => fontSize;\n}\nexport const WordCloud = (options, context) => {\n return (data) => __awaiter(void 0, void 0, void 0, function* () {\n const cloudOptions = Object.assign({}, DEFAULT_OPTIONS, options, {\n canvas: context.createCanvas,\n });\n const layout = tagCloud();\n yield flow(layout, cloudOptions)\n .set('fontSize', (v) => {\n const arr = data.map((d) => d.value);\n return normalizeFontSize(v, [min(arr), max(arr)]);\n })\n .set('font')\n .set('fontStyle')\n .set('fontWeight')\n .set('padding')\n .set('rotate')\n .set('size')\n .set('spiral')\n .set('timeInterval')\n .set('random')\n .set('text')\n .set('on')\n .set('canvas')\n .setAsync('imageMask', processImageMask, layout.createMask);\n layout.words([...data]);\n const result = layout.start();\n const [cw, ch] = cloudOptions.size;\n const defaultBounds = [\n { x: 0, y: 0 },\n { x: cw, y: ch },\n ];\n const { _bounds: bounds = defaultBounds, _tags, hasImage } = result;\n const tags = _tags.map((_a) => {\n var { x, y, font } = _a, rest = __rest(_a, [\"x\", \"y\", \"font\"]);\n return (Object.assign(Object.assign({}, rest), { x: x + cw / 2, y: y + ch / 2, fontFamily: font }));\n });\n // Append two data to replace the corner of top-left and bottom-right, avoid calculate the actual bounds will occur some error.\n const [{ x: tlx, y: tly }, { x: brx, y: bry }] = bounds;\n const invisibleText = { text: '', value: 0, opacity: 0, fontSize: 0 };\n tags.push(Object.assign(Object.assign({}, invisibleText), { x: hasImage ? 0 : tlx, y: hasImage ? 0 : tly }), Object.assign(Object.assign({}, invisibleText), { x: hasImage ? cw : brx, y: hasImage ? ch : bry }));\n return tags;\n });\n};\nWordCloud.props = {};\n//# sourceMappingURL=wordCloud.js.map","import { ascending } from '@antv/vendor/d3-array';\nfunction isSegmentIntersect([a, b], [c, d]) {\n return d > a && b > c;\n}\nfunction useMap() {\n const map = new Map();\n const get = (key) => map.get(key);\n const set = (key, value) => map.set(key, value);\n return [get, set];\n}\nfunction getBoundsWithoutConnector(shape) {\n const node = shape.cloneNode(true);\n const connectorShape = node.getElementById('connector');\n connectorShape && node.removeChild(connectorShape);\n const { min, max } = node.getRenderBounds();\n node.destroy();\n return { min, max };\n}\n/**\n * An iterative dodge method avoids label overlap. (n * log(n))\n */\nexport const OverlapDodgeY = (options) => {\n const { maxIterations = 10, maxError = 0.1, padding = 1 } = options;\n return (labels) => {\n const n = labels.length;\n if (n <= 1)\n return labels;\n // Index y, x0, x, height, by label.\n const [y0, setY0] = useMap();\n const [y, setY] = useMap();\n const [h, setH] = useMap();\n const [xx, setXX] = useMap();\n for (const label of labels) {\n const { min, max } = getBoundsWithoutConnector(label);\n const [x0, y0] = min;\n const [x1, y1] = max;\n setY0(label, y0);\n setY(label, y0);\n setH(label, y1 - y0);\n setXX(label, [x0, x1]);\n }\n // Offsets position Y.\n for (let iter = 0; iter < maxIterations; iter++) {\n labels.sort((a, b) => ascending(y(a), y(b)));\n let error = 0;\n for (let i = 0; i < n - 1; i++) {\n const l0 = labels[i];\n let j = i + 1;\n let l1;\n // Find the next label overlapping with the current label in x direction.\n while ((l1 = labels[j]) && !isSegmentIntersect(xx(l0), xx(l1)))\n j += 1;\n if (l1) {\n const y0 = y(l0);\n const h0 = h(l0);\n const y1 = y(l1);\n const delta = y1 - (y0 + h0);\n if (delta < padding) {\n const newDelta = (padding - delta) / 2;\n error = Math.max(error, newDelta);\n setY(l0, y0 - newDelta);\n setY(l1, y1 + newDelta);\n }\n }\n }\n if (error < maxError)\n break;\n }\n for (const label of labels) {\n label.style.y += y(label) - y0(label);\n }\n return labels;\n };\n};\n//# sourceMappingURL=overlapDodgeY.js.map","// There is a certain error in the calculation of text bounds.\nconst EPSILON = 1e-2;\nexport function parseAABB(min2) {\n const { min, max } = min2;\n return [\n [min[0], min[1]],\n [max[0], max[1]],\n ];\n}\n/**\n * Whether the `point` in `bounds`.\n * @param point\n * @param bounds\n * @param threshold\n */\nexport function isInBounds(point, bounds, threshold = EPSILON) {\n const [x, y] = point;\n const [min, max] = bounds;\n return (x >= min[0] - threshold &&\n x <= max[0] + threshold &&\n y >= min[1] - threshold &&\n y <= max[1] + threshold);\n}\n/**\n * Whether `b1` is overflow from `b2`.\n * @param b1\n * @param b2\n * @param threshold The threshold to determine whether the bounds is overflowed, default is 0.\n */\nexport function isOverflow(b1, b2, threshold = EPSILON) {\n const [min, max] = b1;\n return !(isInBounds(min, b2, threshold) && isInBounds(max, b2, threshold));\n}\n/**\n * Whether `b1` is overlap with `b2`.\n * @param b1\n * @param b2\n * @returns\n */\nexport function isOverlap(b1, b2) {\n const [min1, max1] = b1;\n const [min2, max2] = b2;\n return (min1[0] < max2[0] &&\n max1[0] > min2[0] &&\n min1[1] < max2[1] &&\n max1[1] > min2[1]);\n}\n//# sourceMappingURL=bounds.js.map","import { parseColor } from '@antv/g';\nexport function parseToRGB(c) {\n if (typeof c === 'object')\n return c;\n return parseColor(c);\n}\n//# sourceMappingURL=color.js.map","import { maxIndex } from '@antv/vendor/d3-array';\nimport { parseToRGB } from '../utils/color';\nfunction getsRGB(s) {\n let c = s / 255;\n c = c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n return c;\n}\nfunction getL(r, g, b) {\n return 0.2126 * getsRGB(r) + 0.7152 * getsRGB(g) + 0.0722 * getsRGB(b);\n}\n/**\n * Calculate the contrast. see https://webaim.org/resources/contrastchecker/\n * @param foreground\n * @param background\n */\nexport function contrast(foreground, background) {\n if (!foreground || !background || foreground === background)\n return 1;\n const { r, g, b } = foreground;\n const { r: rb, g: gb, b: bb } = background;\n const L1 = getL(r, g, b);\n const L2 = getL(rb, gb, bb);\n return (Math.max(L1, L2) + 0.05) / (Math.min(L1, L2) + 0.05);\n}\n/**\n * Reverse color for max contrast.\n */\nexport function mostContrast(color, palette) {\n const i = maxIndex(palette, (c) => contrast(color, parseToRGB(c)));\n return palette[i];\n}\n//# sourceMappingURL=utils.js.map","import { contrast, mostContrast } from './utils';\n/**\n * Reverse the label color when the contrast is lower then `threshold`.\n * The default value of `threshold` is 4.5.\n * More about contract, see https://webaim.org/resources/contrastchecker/\n */\nexport const ContrastReverse = (options) => {\n const { threshold = 4.5, palette = ['#000', '#fff'] } = options;\n return (labels) => {\n labels.forEach((l) => {\n const background = l.attr('dependentElement').parsedStyle.fill;\n const foreground = l.parsedStyle.fill;\n const c = contrast(foreground, background);\n if (c < threshold)\n l.attr('fill', mostContrast(background, palette));\n });\n return labels;\n };\n};\n//# sourceMappingURL=contrastReverse.js.map","import { show } from '../utils/style';\nconst adjustPosition = (target, edge) => {\n const [[minEdgeX, minEdgeY], [maxEdgeX, maxEdgeY]] = edge;\n const [[minX, minY], [maxX, maxY]] = target;\n let changeX = 0, changeY = 0;\n // x-axis\n if (minX < minEdgeX) {\n changeX = minEdgeX - minX;\n }\n else if (maxX > maxEdgeX) {\n changeX = maxEdgeX - maxX;\n }\n // y-axis\n if (minY < minEdgeY) {\n changeY = minEdgeY - minY;\n }\n else if (maxY > maxEdgeY) {\n changeY = maxEdgeY - maxY;\n }\n return [changeX, changeY];\n};\n/**\n * adjust the label when exceed the specific area\n */\nexport const ExceedAdjust = (options = {}) => {\n return (labels, { canvas, layout }) => {\n const { bounds = 'view', offsetX = 0, offsetY = 0 } = options;\n // Calculate boundary area based on bounds option\n const getBoundaryArea = () => {\n if (bounds === 'main') {\n // Main area: exclude margins and paddings from view area\n const { x = 0, y = 0, width = 0, height = 0, marginLeft = 0, marginRight = 0, marginTop = 0, marginBottom = 0, paddingLeft = 0, paddingRight = 0, paddingTop = 0, paddingBottom = 0, } = layout;\n return [\n [\n x + marginLeft + paddingLeft + offsetX,\n y + marginTop + paddingTop + offsetY,\n ],\n [\n x + width - marginRight - paddingRight - offsetX,\n y + height - marginBottom - paddingBottom - offsetY,\n ],\n ];\n }\n else {\n // View area (default): entire layout area\n const { x = 0, y = 0, width = 0, height = 0 } = layout;\n return [\n [x + offsetX, y + offsetY],\n [x + width - offsetX, y + height - offsetY],\n ];\n }\n };\n const boundaryArea = getBoundaryArea();\n labels.forEach((l) => {\n show(l);\n const { max, min } = l.getRenderBounds();\n const [xMax, yMax] = max, [xMin, yMin] = min;\n const changeValue = adjustPosition([\n [xMin, yMin],\n [xMax, yMax],\n ], \n // Use the calculated boundary area based on bounds configuration\n boundaryArea);\n // For label with connectorPoints\n if (l.style.connector && l.style.connectorPoints) {\n l.style.connectorPoints[0][0] -= changeValue[0];\n l.style.connectorPoints[0][1] -= changeValue[1];\n }\n l.style.x += changeValue[0];\n l.style.y += changeValue[1];\n });\n return labels;\n };\n};\n//# sourceMappingURL=exceedAdjust.js.map","import { parseToRGB } from '../utils/color';\nimport { isOverflow, parseAABB } from '../utils/bounds';\nimport { bboxOf } from '../interaction/utils';\nimport { mostContrast } from './utils';\n/**\n * Get bounds of element considering animation state.\n * If element has animations, get the final state bounds.\n */\nfunction getBoundsWithAnimation(element) {\n var _a;\n const animations = element.getAnimations();\n // If no animations, use regular bboxOf.\n if (!animations || animations.length === 0) {\n return bboxOf(element);\n }\n // Clone element and apply final animation state.\n const cloneElement = element.cloneNode(true);\n cloneElement.style.visibility = 'hidden';\n animations.forEach((animation) => {\n const keyframes = animation.effect.getKeyframes();\n if (keyframes && keyframes.length > 0) {\n cloneElement.attr(keyframes[keyframes.length - 1]);\n }\n });\n (_a = element.parentNode) === null || _a === void 0 ? void 0 : _a.appendChild(cloneElement);\n const bounds = bboxOf(cloneElement);\n cloneElement.destroy();\n return bounds;\n}\n/**\n * Reverse label stroke against label color.\n * More about contract, see https://webaim.org/resources/contrastchecker/\n */\nexport const OverflowStroke = (options) => {\n const { palette = ['#000', '#fff'], threshold = 2 } = options;\n return (labels) => {\n labels.forEach((l) => {\n var _a, _b;\n const dependentElement = l.attr('dependentElement');\n const labelFill = (_b = (_a = l.attributes.fill) !== null && _a !== void 0 ? _a : l.parsedStyle.fill) !== null && _b !== void 0 ? _b : '#fff';\n const textBounds = parseAABB(getBoundsWithAnimation(l));\n const elementBounds = parseAABB(getBoundsWithAnimation(dependentElement));\n if (isOverflow(textBounds, elementBounds, threshold)) {\n // Add stroke to make overflowing text more visible.\n // Use the opposite color from palette for stroke.\n const strokeColor = mostContrast(parseToRGB(labelFill), palette);\n l.attr('stroke', strokeColor);\n }\n else {\n // Undefined can't set to attrs, have to remove.\n l.removeAttribute('stroke');\n }\n });\n return labels;\n };\n};\n//# sourceMappingURL=overflowStroke.js.map","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n let digits = 3,\n pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n if (!arguments.length) return projection;\n projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\n return path;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n path.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) digits = null;\n else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n if (context === null) contextStream = new PathString(digits);\n return path;\n };\n\n return path.projection(projection).digits(digits).context(context);\n}\n","export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n var y = range(y0, y1 - epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range(x0, x1 - epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n return graticule()();\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n var sum = new Adder();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n return [lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n lambda += deltaLambda;\n if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n return [lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(2),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 2 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0)\n l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n if (k === Infinity) return [2, 0];\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n l = atan2(x, abs(fy)) * sign(fy);\n if (fy * n < 0)\n l -= pi * sign(x) * sign(fy);\n return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n","import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\n\nexport function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y,\n l = atan2(x, abs(gy)) * sign(gy);\n if (gy * n < 0)\n l -= pi * sign(x) * sign(gy);\n return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n};\n\nexport default function() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import clipRectangle from \"../clip/rectangle.js\";\nimport identity from \"../identity.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport {cos, degrees, radians, sin} from \"../math.js\";\n\nexport default function() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n alpha = 0, ca, sa, // angle\n x0 = null, y0, x1, y1, // clip extent\n kx = 1, ky = 1,\n transform = transformer({\n point: function(x, y) {\n var p = projection([x, y])\n this.stream.point(p[0], p[1]);\n }\n }),\n postclip = identity,\n cache,\n cacheStream;\n\n function reset() {\n kx = k * sx;\n ky = k * sy;\n cache = cacheStream = null;\n return projection;\n }\n\n function projection (p) {\n var x = p[0] * kx, y = p[1] * ky;\n if (alpha) {\n var t = y * ca - x * sa;\n x = x * ca + y * sa;\n y = t;\n } \n return [x + tx, y + ty];\n }\n projection.invert = function(p) {\n var x = p[0] - tx, y = p[1] - ty;\n if (alpha) {\n var t = y * ca + x * sa;\n x = x * ca - y * sa;\n y = t;\n }\n return [x / kx, y / ky];\n };\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n };\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n projection.scale = function(_) {\n return arguments.length ? (k = +_, reset()) : k;\n };\n projection.translate = function(_) {\n return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n }\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\n };\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n };\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n };\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n return projection;\n}\n","import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math.js\";\nimport {mercatorProjection} from \"./mercator.js\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Linear } from '@antv/scale';\nimport { upperFirst } from '@antv/util';\nimport { geoPath, geoGraticule10 } from '@antv/vendor/d3-geo';\nimport { maybeTooltip } from '../utils/mark';\nimport * as d3Projection from './d3Projection';\n/**\n * Get projection factory from d3-projection.\n */\nfunction normalizeProjection(type) {\n if (typeof type === 'function')\n return type;\n const name = `geo${upperFirst(type)}`;\n const projection = d3Projection[name];\n if (!projection)\n throw new Error(`Unknown coordinate: ${type}`);\n return projection;\n}\n/**\n * @see https://github.com/mapbox/geojson-merge/blob/master/index.js\n */\nfunction mergeGeoJSON(gjs) {\n return {\n type: 'FeatureCollection',\n features: gjs.flatMap((gj) => normalizeGeoJSON(gj).features),\n };\n}\nfunction normalizeGeoJSON(gj) {\n const types = {\n Point: 'geometry',\n MultiPoint: 'geometry',\n LineString: 'geometry',\n MultiLineString: 'geometry',\n Polygon: 'geometry',\n MultiPolygon: 'geometry',\n GeometryCollection: 'geometry',\n Feature: 'feature',\n FeatureCollection: 'featureCollection',\n };\n if (!gj || !gj.type)\n return null;\n const type = types[gj.type];\n if (!type)\n return null;\n if (type === 'geometry') {\n return {\n type: 'FeatureCollection',\n features: [\n {\n type: 'Feature',\n properties: {},\n geometry: gj,\n },\n ],\n };\n }\n else if (type === 'feature') {\n return {\n type: 'FeatureCollection',\n features: [gj],\n };\n }\n else if (type === 'featureCollection') {\n return gj;\n }\n}\n/**\n * Specify the options for d3 projection\n * @see https://github.com/d3/d3-geo#projections\n * @todo Specify key each by each.\n */\nfunction setProjectionOptions(projection, options) {\n var _a;\n for (const [key, value] of Object.entries(options)) {\n (_a = projection[key]) === null || _a === void 0 ? void 0 : _a.call(projection, value);\n }\n}\nfunction setProjectionSize(projection, nodes, layout, options) {\n const defaultOutline = () => {\n const geoNodes = nodes.filter(isGeoPath);\n // For geoPath with sphere mark, use it as outline.\n const sphere = geoNodes.find((d) => d.sphere);\n if (sphere)\n return { type: 'Sphere' };\n // Merge all GeoJSON as the outline.\n return mergeGeoJSON(geoNodes.filter((d) => !d.sphere).flatMap((d) => d.data.value));\n };\n const { outline = defaultOutline() } = options;\n const { size = 'fitExtent' } = options;\n if (size === 'fitExtent') {\n return setFitExtent(projection, outline, layout);\n }\n else if (size === 'fitWidth') {\n return setFitWidth(projection, outline, layout);\n }\n}\nfunction setFitExtent(projection, object, layout) {\n const { x, y, width, height } = layout;\n projection.fitExtent([\n [x, y],\n [width, height],\n ], object);\n}\nfunction setFitWidth(projection, object, layout) {\n const { width, height } = layout;\n const [[x0, y0], [x1, y1]] = geoPath(projection.fitWidth(width, object)).bounds(object);\n const dy = Math.ceil(y1 - y0);\n const l = Math.min(Math.ceil(x1 - x0), dy);\n const s = (projection.scale() * (l - 1)) / l;\n const [tx, ty] = projection.translate();\n const t = ty + (height - dy) / 2;\n projection.scale(s).translate([tx, t]).precision(0.2);\n}\n/**\n * @todo Remove this.\n */\nfunction normalizeDataSource(node) {\n const { data } = node;\n if (Array.isArray(data))\n return Object.assign(Object.assign({}, node), { data: { value: data } });\n const { type } = data;\n if (type === 'graticule10') {\n return Object.assign(Object.assign({}, node), { data: { value: [geoGraticule10()] } });\n }\n else if (type === 'sphere') {\n // Sphere is not a standard type of GeoJSON.\n // Mark this geoPath as sphere geoPath.\n return Object.assign(Object.assign({}, node), { sphere: true, data: { value: [{ type: 'Sphere' }] } });\n }\n return node;\n}\nfunction isGeoPath(d) {\n return d.type === 'geoPath';\n}\n/**\n * A view with geo coordinate.\n */\nexport const GeoView = () => {\n return (options) => {\n const { children, coordinate: projection = {} } = options;\n if (!Array.isArray(children))\n return [];\n // Get projection factory.\n const { type = 'equalEarth' } = projection, projectionOptions = __rest(projection, [\"type\"]);\n const createProjection = normalizeProjection(type);\n const nodes = children.map(normalizeDataSource);\n // Set path generator lazily.\n let path;\n // A custom geo coordinate.\n function Geo() {\n return [\n [\n 'custom',\n (x, y, width, height) => {\n // Create and set projection.\n const visual = createProjection();\n const layout = { x, y, width, height };\n setProjectionSize(visual, nodes, layout, projectionOptions);\n setProjectionOptions(visual, projectionOptions);\n // Create path generator.\n path = geoPath(visual);\n // Normalize projection and projection.invert,\n // which normalize projected points.\n const scaleX = new Linear({\n domain: [x, x + width],\n });\n const scaleY = new Linear({\n domain: [y, y + height],\n });\n const normalize = (point) => {\n const visualPoint = visual(point);\n if (!visualPoint)\n return [null, null];\n const [vx, vy] = visualPoint;\n return [scaleX.map(vx), scaleY.map(vy)];\n };\n const normalizeInvert = (point) => {\n if (!point)\n return null;\n const [px, py] = point;\n const visualPoint = [scaleX.invert(px), scaleY.invert(py)];\n return visual.invert(visualPoint);\n };\n return {\n transform: (point) => normalize(point),\n untransform: (point) => normalizeInvert(point),\n };\n },\n ],\n ];\n }\n function GeoPath(options) {\n const { style, tooltip = {} } = options;\n return Object.assign(Object.assign({}, options), { type: 'path', tooltip: maybeTooltip(tooltip, {\n title: 'id',\n items: [{ channel: 'color' }],\n }), style: Object.assign(Object.assign({}, style), { d: (d) => path(d) || [] }) });\n }\n const t = (d) => (isGeoPath(d) ? GeoPath(d) : d);\n return [\n Object.assign(Object.assign({}, options), { type: 'view', scale: {\n x: { type: 'identity' },\n y: { type: 'identity' },\n }, axis: false, coordinate: { type: Geo }, children: nodes.flatMap(t) }),\n ];\n };\n};\nGeoView.props = {};\n//# sourceMappingURL=geoView.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/**\n * Wrap GeoPath by a GeoView.\n */\nexport const GeoPath = () => {\n return (options) => {\n const { type, data, scale, encode, style, animate, key, state, tooltip } = options, rest = __rest(options, [\"type\", \"data\", \"scale\", \"encode\", \"style\", \"animate\", \"key\", \"state\", \"tooltip\"]);\n return [\n Object.assign(Object.assign({ type: 'geoView' }, rest), { children: [\n {\n type: 'geoPath',\n key: `${key}-0`,\n data: {\n value: data,\n },\n scale,\n encode,\n style,\n animate,\n state,\n tooltip,\n },\n ] }),\n ];\n };\n};\nGeoPath.props = {};\n//# sourceMappingURL=geoPath.js.map","import { min } from '@antv/vendor/d3-array';\nfunction targetDepth(d) {\n return d.target.depth;\n}\nexport function left(node) {\n return node.depth;\n}\nexport function right(node, n) {\n return n - 1 - node.height;\n}\nexport function justify(node, n) {\n return node.sourceLinks.length ? node.depth : n - 1;\n}\nexport function center(node) {\n return node.targetLinks.length\n ? node.depth\n : node.sourceLinks.length\n ? min(node.sourceLinks, targetDepth) - 1\n : 0;\n}\n//# sourceMappingURL=align.js.map","export function constant(x) {\n return function () {\n return x;\n };\n}\n//# sourceMappingURL=constant.js.map","import { sum, max, min } from '@antv/vendor/d3-array';\nimport { justify } from './align';\nimport { constant } from './constant';\nfunction ascendingSourceBreadth(a, b) {\n return ascendingBreadth(a.source, b.source) || a.index - b.index;\n}\nfunction ascendingTargetBreadth(a, b) {\n return ascendingBreadth(a.target, b.target) || a.index - b.index;\n}\nfunction ascendingBreadth(a, b) {\n return a.y0 - b.y0;\n}\nfunction value(d) {\n return d.value;\n}\nfunction defaultId(d) {\n return d.index;\n}\nfunction defaultNodes(graph) {\n return graph.nodes;\n}\nfunction defaultLinks(graph) {\n return graph.links;\n}\nfunction find(nodeById, id) {\n const node = nodeById.get(id);\n if (!node)\n throw new Error('missing: ' + id);\n return node;\n}\nfunction computeLinkBreadths({ nodes }) {\n for (const node of nodes) {\n let y0 = node.y0;\n let y1 = y0;\n for (const link of node.sourceLinks) {\n link.y0 = y0 + link.width / 2;\n y0 += link.width;\n }\n for (const link of node.targetLinks) {\n link.y1 = y1 + link.width / 2;\n y1 += link.width;\n }\n }\n}\nexport function Sankey() {\n let x0 = 0, y0 = 0, x1 = 1, y1 = 1; // extent\n let dx = 24; // nodeWidth\n let dy = 8, py; // nodePadding\n let id = defaultId;\n let align = justify;\n let depth;\n let sort;\n let linkSort;\n let nodes = defaultNodes;\n let links = defaultLinks;\n let iterations = 6;\n function sankey(arg) {\n const graph = {\n nodes: nodes(arg),\n links: links(arg),\n };\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeDepths(graph);\n computeNodeHeights(graph);\n computeNodeBreadths(graph);\n computeLinkBreadths(graph);\n return graph;\n }\n sankey.update = function (graph) {\n computeLinkBreadths(graph);\n return graph;\n };\n sankey.nodeId = function (_) {\n return arguments.length\n ? ((id = typeof _ === 'function' ? _ : constant(_)), sankey)\n : id;\n };\n sankey.nodeAlign = function (_) {\n return arguments.length\n ? ((align = typeof _ === 'function' ? _ : constant(_)), sankey)\n : align;\n };\n sankey.nodeDepth = function (_) {\n return arguments.length\n ? ((depth = typeof _ === 'function' ? _ : _), sankey)\n : depth;\n };\n sankey.nodeSort = function (_) {\n return arguments.length ? ((sort = _), sankey) : sort;\n };\n sankey.nodeWidth = function (_) {\n return arguments.length ? ((dx = +_), sankey) : dx;\n };\n sankey.nodePadding = function (_) {\n return arguments.length ? ((dy = py = +_), sankey) : dy;\n };\n sankey.nodes = function (_) {\n return arguments.length\n ? ((nodes = typeof _ === 'function' ? _ : constant(_)), sankey)\n : nodes;\n };\n sankey.links = function (_) {\n return arguments.length\n ? ((links = typeof _ === 'function' ? _ : constant(_)), sankey)\n : links;\n };\n sankey.linkSort = function (_) {\n return arguments.length ? ((linkSort = _), sankey) : linkSort;\n };\n sankey.size = function (_) {\n return arguments.length\n ? ((x0 = y0 = 0), (x1 = +_[0]), (y1 = +_[1]), sankey)\n : [x1 - x0, y1 - y0];\n };\n sankey.extent = function (_) {\n return arguments.length\n ? ((x0 = +_[0][0]),\n (x1 = +_[1][0]),\n (y0 = +_[0][1]),\n (y1 = +_[1][1]),\n sankey)\n : [\n [x0, y0],\n [x1, y1],\n ];\n };\n sankey.iterations = function (_) {\n return arguments.length ? ((iterations = +_), sankey) : iterations;\n };\n function computeNodeLinks({ nodes, links }) {\n nodes.forEach((node, idx) => {\n node.index = idx;\n node.sourceLinks = [];\n node.targetLinks = [];\n });\n const nodeById = new Map(nodes.map((d) => [id(d), d]));\n links.forEach((link, idx) => {\n link.index = idx;\n let { source, target } = link;\n if (typeof source !== 'object')\n source = link.source = find(nodeById, source);\n if (typeof target !== 'object')\n target = link.target = find(nodeById, target);\n source.sourceLinks.push(link);\n target.targetLinks.push(link);\n });\n if (linkSort != null) {\n for (const { sourceLinks, targetLinks } of nodes) {\n sourceLinks.sort(linkSort);\n targetLinks.sort(linkSort);\n }\n }\n }\n function computeNodeValues({ nodes }) {\n for (const node of nodes) {\n node.value =\n node.fixedValue === undefined\n ? Math.max(sum(node.sourceLinks, value), sum(node.targetLinks, value))\n : node.fixedValue;\n }\n }\n function computeNodeDepths({ nodes }) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set();\n let x = 0;\n while (current.size) {\n current.forEach((node) => {\n node.depth = x;\n for (const { target } of node.sourceLinks) {\n next.add(target);\n }\n });\n if (++x > n)\n throw new Error('circular link');\n current = next;\n next = new Set();\n }\n // 如果配置了 depth,则设置自定义 depth\n if (depth) {\n const maxDepth = Math.max(max(nodes, (d) => d.depth) + 1, 0);\n let node;\n for (let i = 0; i < nodes.length; i++) {\n node = nodes[i];\n node.depth = depth.call(null, node, maxDepth);\n }\n }\n }\n function computeNodeHeights({ nodes }) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set();\n let x = 0;\n while (current.size) {\n current.forEach((node) => {\n node.height = x;\n for (const { source } of node.targetLinks) {\n next.add(source);\n }\n });\n if (++x > n)\n throw new Error('circular link');\n current = next;\n next = new Set();\n }\n }\n function computeNodeLayers({ nodes }) {\n const x = Math.max(max(nodes, (d) => d.depth) + 1, 0);\n const kx = (x1 - x0 - dx) / (x - 1);\n const columns = new Array(x).fill(0).map(() => []);\n for (const node of nodes) {\n const i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x))));\n node.layer = i;\n node.x0 = x0 + i * kx;\n node.x1 = node.x0 + dx;\n if (columns[i])\n columns[i].push(node);\n else\n columns[i] = [node];\n }\n if (sort)\n for (const column of columns) {\n column.sort(sort);\n }\n return columns;\n }\n function initializeNodeBreadths(columns) {\n const ky = min(columns, (c) => (y1 - y0 - (c.length - 1) * py) / sum(c, value));\n for (const nodes of columns) {\n let y = y0;\n for (const node of nodes) {\n node.y0 = y;\n node.y1 = y + node.value * ky;\n y = node.y1 + py;\n for (const link of node.sourceLinks) {\n link.width = link.value * ky;\n }\n }\n y = (y1 - y + py) / (nodes.length + 1);\n for (let i = 0; i < nodes.length; ++i) {\n const node = nodes[i];\n node.y0 += y * (i + 1);\n node.y1 += y * (i + 1);\n }\n reorderLinks(nodes);\n }\n }\n function computeNodeBreadths(graph) {\n const columns = computeNodeLayers(graph);\n py = Math.min(dy, (y1 - y0) / (max(columns, (c) => c.length) - 1));\n initializeNodeBreadths(columns);\n for (let i = 0; i < iterations; ++i) {\n const alpha = Math.pow(0.99, i);\n const beta = Math.max(1 - alpha, (i + 1) / iterations);\n relaxRightToLeft(columns, alpha, beta);\n relaxLeftToRight(columns, alpha, beta);\n }\n }\n // Reposition each node based on its incoming (target) links.\n function relaxLeftToRight(columns, alpha, beta) {\n for (let i = 1, n = columns.length; i < n; ++i) {\n const column = columns[i];\n for (const target of column) {\n let y = 0;\n let w = 0;\n for (const { source, value } of target.targetLinks) {\n const v = value * (target.layer - source.layer);\n y += targetTop(source, target) * v;\n w += v;\n }\n if (!(w > 0))\n continue;\n const dy = (y / w - target.y0) * alpha;\n target.y0 += dy;\n target.y1 += dy;\n reorderNodeLinks(target);\n }\n if (sort === undefined)\n column.sort(ascendingBreadth);\n if (column.length)\n resolveCollisions(column, beta);\n }\n }\n // Reposition each node based on its outgoing (source) links.\n function relaxRightToLeft(columns, alpha, beta) {\n for (let n = columns.length, i = n - 2; i >= 0; --i) {\n const column = columns[i];\n for (const source of column) {\n let y = 0;\n let w = 0;\n for (const { target, value } of source.sourceLinks) {\n const v = value * (target.layer - source.layer);\n y += sourceTop(source, target) * v;\n w += v;\n }\n if (!(w > 0))\n continue;\n const dy = (y / w - source.y0) * alpha;\n source.y0 += dy;\n source.y1 += dy;\n reorderNodeLinks(source);\n }\n if (sort === undefined)\n column.sort(ascendingBreadth);\n if (column.length)\n resolveCollisions(column, beta);\n }\n }\n function resolveCollisions(nodes, alpha) {\n const i = nodes.length >> 1;\n const subject = nodes[i];\n resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha);\n resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha);\n resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha);\n resolveCollisionsTopToBottom(nodes, y0, 0, alpha);\n }\n // Push any overlapping nodes down.\n function resolveCollisionsTopToBottom(nodes, y, i, alpha) {\n for (; i < nodes.length; ++i) {\n const node = nodes[i];\n const dy = (y - node.y0) * alpha;\n if (dy > 1e-6)\n (node.y0 += dy), (node.y1 += dy);\n y = node.y1 + py;\n }\n }\n // Push any overlapping nodes up.\n function resolveCollisionsBottomToTop(nodes, y, i, alpha) {\n for (; i >= 0; --i) {\n const node = nodes[i];\n const dy = (node.y1 - y) * alpha;\n if (dy > 1e-6)\n (node.y0 -= dy), (node.y1 -= dy);\n y = node.y0 - py;\n }\n }\n function reorderNodeLinks({ sourceLinks, targetLinks }) {\n if (linkSort === undefined) {\n for (const { source: { sourceLinks }, } of targetLinks) {\n sourceLinks.sort(ascendingTargetBreadth);\n }\n for (const { target: { targetLinks }, } of sourceLinks) {\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n function reorderLinks(nodes) {\n if (linkSort === undefined) {\n for (const { sourceLinks, targetLinks } of nodes) {\n sourceLinks.sort(ascendingTargetBreadth);\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n // Returns the target.y0 that would produce an ideal link from source to target.\n function targetTop(source, target) {\n let y = source.y0 - ((source.sourceLinks.length - 1) * py) / 2;\n for (const { target: node, width } of source.sourceLinks) {\n if (node === target)\n break;\n y += width + py;\n }\n for (const { source: node, width } of target.targetLinks) {\n if (node === source)\n break;\n y -= width;\n }\n return y;\n }\n // Returns the source.y0 that would produce an ideal link from source to target.\n function sourceTop(source, target) {\n let y = target.y0 - ((target.targetLinks.length - 1) * py) / 2;\n for (const { source: node, width } of target.targetLinks) {\n if (node === source)\n break;\n y += width + py;\n }\n for (const { target: node, width } of source.sourceLinks) {\n if (node === target)\n break;\n y -= width;\n }\n return y;\n }\n return sankey;\n}\n//# sourceMappingURL=sankey.js.map","import { sankey, left, right, center, justify } from './utils/d3-sankey';\nconst DEFAULT_OPTIONS = {\n nodeAlign: 'justify',\n nodeWidth: 0.008,\n nodePadding: 0.03,\n nodes: (graph) => graph.nodes,\n links: (graph) => graph.links,\n nodeSort: undefined,\n linkSort: undefined,\n iterations: 6,\n};\nconst ALIGN_METHOD = {\n left,\n right,\n center,\n justify,\n};\nfunction getNodeAlignFunction(nodeAlign) {\n const type = typeof nodeAlign;\n if (type === 'string')\n return ALIGN_METHOD[nodeAlign] || justify;\n if (type === 'function')\n return nodeAlign;\n return justify;\n}\n/**\n * Compute the node and edge position, return a graph representing the Sankey layout. All will be normalized to [[0, 0], [1, 1]]\n * Required graph data (nodes, edges)\n */\nexport const Sankey = (options) => {\n return (data) => {\n const { nodeId, nodeSort, nodeAlign, nodeWidth, nodePadding, nodeDepth, nodes: nodeNodes, links: nodeLinks, linkSort, iterations, } = Object.assign({}, DEFAULT_OPTIONS, options);\n const sankeyProcessor = sankey()\n .nodeSort(nodeSort)\n .linkSort(linkSort)\n .links(nodeLinks)\n .nodes(nodeNodes)\n .nodeWidth(nodeWidth)\n .nodePadding(nodePadding)\n .nodeDepth(nodeDepth)\n .nodeAlign(getNodeAlignFunction(nodeAlign))\n .iterations(iterations)\n .extent([\n [0, 0],\n [1, 1],\n ]);\n if (typeof nodeId === 'function') {\n sankeyProcessor.nodeId(nodeId);\n }\n const layoutData = sankeyProcessor(data);\n const { nodes: N, links: L } = layoutData;\n const nodes = N.map((node) => {\n const { x0, x1, y0, y1 } = node;\n /* points\n * 3---2\n * | |\n * 0---1\n */\n return Object.assign(Object.assign({}, node), { x: [x0, x1, x1, x0], y: [y0, y0, y1, y1] });\n });\n const links = L.map((edge) => {\n const { source, target } = edge;\n const sx = source.x1;\n const tx = target.x0;\n const offset = edge.width / 2;\n return Object.assign(Object.assign({}, edge), { x: [sx, sx, tx, tx], y: [\n edge.y0 + offset,\n edge.y0 - offset,\n edge.y1 + offset,\n edge.y1 - offset,\n ] });\n });\n return { nodes, links };\n };\n};\nSankey.props = {};\n//# sourceMappingURL=sankey.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix } from '@antv/util';\nimport { Sankey as SankeyTransform } from '../data/sankey';\nimport { omitPrefixObject, subObject } from '../utils/helper';\nimport { subTooltip, maybeAnimation } from '../utils/mark';\nimport { field, initializeData } from './utils';\nconst DEFAULT_LAYOUT_OPTIONS = {\n nodeId: (d) => d.key,\n nodeWidth: 0.02,\n nodePadding: 0.02,\n};\nconst DEFAULT_NODE_OPTIONS = {\n type: 'polygon',\n axis: false,\n legend: false,\n encode: {\n shape: 'polygon',\n x: 'x',\n y: 'y',\n },\n scale: {\n x: { type: 'identity' },\n y: { type: 'identity' },\n },\n style: {\n stroke: '#000',\n },\n};\nconst DEFAULT_LINK_OPTIONS = {\n type: 'polygon',\n axis: false,\n legend: false,\n encode: {\n shape: 'ribbon',\n x: 'x',\n y: 'y',\n },\n style: {\n fillOpacity: 0.5,\n stroke: undefined,\n },\n};\nconst DEFAULT_LABEL_OPTIONS = {\n textAlign: (d) => (d.x[0] < 0.5 ? 'start' : 'end'),\n position: (d) => (d.x[0] < 0.5 ? 'right' : 'left'),\n fontSize: 10,\n};\n/**\n * @todo Add interaction\n * @todo Add source-link color mode\n */\nexport const Sankey = (options) => {\n const { data, encode = {}, scale, style = {}, layout = {}, nodeLabels = [], linkLabels = [], animate = {}, tooltip = {}, interaction, state = {}, } = options;\n // Initialize data, generating nodes by link if is not specified.\n const { links, nodes } = initializeData(data, encode);\n // Extract encode for node and link.\n const nodeEncode = subObject(encode, 'node');\n const linkEncode = subObject(encode, 'link');\n const { key: nodeKey = (d) => d.key, color = nodeKey } = nodeEncode;\n // Transform data, using nodeKey as nodeId.\n const { links: linkData, nodes: nodeData } = SankeyTransform(Object.assign(Object.assign(Object.assign({}, DEFAULT_LAYOUT_OPTIONS), { nodeId: field(nodeKey) }), layout))({ links, nodes });\n // Extract label style and apply defaults.\n const _a = subObject(style, 'label'), { text = nodeKey, spacing = 5 } = _a, labelStyle = __rest(_a, [\"text\", \"spacing\"]);\n const key1 = field(nodeKey);\n const nodeTooltip = subTooltip(tooltip, 'node', {\n title: key1,\n items: [{ field: 'value' }],\n }, true);\n const linkTooltip = subTooltip(tooltip, 'link', {\n title: '',\n items: [\n (d) => ({ name: 'source', value: key1(d.source) }),\n (d) => ({ name: 'target', value: key1(d.target) }),\n ],\n });\n // Extract node and link state.\n const [nodeState, linkState] = Object.entries(state).reduce((acc, [stateName, styleObj]) => {\n const commonState = omitPrefixObject(styleObj, 'node', 'link');\n const nodeState = subObject(styleObj, 'node');\n acc[0][stateName] = Object.assign(Object.assign({}, commonState), nodeState);\n const linkState = subObject(styleObj, 'link');\n acc[1][stateName] = Object.assign(Object.assign({}, commonState), linkState);\n return acc;\n }, [{}, {}]);\n return [\n deepMix({}, DEFAULT_NODE_OPTIONS, {\n data: nodeData,\n encode: Object.assign(Object.assign({}, nodeEncode), { color }),\n scale,\n style: subObject(style, 'node'),\n labels: [\n Object.assign(Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), { text, dx: (d) => (d.x[0] < 0.5 ? spacing : -spacing) }), labelStyle),\n ...nodeLabels,\n ],\n tooltip: nodeTooltip,\n animate: maybeAnimation(animate, 'node'),\n axis: false,\n interaction,\n state: nodeState,\n }),\n deepMix({}, DEFAULT_LINK_OPTIONS, {\n data: linkData,\n encode: linkEncode,\n labels: linkLabels,\n style: Object.assign({ fill: linkEncode.color ? undefined : '#aaa', lineWidth: 0 }, subObject(style, 'link')),\n tooltip: linkTooltip,\n animate: maybeAnimation(animate, 'link'),\n interaction,\n state: linkState,\n }),\n ];\n};\nSankey.props = {};\n//# sourceMappingURL=sankey.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix, get, last } from '@antv/util';\nimport { subObject } from '../utils/helper';\nimport { maybeTooltip } from '../utils/mark';\nimport { treeDataTransform } from '../utils/treeDataTransform';\n// Defaults\nconst GET_DEFAULT_LAYOUT_OPTIONS = (width, height) => ({\n tile: 'treemapSquarify',\n ratio: 0.5 * (1 + Math.sqrt(5)),\n size: [width, height],\n round: false,\n ignoreParentValue: true,\n padding: 0,\n paddingInner: 0,\n paddingOuter: 0,\n paddingTop: 0,\n paddingRight: 0,\n paddingBottom: 0,\n paddingLeft: 0,\n sort: (a, b) => b.value - a.value,\n layer: 0,\n});\nconst GET_DEFAULT_OPTIONS = (width, height) => ({\n type: 'rect',\n axis: false,\n encode: {\n x: 'x',\n y: 'y',\n key: 'id',\n color: (d) => d.path[1],\n },\n scale: {\n x: { domain: [0, width], range: [0, 1] },\n y: { domain: [0, height], range: [0, 1] },\n },\n style: {\n stroke: '#fff',\n },\n state: {\n active: { opacity: 0.6 },\n inactive: { opacity: 1 },\n },\n});\nconst DEFAULT_LABEL_OPTIONS = {\n fontSize: 10,\n text: (d) => last(d.path),\n position: 'inside',\n fill: '#000',\n textOverflow: 'clip',\n wordWrap: true,\n maxLines: 1,\n wordWrapWidth: (d) => d.x1 - d.x0,\n isTreemapLabel: true,\n};\nconst DEFAULT_TOOLTIP_OPTIONS = {\n title: (d) => { var _a, _b; return (_b = (_a = d.path) === null || _a === void 0 ? void 0 : _a.join) === null || _b === void 0 ? void 0 : _b.call(_a, '.'); },\n items: [{ field: 'value' }],\n};\nconst DEFAULT_TOOLTIP_OPTIONS_DRILL = {\n title: (d) => last(d.path),\n items: [{ field: 'value' }],\n};\nexport const Treemap = (options, context) => {\n const { width, height, options: markOptions } = context;\n const { data, encode = {}, scale, style = {}, layout = {}, labels = [], tooltip = {} } = options, resOptions = __rest(options, [\"data\", \"encode\", \"scale\", \"style\", \"layout\", \"labels\", \"tooltip\"]);\n const treemapDrillDown = get(markOptions, ['interaction', 'treemapDrillDown']) ||\n get(markOptions, ['marks', 0, 'interaction', 'treemapDrillDown']);\n // Layout\n const layoutOptions = deepMix({}, GET_DEFAULT_LAYOUT_OPTIONS(width, height), layout, {\n layer: treemapDrillDown\n ? (d) => {\n return d.depth === 1;\n }\n : layout.layer,\n });\n // Data\n const [transformedData, transformedDataAll] = treeDataTransform(data, layoutOptions, encode);\n // Label\n const labelStyle = subObject(style, 'label');\n return deepMix({}, GET_DEFAULT_OPTIONS(width, height), Object.assign(Object.assign({ data: transformedData, scale,\n style, labels: [\n Object.assign(Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), labelStyle), (treemapDrillDown && { cursor: 'pointer' })),\n ...labels,\n ] }, resOptions), { encode, tooltip: maybeTooltip(tooltip, DEFAULT_TOOLTIP_OPTIONS), axis: false }), treemapDrillDown\n ? {\n interaction: Object.assign(Object.assign({}, resOptions.interaction), { treemapDrillDown: treemapDrillDown\n ? Object.assign(Object.assign({}, treemapDrillDown), { originData: transformedDataAll, layout: layoutOptions }) : undefined }),\n encode: Object.assign({ color: (d) => last(d.path) }, encode),\n tooltip: maybeTooltip(tooltip, DEFAULT_TOOLTIP_OPTIONS_DRILL),\n }\n : {});\n};\nTreemap.props = {};\n//# sourceMappingURL=treemap.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix, isArray } from '@antv/util';\nimport { stratify, hierarchy, pack as packLayout, } from '@antv/vendor/d3-hierarchy';\nimport { subObject } from '../utils/helper';\nimport { maybeTooltip } from '../utils/mark';\nimport { field } from './utils';\nconst GET_DEFAULT_LAYOUT_OPTIONS = (width, height) => ({\n size: [width, height],\n padding: 0,\n sort: (a, b) => b.value - a.value,\n});\nconst GET_DEFAULT_OPTIONS = (width, height, encode) => ({\n type: 'point',\n axis: false,\n legend: false,\n scale: {\n x: { domain: [0, width] },\n y: { domain: [0, height] },\n size: { type: 'identity' },\n },\n encode: {\n x: 'x',\n y: 'y',\n size: 'r',\n shape: 'point',\n },\n style: {\n fill: !encode.color ? (d) => (d.height === 0 ? '#ddd' : '#fff') : undefined,\n stroke: !encode.color ? (d) => (d.height === 0 ? '' : '#000') : undefined,\n },\n});\nconst DEFAULT_LABEL_OPTIONS = {\n text: '',\n position: 'inside',\n textOverflow: 'clip',\n wordWrap: true,\n maxLines: 1,\n wordWrapWidth: (d) => d.r * 2,\n};\nconst DEFAULT_TOOLTIP_OPTIONS = {\n title: (d) => d.data.name,\n items: [{ field: 'value' }],\n};\nconst dataTransform = (data, layout, encode) => {\n const { value } = encode;\n const root = isArray(data)\n ? stratify().path(layout.path)(data)\n : hierarchy(data);\n value ? root.sum((d) => field(value)(d)).sort(layout.sort) : root.count();\n // @ts-ignore\n packLayout().size(layout.size).padding(layout.padding)(root);\n return root.descendants();\n};\nexport const Pack = (markOptions, context) => {\n const { width, height } = context;\n const { data, encode = {}, scale = {}, style = {}, layout = {}, labels = [], tooltip = {} } = markOptions, resOptions = __rest(markOptions, [\"data\", \"encode\", \"scale\", \"style\", \"layout\", \"labels\", \"tooltip\"]);\n const DEFAULT_OPTIONS = GET_DEFAULT_OPTIONS(width, height, encode);\n const transformedData = dataTransform(data, deepMix({}, GET_DEFAULT_LAYOUT_OPTIONS(width, height), layout), deepMix({}, DEFAULT_OPTIONS['encode'], encode));\n const labelStyle = subObject(style, 'label');\n return deepMix({}, DEFAULT_OPTIONS, Object.assign(Object.assign({ data: transformedData, encode,\n scale,\n style, labels: [\n Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), labelStyle),\n ...labels,\n ] }, resOptions), { tooltip: maybeTooltip(tooltip, DEFAULT_TOOLTIP_OPTIONS), axis: false }));\n};\nPack.props = {};\n//# sourceMappingURL=pack.js.map","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n","export default function(x, y) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { forceSimulation, forceManyBody, forceLink, forceX, forceY, forceCenter, } from '@antv/vendor/d3-force';\nimport { deepMix } from '@antv/util';\nimport { subObject } from '../utils/helper';\nimport { maybeAnimation, subTooltip } from '../utils/mark';\nimport { field, initializeData } from './utils';\nconst DEFAULT_LAYOUT_OPTIONS = {\n joint: true,\n};\nconst DEFAULT_LINK_OPTIONS = {\n type: 'link',\n axis: false,\n legend: false,\n encode: {\n x: [(d) => d.source.x, (d) => d.target.x],\n y: [(d) => d.source.y, (d) => d.target.y],\n },\n style: {\n stroke: '#999',\n strokeOpacity: 0.6,\n },\n};\nconst DEFAULT_NODE_OPTIONS = {\n type: 'point',\n axis: false,\n legend: false,\n encode: {\n x: 'x',\n y: 'y',\n size: 5,\n color: 'group',\n shape: 'point',\n },\n style: {\n stroke: '#fff',\n },\n};\nconst DEFAULT_LABEL_OPTIONS = {\n text: '',\n};\nfunction dataTransform(data, layout, encode) {\n const { nodes, links } = data;\n const { joint, nodeStrength, linkStrength } = layout;\n const { nodeKey = (d) => d.id, linkKey = (d) => d.id } = encode;\n const nodeForce = forceManyBody();\n const linkForce = forceLink(links).id(field(linkKey));\n typeof nodeStrength === 'function' && nodeForce.strength(nodeStrength);\n typeof linkStrength === 'function' && linkForce.strength(linkStrength);\n const simulation = forceSimulation(nodes)\n .force('link', linkForce)\n .force('charge', nodeForce);\n joint\n ? simulation.force('center', forceCenter())\n : simulation.force('x', forceX()).force('y', forceY());\n simulation.stop();\n const n = Math.ceil(Math.log(simulation.alphaMin()) / Math.log(1 - simulation.alphaDecay()));\n for (let i = 0; i < n; i++)\n simulation.tick();\n return {\n nodesData: nodes,\n linksData: links,\n };\n}\nexport const ForceGraph = (options) => {\n const { data, encode: e = {}, scale, style = {}, layout = {}, nodeLabels = [], linkLabels = [], animate = {}, tooltip = {}, } = options;\n const { nodeKey = (d) => d.id, linkKey = (d) => d.id } = e, restEncode = __rest(e, [\"nodeKey\", \"linkKey\"]);\n const encode = Object.assign({ nodeKey, linkKey }, restEncode);\n const nodeEncode = subObject(encode, 'node');\n const linkEncode = subObject(encode, 'link');\n const { links, nodes } = initializeData(data, encode);\n const { nodesData, linksData } = dataTransform({ links, nodes }, deepMix({}, DEFAULT_LAYOUT_OPTIONS, layout), encode);\n const linkTooltip = subTooltip(tooltip, 'link', {\n items: [\n (d) => ({ name: 'source', value: field(linkKey)(d.source) }),\n (d) => ({ name: 'target', value: field(linkKey)(d.target) }),\n ],\n });\n const nodeTooltip = subTooltip(tooltip, 'node', {\n items: [(d) => ({ name: 'key', value: field(nodeKey)(d) })],\n }, true);\n return [\n deepMix({}, DEFAULT_LINK_OPTIONS, {\n data: linksData,\n encode: linkEncode,\n labels: linkLabels,\n style: subObject(style, 'link'),\n tooltip: linkTooltip,\n animate: maybeAnimation(animate, 'link'),\n }),\n deepMix({}, DEFAULT_NODE_OPTIONS, {\n data: nodesData,\n encode: Object.assign({}, nodeEncode),\n scale,\n style: subObject(style, 'node'),\n tooltip: nodeTooltip,\n labels: [\n Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), subObject(style, 'label')),\n ...nodeLabels,\n ],\n animate: maybeAnimation(animate, 'link'),\n }),\n ];\n};\nForceGraph.props = {};\n//# sourceMappingURL=forceGraph.js.map","import { cluster, hierarchy } from '@antv/vendor/d3-hierarchy';\nexport const hierarchyFunction = (layoutFunction) => (options) => {\n return (data) => {\n const { field = 'value', nodeSize, separation, sortBy, as = ['x', 'y'], } = options;\n const [x, y] = as;\n // Process root data.\n const root = hierarchy(data, (d) => d.children)\n .sum((d) => d[field])\n .sort(sortBy);\n // Layout\n const c = layoutFunction();\n c.size([1, 1]);\n if (nodeSize)\n c.nodeSize(nodeSize);\n if (separation)\n c.separation(separation);\n c(root);\n const nodes = [];\n root.each((node) => {\n node[x] = node.x;\n node[y] = node.y;\n node.name = node.data.name;\n nodes.push(node);\n });\n const edges = root.links();\n edges.forEach((edge) => {\n edge[x] = [edge.source[x], edge.target[x]];\n edge[y] = [edge.source[y], edge.target[y]];\n });\n return { nodes, edges };\n };\n};\nexport const Cluster = (options) => {\n return hierarchyFunction(cluster)(options);\n};\nCluster.props = {};\n//# sourceMappingURL=cluster.js.map","import { tree } from '@antv/vendor/d3-hierarchy';\nimport { hierarchyFunction } from './cluster';\nexport const Tree = (options) => {\n return hierarchyFunction(tree)(options);\n};\nTree.props = {};\n//# sourceMappingURL=tree.js.map","import { deepMix } from '@antv/util';\nimport { subObject } from '../utils/helper';\nimport { Tree as TreeTransform, } from '../data/tree';\nimport { maybeAnimation, subTooltip } from '../utils/mark';\nconst DEFAULT_LAYOUT_OPTIONS = {\n sortBy: (a, b) => b.value - a.value,\n};\nconst DEFAULT_NODE_OPTIONS = {\n axis: false,\n legend: false,\n type: 'point',\n encode: {\n x: 'x',\n y: 'y',\n size: 2,\n shape: 'point',\n },\n};\nconst DEFAULT_LINK_OPTIONS = {\n type: 'link',\n encode: {\n x: 'x',\n y: 'y',\n shape: 'smooth',\n },\n};\nconst DEFAULT_LABEL_OPTIONS = {\n text: '',\n fontSize: 10,\n};\nexport const Tree = (options) => {\n const { data, encode = {}, scale = {}, style = {}, layout = {}, nodeLabels = [], linkLabels = [], animate = {}, tooltip = {}, } = options;\n const valueEncode = encode === null || encode === void 0 ? void 0 : encode.value;\n const { nodes, edges } = TreeTransform(Object.assign(Object.assign(Object.assign({}, DEFAULT_LAYOUT_OPTIONS), layout), { field: valueEncode }))(data);\n const nodeTooltip = subTooltip(tooltip, 'node', {\n title: 'name',\n items: ['value'],\n }, true);\n const linkTooltip = subTooltip(tooltip, 'link', {\n title: '',\n items: [\n (d) => ({ name: 'source', value: d.source.name }),\n (d) => ({ name: 'target', value: d.target.name }),\n ],\n });\n return [\n deepMix({}, DEFAULT_LINK_OPTIONS, {\n data: edges,\n encode: subObject(encode, 'link'),\n scale: subObject(scale, 'link'),\n labels: linkLabels,\n style: Object.assign({ stroke: '#999' }, subObject(style, 'link')),\n tooltip: linkTooltip,\n animate: maybeAnimation(animate, 'link'),\n }),\n deepMix({}, DEFAULT_NODE_OPTIONS, {\n data: nodes,\n scale: subObject(scale, 'node'),\n encode: subObject(encode, 'node'),\n labels: [\n Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), subObject(style, 'label')),\n ...nodeLabels,\n ],\n style: Object.assign({}, subObject(style, 'node')),\n tooltip: nodeTooltip,\n animate: maybeAnimation(animate, 'node'),\n }),\n ];\n};\nTree.props = {};\n//# sourceMappingURL=tree.js.map","export function weight(a, b) {\n return b.value - a.value;\n}\nexport function frequency(a, b) {\n return b.frequency - a.frequency;\n}\nexport function id(a, b) {\n return `${a.id}`.localeCompare(`${b.id}`);\n}\nexport function name(a, b) {\n return `${a.name}`.localeCompare(`${b.name}`);\n}\n//# sourceMappingURL=sort.js.map","import { group, sum } from '@antv/vendor/d3-array';\nimport { error } from '../../../utils/helper';\nimport * as SortMethods from './sort';\nconst DEFAULT_OPTIONS = {\n y: 0,\n thickness: 0.05,\n weight: false,\n marginRatio: 0.1,\n id: (node) => node.id,\n source: (edge) => edge.source,\n target: (edge) => edge.target,\n sourceWeight: (edge) => edge.value || 1,\n targetWeight: (edge) => edge.value || 1,\n sortBy: null,\n};\n/**\n * Layout for Arc / Chord diagram with d3 style.\n */\nexport function Arc(options) {\n const { y, thickness, weight, marginRatio, id, source, target, sourceWeight, targetWeight, sortBy, } = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);\n function arc(data) {\n // Clone first.\n const nodes = data.nodes.map((n) => (Object.assign({}, n)));\n const edges = data.edges.map((n) => (Object.assign({}, n)));\n // Keep reference in below functions.\n preprocess(nodes, edges);\n sortNodes(nodes, edges);\n layoutNodes(nodes, edges);\n layoutEdges(nodes, edges);\n return { nodes, edges };\n }\n /**\n * Calculate id, value, frequency for node, and source,target for edge.\n */\n function preprocess(nodes, edges) {\n edges.forEach((edge) => {\n edge.source = source(edge);\n edge.target = target(edge);\n edge.sourceWeight = sourceWeight(edge);\n edge.targetWeight = targetWeight(edge);\n });\n // Group edges by source, target.\n const edgesBySource = group(edges, (e) => e.source);\n const edgesByTarget = group(edges, (e) => e.target);\n nodes.forEach((node) => {\n node.id = id(node);\n const sources = edgesBySource.has(node.id)\n ? edgesBySource.get(node.id)\n : [];\n const targets = edgesByTarget.has(node.id)\n ? edgesByTarget.get(node.id)\n : [];\n node.frequency = sources.length + targets.length;\n node.value =\n sum(sources, (d) => d.sourceWeight) +\n sum(targets, (d) => d.targetWeight);\n });\n return { nodes, edges };\n }\n function sortNodes(nodes, edges) {\n const method = typeof sortBy === 'function' ? sortBy : SortMethods[sortBy];\n if (method) {\n nodes.sort(method);\n }\n }\n function layoutNodes(nodes, edges) {\n const size = nodes.length;\n if (!size) {\n throw error(\"Invalid nodes: it's empty!\");\n }\n // No weight.\n if (!weight) {\n const deltaX = 1 / size;\n nodes.forEach((node, i) => {\n node.x = (i + 0.5) * deltaX;\n node.y = y;\n });\n return { nodes, edges };\n }\n // todo: marginRatio should be in [0, 1)\n // todo: thickness shoule be in (0, 1)\n const margin = marginRatio / (2 * size);\n const total = nodes.reduce((prev, node) => (prev += node.value), 0);\n nodes.reduce((deltaX, node) => {\n node.weight = node.value / total;\n node.width = node.weight * (1 - marginRatio);\n node.height = thickness;\n /* points\n * 3---2\n * | |\n * 0---1\n */\n const minX = margin + deltaX;\n const maxX = minX + node.width;\n const minY = y - thickness / 2;\n const maxY = minY + thickness;\n node.x = [minX, maxX, maxX, minX];\n node.y = [minY, minY, maxY, maxY];\n // Return next deltaX.\n return deltaX + node.width + 2 * margin;\n }, 0);\n return {\n nodes,\n edges,\n };\n }\n /**\n * Get edge layout information from nodes, and save into edge object.\n */\n function layoutEdges(nodes, edges) {\n const nodesMap = new Map(nodes.map((d) => [d.id, d]));\n if (!weight) {\n edges.forEach((edge) => {\n const sourceId = source(edge);\n const targetId = target(edge);\n const sourceNode = nodesMap.get(sourceId);\n const targetNode = nodesMap.get(targetId);\n // Edge's layout information is Equal with node.\n if (sourceNode && targetNode) {\n edge.x = [sourceNode.x, targetNode.x];\n edge.y = [sourceNode.y, targetNode.y];\n }\n });\n return { nodes, edges };\n }\n // Initial edge.x, edge.y.\n edges.forEach((edge) => {\n edge.x = [0, 0, 0, 0];\n edge.y = [y, y, y, y];\n });\n // Group edges by source, target.\n const edgesBySource = group(edges, (e) => e.source);\n const edgesByTarget = group(edges, (e) => e.target);\n // When weight = true, we need to calculation the bbox of edge start/end.\n nodes.forEach((node) => {\n const { edges, width, x, y, value, id } = node;\n const sourceEdges = edgesBySource.get(id) || [];\n const targetEdges = edgesByTarget.get(id) || [];\n let offset = 0;\n /* points\n * 0----------2\n * | |\n * 1----------3\n */\n sourceEdges.map((edge) => {\n const w = (edge.sourceWeight / value) * width;\n edge.x[0] = x[0] + offset;\n edge.x[1] = x[0] + offset + w;\n offset += w;\n });\n targetEdges.forEach((edge) => {\n const w = (edge.targetWeight / value) * width;\n edge.x[3] = x[0] + offset;\n edge.x[2] = x[0] + offset + w;\n offset += w;\n });\n });\n }\n return arc;\n}\n//# sourceMappingURL=arc.js.map","import { Arc as ArcLayout } from '../data/utils/arc';\n/**\n * For arc diagram(edge with weight) or chord diagram(with weight)\n */\nexport const Arc = (options) => {\n return (data) => {\n return ArcLayout(options)(data);\n };\n};\nArc.props = {};\n//# sourceMappingURL=arc.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix } from '@antv/util';\nimport { subObject } from '../utils/helper';\nimport { subTooltip, maybeAnimation } from '../utils/mark';\nimport { Arc } from '../data/arc';\nimport { field, initializeData } from './utils';\nconst DEFAULT_LAYOUT_OPTIONS = {\n y: 0,\n thickness: 0.05,\n marginRatio: 0.1,\n id: (node) => node.key,\n source: (edge) => edge.source,\n target: (edge) => edge.target,\n sourceWeight: (edge) => edge.value || 1,\n targetWeight: (edge) => edge.value || 1,\n sortBy: null, // optional, id | weight | frequency | {function}\n};\nconst DEFAULT_NODE_OPTIONS = {\n type: 'polygon',\n axis: false,\n legend: false,\n encode: {\n shape: 'polygon',\n x: 'x',\n y: 'y',\n },\n scale: {\n x: { type: 'identity' },\n y: { type: 'identity' },\n },\n style: {\n opacity: 1,\n fillOpacity: 1,\n lineWidth: 1,\n },\n};\nconst DEFAULT_LINK_OPTIONS = {\n type: 'polygon',\n axis: false,\n legend: false,\n encode: {\n shape: 'ribbon',\n x: 'x',\n y: 'y',\n },\n style: {\n opacity: 0.5,\n lineWidth: 1,\n },\n};\nconst DEFAULT_LABEL_OPTIONS = {\n position: 'outside',\n fontSize: 10,\n};\nexport const Chord = (options, context) => {\n const { data, encode = {}, scale, style = {}, layout = {}, nodeLabels = [], linkLabels = [], animate = {}, tooltip = {}, } = options;\n // Initialize data, generating nodes by link if is not specified.\n const { nodes, links } = initializeData(data, encode);\n // Extract encode for node and link.\n const nodeEncode = subObject(encode, 'node');\n const linkEncode = subObject(encode, 'link');\n const { key: nodeKey = (d) => d.key, color = nodeKey } = nodeEncode;\n const { linkEncodeColor = (d) => d.source } = linkEncode;\n const { nodeWidthRatio = DEFAULT_LAYOUT_OPTIONS.thickness, nodePaddingRatio = DEFAULT_LAYOUT_OPTIONS.marginRatio } = layout, restLayout = __rest(layout, [\"nodeWidthRatio\", \"nodePaddingRatio\"]);\n const { nodes: nodeData, edges: linkData } = Arc(Object.assign(Object.assign(Object.assign(Object.assign({}, DEFAULT_LAYOUT_OPTIONS), { id: field(nodeKey), thickness: nodeWidthRatio, marginRatio: nodePaddingRatio }), restLayout), { weight: true }))({ nodes, edges: links });\n // Extract label style and apply defaults.\n const _a = subObject(style, 'label'), { text = nodeKey } = _a, labelStyle = __rest(_a, [\"text\"]);\n const nodeTooltip = subTooltip(tooltip, 'node', {\n title: '',\n items: [(d) => ({ name: d.key, value: d.value })],\n }, true);\n const linkTooltip = subTooltip(tooltip, 'link', {\n title: '',\n items: [(d) => ({ name: `${d.source} -> ${d.target}`, value: d.value })],\n });\n const { height, width } = context;\n const minimumLen = Math.min(height, width);\n return [\n deepMix({}, DEFAULT_LINK_OPTIONS, {\n data: linkData,\n encode: Object.assign(Object.assign({}, linkEncode), { color: linkEncodeColor }),\n labels: linkLabels,\n style: Object.assign({ fill: linkEncodeColor ? undefined : '#aaa' }, subObject(style, 'link')),\n tooltip: linkTooltip,\n animate: maybeAnimation(animate, 'link'),\n }),\n deepMix({}, DEFAULT_NODE_OPTIONS, {\n data: nodeData,\n encode: Object.assign(Object.assign({}, nodeEncode), { color }),\n scale,\n style: subObject(style, 'node'),\n coordinate: {\n type: 'polar',\n // Leave enough rendering space for the label.\n outerRadius: (minimumLen - 20) / minimumLen,\n startAngle: -Math.PI * 2,\n endAngle: 0,\n },\n labels: [\n Object.assign(Object.assign(Object.assign({}, DEFAULT_LABEL_OPTIONS), { text }), labelStyle),\n ...nodeLabels,\n ],\n tooltip: nodeTooltip,\n animate: maybeAnimation(animate, 'node'),\n axis: false,\n }),\n ];\n};\nChord.props = {};\n//# sourceMappingURL=chord.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { min as d3Min, max as d3Max, quantile, group, } from '@antv/vendor/d3-array';\nimport { subObject } from '../utils/helper';\nimport { maybeAnimation, subTooltip } from '../utils/mark';\nfunction min(I, V) {\n return d3Min(I, (i) => V[i]);\n}\nfunction max(I, V) {\n return d3Max(I, (i) => V[i]);\n}\nfunction lower(I, V) {\n const lo = q1(I, V) * 2.5 - q3(I, V) * 1.5;\n return d3Min(I, (i) => (V[i] >= lo ? V[i] : NaN));\n}\nfunction q1(I, V) {\n return quantile(I, 0.25, (i) => V[i]);\n}\nfunction q2(I, V) {\n return quantile(I, 0.5, (i) => V[i]);\n}\nfunction q3(I, V) {\n return quantile(I, 0.75, (i) => V[i]);\n}\nfunction upper(I, V) {\n const hi = q3(I, V) * 2.5 - q1(I, V) * 1.5;\n return d3Max(I, (i) => (V[i] <= hi ? V[i] : NaN));\n}\n/**\n * Group marks by x and reserve outlier indexes.\n */\nfunction OutlierY() {\n return (I, mark) => {\n const { encode } = mark;\n const { y, x } = encode;\n const { value: V } = y;\n const { value: X } = x;\n const GI = Array.from(group(I, (i) => X[+i]).values());\n const FI = GI.flatMap((I) => {\n const lo = lower(I, V);\n const hi = upper(I, V);\n return I.filter((i) => V[i] < lo || V[i] > hi);\n });\n return [FI, mark];\n };\n}\nexport const Boxplot = (options) => {\n const { data, encode, style = {}, tooltip = {}, transform, animate } = options, rest = __rest(options, [\"data\", \"encode\", \"style\", \"tooltip\", \"transform\", \"animate\"]);\n const { point = true } = style, restStyle = __rest(style, [\"point\"]);\n const { y } = encode;\n const encodeY = { y, y1: y, y2: y, y3: y, y4: y };\n const qy = { y1: q1, y2: q2, y3: q3 };\n // Tooltips.\n const boxTooltip = subTooltip(tooltip, 'box', {\n items: [\n { channel: 'y', name: 'min' },\n { channel: 'y1', name: 'q1' },\n { channel: 'y2', name: 'q2' },\n { channel: 'y3', name: 'q3' },\n { channel: 'y4', name: 'max' },\n ],\n }, true);\n const pointTooltip = subTooltip(tooltip, 'point', {\n title: { channel: 'x' },\n items: [{ name: 'outlier', channel: 'y' }],\n });\n // Only show min and max instead of lower and upper.\n // Only draw a box.\n if (!point) {\n return Object.assign({ type: 'box', data: data, transform: [\n Object.assign(Object.assign({ type: 'groupX', y: min }, qy), { y4: max }),\n ], encode: Object.assign(Object.assign({}, encode), encodeY), style: restStyle, tooltip: boxTooltip }, rest);\n }\n const boxStyle = subObject(restStyle, 'box');\n const pointStyle = subObject(restStyle, 'point');\n return [\n Object.assign({ type: 'box', data: data, transform: [\n Object.assign(Object.assign({ type: 'groupX', y: lower }, qy), { y4: upper }),\n ], encode: Object.assign(Object.assign({}, encode), encodeY), style: boxStyle, tooltip: boxTooltip, animate: maybeAnimation(animate, 'box') }, rest),\n // Draw outliers.\n {\n type: 'point',\n data: data,\n transform: [{ type: OutlierY }],\n encode,\n style: Object.assign({}, pointStyle),\n tooltip: pointTooltip,\n animate: maybeAnimation(animate, 'point'),\n },\n ];\n};\nBoxplot.props = {};\n//# sourceMappingURL=boxplot.js.map","import { omit } from '@antv/util';\n// Get point1 point2 radius.\nconst getR = (point1, point2) => {\n return (Math.sqrt(Math.pow(point1[0] - point2[0], 2) + Math.pow(point1[1] - point2[1], 2)) / 2);\n};\n// 计算两点之间的角度\nconst getAngle = (start, end, center) => {\n const startAngle = Math.atan2(start[1] - center[1], start[0] - center[0]);\n const endAngle = Math.atan2(end[1] - center[1], end[0] - center[0]);\n let angle = endAngle - startAngle;\n // 确保角度在 0-2π 之间\n if (angle < 0)\n angle += Math.PI * 2;\n return angle;\n};\n// Gauge round.\nexport const Round = (options, context) => {\n if (!context)\n return;\n const { coordinate } = context;\n if (!(coordinate === null || coordinate === void 0 ? void 0 : coordinate.getCenter))\n return;\n // Get coordinate center point.\n const center = coordinate.getCenter();\n return (points, cfg, defaultCfg) => {\n const { document } = context.canvas;\n const { color, index } = cfg;\n const g = document.createElement('g', {});\n const minR = getR(points[0], points[1]);\n const maxR = getR(points[0], center) * 2;\n // 计算每个弧段的角度\n // 判断是否需要使用大弧度(角度大于180度)\n const isHalf = getAngle(points[3], points[0], center) > Math.PI;\n /**\n * MinR small circle radius, maxR big circle radius.\n * Draw four arcs.\n * Style lineWidth and stroke for the time being inset.\n */\n const roundPath = document.createElement('path', {\n style: Object.assign(Object.assign(Object.assign({ d: [\n ['M', ...points[0]],\n ['A', minR, minR, 0, 1, 0, ...points[1]],\n [\n 'A',\n maxR + minR * 2,\n maxR + minR * 2,\n 0,\n isHalf ? 1 : 0,\n 0,\n ...points[2],\n ],\n ['A', minR, minR, 0, 1, index === 0 ? 0 : 1, ...points[3]],\n ['A', maxR, maxR, 0, isHalf ? 1 : 0, 1, ...points[0]],\n ['Z'],\n ] }, defaultCfg), omit(options, ['shape', 'last', 'first'])), { fill: color || defaultCfg.color }),\n });\n g.appendChild(roundPath);\n return g;\n };\n};\n//# sourceMappingURL=round.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix, isNumber } from '@antv/util';\nimport { Group } from '@antv/g';\nimport { filterPrefixObject, isUnset, subObject } from '../utils/helper';\nimport { getTransformOptions } from '../utils/coordinate';\nimport { Radial } from '../coordinate';\nimport { applyStyle, getOrigin } from '../shape/utils';\nimport { select } from '../utils/selection';\nimport { GaugeRound } from '../shape';\nconst indicatorShape = (options, context) => {\n const { shape, radius } = options, style = __rest(options, [\"shape\", \"radius\"]);\n const pointerStyle = subObject(style, 'pointer');\n const pinStyle = subObject(style, 'pin');\n const { shape: pointerShape } = pointerStyle, resPointerStyle = __rest(pointerStyle, [\"shape\"]);\n const { shape: pinShape } = pinStyle, resPinStyle = __rest(pinStyle, [\"shape\"]);\n const { coordinate, theme } = context;\n return (points, value) => {\n // Invert points.\n const invertedPoints = points.map((p) => coordinate.invert(p));\n // Get new coordinate.\n const [startAngle, endAngle, innerRadius] = getTransformOptions(coordinate, 'polar');\n const newCoordinate = coordinate.clone();\n const { color: stroke } = value;\n const newTransformations = Radial({\n startAngle,\n endAngle,\n innerRadius,\n outerRadius: radius,\n });\n newTransformations.push(['cartesian']);\n newCoordinate.update({\n transformations: newTransformations,\n });\n const newPoints = invertedPoints.map((p) => newCoordinate.map(p));\n const [x, y] = getOrigin(newPoints);\n const [cx, cy] = coordinate.getCenter();\n const pointerAttrs = Object.assign(Object.assign({ x1: x, y1: y, x2: cx, y2: cy, stroke }, resPointerStyle), style);\n const pinAttrs = Object.assign(Object.assign({ cx,\n cy,\n stroke }, resPinStyle), style);\n const indicatorGroup = select(new Group());\n if (!isUnset(pointerShape)) {\n typeof pointerShape === 'function'\n ? indicatorGroup.append(() => pointerShape(newPoints, value, newCoordinate, theme))\n : indicatorGroup.append('line').call(applyStyle, pointerAttrs).node();\n }\n if (!isUnset(pinShape)) {\n typeof pinShape === 'function'\n ? indicatorGroup.append(() => pinShape(newPoints, value, newCoordinate, theme))\n : indicatorGroup.append('circle').call(applyStyle, pinAttrs).node();\n }\n return indicatorGroup.node();\n };\n};\nconst DEFAULT_OPTIONS = {\n coordinate: {\n type: 'radial',\n innerRadius: 0.9,\n outerRadius: 1,\n startAngle: (-11 / 10) * Math.PI,\n endAngle: (1 / 10) * Math.PI,\n },\n axis: {\n x: false,\n },\n legend: false,\n tooltip: false,\n encode: {\n x: 'x',\n y: 'y',\n color: 'color',\n },\n scale: {\n color: {\n range: ['#30BF78', '#D0D0D0'],\n },\n },\n};\nconst DEFAULT_INDICATOR_OPTIONS = {\n style: {\n shape: indicatorShape,\n lineWidth: 4,\n pointerLineCap: 'round',\n pinR: 10,\n pinFill: '#fff',\n radius: 0.6,\n },\n};\nconst DEFAULT_TEXT_OPTIONS = {\n type: 'text',\n style: {\n x: '50%',\n y: '60%',\n textAlign: 'center',\n textBaseline: 'middle',\n fontSize: 20,\n fontWeight: 800,\n fill: '#888',\n },\n tooltip: false,\n};\nfunction getGaugeData(data) {\n if (isNumber(data)) {\n // Percent range [0, 1].\n const percent = Math.max(0, Math.min(data, 1));\n return {\n percent,\n target: percent,\n total: 1,\n };\n }\n return data;\n}\nfunction dataTransform(data, scale) {\n const { name = 'score', target, total, percent, thresholds = [], } = getGaugeData(data);\n const _target = percent || target;\n const _total = percent ? 1 : total;\n const newScale = Object.assign({ y: {\n domain: [0, _total],\n } }, scale);\n if (!thresholds.length) {\n return {\n targetData: [{ x: name, y: _target, color: 'target' }],\n totalData: [\n { x: name, y: _target, color: 'target' },\n { x: name, y: _total - _target, color: 'total' },\n ],\n target: _target,\n total: _total,\n scale: newScale,\n };\n }\n return {\n targetData: [{ x: name, y: _target, color: 'target' }],\n totalData: thresholds.map((d, i) => ({\n x: name,\n y: i >= 1 ? d - thresholds[i - 1] : d,\n color: i,\n })),\n target: _target,\n total: _total,\n scale: newScale,\n };\n}\nfunction getTextContent(textStyle, { target, total }) {\n const { content } = textStyle;\n return content ? content(target, total) : target.toString();\n}\nexport const Gauge = (options) => {\n const { data = {}, scale = {}, style = {}, animate = {}, transform = [] } = options, resOptions = __rest(options, [\"data\", \"scale\", \"style\", \"animate\", \"transform\"]);\n const { targetData, totalData, target, total, scale: newScale, } = dataTransform(data, scale);\n const _a = subObject(style, 'text'), { tooltip } = _a, textStyle = __rest(_a, [\"tooltip\"]);\n // pointer + pin\n const indicatorStyle = filterPrefixObject(style, ['pointer', 'pin']);\n const arcStyle = subObject(style, 'arc');\n const shape = arcStyle.shape;\n return [\n deepMix({}, DEFAULT_OPTIONS, Object.assign({ type: 'interval', transform: [{ type: 'stackY' }], data: totalData, scale: newScale, style: shape === 'round' ? Object.assign(Object.assign({}, arcStyle), { shape: GaugeRound }) : arcStyle, animate: typeof animate === 'object' ? subObject(animate, 'arc') : animate }, resOptions)),\n deepMix({}, DEFAULT_OPTIONS, DEFAULT_INDICATOR_OPTIONS, Object.assign({ type: 'point', data: targetData, scale: newScale, style: indicatorStyle, animate: typeof animate === 'object' ? subObject(animate, 'indicator') : animate }, resOptions)),\n deepMix({}, DEFAULT_TEXT_OPTIONS, {\n style: Object.assign({ text: getTextContent(textStyle, { target, total }) }, textStyle),\n tooltip,\n animate: typeof animate === 'object' ? subObject(animate, 'text') : animate,\n }),\n ];\n};\nGauge.props = {};\n//# sourceMappingURL=gauge.js.map","/**\n * @param x center x\n * @param y center y\n * @param radius\n */\nfunction circle(x, y, r) {\n return `\n M ${x} ${y - r} \n a ${r} ${r} 0 1 0 0 ${r * 2}\n a ${r} ${r} 0 1 0 0 ${-r * 2}\n Z\n `;\n}\n/**\n * @param x center x\n * @param y center y\n * @param radius\n */\nfunction rect(x, y, r) {\n const GOLDEN_SECTION_RATIO = 0.618;\n const w = r * GOLDEN_SECTION_RATIO;\n return `\n M ${x - w} ${y - r}\n L ${x + w} ${y - r}\n L ${x + w} ${y + r}\n L ${x - w} ${y + r}\n Z\n `;\n}\n/**\n * @param x center x\n * @param y center y\n * @param radius\n */\nfunction diamond(x, y, r) {\n return `\n M ${x} ${y - r}\n L ${x + r} ${y}\n L ${x} ${y + r}\n L ${x - r} ${y}\n Z\n `;\n}\n/**\n * @param x center x\n * @param y center y\n * @param radius\n */\nfunction triangle(x, y, r) {\n return `\n M ${x} ${y - r}\n L ${x + r} ${y + r}\n L ${x - r} ${y + r}\n Z\n `;\n}\n/**\n * @param x center x\n * @param y center y\n * @param radius\n */\nfunction pin(x, y, radius) {\n const w = (radius * 4) / 3;\n const h = Math.max(w, radius * 2);\n const r = w / 2;\n // Attrs of the upper circle.\n const cx = x;\n const cy = r + y - h / 2;\n const theta = Math.asin(r / ((h - r) * 0.85));\n const dy = Math.sin(theta) * r;\n const dx = Math.cos(theta) * r;\n // The start point of the path.\n const x0 = cx - dx;\n const y0 = cy + dy;\n // Control point.\n const cpX = x;\n const cpY = cy + r / Math.sin(theta);\n return `\n M ${x0} ${y0}\n A ${r} ${r} 0 1 1 ${x0 + dx * 2} ${y0}\n Q ${cpX} ${cpY} ${x} ${y + h / 2}\n Q ${cpX} ${cpY} ${x0} ${y0}\n Z \n `;\n}\nexport const LiquidShapesPath = {\n pin,\n rect,\n circle,\n diamond,\n triangle,\n};\n//# sourceMappingURL=shapes.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { isFunction } from '@antv/util';\nimport { addWave } from './wave';\nimport { LiquidShapesPath } from './shapes';\nconst getLiquidShape = (shape = 'circle') => LiquidShapesPath[shape] || LiquidShapesPath.circle;\nexport const Liquid = (options, context) => {\n if (!context)\n return;\n const { coordinate } = context;\n const { liquidOptions, styleOptions } = options;\n const { liquidShape, percent } = liquidOptions;\n const { background: backgroundStyle, outline = {}, wave = {} } = styleOptions, attr = __rest(styleOptions, [\"background\", \"outline\", \"wave\"]);\n const { border = 2, distance = 0 } = outline, outlineStyle = __rest(outline, [\"border\", \"distance\"]);\n const { length = 192, count = 3 } = wave;\n return (points, cfg, defaultAttr) => {\n const { document } = context.canvas;\n const { color, fillOpacity } = defaultAttr;\n const attrs = Object.assign(Object.assign({ fill: color }, defaultAttr), attr);\n const g = document.createElement('g', {});\n // Center x/y.\n const [centerX, centerY] = coordinate.getCenter();\n // [width,height].\n const size = coordinate.getSize();\n const radius = Math.min(...size) / 2;\n // 1、Gets the path of the overall shape.\n const buildPath = isFunction(liquidShape)\n ? liquidShape\n : getLiquidShape(liquidShape);\n const shapePath = buildPath(centerX, centerY, radius, ...size);\n // 2、Background create.\n if (Object.keys(backgroundStyle).length) {\n const backgroundShape = document.createElement('path', {\n style: Object.assign({ d: shapePath, fill: '#fff' }, backgroundStyle),\n });\n g.appendChild(backgroundShape);\n }\n // Percent > 0 Mapping water waves.\n if (percent > 0) {\n // 3. Clip create.\n const clipShape = document.createElement('path', {\n style: {\n d: shapePath,\n },\n });\n g.appendChild(clipShape);\n g.style.clipPath = clipShape;\n // 4. Wave create.\n addWave(centerX, centerY, 1 - percent, count, attrs, g, clipShape.getBBox().y, radius * 2, length, true, document);\n }\n // 5. Draw distance.\n const distanceShape = document.createElement('path', {\n style: {\n d: shapePath,\n fill: 'transparent',\n lineWidth: border + 2 * distance,\n stroke: '#fff',\n },\n });\n // 6. Draw border.\n const borderShape = document.createElement('path', {\n style: Object.assign(Object.assign(Object.assign({ d: shapePath, stroke: color, strokeOpacity: fillOpacity, lineWidth: border }, attrs), outlineStyle), { fill: 'transparent' }),\n });\n g.appendChild(distanceShape);\n g.appendChild(borderShape);\n return g;\n };\n};\nLiquid.props = {};\n//# sourceMappingURL=liquid.js.map","const DURATION = 5000;\n/**\n * A function of linear mapping.\n * @param min\n * @param max\n * @param factor\n */\nfunction lerp(min, max, factor) {\n return min + (max - min) * factor;\n}\n/**\n * Using Bessel curve to simulate sine wave.\n * Using Bezier curves to fit sine wave.\n * There is 4 control points for each curve of wave,\n * which is at 1/4 wave length of the sine wave.\n *\n * The control points for a wave from (a) to (d) are a-b-c-d:\n * c *----* d\n * b *\n * |\n * ... a * ..................\n *\n * Whose positions are a: (0, 0), b: (0.5, 0.5), c: (1, 1), d: (PI / 2, 1).\n *\n * @param x x position of the left-most point (a).\n * @param stage 0-3, stating which part of the wave it is.\n * @param waveLength wave length of the sine wave.\n * @param amplitude wave amplitude.\n * @return Sinusoidal segment curve.\n */\nfunction getWaterWavePositions(x, stage, waveLength, amplitude) {\n if (stage === 0) {\n return [\n [x + ((1 / 2) * waveLength) / Math.PI / 2, amplitude / 2],\n [x + ((1 / 2) * waveLength) / Math.PI, amplitude],\n [x + waveLength / 4, amplitude],\n ];\n }\n if (stage === 1) {\n return [\n [x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 2), amplitude],\n [\n x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 1),\n amplitude / 2,\n ],\n [x + waveLength / 4, 0],\n ];\n }\n if (stage === 2) {\n return [\n [x + ((1 / 2) * waveLength) / Math.PI / 2, -amplitude / 2],\n [x + ((1 / 2) * waveLength) / Math.PI, -amplitude],\n [x + waveLength / 4, -amplitude],\n ];\n }\n return [\n [x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 2), -amplitude],\n [\n x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 1),\n -amplitude / 2,\n ],\n [x + waveLength / 4, 0],\n ];\n}\n/**\n * Get wave path.\n * @param radius\n * @param waterLevel water level\n * @param waveLength wave length\n * @param phase\n * @param amplitude\n * @param cx center x\n * @param cy center y\n * @return path path\n */\nfunction getWaterWavePath(radius, waterLevel, waveLength, phase, amplitude, cx, cy) {\n const curves = Math.ceil(((2 * radius) / waveLength) * 4) * 4;\n const path = [];\n let _phase = phase;\n // Map phase to [-Math.PI * 2, 0].\n while (_phase < -Math.PI * 2) {\n _phase += Math.PI * 2;\n }\n while (_phase > 0) {\n _phase -= Math.PI * 2;\n }\n _phase = (_phase / Math.PI / 2) * waveLength;\n const left = cx - radius + _phase - radius * 2;\n /**\n * Top-left corner as start point.\n *\n * Draws this point.\n * |\n * \\|/\n * ~~~~~~~~\n * | |\n * +------+\n */\n path.push(['M', left, waterLevel]);\n /**\n * Top wave.\n *\n * ~~~~~~~~ <- Draws this sine wave.\n * | |\n * +------+\n */\n let waveRight = 0;\n for (let c = 0; c < curves; ++c) {\n const stage = c % 4;\n const pos = getWaterWavePositions((c * waveLength) / 4, stage, waveLength, amplitude);\n path.push([\n 'C',\n pos[0][0] + left,\n -pos[0][1] + waterLevel,\n pos[1][0] + left,\n -pos[1][1] + waterLevel,\n pos[2][0] + left,\n -pos[2][1] + waterLevel,\n ]);\n if (c === curves - 1) {\n waveRight = pos[2][0];\n }\n }\n /**\n * Top-right corner.\n *\n * ~~~~~~~~\n * 3. Draws this line. -> | | <- 1. Draws this line.\n * +------+\n * ^\n * |\n * 2. Draws this line.\n */\n path.push(['L', waveRight + left, cy + radius]);\n path.push(['L', left, cy + radius]);\n path.push(['Z']);\n return path;\n}\n/**\n * Add wave.\n * @param x center x\n * @param y center y\n * @param level wave level 0~1\n * @param waveCount wave count\n * @param waveAttrs style\n * @param group g\n * @param minY Minimum height\n * @param radius radius\n * @param waveLength wave length\n * @param animation animation config\n * @param document\n */\nexport function addWave(x, y, level, waveCount, waveAttrs, group, minY, radius, waveLength, animation, document) {\n // Box property Color width height.\n const { fill, fillOpacity, opacity } = waveAttrs;\n // Number of cyclic waveCount.\n for (let idx = 0; idx < waveCount; idx++) {\n const factor = waveCount <= 1 ? 1 : idx / (waveCount - 1);\n const path = getWaterWavePath(radius, minY + radius * level, waveLength, 0, \n // Amplitude height.\n radius / 40, x, y);\n // Create wave path.\n const wave = document.createElement('path', {\n style: {\n d: path,\n fill,\n opacity: lerp(0.2, 0.9, factor) * Number(opacity || fillOpacity),\n },\n });\n group.appendChild(wave);\n try {\n if (animation === false)\n return;\n const keyframes = [\n {\n transform: 'translate(0, 0)',\n },\n {\n transform: `translate(${waveLength * 2}, 0)`,\n },\n ];\n wave.animate(keyframes, {\n duration: lerp(0.5 * DURATION, DURATION, factor) * 2,\n iterations: Infinity,\n });\n }\n catch (e) {\n console.warn('off-screen group animate error!');\n }\n }\n}\n//# sourceMappingURL=wave.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix, isNumber } from '@antv/util';\nimport { subObject } from '../utils/helper';\nimport { prettyNumber } from '../utils/number';\nimport { LiquidShape } from '../shape';\nconst DEFAULT_OPTIONS = {\n axis: {\n x: false,\n y: false,\n },\n legend: false,\n tooltip: false,\n encode: {\n x: 'type',\n y: 'percent',\n },\n scale: {\n y: {\n domain: [0, 1],\n },\n },\n style: {\n shape: LiquidShape,\n },\n animate: {\n enter: {\n type: 'fadeIn',\n },\n },\n};\nconst DEFAULT_TEXT_OPTIONS = {\n type: 'text',\n style: {\n x: '50%',\n y: '50%',\n textAlign: 'center',\n textBaseline: 'middle',\n fontSize: 20,\n fontWeight: 800,\n fill: '#888',\n },\n animate: {\n enter: {\n type: 'fadeIn',\n },\n },\n};\nexport const Liquid = (options) => {\n const { data = {}, style = {}, animate } = options, resOptions = __rest(options, [\"data\", \"style\", \"animate\"]);\n // Compatible with old data structures: { percent: number } and percent >= 0.\n const percent = Math.max(0, isNumber(data) ? data : data === null || data === void 0 ? void 0 : data.percent);\n const newData = [{ percent, type: 'liquid' }];\n const contentStyle = Object.assign(Object.assign({}, subObject(style, 'text')), subObject(style, 'content'));\n const outline = subObject(style, 'outline');\n const wave = subObject(style, 'wave');\n const background = subObject(style, 'background');\n return [\n deepMix({}, DEFAULT_OPTIONS, Object.assign({ type: 'interval', data: newData, style: {\n liquidOptions: {\n percent,\n liquidShape: style === null || style === void 0 ? void 0 : style.shape,\n },\n styleOptions: Object.assign(Object.assign({}, style), { outline,\n wave,\n background }),\n }, animate }, resOptions)),\n deepMix({}, DEFAULT_TEXT_OPTIONS, {\n style: Object.assign({ text: `${prettyNumber(percent * 100)} %` }, contentStyle),\n animate,\n }),\n ];\n};\nLiquid.props = {};\n//# sourceMappingURL=liquid.js.map","const SMALL = 1e-10;\n/**\n * Returns the intersection area of a bunch of circles (where each circle\n * is an object having an x,y and radius property)\n */\nexport function intersectionArea(circles, stats) {\n // Get all the intersection points of the circles\n const intersectionPoints = getIntersectionPoints(circles);\n // Filter out points that aren't included in all the circles\n const innerPoints = intersectionPoints.filter(function (p) {\n return containedInCircles(p, circles);\n });\n let arcArea = 0, polygonArea = 0, i;\n const arcs = [];\n // If we have intersection points that are within all the circles,\n // then figure out the area contained by them\n if (innerPoints.length > 1) {\n // Sort the points by angle from the center of the polygon, which lets\n // us just iterate over points to get the edges\n const center = getCenter(innerPoints);\n for (i = 0; i < innerPoints.length; ++i) {\n const p = innerPoints[i];\n p.angle = Math.atan2(p.x - center.x, p.y - center.y);\n }\n innerPoints.sort(function (a, b) {\n return b.angle - a.angle;\n });\n // Iterate over all points, get arc between the points\n // and update the areas\n let p2 = innerPoints[innerPoints.length - 1];\n for (i = 0; i < innerPoints.length; ++i) {\n const p1 = innerPoints[i];\n // Polygon area updates easily ...\n polygonArea += (p2.x + p1.x) * (p1.y - p2.y);\n // Updating the arc area is a little more involved\n const midPoint = { x: (p1.x + p2.x) / 2, y: (p1.y + p2.y) / 2 };\n let arc = null;\n for (let j = 0; j < p1.parentIndex.length; ++j) {\n if (p2.parentIndex.indexOf(p1.parentIndex[j]) > -1) {\n // Figure out the angle halfway between the two points\n // on the current circle\n const circle = circles[p1.parentIndex[j]], a1 = Math.atan2(p1.x - circle.x, p1.y - circle.y), a2 = Math.atan2(p2.x - circle.x, p2.y - circle.y);\n let angleDiff = a2 - a1;\n if (angleDiff < 0) {\n angleDiff += 2 * Math.PI;\n }\n // and use that angle to figure out the width of the\n // arc\n const a = a2 - angleDiff / 2;\n let width = distance(midPoint, {\n x: circle.x + circle.radius * Math.sin(a),\n y: circle.y + circle.radius * Math.cos(a),\n });\n // Clamp the width to the largest is can actually be\n // (sometimes slightly overflows because of FP errors)\n if (width > circle.radius * 2) {\n width = circle.radius * 2;\n }\n // Pick the circle whose arc has the smallest width\n if (arc === null || arc.width > width) {\n arc = { circle: circle, width: width, p1: p1, p2: p2 };\n }\n }\n }\n if (arc !== null) {\n arcs.push(arc);\n arcArea += circleArea(arc.circle.radius, arc.width);\n p2 = p1;\n }\n }\n }\n else {\n // No intersection points, is either disjoint - or is completely\n // overlapped. figure out which by examining the smallest circle\n let smallest = circles[0];\n for (i = 1; i < circles.length; ++i) {\n if (circles[i].radius < smallest.radius) {\n smallest = circles[i];\n }\n }\n // Make sure the smallest circle is completely contained in all\n // the other circles\n let disjoint = false;\n for (i = 0; i < circles.length; ++i) {\n if (distance(circles[i], smallest) >\n Math.abs(smallest.radius - circles[i].radius)) {\n disjoint = true;\n break;\n }\n }\n if (disjoint) {\n arcArea = polygonArea = 0;\n }\n else {\n arcArea = smallest.radius * smallest.radius * Math.PI;\n arcs.push({\n circle: smallest,\n p1: { x: smallest.x, y: smallest.y + smallest.radius },\n p2: { x: smallest.x - SMALL, y: smallest.y + smallest.radius },\n width: smallest.radius * 2,\n });\n }\n }\n polygonArea /= 2;\n if (stats) {\n stats.area = arcArea + polygonArea;\n stats.arcArea = arcArea;\n stats.polygonArea = polygonArea;\n stats.arcs = arcs;\n stats.innerPoints = innerPoints;\n stats.intersectionPoints = intersectionPoints;\n }\n return arcArea + polygonArea;\n}\n/**\n * Returns whether a point is contained by all of a list of circles\n */\nexport function containedInCircles(point, circles) {\n for (let i = 0; i < circles.length; ++i) {\n if (distance(point, circles[i]) > circles[i].radius + SMALL) {\n return false;\n }\n }\n return true;\n}\n/** Gets all intersection points between a bunch of circles */\nfunction getIntersectionPoints(circles) {\n const ret = [];\n for (let i = 0; i < circles.length; ++i) {\n for (let j = i + 1; j < circles.length; ++j) {\n const intersect = circleCircleIntersection(circles[i], circles[j]);\n for (let k = 0; k < intersect.length; ++k) {\n const p = intersect[k];\n p.parentIndex = [i, j];\n ret.push(p);\n }\n }\n }\n return ret;\n}\n/** Circular segment area calculation. See http://mathworld.wolfram.com/CircularSegment.html */\nexport function circleArea(r, width) {\n return (r * r * Math.acos(1 - width / r) -\n (r - width) * Math.sqrt(width * (2 * r - width)));\n}\n/** Euclidean distance between two points */\nexport function distance(p1, p2) {\n return Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));\n}\n/** Returns the overlap area of two circles of radius r1 and r2 - that\nhave their centers separated by distance d. Simpler faster\ncircle intersection for only two circles */\nexport function circleOverlap(r1, r2, d) {\n // no overlap\n if (d >= r1 + r2) {\n return 0;\n }\n // Completely overlapped\n if (d <= Math.abs(r1 - r2)) {\n return Math.PI * Math.min(r1, r2) * Math.min(r1, r2);\n }\n const w1 = r1 - (d * d - r2 * r2 + r1 * r1) / (2 * d), w2 = r2 - (d * d - r1 * r1 + r2 * r2) / (2 * d);\n return circleArea(r1, w1) + circleArea(r2, w2);\n}\n/** Given two circles (containing a x/y/radius attributes),\nreturns the intersecting points if possible.\nnote: doesn't handle cases where there are infinitely many\nintersection points (circles are equivalent):, or only one intersection point*/\nexport function circleCircleIntersection(p1, p2) {\n const d = distance(p1, p2), r1 = p1.radius, r2 = p2.radius;\n // If to far away, or self contained - can't be done\n if (d >= r1 + r2 || d <= Math.abs(r1 - r2)) {\n return [];\n }\n const a = (r1 * r1 - r2 * r2 + d * d) / (2 * d), h = Math.sqrt(r1 * r1 - a * a), x0 = p1.x + (a * (p2.x - p1.x)) / d, y0 = p1.y + (a * (p2.y - p1.y)) / d, rx = -(p2.y - p1.y) * (h / d), ry = -(p2.x - p1.x) * (h / d);\n return [\n { x: x0 + rx, y: y0 - ry },\n { x: x0 - rx, y: y0 + ry },\n ];\n}\n/** Returns the center of a bunch of points */\nexport function getCenter(points) {\n const center = { x: 0, y: 0 };\n for (let i = 0; i < points.length; ++i) {\n center.x += points[i].x;\n center.y += points[i].y;\n }\n center.x /= points.length;\n center.y /= points.length;\n return center;\n}\n//# sourceMappingURL=circleintersection.js.map","// need some basic operations on vectors, rather than adding a dependency,\n// just define here\nexport function zeros(x) {\n const r = new Array(x);\n for (let i = 0; i < x; ++i) {\n r[i] = 0;\n }\n return r;\n}\nexport function zerosM(x, y) {\n return zeros(x).map(() => zeros(y));\n}\nexport function dot(a, b) {\n let ret = 0;\n for (let i = 0; i < a.length; ++i) {\n ret += a[i] * b[i];\n }\n return ret;\n}\nexport function norm2(a) {\n return Math.sqrt(dot(a, a));\n}\nexport function scale(ret, value, c) {\n for (let i = 0; i < value.length; ++i) {\n ret[i] = value[i] * c;\n }\n}\nexport function weightedSum(ret, w1, v1, w2, v2) {\n for (let j = 0; j < ret.length; ++j) {\n ret[j] = w1 * v1[j] + w2 * v2[j];\n }\n}\nexport function gemv(output, A, x) {\n for (let i = 0; i < output.length; ++i) {\n output[i] = dot(A[i], x);\n }\n}\n//# sourceMappingURL=blas1.js.map","import { bisect, conjugateGradient, nelderMead, norm2, scale, zeros, zerosM, } from './fmin';\nimport { circleCircleIntersection, circleOverlap, distance, intersectionArea, } from './circleintersection';\n/** given a list of set objects, and their corresponding overlaps.\nupdates the (x, y, radius) attribute on each set such that their positions\nroughly correspond to the desired overlaps */\nexport function venn(areas, parameters) {\n parameters = parameters || {};\n parameters.maxIterations = parameters.maxIterations || 500;\n const initialLayout = parameters.initialLayout || bestInitialLayout;\n const loss = parameters.lossFunction || lossFunction;\n // add in missing pairwise areas as having 0 size\n areas = addMissingAreas(areas);\n // initial layout is done greedily\n const circles = initialLayout(areas, parameters);\n // transform x/y coordinates to a vector to optimize\n const initial = [], setids = [];\n let setid;\n for (setid in circles) {\n // eslint-disable-next-line\n if (circles.hasOwnProperty(setid)) {\n initial.push(circles[setid].x);\n initial.push(circles[setid].y);\n setids.push(setid);\n }\n }\n // optimize initial layout from our loss function\n const solution = nelderMead(function (values) {\n const current = {};\n for (let i = 0; i < setids.length; ++i) {\n const setid = setids[i];\n current[setid] = {\n x: values[2 * i],\n y: values[2 * i + 1],\n radius: circles[setid].radius,\n };\n }\n return loss(current, areas);\n }, initial, parameters);\n // transform solution vector back to x/y points\n const positions = solution.x;\n for (let i = 0; i < setids.length; ++i) {\n setid = setids[i];\n circles[setid].x = positions[2 * i];\n circles[setid].y = positions[2 * i + 1];\n }\n return circles;\n}\nconst SMALL = 1e-10;\n/** Returns the distance necessary for two circles of radius r1 + r2 to\nhave the overlap area 'overlap' */\nexport function distanceFromIntersectArea(r1, r2, overlap) {\n // handle complete overlapped circles\n if (Math.min(r1, r2) * Math.min(r1, r2) * Math.PI <= overlap + SMALL) {\n return Math.abs(r1 - r2);\n }\n return bisect(function (distance) {\n return circleOverlap(r1, r2, distance) - overlap;\n }, 0, r1 + r2);\n}\n/** Missing pair-wise intersection area data can cause problems:\n treating as an unknown means that sets will be laid out overlapping,\n which isn't what people expect. To reflect that we want disjoint sets\n here, set the overlap to 0 for all missing pairwise set intersections */\nfunction addMissingAreas(areas) {\n areas = areas.slice();\n // two circle intersections that aren't defined\n const ids = [], pairs = {};\n let i, j, a, b;\n for (i = 0; i < areas.length; ++i) {\n const area = areas[i];\n if (area.sets.length == 1) {\n ids.push(area.sets[0]);\n }\n else if (area.sets.length == 2) {\n a = area.sets[0];\n b = area.sets[1];\n // @ts-ignore\n pairs[[a, b]] = true;\n // @ts-ignore\n pairs[[b, a]] = true;\n }\n }\n ids.sort((a, b) => {\n return a > b ? 1 : -1;\n });\n for (i = 0; i < ids.length; ++i) {\n a = ids[i];\n for (j = i + 1; j < ids.length; ++j) {\n b = ids[j];\n // @ts-ignore\n if (!([a, b] in pairs)) {\n areas.push({ sets: [a, b], size: 0 });\n }\n }\n }\n return areas;\n}\n/// Returns two matrices, one of the euclidean distances between the sets\n/// and the other indicating if there are subset or disjoint set relationships\nexport function getDistanceMatrices(areas, sets, setids) {\n // initialize an empty distance matrix between all the points\n const distances = zerosM(sets.length, sets.length), constraints = zerosM(sets.length, sets.length);\n // compute required distances between all the sets such that\n // the areas match\n areas\n .filter(function (x) {\n return x.sets.length == 2;\n })\n .map(function (current) {\n const left = setids[current.sets[0]], right = setids[current.sets[1]], r1 = Math.sqrt(sets[left].size / Math.PI), r2 = Math.sqrt(sets[right].size / Math.PI), distance = distanceFromIntersectArea(r1, r2, current.size);\n distances[left][right] = distances[right][left] = distance;\n // also update constraints to indicate if its a subset or disjoint\n // relationship\n let c = 0;\n if (current.size + 1e-10 >= Math.min(sets[left].size, sets[right].size)) {\n c = 1;\n }\n else if (current.size <= 1e-10) {\n c = -1;\n }\n constraints[left][right] = constraints[right][left] = c;\n });\n return { distances: distances, constraints: constraints };\n}\n/// computes the gradient and loss simulatenously for our constrained MDS optimizer\nfunction constrainedMDSGradient(x, fxprime, distances, constraints) {\n let loss = 0, i;\n for (i = 0; i < fxprime.length; ++i) {\n fxprime[i] = 0;\n }\n for (i = 0; i < distances.length; ++i) {\n const xi = x[2 * i], yi = x[2 * i + 1];\n for (let j = i + 1; j < distances.length; ++j) {\n const xj = x[2 * j], yj = x[2 * j + 1], dij = distances[i][j], constraint = constraints[i][j];\n const squaredDistance = (xj - xi) * (xj - xi) + (yj - yi) * (yj - yi), distance = Math.sqrt(squaredDistance), delta = squaredDistance - dij * dij;\n if ((constraint > 0 && distance <= dij) ||\n (constraint < 0 && distance >= dij)) {\n continue;\n }\n loss += 2 * delta * delta;\n fxprime[2 * i] += 4 * delta * (xi - xj);\n fxprime[2 * i + 1] += 4 * delta * (yi - yj);\n fxprime[2 * j] += 4 * delta * (xj - xi);\n fxprime[2 * j + 1] += 4 * delta * (yj - yi);\n }\n }\n return loss;\n}\n/// takes the best working variant of either constrained MDS or greedy\nexport function bestInitialLayout(areas, params) {\n let initial = greedyLayout(areas, params);\n const loss = params.lossFunction || lossFunction;\n // greedylayout is sufficient for all 2/3 circle cases. try out\n // constrained MDS for higher order problems, take its output\n // if it outperforms. (greedy is aesthetically better on 2/3 circles\n // since it axis aligns)\n if (areas.length >= 8) {\n const constrained = constrainedMDSLayout(areas, params), constrainedLoss = loss(constrained, areas), greedyLoss = loss(initial, areas);\n if (constrainedLoss + 1e-8 < greedyLoss) {\n initial = constrained;\n }\n }\n return initial;\n}\n/// use the constrained MDS variant to generate an initial layout\nexport function constrainedMDSLayout(areas, params) {\n params = params || {};\n const restarts = params.restarts || 10;\n // bidirectionally map sets to a rowid (so we can create a matrix)\n const sets = [], setids = {};\n let i;\n for (i = 0; i < areas.length; ++i) {\n const area = areas[i];\n if (area.sets.length == 1) {\n setids[area.sets[0]] = sets.length;\n sets.push(area);\n }\n }\n const matrices = getDistanceMatrices(areas, sets, setids);\n let distances = matrices.distances;\n const constraints = matrices.constraints;\n // keep distances bounded, things get messed up otherwise.\n // TODO: proper preconditioner?\n const norm = norm2(distances.map(norm2)) / distances.length;\n distances = distances.map(function (row) {\n return row.map(function (value) {\n return value / norm;\n });\n });\n const obj = function (x, fxprime) {\n return constrainedMDSGradient(x, fxprime, distances, constraints);\n };\n let best, current;\n for (i = 0; i < restarts; ++i) {\n const initial = zeros(distances.length * 2).map(Math.random);\n current = conjugateGradient(obj, initial, params);\n if (!best || current.fx < best.fx) {\n best = current;\n }\n }\n const positions = best.x;\n // translate rows back to (x,y,radius) coordinates\n const circles = {};\n for (i = 0; i < sets.length; ++i) {\n const set = sets[i];\n circles[set.sets[0]] = {\n x: positions[2 * i] * norm,\n y: positions[2 * i + 1] * norm,\n radius: Math.sqrt(set.size / Math.PI),\n };\n }\n if (params.history) {\n for (i = 0; i < params.history.length; ++i) {\n scale(params.history[i].x, norm);\n }\n }\n return circles;\n}\n/** Lays out a Venn diagram greedily, going from most overlapped sets to\nleast overlapped, attempting to position each new set such that the\noverlapping areas to already positioned sets are basically right */\nexport function greedyLayout(areas, params) {\n const loss = params && params.lossFunction ? params.lossFunction : lossFunction;\n // define a circle for each set\n const circles = {}, setOverlaps = {};\n let set;\n for (let i = 0; i < areas.length; ++i) {\n const area = areas[i];\n if (area.sets.length == 1) {\n set = area.sets[0];\n circles[set] = {\n x: 1e10,\n y: 1e10,\n // rowid: circles.length, // fix to ->\n rowid: Object.keys(circles).length,\n size: area.size,\n radius: Math.sqrt(area.size / Math.PI),\n };\n setOverlaps[set] = [];\n }\n }\n areas = areas.filter(function (a) {\n return a.sets.length == 2;\n });\n // map each set to a list of all the other sets that overlap it\n for (let i = 0; i < areas.length; ++i) {\n const current = areas[i];\n // eslint-disable-next-line\n let weight = current.hasOwnProperty('weight') ? current.weight : 1.0;\n const left = current.sets[0], right = current.sets[1];\n // completely overlapped circles shouldn't be positioned early here\n if (current.size + SMALL >=\n Math.min(circles[left].size, circles[right].size)) {\n weight = 0;\n }\n setOverlaps[left].push({ set: right, size: current.size, weight: weight });\n setOverlaps[right].push({ set: left, size: current.size, weight: weight });\n }\n // get list of most overlapped sets\n const mostOverlapped = [];\n for (set in setOverlaps) {\n // eslint-disable-next-line\n if (setOverlaps.hasOwnProperty(set)) {\n let size = 0;\n for (let i = 0; i < setOverlaps[set].length; ++i) {\n size += setOverlaps[set][i].size * setOverlaps[set][i].weight;\n }\n mostOverlapped.push({ set: set, size: size });\n }\n }\n // sort by size desc\n function sortOrder(a, b) {\n return b.size - a.size;\n }\n mostOverlapped.sort(sortOrder);\n // keep track of what sets have been laid out\n const positioned = {};\n function isPositioned(element) {\n return element.set in positioned;\n }\n // adds a point to the output\n function positionSet(point, index) {\n circles[index].x = point.x;\n circles[index].y = point.y;\n positioned[index] = true;\n }\n // add most overlapped set at (0,0)\n positionSet({ x: 0, y: 0 }, mostOverlapped[0].set);\n // get distances between all points. TODO, necessary?\n // answer: probably not\n // var distances = venn.getDistanceMatrices(circles, areas).distances;\n for (let i = 1; i < mostOverlapped.length; ++i) {\n const setIndex = mostOverlapped[i].set, overlap = setOverlaps[setIndex].filter(isPositioned);\n set = circles[setIndex];\n overlap.sort(sortOrder);\n if (overlap.length === 0) {\n // this shouldn't happen anymore with addMissingAreas\n throw 'ERROR: missing pairwise overlap information';\n }\n const points = [];\n for (let j = 0; j < overlap.length; ++j) {\n // get appropriate distance from most overlapped already added set\n const p1 = circles[overlap[j].set], d1 = distanceFromIntersectArea(set.radius, p1.radius, overlap[j].size);\n // sample positions at 90 degrees for maximum aesthetics\n points.push({ x: p1.x + d1, y: p1.y });\n points.push({ x: p1.x - d1, y: p1.y });\n points.push({ y: p1.y + d1, x: p1.x });\n points.push({ y: p1.y - d1, x: p1.x });\n // if we have at least 2 overlaps, then figure out where the\n // set should be positioned analytically and try those too\n for (let k = j + 1; k < overlap.length; ++k) {\n const p2 = circles[overlap[k].set], d2 = distanceFromIntersectArea(set.radius, p2.radius, overlap[k].size);\n const extraPoints = circleCircleIntersection({ x: p1.x, y: p1.y, radius: d1 }, { x: p2.x, y: p2.y, radius: d2 });\n for (let l = 0; l < extraPoints.length; ++l) {\n points.push(extraPoints[l]);\n }\n }\n }\n // we have some candidate positions for the set, examine loss\n // at each position to figure out where to put it at\n let bestLoss = 1e50, bestPoint = points[0];\n for (let j = 0; j < points.length; ++j) {\n circles[setIndex].x = points[j].x;\n circles[setIndex].y = points[j].y;\n const localLoss = loss(circles, areas);\n if (localLoss < bestLoss) {\n bestLoss = localLoss;\n bestPoint = points[j];\n }\n }\n positionSet(bestPoint, setIndex);\n }\n return circles;\n}\n/** Given a bunch of sets, and the desired overlaps between these sets - computes\nthe distance from the actual overlaps to the desired overlaps. Note that\nthis method ignores overlaps of more than 2 circles */\nexport function lossFunction(sets, overlaps) {\n let output = 0;\n function getCircles(indices) {\n return indices.map(function (i) {\n return sets[i];\n });\n }\n for (let i = 0; i < overlaps.length; ++i) {\n const area = overlaps[i];\n let overlap;\n if (area.sets.length == 1) {\n continue;\n }\n else if (area.sets.length == 2) {\n const left = sets[area.sets[0]], right = sets[area.sets[1]];\n overlap = circleOverlap(left.radius, right.radius, distance(left, right));\n }\n else {\n overlap = intersectionArea(getCircles(area.sets));\n }\n // eslint-disable-next-line\n const weight = area.hasOwnProperty('weight') ? area.weight : 1.0;\n output += weight * (overlap - area.size) * (overlap - area.size);\n }\n return output;\n}\n// orientates a bunch of circles to point in orientation\nfunction orientateCircles(circles, orientation, orientationOrder) {\n if (orientationOrder === null) {\n circles.sort(function (a, b) {\n return b.radius - a.radius;\n });\n }\n else {\n circles.sort(orientationOrder);\n }\n let i;\n // shift circles so largest circle is at (0, 0)\n if (circles.length > 0) {\n const largestX = circles[0].x, largestY = circles[0].y;\n for (i = 0; i < circles.length; ++i) {\n circles[i].x -= largestX;\n circles[i].y -= largestY;\n }\n }\n if (circles.length == 2) {\n // if the second circle is a subset of the first, arrange so that\n // it is off to one side. hack for https://github.com/benfred/venn.js/issues/120\n const dist = distance(circles[0], circles[1]);\n if (dist < Math.abs(circles[1].radius - circles[0].radius)) {\n circles[1].x =\n circles[0].x + circles[0].radius - circles[1].radius - 1e-10;\n circles[1].y = circles[0].y;\n }\n }\n // rotate circles so that second largest is at an angle of 'orientation'\n // from largest\n if (circles.length > 1) {\n const rotation = Math.atan2(circles[1].x, circles[1].y) - orientation;\n let x, y;\n const c = Math.cos(rotation), s = Math.sin(rotation);\n for (i = 0; i < circles.length; ++i) {\n x = circles[i].x;\n y = circles[i].y;\n circles[i].x = c * x - s * y;\n circles[i].y = s * x + c * y;\n }\n }\n // mirror solution if third solution is above plane specified by\n // first two circles\n if (circles.length > 2) {\n let angle = Math.atan2(circles[2].x, circles[2].y) - orientation;\n while (angle < 0) {\n angle += 2 * Math.PI;\n }\n while (angle > 2 * Math.PI) {\n angle -= 2 * Math.PI;\n }\n if (angle > Math.PI) {\n const slope = circles[1].y / (1e-10 + circles[1].x);\n for (i = 0; i < circles.length; ++i) {\n const d = (circles[i].x + slope * circles[i].y) / (1 + slope * slope);\n circles[i].x = 2 * d - circles[i].x;\n circles[i].y = 2 * d * slope - circles[i].y;\n }\n }\n }\n}\nexport function disjointCluster(circles) {\n // union-find clustering to get disjoint sets\n circles.map(function (circle) {\n circle.parent = circle;\n });\n // path compression step in union find\n function find(circle) {\n if (circle.parent !== circle) {\n circle.parent = find(circle.parent);\n }\n return circle.parent;\n }\n function union(x, y) {\n const xRoot = find(x), yRoot = find(y);\n xRoot.parent = yRoot;\n }\n // get the union of all overlapping sets\n for (let i = 0; i < circles.length; ++i) {\n for (let j = i + 1; j < circles.length; ++j) {\n const maxDistance = circles[i].radius + circles[j].radius;\n if (distance(circles[i], circles[j]) + 1e-10 < maxDistance) {\n union(circles[j], circles[i]);\n }\n }\n }\n // find all the disjoint clusters and group them together\n const disjointClusters = {};\n let setid;\n for (let i = 0; i < circles.length; ++i) {\n setid = find(circles[i]).parent.setid;\n if (!(setid in disjointClusters)) {\n disjointClusters[setid] = [];\n }\n disjointClusters[setid].push(circles[i]);\n }\n // cleanup bookkeeping\n circles.map(function (circle) {\n delete circle.parent;\n });\n // return in more usable form\n const ret = [];\n for (setid in disjointClusters) {\n // eslint-disable-next-line\n if (disjointClusters.hasOwnProperty(setid)) {\n ret.push(disjointClusters[setid]);\n }\n }\n return ret;\n}\nfunction getBoundingBox(circles) {\n const minMax = function (d) {\n const hi = Math.max.apply(null, circles.map(function (c) {\n return c[d] + c.radius;\n })), lo = Math.min.apply(null, circles.map(function (c) {\n return c[d] - c.radius;\n }));\n return { max: hi, min: lo };\n };\n return { xRange: minMax('x'), yRange: minMax('y') };\n}\nexport function normalizeSolution(solution, orientation, orientationOrder) {\n if (orientation === null) {\n orientation = Math.PI / 2;\n }\n // work with a list instead of a dictionary, and take a copy so we\n // don't mutate input\n let circles = [], i, setid;\n for (setid in solution) {\n // eslint-disable-next-line\n if (solution.hasOwnProperty(setid)) {\n const previous = solution[setid];\n circles.push({\n x: previous.x,\n y: previous.y,\n radius: previous.radius,\n setid: setid,\n });\n }\n }\n // get all the disjoint clusters\n const clusters = disjointCluster(circles);\n // orientate all disjoint sets, get sizes\n for (i = 0; i < clusters.length; ++i) {\n orientateCircles(clusters[i], orientation, orientationOrder);\n const bounds = getBoundingBox(clusters[i]);\n clusters[i].size =\n (bounds.xRange.max - bounds.xRange.min) *\n (bounds.yRange.max - bounds.yRange.min);\n clusters[i].bounds = bounds;\n }\n clusters.sort(function (a, b) {\n return b.size - a.size;\n });\n // orientate the largest at 0,0, and get the bounds\n circles = clusters[0];\n // @ts-ignore fixme 从逻辑上看似乎是不对的,后续看看\n let returnBounds = circles.bounds;\n const spacing = (returnBounds.xRange.max - returnBounds.xRange.min) / 50;\n function addCluster(cluster, right, bottom) {\n if (!cluster)\n return;\n const bounds = cluster.bounds;\n let xOffset, yOffset, centreing;\n if (right) {\n xOffset = returnBounds.xRange.max - bounds.xRange.min + spacing;\n }\n else {\n xOffset = returnBounds.xRange.max - bounds.xRange.max;\n centreing =\n (bounds.xRange.max - bounds.xRange.min) / 2 -\n (returnBounds.xRange.max - returnBounds.xRange.min) / 2;\n if (centreing < 0)\n xOffset += centreing;\n }\n if (bottom) {\n yOffset = returnBounds.yRange.max - bounds.yRange.min + spacing;\n }\n else {\n yOffset = returnBounds.yRange.max - bounds.yRange.max;\n centreing =\n (bounds.yRange.max - bounds.yRange.min) / 2 -\n (returnBounds.yRange.max - returnBounds.yRange.min) / 2;\n if (centreing < 0)\n yOffset += centreing;\n }\n for (let j = 0; j < cluster.length; ++j) {\n cluster[j].x += xOffset;\n cluster[j].y += yOffset;\n circles.push(cluster[j]);\n }\n }\n let index = 1;\n while (index < clusters.length) {\n addCluster(clusters[index], true, false);\n addCluster(clusters[index + 1], false, true);\n addCluster(clusters[index + 2], true, true);\n index += 3;\n // have one cluster (in top left). lay out next three relative\n // to it in a grid\n returnBounds = getBoundingBox(circles);\n }\n // convert back to solution form\n const ret = {};\n for (i = 0; i < circles.length; ++i) {\n ret[circles[i].setid] = circles[i];\n }\n return ret;\n}\n/** Scales a solution from venn.venn or venn.greedyLayout such that it fits in\na rectangle of width/height - with padding around the borders. also\ncenters the diagram in the available space at the same time */\nexport function scaleSolution(solution, width, height, padding) {\n const circles = [], setids = [];\n for (const setid in solution) {\n // eslint-disable-next-line\n if (solution.hasOwnProperty(setid)) {\n setids.push(setid);\n circles.push(solution[setid]);\n }\n }\n width -= 2 * padding;\n height -= 2 * padding;\n const bounds = getBoundingBox(circles), xRange = bounds.xRange, yRange = bounds.yRange;\n if (xRange.max == xRange.min || yRange.max == yRange.min) {\n console.log('not scaling solution: zero size detected');\n return solution;\n }\n const xScaling = width / (xRange.max - xRange.min), yScaling = height / (yRange.max - yRange.min), scaling = Math.min(yScaling, xScaling), \n // while we're at it, center the diagram too\n xOffset = (width - (xRange.max - xRange.min) * scaling) / 2, yOffset = (height - (yRange.max - yRange.min) * scaling) / 2;\n const scaled = {};\n for (let i = 0; i < circles.length; ++i) {\n const circle = circles[i];\n scaled[setids[i]] = {\n radius: scaling * circle.radius,\n x: padding + xOffset + (circle.x - xRange.min) * scaling,\n y: padding + yOffset + (circle.y - yRange.min) * scaling,\n };\n }\n return scaled;\n}\n//# sourceMappingURL=layout.js.map","/** finds the zeros of a function, given two starting points (which must\n * have opposite signs */\nexport function bisect(f, a, b, parameters) {\n parameters = parameters || {};\n const maxIterations = parameters.maxIterations || 100;\n const tolerance = parameters.tolerance || 1e-10;\n const fA = f(a);\n const fB = f(b);\n let delta = b - a;\n if (fA * fB > 0) {\n throw 'Initial bisect points must have opposite signs';\n }\n if (fA === 0)\n return a;\n if (fB === 0)\n return b;\n for (let i = 0; i < maxIterations; ++i) {\n delta /= 2;\n const mid = a + delta;\n const fMid = f(mid);\n if (fMid * fA >= 0) {\n a = mid;\n }\n if (Math.abs(delta) < tolerance || fMid === 0) {\n return mid;\n }\n }\n return a + delta;\n}\n//# sourceMappingURL=bisect.js.map","import { dot, gemv, norm2, scale, weightedSum } from './blas1';\nimport { wolfeLineSearch } from './linesearch';\nexport function conjugateGradient(f, initial, params) {\n // allocate all memory up front here, keep out of the loop for perfomance\n // reasons\n let current = { x: initial.slice(), fx: 0, fxprime: initial.slice() };\n let next = { x: initial.slice(), fx: 0, fxprime: initial.slice() };\n const yk = initial.slice();\n let temp;\n let a = 1;\n params = params || {};\n const maxIterations = params.maxIterations || initial.length * 20;\n current.fx = f(current.x, current.fxprime);\n const pk = current.fxprime.slice();\n scale(pk, current.fxprime, -1);\n for (let i = 0; i < maxIterations; ++i) {\n a = wolfeLineSearch(f, pk, current, next, a);\n // todo: history in wrong spot?\n if (params.history) {\n params.history.push({\n x: current.x.slice(),\n fx: current.fx,\n fxprime: current.fxprime.slice(),\n alpha: a,\n });\n }\n if (!a) {\n // faiiled to find point that satifies wolfe conditions.\n // reset direction for next iteration\n scale(pk, current.fxprime, -1);\n }\n else {\n // update direction using Polak–Ribiere CG method\n weightedSum(yk, 1, next.fxprime, -1, current.fxprime);\n const delta_k = dot(current.fxprime, current.fxprime);\n const beta_k = Math.max(0, dot(yk, next.fxprime) / delta_k);\n weightedSum(pk, beta_k, pk, -1, next.fxprime);\n temp = current;\n current = next;\n next = temp;\n }\n if (norm2(current.fxprime) <= 1e-5) {\n break;\n }\n }\n if (params.history) {\n params.history.push({\n x: current.x.slice(),\n fx: current.fx,\n fxprime: current.fxprime.slice(),\n alpha: a,\n });\n }\n return current;\n}\n/// Solves a system of lienar equations Ax =b for x\n/// using the conjugate gradient method.\nexport function conjugateGradientSolve(A, b, x, history) {\n const r = x.slice();\n const Ap = x.slice();\n let rsold;\n let rsnew;\n let alpha;\n // r = b - A*x\n gemv(Ap, A, x);\n weightedSum(r, 1, b, -1, Ap);\n const p = r.slice();\n rsold = dot(r, r);\n for (let i = 0; i < b.length; ++i) {\n gemv(Ap, A, p);\n alpha = rsold / dot(p, Ap);\n if (history) {\n history.push({ x: x.slice(), p: p.slice(), alpha: alpha });\n }\n //x=x+alpha*p;\n weightedSum(x, 1, x, alpha, p);\n // r=r-alpha*Ap;\n weightedSum(r, 1, r, -alpha, Ap);\n rsnew = dot(r, r);\n if (Math.sqrt(rsnew) <= 1e-10)\n break;\n // p=r+(rsnew/rsold)*p;\n weightedSum(p, 1, r, rsnew / rsold, p);\n rsold = rsnew;\n }\n if (history) {\n history.push({ x: x.slice(), p: p.slice(), alpha: alpha });\n }\n return x;\n}\n//# sourceMappingURL=conjugateGradient.js.map","import { dot, weightedSum } from './blas1';\n/// searches along line 'pk' for a point that satifies the wolfe conditions\n/// See 'Numerical Optimization' by Nocedal and Wright p59-60\n/// f : objective function\n/// pk : search direction\n/// current: object containing current gradient/loss\n/// next: output: contains next gradient/loss\n/// returns a: step size taken\nexport function wolfeLineSearch(f, pk, current, next, a, c1, c2) {\n const phi0 = current.fx;\n const phiPrime0 = dot(current.fxprime, pk);\n let phi = phi0;\n let phi_old = phi0;\n let phiPrime = phiPrime0;\n let a0 = 0;\n a = a || 1;\n c1 = c1 || 1e-6;\n c2 = c2 || 0.1;\n function zoom(a_lo, a_high, phi_lo) {\n for (let iteration = 0; iteration < 16; ++iteration) {\n a = (a_lo + a_high) / 2;\n weightedSum(next.x, 1.0, current.x, a, pk);\n phi = next.fx = f(next.x, next.fxprime);\n phiPrime = dot(next.fxprime, pk);\n if (phi > phi0 + c1 * a * phiPrime0 || phi >= phi_lo) {\n a_high = a;\n }\n else {\n if (Math.abs(phiPrime) <= -c2 * phiPrime0) {\n return a;\n }\n if (phiPrime * (a_high - a_lo) >= 0) {\n a_high = a_lo;\n }\n a_lo = a;\n phi_lo = phi;\n }\n }\n return 0;\n }\n for (let iteration = 0; iteration < 10; ++iteration) {\n weightedSum(next.x, 1.0, current.x, a, pk);\n phi = next.fx = f(next.x, next.fxprime);\n phiPrime = dot(next.fxprime, pk);\n if (phi > phi0 + c1 * a * phiPrime0 || (iteration && phi >= phi_old)) {\n return zoom(a0, a, phi_old);\n }\n if (Math.abs(phiPrime) <= -c2 * phiPrime0) {\n return a;\n }\n if (phiPrime >= 0) {\n return zoom(a, a0, phi);\n }\n phi_old = phi;\n a0 = a;\n a *= 2;\n }\n return a;\n}\n//# sourceMappingURL=linesearch.js.map","import { intersectionAreaPath, scaleSolution, venn } from './utils/venn';\n/**\n * Layout venn data, get the path string for each set.\n */\nexport const Venn = (options) => {\n const { sets = 'sets', size = 'size', as = ['key', 'path'], padding = 0, } = options;\n const [key, path] = as;\n return (data) => {\n // Transform the data, venn layout use `sets` and `size` field.\n const vennData = data.map((d) => (Object.assign(Object.assign({}, d), { sets: d[sets], size: d[size], [key]: d.sets.join('&') })));\n // Sort data, avoid data occlusion.\n vennData.sort((a, b) => a.sets.length - b.sets.length);\n // Layout venn data.\n const solution = venn(vennData);\n let circles;\n return vennData.map((datum) => {\n const setsValue = datum[sets];\n const pathFunc = ({ width, height }) => {\n circles = circles\n ? circles\n : scaleSolution(solution, width, height, padding);\n const setCircles = setsValue.map((set) => circles[set]);\n let p = intersectionAreaPath(setCircles);\n // Close the path for event picker.\n if (!/[zZ]$/.test(p))\n p += ' Z';\n return p;\n };\n return Object.assign(Object.assign({}, datum), { [path]: pathFunc });\n });\n };\n};\nVenn.props = {};\n//# sourceMappingURL=venn.js.map","import { weightedSum } from './blas1';\n/** minimizes a function using the downhill simplex method */\nexport function nelderMead(f, x0, parameters) {\n parameters = parameters || {};\n const maxIterations = parameters.maxIterations || x0.length * 200;\n const nonZeroDelta = parameters.nonZeroDelta || 1.05;\n const zeroDelta = parameters.zeroDelta || 0.001;\n const minErrorDelta = parameters.minErrorDelta || 1e-6;\n const minTolerance = parameters.minErrorDelta || 1e-5;\n const rho = parameters.rho !== undefined ? parameters.rho : 1;\n const chi = parameters.chi !== undefined ? parameters.chi : 2;\n const psi = parameters.psi !== undefined ? parameters.psi : -0.5;\n const sigma = parameters.sigma !== undefined ? parameters.sigma : 0.5;\n let maxDiff;\n // initialize simplex.\n const N = x0.length;\n const simplex = new Array(N + 1);\n simplex[0] = x0;\n simplex[0].fx = f(x0);\n simplex[0].id = 0;\n for (let i = 0; i < N; ++i) {\n const point = x0.slice();\n point[i] = point[i] ? point[i] * nonZeroDelta : zeroDelta;\n simplex[i + 1] = point;\n simplex[i + 1].fx = f(point);\n simplex[i + 1].id = i + 1;\n }\n function updateSimplex(value) {\n for (let i = 0; i < value.length; i++) {\n simplex[N][i] = value[i];\n }\n simplex[N].fx = value.fx;\n }\n const sortOrder = (a, b) => a.fx - b.fx;\n const centroid = x0.slice();\n const reflected = x0.slice();\n const contracted = x0.slice();\n const expanded = x0.slice();\n for (let iteration = 0; iteration < maxIterations; ++iteration) {\n simplex.sort(sortOrder);\n if (parameters.history) {\n // copy the simplex (since later iterations will mutate) and\n // sort it to have a consistent order between iterations\n const sortedSimplex = simplex.map((x) => {\n const state = x.slice();\n state.fx = x.fx;\n state.id = x.id;\n return state;\n });\n sortedSimplex.sort((a, b) => a.id - b.id);\n parameters.history.push({\n x: simplex[0].slice(),\n fx: simplex[0].fx,\n simplex: sortedSimplex,\n });\n }\n maxDiff = 0;\n for (let i = 0; i < N; ++i) {\n maxDiff = Math.max(maxDiff, Math.abs(simplex[0][i] - simplex[1][i]));\n }\n if (Math.abs(simplex[0].fx - simplex[N].fx) < minErrorDelta &&\n maxDiff < minTolerance) {\n break;\n }\n // compute the centroid of all but the worst point in the simplex\n for (let i = 0; i < N; ++i) {\n centroid[i] = 0;\n for (let j = 0; j < N; ++j) {\n centroid[i] += simplex[j][i];\n }\n centroid[i] /= N;\n }\n // reflect the worst point past the centroid and compute loss at reflected\n // point\n const worst = simplex[N];\n weightedSum(reflected, 1 + rho, centroid, -rho, worst);\n reflected.fx = f(reflected);\n // if the reflected point is the best seen, then possibly expand\n if (reflected.fx < simplex[0].fx) {\n weightedSum(expanded, 1 + chi, centroid, -chi, worst);\n expanded.fx = f(expanded);\n if (expanded.fx < reflected.fx) {\n updateSimplex(expanded);\n }\n else {\n updateSimplex(reflected);\n }\n }\n // if the reflected point is worse than the second worst, we need to\n // contract\n else if (reflected.fx >= simplex[N - 1].fx) {\n let shouldReduce = false;\n if (reflected.fx > worst.fx) {\n // do an inside contraction\n weightedSum(contracted, 1 + psi, centroid, -psi, worst);\n contracted.fx = f(contracted);\n if (contracted.fx < worst.fx) {\n updateSimplex(contracted);\n }\n else {\n shouldReduce = true;\n }\n }\n else {\n // do an outside contraction\n weightedSum(contracted, 1 - psi * rho, centroid, psi * rho, worst);\n contracted.fx = f(contracted);\n if (contracted.fx < reflected.fx) {\n updateSimplex(contracted);\n }\n else {\n shouldReduce = true;\n }\n }\n if (shouldReduce) {\n // if we don't contract here, we're done\n if (sigma >= 1)\n break;\n // do a reduction\n for (let i = 1; i < simplex.length; ++i) {\n weightedSum(simplex[i], 1 - sigma, simplex[0], sigma, simplex[i]);\n simplex[i].fx = f(simplex[i]);\n }\n }\n }\n else {\n updateSimplex(reflected);\n }\n }\n simplex.sort(sortOrder);\n return { fx: simplex[0].fx, x: simplex[0] };\n}\n//# sourceMappingURL=nelderMead.js.map","import { intersectionArea } from './circleintersection';\n/**\n * 根据圆心(x, y) 半径 r 返回圆的绘制 path\n * @param x 圆心点 x\n * @param y 圆心点 y\n * @param r 圆的半径\n * @returns 圆的 path\n */\nfunction circlePath(x, y, r) {\n const ret = [];\n // ret.push('\\nM', x, y);\n // ret.push('\\nm', -r, 0);\n // ret.push('\\na', r, r, 0, 1, 0, r * 2, 0);\n // ret.push('\\na', r, r, 0, 1, 0, -r * 2, 0);\n const x0 = x - r;\n const y0 = y;\n ret.push('M', x0, y0);\n ret.push('A', r, r, 0, 1, 0, x0 + 2 * r, y0);\n ret.push('A', r, r, 0, 1, 0, x0, y0);\n return ret.join(' ');\n}\n/** returns a svg path of the intersection area of a bunch of circles */\nexport function intersectionAreaPath(circles) {\n const stats = {};\n intersectionArea(circles, stats);\n const arcs = stats.arcs;\n if (arcs.length === 0) {\n return 'M 0 0';\n }\n else if (arcs.length == 1) {\n const circle = arcs[0].circle;\n return circlePath(circle.x, circle.y, circle.radius);\n }\n else {\n // draw path around arcs\n const ret = ['\\nM', arcs[0].p2.x, arcs[0].p2.y];\n for (let i = 0; i < arcs.length; ++i) {\n const arc = arcs[i], r = arc.circle.radius, wide = arc.width > r;\n ret.push('\\nA', r, r, 0, wide ? 1 : 0, 1, arc.p1.x, arc.p1.y);\n }\n return ret.join(' ');\n }\n}\n//# sourceMappingURL=diagram.js.map","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { plotlib } from '@antv/g2-extension-plot';\nimport { Runtime, extend, stdlib } from '@antv/g2';\nexport var Chart = extend(Runtime, __assign(__assign({}, stdlib()), plotlib()));\n","import { flow } from '../../utils/flow';\nimport { columnWidthRatio } from './style';\nexport function preprocessOption(options) {\n const convertedOptions = adapter(options);\n // If there are children, recursively convert each child node.\n if (convertedOptions.children && Array.isArray(convertedOptions.children)) {\n convertedOptions.children = convertedOptions.children.map((child) => preprocessOption(child));\n }\n return convertedOptions;\n}\n// Entry point for all syntactic sugar functions.\nfunction adapter(options) {\n //@todo define a type for params of flow\n return flow(columnWidthRatio)(options);\n}\n//# sourceMappingURL=index.js.map","/**\n * 类似 lodash.flow 的方法\n * @param flows\n */\nexport function flow(...flows) {\n return (param) => {\n return flows.reduce((result, f) => {\n return f(result);\n }, param);\n };\n}\n//# sourceMappingURL=flow.js.map","import { corelib } from './core';\nimport { geolib } from './geo';\nimport { graphlib } from './graph';\nimport { plotlib } from './plot';\nexport function stdlib() {\n return Object.assign(Object.assign(Object.assign(Object.assign({}, geolib()), graphlib()), plotlib()), corelib());\n}\n//# sourceMappingURL=std.js.map","import { GeoView } from '../composition/geoView';\nimport { GeoPath } from '../composition/geoPath';\nexport function geolib() {\n return {\n 'composition.geoView': GeoView,\n 'composition.geoPath': GeoPath,\n };\n}\n//# sourceMappingURL=geo.js.map","import { Sankey, Treemap, Pack, ForceGraph, Tree, Chord } from '../mark';\nimport { Arc, Cluster } from '../data';\nexport function graphlib() {\n return {\n 'data.arc': Arc,\n 'data.cluster': Cluster,\n 'mark.forceGraph': ForceGraph,\n 'mark.tree': Tree,\n 'mark.pack': Pack,\n 'mark.sankey': Sankey,\n 'mark.chord': Chord,\n 'mark.treemap': Treemap,\n };\n}\n//# sourceMappingURL=graph.js.map","import { Boxplot, WordCloud, Gauge, Liquid } from '../mark';\nimport { Venn } from '../data';\nexport function plotlib() {\n return {\n 'data.venn': Venn,\n 'mark.boxplot': Boxplot,\n 'mark.gauge': Gauge,\n 'mark.wordCloud': WordCloud,\n 'mark.liquid': Liquid,\n };\n}\n//# sourceMappingURL=plot.js.map","import { Cartesian, Polar, Transpose, Theta, Parallel, Fisheye, Radial, Radar, Helix, } from '../coordinate';\nimport { Constant, Field, Transform, Column } from '../encode';\nimport { Cell, Interval, Rect, Line, Point, Text, Area, Image, Polygon, Box, Vector, Link, LineX, LineY, Connector, Range, RangeX, RangeY, Path, Shape, Density, Heatmap, WordCloud as WordCloudGeometry, } from '../mark';\nimport { Category10, Category20 } from '../palette';\nimport { Linear as ScaleLinear, Ordinal as ScaleOrdinal, Band as ScaleBand, Identity as ScaleIdentity, Point as ScalePoint, Time as ScaleTime, Log as ScaleLog, Pow as ScalePow, Threshold as ScaleThreshold, Quantile as ScaleQuantile, Quantize as ScaleQuantize, Sqrt as ScaleSqrt, Sequential as ScaleSequential, Constant as ScaleConstant, } from '../scale';\nimport { Classic, ClassicDark, Academy, Light, Dark } from '../theme';\nimport { AxisX, AxisY, LegendCategory, LegendContinuous, TitleComponent, SliderX, SliderY, ScrollbarX, ScrollbarY, Legends, } from '../component';\nimport { ScaleInX, ScaleOutX, ScaleInY, ScaleOutY, WaveIn, FadeIn, FadeOut, Morphing, ZoomIn, ZoomOut, PathIn, GrowInX, GrowInY, } from '../animation';\nimport { ElementHighlight, ElementHighlightByX, ElementHighlightByColor, ElementSelect, ElementSelectByX, ElementSelectByColor, ChartIndex, Fisheye as ChartFisheye, Tooltip, LegendFilter, LegendHighlight, BrushHighlight, BrushXHighlight, BrushYHighlight, BrushAxisHighlight, BrushFilter, BrushXFilter, BrushYFilter, SliderFilter, Poptip, ScrollbarFilter, TreemapDrillDown, ElementPointMove, } from '../interaction';\nimport { SpaceLayer, SpaceFlex, FacetRect, FacetCircle, RepeatMatrix, TimingKeyframe, } from '../composition';\nimport { StackY, DodgeX, StackEnter, NormalizeY, Jitter, JitterX, JitterY, SymmetryY, DiffY, Select, SelectX, SelectY, GroupX, Group, SortX, FlexX, SortY, GroupY, GroupColor, SortColor, Pack, BinX, Bin, Sample, Filter, } from '../transform';\nimport { Fetch as DataFetch, SortBy as DataSortBy, Filter as DataFilter, Map as DataMap, Pick as DataPick, Rename as DataRename, Fold as DataFold, Slice as DataSlice, Inline as DataInline, Custom as DataCustom, Join as DataJoin, Sort as DataSort, KDE as DataKDE, Log as DataLog, EMA as DataEMA, WordCloud, } from '../data';\nimport { OverlapDodgeY, OverflowHide, ContrastReverse, OverlapHide, ExceedAdjust, OverflowStroke, } from '../label-transform';\nexport function corelib() {\n return {\n 'data.fetch': DataFetch,\n 'data.inline': DataInline,\n 'data.sortBy': DataSortBy,\n 'data.sort': DataSort,\n 'data.filter': DataFilter,\n 'data.pick': DataPick,\n 'data.rename': DataRename,\n 'data.fold': DataFold,\n 'data.slice': DataSlice,\n 'data.custom': DataCustom,\n 'data.map': DataMap,\n 'data.join': DataJoin,\n 'data.kde': DataKDE,\n 'data.log': DataLog,\n 'data.wordCloud': WordCloud,\n 'data.ema': DataEMA,\n 'transform.stackY': StackY,\n 'transform.binX': BinX,\n 'transform.bin': Bin,\n 'transform.dodgeX': DodgeX,\n 'transform.jitter': Jitter,\n 'transform.jitterX': JitterX,\n 'transform.jitterY': JitterY,\n 'transform.symmetryY': SymmetryY,\n 'transform.diffY': DiffY,\n 'transform.stackEnter': StackEnter,\n 'transform.normalizeY': NormalizeY,\n 'transform.select': Select,\n 'transform.selectX': SelectX,\n 'transform.selectY': SelectY,\n 'transform.groupX': GroupX,\n 'transform.groupY': GroupY,\n 'transform.groupColor': GroupColor,\n 'transform.group': Group,\n 'transform.sortX': SortX,\n 'transform.sortY': SortY,\n 'transform.sortColor': SortColor,\n 'transform.flexX': FlexX,\n 'transform.pack': Pack,\n 'transform.sample': Sample,\n 'transform.filter': Filter,\n 'coordinate.cartesian': Cartesian,\n 'coordinate.polar': Polar,\n 'coordinate.transpose': Transpose,\n 'coordinate.theta': Theta,\n 'coordinate.parallel': Parallel,\n 'coordinate.fisheye': Fisheye,\n 'coordinate.radial': Radial,\n 'coordinate.radar': Radar,\n 'coordinate.helix': Helix,\n 'encode.constant': Constant,\n 'encode.field': Field,\n 'encode.transform': Transform,\n 'encode.column': Column,\n 'mark.interval': Interval,\n 'mark.rect': Rect,\n 'mark.line': Line,\n 'mark.point': Point,\n 'mark.text': Text,\n 'mark.cell': Cell,\n 'mark.area': Area,\n 'mark.link': Link,\n 'mark.image': Image,\n 'mark.polygon': Polygon,\n 'mark.box': Box,\n 'mark.vector': Vector,\n 'mark.lineX': LineX,\n 'mark.lineY': LineY,\n 'mark.connector': Connector,\n 'mark.range': Range,\n 'mark.rangeX': RangeX,\n 'mark.rangeY': RangeY,\n 'mark.path': Path,\n 'mark.shape': Shape,\n 'mark.density': Density,\n 'mark.heatmap': Heatmap,\n 'mark.wordCloud': WordCloudGeometry,\n 'palette.category10': Category10,\n 'palette.category20': Category20,\n 'scale.linear': ScaleLinear,\n 'scale.ordinal': ScaleOrdinal,\n 'scale.band': ScaleBand,\n 'scale.identity': ScaleIdentity,\n 'scale.point': ScalePoint,\n 'scale.time': ScaleTime,\n 'scale.log': ScaleLog,\n 'scale.pow': ScalePow,\n 'scale.sqrt': ScaleSqrt,\n 'scale.threshold': ScaleThreshold,\n 'scale.quantile': ScaleQuantile,\n 'scale.quantize': ScaleQuantize,\n 'scale.sequential': ScaleSequential,\n 'scale.constant': ScaleConstant,\n 'theme.classic': Classic,\n 'theme.classicDark': ClassicDark,\n 'theme.academy': Academy,\n 'theme.light': Light,\n 'theme.dark': Dark,\n 'component.axisX': AxisX,\n 'component.axisY': AxisY,\n 'component.legendCategory': LegendCategory,\n 'component.legendContinuous': LegendContinuous,\n 'component.legends': Legends,\n 'component.title': TitleComponent,\n 'component.sliderX': SliderX,\n 'component.sliderY': SliderY,\n 'component.scrollbarX': ScrollbarX,\n 'component.scrollbarY': ScrollbarY,\n 'animation.scaleInX': ScaleInX,\n 'animation.scaleOutX': ScaleOutX,\n 'animation.scaleInY': ScaleInY,\n 'animation.scaleOutY': ScaleOutY,\n 'animation.waveIn': WaveIn,\n 'animation.fadeIn': FadeIn,\n 'animation.fadeOut': FadeOut,\n 'animation.zoomIn': ZoomIn,\n 'animation.zoomOut': ZoomOut,\n 'animation.pathIn': PathIn,\n 'animation.morphing': Morphing,\n 'animation.growInX': GrowInX,\n 'animation.growInY': GrowInY,\n 'interaction.elementHighlight': ElementHighlight,\n 'interaction.elementHighlightByX': ElementHighlightByX,\n 'interaction.elementHighlightByColor': ElementHighlightByColor,\n 'interaction.elementSelect': ElementSelect,\n 'interaction.elementSelectByX': ElementSelectByX,\n 'interaction.elementSelectByColor': ElementSelectByColor,\n 'interaction.fisheye': ChartFisheye,\n 'interaction.chartIndex': ChartIndex,\n 'interaction.tooltip': Tooltip,\n 'interaction.legendFilter': LegendFilter,\n 'interaction.legendHighlight': LegendHighlight,\n 'interaction.brushHighlight': BrushHighlight,\n 'interaction.brushXHighlight': BrushXHighlight,\n 'interaction.brushYHighlight': BrushYHighlight,\n 'interaction.brushAxisHighlight': BrushAxisHighlight,\n 'interaction.brushFilter': BrushFilter,\n 'interaction.brushXFilter': BrushXFilter,\n 'interaction.brushYFilter': BrushYFilter,\n 'interaction.sliderFilter': SliderFilter,\n 'interaction.scrollbarFilter': ScrollbarFilter,\n 'interaction.poptip': Poptip,\n 'interaction.treemapDrillDown': TreemapDrillDown,\n 'interaction.elementPointMove': ElementPointMove,\n 'composition.spaceLayer': SpaceLayer,\n 'composition.spaceFlex': SpaceFlex,\n 'composition.facetRect': FacetRect,\n 'composition.repeatMatrix': RepeatMatrix,\n 'composition.facetCircle': FacetCircle,\n 'composition.timingKeyframe': TimingKeyframe,\n 'labelTransform.overlapHide': OverlapHide,\n 'labelTransform.overlapDodgeY': OverlapDodgeY,\n 'labelTransform.overflowHide': OverflowHide,\n 'labelTransform.contrastReverse': ContrastReverse,\n 'labelTransform.overflowStroke': OverflowStroke,\n 'labelTransform.exceedAdjust': ExceedAdjust,\n };\n}\n//# sourceMappingURL=core.js.map","import { isTranspose } from '../utils/coordinate';\n/**\n * Scale mark from desired shape to nothing in x direction.\n */\nexport const ScaleOutX = (options, context) => {\n // Small enough to hide or show very small part of mark,\n // but bigger enough to not cause bug.\n const ZERO = 0.0001;\n const { coordinate } = context;\n return (from, _, defaults) => {\n const [shape] = from;\n const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = shape.style;\n const [transformOrigin, transform] = isTranspose(coordinate)\n ? [`left bottom`, `scale(1, ${ZERO})`] // left-bottom corner\n : [`left top`, `scale(${ZERO}, 1)`]; // left-top corner\n // Using a short fadeIn transition to hide element with scale(0.001)\n // which is still visible.\n const keyframes = [\n {\n transform: `${prefix} scale(1, 1)`.trimStart(),\n transformOrigin,\n },\n {\n transform: `${prefix} ${transform}`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n offset: 0.99,\n },\n {\n transform: `${prefix} ${transform}`.trimStart(),\n transformOrigin,\n fillOpacity: 0,\n strokeOpacity: 0,\n opacity: 0,\n },\n ];\n const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n return animation;\n };\n};\n//# sourceMappingURL=scaleOutX.js.map","import { isTranspose } from '../utils/coordinate';\n/**\n * Scale mark from desired shape to nothing in y direction.\n */\nexport const ScaleOutY = (options, context) => {\n // Small enough to hide or show very small part of mark,\n // but bigger enough to not cause bug.\n const ZERO = 0.0001;\n const { coordinate } = context;\n return (from, _, defaults) => {\n const [shape] = from;\n const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = shape.style;\n const [transformOrigin, transform] = isTranspose(coordinate)\n ? [`left top`, `scale(${ZERO}, 1)`] // left-top corner\n : [`left bottom`, `scale(1, ${ZERO})`]; // left-bottom corner\n // Using a short fadeIn transition to hide element with scale(0.001)\n // which is still visible.\n const keyframes = [\n {\n transform: `${prefix} scale(1, 1)`.trimStart(),\n transformOrigin,\n },\n {\n transform: `${prefix} ${transform}`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n offset: 0.99,\n },\n {\n transform: `${prefix} ${transform}`.trimStart(),\n transformOrigin,\n fillOpacity: 0,\n strokeOpacity: 0,\n opacity: 0,\n },\n ];\n const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n return animation;\n };\n};\n//# sourceMappingURL=scaleOutY.js.map","export const ZoomOut = (options) => {\n // Small enough to hide or show very small part of mark,\n // but bigger enough to not cause bug.\n const ZERO = 0.0001;\n return (from, _, defaults) => {\n const [shape] = from;\n const { transform: prefix = '', fillOpacity = 1, strokeOpacity = 1, opacity = 1, } = shape.style;\n const transformOrigin = 'center center';\n const keyframes = [\n { transform: `${prefix} scale(1)`.trimStart(), transformOrigin },\n {\n transform: `${prefix} scale(${ZERO})`.trimStart(),\n transformOrigin,\n fillOpacity,\n strokeOpacity,\n opacity,\n offset: 0.99,\n },\n {\n transform: `${prefix} scale(${ZERO})`.trimStart(),\n transformOrigin,\n fillOpacity: 0,\n strokeOpacity: 0,\n opacity: 0,\n },\n ];\n const animation = shape.animate(keyframes, Object.assign(Object.assign({}, defaults), options));\n return animation;\n };\n};\n//# sourceMappingURL=zoomOut.js.map","import { throttle, deepMix } from '@antv/util';\nimport { selectPlotArea, mousePosition } from './utils';\nfunction maybeCoordinate(options) {\n const { coordinate = {} } = options;\n const { transform = [] } = coordinate;\n const fisheye = transform.find((d) => d.type === 'fisheye');\n if (fisheye)\n return fisheye;\n const newFisheye = { type: 'fisheye' };\n transform.push(newFisheye);\n coordinate.transform = transform;\n options.coordinate = coordinate;\n return newFisheye;\n}\n/**\n * @todo Bind abstract data or data index.\n */\nexport function Fisheye({ wait = 30, leading, trailing = false, }) {\n return (context) => {\n const { options, update, setState, container } = context;\n const plotArea = selectPlotArea(container);\n const updateFocus = throttle((event) => {\n const focus = mousePosition(plotArea, event);\n if (!focus) {\n setState('fisheye');\n update();\n return;\n }\n setState('fisheye', (options) => {\n // Clone options and mutate it.\n // Disable animation.\n const clonedOptions = deepMix({}, options, {\n interaction: { tooltip: { preserve: true } },\n });\n for (const mark of clonedOptions.marks)\n mark.animate = false;\n const [x, y] = focus;\n const fisheye = maybeCoordinate(clonedOptions);\n fisheye.focusX = x;\n fisheye.focusY = y;\n fisheye.visual = true;\n return clonedOptions;\n });\n update();\n }, wait, { leading, trailing });\n // Bind events.\n plotArea.addEventListener('pointerenter', updateFocus);\n plotArea.addEventListener('pointermove', updateFocus);\n plotArea.addEventListener('pointerleave', updateFocus);\n return () => {\n plotArea.removeEventListener('pointerenter', updateFocus);\n plotArea.removeEventListener('pointermove', updateFocus);\n plotArea.removeEventListener('pointerleave', updateFocus);\n };\n };\n}\n//# sourceMappingURL=fisheye.js.map","import { group } from '@antv/vendor/d3-array';\nimport { subObject } from '../utils/helper';\nimport { mergeState, selectG2Elements, useState, createValueof, createDatumof, } from './utils';\nimport { markerOf, labelOf, itemsOf, legendsOf, dataOf } from './legendFilter';\nexport function LegendHighlight() {\n return (context, _, emitter) => {\n const { container, view, options } = context;\n const legends = legendsOf(container);\n const elements = selectG2Elements(container);\n const channelOf = (legend) => {\n return dataOf(legend).scales[0].name;\n };\n const scaleOf = (channel) => {\n const { scale: { [channel]: scale }, } = view;\n return scale;\n };\n const markState = mergeState(options, ['active', 'inactive']);\n const valueof = createValueof(elements, createDatumof(view));\n const destroys = [];\n // Bind events for each legend.\n for (const legend of legends) {\n const datumOf = (item) => {\n const { data } = legend.attributes;\n const { __data__: datum } = item;\n const { index } = datum;\n return data[index].label;\n };\n const channel = channelOf(legend);\n const items = itemsOf(legend);\n const scale = scaleOf(channel);\n const elementGroup = group(elements, (d) => scale.invert(d.__data__[channel]));\n const { state: legendState = {} } = legend.attributes;\n const { inactive = {} } = legendState;\n const { setState, removeState } = useState(markState, valueof);\n // Handle styles of inner item.\n const markerStyle = { inactive: subObject(inactive, 'marker') };\n const labelStyle = { inactive: subObject(inactive, 'label') };\n const { setState: setM, removeState: removeM } = useState(markerStyle);\n const { setState: setL, removeState: removeL } = useState(labelStyle);\n const updateLegendState = (highlight) => {\n for (const item of items) {\n const marker = markerOf(item);\n const label = labelOf(item);\n if (item === highlight || highlight === null) {\n removeM(marker, 'inactive');\n removeL(label, 'inactive');\n }\n else {\n setM(marker, 'inactive');\n setL(label, 'inactive');\n }\n }\n };\n const highlightItem = (event, item) => {\n // Update UI.\n const value = datumOf(item);\n const elementSet = new Set(elementGroup.get(value));\n for (const e of elements) {\n if (elementSet.has(e))\n setState(e, 'active');\n else\n setState(e, 'inactive');\n }\n updateLegendState(item);\n // Emit events.\n const { nativeEvent = true } = event;\n if (!nativeEvent)\n return;\n emitter.emit('legend:highlight', Object.assign(Object.assign({}, event), { nativeEvent, data: { channel, value } }));\n };\n const itemPointerover = new Map();\n // Add listener for the legend items.\n for (const item of items) {\n const pointerover = (event) => {\n highlightItem(event, item);\n };\n item.addEventListener('pointerover', pointerover);\n itemPointerover.set(item, pointerover);\n }\n // Add listener for the legend group.\n const pointerleave = (event) => {\n for (const e of elements)\n removeState(e, 'inactive', 'active');\n updateLegendState(null);\n // Emit events.\n const { nativeEvent = true } = event;\n if (!nativeEvent)\n return;\n emitter.emit('legend:unhighlight', { nativeEvent });\n };\n const onHighlight = (event) => {\n const { nativeEvent, data } = event;\n if (nativeEvent)\n return;\n const { channel: specifiedChannel, value } = data;\n if (specifiedChannel !== channel)\n return;\n const item = items.find((d) => datumOf(d) === value);\n if (!item)\n return;\n highlightItem({ nativeEvent: false }, item);\n };\n const onUnHighlight = (event) => {\n const { nativeEvent } = event;\n if (nativeEvent)\n return;\n pointerleave({ nativeEvent: false });\n };\n legend.addEventListener('pointerleave', pointerleave);\n emitter.on('legend:highlight', onHighlight);\n emitter.on('legend:unhighlight', onUnHighlight);\n const destroy = () => {\n legend.removeEventListener(pointerleave);\n emitter.off('legend:highlight', onHighlight);\n emitter.off('legend:unhighlight', onUnHighlight);\n for (const [item, pointerover] of itemPointerover) {\n item.removeEventListener(pointerover);\n }\n };\n destroys.push(destroy);\n }\n return () => destroys.forEach((d) => d());\n };\n}\n//# sourceMappingURL=legendHighlight.js.map","import { BrushFilter } from './brushFilter';\nimport { brushXRegion } from './brushXHighlight';\nexport function BrushXFilter(options) {\n return BrushFilter(Object.assign(Object.assign({ hideX: true }, options), { brushRegion: brushXRegion }));\n}\n//# sourceMappingURL=brushXFilter.js.map","import { BrushFilter } from './brushFilter';\nimport { brushYRegion } from './brushYHighlight';\nexport function BrushYFilter(options) {\n return BrushFilter(Object.assign(Object.assign({ hideY: true }, options), { brushRegion: brushYRegion }));\n}\n//# sourceMappingURL=brushYFilter.js.map","import { isOverlap, parseAABB } from '../utils/bounds';\nimport { hide, show } from '../utils/style';\n/**\n * Hide the label when overlap.\n */\nexport const OverlapHide = (options) => {\n const { priority } = options;\n return (labels) => {\n const displayLabels = [];\n // When overlap, will hide the next label.\n if (priority)\n labels.sort(priority);\n labels.forEach((l) => {\n show(l);\n const b1 = l.getLocalBounds();\n const overlaping = displayLabels.some((dl) => isOverlap(parseAABB(b1), parseAABB(dl.getLocalBounds())));\n if (overlaping)\n hide(l);\n else\n displayLabels.push(l);\n });\n return labels;\n };\n};\n//# sourceMappingURL=overlapHide.js.map","import { isOverflow, parseAABB } from '../utils/bounds';\nimport { hide, show } from '../utils/style';\n/**\n * Hide the label when the label is overflowed from the element.\n */\nexport const OverflowHide = () => {\n return (labels) => {\n labels.forEach((l) => {\n show(l);\n const bounds = l.attr('bounds');\n const b = l.getLocalBounds();\n const overflow = isOverflow(parseAABB(b), bounds);\n if (overflow)\n hide(l);\n });\n return labels;\n };\n};\n//# sourceMappingURL=overflowHide.js.map","import { ANNOTATION_LIST } from '../constants';\nimport { ConversionTag } from './conversion-tag';\nimport { BidirectionalBarAxisText } from './bidirectional-bar-axis-text';\nvar Annotaion = { ConversionTag: ConversionTag, BidirectionalBarAxisText: BidirectionalBarAxisText };\nvar Controller = /** @class */ (function () {\n function Controller(chart, config) {\n this.container = new Map();\n this.chart = chart;\n this.config = config;\n this.init();\n }\n Controller.prototype.init = function () {\n var _this = this;\n ANNOTATION_LIST.forEach(function (annotation) {\n var _a;\n var key = annotation.key, shape = annotation.shape;\n var annotationOptions = _this.config[key];\n if (annotationOptions) {\n var annotationInstance = new Annotaion[shape](_this.chart, annotationOptions);\n var canvas = _this.chart.getContext().canvas;\n canvas.appendChild(annotationInstance);\n _this.container.set(key, annotationInstance);\n }\n else {\n (_a = _this.container.get(key)) === null || _a === void 0 ? void 0 : _a.clear();\n }\n });\n };\n /**\n * Update annotaions\n */\n Controller.prototype.update = function () {\n var _this = this;\n if (!this.container.size)\n return;\n ANNOTATION_LIST.forEach(function (annotation) {\n var key = annotation.key;\n var annotationInstance = _this.container.get(key);\n annotationInstance === null || annotationInstance === void 0 ? void 0 : annotationInstance.update();\n });\n };\n return Controller;\n}());\nexport { Controller };\n","import { flow, transformOptions } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(mark, transformOptions)(params);\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { mark } from '../../adaptor';\nimport { flow, transformOptions, get, isArray, set, omit } from '../../utils';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /**\n * @title 背景图\n * @description 通过新增 interval 实现\n */\n var background = function (params) {\n var options = params.options;\n /**\n * @description 解决更新问题\n */\n if (get(options, 'children.length') > 1) {\n set(options, 'children', [{ type: 'interval' }]);\n }\n var scale = options.scale, markBackground = options.markBackground, data = options.data, children = options.children, yField = options.yField;\n var domain = get(scale, 'y.domain', []);\n if (markBackground && domain.length && isArray(data)) {\n var domainMax_1 = 'domainMax';\n var backgroundData = data.map(function (item) {\n var _a;\n return __assign(__assign({ originData: __assign({}, item) }, omit(item, yField)), (_a = {}, _a[domainMax_1] = domain[domain.length - 1], _a));\n });\n children.unshift(__assign({ type: 'interval', data: backgroundData, yField: domainMax_1, tooltip: false, style: {\n fill: '#eee',\n }, label: false }, markBackground));\n }\n return params;\n };\n return flow(background, mark, transformOptions)(params);\n}\n","import { register } from '@antv/g2';\nexport var reisterShape = function () {\n /**\n * Draw 2.5d bar shape.\n */\n var draw25DBar = function (style, context) {\n return function (points) {\n var _a = style.fill, fill = _a === void 0 ? '#2888FF' : _a, stroke = style.stroke, _b = style.fillOpacity, fillOpacity = _b === void 0 ? 1 : _b, _c = style.strokeOpacity, strokeOpacity = _c === void 0 ? 0.2 : _c, _d = style.pitch, pitch = _d === void 0 ? 8 : _d;\n var p1 = points[0], p2 = points[1], p3 = points[2], p4 = points[3];\n var height = (p2[1] - p1[1]) / 2;\n var document = context.document;\n var g = document.createElement('g', {});\n var top = document.createElement('polygon', {\n style: {\n points: [p1, [p1[0] - pitch, p1[1] + height], [p3[0] - pitch, p1[1] + height], p4],\n fill: fill,\n fillOpacity: fillOpacity,\n stroke: stroke,\n strokeOpacity: strokeOpacity,\n inset: 30,\n },\n });\n var bottom = document.createElement('polygon', {\n style: {\n points: [[p1[0] - pitch, p1[1] + height], p2, p3, [p3[0] - pitch, p1[1] + height]],\n fill: fill,\n fillOpacity: fillOpacity,\n stroke: stroke,\n strokeOpacity: strokeOpacity,\n },\n });\n var right = document.createElement('polygon', {\n style: {\n points: [p1, [p1[0] - pitch, p1[1] + height], p2, [p1[0] + pitch, p1[1] + height]],\n fill: fill,\n fillOpacity: fillOpacity - 0.2,\n },\n });\n g.appendChild(top);\n g.appendChild(bottom);\n g.appendChild(right);\n return g;\n };\n };\n // @ts-ignore\n register('shape.interval.bar25D', draw25DBar);\n};\n","import { register } from '@antv/g2';\nexport var reisterShape = function () {\n /**\n * Draw 2.5d column shape.\n */\n var draw25DColumn = function (style, context) {\n return function (points) {\n var _a = style.fill, fill = _a === void 0 ? '#2888FF' : _a, stroke = style.stroke, _b = style.fillOpacity, fillOpacity = _b === void 0 ? 1 : _b, _c = style.strokeOpacity, strokeOpacity = _c === void 0 ? 0.2 : _c, _d = style.pitch, pitch = _d === void 0 ? 8 : _d;\n var x3 = points[1][0] - points[0][0];\n var x4 = x3 / 2 + points[0][0];\n var document = context.document;\n var g = document.createElement('g', {});\n var left = document.createElement('polygon', {\n style: {\n points: [\n [points[0][0], points[0][1]],\n [x4, points[1][1] + pitch],\n [x4, points[3][1] + pitch],\n [points[3][0], points[3][1]],\n ],\n fill: fill,\n fillOpacity: fillOpacity,\n stroke: stroke,\n strokeOpacity: strokeOpacity,\n inset: 30,\n },\n });\n var right = document.createElement('polygon', {\n style: {\n points: [\n [x4, points[1][1] + pitch],\n [points[1][0], points[1][1]],\n [points[2][0], points[2][1]],\n [x4, points[2][1] + pitch],\n ],\n fill: fill,\n fillOpacity: fillOpacity,\n stroke: stroke,\n strokeOpacity: strokeOpacity,\n },\n });\n var top = document.createElement('polygon', {\n style: {\n points: [\n [points[0][0], points[0][1]],\n [x4, points[1][1] - pitch],\n [points[1][0], points[1][1]],\n [x4, points[1][1] + pitch],\n ],\n fill: fill,\n fillOpacity: fillOpacity - 0.2,\n },\n });\n g.appendChild(right);\n g.appendChild(left);\n g.appendChild(top);\n return g;\n };\n };\n // @ts-ignore\n register('shape.interval.column25D', draw25DColumn);\n};\n","import { mark } from '../../adaptor';\nimport { flow, transformOptions, get, set } from '../../utils';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n var colorField = function (params) {\n var options = params.options;\n var _a = options.children, children = _a === void 0 ? [] : _a, legend = options.legend;\n if (!legend)\n return params;\n children.forEach(function (option) {\n if (!get(option, 'colorField')) {\n var yField_1 = get(option, 'yField');\n set(option, 'colorField', function () { return yField_1; });\n }\n });\n return params;\n };\n /**\n * @description Top level annotations needs to share scale, when top level annotations is not empty, scale needs to be dynamically set.\n */\n var annotations = function (params) {\n var options = params.options;\n var _a = options.annotations, annotations = _a === void 0 ? [] : _a, _b = options.children, children = _b === void 0 ? [] : _b, scale = options.scale;\n var sharedScale = false;\n if (get(scale, 'y.key')) {\n return params;\n }\n children.forEach(function (child, index) {\n if (!get(child, 'scale.y.key')) {\n var scaleKey_1 = \"child\".concat(index, \"Scale\");\n set(child, 'scale.y.key', scaleKey_1);\n var _a = child.annotations, childAnnotations = _a === void 0 ? [] : _a;\n /**\n * @description If the child has annotations, the scale of the child needs to be assigned scaleKey to connect the annotation.\n */\n if (childAnnotations.length > 0) {\n set(child, 'scale.y.independent', false);\n childAnnotations.forEach(function (annotation) {\n set(annotation, 'scale.y.key', scaleKey_1);\n });\n }\n if (!sharedScale && annotations.length > 0 && get(child, 'scale.y.independent') === undefined) {\n sharedScale = true;\n set(child, 'scale.y.independent', false);\n annotations.forEach(function (annotation) {\n set(annotation, 'scale.y.key', scaleKey_1);\n });\n }\n }\n });\n return params;\n };\n return flow(colorField, annotations, mark, transformOptions)(params);\n}\n","import { flow, transformOptions, set, groupBy } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /**\n * 图表差异化处理\n */\n var init = function (params) {\n var options = params.options;\n var xField = options.xField, colorField = options.colorField;\n if (!colorField) {\n set(options, 'colorField', xField);\n }\n return params;\n };\n var transform = function (params) {\n var options = params.options;\n var compareField = options.compareField, transform = options.transform, _a = options.isTransposed, isTransposed = _a === void 0 ? true : _a, coordinate = options.coordinate;\n if (!transform) {\n if (compareField) {\n set(options, 'transform', []);\n }\n else {\n set(options, 'transform', [{ type: 'symmetryY' }]);\n }\n }\n if (!coordinate && isTransposed) {\n set(options, 'coordinate', { transform: [{ type: 'transpose' }] });\n }\n return params;\n };\n var compare = function (params) {\n var options = params.options;\n var compareField = options.compareField, seriesField = options.seriesField, data = options.data, children = options.children, yField = options.yField, _a = options.isTransposed, isTransposed = _a === void 0 ? true : _a;\n if (compareField || seriesField) {\n var groupedData = Object.values(groupBy(data, function (item) { return item[compareField || seriesField]; }));\n children[0].data = groupedData[0];\n children.push({\n type: 'interval',\n data: groupedData[1],\n // @ts-ignore\n yField: function (item) { return -item[yField]; },\n });\n delete options['compareField'];\n delete options.data;\n }\n if (seriesField) {\n set(options, 'type', 'spaceFlex');\n set(options, 'ratio', [1, 1]);\n set(options, 'direction', isTransposed ? 'row' : 'col');\n delete options['seriesField'];\n }\n return params;\n };\n var tooltip = function (params) {\n var options = params.options;\n var tooltip = options.tooltip, xField = options.xField, yField = options.yField;\n if (!tooltip) {\n set(options, 'tooltip', {\n title: false,\n items: [\n function (d) {\n return { name: d[xField], value: d[yField] };\n },\n ],\n });\n }\n return params;\n };\n return flow(init, transform, compare, tooltip, mark, transformOptions)(params);\n}\n","import { flow, transformOptions } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(mark, transformOptions)(params);\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { flow, transformOptions, isArray, set, get, fieldAdapter, isFunction } from '../../utils';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /**\n * @description 当 angleField 总算为 0 时,设置默认样式\n * @link https://github.com/ant-design/ant-design-charts/issues/2324\n */\n var emptyData = function (params) {\n var options = params.options;\n var angleField = options.angleField, data = options.data, label = options.label, tooltip = options.tooltip, colorField = options.colorField;\n var getColorValue = fieldAdapter(colorField);\n if (isArray(data) && data.length > 0) {\n var sum = data.reduce(function (a, b) { return a + b[angleField]; }, 0);\n if (sum === 0) {\n var normalization = data.map(function (item) {\n var _a;\n return (__assign(__assign({}, item), (_a = {}, _a[angleField] = 1, _a)));\n });\n set(options, 'data', normalization);\n if (label) {\n var isColorField = colorField === get(label, 'text');\n set(options, 'label', __assign(__assign({}, label), (isColorField ? {} : { formatter: function () { return 0; } })));\n }\n if (tooltip !== false) {\n if (isFunction(tooltip)) {\n set(options, 'tooltip', function (arg, index, items) {\n var _a;\n return tooltip(__assign(__assign({}, arg), (_a = {}, _a[angleField] = 0, _a)), index, items.map(function (item) {\n var _a;\n return (__assign(__assign({}, item), (_a = {}, _a[angleField] = 0, _a)));\n }));\n });\n }\n else {\n set(options, 'tooltip', __assign(__assign({}, tooltip), { items: [\n function (arg, i, d) {\n return {\n name: getColorValue(arg, i, d),\n value: 0,\n };\n },\n ] }));\n }\n }\n }\n }\n return params;\n };\n return flow(emptyData, transformOptions)(params);\n}\n","import { flow, transformOptions } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(mark, transformOptions)(params);\n}\n","import { flow, transformOptions, get, set } from '../../utils';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /**\n * 图表差异化处理\n */\n var init = function (params) {\n set(params, 'options.coordinate', { type: get(params, 'options.coordinateType', 'polar') });\n return params;\n };\n return flow(init, transformOptions)(params);\n}\n","import { set, flow, transformOptions } from '../../utils';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /**\n * 图表差异化处理\n */\n var init = function (params) {\n var options = params.options;\n var yField = options.yField, children = options.children, _a = options.style, style = _a === void 0 ? {} : _a, _b = options.lineStyle, lineStyle = _b === void 0 ? {} : _b;\n var open = yField[0], close = yField[1], high = yField[2], low = yField[3];\n // 线影,最高价和最低价\n set(children, [0, 'yField'], [high, low]);\n set(children, [0, 'style'], lineStyle);\n // 实体部分,开票价和收盘价\n set(children, [1, 'yField'], [open, close]);\n set(children, [1, 'style'], style);\n delete options.yField;\n delete options.lineStyle;\n delete options.style;\n return params;\n };\n return flow(init, transformOptions)(params);\n}\n","import { flow, transformOptions } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(mark, transformOptions)(params);\n}\n","import { flow, transformOptions } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(mark, transformOptions)(params);\n}\n","import { flow, transformOptions } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(mark, transformOptions)(params);\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { flow, transformOptions } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /**\n * @description 数据转换\n */\n var transformData = function (params) {\n var options = params.options;\n var percent = options.percent, _a = options.color, color = _a === void 0 ? [] : _a;\n if (!percent)\n return params;\n var transformOption = {\n scale: {\n color: { range: color.length ? color : [] },\n },\n data: [1, percent],\n };\n Object.assign(options, __assign({}, transformOption));\n return params;\n };\n return flow(transformData, mark, transformOptions)(params);\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { flow, transformOptions, set } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /**\n * @description radius\n */\n var radius = function (params) {\n var options = params.options;\n var _a = options.radius, radius = _a === void 0 ? 0.8 : _a;\n set(params, 'options.coordinate.innerRadius', radius);\n return params;\n };\n /**\n * @description 数据转换\n */\n var transformData = function (params) {\n var options = params.options;\n var percent = options.percent, _a = options.color, color = _a === void 0 ? [] : _a;\n if (!percent)\n return params;\n var transformOption = {\n scale: {\n color: { range: color.length ? color : [] },\n },\n data: [1, percent],\n };\n Object.assign(options, __assign({}, transformOption));\n return params;\n };\n return flow(radius, transformData, mark, transformOptions)(params);\n}\n","import { flow, transformOptions } from '../../utils';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(transformOptions)(params);\n}\n","export var START_KEY = '__start__';\nexport var END_KEY = '__end__';\nexport var WATERFALL_VALUE = '__waterfall_value__';\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { flow, transformOptions, fieldAdapter, isObject, set } from '../../utils';\nimport { mark } from '../../adaptor';\nimport { START_KEY, END_KEY, WATERFALL_VALUE } from './constants';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /**\n * @description 数据转换\n */\n var transformData = function (params) {\n var options = params.options;\n var _a = options.data, data = _a === void 0 ? [] : _a, yField = options.yField;\n if (!data.length)\n return params;\n data.reduce(function (prev, cur, index) {\n var _a;\n var getFieldData = fieldAdapter(yField);\n var newCur = getFieldData(cur, index, data);\n if (index === 0 || cur.isTotal) {\n cur[START_KEY] = 0;\n cur[END_KEY] = newCur;\n cur[WATERFALL_VALUE] = newCur;\n }\n else {\n var start = (_a = prev[END_KEY]) !== null && _a !== void 0 ? _a : getFieldData(prev, index, data);\n cur[START_KEY] = start;\n cur[END_KEY] = start + newCur;\n cur[WATERFALL_VALUE] = prev[END_KEY];\n }\n return cur;\n }, []);\n Object.assign(options, { yField: [START_KEY, END_KEY] });\n return params;\n };\n /**\n * @description 添加连线信息\n */\n var link = function (params) {\n var options = params.options;\n var _a = options.data, data = _a === void 0 ? [] : _a, xField = options.xField, children = options.children, linkStyle = options.linkStyle;\n var linkData = __spreadArray([], data, true);\n linkData.reduce(function (prev, cur, index) {\n if (index > 0) {\n cur.x1 = prev[xField];\n cur.x2 = cur[xField];\n cur.y1 = prev[END_KEY];\n }\n return cur;\n }, []);\n linkData.shift();\n children.push({\n type: 'link',\n xField: ['x1', 'x2'],\n yField: 'y1',\n // 防止动画或 scrollbar 重绘时 link 层级高于 interval\n zIndex: -1,\n data: linkData,\n style: __assign({ stroke: '#697474' }, linkStyle),\n label: false,\n tooltip: false,\n });\n return params;\n };\n /**\n * @description 连接线\n */\n var connectorTransform = function (params) {\n var options = params.options;\n var _a = options.data, data = _a === void 0 ? [] : _a, connector = options.connector;\n if (!connector)\n return params;\n set(options, 'connector', __assign({ xField: connector.reverse ? ['x2', 'x1'] : ['x1', 'x2'], yField: connector.reverse ? ['y2', 'y1'] : ['y1', 'y2'], data: [\n {\n x1: data[0].x,\n y1: data[0][END_KEY],\n x2: data[data.length - 1].x,\n y2: data[data.length - 1][END_KEY],\n },\n ] }, (isObject(connector) ? connector : {})));\n return params;\n };\n return flow(transformData, link, mark, connectorTransform, transformOptions)(params);\n}\n","import { flow, transformOptions, assign, isNumber, divide, ceil, get } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n var transformHistogramConfig = function (params) {\n var options = params.options;\n var data = options.data, binNumber = options.binNumber, binWidth = options.binWidth, children = options.children, _a = options.channel, channel = _a === void 0 ? 'count' : _a;\n var targetTransform = get(children, '[0].transform[0]', {});\n if (isNumber(binWidth)) {\n assign(targetTransform, { thresholds: ceil(divide(data.length, binWidth)), y: channel });\n return params;\n }\n if (isNumber(binNumber)) {\n assign(targetTransform, { thresholds: binNumber, y: channel });\n return params;\n }\n return params;\n };\n return flow(transformHistogramConfig, mark, transformOptions)(params);\n}\n","import { flow, transformOptions } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /**\n * @description 添加 tooltip 默认值\n */\n var tooltip = function (params) {\n var options = params.options;\n var _a = options.tooltip, tooltip = _a === void 0 ? {} : _a, colorField = options.colorField, sizeField = options.sizeField;\n if (tooltip && !tooltip.field) {\n tooltip.field = colorField || sizeField;\n }\n return params;\n };\n /**\n * @description 根据 mark 修改图表类型\n */\n var transformMark = function (params) {\n var options = params.options;\n var mark = options.mark, children = options.children;\n if (mark) {\n children[0].type = mark;\n }\n return params;\n };\n return flow(tooltip, transformMark, mark, transformOptions)(params);\n}\n","import { flow, transformOptions } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /**\n * 图表差异化处理\n */\n var init = function (params) {\n var _a = params.options.boxType, boxType = _a === void 0 ? 'box' : _a;\n params.options.children[0].type = boxType;\n return params;\n };\n return flow(init, mark, transformOptions)(params);\n}\n","import { mark } from '../../adaptor';\nimport { flow, get, isArray, set, dataTransform, transformOptions } from '../../utils';\nvar defaultTransform = function (params) {\n var options = params.options;\n var data = options.data;\n var transformLinks = [\n {\n type: 'custom',\n callback: function (datum) { return ({ links: datum }); },\n },\n ];\n if (isArray(data)) {\n if (data.length > 0) {\n set(options, 'data', {\n value: data,\n transform: transformLinks,\n });\n }\n else {\n delete options.children;\n }\n }\n else if (get(data, 'type') === 'fetch' && get(data, 'value')) {\n var transform = get(data, 'transform');\n if (!isArray(transform)) {\n set(data, 'transform', transformLinks);\n }\n }\n return params;\n};\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(dataTransform, defaultTransform, mark, transformOptions)(params);\n}\n","/**\n * layout = 'horizontal' | 'vertical'\n * @param params\n * @returns\n */\nexport function coordinateLayout(params) {\n var _a = params.options.layout, layout = _a === void 0 ? 'horizontal' : _a;\n params.options.coordinate.transform = layout !== 'horizontal' ? undefined : [{ type: 'transpose' }];\n return params;\n}\n/**\n * layout = 'horizontal' | 'vertical'\n * all children change\n * @param params\n * @returns\n */\nexport function allCoordinateLayout(params) {\n coordinateLayout(params);\n var _a = params.options.layout, layout = _a === void 0 ? 'horizontal' : _a;\n params.options.children.forEach(function (item) {\n var _a;\n if ((_a = item === null || item === void 0 ? void 0 : item.coordinate) === null || _a === void 0 ? void 0 : _a.transform) {\n item.coordinate.transform = layout !== 'horizontal' ? undefined : [{ type: 'transpose' }];\n }\n });\n return params;\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { allCoordinateLayout } from '../../adaptor';\nimport { flow, transformOptions, map, set, get, isArray, includes, isNumber, mergeWithArrayCoverage, isNil, isString, } from '../../utils';\n// 默认颜色\nexport var DEFAULT_COLORS = ['#f0efff', '#5B8FF9', '#3D76DD'];\n/**\n * 转化为扁平化数据\n * 1、[{ measures: [1,2], title: 'x' }, ...] -> [{ measures: 1, title: 'x', index: 0 }, { measures: 2, title: 'x', index: 1 },...]\n * 2、[{ measures: 1, title: 'x' }, { measures: [2,3], title: 'x' }] ->\n * [{ measures: 1, title: 'x', index: 0 }, { measures: 2, title: 'x', index: 0 }, { measures: 3, title: 'x', index: 1 },...]\n * @param data 数据\n * @param field 通道\n * @param xField x 分类通道\n * @param isSort 是否排序(降序)\n * @returns [扁平化的数据, 最大数据量]\n */\nfunction getTransformData(data, field, xField, isSort) {\n if (isSort === void 0) { isSort = true; }\n var maxSize = 0;\n var isArrayData = false;\n var transformData = map(data, function (d) {\n var _a, _b;\n var fieldData = get(d, [field]);\n // null undefined 以及 Number(string) 为 NaN 的 都去除数据\n if (isNil(fieldData))\n return [];\n if (isString(fieldData)) {\n var numberData = Number(fieldData);\n if (isNaN(numberData))\n return [];\n return _a = {}, _a[xField] = d[xField], _a[field] = numberData, _a;\n }\n // 主要组成为数组的形式\n if (isArray(fieldData)) {\n isArrayData = true;\n maxSize = Math.max(maxSize, fieldData.length);\n return map(isSort ? fieldData.sort(function (a, b) { return b - a; }) : fieldData, function (value, index) {\n var _a;\n return (_a = {},\n _a[xField] = d[xField],\n _a[field] = value,\n _a.index = index,\n _a);\n });\n }\n // 存在则 min 值为 1\n maxSize = Math.max(1, maxSize);\n return _b = {}, _b[xField] = d[xField], _b[field] = fieldData, _b;\n }).flat();\n // 当存在更多分类时,单一的 measures 从 'measures' 的分类,变更为 'measures_0' 的分类\n if (isArrayData) {\n return [\n transformData.map(function (item) { return (__assign({ index: 0 }, item)); }),\n maxSize,\n ];\n }\n return [transformData, maxSize];\n}\n/**\n * 按照最大数据量转化为颜色数组\n * @param maxSize 最大数据量\n * @param color 颜色\n * @returns string[]\n */\nfunction getFieldColor(maxSize, color) {\n return new Array(maxSize).fill('').map(function (d, i) { return (isArray(color) ? color[i % color.length] : color); });\n}\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /**\n * 图表差异化处理\n */\n var init = function (params) {\n var options = params.options;\n var color = options.color, _a = options.rangeField, rangeField = _a === void 0 ? 'ranges' : _a, _b = options.measureField, measureField = _b === void 0 ? 'measures' : _b, _c = options.targetField, targetField = _c === void 0 ? 'targets' : _c, _d = options.xField, xField = _d === void 0 ? 'title' : _d, mapField = options.mapField, data = options.data;\n // 数据进行拍平\n var _e = getTransformData(data, rangeField, xField), rangesData = _e[0], rangesMaxSize = _e[1];\n var _f = getTransformData(data, measureField, xField, false), measuresData = _f[0], measuresMaxSize = _f[1];\n var _g = getTransformData(data, targetField, xField, false), targetsData = _g[0], targetsMaxSize = _g[1];\n // 获取颜色\n var rangesColor = get(color, [rangeField], DEFAULT_COLORS[0]);\n var measuresColor = get(color, [measureField], DEFAULT_COLORS[1]);\n var targetsColor = get(color, [targetField], DEFAULT_COLORS[2]);\n // 获取 scale.color 颜色分类\n var colors = [\n getFieldColor(rangesMaxSize, rangesColor),\n getFieldColor(measuresMaxSize, measuresColor),\n getFieldColor(targetsMaxSize, targetsColor),\n ].flat();\n options.children = map(options.children, function (c, i) {\n var datas = [rangesData, measuresData, targetsData][i];\n var yField = [rangeField, measureField, targetField][i];\n return __assign(__assign({}, c), { data: datas, encode: __assign(__assign({}, (c.encode || {})), { x: xField, y: yField, color: function (d) {\n var index = d.index;\n var mapString = isNumber(index) ? \"\".concat(yField, \"_\").concat(index) : yField;\n return mapField ? get(mapField, [yField, index], mapString) : mapString;\n } }) });\n });\n set(options, 'scale.color.range', colors);\n // legend itemMarker 的形状\n options.legend.color.itemMarker = function (d) {\n if (mapField && includes(mapField === null || mapField === void 0 ? void 0 : mapField[targetField], d)) {\n return 'line';\n }\n return (d === null || d === void 0 ? void 0 : d.replace(/\\_\\d$/, '')) === targetField ? 'line' : 'square';\n };\n return params;\n };\n /**\n * 水平|竖直 方向target配置适配\n * @param params Params\n * @returns params Params\n */\n var layoutAdaptor = function (params) {\n var _a = params.options.transpose, transpose = _a === void 0 ? true : _a;\n if (!transpose) {\n set(params, 'options.children[2].shapeField', 'hyphen');\n }\n return params;\n };\n /**\n * range、measure、target 配置适配\n * @param params Params\n * @returns params Params\n */\n var cfgAdaptor = function (params) {\n var options = params.options;\n var _a = options.range, range = _a === void 0 ? {} : _a, _b = options.measure, measure = _b === void 0 ? {} : _b, _c = options.target, target = _c === void 0 ? {} : _c, children = options.children;\n options.children = [range, measure, target].map(function (c, i) { return mergeWithArrayCoverage(children[i], c); });\n return params;\n };\n return flow(init, layoutAdaptor, cfgAdaptor, allCoordinateLayout, transformOptions)(params);\n}\n","import { flow, transformOptions } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /**\n * 图表差异化处理\n */\n var init = function (params) {\n var data = params.options.data;\n params.options.data = {\n value: data,\n };\n return params;\n };\n return flow(init, mark, transformOptions)(params);\n}\n","import { flow, transformOptions, isNumber, set } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /**\n * 图表差异化处理\n */\n var init = function (params) {\n var percent = params.options.percent;\n if (isNumber(percent)) {\n set(params, 'options.data', percent);\n delete params.options.percent;\n }\n return params;\n };\n return flow(init, mark, transformOptions)(params);\n}\n","import { flow, transformOptions } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(mark, transformOptions)(params);\n}\n","import { flow, transformOptions, dataTransform } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(dataTransform, mark, transformOptions)(params);\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { flow, set, transformOptions, isNumber, get, fieldAdapter } from '../../utils';\nimport { mark } from '../../adaptor';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /**\n * coordinate 配置\n * @param params\n */\n var coordinate = function (params) {\n var options = params.options;\n var startAngle = options.startAngle, maxAngle = options.maxAngle, coordinate = options.coordinate;\n // 默认开始角度是-90度\n var start = isNumber(startAngle) ? (startAngle / (2 * Math.PI)) * 360 : -90;\n // 结束角度通过maxAngle来计算\n var end = isNumber(maxAngle) ? ((Number(maxAngle) + start) / 180) * Math.PI : Math.PI;\n set(params, ['options', 'coordinate'], __assign(__assign({}, coordinate), { endAngle: end, startAngle: startAngle !== null && startAngle !== void 0 ? startAngle : -Math.PI / 2 }));\n return params;\n };\n /**\n * tooltip 配置\n * @param params\n */\n var tooltip = function (params) {\n var options = params.options;\n var tooltip = options.tooltip, xField = options.xField, yField = options.yField;\n var getXFieldData = fieldAdapter(xField);\n var getYFieldData = fieldAdapter(yField);\n if (!tooltip) {\n set(options, 'tooltip', {\n title: false,\n items: [function (d, i, data) { return ({ name: getXFieldData(d, i, data), value: getYFieldData(d, i, data) }); }],\n });\n }\n return params;\n };\n /**\n * background 配置\n * @param params\n */\n var background = function (params) {\n var options = params.options;\n var markBackground = options.markBackground, children = options.children, scale = options.scale, coordinate = options.coordinate, xField = options.xField;\n var domain = get(scale, 'y.domain', []);\n if (markBackground) {\n var style = markBackground.style, rest = __rest(markBackground, [\"style\"]);\n children.unshift(__assign({ type: 'interval', xField: xField, yField: domain[domain.length - 1], style: __assign({ fillOpacity: 0.4, fill: '#e0e4ee' }, style), \n // 背景图需要填满整个圆\n coordinate: __assign(__assign({}, coordinate), { startAngle: -Math.PI / 2, endAngle: (3 / 2) * Math.PI }), animate: false }, rest));\n }\n return params;\n };\n return flow(coordinate, tooltip, background, mark, transformOptions)(params);\n}\n","import { flow, dataTransform, transformOptions } from '../../utils';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(dataTransform, transformOptions)(params);\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { flow, transformOptions, set } from '../../utils';\nimport { mark } from '../../adaptor';\nfunction withField(field1, field2) {\n if (field1)\n return field1;\n return field2;\n}\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /**\n * 图表差异化处理\n */\n var customTransform = function (params) {\n var options = params.options;\n var xField = options.xField, yField = options.yField, colorField = options.colorField, seriesField = options.seriesField, children = options.children;\n var newChildren = children === null || children === void 0 ? void 0 : children.map(function (item) {\n return __assign(__assign({}, item), { xField: xField, yField: yField, seriesField: withField(seriesField, colorField), colorField: withField(colorField, seriesField), data: item.type === 'density'\n ? {\n transform: [\n {\n type: 'kde',\n field: yField,\n groupBy: [xField, withField(seriesField, colorField)],\n },\n ],\n }\n : item.data });\n }).filter(function (item) { return options.box || item.type === 'density'; });\n set(options, 'children', newChildren);\n // 删除底层不消费的字段。\n delete options.box;\n return params;\n };\n return flow(customTransform, mark, transformOptions)(params);\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { mark } from '../../adaptor';\nimport { flow, transformOptions, set, isArray, get, isPlainObject } from '../../utils';\nimport { HORIZONTAL_MARGIN, AXIS_LABEL_PADDING, VERTICAL_MARGIN } from './constants';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /** 除了 yFiled Array 的情况 */\n var field = function (params) {\n var options = params.options;\n var yField = options.yField, children = options.children;\n children.forEach(function (child, index) {\n set(child, 'yField', yField[index]);\n });\n return params;\n };\n /** data 拆分 */\n var data = function (params) {\n var options = params.options;\n var yField = options.yField, children = options.children, data = options.data;\n if (isPlainObject(data))\n return params;\n var transformData = isArray(get(data, [0])) ? data : [data, data];\n children.forEach(function (child, index) {\n set(child, 'data', __spreadArray([], transformData[index].map(function (item) { return (__assign({ groupKey: yField[index] }, item)); }), true));\n });\n return params;\n };\n /** 内置 Tooltip 逻辑 */\n var tooltip = function (params) {\n var options = params.options;\n var _a = options.yField, y1 = _a[0], y2 = _a[1], tooltip = options.tooltip;\n if (!tooltip) {\n set(options, 'tooltip', {\n items: [\n {\n field: y1,\n value: y1,\n },\n {\n field: y2,\n value: y2,\n },\n ],\n });\n }\n return params;\n };\n /** 根据 layout 调整配置 */\n var layout = function (params) {\n var options = params.options;\n var children = options.children, layout = options.layout, transform = options.coordinate.transform, _a = options.paddingBottom, paddingBottom = _a === void 0 ? AXIS_LABEL_PADDING : _a, _b = options.paddingLeft, paddingLeft = _b === void 0 ? AXIS_LABEL_PADDING : _b, axis = options.axis;\n set(options, 'axisText', __assign(__assign({}, ((axis === null || axis === void 0 ? void 0 : axis.x) || {})), { layout: layout }));\n var child1 = children[0], child2 = children[1];\n if (layout === 'vertical') {\n set(options, 'direction', 'col');\n set(options, 'paddingLeft', paddingLeft);\n set(options, 'coordinate.transform', transform.filter(function (item) { return item.type !== 'transpose'; }));\n set(child1, 'paddingBottom', HORIZONTAL_MARGIN);\n set(child2, 'paddingTop', HORIZONTAL_MARGIN);\n set(child2, 'axis.x.position', 'top');\n set(child2, 'scale.y.range', [0, 1]);\n }\n else {\n set(options, 'paddingBottom', paddingBottom);\n set(child1, 'scale.y.range', [0, 1]);\n var _c = child1.paddingRight, paddingRight = _c === void 0 ? VERTICAL_MARGIN : _c;\n var _d = child2.paddingLeft, paddingLeft_1 = _d === void 0 ? VERTICAL_MARGIN : _d;\n set(child1, 'paddingRight', paddingRight);\n set(child1, 'axis.x.position', 'right');\n set(child2, 'paddingLeft', paddingLeft_1);\n }\n return params;\n };\n return flow(field, data, tooltip, layout, mark, transformOptions)(params);\n}\n","import { flow, isArray, set, transformOptions } from '../../utils';\nimport { DefaultTransformKey } from './type';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n /**\n * 图表差异化处理\n */\n var init = function (params) {\n var options = params.options;\n var data = options.data, setsField = options.setsField, sizeField = options.sizeField;\n if (isArray(data)) {\n set(options, 'data', {\n type: 'inline',\n value: data,\n transform: [\n {\n type: 'venn',\n sets: setsField,\n size: sizeField,\n as: [DefaultTransformKey.color, DefaultTransformKey.d],\n },\n ],\n });\n set(options, 'colorField', DefaultTransformKey.color);\n set(options, ['children', '0', 'encode', 'd'], DefaultTransformKey.d);\n }\n return params;\n };\n return flow(init, transformOptions)(params);\n}\n","import { flow, transformOptions, dataTransform } from '../../utils';\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(dataTransform, transformOptions)(params);\n}\n","export * from './types';\nimport * as G2 from '@antv/g2';\nimport { Base } from './plots/base';\nimport { Area } from './plots/area';\nimport { Bar } from './plots/bar';\nimport { Column } from './plots/column';\nimport { DualAxes } from './plots/dual-axes';\nimport { Funnel } from './plots/funnel';\nimport { Line } from './plots/line';\nimport { Pie } from './plots/pie';\nimport { Scatter } from './plots/scatter';\nimport { Radar } from './plots/radar';\nimport { Stock } from './plots/stock';\nimport { TinyLine } from './plots/tiny-line';\nimport { TinyArea } from './plots/tiny-area';\nimport { TinyColumn } from './plots/tiny-column';\nimport { TinyProgress } from './plots/tiny-progress';\nimport { TinyRing } from './plots/tiny-ring';\nimport { Rose } from './plots/rose';\nimport { Waterfall } from './plots/waterfall';\nimport { Histogram } from './plots/histogram';\nimport { Heatmap } from './plots/heatmap';\nimport { Box } from './plots/box';\nimport { Sankey } from './plots/sankey';\nimport { Bullet } from './plots/bullet';\nimport { Gauge } from './plots/gauge';\nimport { Liquid } from './plots/liquid';\nimport { WordCloud } from './plots/wordCloud';\nimport { Treemap } from './plots/treemap';\nimport { RadialBar } from './plots/radial-bar';\nimport { CirclePacking } from './plots/circle-packing';\nimport { Violin } from './plots/violin';\nimport { BidirectionalBar } from './plots/bidirectional-bar';\nimport { Venn } from './plots/venn';\nimport { Mix } from './plots/mix';\nimport { Sunburst } from './plots/sunburst';\nexport { G2 };\nexport var Plots = {\n Base: Base,\n Line: Line,\n Column: Column,\n Pie: Pie,\n Area: Area,\n Bar: Bar,\n DualAxes: DualAxes,\n Funnel: Funnel,\n Scatter: Scatter,\n Radar: Radar,\n Rose: Rose,\n Stock: Stock,\n TinyLine: TinyLine,\n TinyArea: TinyArea,\n TinyColumn: TinyColumn,\n TinyProgress: TinyProgress,\n TinyRing: TinyRing,\n Waterfall: Waterfall,\n Histogram: Histogram,\n Heatmap: Heatmap,\n Box: Box,\n Sankey: Sankey,\n Bullet: Bullet,\n Gauge: Gauge,\n Liquid: Liquid,\n WordCloud: WordCloud,\n Treemap: Treemap,\n RadialBar: RadialBar,\n CirclePacking: CirclePacking,\n Violin: Violin,\n BidirectionalBar: BidirectionalBar,\n Venn: Venn,\n Mix: Mix,\n Sunburst: Sunburst,\n};\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { forwardRef } from 'react';\nimport { ErrorBoundary, ChartLoading } from '@ant-design/charts-util';\nimport useChart from '../../hooks/useChart';\nimport { Plots } from '../../core';\nexport var BaseChart = forwardRef(function (_a, ref) {\n var _b = _a.chartType, chartType = _b === void 0 ? 'Base' : _b, config = __rest(_a, [\"chartType\"]);\n var _c = config.containerStyle, containerStyle = _c === void 0 ? {\n height: 'inherit',\n flex: 1\n } : _c, _d = config.containerAttributes, containerAttributes = _d === void 0 ? {} : _d, className = config.className, loading = config.loading, loadingTemplate = config.loadingTemplate, errorTemplate = config.errorTemplate, onReady = config.onReady, rest = __rest(config, [\"containerStyle\", \"containerAttributes\", \"className\", \"loading\", \"loadingTemplate\", \"errorTemplate\", \"onReady\"]);\n var _e = useChart(Plots[chartType], __assign(__assign({}, rest), { onReady: function (chartInstance) {\n if (ref) {\n if (typeof ref === 'function') {\n ref(chartInstance);\n }\n else {\n ref.current = chartInstance;\n }\n }\n onReady === null || onReady === void 0 ? void 0 : onReady(chartInstance);\n } })), chart = _e.chart, container = _e.container;\n return (React.createElement(ErrorBoundary, { errorTemplate: errorTemplate },\n loading && React.createElement(ChartLoading, { loadingTemplate: loadingTemplate, theme: config.theme, loading: loading }),\n React.createElement(\"div\", __assign({ className: className, style: containerStyle, ref: container }, containerAttributes))));\n});\n","export var isValidElement = function (jsxCode) {\n var jsxRegex = /react|\\.jsx|children:\\[\\(|return\\s+[A-Za-z0-9].createElement\\((?!['\"][g|circle|ellipse|image|rect|line|polyline|polygon|text|path|html|mesh]['\"])([^\\)])*,/i;\n return jsxRegex.test(jsxCode);\n};\n","function internGet({ map, initKey }, value) {\n const key = initKey(value);\n return map.has(key) ? map.get(key) : value;\n}\nfunction internSet({ map, initKey }, value) {\n const key = initKey(value);\n if (map.has(key))\n return map.get(key);\n map.set(key, value);\n return value;\n}\nfunction internDelete({ map, initKey }, value) {\n const key = initKey(value);\n if (map.has(key)) {\n value = map.get(key);\n map.delete(key);\n }\n return value;\n}\nfunction keyof(value) {\n return typeof value === 'object' ? value.valueOf() : value;\n}\n/**\n * @see 参考 https://github.com/mbostock/internmap/blob/main/src/index.js\n */\nexport class InternMap extends Map {\n constructor(entries) {\n super();\n this.map = new Map();\n this.initKey = keyof;\n if (entries !== null) {\n for (const [key, value] of entries) {\n this.set(key, value);\n }\n }\n }\n get(key) {\n return super.get(internGet({ map: this.map, initKey: this.initKey }, key));\n }\n has(key) {\n return super.has(internGet({ map: this.map, initKey: this.initKey }, key));\n }\n set(key, value) {\n return super.set(internSet({ map: this.map, initKey: this.initKey }, key), value);\n }\n delete(key) {\n return super.delete(internDelete({ map: this.map, initKey: this.initKey }, key));\n }\n}\n//# sourceMappingURL=internMap.js.map","import { InternMap } from '../utils';\nimport { Ordinal, defaultUnknown } from './ordinal';\nfunction normalize(array) {\n const min = Math.min(...array);\n return array.map((d) => d / min);\n}\nfunction splice(array, n) {\n const sn = array.length;\n const diff = n - sn;\n return diff > 0 ? [...array, ...new Array(diff).fill(1)] : diff < 0 ? array.slice(0, n) : array;\n}\nfunction pretty(n) {\n return Math.round(n * 1e12) / 1e12;\n}\n/**\n * 基于 band 基础配置获取存在 flex band 的状态\n */\nfunction computeFlexBandState(options) {\n // 如果 flex 比 domain 少,那么就补全\n // 如果 flex 比 domain 多,就截取\n const { domain, range, paddingOuter, paddingInner, flex: F, round, align } = options;\n const n = domain.length;\n const flex = splice(F, n);\n // 根据下面的等式可以计算出所有 step 的总和\n // stepSum = step1 + step2 ... + stepN;\n // stepAverage = stepSum / n;\n // PO = stepAverage * paddingOuter;\n // PI = stepAverage * paddingInner;\n // width = PO * 2 + stepSum - PI;\n const [start, end] = range;\n const width = end - start;\n const ratio = (2 / n) * paddingOuter + 1 - (1 / n) * paddingInner;\n const stepSum = width / ratio;\n // stepSum = (b1 + PI) + (b2 + PI) ... + (bN + PI)\n // = bandSum + PI * n;\n const PI = (stepSum * paddingInner) / n;\n const bandWidthSum = stepSum - n * PI;\n // 计算出最小的 bandWidth\n const normalizedFlex = normalize(flex);\n const flexSum = normalizedFlex.reduce((sum, value) => sum + value);\n const minBandWidth = bandWidthSum / flexSum;\n // 计算每个 bandWidth 和 step,并且用定义域内的值索引\n const valueBandWidth = new InternMap(domain.map((d, i) => {\n const bandWidth = normalizedFlex[i] * minBandWidth;\n return [d, round ? Math.floor(bandWidth) : bandWidth];\n }));\n const valueStep = new InternMap(domain.map((d, i) => {\n const bandWidth = normalizedFlex[i] * minBandWidth;\n const step = bandWidth + PI;\n return [d, round ? Math.floor(step) : step];\n }));\n // 计算起始位置的偏移量\n // 因为 step 可能被 round 了,重新计算所有的 step 的总和\n const finalStepSum = Array.from(valueStep.values()).reduce((sum, value) => sum + value);\n const outerPaddingSum = width - (finalStepSum - (finalStepSum / n) * paddingInner);\n const offset = outerPaddingSum * align;\n // 计算 adjustedRange,也就是 domain 中每个值映射之后的值\n const bandStart = start + offset;\n let prev = round ? Math.round(bandStart) : bandStart;\n const adjustedRange = new Array(n);\n for (let i = 0; i < n; i += 1) {\n // 简单处理精度问题\n adjustedRange[i] = pretty(prev);\n const value = domain[i];\n prev += valueStep.get(value);\n }\n return {\n valueBandWidth,\n valueStep,\n adjustedRange,\n };\n}\n/**\n * 基于 band 基础配置获取 band 的状态\n */\nfunction computeBandState(options) {\n var _a;\n const { domain } = options;\n const n = domain.length;\n if (n === 0) {\n return {\n valueBandWidth: undefined,\n valueStep: undefined,\n adjustedRange: [],\n };\n }\n const hasFlex = !!((_a = options.flex) === null || _a === void 0 ? void 0 : _a.length);\n if (hasFlex) {\n return computeFlexBandState(options);\n }\n const { range, paddingOuter, paddingInner, round, align } = options;\n let step;\n let bandWidth;\n let rangeStart = range[0];\n const rangeEnd = range[1];\n // range 的计算方式如下:\n // = stop - start\n // = (n * step(n 个 step) )\n // + (2 * step * paddingOuter(两边的 padding))\n // - (1 * step * paddingInner(多出的一个 inner))\n const deltaRange = rangeEnd - rangeStart;\n const outerTotal = paddingOuter * 2;\n const innerTotal = n - paddingInner;\n step = deltaRange / Math.max(1, outerTotal + innerTotal);\n // 优化成整数\n if (round) {\n step = Math.floor(step);\n }\n // 基于 align 实现偏移\n rangeStart += (deltaRange - step * (n - paddingInner)) * align;\n // 一个 step 的组成如下:\n // step = bandWidth + step * paddingInner,\n // 则 bandWidth = step - step * (paddingInner)\n bandWidth = step * (1 - paddingInner);\n if (round) {\n rangeStart = Math.round(rangeStart);\n bandWidth = Math.round(bandWidth);\n }\n // 转化后的 range\n const adjustedRange = new Array(n).fill(0).map((_, i) => rangeStart + i * step);\n return {\n valueStep: step,\n valueBandWidth: bandWidth,\n adjustedRange,\n };\n}\n/**\n * Band 比例尺\n *\n * 一种特殊的 ordinal scale,区别在于值域的范围是连续的。\n * 使用的场景例如柱状图,可以用来定位各个柱子水平方向距离原点开始绘制的距离、各柱子之间的间距\n *\n * 由于部分选项较为抽象,见下图描述:\n *\n * BN = bandWidthN\n * SN = stepN\n * domain = [A, B]\n *\n * 约束关系如下\n * width = PO + B1 + PI + B2 + PI ... + BN + PO;\n * PO = (S1 + S2 + ... SN) / N * paddingOuter\n * PI = (S1 + S2 + ... SN) / N * paddingInner\n * BN / BN-1 = flex[n] / flex[n-1]\n *\n * |<------------------------------------------- range ------------------------------------------->|\n * | | | | | | |\n * |<-----PO---->|<------B1--------->|<-----PI---->|<-------B2-------->|<----PI----->|<-----PO---->|\n * | | ***************** | | ***************** | | |\n * | | ******* A ******* | | ******* B ******* | | |\n * | | ***************** | | ***************** | | |\n * | |<--------------S1--------------->| <--------------S2-------------->| |\n * |-----------------------------------------------------------------------------------------------|\n *\n */\nexport class Band extends Ordinal {\n // 覆盖默认配置\n getDefaultOptions() {\n return {\n domain: [],\n range: [0, 1],\n align: 0.5,\n round: false,\n paddingInner: 0,\n paddingOuter: 0,\n padding: 0,\n unknown: defaultUnknown,\n flex: [],\n };\n }\n // 显示指定 options 的类型为 OrdinalOptions,从而推断出 O 的类型\n constructor(options) {\n super(options);\n }\n clone() {\n return new Band(this.options);\n }\n getStep(x) {\n if (this.valueStep === undefined)\n return 1;\n // 没有 flex 的情况时, valueStep 是 number 类型\n if (typeof this.valueStep === 'number') {\n return this.valueStep;\n }\n // 对于 flex 都为 1 的情况,x 不是必须要传入的\n // 这种情况所有的条的 step 都相等,所以返回第一个就好\n if (x === undefined)\n return Array.from(this.valueStep.values())[0];\n return this.valueStep.get(x);\n }\n getBandWidth(x) {\n if (this.valueBandWidth === undefined)\n return 1;\n // 没有 flex, valueBandWidth 是 number 类型\n if (typeof this.valueBandWidth === 'number') {\n return this.valueBandWidth;\n }\n // 对于 flex 都为 1 的情况,x 不是必须要传入的\n // 这种情况所有的条的 bandWidth 都相等,所以返回第一个\n if (x === undefined)\n return Array.from(this.valueBandWidth.values())[0];\n return this.valueBandWidth.get(x);\n }\n getRange() {\n return this.adjustedRange;\n }\n getPaddingInner() {\n const { padding, paddingInner } = this.options;\n return padding > 0 ? padding : paddingInner;\n }\n getPaddingOuter() {\n const { padding, paddingOuter } = this.options;\n return padding > 0 ? padding : paddingOuter;\n }\n rescale() {\n super.rescale();\n // 当用户配置了opt.padding 且非 0 时,我们覆盖已经设置的 paddingInner paddingOuter\n // 我们约定 padding 的优先级较 paddingInner 和 paddingOuter 高\n const { align, domain, range, round, flex } = this.options;\n const { adjustedRange, valueBandWidth, valueStep } = computeBandState({\n align,\n range,\n round,\n flex,\n paddingInner: this.getPaddingInner(),\n paddingOuter: this.getPaddingOuter(),\n domain,\n });\n // 更新必要的属性\n this.valueStep = valueStep;\n this.valueBandWidth = valueBandWidth;\n this.adjustedRange = adjustedRange;\n }\n}\n//# sourceMappingURL=band.js.map","import { createContext } from 'react';\nexport default /*#__PURE__*/createContext(null);","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","!function(r,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(r=\"undefined\"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){\"use strict\";return function(r,e,t){r=r||{};var n=e.prototype,o={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:\"s\",r:44,d:\"second\"},{l:\"m\",r:89},{l:\"mm\",r:44,d:\"minute\"},{l:\"h\",r:89},{l:\"hh\",r:21,d:\"hour\"},{l:\"d\",r:35},{l:\"dd\",r:25,d:\"day\"},{l:\"M\",r:45},{l:\"MM\",r:10,d:\"month\"},{l:\"y\",r:17},{l:\"yy\",d:\"year\"}],m=h.length,c=0;c0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(\"\"+p)),a=\"string\"==typeof v?v.replace(\"%d\",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return\"function\"==typeof M?M(a):M.replace(\"%s\",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}}));","import { __assign, __read } from \"tslib\";\n/* global Keyframe */\nimport { isNil } from '@antv/util';\nimport { show, hide } from '../util';\nfunction isStandardAnimationOption(option) {\n if (typeof option === 'boolean')\n return false;\n return 'enter' in option && 'update' in option && 'exit' in option;\n}\nexport function parseAnimationOption(option) {\n // option is false => all animation is false\n // option is { enter: {}, update: {}, exit: {}, ...baseOption } =>\n // { enter: { ...enter, ...baseOption }, update: { ...update, ...baseOption }, exit: { ...exit, ...baseOption } }\n // option is { enter: {}, update: {}, exit: {} } => option\n if (!option)\n return { enter: false, update: false, exit: false };\n var keys = ['enter', 'update', 'exit'];\n var baseOption = Object.fromEntries(Object.entries(option).filter(function (_a) {\n var _b = __read(_a, 1), k = _b[0];\n return !keys.includes(k);\n }));\n return Object.fromEntries(keys.map(function (k) {\n if (isStandardAnimationOption(option)) {\n if (option[k] === false)\n return [k, false];\n return [k, __assign(__assign({}, option[k]), baseOption)];\n }\n return [k, baseOption];\n }));\n}\nexport function onAnimateFinished(animation, callback) {\n if (!animation)\n callback();\n else\n animation.finished.then(callback);\n}\nexport function onAnimatesFinished(animations, callback) {\n if (animations.length === 0)\n callback();\n else\n Promise.all(animations.map(function (a) { return a === null || a === void 0 ? void 0 : a.finished; })).then(callback);\n}\nfunction attr(target, value) {\n if ('update' in target)\n target.update(value);\n else\n target.attr(value);\n}\nexport function animate(target, keyframes, options) {\n if (keyframes.length === 0)\n return null;\n if (!options) {\n var state = keyframes.slice(-1)[0];\n attr(target, { style: state });\n return null;\n }\n return target.animate(keyframes, options);\n}\nfunction identicalTextNode(source, target) {\n if (source.nodeName !== 'text' || target.nodeName !== 'text')\n return false;\n if (source.attributes.text !== target.attributes.text)\n return false;\n return true;\n}\n/**\n * transition source shape to target shape\n * @param source\n * @param target\n * @param options\n * @param after destroy or hide source shape after transition\n */\nexport function transitionShape(source, target, options, after) {\n if (after === void 0) { after = 'destroy'; }\n // If source and target are both text node and with same text,\n // do not apply shape animation.\n if (identicalTextNode(source, target)) {\n source.remove();\n return [null];\n }\n var afterTransition = function () {\n if (after === 'destroy')\n source.destroy();\n else if (after === 'hide')\n hide(source);\n if (target.isVisible())\n show(target);\n };\n if (!options) {\n afterTransition();\n return [null];\n }\n var _a = options.duration, duration = _a === void 0 ? 0 : _a, _b = options.delay, delay = _b === void 0 ? 0 : _b;\n var middle = Math.ceil(+duration / 2);\n var offset = +duration / 4;\n var _c = __read(source.getGeometryBounds().center, 2), sx = _c[0], sy = _c[1];\n var _d = __read(target.getGeometryBounds().center, 2), ex = _d[0], ey = _d[1];\n var _e = __read([(sx + ex) / 2 - sx, (sy + ey) / 2 - sy], 2), mx = _e[0], my = _e[1];\n var _f = source.style.opacity, so = _f === void 0 ? 1 : _f;\n var _g = target.style.opacity, to = _g === void 0 ? 1 : _g;\n var st = source.style.transform || '';\n var tt = target.style.transform || '';\n // const st = source.style._transform || '';\n // const tt = target.style._transform || '';\n var sourceAnimation = source.animate([\n { opacity: so, transform: \"translate(0, 0) \".concat(st) },\n { opacity: 0, transform: \"translate(\".concat(mx, \", \").concat(my, \") \").concat(st) },\n ], __assign(__assign({ fill: 'both' }, options), { duration: delay + middle + offset }));\n var targetAnimation = target.animate([\n { opacity: 0, transform: \"translate(\".concat(-mx, \", \").concat(-my, \") \").concat(tt), offset: 0.01 },\n { opacity: to, transform: \"translate(0, 0) \".concat(tt) },\n ], __assign(__assign({ fill: 'both' }, options), { duration: middle + offset, delay: delay + middle - offset }));\n onAnimateFinished(targetAnimation, afterTransition);\n return [sourceAnimation, targetAnimation];\n}\n/**\n * execute transition animation on element\n * @description in the current stage, only support the following properties:\n * x, y, width, height, opacity, fill, stroke, lineWidth, radius\n * @param target element to be animated\n * @param state target properties or element\n * @param options transition options\n * @param animate whether to animate\n * @returns transition instance\n */\nexport function transition(target, state, options) {\n var from = {};\n var to = {};\n Object.entries(state).forEach(function (_a) {\n var _b = __read(_a, 2), key = _b[0], tarStyle = _b[1];\n if (!isNil(tarStyle)) {\n // 关闭 CSS 解析后,attr / getAttribute 只能获取到用户显式传入的属性,此时可以\n // 获取解析值,如果仍获取不到(例如 x/y),则使用 0 作为默认值\n var currStyle = target.style[key] || target.parsedStyle[key] || 0; // x/y\n if (currStyle !== tarStyle) {\n from[key] = currStyle;\n to[key] = tarStyle;\n }\n }\n });\n if (!options) {\n attr(target, to);\n return null;\n }\n return animate(target, [from, to], __assign({ fill: 'both' }, options));\n}\n//# sourceMappingURL=utils.js.map","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/source/vector.ts\nimport { VectorTile } from \"@mapbox/vector-tile\";\nimport Protobuf from \"pbf\";\nvar VectorSource = class {\n constructor(data, x, y, z) {\n this.vectorLayerCache = {};\n this.x = x;\n this.y = y;\n this.z = z;\n this.vectorTile = new VectorTile(new Protobuf(data));\n }\n getTileData(sourceLayer) {\n if (!sourceLayer || !this.vectorTile.layers[sourceLayer]) {\n return [];\n }\n if (this.vectorLayerCache[sourceLayer]) {\n return this.vectorLayerCache[sourceLayer];\n }\n const vectorTile = this.vectorTile.layers[sourceLayer];\n if (Array.isArray(vectorTile.features)) {\n this.vectorLayerCache[sourceLayer] = vectorTile.features;\n return vectorTile.features;\n }\n const features = [];\n for (let i = 0; i < vectorTile.length; i++) {\n const vectorTileFeature = vectorTile.feature(i);\n const feature = vectorTileFeature.toGeoJSON(this.x, this.y, this.z);\n features.push(__spreadProps(__spreadValues({}, feature), {\n properties: __spreadValues({\n id: feature.id\n }, feature.properties)\n }));\n }\n this.vectorLayerCache[sourceLayer] = features;\n return features;\n }\n getFeatureById() {\n throw new Error(\"Method not implemented.\");\n }\n};\nexport {\n VectorSource as default\n};\n","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"valueType\", \"customLightMode\", \"lightFilterLabelFormatter\", \"valuePropName\", \"ignoreWidth\", \"defaultProps\"],\n _excluded2 = [\"label\", \"tooltip\", \"placeholder\", \"width\", \"bordered\", \"messageVariables\", \"ignoreFormItem\", \"transform\", \"convertValue\", \"readonly\", \"allowClear\", \"colSize\", \"getFormItemProps\", \"getFieldProps\", \"filedConfig\", \"cacheForSwr\", \"proFieldProps\"];\nimport { omitUndefined, pickProFormItemProps, stringify, useDeepCompareMemo, useRefFunction } from '@ant-design/pro-utils';\nimport classnames from 'classnames';\nimport { FieldContext as RcFieldContext } from 'rc-field-form';\nimport { noteOnce } from \"rc-util/es/warning\";\nimport React, { useContext, useMemo, useState } from 'react';\nimport FieldContext from \"../FieldContext\";\nimport { ProFormDependency, ProFormItem } from \"../components\";\nimport { useGridHelpers } from \"../helpers\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var TYPE = Symbol('ProFormComponent');\nvar WIDTH_SIZE_ENUM = {\n // 适用于短数字,短文本或者选项\n xs: 104,\n s: 216,\n // 适用于较短字段录入、如姓名、电话、ID 等。\n sm: 216,\n m: 328,\n // 标准宽度,适用于大部分字段长度。\n md: 328,\n l: 440,\n // 适用于较长字段录入,如长网址、标签组、文件路径等。\n lg: 440,\n // 适用于长文本录入,如长链接、描述、备注等,通常搭配自适应多行输入框或定高文本域使用。\n xl: 552\n};\nvar ignoreWidthValueType = ['switch', 'radioButton', 'radio', 'rate'];\n\n/**\n * 处理fieldProps和formItemProps为function时传进来的方法\n * 目前只在SchemaForm时可能会有\n */\n\n/**\n * 这个方法的主要作用是帮助 Field 增加 FormItem 同时也会处理 lightFilter\n *\n * @param Field\n * @param config\n */\nfunction createField(Field, config) {\n // 标记是否是 ProForm 的组件\n // @ts-ignore\n // eslint-disable-next-line no-param-reassign\n Field.displayName = 'ProFormComponent';\n var FieldWithContext = function FieldWithContext(props) {\n var _props$filedConfig$co = _objectSpread(_objectSpread({}, props === null || props === void 0 ? void 0 : props.filedConfig), config),\n tmpValueType = _props$filedConfig$co.valueType,\n customLightMode = _props$filedConfig$co.customLightMode,\n lightFilterLabelFormatter = _props$filedConfig$co.lightFilterLabelFormatter,\n _props$filedConfig$co2 = _props$filedConfig$co.valuePropName,\n valuePropName = _props$filedConfig$co2 === void 0 ? 'value' : _props$filedConfig$co2,\n ignoreWidth = _props$filedConfig$co.ignoreWidth,\n defaultProps = _props$filedConfig$co.defaultProps,\n defaultFormItemProps = _objectWithoutProperties(_props$filedConfig$co, _excluded);\n var _defaultProps$props = _objectSpread(_objectSpread({}, defaultProps), props),\n label = _defaultProps$props.label,\n tooltip = _defaultProps$props.tooltip,\n placeholder = _defaultProps$props.placeholder,\n width = _defaultProps$props.width,\n bordered = _defaultProps$props.bordered,\n messageVariables = _defaultProps$props.messageVariables,\n ignoreFormItem = _defaultProps$props.ignoreFormItem,\n transform = _defaultProps$props.transform,\n convertValue = _defaultProps$props.convertValue,\n readonly = _defaultProps$props.readonly,\n allowClear = _defaultProps$props.allowClear,\n colSize = _defaultProps$props.colSize,\n getFormItemProps = _defaultProps$props.getFormItemProps,\n getFieldProps = _defaultProps$props.getFieldProps,\n filedConfig = _defaultProps$props.filedConfig,\n cacheForSwr = _defaultProps$props.cacheForSwr,\n proFieldProps = _defaultProps$props.proFieldProps,\n rest = _objectWithoutProperties(_defaultProps$props, _excluded2);\n var valueType = tmpValueType || rest.valueType;\n\n // 有些 valueType 不需要宽度\n var isIgnoreWidth = useMemo(function () {\n return ignoreWidth || ignoreWidthValueType.includes(valueType);\n }, [ignoreWidth, valueType]);\n var _useState = useState(),\n _useState2 = _slicedToArray(_useState, 2),\n forceUpdate = _useState2[1];\n\n // onChange触发fieldProps,formItemProps重新执行\n var _useState3 = useState(),\n _useState4 = _slicedToArray(_useState3, 2),\n onlyChange = _useState4[0],\n forceUpdateByOnChange = _useState4[1];\n\n /**\n * 从 context 中拿到的值\n */\n var contextValue = React.useContext(FieldContext);\n\n /**\n * dependenciesValues change to trigger re-execute of getFieldProps and getFormItemProps\n */\n var changedProps = useDeepCompareMemo(function () {\n return {\n formItemProps: getFormItemProps === null || getFormItemProps === void 0 ? void 0 : getFormItemProps(),\n fieldProps: getFieldProps === null || getFieldProps === void 0 ? void 0 : getFieldProps()\n };\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [getFieldProps, getFormItemProps, rest.dependenciesValues, onlyChange]);\n var fieldProps = useDeepCompareMemo(function () {\n var newFieldProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, ignoreFormItem ? omitUndefined({\n value: rest.value\n }) : {}), {}, {\n placeholder: placeholder,\n disabled: props.disabled\n }, contextValue.fieldProps), changedProps.fieldProps), rest.fieldProps);\n newFieldProps.style = omitUndefined(newFieldProps === null || newFieldProps === void 0 ? void 0 : newFieldProps.style);\n return newFieldProps;\n }, [ignoreFormItem, rest.value, rest.fieldProps, placeholder, props.disabled, contextValue.fieldProps, changedProps.fieldProps]);\n\n // restFormItemProps is user props pass to Form.Item\n var restFormItemProps = pickProFormItemProps(rest);\n var formItemProps = useDeepCompareMemo(function () {\n return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, contextValue.formItemProps), restFormItemProps), changedProps.formItemProps), rest.formItemProps);\n }, [changedProps.formItemProps, contextValue.formItemProps, rest.formItemProps, restFormItemProps]);\n var otherProps = useDeepCompareMemo(function () {\n return _objectSpread(_objectSpread({\n messageVariables: messageVariables\n }, defaultFormItemProps), formItemProps);\n }, [defaultFormItemProps, formItemProps, messageVariables]);\n noteOnce(\n // eslint-disable-next-line @typescript-eslint/dot-notation\n !rest['defaultValue'], '请不要在 Form 中使用 defaultXXX。如果需要默认值请使用 initialValues 和 initialValue。');\n var _useContext = useContext(RcFieldContext),\n prefixName = _useContext.prefixName;\n var proFieldKey = useDeepCompareMemo(function () {\n var _contextValue$formKey;\n var name = otherProps === null || otherProps === void 0 ? void 0 : otherProps.name;\n if (Array.isArray(name)) name = name.join('_');\n if (Array.isArray(prefixName) && name) name = \"\".concat(prefixName.join('.'), \".\").concat(name);\n var key = name && \"form-\".concat((_contextValue$formKey = contextValue.formKey) !== null && _contextValue$formKey !== void 0 ? _contextValue$formKey : '', \"-field-\").concat(name);\n return key;\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [stringify(otherProps === null || otherProps === void 0 ? void 0 : otherProps.name), prefixName, contextValue.formKey]);\n var onChange = useRefFunction(function () {\n var _fieldProps$onChange;\n if (getFormItemProps || getFieldProps) {\n forceUpdateByOnChange([]);\n } else if (rest.renderFormItem) {\n forceUpdate([]);\n }\n for (var _len = arguments.length, restParams = new Array(_len), _key = 0; _key < _len; _key++) {\n restParams[_key] = arguments[_key];\n }\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onChange = fieldProps.onChange) === null || _fieldProps$onChange === void 0 || _fieldProps$onChange.call.apply(_fieldProps$onChange, [fieldProps].concat(restParams));\n });\n var style = useDeepCompareMemo(function () {\n var newStyle = _objectSpread({\n width: width && !WIDTH_SIZE_ENUM[width] ? width : contextValue.grid ? '100%' : undefined\n }, fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.style);\n if (isIgnoreWidth) Reflect.deleteProperty(newStyle, 'width');\n return omitUndefined(newStyle);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [stringify(fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.style), contextValue.grid, isIgnoreWidth, width]);\n var className = useDeepCompareMemo(function () {\n var isSizeEnum = width && WIDTH_SIZE_ENUM[width];\n return classnames(fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.className, _defineProperty({\n 'pro-field': isSizeEnum\n }, \"pro-field-\".concat(width), isSizeEnum && !isIgnoreWidth)) || undefined;\n }, [width, fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.className, isIgnoreWidth]);\n var fieldProFieldProps = useDeepCompareMemo(function () {\n return omitUndefined(_objectSpread(_objectSpread({}, contextValue.proFieldProps), {}, {\n mode: rest === null || rest === void 0 ? void 0 : rest.mode,\n readonly: readonly,\n params: rest.params,\n proFieldKey: proFieldKey,\n cacheForSwr: cacheForSwr\n }, proFieldProps));\n }, [contextValue.proFieldProps, rest === null || rest === void 0 ? void 0 : rest.mode, rest.params, readonly, proFieldKey, cacheForSwr, proFieldProps]);\n var fieldFieldProps = useDeepCompareMemo(function () {\n return _objectSpread(_objectSpread({\n onChange: onChange,\n allowClear: allowClear\n }, fieldProps), {}, {\n style: style,\n className: className\n });\n }, [allowClear, className, onChange, fieldProps, style]);\n var field = useDeepCompareMemo(function () {\n return /*#__PURE__*/_jsx(Field\n // @ts-ignore\n , _objectSpread(_objectSpread({}, rest), {}, {\n fieldProps: fieldFieldProps,\n proFieldProps: fieldProFieldProps,\n ref: props === null || props === void 0 ? void 0 : props.fieldRef\n }), props.proFormFieldKey || props.name);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fieldProFieldProps, fieldFieldProps, rest]);\n\n // 使用useMemo包裹避免不必要的re-render\n var formItem = useDeepCompareMemo(function () {\n var _otherProps$name, _field$props$allowCle, _field$props, _field$props2;\n return /*#__PURE__*/_jsx(ProFormItem\n // 全局的提供一个 tip 功能,可以减少代码量\n // 轻量模式下不通过 FormItem 显示 label\n , _objectSpread(_objectSpread({\n label: label && (proFieldProps === null || proFieldProps === void 0 ? void 0 : proFieldProps.light) !== true ? label : undefined,\n tooltip: (proFieldProps === null || proFieldProps === void 0 ? void 0 : proFieldProps.light) !== true && tooltip,\n valuePropName: valuePropName\n // @ts-ignore\n }, otherProps), {}, {\n ignoreFormItem: ignoreFormItem,\n transform: transform,\n dataFormat: fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.format,\n valueType: valueType,\n messageVariables: _objectSpread({\n label: label || ''\n }, otherProps === null || otherProps === void 0 ? void 0 : otherProps.messageVariables),\n convertValue: convertValue,\n lightProps: omitUndefined(_objectSpread(_objectSpread(_objectSpread({}, fieldProps), {}, {\n valueType: valueType,\n bordered: bordered,\n allowClear: (_field$props$allowCle = field === null || field === void 0 || (_field$props = field.props) === null || _field$props === void 0 ? void 0 : _field$props.allowClear) !== null && _field$props$allowCle !== void 0 ? _field$props$allowCle : allowClear,\n light: proFieldProps === null || proFieldProps === void 0 ? void 0 : proFieldProps.light,\n label: label,\n customLightMode: customLightMode,\n labelFormatter: lightFilterLabelFormatter,\n valuePropName: valuePropName,\n footerRender: field === null || field === void 0 || (_field$props2 = field.props) === null || _field$props2 === void 0 ? void 0 : _field$props2.footerRender\n }, rest.lightProps), otherProps.lightProps)),\n children: field\n }), props.proFormFieldKey || ((_otherProps$name = otherProps.name) === null || _otherProps$name === void 0 ? void 0 : _otherProps$name.toString()));\n }, [label, proFieldProps === null || proFieldProps === void 0 ? void 0 : proFieldProps.light, tooltip, valuePropName, props.proFormFieldKey, otherProps, ignoreFormItem, transform, fieldProps, valueType, convertValue, bordered, field, allowClear, customLightMode, lightFilterLabelFormatter, rest.lightProps]);\n var _useGridHelpers = useGridHelpers(rest),\n ColWrapper = _useGridHelpers.ColWrapper;\n return /*#__PURE__*/_jsx(ColWrapper, {\n children: formItem\n });\n };\n var DependencyWrapper = function DependencyWrapper(props) {\n var dependencies = props.dependencies;\n return dependencies ? /*#__PURE__*/_jsx(ProFormDependency, {\n name: dependencies,\n originDependencies: props === null || props === void 0 ? void 0 : props.originDependencies,\n children: function children(values) {\n return /*#__PURE__*/_jsx(FieldWithContext, _objectSpread({\n dependenciesValues: values,\n dependencies: dependencies\n }, props));\n }\n }) : /*#__PURE__*/_jsx(FieldWithContext, _objectSpread({\n dependencies: dependencies\n }, props));\n };\n return DependencyWrapper;\n}\nexport { createField };","import { isNumber, } from \"@turf/helpers\";\n/**\n * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.\n *\n * @name getCoord\n * @param {Array|Geometry|Feature} coord GeoJSON Point or an Array of numbers\n * @returns {Array} coordinates\n * @example\n * var pt = turf.point([10, 10]);\n *\n * var coord = turf.getCoord(pt);\n * //= [10, 10]\n */\nexport function getCoord(coord) {\n if (!coord) {\n throw new Error(\"coord is required\");\n }\n if (!Array.isArray(coord)) {\n if (coord.type === \"Feature\" &&\n coord.geometry !== null &&\n coord.geometry.type === \"Point\") {\n return coord.geometry.coordinates;\n }\n if (coord.type === \"Point\") {\n return coord.coordinates;\n }\n }\n if (Array.isArray(coord) &&\n coord.length >= 2 &&\n !Array.isArray(coord[0]) &&\n !Array.isArray(coord[1])) {\n return coord;\n }\n throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\n/**\n * Unwrap coordinates from a Feature, Geometry Object or an Array\n *\n * @name getCoords\n * @param {Array|Geometry|Feature} coords Feature, Geometry Object or an Array\n * @returns {Array} coordinates\n * @example\n * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);\n *\n * var coords = turf.getCoords(poly);\n * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]\n */\nexport function getCoords(coords) {\n if (Array.isArray(coords)) {\n return coords;\n }\n // Feature\n if (coords.type === \"Feature\") {\n if (coords.geometry !== null) {\n return coords.geometry.coordinates;\n }\n }\n else {\n // Geometry\n if (coords.coordinates) {\n return coords.coordinates;\n }\n }\n throw new Error(\"coords must be GeoJSON Feature, Geometry Object or an Array\");\n}\n/**\n * Checks if coordinates contains a number\n *\n * @name containsNumber\n * @param {Array} coordinates GeoJSON Coordinates\n * @returns {boolean} true if Array contains a number\n */\nexport function containsNumber(coordinates) {\n if (coordinates.length > 1 &&\n isNumber(coordinates[0]) &&\n isNumber(coordinates[1])) {\n return true;\n }\n if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n return containsNumber(coordinates[0]);\n }\n throw new Error(\"coordinates must only contain numbers\");\n}\n/**\n * Enforce expectations about types of GeoJSON objects for Turf.\n *\n * @name geojsonType\n * @param {GeoJSON} value any GeoJSON object\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nexport function geojsonType(value, type, name) {\n if (!type || !name) {\n throw new Error(\"type and name required\");\n }\n if (!value || value.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n value.type);\n }\n}\n/**\n * Enforce expectations about types of {@link Feature} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name featureOf\n * @param {Feature} feature a feature with an expected geometry type\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} error if value is not the expected type.\n */\nexport function featureOf(feature, type, name) {\n if (!feature) {\n throw new Error(\"No feature passed\");\n }\n if (!name) {\n throw new Error(\".featureOf() requires a name\");\n }\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\"Invalid input to \" + name + \", Feature with geometry required\");\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n feature.geometry.type);\n }\n}\n/**\n * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name collectionOf\n * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nexport function collectionOf(featureCollection, type, name) {\n if (!featureCollection) {\n throw new Error(\"No featureCollection passed\");\n }\n if (!name) {\n throw new Error(\".collectionOf() requires a name\");\n }\n if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n throw new Error(\"Invalid input to \" + name + \", FeatureCollection required\");\n }\n for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {\n var feature = _a[_i];\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\"Invalid input to \" + name + \", Feature with geometry required\");\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n feature.geometry.type);\n }\n }\n}\n/**\n * Get Geometry from Feature or Geometry Object\n *\n * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object\n * @returns {Geometry|null} GeoJSON Geometry Object\n * @throws {Error} if geojson is not a Feature or Geometry Object\n * @example\n * var point = {\n * \"type\": \"Feature\",\n * \"properties\": {},\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 40]\n * }\n * }\n * var geom = turf.getGeom(point)\n * //={\"type\": \"Point\", \"coordinates\": [110, 40]}\n */\nexport function getGeom(geojson) {\n if (geojson.type === \"Feature\") {\n return geojson.geometry;\n }\n return geojson;\n}\n/**\n * Get GeoJSON object's type, Geometry type is prioritize.\n *\n * @param {GeoJSON} geojson GeoJSON object\n * @param {string} [name=\"geojson\"] name of the variable to display in error message (unused)\n * @returns {string} GeoJSON type\n * @example\n * var point = {\n * \"type\": \"Feature\",\n * \"properties\": {},\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 40]\n * }\n * }\n * var geom = turf.getType(point)\n * //=\"Point\"\n */\nexport function getType(geojson, _name) {\n if (geojson.type === \"FeatureCollection\") {\n return \"FeatureCollection\";\n }\n if (geojson.type === \"GeometryCollection\") {\n return \"GeometryCollection\";\n }\n if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n return geojson.geometry.type;\n }\n return geojson.type;\n}\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useContext } from '@rc-component/context';\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport TableContext from \"../context/TableContext\";\nimport devRenderTimes from \"../hooks/useRenderTimes\";\nimport useCellRender from \"./useCellRender\";\nimport useHoverState from \"./useHoverState\";\nimport { useEvent } from 'rc-util';\nvar getTitleFromCellRenderChildren = function getTitleFromCellRenderChildren(_ref) {\n var ellipsis = _ref.ellipsis,\n rowType = _ref.rowType,\n children = _ref.children;\n var title;\n var ellipsisConfig = ellipsis === true ? {\n showTitle: true\n } : ellipsis;\n if (ellipsisConfig && (ellipsisConfig.showTitle || rowType === 'header')) {\n if (typeof children === 'string' || typeof children === 'number') {\n title = children.toString();\n } else if ( /*#__PURE__*/React.isValidElement(children) && typeof children.props.children === 'string') {\n title = children.props.children;\n }\n }\n return title;\n};\nfunction Cell(props) {\n var _ref2, _ref3, _legacyCellProps$colS, _ref4, _ref5, _legacyCellProps$rowS, _additionalProps$titl, _classNames;\n if (process.env.NODE_ENV !== 'production') {\n devRenderTimes(props);\n }\n var Component = props.component,\n children = props.children,\n ellipsis = props.ellipsis,\n scope = props.scope,\n prefixCls = props.prefixCls,\n className = props.className,\n align = props.align,\n record = props.record,\n render = props.render,\n dataIndex = props.dataIndex,\n renderIndex = props.renderIndex,\n shouldCellUpdate = props.shouldCellUpdate,\n index = props.index,\n rowType = props.rowType,\n colSpan = props.colSpan,\n rowSpan = props.rowSpan,\n fixLeft = props.fixLeft,\n fixRight = props.fixRight,\n firstFixLeft = props.firstFixLeft,\n lastFixLeft = props.lastFixLeft,\n firstFixRight = props.firstFixRight,\n lastFixRight = props.lastFixRight,\n appendNode = props.appendNode,\n _props$additionalProp = props.additionalProps,\n additionalProps = _props$additionalProp === void 0 ? {} : _props$additionalProp,\n isSticky = props.isSticky;\n var cellPrefixCls = \"\".concat(prefixCls, \"-cell\");\n var _useContext = useContext(TableContext, ['supportSticky', 'allColumnsFixedLeft', 'rowHoverable']),\n supportSticky = _useContext.supportSticky,\n allColumnsFixedLeft = _useContext.allColumnsFixedLeft,\n rowHoverable = _useContext.rowHoverable;\n\n // ====================== Value =======================\n var _useCellRender = useCellRender(record, dataIndex, renderIndex, children, render, shouldCellUpdate),\n _useCellRender2 = _slicedToArray(_useCellRender, 2),\n childNode = _useCellRender2[0],\n legacyCellProps = _useCellRender2[1];\n\n // ====================== Fixed =======================\n var fixedStyle = {};\n var isFixLeft = typeof fixLeft === 'number' && supportSticky;\n var isFixRight = typeof fixRight === 'number' && supportSticky;\n if (isFixLeft) {\n fixedStyle.position = 'sticky';\n fixedStyle.left = fixLeft;\n }\n if (isFixRight) {\n fixedStyle.position = 'sticky';\n fixedStyle.right = fixRight;\n }\n\n // ================ RowSpan & ColSpan =================\n var mergedColSpan = (_ref2 = (_ref3 = (_legacyCellProps$colS = legacyCellProps === null || legacyCellProps === void 0 ? void 0 : legacyCellProps.colSpan) !== null && _legacyCellProps$colS !== void 0 ? _legacyCellProps$colS : additionalProps.colSpan) !== null && _ref3 !== void 0 ? _ref3 : colSpan) !== null && _ref2 !== void 0 ? _ref2 : 1;\n var mergedRowSpan = (_ref4 = (_ref5 = (_legacyCellProps$rowS = legacyCellProps === null || legacyCellProps === void 0 ? void 0 : legacyCellProps.rowSpan) !== null && _legacyCellProps$rowS !== void 0 ? _legacyCellProps$rowS : additionalProps.rowSpan) !== null && _ref5 !== void 0 ? _ref5 : rowSpan) !== null && _ref4 !== void 0 ? _ref4 : 1;\n\n // ====================== Hover =======================\n var _useHoverState = useHoverState(index, mergedRowSpan),\n _useHoverState2 = _slicedToArray(_useHoverState, 2),\n hovering = _useHoverState2[0],\n onHover = _useHoverState2[1];\n var onMouseEnter = useEvent(function (event) {\n var _additionalProps$onMo;\n if (record) {\n onHover(index, index + mergedRowSpan - 1);\n }\n additionalProps === null || additionalProps === void 0 || (_additionalProps$onMo = additionalProps.onMouseEnter) === null || _additionalProps$onMo === void 0 || _additionalProps$onMo.call(additionalProps, event);\n });\n var onMouseLeave = useEvent(function (event) {\n var _additionalProps$onMo2;\n if (record) {\n onHover(-1, -1);\n }\n additionalProps === null || additionalProps === void 0 || (_additionalProps$onMo2 = additionalProps.onMouseLeave) === null || _additionalProps$onMo2 === void 0 || _additionalProps$onMo2.call(additionalProps, event);\n });\n\n // ====================== Render ======================\n if (mergedColSpan === 0 || mergedRowSpan === 0) {\n return null;\n }\n\n // >>>>> Title\n var title = (_additionalProps$titl = additionalProps.title) !== null && _additionalProps$titl !== void 0 ? _additionalProps$titl : getTitleFromCellRenderChildren({\n rowType: rowType,\n ellipsis: ellipsis,\n children: childNode\n });\n\n // >>>>> ClassName\n var mergedClassName = classNames(cellPrefixCls, className, (_classNames = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_classNames, \"\".concat(cellPrefixCls, \"-fix-left\"), isFixLeft && supportSticky), \"\".concat(cellPrefixCls, \"-fix-left-first\"), firstFixLeft && supportSticky), \"\".concat(cellPrefixCls, \"-fix-left-last\"), lastFixLeft && supportSticky), \"\".concat(cellPrefixCls, \"-fix-left-all\"), lastFixLeft && allColumnsFixedLeft && supportSticky), \"\".concat(cellPrefixCls, \"-fix-right\"), isFixRight && supportSticky), \"\".concat(cellPrefixCls, \"-fix-right-first\"), firstFixRight && supportSticky), \"\".concat(cellPrefixCls, \"-fix-right-last\"), lastFixRight && supportSticky), \"\".concat(cellPrefixCls, \"-ellipsis\"), ellipsis), \"\".concat(cellPrefixCls, \"-with-append\"), appendNode), \"\".concat(cellPrefixCls, \"-fix-sticky\"), (isFixLeft || isFixRight) && isSticky && supportSticky), _defineProperty(_classNames, \"\".concat(cellPrefixCls, \"-row-hover\"), !legacyCellProps && hovering)), additionalProps.className, legacyCellProps === null || legacyCellProps === void 0 ? void 0 : legacyCellProps.className);\n\n // >>>>> Style\n var alignStyle = {};\n if (align) {\n alignStyle.textAlign = align;\n }\n\n // The order is important since user can overwrite style.\n // For example ant-design/ant-design#51763\n var mergedStyle = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, legacyCellProps === null || legacyCellProps === void 0 ? void 0 : legacyCellProps.style), fixedStyle), alignStyle), additionalProps.style);\n\n // >>>>> Children Node\n var mergedChildNode = childNode;\n\n // Not crash if final `childNode` is not validate ReactNode\n if (_typeof(mergedChildNode) === 'object' && !Array.isArray(mergedChildNode) && ! /*#__PURE__*/React.isValidElement(mergedChildNode)) {\n mergedChildNode = null;\n }\n if (ellipsis && (lastFixLeft || firstFixRight)) {\n mergedChildNode = /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(cellPrefixCls, \"-content\")\n }, mergedChildNode);\n }\n return /*#__PURE__*/React.createElement(Component, _extends({}, legacyCellProps, additionalProps, {\n className: mergedClassName,\n style: mergedStyle\n // A11y\n ,\n title: title,\n scope: scope\n // Hover\n ,\n onMouseEnter: rowHoverable ? onMouseEnter : undefined,\n onMouseLeave: rowHoverable ? onMouseLeave : undefined\n //Span\n ,\n colSpan: mergedColSpan !== 1 ? mergedColSpan : null,\n rowSpan: mergedRowSpan !== 1 ? mergedRowSpan : null\n }), appendNode, mergedChildNode);\n}\nexport default /*#__PURE__*/React.memo(Cell);","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport useMemo from \"rc-util/es/hooks/useMemo\";\nimport isEqual from \"rc-util/es/isEqual\";\nimport getValue from \"rc-util/es/utils/get\";\nimport warning from \"rc-util/es/warning\";\nimport * as React from 'react';\nimport PerfContext from \"../context/PerfContext\";\nimport { validateValue } from \"../utils/valueUtil\";\nimport { useImmutableMark } from \"../context/TableContext\";\nfunction isRenderCell(data) {\n return data && _typeof(data) === 'object' && !Array.isArray(data) && ! /*#__PURE__*/React.isValidElement(data);\n}\nexport default function useCellRender(record, dataIndex, renderIndex, children, render, shouldCellUpdate) {\n // TODO: Remove this after next major version\n var perfRecord = React.useContext(PerfContext);\n var mark = useImmutableMark();\n\n // ======================== Render ========================\n var retData = useMemo(function () {\n if (validateValue(children)) {\n return [children];\n }\n var path = dataIndex === null || dataIndex === undefined || dataIndex === '' ? [] : Array.isArray(dataIndex) ? dataIndex : [dataIndex];\n var value = getValue(record, path);\n\n // Customize render node\n var returnChildNode = value;\n var returnCellProps = undefined;\n if (render) {\n var renderData = render(value, record, renderIndex);\n if (isRenderCell(renderData)) {\n if (process.env.NODE_ENV !== 'production') {\n warning(false, '`columns.render` return cell props is deprecated with perf issue, please use `onCell` instead.');\n }\n returnChildNode = renderData.children;\n returnCellProps = renderData.props;\n perfRecord.renderWithProps = true;\n } else {\n returnChildNode = renderData;\n }\n }\n return [returnChildNode, returnCellProps];\n }, [\n // Force update deps\n mark,\n // Normal deps\n record, children, dataIndex, render, renderIndex], function (prev, next) {\n if (shouldCellUpdate) {\n var _prev = _slicedToArray(prev, 2),\n prevRecord = _prev[1];\n var _next = _slicedToArray(next, 2),\n nextRecord = _next[1];\n return shouldCellUpdate(nextRecord, prevRecord);\n }\n\n // Legacy mode should always update\n if (perfRecord.renderWithProps) {\n return true;\n }\n return !isEqual(prev, next, true);\n });\n return retData;\n}","import { useContext } from '@rc-component/context';\nimport TableContext from \"../context/TableContext\";\n/** Check if cell is in hover range */\nfunction inHoverRange(cellStartRow, cellRowSpan, startRow, endRow) {\n var cellEndRow = cellStartRow + cellRowSpan - 1;\n return cellStartRow <= endRow && cellEndRow >= startRow;\n}\nexport default function useHoverState(rowIndex, rowSpan) {\n return useContext(TableContext, function (ctx) {\n var hovering = inHoverRange(rowIndex, rowSpan || 1, ctx.hoverStartRow, ctx.hoverEndRow);\n return [hovering, ctx.onHover];\n });\n}","\"use strict\";\n\nmodule.exports = function() {\n var idCount = 1;\n\n /**\n * Generates a new unique id in the context.\n * @public\n * @returns {number} A unique id in the context.\n */\n function generate() {\n return idCount++;\n }\n\n return {\n generate: generate\n };\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.call = call;\nexports.default = void 0;\nexports.note = note;\nexports.noteOnce = noteOnce;\nexports.preMessage = void 0;\nexports.resetWarned = resetWarned;\nexports.warning = warning;\nexports.warningOnce = warningOnce;\n/* eslint-disable no-console */\nvar warned = {};\nvar preWarningFns = [];\n\n/**\n * Pre warning enable you to parse content before console.error.\n * Modify to null will prevent warning.\n */\nvar preMessage = exports.preMessage = function preMessage(fn) {\n preWarningFns.push(fn);\n};\n\n/**\n * Warning if condition not match.\n * @param valid Condition\n * @param message Warning message\n * @example\n * ```js\n * warning(false, 'some error'); // print some error\n * warning(true, 'some error'); // print nothing\n * warning(1 === 2, 'some error'); // print some error\n * ```\n */\nfunction warning(valid, message) {\n if (process.env.NODE_ENV !== 'production' && !valid && console !== undefined) {\n var finalMessage = preWarningFns.reduce(function (msg, preMessageFn) {\n return preMessageFn(msg !== null && msg !== void 0 ? msg : '', 'warning');\n }, message);\n if (finalMessage) {\n console.error(\"Warning: \".concat(finalMessage));\n }\n }\n}\n\n/** @see Similar to {@link warning} */\nfunction note(valid, message) {\n if (process.env.NODE_ENV !== 'production' && !valid && console !== undefined) {\n var finalMessage = preWarningFns.reduce(function (msg, preMessageFn) {\n return preMessageFn(msg !== null && msg !== void 0 ? msg : '', 'note');\n }, message);\n if (finalMessage) {\n console.warn(\"Note: \".concat(finalMessage));\n }\n }\n}\nfunction resetWarned() {\n warned = {};\n}\nfunction call(method, valid, message) {\n if (!valid && !warned[message]) {\n method(false, message);\n warned[message] = true;\n }\n}\n\n/** @see Same as {@link warning}, but only warn once for the same message */\nfunction warningOnce(valid, message) {\n call(warning, valid, message);\n}\n\n/** @see Same as {@link warning}, but only warn once for the same message */\nfunction noteOnce(valid, message) {\n call(note, valid, message);\n}\nwarningOnce.preMessage = preMessage;\nwarningOnce.resetWarned = resetWarned;\nwarningOnce.noteOnce = noteOnce;\nvar _default = exports.default = warningOnce;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"fieldProps\", \"proFieldProps\"],\n _excluded2 = [\"fieldProps\", \"proFieldProps\"];\nimport { dateArrayFormatter } from '@ant-design/pro-utils';\nimport React, { useContext } from 'react';\nimport FieldContext from \"../../FieldContext\";\nimport ProField from \"../Field\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar valueType = 'time';\n\n/** 时间区间选择器 */\nvar TimeRangePicker = /*#__PURE__*/React.forwardRef(function (_ref, ref) {\n var fieldProps = _ref.fieldProps,\n proFieldProps = _ref.proFieldProps,\n rest = _objectWithoutProperties(_ref, _excluded);\n var context = useContext(FieldContext);\n return /*#__PURE__*/_jsx(ProField, _objectSpread({\n ref: ref,\n fieldProps: _objectSpread({\n getPopupContainer: context.getPopupContainer\n }, fieldProps),\n valueType: \"timeRange\",\n proFieldProps: proFieldProps,\n filedConfig: {\n valueType: 'timeRange',\n customLightMode: true,\n lightFilterLabelFormatter: function lightFilterLabelFormatter(value) {\n return dateArrayFormatter(value, 'HH:mm:ss');\n }\n }\n }, rest));\n});\n\n/**\n * 时间选择组件\n *\n * @param\n */\nvar ProFormTimePicker = function ProFormTimePicker(_ref2) {\n var fieldProps = _ref2.fieldProps,\n proFieldProps = _ref2.proFieldProps,\n rest = _objectWithoutProperties(_ref2, _excluded2);\n var context = useContext(FieldContext);\n return /*#__PURE__*/_jsx(ProField, _objectSpread({\n fieldProps: _objectSpread({\n getPopupContainer: context.getPopupContainer\n }, fieldProps),\n valueType: valueType,\n proFieldProps: proFieldProps,\n filedConfig: {\n customLightMode: true,\n valueType: valueType\n }\n }, rest));\n};\nvar WrappedProFormTimePicker = ProFormTimePicker;\nWrappedProFormTimePicker.RangePicker = TimeRangePicker;\nexport default WrappedProFormTimePicker;","\"use strict\";\n\nvar detector = module.exports = {};\n\ndetector.isIE = function(version) {\n function isAnyIeVersion() {\n var agent = navigator.userAgent.toLowerCase();\n return agent.indexOf(\"msie\") !== -1 || agent.indexOf(\"trident\") !== -1 || agent.indexOf(\" edge/\") !== -1;\n }\n\n if(!isAnyIeVersion()) {\n return false;\n }\n\n if(!version) {\n return true;\n }\n\n //Shamelessly stolen from https://gist.github.com/padolsey/527683\n var ieVersion = (function(){\n var undef,\n v = 3,\n div = document.createElement(\"div\"),\n all = div.getElementsByTagName(\"i\");\n\n do {\n div.innerHTML = \"\";\n }\n while (all[0]);\n\n return v > 4 ? v : undef;\n }());\n\n return version === ieVersion;\n};\n\ndetector.isLegacyOpera = function() {\n return !!window.opera;\n};\n","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport { rgb2arr } from '@antv/l7-utils';\nimport BaseModel from \"../../core/BaseModel\";\nimport { LinearDir, TextureBlend } from \"../../core/interface\";\nimport { LineTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/line/line_frag.glsl' */\nconst line_frag = \"// #extension GL_OES_standard_derivatives : enable\\n#define Animate 0.0\\n#define LineTexture 1.0\\n\\nuniform sampler2D u_texture;\\nlayout(std140) uniform commonUniorm {\\n vec4 u_animate: [ 1., 2., 1.0, 0.2 ];\\n vec4 u_dash_array;\\n vec4 u_blur;\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n vec2 u_textSize;\\n float u_icon_step: 100;\\n float u_heightfixed: 0.0;\\n float u_vertexScale: 1.0;\\n float u_raisingHeight: 0.0;\\n float u_strokeWidth: 0.0;\\n float u_textureBlend;\\n float u_line_texture;\\n float u_linearDir: 1.0;\\n float u_linearColor: 0;\\n float u_time;\\n};\\n\\nin vec4 v_color;\\nin vec4 v_stroke;\\n// dash\\nin vec4 v_dash_array;\\nin float v_d_distance_ratio;\\nin vec2 v_iconMapUV;\\nin vec4 v_texture_data;\\n\\nout vec4 outputColor;\\n#pragma include \\\"picking\\\"\\n\\n// [animate, duration, interval, trailLength],\\nvoid main() {\\n if(u_dash_array!=vec4(0.0)){\\n float dashLength = mod(v_d_distance_ratio, v_dash_array.x + v_dash_array.y + v_dash_array.z + v_dash_array.w);\\n if(!(dashLength < v_dash_array.x || (dashLength > (v_dash_array.x + v_dash_array.y) && dashLength < v_dash_array.x + v_dash_array.y + v_dash_array.z))) {\\n // \\u865A\\u7EBF\\u90E8\\u5206\\n discard;\\n };\\n }\\n float animateSpeed = 0.0; // \\u8FD0\\u52A8\\u901F\\u5EA6\\n float d_distance_ratio = v_texture_data.r; // \\u5F53\\u524D\\u70B9\\u4F4D\\u8DDD\\u79BB\\u5360\\u7EBF\\u603B\\u957F\\u7684\\u6BD4\\u4F8B\\n if(u_linearDir < 1.0) {\\n d_distance_ratio = v_texture_data.a;\\n }\\n if(u_linearColor == 1.0) { // \\u4F7F\\u7528\\u6E10\\u53D8\\u989C\\u8272\\n outputColor = mix(u_sourceColor, u_targetColor, d_distance_ratio);\\n outputColor.a *= v_color.a;\\n } else { // \\u4F7F\\u7528 color \\u65B9\\u6CD5\\u4F20\\u5165\\u7684\\u989C\\u8272\\n outputColor = v_color;\\n }\\n // anti-alias\\n // float blur = 1.0 - smoothstep(u_blur, 1., length(v_normal.xy));\\n if(u_animate.x == Animate) {\\n animateSpeed = u_time / u_animate.y;\\n float alpha =1.0 - fract( mod(1.0- d_distance_ratio, u_animate.z)* (1.0/ u_animate.z) + animateSpeed);\\n alpha = (alpha + u_animate.w -1.0) / u_animate.w;\\n alpha = smoothstep(0., 1., alpha);\\n outputColor.a *= alpha;\\n }\\n\\n if(u_line_texture == LineTexture) { // while load texture\\n float aDistance = v_texture_data.g; // \\u5F53\\u524D\\u9876\\u70B9\\u7684\\u8DDD\\u79BB\\n float d_texPixelLen = v_texture_data.b; // \\u8D34\\u56FE\\u7684\\u50CF\\u7D20\\u957F\\u5EA6\\uFF0C\\u6839\\u636E\\u5730\\u56FE\\u5C42\\u7EA7\\u7F29\\u653E\\n float u = fract(mod(aDistance, d_texPixelLen)/d_texPixelLen - animateSpeed);\\n float v = v_texture_data.a; // \\u7EBF\\u56FE\\u5C42\\u8D34\\u56FE\\u90E8\\u5206\\u7684 v \\u5750\\u6807\\u503C\\n\\n // v = max(smoothstep(0.95, 1.0, v), v);\\n vec2 uv= v_iconMapUV / u_textSize + vec2(u, v) / u_textSize * 64.;\\n vec4 pattern = texture(SAMPLER_2D(u_texture), uv);\\n\\n if(u_textureBlend == 0.0) { // normal\\n pattern.a = 0.0;\\n outputColor += pattern;\\n } else { // replace\\n pattern.a *= v_color.a;\\n if(outputColor.a <= 0.0) {\\n pattern.a = 0.0;\\n }\\n outputColor = pattern;\\n }\\n } \\n\\n float v = v_texture_data.a;\\n float strokeWidth = min(0.5, u_strokeWidth);\\n // \\u7ED8\\u5236 border\\n if(strokeWidth > 0.01) {\\n float borderOuterWidth = strokeWidth / 2.0;\\n\\n\\n if(v >= 1.0 - strokeWidth || v <= strokeWidth) {\\n if(v > strokeWidth) { // \\u5916\\u4FA7\\n float linear = smoothstep(0.0, 1.0, (v - (1.0 - strokeWidth))/strokeWidth);\\n // float linear = step(0.0, (v - (1.0 - borderWidth))/borderWidth);\\n outputColor.rgb = mix(outputColor.rgb, v_stroke.rgb, linear);\\n } else if(v <= strokeWidth) {\\n float linear = smoothstep(0.0, 1.0, v/strokeWidth);\\n outputColor.rgb = mix(v_stroke.rgb, outputColor.rgb, linear);\\n }\\n }\\n\\n if(v < borderOuterWidth) {\\n outputColor.a = mix(0.0, outputColor.a, v/borderOuterWidth);\\n } else if(v > 1.0 - borderOuterWidth) {\\n outputColor.a = mix(outputColor.a, 0.0, (v - (1.0 - borderOuterWidth))/borderOuterWidth);\\n }\\n }\\n\\n // blur\\n float blurV = v_texture_data.a;\\n if(blurV < 0.5) {\\n outputColor.a *= mix(u_blur.r, u_blur.g, blurV/0.5);\\n } else {\\n outputColor.a *= mix(u_blur.g, u_blur.b, (blurV - 0.5)/0.5);\\n }\\n \\n outputColor = filterColor(outputColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/line/line_vert.glsl' */\nconst line_vert = \"#define Animate (0.0)\\n\\nlayout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in vec2 a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_DISTANCE_INDEX) in vec3 a_DistanceAndIndexAndMiter;\\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec4 a_Normal_Total_Distance;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_iconMapUV;\\n\\nlayout(std140) uniform commonUniorm {\\n vec4 u_animate: [ 1., 2., 1.0, 0.2 ];\\n vec4 u_dash_array;\\n vec4 u_blur;\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n vec2 u_textSize;\\n float u_icon_step: 100;\\n float u_heightfixed: 0.0;\\n float u_vertexScale: 1.0;\\n float u_raisingHeight: 0.0;\\n float u_strokeWidth: 0.0;\\n float u_textureBlend;\\n float u_line_texture;\\n float u_linearDir: 1.0;\\n float u_linearColor: 0;\\n float u_time;\\n};\\n\\nout vec4 v_color;\\nout vec4 v_stroke;\\n//dash\\nout vec4 v_dash_array;\\nout float v_d_distance_ratio;\\n// texV \\u7EBF\\u56FE\\u5C42 - \\u8D34\\u56FE\\u90E8\\u5206\\u7684 v \\u5750\\u6807\\uFF08\\u7EBF\\u7684\\u5BBD\\u5EA6\\u65B9\\u5411\\uFF09\\nout vec2 v_iconMapUV;\\nout vec4 v_texture_data;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n vec2 a_DistanceAndIndex = a_DistanceAndIndexAndMiter.xy;\\n float a_Miter = a_DistanceAndIndexAndMiter.z;\\n vec3 a_Normal = a_Normal_Total_Distance.xyz;\\n float a_Total_Distance = a_Normal_Total_Distance.w;\\n //dash\\u8F93\\u51FA\\n v_dash_array = pow(2.0, 20.0 - u_Zoom) * u_dash_array / a_Total_Distance;\\n v_d_distance_ratio = a_DistanceAndIndex.x / a_Total_Distance;\\n\\n // cal style mapping - \\u6570\\u636E\\u7EB9\\u7406\\u6620\\u5C04\\u90E8\\u5206\\u7684\\u8BA1\\u7B97\\n float d_texPixelLen; // \\u8D34\\u56FE\\u7684\\u50CF\\u7D20\\u957F\\u5EA6\\uFF0C\\u6839\\u636E\\u5730\\u56FE\\u5C42\\u7EA7\\u7F29\\u653E\\n v_iconMapUV = a_iconMapUV;\\n d_texPixelLen = project_float_pixel(u_icon_step);\\n\\n v_color = a_Color;\\n v_color.a *= opacity;\\n v_stroke = stroke;\\n\\n vec3 size = a_Miter * setPickingSize(a_Size.x) * a_Normal;\\n\\n vec2 offset = project_pixel(size.xy);\\n\\n float lineDistance = a_DistanceAndIndex.x;\\n float currentLinePointRatio = lineDistance / a_Total_Distance;\\n\\n float lineOffsetWidth = length(offset + offset * sign(a_Miter)); // \\u7EBF\\u6A2A\\u5411\\u504F\\u79FB\\u7684\\u8DDD\\u79BB\\uFF08\\u5411\\u4E24\\u4FA7\\u504F\\u79FB\\u7684\\u548C\\uFF09\\n float linePixelSize = project_pixel(a_Size.x) * 2.0; // \\u5B9A\\u70B9\\u4F4D\\u7F6E\\u504F\\u79FB\\uFF0C\\u6309\\u5730\\u56FE\\u7B49\\u7EA7\\u7F29\\u653E\\u540E\\u7684\\u8DDD\\u79BB \\u5355\\u4FA7 * 2\\n float texV = lineOffsetWidth / linePixelSize; // \\u7EBF\\u56FE\\u5C42\\u8D34\\u56FE\\u90E8\\u5206\\u7684 v \\u5750\\u6807\\u503C\\n\\n v_texture_data = vec4(currentLinePointRatio, lineDistance, d_texPixelLen, texV);\\n // \\u8BBE\\u7F6E\\u6570\\u636E\\u96C6\\u7684\\u53C2\\u6570\\n\\n vec4 project_pos = project_position(vec4(a_Position.xy, 0, 1.0), a_Position64Low);\\n\\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, a_Size.y, 1.0));\\n\\n float h = float(a_Position.z) * u_vertexScale; // \\u7EBF\\u9876\\u70B9\\u7684\\u9AD8\\u5EA6 - \\u517C\\u5BB9\\u4E0D\\u5B58\\u5728\\u7B2C\\u4E09\\u4E2A\\u6570\\u503C\\u7684\\u60C5\\u51B5 vertex height\\n float lineHeight = a_Size.y; // size \\u7B2C\\u4E8C\\u4E2A\\u53C2\\u6570\\u4EE3\\u8868\\u7684\\u9AD8\\u5EA6 [linewidth, lineheight]\\n\\n // \\u517C\\u5BB9 mapbox \\u5728\\u7EBF\\u9AD8\\u5EA6\\u4E0A\\u7684\\u6548\\u679C\\u8868\\u73B0\\u57FA\\u672C\\u4E00\\u81F4\\n if (\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\\n ) {\\n // mapbox\\n // \\u4FDD\\u6301\\u9AD8\\u5EA6\\u76F8\\u5BF9\\u4E0D\\u53D8\\n float mapboxZoomScale = 4.0 / pow(2.0, 21.0 - u_Zoom);\\n h *= mapboxZoomScale;\\n h += u_raisingHeight * mapboxZoomScale;\\n if (u_heightfixed > 0.0) {\\n lineHeight *= mapboxZoomScale;\\n }\\n }\\n\\n gl_Position = project_common_position_to_clipspace(\\n vec4(project_pos.xy + offset, lineHeight + h, 1.0)\\n );\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nexport default class LineModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"textureEventFlag\", false);\n _defineProperty(this, \"texture\", this.createTexture2D({\n data: new Uint8Array([0, 0, 0, 0]),\n width: 1,\n height: 1\n }));\n _defineProperty(this, \"updateTexture\", () => {\n const {\n createTexture2D\n } = this.rendererService;\n if (this.textures.length === 0) {\n this.textures = [this.texture];\n }\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas()\n });\n this.layer.render();\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.NEAREST,\n min: gl.NEAREST,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128\n });\n });\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n DISTANCE_INDEX: 10,\n NORMAL: 11,\n UV: 12\n });\n }\n getCommonUniformsInfo() {\n const {\n sourceColor,\n targetColor,\n textureBlend = 'normal',\n lineType = 'solid',\n dashArray = [10, 5, 0, 0],\n lineTexture = false,\n iconStep = 100,\n vertexHeightScale = 20.0,\n strokeWidth = 0.0,\n raisingHeight = 0,\n heightfixed = false,\n linearDir = LinearDir.VERTICAL,\n // 默认纵向\n blur = [1, 1, 1, 0]\n } = this.layer.getLayerConfig();\n let u_dash_array = dashArray;\n if (lineType !== 'dash') {\n u_dash_array = [0, 0, 0, 0];\n }\n if (u_dash_array.length === 2) {\n u_dash_array.push(0, 0);\n }\n if (this.rendererService.getDirty() && this.texture) {\n var _this$texture;\n (_this$texture = this.texture) === null || _this$texture === void 0 || _this$texture.bind();\n }\n const {\n animateOption\n } = this.layer.getLayerConfig();\n // 转化渐变色\n let useLinearColor = 0; // 默认不生效\n let sourceColorArr = [0, 0, 0, 0];\n let targetColorArr = [0, 0, 0, 0];\n if (sourceColor && targetColor) {\n sourceColorArr = rgb2arr(sourceColor);\n targetColorArr = rgb2arr(targetColor);\n useLinearColor = 1;\n }\n const commonOptions = {\n u_animate: this.animateOption2Array(animateOption),\n u_dash_array,\n u_blur: blur,\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n u_icon_step: iconStep,\n // 是否固定高度\n u_heightfixed: Number(heightfixed),\n // 顶点高度 scale\n u_vertexScale: vertexHeightScale,\n u_raisingHeight: Number(raisingHeight),\n // line border 参数\n u_strokeWidth: strokeWidth,\n u_textureBlend: textureBlend === TextureBlend.NORMAL ? 0.0 : 1.0,\n u_line_texture: lineTexture ? 1.0 : 0.0,\n // 传入线的标识\n u_linearDir: linearDir === LinearDir.VERTICAL ? 1.0 : 0.0,\n u_linearColor: useLinearColor,\n u_time: this.layer.getLayerAnimateTime() || 0\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n // public getAnimateUniforms(): IModelUniform {\n // const { animateOption } = this.layer.getLayerConfig() as ILayerConfig;\n // return {\n // u_animate: this.animateOption2Array(animateOption as IAnimateOption),\n // u_time: this.layer.getLayerAnimateTime(),\n // };\n // }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.initUniformsBuffer();\n // this.updateTexture();\n // this.iconService.on('imageUpdate', this.updateTexture);\n if (!_this.textureEventFlag) {\n _this.textureEventFlag = true;\n _this.updateTexture();\n _this.iconService.on('imageUpdate', _this.updateTexture);\n }\n return _this.buildModels();\n })();\n }\n clearModels() {\n var _this$texture2;\n (_this$texture2 = this.texture) === null || _this$texture2 === void 0 || _this$texture2.destroy();\n this.iconService.off('imageUpdate', this.updateTexture);\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n const {\n depth = false\n } = _this2.layer.getLayerConfig();\n const {\n frag,\n vert,\n type\n } = _this2.getShaders();\n _this2.layer.triangulation = LineTriangulation;\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'line' + type,\n vertexShader: vert,\n fragmentShader: frag,\n triangulation: LineTriangulation,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n depth: {\n enable: depth\n }\n });\n return [model];\n })();\n }\n\n /**\n * 根据参数获取不同的 shader 代码\n * @returns\n */\n getShaders() {\n return {\n frag: line_frag,\n vert: line_vert,\n type: ''\n };\n }\n registerBuiltinAttributes() {\n // 注册 Position 属性 64 位地位部分,经纬度数据开启双精度,避免大于 20层级以上出现数据偏移\n this.registerPosition64LowAttribute();\n this.styleAttributeService.registerStyleAttribute({\n name: 'distanceAndIndex',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_DistanceAndIndexAndMiter',\n shaderLocation: this.attributeLocation.DISTANCE_INDEX,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: (feature, featureIdx, vertex, attributeIdx, normal, vertexIndex) => {\n return vertexIndex === undefined ? [vertex[3], 10, vertex[4]] : [vertex[3], vertexIndex, vertex[4]];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: feature => {\n const {\n size = 1\n } = feature;\n return Array.isArray(size) ? [size[0], size[1]] : [size, 0];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'normal_total_distance',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Normal_Total_Distance',\n shaderLocation: this.attributeLocation.NORMAL,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 4,\n update: (feature, featureIdx, vertex, attributeIdx, normal) => {\n return [...normal, vertex[5]];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_iconMapUV',\n shaderLocation: this.attributeLocation.UV,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: feature => {\n const iconMap = this.iconService.getIconMap();\n const {\n texture\n } = feature;\n const {\n x,\n y\n } = iconMap[texture] || {\n x: 0,\n y: 0\n };\n return [x, y];\n }\n }\n });\n }\n}","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","/**\n * 判断值是否为 null 或 undefined\n * @return 是否为 null 或 undefined\n */\nexport default function isNil(value) {\n return value === null || value === undefined;\n}\n//# sourceMappingURL=is-nil.js.map","var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n","import { get, isPlainObject, set } from '../utils';\n/**\n * Data transformation.\n * @description `data` to `data.value`\n * If `data` is not an object or does not have a `value` property, it will be set to `data.value`.\n * If `data` is an object without a `type` property, it will be set to `data.value`.\n * @param params - The adaptor parameters.\n * @returns The updated parameters with transformed data.\n */\nexport var dataTransform = function (params) {\n var options = params.options;\n var data = options.data;\n if (get(data, 'value'))\n return params;\n if (get(data, 'type') !== 'fetch' && isPlainObject(data)) {\n set(options, 'data.value', data);\n }\n return params;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global.createREGL = factory());\n}(this, (function () { 'use strict';\n\nvar isTypedArray = function (x) {\n return (\n x instanceof Uint8Array ||\n x instanceof Uint16Array ||\n x instanceof Uint32Array ||\n x instanceof Int8Array ||\n x instanceof Int16Array ||\n x instanceof Int32Array ||\n x instanceof Float32Array ||\n x instanceof Float64Array ||\n x instanceof Uint8ClampedArray\n )\n}\n\nvar extend = function (base, opts) {\n var keys = Object.keys(opts)\n for (var i = 0; i < keys.length; ++i) {\n base[keys[i]] = opts[keys[i]]\n }\n return base\n}\n\n// Error checking and parameter validation.\n//\n// Statements for the form `check.someProcedure(...)` get removed by\n// a browserify transform for optimized/minified bundles.\n//\n/* globals atob */\nvar endl = '\\n'\n\n// only used for extracting shader names. if atob not present, then errors\n// will be slightly crappier\nfunction decodeB64 (str) {\n if (typeof atob !== 'undefined') {\n return atob(str)\n }\n return 'base64:' + str\n}\n\nfunction raise (message) {\n var error = new Error('(regl) ' + message)\n console.error(error)\n throw error\n}\n\nfunction check (pred, message) {\n if (!pred) {\n raise(message)\n }\n}\n\nfunction encolon (message) {\n if (message) {\n return ': ' + message\n }\n return ''\n}\n\nfunction checkParameter (param, possibilities, message) {\n if (!(param in possibilities)) {\n raise('unknown parameter (' + param + ')' + encolon(message) +\n '. possible values: ' + Object.keys(possibilities).join())\n }\n}\n\nfunction checkIsTypedArray (data, message) {\n if (!isTypedArray(data)) {\n raise(\n 'invalid parameter type' + encolon(message) +\n '. must be a typed array')\n }\n}\n\nfunction standardTypeEh (value, type) {\n switch (type) {\n case 'number': return typeof value === 'number'\n case 'object': return typeof value === 'object'\n case 'string': return typeof value === 'string'\n case 'boolean': return typeof value === 'boolean'\n case 'function': return typeof value === 'function'\n case 'undefined': return typeof value === 'undefined'\n case 'symbol': return typeof value === 'symbol'\n }\n}\n\nfunction checkTypeOf (value, type, message) {\n if (!standardTypeEh(value, type)) {\n raise(\n 'invalid parameter type' + encolon(message) +\n '. expected ' + type + ', got ' + (typeof value))\n }\n}\n\nfunction checkNonNegativeInt (value, message) {\n if (!((value >= 0) &&\n ((value | 0) === value))) {\n raise('invalid parameter type, (' + value + ')' + encolon(message) +\n '. must be a nonnegative integer')\n }\n}\n\nfunction checkOneOf (value, list, message) {\n if (list.indexOf(value) < 0) {\n raise('invalid value' + encolon(message) + '. must be one of: ' + list)\n }\n}\n\nvar constructorKeys = [\n 'gl',\n 'canvas',\n 'container',\n 'attributes',\n 'pixelRatio',\n 'extensions',\n 'optionalExtensions',\n 'profile',\n 'onDone'\n]\n\nfunction checkConstructor (obj) {\n Object.keys(obj).forEach(function (key) {\n if (constructorKeys.indexOf(key) < 0) {\n raise('invalid regl constructor argument \"' + key + '\". must be one of ' + constructorKeys)\n }\n })\n}\n\nfunction leftPad (str, n) {\n str = str + ''\n while (str.length < n) {\n str = ' ' + str\n }\n return str\n}\n\nfunction ShaderFile () {\n this.name = 'unknown'\n this.lines = []\n this.index = {}\n this.hasErrors = false\n}\n\nfunction ShaderLine (number, line) {\n this.number = number\n this.line = line\n this.errors = []\n}\n\nfunction ShaderError (fileNumber, lineNumber, message) {\n this.file = fileNumber\n this.line = lineNumber\n this.message = message\n}\n\nfunction guessCommand () {\n var error = new Error()\n var stack = (error.stack || error).toString()\n var pat = /compileProcedure.*\\n\\s*at.*\\((.*)\\)/.exec(stack)\n if (pat) {\n return pat[1]\n }\n var pat2 = /compileProcedure.*\\n\\s*at\\s+(.*)(\\n|$)/.exec(stack)\n if (pat2) {\n return pat2[1]\n }\n return 'unknown'\n}\n\nfunction guessCallSite () {\n var error = new Error()\n var stack = (error.stack || error).toString()\n var pat = /at REGLCommand.*\\n\\s+at.*\\((.*)\\)/.exec(stack)\n if (pat) {\n return pat[1]\n }\n var pat2 = /at REGLCommand.*\\n\\s+at\\s+(.*)\\n/.exec(stack)\n if (pat2) {\n return pat2[1]\n }\n return 'unknown'\n}\n\nfunction parseSource (source, command) {\n var lines = source.split('\\n')\n var lineNumber = 1\n var fileNumber = 0\n var files = {\n unknown: new ShaderFile(),\n 0: new ShaderFile()\n }\n files.unknown.name = files[0].name = command || guessCommand()\n files.unknown.lines.push(new ShaderLine(0, ''))\n for (var i = 0; i < lines.length; ++i) {\n var line = lines[i]\n var parts = /^\\s*#\\s*(\\w+)\\s+(.+)\\s*$/.exec(line)\n if (parts) {\n switch (parts[1]) {\n case 'line':\n var lineNumberInfo = /(\\d+)(\\s+\\d+)?/.exec(parts[2])\n if (lineNumberInfo) {\n lineNumber = lineNumberInfo[1] | 0\n if (lineNumberInfo[2]) {\n fileNumber = lineNumberInfo[2] | 0\n if (!(fileNumber in files)) {\n files[fileNumber] = new ShaderFile()\n }\n }\n }\n break\n case 'define':\n var nameInfo = /SHADER_NAME(_B64)?\\s+(.*)$/.exec(parts[2])\n if (nameInfo) {\n files[fileNumber].name = (nameInfo[1]\n ? decodeB64(nameInfo[2])\n : nameInfo[2])\n }\n break\n }\n }\n files[fileNumber].lines.push(new ShaderLine(lineNumber++, line))\n }\n Object.keys(files).forEach(function (fileNumber) {\n var file = files[fileNumber]\n file.lines.forEach(function (line) {\n file.index[line.number] = line\n })\n })\n return files\n}\n\nfunction parseErrorLog (errLog) {\n var result = []\n errLog.split('\\n').forEach(function (errMsg) {\n if (errMsg.length < 5) {\n return\n }\n var parts = /^ERROR:\\s+(\\d+):(\\d+):\\s*(.*)$/.exec(errMsg)\n if (parts) {\n result.push(new ShaderError(\n parts[1] | 0,\n parts[2] | 0,\n parts[3].trim()))\n } else if (errMsg.length > 0) {\n result.push(new ShaderError('unknown', 0, errMsg))\n }\n })\n return result\n}\n\nfunction annotateFiles (files, errors) {\n errors.forEach(function (error) {\n var file = files[error.file]\n if (file) {\n var line = file.index[error.line]\n if (line) {\n line.errors.push(error)\n file.hasErrors = true\n return\n }\n }\n files.unknown.hasErrors = true\n files.unknown.lines[0].errors.push(error)\n })\n}\n\nfunction checkShaderError (gl, shader, source, type, command) {\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n var errLog = gl.getShaderInfoLog(shader)\n var typeName = type === gl.FRAGMENT_SHADER ? 'fragment' : 'vertex'\n checkCommandType(source, 'string', typeName + ' shader source must be a string', command)\n var files = parseSource(source, command)\n var errors = parseErrorLog(errLog)\n annotateFiles(files, errors)\n\n Object.keys(files).forEach(function (fileNumber) {\n var file = files[fileNumber]\n if (!file.hasErrors) {\n return\n }\n\n var strings = ['']\n var styles = ['']\n\n function push (str, style) {\n strings.push(str)\n styles.push(style || '')\n }\n\n push('file number ' + fileNumber + ': ' + file.name + '\\n', 'color:red;text-decoration:underline;font-weight:bold')\n\n file.lines.forEach(function (line) {\n if (line.errors.length > 0) {\n push(leftPad(line.number, 4) + '| ', 'background-color:yellow; font-weight:bold')\n push(line.line + endl, 'color:red; background-color:yellow; font-weight:bold')\n\n // try to guess token\n var offset = 0\n line.errors.forEach(function (error) {\n var message = error.message\n var token = /^\\s*'(.*)'\\s*:\\s*(.*)$/.exec(message)\n if (token) {\n var tokenPat = token[1]\n message = token[2]\n switch (tokenPat) {\n case 'assign':\n tokenPat = '='\n break\n }\n offset = Math.max(line.line.indexOf(tokenPat, offset), 0)\n } else {\n offset = 0\n }\n\n push(leftPad('| ', 6))\n push(leftPad('^^^', offset + 3) + endl, 'font-weight:bold')\n push(leftPad('| ', 6))\n push(message + endl, 'font-weight:bold')\n })\n push(leftPad('| ', 6) + endl)\n } else {\n push(leftPad(line.number, 4) + '| ')\n push(line.line + endl, 'color:red')\n }\n })\n if (typeof document !== 'undefined' && !window.chrome) {\n styles[0] = strings.join('%c')\n console.log.apply(console, styles)\n } else {\n console.log(strings.join(''))\n }\n })\n\n check.raise('Error compiling ' + typeName + ' shader, ' + files[0].name)\n }\n}\n\nfunction checkLinkError (gl, program, fragShader, vertShader, command) {\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n var errLog = gl.getProgramInfoLog(program)\n var fragParse = parseSource(fragShader, command)\n var vertParse = parseSource(vertShader, command)\n\n var header = 'Error linking program with vertex shader, \"' +\n vertParse[0].name + '\", and fragment shader \"' + fragParse[0].name + '\"'\n\n if (typeof document !== 'undefined') {\n console.log('%c' + header + endl + '%c' + errLog,\n 'color:red;text-decoration:underline;font-weight:bold',\n 'color:red')\n } else {\n console.log(header + endl + errLog)\n }\n check.raise(header)\n }\n}\n\nfunction saveCommandRef (object) {\n object._commandRef = guessCommand()\n}\n\nfunction saveDrawCommandInfo (opts, uniforms, attributes, stringStore) {\n saveCommandRef(opts)\n\n function id (str) {\n if (str) {\n return stringStore.id(str)\n }\n return 0\n }\n opts._fragId = id(opts.static.frag)\n opts._vertId = id(opts.static.vert)\n\n function addProps (dict, set) {\n Object.keys(set).forEach(function (u) {\n dict[stringStore.id(u)] = true\n })\n }\n\n var uniformSet = opts._uniformSet = {}\n addProps(uniformSet, uniforms.static)\n addProps(uniformSet, uniforms.dynamic)\n\n var attributeSet = opts._attributeSet = {}\n addProps(attributeSet, attributes.static)\n addProps(attributeSet, attributes.dynamic)\n\n opts._hasCount = (\n 'count' in opts.static ||\n 'count' in opts.dynamic ||\n 'elements' in opts.static ||\n 'elements' in opts.dynamic)\n}\n\nfunction commandRaise (message, command) {\n var callSite = guessCallSite()\n raise(message +\n ' in command ' + (command || guessCommand()) +\n (callSite === 'unknown' ? '' : ' called from ' + callSite))\n}\n\nfunction checkCommand (pred, message, command) {\n if (!pred) {\n commandRaise(message, command || guessCommand())\n }\n}\n\nfunction checkParameterCommand (param, possibilities, message, command) {\n if (!(param in possibilities)) {\n commandRaise(\n 'unknown parameter (' + param + ')' + encolon(message) +\n '. possible values: ' + Object.keys(possibilities).join(),\n command || guessCommand())\n }\n}\n\nfunction checkCommandType (value, type, message, command) {\n if (!standardTypeEh(value, type)) {\n commandRaise(\n 'invalid parameter type' + encolon(message) +\n '. expected ' + type + ', got ' + (typeof value),\n command || guessCommand())\n }\n}\n\nfunction checkOptional (block) {\n block()\n}\n\nfunction checkFramebufferFormat (attachment, texFormats, rbFormats) {\n if (attachment.texture) {\n checkOneOf(\n attachment.texture._texture.internalformat,\n texFormats,\n 'unsupported texture format for attachment')\n } else {\n checkOneOf(\n attachment.renderbuffer._renderbuffer.format,\n rbFormats,\n 'unsupported renderbuffer format for attachment')\n }\n}\n\nvar GL_CLAMP_TO_EDGE = 0x812F\n\nvar GL_NEAREST = 0x2600\nvar GL_NEAREST_MIPMAP_NEAREST = 0x2700\nvar GL_LINEAR_MIPMAP_NEAREST = 0x2701\nvar GL_NEAREST_MIPMAP_LINEAR = 0x2702\nvar GL_LINEAR_MIPMAP_LINEAR = 0x2703\n\nvar GL_BYTE = 5120\nvar GL_UNSIGNED_BYTE = 5121\nvar GL_SHORT = 5122\nvar GL_UNSIGNED_SHORT = 5123\nvar GL_INT = 5124\nvar GL_UNSIGNED_INT = 5125\nvar GL_FLOAT = 5126\n\nvar GL_UNSIGNED_SHORT_4_4_4_4 = 0x8033\nvar GL_UNSIGNED_SHORT_5_5_5_1 = 0x8034\nvar GL_UNSIGNED_SHORT_5_6_5 = 0x8363\nvar GL_UNSIGNED_INT_24_8_WEBGL = 0x84FA\n\nvar GL_HALF_FLOAT_OES = 0x8D61\n\nvar TYPE_SIZE = {}\n\nTYPE_SIZE[GL_BYTE] =\nTYPE_SIZE[GL_UNSIGNED_BYTE] = 1\n\nTYPE_SIZE[GL_SHORT] =\nTYPE_SIZE[GL_UNSIGNED_SHORT] =\nTYPE_SIZE[GL_HALF_FLOAT_OES] =\nTYPE_SIZE[GL_UNSIGNED_SHORT_5_6_5] =\nTYPE_SIZE[GL_UNSIGNED_SHORT_4_4_4_4] =\nTYPE_SIZE[GL_UNSIGNED_SHORT_5_5_5_1] = 2\n\nTYPE_SIZE[GL_INT] =\nTYPE_SIZE[GL_UNSIGNED_INT] =\nTYPE_SIZE[GL_FLOAT] =\nTYPE_SIZE[GL_UNSIGNED_INT_24_8_WEBGL] = 4\n\nfunction pixelSize (type, channels) {\n if (type === GL_UNSIGNED_SHORT_5_5_5_1 ||\n type === GL_UNSIGNED_SHORT_4_4_4_4 ||\n type === GL_UNSIGNED_SHORT_5_6_5) {\n return 2\n } else if (type === GL_UNSIGNED_INT_24_8_WEBGL) {\n return 4\n } else {\n return TYPE_SIZE[type] * channels\n }\n}\n\nfunction isPow2 (v) {\n return !(v & (v - 1)) && (!!v)\n}\n\nfunction checkTexture2D (info, mipData, limits) {\n var i\n var w = mipData.width\n var h = mipData.height\n var c = mipData.channels\n\n // Check texture shape\n check(w > 0 && w <= limits.maxTextureSize &&\n h > 0 && h <= limits.maxTextureSize,\n 'invalid texture shape')\n\n // check wrap mode\n if (info.wrapS !== GL_CLAMP_TO_EDGE || info.wrapT !== GL_CLAMP_TO_EDGE) {\n check(isPow2(w) && isPow2(h),\n 'incompatible wrap mode for texture, both width and height must be power of 2')\n }\n\n if (mipData.mipmask === 1) {\n if (w !== 1 && h !== 1) {\n check(\n info.minFilter !== GL_NEAREST_MIPMAP_NEAREST &&\n info.minFilter !== GL_NEAREST_MIPMAP_LINEAR &&\n info.minFilter !== GL_LINEAR_MIPMAP_NEAREST &&\n info.minFilter !== GL_LINEAR_MIPMAP_LINEAR,\n 'min filter requires mipmap')\n }\n } else {\n // texture must be power of 2\n check(isPow2(w) && isPow2(h),\n 'texture must be a square power of 2 to support mipmapping')\n check(mipData.mipmask === (w << 1) - 1,\n 'missing or incomplete mipmap data')\n }\n\n if (mipData.type === GL_FLOAT) {\n if (limits.extensions.indexOf('oes_texture_float_linear') < 0) {\n check(info.minFilter === GL_NEAREST && info.magFilter === GL_NEAREST,\n 'filter not supported, must enable oes_texture_float_linear')\n }\n check(!info.genMipmaps,\n 'mipmap generation not supported with float textures')\n }\n\n // check image complete\n var mipimages = mipData.images\n for (i = 0; i < 16; ++i) {\n if (mipimages[i]) {\n var mw = w >> i\n var mh = h >> i\n check(mipData.mipmask & (1 << i), 'missing mipmap data')\n\n var img = mipimages[i]\n\n check(\n img.width === mw &&\n img.height === mh,\n 'invalid shape for mip images')\n\n check(\n img.format === mipData.format &&\n img.internalformat === mipData.internalformat &&\n img.type === mipData.type,\n 'incompatible type for mip image')\n\n if (img.compressed) {\n // TODO: check size for compressed images\n } else if (img.data) {\n // check(img.data.byteLength === mw * mh *\n // Math.max(pixelSize(img.type, c), img.unpackAlignment),\n var rowSize = Math.ceil(pixelSize(img.type, c) * mw / img.unpackAlignment) * img.unpackAlignment\n check(img.data.byteLength === rowSize * mh,\n 'invalid data for image, buffer size is inconsistent with image format')\n } else if (img.element) {\n // TODO: check element can be loaded\n } else if (img.copy) {\n // TODO: check compatible format and type\n }\n } else if (!info.genMipmaps) {\n check((mipData.mipmask & (1 << i)) === 0, 'extra mipmap data')\n }\n }\n\n if (mipData.compressed) {\n check(!info.genMipmaps,\n 'mipmap generation for compressed images not supported')\n }\n}\n\nfunction checkTextureCube (texture, info, faces, limits) {\n var w = texture.width\n var h = texture.height\n var c = texture.channels\n\n // Check texture shape\n check(\n w > 0 && w <= limits.maxTextureSize && h > 0 && h <= limits.maxTextureSize,\n 'invalid texture shape')\n check(\n w === h,\n 'cube map must be square')\n check(\n info.wrapS === GL_CLAMP_TO_EDGE && info.wrapT === GL_CLAMP_TO_EDGE,\n 'wrap mode not supported by cube map')\n\n for (var i = 0; i < faces.length; ++i) {\n var face = faces[i]\n check(\n face.width === w && face.height === h,\n 'inconsistent cube map face shape')\n\n if (info.genMipmaps) {\n check(!face.compressed,\n 'can not generate mipmap for compressed textures')\n check(face.mipmask === 1,\n 'can not specify mipmaps and generate mipmaps')\n } else {\n // TODO: check mip and filter mode\n }\n\n var mipmaps = face.images\n for (var j = 0; j < 16; ++j) {\n var img = mipmaps[j]\n if (img) {\n var mw = w >> j\n var mh = h >> j\n check(face.mipmask & (1 << j), 'missing mipmap data')\n check(\n img.width === mw &&\n img.height === mh,\n 'invalid shape for mip images')\n check(\n img.format === texture.format &&\n img.internalformat === texture.internalformat &&\n img.type === texture.type,\n 'incompatible type for mip image')\n\n if (img.compressed) {\n // TODO: check size for compressed images\n } else if (img.data) {\n check(img.data.byteLength === mw * mh *\n Math.max(pixelSize(img.type, c), img.unpackAlignment),\n 'invalid data for image, buffer size is inconsistent with image format')\n } else if (img.element) {\n // TODO: check element can be loaded\n } else if (img.copy) {\n // TODO: check compatible format and type\n }\n }\n }\n }\n}\n\nvar check$1 = extend(check, {\n optional: checkOptional,\n raise: raise,\n commandRaise: commandRaise,\n command: checkCommand,\n parameter: checkParameter,\n commandParameter: checkParameterCommand,\n constructor: checkConstructor,\n type: checkTypeOf,\n commandType: checkCommandType,\n isTypedArray: checkIsTypedArray,\n nni: checkNonNegativeInt,\n oneOf: checkOneOf,\n shaderError: checkShaderError,\n linkError: checkLinkError,\n callSite: guessCallSite,\n saveCommandRef: saveCommandRef,\n saveDrawInfo: saveDrawCommandInfo,\n framebufferFormat: checkFramebufferFormat,\n guessCommand: guessCommand,\n texture2D: checkTexture2D,\n textureCube: checkTextureCube\n});\n\nvar VARIABLE_COUNTER = 0\n\nvar DYN_FUNC = 0\n\nfunction DynamicVariable (type, data) {\n this.id = (VARIABLE_COUNTER++)\n this.type = type\n this.data = data\n}\n\nfunction escapeStr (str) {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')\n}\n\nfunction splitParts (str) {\n if (str.length === 0) {\n return []\n }\n\n var firstChar = str.charAt(0)\n var lastChar = str.charAt(str.length - 1)\n\n if (str.length > 1 &&\n firstChar === lastChar &&\n (firstChar === '\"' || firstChar === \"'\")) {\n return ['\"' + escapeStr(str.substr(1, str.length - 2)) + '\"']\n }\n\n var parts = /\\[(false|true|null|\\d+|'[^']*'|\"[^\"]*\")\\]/.exec(str)\n if (parts) {\n return (\n splitParts(str.substr(0, parts.index))\n .concat(splitParts(parts[1]))\n .concat(splitParts(str.substr(parts.index + parts[0].length)))\n )\n }\n\n var subparts = str.split('.')\n if (subparts.length === 1) {\n return ['\"' + escapeStr(str) + '\"']\n }\n\n var result = []\n for (var i = 0; i < subparts.length; ++i) {\n result = result.concat(splitParts(subparts[i]))\n }\n return result\n}\n\nfunction toAccessorString (str) {\n return '[' + splitParts(str).join('][') + ']'\n}\n\nfunction defineDynamic (type, data) {\n return new DynamicVariable(type, toAccessorString(data + ''))\n}\n\nfunction isDynamic (x) {\n return (typeof x === 'function' && !x._reglType) ||\n x instanceof DynamicVariable\n}\n\nfunction unbox (x, path) {\n if (typeof x === 'function') {\n return new DynamicVariable(DYN_FUNC, x)\n }\n return x\n}\n\nvar dynamic = {\n DynamicVariable: DynamicVariable,\n define: defineDynamic,\n isDynamic: isDynamic,\n unbox: unbox,\n accessor: toAccessorString\n};\n\n/* globals requestAnimationFrame, cancelAnimationFrame */\nvar raf = {\n next: typeof requestAnimationFrame === 'function'\n ? function (cb) { return requestAnimationFrame(cb) }\n : function (cb) { return setTimeout(cb, 16) },\n cancel: typeof cancelAnimationFrame === 'function'\n ? function (raf) { return cancelAnimationFrame(raf) }\n : clearTimeout\n};\n\n/* globals performance */\nvar clock = (typeof performance !== 'undefined' && performance.now)\n ? function () { return performance.now() }\n : function () { return +(new Date()) };\n\nfunction createStringStore () {\n var stringIds = { '': 0 }\n var stringValues = ['']\n return {\n id: function (str) {\n var result = stringIds[str]\n if (result) {\n return result\n }\n result = stringIds[str] = stringValues.length\n stringValues.push(str)\n return result\n },\n\n str: function (id) {\n return stringValues[id]\n }\n }\n}\n\n// Context and canvas creation helper functions\nfunction createCanvas (element, onDone, pixelRatio) {\n var canvas = document.createElement('canvas')\n extend(canvas.style, {\n border: 0,\n margin: 0,\n padding: 0,\n top: 0,\n left: 0\n })\n element.appendChild(canvas)\n\n if (element === document.body) {\n canvas.style.position = 'absolute'\n extend(element.style, {\n margin: 0,\n padding: 0\n })\n }\n\n function resize () {\n var w = window.innerWidth\n var h = window.innerHeight\n if (element !== document.body) {\n var bounds = element.getBoundingClientRect()\n w = bounds.right - bounds.left\n h = bounds.bottom - bounds.top\n }\n canvas.width = pixelRatio * w\n canvas.height = pixelRatio * h\n extend(canvas.style, {\n width: w + 'px',\n height: h + 'px'\n })\n }\n\n var resizeObserver\n if (element !== document.body && typeof ResizeObserver === 'function') {\n // ignore 'ResizeObserver' is not defined\n // eslint-disable-next-line\n resizeObserver = new ResizeObserver(function () {\n // setTimeout to avoid flicker\n setTimeout(resize)\n })\n resizeObserver.observe(element)\n } else {\n window.addEventListener('resize', resize, false)\n }\n\n function onDestroy () {\n if (resizeObserver) {\n resizeObserver.disconnect()\n } else {\n window.removeEventListener('resize', resize)\n }\n element.removeChild(canvas)\n }\n\n resize()\n\n return {\n canvas: canvas,\n onDestroy: onDestroy\n }\n}\n\nfunction createContext (canvas, contextAttributes) {\n function get (name) {\n try {\n return canvas.getContext(name, contextAttributes)\n } catch (e) {\n return null\n }\n }\n return (\n get('webgl') ||\n get('experimental-webgl') ||\n get('webgl-experimental')\n )\n}\n\nfunction isHTMLElement (obj) {\n return (\n typeof obj.nodeName === 'string' &&\n typeof obj.appendChild === 'function' &&\n typeof obj.getBoundingClientRect === 'function'\n )\n}\n\nfunction isWebGLContext (obj) {\n return (\n typeof obj.drawArrays === 'function' ||\n typeof obj.drawElements === 'function'\n )\n}\n\nfunction parseExtensions (input) {\n if (typeof input === 'string') {\n return input.split()\n }\n check$1(Array.isArray(input), 'invalid extension array')\n return input\n}\n\nfunction getElement (desc) {\n if (typeof desc === 'string') {\n check$1(typeof document !== 'undefined', 'not supported outside of DOM')\n return document.querySelector(desc)\n }\n return desc\n}\n\nfunction parseArgs (args_) {\n var args = args_ || {}\n var element, container, canvas, gl\n var contextAttributes = {}\n var extensions = []\n var optionalExtensions = []\n var pixelRatio = (typeof window === 'undefined' ? 1 : window.devicePixelRatio)\n var profile = false\n var onDone = function (err) {\n if (err) {\n check$1.raise(err)\n }\n }\n var onDestroy = function () {}\n if (typeof args === 'string') {\n check$1(\n typeof document !== 'undefined',\n 'selector queries only supported in DOM enviroments')\n element = document.querySelector(args)\n check$1(element, 'invalid query string for element')\n } else if (typeof args === 'object') {\n if (isHTMLElement(args)) {\n element = args\n } else if (isWebGLContext(args)) {\n gl = args\n canvas = gl.canvas\n } else {\n check$1.constructor(args)\n if ('gl' in args) {\n gl = args.gl\n } else if ('canvas' in args) {\n canvas = getElement(args.canvas)\n } else if ('container' in args) {\n container = getElement(args.container)\n }\n if ('attributes' in args) {\n contextAttributes = args.attributes\n check$1.type(contextAttributes, 'object', 'invalid context attributes')\n }\n if ('extensions' in args) {\n extensions = parseExtensions(args.extensions)\n }\n if ('optionalExtensions' in args) {\n optionalExtensions = parseExtensions(args.optionalExtensions)\n }\n if ('onDone' in args) {\n check$1.type(\n args.onDone, 'function',\n 'invalid or missing onDone callback')\n onDone = args.onDone\n }\n if ('profile' in args) {\n profile = !!args.profile\n }\n if ('pixelRatio' in args) {\n pixelRatio = +args.pixelRatio\n check$1(pixelRatio > 0, 'invalid pixel ratio')\n }\n }\n } else {\n check$1.raise('invalid arguments to regl')\n }\n\n if (element) {\n if (element.nodeName.toLowerCase() === 'canvas') {\n canvas = element\n } else {\n container = element\n }\n }\n\n if (!gl) {\n if (!canvas) {\n check$1(\n typeof document !== 'undefined',\n 'must manually specify webgl context outside of DOM environments')\n var result = createCanvas(container || document.body, onDone, pixelRatio)\n if (!result) {\n return null\n }\n canvas = result.canvas\n onDestroy = result.onDestroy\n }\n // workaround for chromium bug, premultiplied alpha value is platform dependent\n if (contextAttributes.premultipliedAlpha === undefined) contextAttributes.premultipliedAlpha = true\n gl = createContext(canvas, contextAttributes)\n }\n\n if (!gl) {\n onDestroy()\n onDone('webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org')\n return null\n }\n\n return {\n gl: gl,\n canvas: canvas,\n container: container,\n extensions: extensions,\n optionalExtensions: optionalExtensions,\n pixelRatio: pixelRatio,\n profile: profile,\n onDone: onDone,\n onDestroy: onDestroy\n }\n}\n\nfunction createExtensionCache (gl, config) {\n var extensions = {}\n\n function tryLoadExtension (name_) {\n check$1.type(name_, 'string', 'extension name must be string')\n var name = name_.toLowerCase()\n var ext\n try {\n ext = extensions[name] = gl.getExtension(name)\n } catch (e) {}\n return !!ext\n }\n\n for (var i = 0; i < config.extensions.length; ++i) {\n var name = config.extensions[i]\n if (!tryLoadExtension(name)) {\n config.onDestroy()\n config.onDone('\"' + name + '\" extension is not supported by the current WebGL context, try upgrading your system or a different browser')\n return null\n }\n }\n\n config.optionalExtensions.forEach(tryLoadExtension)\n\n return {\n extensions: extensions,\n restore: function () {\n Object.keys(extensions).forEach(function (name) {\n if (extensions[name] && !tryLoadExtension(name)) {\n throw new Error('(regl): error restoring extension ' + name)\n }\n })\n }\n }\n}\n\nfunction loop (n, f) {\n var result = Array(n)\n for (var i = 0; i < n; ++i) {\n result[i] = f(i)\n }\n return result\n}\n\nvar GL_BYTE$1 = 5120\nvar GL_UNSIGNED_BYTE$2 = 5121\nvar GL_SHORT$1 = 5122\nvar GL_UNSIGNED_SHORT$1 = 5123\nvar GL_INT$1 = 5124\nvar GL_UNSIGNED_INT$1 = 5125\nvar GL_FLOAT$2 = 5126\n\nfunction nextPow16 (v) {\n for (var i = 16; i <= (1 << 28); i *= 16) {\n if (v <= i) {\n return i\n }\n }\n return 0\n}\n\nfunction log2 (v) {\n var r, shift\n r = (v > 0xFFFF) << 4\n v >>>= r\n shift = (v > 0xFF) << 3\n v >>>= shift; r |= shift\n shift = (v > 0xF) << 2\n v >>>= shift; r |= shift\n shift = (v > 0x3) << 1\n v >>>= shift; r |= shift\n return r | (v >> 1)\n}\n\nfunction createPool () {\n var bufferPool = loop(8, function () {\n return []\n })\n\n function alloc (n) {\n var sz = nextPow16(n)\n var bin = bufferPool[log2(sz) >> 2]\n if (bin.length > 0) {\n return bin.pop()\n }\n return new ArrayBuffer(sz)\n }\n\n function free (buf) {\n bufferPool[log2(buf.byteLength) >> 2].push(buf)\n }\n\n function allocType (type, n) {\n var result = null\n switch (type) {\n case GL_BYTE$1:\n result = new Int8Array(alloc(n), 0, n)\n break\n case GL_UNSIGNED_BYTE$2:\n result = new Uint8Array(alloc(n), 0, n)\n break\n case GL_SHORT$1:\n result = new Int16Array(alloc(2 * n), 0, n)\n break\n case GL_UNSIGNED_SHORT$1:\n result = new Uint16Array(alloc(2 * n), 0, n)\n break\n case GL_INT$1:\n result = new Int32Array(alloc(4 * n), 0, n)\n break\n case GL_UNSIGNED_INT$1:\n result = new Uint32Array(alloc(4 * n), 0, n)\n break\n case GL_FLOAT$2:\n result = new Float32Array(alloc(4 * n), 0, n)\n break\n default:\n return null\n }\n if (result.length !== n) {\n return result.subarray(0, n)\n }\n return result\n }\n\n function freeType (array) {\n free(array.buffer)\n }\n\n return {\n alloc: alloc,\n free: free,\n allocType: allocType,\n freeType: freeType\n }\n}\n\nvar pool = createPool()\n\n// zero pool for initial zero data\npool.zero = createPool()\n\nvar GL_SUBPIXEL_BITS = 0x0D50\nvar GL_RED_BITS = 0x0D52\nvar GL_GREEN_BITS = 0x0D53\nvar GL_BLUE_BITS = 0x0D54\nvar GL_ALPHA_BITS = 0x0D55\nvar GL_DEPTH_BITS = 0x0D56\nvar GL_STENCIL_BITS = 0x0D57\n\nvar GL_ALIASED_POINT_SIZE_RANGE = 0x846D\nvar GL_ALIASED_LINE_WIDTH_RANGE = 0x846E\n\nvar GL_MAX_TEXTURE_SIZE = 0x0D33\nvar GL_MAX_VIEWPORT_DIMS = 0x0D3A\nvar GL_MAX_VERTEX_ATTRIBS = 0x8869\nvar GL_MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB\nvar GL_MAX_VARYING_VECTORS = 0x8DFC\nvar GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D\nvar GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C\nvar GL_MAX_TEXTURE_IMAGE_UNITS = 0x8872\nvar GL_MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD\nvar GL_MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C\nvar GL_MAX_RENDERBUFFER_SIZE = 0x84E8\n\nvar GL_VENDOR = 0x1F00\nvar GL_RENDERER = 0x1F01\nvar GL_VERSION = 0x1F02\nvar GL_SHADING_LANGUAGE_VERSION = 0x8B8C\n\nvar GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF\n\nvar GL_MAX_COLOR_ATTACHMENTS_WEBGL = 0x8CDF\nvar GL_MAX_DRAW_BUFFERS_WEBGL = 0x8824\n\nvar GL_TEXTURE_2D = 0x0DE1\nvar GL_TEXTURE_CUBE_MAP = 0x8513\nvar GL_TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515\nvar GL_TEXTURE0 = 0x84C0\nvar GL_RGBA = 0x1908\nvar GL_FLOAT$1 = 0x1406\nvar GL_UNSIGNED_BYTE$1 = 0x1401\nvar GL_FRAMEBUFFER = 0x8D40\nvar GL_FRAMEBUFFER_COMPLETE = 0x8CD5\nvar GL_COLOR_ATTACHMENT0 = 0x8CE0\nvar GL_COLOR_BUFFER_BIT$1 = 0x4000\n\nvar wrapLimits = function (gl, extensions) {\n var maxAnisotropic = 1\n if (extensions.ext_texture_filter_anisotropic) {\n maxAnisotropic = gl.getParameter(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT)\n }\n\n var maxDrawbuffers = 1\n var maxColorAttachments = 1\n if (extensions.webgl_draw_buffers) {\n maxDrawbuffers = gl.getParameter(GL_MAX_DRAW_BUFFERS_WEBGL)\n maxColorAttachments = gl.getParameter(GL_MAX_COLOR_ATTACHMENTS_WEBGL)\n }\n\n // detect if reading float textures is available (Safari doesn't support)\n var readFloat = !!extensions.oes_texture_float\n if (readFloat) {\n var readFloatTexture = gl.createTexture()\n gl.bindTexture(GL_TEXTURE_2D, readFloatTexture)\n gl.texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_FLOAT$1, null)\n\n var fbo = gl.createFramebuffer()\n gl.bindFramebuffer(GL_FRAMEBUFFER, fbo)\n gl.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, readFloatTexture, 0)\n gl.bindTexture(GL_TEXTURE_2D, null)\n\n if (gl.checkFramebufferStatus(GL_FRAMEBUFFER) !== GL_FRAMEBUFFER_COMPLETE) readFloat = false\n\n else {\n gl.viewport(0, 0, 1, 1)\n gl.clearColor(1.0, 0.0, 0.0, 1.0)\n gl.clear(GL_COLOR_BUFFER_BIT$1)\n var pixels = pool.allocType(GL_FLOAT$1, 4)\n gl.readPixels(0, 0, 1, 1, GL_RGBA, GL_FLOAT$1, pixels)\n\n if (gl.getError()) readFloat = false\n else {\n gl.deleteFramebuffer(fbo)\n gl.deleteTexture(readFloatTexture)\n\n readFloat = pixels[0] === 1.0\n }\n\n pool.freeType(pixels)\n }\n }\n\n // detect non power of two cube textures support (IE doesn't support)\n var isIE = typeof navigator !== 'undefined' && (/MSIE/.test(navigator.userAgent) || /Trident\\//.test(navigator.appVersion) || /Edge/.test(navigator.userAgent))\n\n var npotTextureCube = true\n\n if (!isIE) {\n var cubeTexture = gl.createTexture()\n var data = pool.allocType(GL_UNSIGNED_BYTE$1, 36)\n gl.activeTexture(GL_TEXTURE0)\n gl.bindTexture(GL_TEXTURE_CUBE_MAP, cubeTexture)\n gl.texImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA, 3, 3, 0, GL_RGBA, GL_UNSIGNED_BYTE$1, data)\n pool.freeType(data)\n gl.bindTexture(GL_TEXTURE_CUBE_MAP, null)\n gl.deleteTexture(cubeTexture)\n npotTextureCube = !gl.getError()\n }\n\n return {\n // drawing buffer bit depth\n colorBits: [\n gl.getParameter(GL_RED_BITS),\n gl.getParameter(GL_GREEN_BITS),\n gl.getParameter(GL_BLUE_BITS),\n gl.getParameter(GL_ALPHA_BITS)\n ],\n depthBits: gl.getParameter(GL_DEPTH_BITS),\n stencilBits: gl.getParameter(GL_STENCIL_BITS),\n subpixelBits: gl.getParameter(GL_SUBPIXEL_BITS),\n\n // supported extensions\n extensions: Object.keys(extensions).filter(function (ext) {\n return !!extensions[ext]\n }),\n\n // max aniso samples\n maxAnisotropic: maxAnisotropic,\n\n // max draw buffers\n maxDrawbuffers: maxDrawbuffers,\n maxColorAttachments: maxColorAttachments,\n\n // point and line size ranges\n pointSizeDims: gl.getParameter(GL_ALIASED_POINT_SIZE_RANGE),\n lineWidthDims: gl.getParameter(GL_ALIASED_LINE_WIDTH_RANGE),\n maxViewportDims: gl.getParameter(GL_MAX_VIEWPORT_DIMS),\n maxCombinedTextureUnits: gl.getParameter(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS),\n maxCubeMapSize: gl.getParameter(GL_MAX_CUBE_MAP_TEXTURE_SIZE),\n maxRenderbufferSize: gl.getParameter(GL_MAX_RENDERBUFFER_SIZE),\n maxTextureUnits: gl.getParameter(GL_MAX_TEXTURE_IMAGE_UNITS),\n maxTextureSize: gl.getParameter(GL_MAX_TEXTURE_SIZE),\n maxAttributes: gl.getParameter(GL_MAX_VERTEX_ATTRIBS),\n maxVertexUniforms: gl.getParameter(GL_MAX_VERTEX_UNIFORM_VECTORS),\n maxVertexTextureUnits: gl.getParameter(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS),\n maxVaryingVectors: gl.getParameter(GL_MAX_VARYING_VECTORS),\n maxFragmentUniforms: gl.getParameter(GL_MAX_FRAGMENT_UNIFORM_VECTORS),\n\n // vendor info\n glsl: gl.getParameter(GL_SHADING_LANGUAGE_VERSION),\n renderer: gl.getParameter(GL_RENDERER),\n vendor: gl.getParameter(GL_VENDOR),\n version: gl.getParameter(GL_VERSION),\n\n // quirks\n readFloat: readFloat,\n npotTextureCube: npotTextureCube\n }\n}\n\nfunction isNDArrayLike (obj) {\n return (\n !!obj &&\n typeof obj === 'object' &&\n Array.isArray(obj.shape) &&\n Array.isArray(obj.stride) &&\n typeof obj.offset === 'number' &&\n obj.shape.length === obj.stride.length &&\n (Array.isArray(obj.data) ||\n isTypedArray(obj.data)))\n}\n\nvar values = function (obj) {\n return Object.keys(obj).map(function (key) { return obj[key] })\n}\n\nvar flattenUtils = {\n shape: arrayShape$1,\n flatten: flattenArray\n};\n\nfunction flatten1D (array, nx, out) {\n for (var i = 0; i < nx; ++i) {\n out[i] = array[i]\n }\n}\n\nfunction flatten2D (array, nx, ny, out) {\n var ptr = 0\n for (var i = 0; i < nx; ++i) {\n var row = array[i]\n for (var j = 0; j < ny; ++j) {\n out[ptr++] = row[j]\n }\n }\n}\n\nfunction flatten3D (array, nx, ny, nz, out, ptr_) {\n var ptr = ptr_\n for (var i = 0; i < nx; ++i) {\n var row = array[i]\n for (var j = 0; j < ny; ++j) {\n var col = row[j]\n for (var k = 0; k < nz; ++k) {\n out[ptr++] = col[k]\n }\n }\n }\n}\n\nfunction flattenRec (array, shape, level, out, ptr) {\n var stride = 1\n for (var i = level + 1; i < shape.length; ++i) {\n stride *= shape[i]\n }\n var n = shape[level]\n if (shape.length - level === 4) {\n var nx = shape[level + 1]\n var ny = shape[level + 2]\n var nz = shape[level + 3]\n for (i = 0; i < n; ++i) {\n flatten3D(array[i], nx, ny, nz, out, ptr)\n ptr += stride\n }\n } else {\n for (i = 0; i < n; ++i) {\n flattenRec(array[i], shape, level + 1, out, ptr)\n ptr += stride\n }\n }\n}\n\nfunction flattenArray (array, shape, type, out_) {\n var sz = 1\n if (shape.length) {\n for (var i = 0; i < shape.length; ++i) {\n sz *= shape[i]\n }\n } else {\n sz = 0\n }\n var out = out_ || pool.allocType(type, sz)\n switch (shape.length) {\n case 0:\n break\n case 1:\n flatten1D(array, shape[0], out)\n break\n case 2:\n flatten2D(array, shape[0], shape[1], out)\n break\n case 3:\n flatten3D(array, shape[0], shape[1], shape[2], out, 0)\n break\n default:\n flattenRec(array, shape, 0, out, 0)\n }\n return out\n}\n\nfunction arrayShape$1 (array_) {\n var shape = []\n for (var array = array_; array.length; array = array[0]) {\n shape.push(array.length)\n }\n return shape\n}\n\nvar arrayTypes = {\n\t\"[object Int8Array]\": 5120,\n\t\"[object Int16Array]\": 5122,\n\t\"[object Int32Array]\": 5124,\n\t\"[object Uint8Array]\": 5121,\n\t\"[object Uint8ClampedArray]\": 5121,\n\t\"[object Uint16Array]\": 5123,\n\t\"[object Uint32Array]\": 5125,\n\t\"[object Float32Array]\": 5126,\n\t\"[object Float64Array]\": 5121,\n\t\"[object ArrayBuffer]\": 5121\n};\n\nvar int8 = 5120;\nvar int16 = 5122;\nvar int32 = 5124;\nvar uint8 = 5121;\nvar uint16 = 5123;\nvar uint32 = 5125;\nvar float = 5126;\nvar float32 = 5126;\nvar glTypes = {\n\tint8: int8,\n\tint16: int16,\n\tint32: int32,\n\tuint8: uint8,\n\tuint16: uint16,\n\tuint32: uint32,\n\tfloat: float,\n\tfloat32: float32\n};\n\nvar dynamic$1 = 35048;\nvar stream = 35040;\nvar usageTypes = {\n\tdynamic: dynamic$1,\n\tstream: stream,\n\t\"static\": 35044\n};\n\nvar arrayFlatten = flattenUtils.flatten\nvar arrayShape = flattenUtils.shape\n\nvar GL_STATIC_DRAW = 0x88E4\nvar GL_STREAM_DRAW = 0x88E0\n\nvar GL_UNSIGNED_BYTE$3 = 5121\nvar GL_FLOAT$3 = 5126\n\nvar DTYPES_SIZES = []\nDTYPES_SIZES[5120] = 1 // int8\nDTYPES_SIZES[5122] = 2 // int16\nDTYPES_SIZES[5124] = 4 // int32\nDTYPES_SIZES[5121] = 1 // uint8\nDTYPES_SIZES[5123] = 2 // uint16\nDTYPES_SIZES[5125] = 4 // uint32\nDTYPES_SIZES[5126] = 4 // float32\n\nfunction typedArrayCode (data) {\n return arrayTypes[Object.prototype.toString.call(data)] | 0\n}\n\nfunction copyArray (out, inp) {\n for (var i = 0; i < inp.length; ++i) {\n out[i] = inp[i]\n }\n}\n\nfunction transpose (\n result, data, shapeX, shapeY, strideX, strideY, offset) {\n var ptr = 0\n for (var i = 0; i < shapeX; ++i) {\n for (var j = 0; j < shapeY; ++j) {\n result[ptr++] = data[strideX * i + strideY * j + offset]\n }\n }\n}\n\nfunction wrapBufferState (gl, stats, config, destroyBuffer) {\n var bufferCount = 0\n var bufferSet = {}\n\n function REGLBuffer (type) {\n this.id = bufferCount++\n this.buffer = gl.createBuffer()\n this.type = type\n this.usage = GL_STATIC_DRAW\n this.byteLength = 0\n this.dimension = 1\n this.dtype = GL_UNSIGNED_BYTE$3\n\n this.persistentData = null\n\n if (config.profile) {\n this.stats = { size: 0 }\n }\n }\n\n REGLBuffer.prototype.bind = function () {\n gl.bindBuffer(this.type, this.buffer)\n }\n\n REGLBuffer.prototype.destroy = function () {\n destroy(this)\n }\n\n var streamPool = []\n\n function createStream (type, data) {\n var buffer = streamPool.pop()\n if (!buffer) {\n buffer = new REGLBuffer(type)\n }\n buffer.bind()\n initBufferFromData(buffer, data, GL_STREAM_DRAW, 0, 1, false)\n return buffer\n }\n\n function destroyStream (stream$$1) {\n streamPool.push(stream$$1)\n }\n\n function initBufferFromTypedArray (buffer, data, usage) {\n buffer.byteLength = data.byteLength\n gl.bufferData(buffer.type, data, usage)\n }\n\n function initBufferFromData (buffer, data, usage, dtype, dimension, persist) {\n var shape\n buffer.usage = usage\n if (Array.isArray(data)) {\n buffer.dtype = dtype || GL_FLOAT$3\n if (data.length > 0) {\n var flatData\n if (Array.isArray(data[0])) {\n shape = arrayShape(data)\n var dim = 1\n for (var i = 1; i < shape.length; ++i) {\n dim *= shape[i]\n }\n buffer.dimension = dim\n flatData = arrayFlatten(data, shape, buffer.dtype)\n initBufferFromTypedArray(buffer, flatData, usage)\n if (persist) {\n buffer.persistentData = flatData\n } else {\n pool.freeType(flatData)\n }\n } else if (typeof data[0] === 'number') {\n buffer.dimension = dimension\n var typedData = pool.allocType(buffer.dtype, data.length)\n copyArray(typedData, data)\n initBufferFromTypedArray(buffer, typedData, usage)\n if (persist) {\n buffer.persistentData = typedData\n } else {\n pool.freeType(typedData)\n }\n } else if (isTypedArray(data[0])) {\n buffer.dimension = data[0].length\n buffer.dtype = dtype || typedArrayCode(data[0]) || GL_FLOAT$3\n flatData = arrayFlatten(\n data,\n [data.length, data[0].length],\n buffer.dtype)\n initBufferFromTypedArray(buffer, flatData, usage)\n if (persist) {\n buffer.persistentData = flatData\n } else {\n pool.freeType(flatData)\n }\n } else {\n check$1.raise('invalid buffer data')\n }\n }\n } else if (isTypedArray(data)) {\n buffer.dtype = dtype || typedArrayCode(data)\n buffer.dimension = dimension\n initBufferFromTypedArray(buffer, data, usage)\n if (persist) {\n buffer.persistentData = new Uint8Array(new Uint8Array(data.buffer))\n }\n } else if (isNDArrayLike(data)) {\n shape = data.shape\n var stride = data.stride\n var offset = data.offset\n\n var shapeX = 0\n var shapeY = 0\n var strideX = 0\n var strideY = 0\n if (shape.length === 1) {\n shapeX = shape[0]\n shapeY = 1\n strideX = stride[0]\n strideY = 0\n } else if (shape.length === 2) {\n shapeX = shape[0]\n shapeY = shape[1]\n strideX = stride[0]\n strideY = stride[1]\n } else {\n check$1.raise('invalid shape')\n }\n\n buffer.dtype = dtype || typedArrayCode(data.data) || GL_FLOAT$3\n buffer.dimension = shapeY\n\n var transposeData = pool.allocType(buffer.dtype, shapeX * shapeY)\n transpose(transposeData,\n data.data,\n shapeX, shapeY,\n strideX, strideY,\n offset)\n initBufferFromTypedArray(buffer, transposeData, usage)\n if (persist) {\n buffer.persistentData = transposeData\n } else {\n pool.freeType(transposeData)\n }\n } else if (data instanceof ArrayBuffer) {\n buffer.dtype = GL_UNSIGNED_BYTE$3\n buffer.dimension = dimension\n initBufferFromTypedArray(buffer, data, usage)\n if (persist) {\n buffer.persistentData = new Uint8Array(new Uint8Array(data))\n }\n } else {\n check$1.raise('invalid buffer data')\n }\n }\n\n function destroy (buffer) {\n stats.bufferCount--\n\n // remove attribute link\n destroyBuffer(buffer)\n\n var handle = buffer.buffer\n check$1(handle, 'buffer must not be deleted already')\n gl.deleteBuffer(handle)\n buffer.buffer = null\n delete bufferSet[buffer.id]\n }\n\n function createBuffer (options, type, deferInit, persistent) {\n stats.bufferCount++\n\n var buffer = new REGLBuffer(type)\n bufferSet[buffer.id] = buffer\n\n function reglBuffer (options) {\n var usage = GL_STATIC_DRAW\n var data = null\n var byteLength = 0\n var dtype = 0\n var dimension = 1\n if (Array.isArray(options) ||\n isTypedArray(options) ||\n isNDArrayLike(options) ||\n options instanceof ArrayBuffer) {\n data = options\n } else if (typeof options === 'number') {\n byteLength = options | 0\n } else if (options) {\n check$1.type(\n options, 'object',\n 'buffer arguments must be an object, a number or an array')\n\n if ('data' in options) {\n check$1(\n data === null ||\n Array.isArray(data) ||\n isTypedArray(data) ||\n isNDArrayLike(data),\n 'invalid data for buffer')\n data = options.data\n }\n\n if ('usage' in options) {\n check$1.parameter(options.usage, usageTypes, 'invalid buffer usage')\n usage = usageTypes[options.usage]\n }\n\n if ('type' in options) {\n check$1.parameter(options.type, glTypes, 'invalid buffer type')\n dtype = glTypes[options.type]\n }\n\n if ('dimension' in options) {\n check$1.type(options.dimension, 'number', 'invalid dimension')\n dimension = options.dimension | 0\n }\n\n if ('length' in options) {\n check$1.nni(byteLength, 'buffer length must be a nonnegative integer')\n byteLength = options.length | 0\n }\n }\n\n buffer.bind()\n if (!data) {\n // #475\n if (byteLength) gl.bufferData(buffer.type, byteLength, usage)\n buffer.dtype = dtype || GL_UNSIGNED_BYTE$3\n buffer.usage = usage\n buffer.dimension = dimension\n buffer.byteLength = byteLength\n } else {\n initBufferFromData(buffer, data, usage, dtype, dimension, persistent)\n }\n\n if (config.profile) {\n buffer.stats.size = buffer.byteLength * DTYPES_SIZES[buffer.dtype]\n }\n\n return reglBuffer\n }\n\n function setSubData (data, offset) {\n check$1(offset + data.byteLength <= buffer.byteLength,\n 'invalid buffer subdata call, buffer is too small. ' + ' Can\\'t write data of size ' + data.byteLength + ' starting from offset ' + offset + ' to a buffer of size ' + buffer.byteLength)\n\n gl.bufferSubData(buffer.type, offset, data)\n }\n\n function subdata (data, offset_) {\n var offset = (offset_ || 0) | 0\n var shape\n buffer.bind()\n if (isTypedArray(data) || data instanceof ArrayBuffer) {\n setSubData(data, offset)\n } else if (Array.isArray(data)) {\n if (data.length > 0) {\n if (typeof data[0] === 'number') {\n var converted = pool.allocType(buffer.dtype, data.length)\n copyArray(converted, data)\n setSubData(converted, offset)\n pool.freeType(converted)\n } else if (Array.isArray(data[0]) || isTypedArray(data[0])) {\n shape = arrayShape(data)\n var flatData = arrayFlatten(data, shape, buffer.dtype)\n setSubData(flatData, offset)\n pool.freeType(flatData)\n } else {\n check$1.raise('invalid buffer data')\n }\n }\n } else if (isNDArrayLike(data)) {\n shape = data.shape\n var stride = data.stride\n\n var shapeX = 0\n var shapeY = 0\n var strideX = 0\n var strideY = 0\n if (shape.length === 1) {\n shapeX = shape[0]\n shapeY = 1\n strideX = stride[0]\n strideY = 0\n } else if (shape.length === 2) {\n shapeX = shape[0]\n shapeY = shape[1]\n strideX = stride[0]\n strideY = stride[1]\n } else {\n check$1.raise('invalid shape')\n }\n var dtype = Array.isArray(data.data)\n ? buffer.dtype\n : typedArrayCode(data.data)\n\n var transposeData = pool.allocType(dtype, shapeX * shapeY)\n transpose(transposeData,\n data.data,\n shapeX, shapeY,\n strideX, strideY,\n data.offset)\n setSubData(transposeData, offset)\n pool.freeType(transposeData)\n } else {\n check$1.raise('invalid data for buffer subdata')\n }\n return reglBuffer\n }\n\n if (!deferInit) {\n reglBuffer(options)\n }\n\n reglBuffer._reglType = 'buffer'\n reglBuffer._buffer = buffer\n reglBuffer.subdata = subdata\n if (config.profile) {\n reglBuffer.stats = buffer.stats\n }\n reglBuffer.destroy = function () { destroy(buffer) }\n\n return reglBuffer\n }\n\n function restoreBuffers () {\n values(bufferSet).forEach(function (buffer) {\n buffer.buffer = gl.createBuffer()\n gl.bindBuffer(buffer.type, buffer.buffer)\n gl.bufferData(\n buffer.type, buffer.persistentData || buffer.byteLength, buffer.usage)\n })\n }\n\n if (config.profile) {\n stats.getTotalBufferSize = function () {\n var total = 0\n // TODO: Right now, the streams are not part of the total count.\n Object.keys(bufferSet).forEach(function (key) {\n total += bufferSet[key].stats.size\n })\n return total\n }\n }\n\n return {\n create: createBuffer,\n\n createStream: createStream,\n destroyStream: destroyStream,\n\n clear: function () {\n values(bufferSet).forEach(destroy)\n streamPool.forEach(destroy)\n },\n\n getBuffer: function (wrapper) {\n if (wrapper && wrapper._buffer instanceof REGLBuffer) {\n return wrapper._buffer\n }\n return null\n },\n\n restore: restoreBuffers,\n\n _initBuffer: initBufferFromData\n }\n}\n\nvar points = 0;\nvar point = 0;\nvar lines = 1;\nvar line = 1;\nvar triangles = 4;\nvar triangle = 4;\nvar primTypes = {\n\tpoints: points,\n\tpoint: point,\n\tlines: lines,\n\tline: line,\n\ttriangles: triangles,\n\ttriangle: triangle,\n\t\"line loop\": 2,\n\t\"line strip\": 3,\n\t\"triangle strip\": 5,\n\t\"triangle fan\": 6\n};\n\nvar GL_POINTS = 0\nvar GL_LINES = 1\nvar GL_TRIANGLES = 4\n\nvar GL_BYTE$2 = 5120\nvar GL_UNSIGNED_BYTE$4 = 5121\nvar GL_SHORT$2 = 5122\nvar GL_UNSIGNED_SHORT$2 = 5123\nvar GL_INT$2 = 5124\nvar GL_UNSIGNED_INT$2 = 5125\n\nvar GL_ELEMENT_ARRAY_BUFFER = 34963\n\nvar GL_STREAM_DRAW$1 = 0x88E0\nvar GL_STATIC_DRAW$1 = 0x88E4\n\nfunction wrapElementsState (gl, extensions, bufferState, stats) {\n var elementSet = {}\n var elementCount = 0\n\n var elementTypes = {\n 'uint8': GL_UNSIGNED_BYTE$4,\n 'uint16': GL_UNSIGNED_SHORT$2\n }\n\n if (extensions.oes_element_index_uint) {\n elementTypes.uint32 = GL_UNSIGNED_INT$2\n }\n\n function REGLElementBuffer (buffer) {\n this.id = elementCount++\n elementSet[this.id] = this\n this.buffer = buffer\n this.primType = GL_TRIANGLES\n this.vertCount = 0\n this.type = 0\n }\n\n REGLElementBuffer.prototype.bind = function () {\n this.buffer.bind()\n }\n\n var bufferPool = []\n\n function createElementStream (data) {\n var result = bufferPool.pop()\n if (!result) {\n result = new REGLElementBuffer(bufferState.create(\n null,\n GL_ELEMENT_ARRAY_BUFFER,\n true,\n false)._buffer)\n }\n initElements(result, data, GL_STREAM_DRAW$1, -1, -1, 0, 0)\n return result\n }\n\n function destroyElementStream (elements) {\n bufferPool.push(elements)\n }\n\n function initElements (\n elements,\n data,\n usage,\n prim,\n count,\n byteLength,\n type) {\n elements.buffer.bind()\n var dtype\n if (data) {\n var predictedType = type\n if (!type && (\n !isTypedArray(data) ||\n (isNDArrayLike(data) && !isTypedArray(data.data)))) {\n predictedType = extensions.oes_element_index_uint\n ? GL_UNSIGNED_INT$2\n : GL_UNSIGNED_SHORT$2\n }\n bufferState._initBuffer(\n elements.buffer,\n data,\n usage,\n predictedType,\n 3)\n } else {\n gl.bufferData(GL_ELEMENT_ARRAY_BUFFER, byteLength, usage)\n elements.buffer.dtype = dtype || GL_UNSIGNED_BYTE$4\n elements.buffer.usage = usage\n elements.buffer.dimension = 3\n elements.buffer.byteLength = byteLength\n }\n\n dtype = type\n if (!type) {\n switch (elements.buffer.dtype) {\n case GL_UNSIGNED_BYTE$4:\n case GL_BYTE$2:\n dtype = GL_UNSIGNED_BYTE$4\n break\n\n case GL_UNSIGNED_SHORT$2:\n case GL_SHORT$2:\n dtype = GL_UNSIGNED_SHORT$2\n break\n\n case GL_UNSIGNED_INT$2:\n case GL_INT$2:\n dtype = GL_UNSIGNED_INT$2\n break\n\n default:\n check$1.raise('unsupported type for element array')\n }\n elements.buffer.dtype = dtype\n }\n elements.type = dtype\n\n // Check oes_element_index_uint extension\n check$1(\n dtype !== GL_UNSIGNED_INT$2 ||\n !!extensions.oes_element_index_uint,\n '32 bit element buffers not supported, enable oes_element_index_uint first')\n\n // try to guess default primitive type and arguments\n var vertCount = count\n if (vertCount < 0) {\n vertCount = elements.buffer.byteLength\n if (dtype === GL_UNSIGNED_SHORT$2) {\n vertCount >>= 1\n } else if (dtype === GL_UNSIGNED_INT$2) {\n vertCount >>= 2\n }\n }\n elements.vertCount = vertCount\n\n // try to guess primitive type from cell dimension\n var primType = prim\n if (prim < 0) {\n primType = GL_TRIANGLES\n var dimension = elements.buffer.dimension\n if (dimension === 1) primType = GL_POINTS\n if (dimension === 2) primType = GL_LINES\n if (dimension === 3) primType = GL_TRIANGLES\n }\n elements.primType = primType\n }\n\n function destroyElements (elements) {\n stats.elementsCount--\n\n check$1(elements.buffer !== null, 'must not double destroy elements')\n delete elementSet[elements.id]\n elements.buffer.destroy()\n elements.buffer = null\n }\n\n function createElements (options, persistent) {\n var buffer = bufferState.create(null, GL_ELEMENT_ARRAY_BUFFER, true)\n var elements = new REGLElementBuffer(buffer._buffer)\n stats.elementsCount++\n\n function reglElements (options) {\n if (!options) {\n buffer()\n elements.primType = GL_TRIANGLES\n elements.vertCount = 0\n elements.type = GL_UNSIGNED_BYTE$4\n } else if (typeof options === 'number') {\n buffer(options)\n elements.primType = GL_TRIANGLES\n elements.vertCount = options | 0\n elements.type = GL_UNSIGNED_BYTE$4\n } else {\n var data = null\n var usage = GL_STATIC_DRAW$1\n var primType = -1\n var vertCount = -1\n var byteLength = 0\n var dtype = 0\n if (Array.isArray(options) ||\n isTypedArray(options) ||\n isNDArrayLike(options)) {\n data = options\n } else {\n check$1.type(options, 'object', 'invalid arguments for elements')\n if ('data' in options) {\n data = options.data\n check$1(\n Array.isArray(data) ||\n isTypedArray(data) ||\n isNDArrayLike(data),\n 'invalid data for element buffer')\n }\n if ('usage' in options) {\n check$1.parameter(\n options.usage,\n usageTypes,\n 'invalid element buffer usage')\n usage = usageTypes[options.usage]\n }\n if ('primitive' in options) {\n check$1.parameter(\n options.primitive,\n primTypes,\n 'invalid element buffer primitive')\n primType = primTypes[options.primitive]\n }\n if ('count' in options) {\n check$1(\n typeof options.count === 'number' && options.count >= 0,\n 'invalid vertex count for elements')\n vertCount = options.count | 0\n }\n if ('type' in options) {\n check$1.parameter(\n options.type,\n elementTypes,\n 'invalid buffer type')\n dtype = elementTypes[options.type]\n }\n if ('length' in options) {\n byteLength = options.length | 0\n } else {\n byteLength = vertCount\n if (dtype === GL_UNSIGNED_SHORT$2 || dtype === GL_SHORT$2) {\n byteLength *= 2\n } else if (dtype === GL_UNSIGNED_INT$2 || dtype === GL_INT$2) {\n byteLength *= 4\n }\n }\n }\n initElements(\n elements,\n data,\n usage,\n primType,\n vertCount,\n byteLength,\n dtype)\n }\n\n return reglElements\n }\n\n reglElements(options)\n\n reglElements._reglType = 'elements'\n reglElements._elements = elements\n reglElements.subdata = function (data, offset) {\n buffer.subdata(data, offset)\n return reglElements\n }\n reglElements.destroy = function () {\n destroyElements(elements)\n }\n\n return reglElements\n }\n\n return {\n create: createElements,\n createStream: createElementStream,\n destroyStream: destroyElementStream,\n getElements: function (elements) {\n if (typeof elements === 'function' &&\n elements._elements instanceof REGLElementBuffer) {\n return elements._elements\n }\n return null\n },\n clear: function () {\n values(elementSet).forEach(destroyElements)\n }\n }\n}\n\nvar FLOAT = new Float32Array(1)\nvar INT = new Uint32Array(FLOAT.buffer)\n\nvar GL_UNSIGNED_SHORT$4 = 5123\n\nfunction convertToHalfFloat (array) {\n var ushorts = pool.allocType(GL_UNSIGNED_SHORT$4, array.length)\n\n for (var i = 0; i < array.length; ++i) {\n if (isNaN(array[i])) {\n ushorts[i] = 0xffff\n } else if (array[i] === Infinity) {\n ushorts[i] = 0x7c00\n } else if (array[i] === -Infinity) {\n ushorts[i] = 0xfc00\n } else {\n FLOAT[0] = array[i]\n var x = INT[0]\n\n var sgn = (x >>> 31) << 15\n var exp = ((x << 1) >>> 24) - 127\n var frac = (x >> 13) & ((1 << 10) - 1)\n\n if (exp < -24) {\n // round non-representable denormals to 0\n ushorts[i] = sgn\n } else if (exp < -14) {\n // handle denormals\n var s = -14 - exp\n ushorts[i] = sgn + ((frac + (1 << 10)) >> s)\n } else if (exp > 15) {\n // round overflow to +/- Infinity\n ushorts[i] = sgn + 0x7c00\n } else {\n // otherwise convert directly\n ushorts[i] = sgn + ((exp + 15) << 10) + frac\n }\n }\n }\n\n return ushorts\n}\n\nfunction isArrayLike (s) {\n return Array.isArray(s) || isTypedArray(s)\n}\n\nvar isPow2$1 = function (v) {\n return !(v & (v - 1)) && (!!v)\n}\n\nvar GL_COMPRESSED_TEXTURE_FORMATS = 0x86A3\n\nvar GL_TEXTURE_2D$1 = 0x0DE1\nvar GL_TEXTURE_CUBE_MAP$1 = 0x8513\nvar GL_TEXTURE_CUBE_MAP_POSITIVE_X$1 = 0x8515\n\nvar GL_RGBA$1 = 0x1908\nvar GL_ALPHA = 0x1906\nvar GL_RGB = 0x1907\nvar GL_LUMINANCE = 0x1909\nvar GL_LUMINANCE_ALPHA = 0x190A\n\nvar GL_RGBA4 = 0x8056\nvar GL_RGB5_A1 = 0x8057\nvar GL_RGB565 = 0x8D62\n\nvar GL_UNSIGNED_SHORT_4_4_4_4$1 = 0x8033\nvar GL_UNSIGNED_SHORT_5_5_5_1$1 = 0x8034\nvar GL_UNSIGNED_SHORT_5_6_5$1 = 0x8363\nvar GL_UNSIGNED_INT_24_8_WEBGL$1 = 0x84FA\n\nvar GL_DEPTH_COMPONENT = 0x1902\nvar GL_DEPTH_STENCIL = 0x84F9\n\nvar GL_SRGB_EXT = 0x8C40\nvar GL_SRGB_ALPHA_EXT = 0x8C42\n\nvar GL_HALF_FLOAT_OES$1 = 0x8D61\n\nvar GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0\nvar GL_COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1\nvar GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2\nvar GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3\n\nvar GL_COMPRESSED_RGB_ATC_WEBGL = 0x8C92\nvar GL_COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL = 0x8C93\nvar GL_COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL = 0x87EE\n\nvar GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8C00\nvar GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 0x8C01\nvar GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8C02\nvar GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x8C03\n\nvar GL_COMPRESSED_RGB_ETC1_WEBGL = 0x8D64\n\nvar GL_UNSIGNED_BYTE$5 = 0x1401\nvar GL_UNSIGNED_SHORT$3 = 0x1403\nvar GL_UNSIGNED_INT$3 = 0x1405\nvar GL_FLOAT$4 = 0x1406\n\nvar GL_TEXTURE_WRAP_S = 0x2802\nvar GL_TEXTURE_WRAP_T = 0x2803\n\nvar GL_REPEAT = 0x2901\nvar GL_CLAMP_TO_EDGE$1 = 0x812F\nvar GL_MIRRORED_REPEAT = 0x8370\n\nvar GL_TEXTURE_MAG_FILTER = 0x2800\nvar GL_TEXTURE_MIN_FILTER = 0x2801\n\nvar GL_NEAREST$1 = 0x2600\nvar GL_LINEAR = 0x2601\nvar GL_NEAREST_MIPMAP_NEAREST$1 = 0x2700\nvar GL_LINEAR_MIPMAP_NEAREST$1 = 0x2701\nvar GL_NEAREST_MIPMAP_LINEAR$1 = 0x2702\nvar GL_LINEAR_MIPMAP_LINEAR$1 = 0x2703\n\nvar GL_GENERATE_MIPMAP_HINT = 0x8192\nvar GL_DONT_CARE = 0x1100\nvar GL_FASTEST = 0x1101\nvar GL_NICEST = 0x1102\n\nvar GL_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE\n\nvar GL_UNPACK_ALIGNMENT = 0x0CF5\nvar GL_UNPACK_FLIP_Y_WEBGL = 0x9240\nvar GL_UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241\nvar GL_UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243\n\nvar GL_BROWSER_DEFAULT_WEBGL = 0x9244\n\nvar GL_TEXTURE0$1 = 0x84C0\n\nvar MIPMAP_FILTERS = [\n GL_NEAREST_MIPMAP_NEAREST$1,\n GL_NEAREST_MIPMAP_LINEAR$1,\n GL_LINEAR_MIPMAP_NEAREST$1,\n GL_LINEAR_MIPMAP_LINEAR$1\n]\n\nvar CHANNELS_FORMAT = [\n 0,\n GL_LUMINANCE,\n GL_LUMINANCE_ALPHA,\n GL_RGB,\n GL_RGBA$1\n]\n\nvar FORMAT_CHANNELS = {}\nFORMAT_CHANNELS[GL_LUMINANCE] =\nFORMAT_CHANNELS[GL_ALPHA] =\nFORMAT_CHANNELS[GL_DEPTH_COMPONENT] = 1\nFORMAT_CHANNELS[GL_DEPTH_STENCIL] =\nFORMAT_CHANNELS[GL_LUMINANCE_ALPHA] = 2\nFORMAT_CHANNELS[GL_RGB] =\nFORMAT_CHANNELS[GL_SRGB_EXT] = 3\nFORMAT_CHANNELS[GL_RGBA$1] =\nFORMAT_CHANNELS[GL_SRGB_ALPHA_EXT] = 4\n\nfunction objectName (str) {\n return '[object ' + str + ']'\n}\n\nvar CANVAS_CLASS = objectName('HTMLCanvasElement')\nvar OFFSCREENCANVAS_CLASS = objectName('OffscreenCanvas')\nvar CONTEXT2D_CLASS = objectName('CanvasRenderingContext2D')\nvar BITMAP_CLASS = objectName('ImageBitmap')\nvar IMAGE_CLASS = objectName('HTMLImageElement')\nvar VIDEO_CLASS = objectName('HTMLVideoElement')\n\nvar PIXEL_CLASSES = Object.keys(arrayTypes).concat([\n CANVAS_CLASS,\n OFFSCREENCANVAS_CLASS,\n CONTEXT2D_CLASS,\n BITMAP_CLASS,\n IMAGE_CLASS,\n VIDEO_CLASS\n])\n\n// for every texture type, store\n// the size in bytes.\nvar TYPE_SIZES = []\nTYPE_SIZES[GL_UNSIGNED_BYTE$5] = 1\nTYPE_SIZES[GL_FLOAT$4] = 4\nTYPE_SIZES[GL_HALF_FLOAT_OES$1] = 2\n\nTYPE_SIZES[GL_UNSIGNED_SHORT$3] = 2\nTYPE_SIZES[GL_UNSIGNED_INT$3] = 4\n\nvar FORMAT_SIZES_SPECIAL = []\nFORMAT_SIZES_SPECIAL[GL_RGBA4] = 2\nFORMAT_SIZES_SPECIAL[GL_RGB5_A1] = 2\nFORMAT_SIZES_SPECIAL[GL_RGB565] = 2\nFORMAT_SIZES_SPECIAL[GL_DEPTH_STENCIL] = 4\n\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGB_S3TC_DXT1_EXT] = 0.5\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_S3TC_DXT1_EXT] = 0.5\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_S3TC_DXT3_EXT] = 1\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_S3TC_DXT5_EXT] = 1\n\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGB_ATC_WEBGL] = 0.5\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL] = 1\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL] = 1\n\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG] = 0.5\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG] = 0.25\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG] = 0.5\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG] = 0.25\n\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGB_ETC1_WEBGL] = 0.5\n\nfunction isNumericArray (arr) {\n return (\n Array.isArray(arr) &&\n (arr.length === 0 ||\n typeof arr[0] === 'number'))\n}\n\nfunction isRectArray (arr) {\n if (!Array.isArray(arr)) {\n return false\n }\n var width = arr.length\n if (width === 0 || !isArrayLike(arr[0])) {\n return false\n }\n return true\n}\n\nfunction classString (x) {\n return Object.prototype.toString.call(x)\n}\n\nfunction isCanvasElement (object) {\n return classString(object) === CANVAS_CLASS\n}\n\nfunction isOffscreenCanvas (object) {\n return classString(object) === OFFSCREENCANVAS_CLASS\n}\n\nfunction isContext2D (object) {\n return classString(object) === CONTEXT2D_CLASS\n}\n\nfunction isBitmap (object) {\n return classString(object) === BITMAP_CLASS\n}\n\nfunction isImageElement (object) {\n return classString(object) === IMAGE_CLASS\n}\n\nfunction isVideoElement (object) {\n return classString(object) === VIDEO_CLASS\n}\n\nfunction isPixelData (object) {\n if (!object) {\n return false\n }\n var className = classString(object)\n if (PIXEL_CLASSES.indexOf(className) >= 0) {\n return true\n }\n return (\n isNumericArray(object) ||\n isRectArray(object) ||\n isNDArrayLike(object))\n}\n\nfunction typedArrayCode$1 (data) {\n return arrayTypes[Object.prototype.toString.call(data)] | 0\n}\n\nfunction convertData (result, data) {\n var n = data.length\n switch (result.type) {\n case GL_UNSIGNED_BYTE$5:\n case GL_UNSIGNED_SHORT$3:\n case GL_UNSIGNED_INT$3:\n case GL_FLOAT$4:\n var converted = pool.allocType(result.type, n)\n converted.set(data)\n result.data = converted\n break\n\n case GL_HALF_FLOAT_OES$1:\n result.data = convertToHalfFloat(data)\n break\n\n default:\n check$1.raise('unsupported texture type, must specify a typed array')\n }\n}\n\nfunction preConvert (image, n) {\n return pool.allocType(\n image.type === GL_HALF_FLOAT_OES$1\n ? GL_FLOAT$4\n : image.type, n)\n}\n\nfunction postConvert (image, data) {\n if (image.type === GL_HALF_FLOAT_OES$1) {\n image.data = convertToHalfFloat(data)\n pool.freeType(data)\n } else {\n image.data = data\n }\n}\n\nfunction transposeData (image, array, strideX, strideY, strideC, offset) {\n var w = image.width\n var h = image.height\n var c = image.channels\n var n = w * h * c\n var data = preConvert(image, n)\n\n var p = 0\n for (var i = 0; i < h; ++i) {\n for (var j = 0; j < w; ++j) {\n for (var k = 0; k < c; ++k) {\n data[p++] = array[strideX * j + strideY * i + strideC * k + offset]\n }\n }\n }\n\n postConvert(image, data)\n}\n\nfunction getTextureSize (format, type, width, height, isMipmap, isCube) {\n var s\n if (typeof FORMAT_SIZES_SPECIAL[format] !== 'undefined') {\n // we have a special array for dealing with weird color formats such as RGB5A1\n s = FORMAT_SIZES_SPECIAL[format]\n } else {\n s = FORMAT_CHANNELS[format] * TYPE_SIZES[type]\n }\n\n if (isCube) {\n s *= 6\n }\n\n if (isMipmap) {\n // compute the total size of all the mipmaps.\n var total = 0\n\n var w = width\n while (w >= 1) {\n // we can only use mipmaps on a square image,\n // so we can simply use the width and ignore the height:\n total += s * w * w\n w /= 2\n }\n return total\n } else {\n return s * width * height\n }\n}\n\nfunction createTextureSet (\n gl, extensions, limits, reglPoll, contextState, stats, config) {\n // -------------------------------------------------------\n // Initialize constants and parameter tables here\n // -------------------------------------------------------\n var mipmapHint = {\n \"don't care\": GL_DONT_CARE,\n 'dont care': GL_DONT_CARE,\n 'nice': GL_NICEST,\n 'fast': GL_FASTEST\n }\n\n var wrapModes = {\n 'repeat': GL_REPEAT,\n 'clamp': GL_CLAMP_TO_EDGE$1,\n 'mirror': GL_MIRRORED_REPEAT\n }\n\n var magFilters = {\n 'nearest': GL_NEAREST$1,\n 'linear': GL_LINEAR\n }\n\n var minFilters = extend({\n 'mipmap': GL_LINEAR_MIPMAP_LINEAR$1,\n 'nearest mipmap nearest': GL_NEAREST_MIPMAP_NEAREST$1,\n 'linear mipmap nearest': GL_LINEAR_MIPMAP_NEAREST$1,\n 'nearest mipmap linear': GL_NEAREST_MIPMAP_LINEAR$1,\n 'linear mipmap linear': GL_LINEAR_MIPMAP_LINEAR$1\n }, magFilters)\n\n var colorSpace = {\n 'none': 0,\n 'browser': GL_BROWSER_DEFAULT_WEBGL\n }\n\n var textureTypes = {\n 'uint8': GL_UNSIGNED_BYTE$5,\n 'rgba4': GL_UNSIGNED_SHORT_4_4_4_4$1,\n 'rgb565': GL_UNSIGNED_SHORT_5_6_5$1,\n 'rgb5 a1': GL_UNSIGNED_SHORT_5_5_5_1$1\n }\n\n var textureFormats = {\n 'alpha': GL_ALPHA,\n 'luminance': GL_LUMINANCE,\n 'luminance alpha': GL_LUMINANCE_ALPHA,\n 'rgb': GL_RGB,\n 'rgba': GL_RGBA$1,\n 'rgba4': GL_RGBA4,\n 'rgb5 a1': GL_RGB5_A1,\n 'rgb565': GL_RGB565\n }\n\n var compressedTextureFormats = {}\n\n if (extensions.ext_srgb) {\n textureFormats.srgb = GL_SRGB_EXT\n textureFormats.srgba = GL_SRGB_ALPHA_EXT\n }\n\n if (extensions.oes_texture_float) {\n textureTypes.float32 = textureTypes.float = GL_FLOAT$4\n }\n\n if (extensions.oes_texture_half_float) {\n textureTypes['float16'] = textureTypes['half float'] = GL_HALF_FLOAT_OES$1\n }\n\n if (extensions.webgl_depth_texture) {\n extend(textureFormats, {\n 'depth': GL_DEPTH_COMPONENT,\n 'depth stencil': GL_DEPTH_STENCIL\n })\n\n extend(textureTypes, {\n 'uint16': GL_UNSIGNED_SHORT$3,\n 'uint32': GL_UNSIGNED_INT$3,\n 'depth stencil': GL_UNSIGNED_INT_24_8_WEBGL$1\n })\n }\n\n if (extensions.webgl_compressed_texture_s3tc) {\n extend(compressedTextureFormats, {\n 'rgb s3tc dxt1': GL_COMPRESSED_RGB_S3TC_DXT1_EXT,\n 'rgba s3tc dxt1': GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,\n 'rgba s3tc dxt3': GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,\n 'rgba s3tc dxt5': GL_COMPRESSED_RGBA_S3TC_DXT5_EXT\n })\n }\n\n if (extensions.webgl_compressed_texture_atc) {\n extend(compressedTextureFormats, {\n 'rgb atc': GL_COMPRESSED_RGB_ATC_WEBGL,\n 'rgba atc explicit alpha': GL_COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,\n 'rgba atc interpolated alpha': GL_COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\n })\n }\n\n if (extensions.webgl_compressed_texture_pvrtc) {\n extend(compressedTextureFormats, {\n 'rgb pvrtc 4bppv1': GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\n 'rgb pvrtc 2bppv1': GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG,\n 'rgba pvrtc 4bppv1': GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\n 'rgba pvrtc 2bppv1': GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG\n })\n }\n\n if (extensions.webgl_compressed_texture_etc1) {\n compressedTextureFormats['rgb etc1'] = GL_COMPRESSED_RGB_ETC1_WEBGL\n }\n\n // Copy over all texture formats\n var supportedCompressedFormats = Array.prototype.slice.call(\n gl.getParameter(GL_COMPRESSED_TEXTURE_FORMATS))\n Object.keys(compressedTextureFormats).forEach(function (name) {\n var format = compressedTextureFormats[name]\n if (supportedCompressedFormats.indexOf(format) >= 0) {\n textureFormats[name] = format\n }\n })\n\n var supportedFormats = Object.keys(textureFormats)\n limits.textureFormats = supportedFormats\n\n // associate with every format string its\n // corresponding GL-value.\n var textureFormatsInvert = []\n Object.keys(textureFormats).forEach(function (key) {\n var val = textureFormats[key]\n textureFormatsInvert[val] = key\n })\n\n // associate with every type string its\n // corresponding GL-value.\n var textureTypesInvert = []\n Object.keys(textureTypes).forEach(function (key) {\n var val = textureTypes[key]\n textureTypesInvert[val] = key\n })\n\n var magFiltersInvert = []\n Object.keys(magFilters).forEach(function (key) {\n var val = magFilters[key]\n magFiltersInvert[val] = key\n })\n\n var minFiltersInvert = []\n Object.keys(minFilters).forEach(function (key) {\n var val = minFilters[key]\n minFiltersInvert[val] = key\n })\n\n var wrapModesInvert = []\n Object.keys(wrapModes).forEach(function (key) {\n var val = wrapModes[key]\n wrapModesInvert[val] = key\n })\n\n // colorFormats[] gives the format (channels) associated to an\n // internalformat\n var colorFormats = supportedFormats.reduce(function (color, key) {\n var glenum = textureFormats[key]\n if (glenum === GL_LUMINANCE ||\n glenum === GL_ALPHA ||\n glenum === GL_LUMINANCE ||\n glenum === GL_LUMINANCE_ALPHA ||\n glenum === GL_DEPTH_COMPONENT ||\n glenum === GL_DEPTH_STENCIL ||\n (extensions.ext_srgb &&\n (glenum === GL_SRGB_EXT ||\n glenum === GL_SRGB_ALPHA_EXT))) {\n color[glenum] = glenum\n } else if (glenum === GL_RGB5_A1 || key.indexOf('rgba') >= 0) {\n color[glenum] = GL_RGBA$1\n } else {\n color[glenum] = GL_RGB\n }\n return color\n }, {})\n\n function TexFlags () {\n // format info\n this.internalformat = GL_RGBA$1\n this.format = GL_RGBA$1\n this.type = GL_UNSIGNED_BYTE$5\n this.compressed = false\n\n // pixel storage\n this.premultiplyAlpha = false\n this.flipY = false\n this.unpackAlignment = 1\n this.colorSpace = GL_BROWSER_DEFAULT_WEBGL\n\n // shape info\n this.width = 0\n this.height = 0\n this.channels = 0\n }\n\n function copyFlags (result, other) {\n result.internalformat = other.internalformat\n result.format = other.format\n result.type = other.type\n result.compressed = other.compressed\n\n result.premultiplyAlpha = other.premultiplyAlpha\n result.flipY = other.flipY\n result.unpackAlignment = other.unpackAlignment\n result.colorSpace = other.colorSpace\n\n result.width = other.width\n result.height = other.height\n result.channels = other.channels\n }\n\n function parseFlags (flags, options) {\n if (typeof options !== 'object' || !options) {\n return\n }\n\n if ('premultiplyAlpha' in options) {\n check$1.type(options.premultiplyAlpha, 'boolean',\n 'invalid premultiplyAlpha')\n flags.premultiplyAlpha = options.premultiplyAlpha\n }\n\n if ('flipY' in options) {\n check$1.type(options.flipY, 'boolean',\n 'invalid texture flip')\n flags.flipY = options.flipY\n }\n\n if ('alignment' in options) {\n check$1.oneOf(options.alignment, [1, 2, 4, 8],\n 'invalid texture unpack alignment')\n flags.unpackAlignment = options.alignment\n }\n\n if ('colorSpace' in options) {\n check$1.parameter(options.colorSpace, colorSpace,\n 'invalid colorSpace')\n flags.colorSpace = colorSpace[options.colorSpace]\n }\n\n if ('type' in options) {\n var type = options.type\n check$1(extensions.oes_texture_float ||\n !(type === 'float' || type === 'float32'),\n 'you must enable the OES_texture_float extension in order to use floating point textures.')\n check$1(extensions.oes_texture_half_float ||\n !(type === 'half float' || type === 'float16'),\n 'you must enable the OES_texture_half_float extension in order to use 16-bit floating point textures.')\n check$1(extensions.webgl_depth_texture ||\n !(type === 'uint16' || type === 'uint32' || type === 'depth stencil'),\n 'you must enable the WEBGL_depth_texture extension in order to use depth/stencil textures.')\n check$1.parameter(type, textureTypes,\n 'invalid texture type')\n flags.type = textureTypes[type]\n }\n\n var w = flags.width\n var h = flags.height\n var c = flags.channels\n var hasChannels = false\n if ('shape' in options) {\n check$1(Array.isArray(options.shape) && options.shape.length >= 2,\n 'shape must be an array')\n w = options.shape[0]\n h = options.shape[1]\n if (options.shape.length === 3) {\n c = options.shape[2]\n check$1(c > 0 && c <= 4, 'invalid number of channels')\n hasChannels = true\n }\n check$1(w >= 0 && w <= limits.maxTextureSize, 'invalid width')\n check$1(h >= 0 && h <= limits.maxTextureSize, 'invalid height')\n } else {\n if ('radius' in options) {\n w = h = options.radius\n check$1(w >= 0 && w <= limits.maxTextureSize, 'invalid radius')\n }\n if ('width' in options) {\n w = options.width\n check$1(w >= 0 && w <= limits.maxTextureSize, 'invalid width')\n }\n if ('height' in options) {\n h = options.height\n check$1(h >= 0 && h <= limits.maxTextureSize, 'invalid height')\n }\n if ('channels' in options) {\n c = options.channels\n check$1(c > 0 && c <= 4, 'invalid number of channels')\n hasChannels = true\n }\n }\n flags.width = w | 0\n flags.height = h | 0\n flags.channels = c | 0\n\n var hasFormat = false\n if ('format' in options) {\n var formatStr = options.format\n check$1(extensions.webgl_depth_texture ||\n !(formatStr === 'depth' || formatStr === 'depth stencil'),\n 'you must enable the WEBGL_depth_texture extension in order to use depth/stencil textures.')\n check$1.parameter(formatStr, textureFormats,\n 'invalid texture format')\n var internalformat = flags.internalformat = textureFormats[formatStr]\n flags.format = colorFormats[internalformat]\n if (formatStr in textureTypes) {\n if (!('type' in options)) {\n flags.type = textureTypes[formatStr]\n }\n }\n if (formatStr in compressedTextureFormats) {\n flags.compressed = true\n }\n hasFormat = true\n }\n\n // Reconcile channels and format\n if (!hasChannels && hasFormat) {\n flags.channels = FORMAT_CHANNELS[flags.format]\n } else if (hasChannels && !hasFormat) {\n if (flags.channels !== CHANNELS_FORMAT[flags.format]) {\n flags.format = flags.internalformat = CHANNELS_FORMAT[flags.channels]\n }\n } else if (hasFormat && hasChannels) {\n check$1(\n flags.channels === FORMAT_CHANNELS[flags.format],\n 'number of channels inconsistent with specified format')\n }\n }\n\n function setFlags (flags) {\n gl.pixelStorei(GL_UNPACK_FLIP_Y_WEBGL, flags.flipY)\n gl.pixelStorei(GL_UNPACK_PREMULTIPLY_ALPHA_WEBGL, flags.premultiplyAlpha)\n gl.pixelStorei(GL_UNPACK_COLORSPACE_CONVERSION_WEBGL, flags.colorSpace)\n gl.pixelStorei(GL_UNPACK_ALIGNMENT, flags.unpackAlignment)\n }\n\n // -------------------------------------------------------\n // Tex image data\n // -------------------------------------------------------\n function TexImage () {\n TexFlags.call(this)\n\n this.xOffset = 0\n this.yOffset = 0\n\n // data\n this.data = null\n this.needsFree = false\n\n // html element\n this.element = null\n\n // copyTexImage info\n this.needsCopy = false\n }\n\n function parseImage (image, options) {\n var data = null\n if (isPixelData(options)) {\n data = options\n } else if (options) {\n check$1.type(options, 'object', 'invalid pixel data type')\n parseFlags(image, options)\n if ('x' in options) {\n image.xOffset = options.x | 0\n }\n if ('y' in options) {\n image.yOffset = options.y | 0\n }\n if (isPixelData(options.data)) {\n data = options.data\n }\n }\n\n check$1(\n !image.compressed ||\n data instanceof Uint8Array,\n 'compressed texture data must be stored in a uint8array')\n\n if (options.copy) {\n check$1(!data, 'can not specify copy and data field for the same texture')\n var viewW = contextState.viewportWidth\n var viewH = contextState.viewportHeight\n image.width = image.width || (viewW - image.xOffset)\n image.height = image.height || (viewH - image.yOffset)\n image.needsCopy = true\n check$1(image.xOffset >= 0 && image.xOffset < viewW &&\n image.yOffset >= 0 && image.yOffset < viewH &&\n image.width > 0 && image.width <= viewW &&\n image.height > 0 && image.height <= viewH,\n 'copy texture read out of bounds')\n } else if (!data) {\n image.width = image.width || 1\n image.height = image.height || 1\n image.channels = image.channels || 4\n } else if (isTypedArray(data)) {\n image.channels = image.channels || 4\n image.data = data\n if (!('type' in options) && image.type === GL_UNSIGNED_BYTE$5) {\n image.type = typedArrayCode$1(data)\n }\n } else if (isNumericArray(data)) {\n image.channels = image.channels || 4\n convertData(image, data)\n image.alignment = 1\n image.needsFree = true\n } else if (isNDArrayLike(data)) {\n var array = data.data\n if (!Array.isArray(array) && image.type === GL_UNSIGNED_BYTE$5) {\n image.type = typedArrayCode$1(array)\n }\n var shape = data.shape\n var stride = data.stride\n var shapeX, shapeY, shapeC, strideX, strideY, strideC\n if (shape.length === 3) {\n shapeC = shape[2]\n strideC = stride[2]\n } else {\n check$1(shape.length === 2, 'invalid ndarray pixel data, must be 2 or 3D')\n shapeC = 1\n strideC = 1\n }\n shapeX = shape[0]\n shapeY = shape[1]\n strideX = stride[0]\n strideY = stride[1]\n image.alignment = 1\n image.width = shapeX\n image.height = shapeY\n image.channels = shapeC\n image.format = image.internalformat = CHANNELS_FORMAT[shapeC]\n image.needsFree = true\n transposeData(image, array, strideX, strideY, strideC, data.offset)\n } else if (isCanvasElement(data) || isOffscreenCanvas(data) || isContext2D(data)) {\n if (isCanvasElement(data) || isOffscreenCanvas(data)) {\n image.element = data\n } else {\n image.element = data.canvas\n }\n image.width = image.element.width\n image.height = image.element.height\n image.channels = 4\n } else if (isBitmap(data)) {\n image.element = data\n image.width = data.width\n image.height = data.height\n image.channels = 4\n } else if (isImageElement(data)) {\n image.element = data\n image.width = data.naturalWidth\n image.height = data.naturalHeight\n image.channels = 4\n } else if (isVideoElement(data)) {\n image.element = data\n image.width = data.videoWidth\n image.height = data.videoHeight\n image.channels = 4\n } else if (isRectArray(data)) {\n var w = image.width || data[0].length\n var h = image.height || data.length\n var c = image.channels\n if (isArrayLike(data[0][0])) {\n c = c || data[0][0].length\n } else {\n c = c || 1\n }\n var arrayShape = flattenUtils.shape(data)\n var n = 1\n for (var dd = 0; dd < arrayShape.length; ++dd) {\n n *= arrayShape[dd]\n }\n var allocData = preConvert(image, n)\n flattenUtils.flatten(data, arrayShape, '', allocData)\n postConvert(image, allocData)\n image.alignment = 1\n image.width = w\n image.height = h\n image.channels = c\n image.format = image.internalformat = CHANNELS_FORMAT[c]\n image.needsFree = true\n }\n\n if (image.type === GL_FLOAT$4) {\n check$1(limits.extensions.indexOf('oes_texture_float') >= 0,\n 'oes_texture_float extension not enabled')\n } else if (image.type === GL_HALF_FLOAT_OES$1) {\n check$1(limits.extensions.indexOf('oes_texture_half_float') >= 0,\n 'oes_texture_half_float extension not enabled')\n }\n\n // do compressed texture validation here.\n }\n\n function setImage (info, target, miplevel) {\n var element = info.element\n var data = info.data\n var internalformat = info.internalformat\n var format = info.format\n var type = info.type\n var width = info.width\n var height = info.height\n\n setFlags(info)\n\n if (element) {\n gl.texImage2D(target, miplevel, format, format, type, element)\n } else if (info.compressed) {\n gl.compressedTexImage2D(target, miplevel, internalformat, width, height, 0, data)\n } else if (info.needsCopy) {\n reglPoll()\n gl.copyTexImage2D(\n target, miplevel, format, info.xOffset, info.yOffset, width, height, 0)\n } else {\n gl.texImage2D(target, miplevel, format, width, height, 0, format, type, data || null)\n }\n }\n\n function setSubImage (info, target, x, y, miplevel) {\n var element = info.element\n var data = info.data\n var internalformat = info.internalformat\n var format = info.format\n var type = info.type\n var width = info.width\n var height = info.height\n\n setFlags(info)\n\n if (element) {\n gl.texSubImage2D(\n target, miplevel, x, y, format, type, element)\n } else if (info.compressed) {\n gl.compressedTexSubImage2D(\n target, miplevel, x, y, internalformat, width, height, data)\n } else if (info.needsCopy) {\n reglPoll()\n gl.copyTexSubImage2D(\n target, miplevel, x, y, info.xOffset, info.yOffset, width, height)\n } else {\n gl.texSubImage2D(\n target, miplevel, x, y, width, height, format, type, data)\n }\n }\n\n // texImage pool\n var imagePool = []\n\n function allocImage () {\n return imagePool.pop() || new TexImage()\n }\n\n function freeImage (image) {\n if (image.needsFree) {\n pool.freeType(image.data)\n }\n TexImage.call(image)\n imagePool.push(image)\n }\n\n // -------------------------------------------------------\n // Mip map\n // -------------------------------------------------------\n function MipMap () {\n TexFlags.call(this)\n\n this.genMipmaps = false\n this.mipmapHint = GL_DONT_CARE\n this.mipmask = 0\n this.images = Array(16)\n }\n\n function parseMipMapFromShape (mipmap, width, height) {\n var img = mipmap.images[0] = allocImage()\n mipmap.mipmask = 1\n img.width = mipmap.width = width\n img.height = mipmap.height = height\n img.channels = mipmap.channels = 4\n }\n\n function parseMipMapFromObject (mipmap, options) {\n var imgData = null\n if (isPixelData(options)) {\n imgData = mipmap.images[0] = allocImage()\n copyFlags(imgData, mipmap)\n parseImage(imgData, options)\n mipmap.mipmask = 1\n } else {\n parseFlags(mipmap, options)\n if (Array.isArray(options.mipmap)) {\n var mipData = options.mipmap\n for (var i = 0; i < mipData.length; ++i) {\n imgData = mipmap.images[i] = allocImage()\n copyFlags(imgData, mipmap)\n imgData.width >>= i\n imgData.height >>= i\n parseImage(imgData, mipData[i])\n mipmap.mipmask |= (1 << i)\n }\n } else {\n imgData = mipmap.images[0] = allocImage()\n copyFlags(imgData, mipmap)\n parseImage(imgData, options)\n mipmap.mipmask = 1\n }\n }\n copyFlags(mipmap, mipmap.images[0])\n\n // For textures of the compressed format WEBGL_compressed_texture_s3tc\n // we must have that\n //\n // \"When level equals zero width and height must be a multiple of 4.\n // When level is greater than 0 width and height must be 0, 1, 2 or a multiple of 4. \"\n //\n // but we do not yet support having multiple mipmap levels for compressed textures,\n // so we only test for level zero.\n\n if (\n mipmap.compressed &&\n (\n mipmap.internalformat === GL_COMPRESSED_RGB_S3TC_DXT1_EXT ||\n mipmap.internalformat === GL_COMPRESSED_RGBA_S3TC_DXT1_EXT ||\n mipmap.internalformat === GL_COMPRESSED_RGBA_S3TC_DXT3_EXT ||\n mipmap.internalformat === GL_COMPRESSED_RGBA_S3TC_DXT5_EXT\n )\n ) {\n check$1(mipmap.width % 4 === 0 && mipmap.height % 4 === 0,\n 'for compressed texture formats, mipmap level 0 must have width and height that are a multiple of 4')\n }\n }\n\n function setMipMap (mipmap, target) {\n var images = mipmap.images\n for (var i = 0; i < images.length; ++i) {\n if (!images[i]) {\n return\n }\n setImage(images[i], target, i)\n }\n }\n\n var mipPool = []\n\n function allocMipMap () {\n var result = mipPool.pop() || new MipMap()\n TexFlags.call(result)\n result.mipmask = 0\n for (var i = 0; i < 16; ++i) {\n result.images[i] = null\n }\n return result\n }\n\n function freeMipMap (mipmap) {\n var images = mipmap.images\n for (var i = 0; i < images.length; ++i) {\n if (images[i]) {\n freeImage(images[i])\n }\n images[i] = null\n }\n mipPool.push(mipmap)\n }\n\n // -------------------------------------------------------\n // Tex info\n // -------------------------------------------------------\n function TexInfo () {\n this.minFilter = GL_NEAREST$1\n this.magFilter = GL_NEAREST$1\n\n this.wrapS = GL_CLAMP_TO_EDGE$1\n this.wrapT = GL_CLAMP_TO_EDGE$1\n\n this.anisotropic = 1\n\n this.genMipmaps = false\n this.mipmapHint = GL_DONT_CARE\n }\n\n function parseTexInfo (info, options) {\n if ('min' in options) {\n var minFilter = options.min\n check$1.parameter(minFilter, minFilters)\n info.minFilter = minFilters[minFilter]\n if (MIPMAP_FILTERS.indexOf(info.minFilter) >= 0 && !('faces' in options)) {\n info.genMipmaps = true\n }\n }\n\n if ('mag' in options) {\n var magFilter = options.mag\n check$1.parameter(magFilter, magFilters)\n info.magFilter = magFilters[magFilter]\n }\n\n var wrapS = info.wrapS\n var wrapT = info.wrapT\n if ('wrap' in options) {\n var wrap = options.wrap\n if (typeof wrap === 'string') {\n check$1.parameter(wrap, wrapModes)\n wrapS = wrapT = wrapModes[wrap]\n } else if (Array.isArray(wrap)) {\n check$1.parameter(wrap[0], wrapModes)\n check$1.parameter(wrap[1], wrapModes)\n wrapS = wrapModes[wrap[0]]\n wrapT = wrapModes[wrap[1]]\n }\n } else {\n if ('wrapS' in options) {\n var optWrapS = options.wrapS\n check$1.parameter(optWrapS, wrapModes)\n wrapS = wrapModes[optWrapS]\n }\n if ('wrapT' in options) {\n var optWrapT = options.wrapT\n check$1.parameter(optWrapT, wrapModes)\n wrapT = wrapModes[optWrapT]\n }\n }\n info.wrapS = wrapS\n info.wrapT = wrapT\n\n if ('anisotropic' in options) {\n var anisotropic = options.anisotropic\n check$1(typeof anisotropic === 'number' &&\n anisotropic >= 1 && anisotropic <= limits.maxAnisotropic,\n 'aniso samples must be between 1 and ')\n info.anisotropic = options.anisotropic\n }\n\n if ('mipmap' in options) {\n var hasMipMap = false\n switch (typeof options.mipmap) {\n case 'string':\n check$1.parameter(options.mipmap, mipmapHint,\n 'invalid mipmap hint')\n info.mipmapHint = mipmapHint[options.mipmap]\n info.genMipmaps = true\n hasMipMap = true\n break\n\n case 'boolean':\n hasMipMap = info.genMipmaps = options.mipmap\n break\n\n case 'object':\n check$1(Array.isArray(options.mipmap), 'invalid mipmap type')\n info.genMipmaps = false\n hasMipMap = true\n break\n\n default:\n check$1.raise('invalid mipmap type')\n }\n if (hasMipMap && !('min' in options)) {\n info.minFilter = GL_NEAREST_MIPMAP_NEAREST$1\n }\n }\n }\n\n function setTexInfo (info, target) {\n gl.texParameteri(target, GL_TEXTURE_MIN_FILTER, info.minFilter)\n gl.texParameteri(target, GL_TEXTURE_MAG_FILTER, info.magFilter)\n gl.texParameteri(target, GL_TEXTURE_WRAP_S, info.wrapS)\n gl.texParameteri(target, GL_TEXTURE_WRAP_T, info.wrapT)\n if (extensions.ext_texture_filter_anisotropic) {\n gl.texParameteri(target, GL_TEXTURE_MAX_ANISOTROPY_EXT, info.anisotropic)\n }\n if (info.genMipmaps) {\n gl.hint(GL_GENERATE_MIPMAP_HINT, info.mipmapHint)\n gl.generateMipmap(target)\n }\n }\n\n // -------------------------------------------------------\n // Full texture object\n // -------------------------------------------------------\n var textureCount = 0\n var textureSet = {}\n var numTexUnits = limits.maxTextureUnits\n var textureUnits = Array(numTexUnits).map(function () {\n return null\n })\n\n function REGLTexture (target) {\n TexFlags.call(this)\n this.mipmask = 0\n this.internalformat = GL_RGBA$1\n\n this.id = textureCount++\n\n this.refCount = 1\n\n this.target = target\n this.texture = gl.createTexture()\n\n this.unit = -1\n this.bindCount = 0\n\n this.texInfo = new TexInfo()\n\n if (config.profile) {\n this.stats = { size: 0 }\n }\n }\n\n function tempBind (texture) {\n gl.activeTexture(GL_TEXTURE0$1)\n gl.bindTexture(texture.target, texture.texture)\n }\n\n function tempRestore () {\n var prev = textureUnits[0]\n if (prev) {\n gl.bindTexture(prev.target, prev.texture)\n } else {\n gl.bindTexture(GL_TEXTURE_2D$1, null)\n }\n }\n\n function destroy (texture) {\n var handle = texture.texture\n check$1(handle, 'must not double destroy texture')\n var unit = texture.unit\n var target = texture.target\n if (unit >= 0) {\n gl.activeTexture(GL_TEXTURE0$1 + unit)\n gl.bindTexture(target, null)\n textureUnits[unit] = null\n }\n gl.deleteTexture(handle)\n texture.texture = null\n texture.params = null\n texture.pixels = null\n texture.refCount = 0\n delete textureSet[texture.id]\n stats.textureCount--\n }\n\n extend(REGLTexture.prototype, {\n bind: function () {\n var texture = this\n texture.bindCount += 1\n var unit = texture.unit\n if (unit < 0) {\n for (var i = 0; i < numTexUnits; ++i) {\n var other = textureUnits[i]\n if (other) {\n if (other.bindCount > 0) {\n continue\n }\n other.unit = -1\n }\n textureUnits[i] = texture\n unit = i\n break\n }\n if (unit >= numTexUnits) {\n check$1.raise('insufficient number of texture units')\n }\n if (config.profile && stats.maxTextureUnits < (unit + 1)) {\n stats.maxTextureUnits = unit + 1 // +1, since the units are zero-based\n }\n texture.unit = unit\n gl.activeTexture(GL_TEXTURE0$1 + unit)\n gl.bindTexture(texture.target, texture.texture)\n }\n return unit\n },\n\n unbind: function () {\n this.bindCount -= 1\n },\n\n decRef: function () {\n if (--this.refCount <= 0) {\n destroy(this)\n }\n }\n })\n\n function createTexture2D (a, b) {\n var texture = new REGLTexture(GL_TEXTURE_2D$1)\n textureSet[texture.id] = texture\n stats.textureCount++\n\n function reglTexture2D (a, b) {\n var texInfo = texture.texInfo\n TexInfo.call(texInfo)\n var mipData = allocMipMap()\n\n if (typeof a === 'number') {\n if (typeof b === 'number') {\n parseMipMapFromShape(mipData, a | 0, b | 0)\n } else {\n parseMipMapFromShape(mipData, a | 0, a | 0)\n }\n } else if (a) {\n check$1.type(a, 'object', 'invalid arguments to regl.texture')\n parseTexInfo(texInfo, a)\n parseMipMapFromObject(mipData, a)\n } else {\n // empty textures get assigned a default shape of 1x1\n parseMipMapFromShape(mipData, 1, 1)\n }\n\n if (texInfo.genMipmaps) {\n mipData.mipmask = (mipData.width << 1) - 1\n }\n texture.mipmask = mipData.mipmask\n\n copyFlags(texture, mipData)\n\n check$1.texture2D(texInfo, mipData, limits)\n texture.internalformat = mipData.internalformat\n\n reglTexture2D.width = mipData.width\n reglTexture2D.height = mipData.height\n\n tempBind(texture)\n setMipMap(mipData, GL_TEXTURE_2D$1)\n setTexInfo(texInfo, GL_TEXTURE_2D$1)\n tempRestore()\n\n freeMipMap(mipData)\n\n if (config.profile) {\n texture.stats.size = getTextureSize(\n texture.internalformat,\n texture.type,\n mipData.width,\n mipData.height,\n texInfo.genMipmaps,\n false)\n }\n reglTexture2D.format = textureFormatsInvert[texture.internalformat]\n reglTexture2D.type = textureTypesInvert[texture.type]\n\n reglTexture2D.mag = magFiltersInvert[texInfo.magFilter]\n reglTexture2D.min = minFiltersInvert[texInfo.minFilter]\n\n reglTexture2D.wrapS = wrapModesInvert[texInfo.wrapS]\n reglTexture2D.wrapT = wrapModesInvert[texInfo.wrapT]\n\n return reglTexture2D\n }\n\n function subimage (image, x_, y_, level_) {\n check$1(!!image, 'must specify image data')\n\n var x = x_ | 0\n var y = y_ | 0\n var level = level_ | 0\n\n var imageData = allocImage()\n copyFlags(imageData, texture)\n imageData.width = 0\n imageData.height = 0\n parseImage(imageData, image)\n imageData.width = imageData.width || ((texture.width >> level) - x)\n imageData.height = imageData.height || ((texture.height >> level) - y)\n\n check$1(\n texture.type === imageData.type &&\n texture.format === imageData.format &&\n texture.internalformat === imageData.internalformat,\n 'incompatible format for texture.subimage')\n check$1(\n x >= 0 && y >= 0 &&\n x + imageData.width <= texture.width &&\n y + imageData.height <= texture.height,\n 'texture.subimage write out of bounds')\n check$1(\n texture.mipmask & (1 << level),\n 'missing mipmap data')\n check$1(\n imageData.data || imageData.element || imageData.needsCopy,\n 'missing image data')\n\n tempBind(texture)\n setSubImage(imageData, GL_TEXTURE_2D$1, x, y, level)\n tempRestore()\n\n freeImage(imageData)\n\n return reglTexture2D\n }\n\n function resize (w_, h_) {\n var w = w_ | 0\n var h = (h_ | 0) || w\n if (w === texture.width && h === texture.height) {\n return reglTexture2D\n }\n\n reglTexture2D.width = texture.width = w\n reglTexture2D.height = texture.height = h\n\n tempBind(texture)\n\n for (var i = 0; texture.mipmask >> i; ++i) {\n var _w = w >> i\n var _h = h >> i\n if (!_w || !_h) break\n gl.texImage2D(\n GL_TEXTURE_2D$1,\n i,\n texture.format,\n _w,\n _h,\n 0,\n texture.format,\n texture.type,\n null)\n }\n tempRestore()\n\n // also, recompute the texture size.\n if (config.profile) {\n texture.stats.size = getTextureSize(\n texture.internalformat,\n texture.type,\n w,\n h,\n false,\n false)\n }\n\n return reglTexture2D\n }\n\n reglTexture2D(a, b)\n\n reglTexture2D.subimage = subimage\n reglTexture2D.resize = resize\n reglTexture2D._reglType = 'texture2d'\n reglTexture2D._texture = texture\n if (config.profile) {\n reglTexture2D.stats = texture.stats\n }\n reglTexture2D.destroy = function () {\n texture.decRef()\n }\n\n return reglTexture2D\n }\n\n function createTextureCube (a0, a1, a2, a3, a4, a5) {\n var texture = new REGLTexture(GL_TEXTURE_CUBE_MAP$1)\n textureSet[texture.id] = texture\n stats.cubeCount++\n\n var faces = new Array(6)\n\n function reglTextureCube (a0, a1, a2, a3, a4, a5) {\n var i\n var texInfo = texture.texInfo\n TexInfo.call(texInfo)\n for (i = 0; i < 6; ++i) {\n faces[i] = allocMipMap()\n }\n\n if (typeof a0 === 'number' || !a0) {\n var s = (a0 | 0) || 1\n for (i = 0; i < 6; ++i) {\n parseMipMapFromShape(faces[i], s, s)\n }\n } else if (typeof a0 === 'object') {\n if (a1) {\n parseMipMapFromObject(faces[0], a0)\n parseMipMapFromObject(faces[1], a1)\n parseMipMapFromObject(faces[2], a2)\n parseMipMapFromObject(faces[3], a3)\n parseMipMapFromObject(faces[4], a4)\n parseMipMapFromObject(faces[5], a5)\n } else {\n parseTexInfo(texInfo, a0)\n parseFlags(texture, a0)\n if ('faces' in a0) {\n var faceInput = a0.faces\n check$1(Array.isArray(faceInput) && faceInput.length === 6,\n 'cube faces must be a length 6 array')\n for (i = 0; i < 6; ++i) {\n check$1(typeof faceInput[i] === 'object' && !!faceInput[i],\n 'invalid input for cube map face')\n copyFlags(faces[i], texture)\n parseMipMapFromObject(faces[i], faceInput[i])\n }\n } else {\n for (i = 0; i < 6; ++i) {\n parseMipMapFromObject(faces[i], a0)\n }\n }\n }\n } else {\n check$1.raise('invalid arguments to cube map')\n }\n\n copyFlags(texture, faces[0])\n\n if (!limits.npotTextureCube) {\n check$1(isPow2$1(texture.width) && isPow2$1(texture.height), 'your browser does not support non power or two texture dimensions')\n }\n\n if (texInfo.genMipmaps) {\n texture.mipmask = (faces[0].width << 1) - 1\n } else {\n texture.mipmask = faces[0].mipmask\n }\n\n check$1.textureCube(texture, texInfo, faces, limits)\n texture.internalformat = faces[0].internalformat\n\n reglTextureCube.width = faces[0].width\n reglTextureCube.height = faces[0].height\n\n tempBind(texture)\n for (i = 0; i < 6; ++i) {\n setMipMap(faces[i], GL_TEXTURE_CUBE_MAP_POSITIVE_X$1 + i)\n }\n setTexInfo(texInfo, GL_TEXTURE_CUBE_MAP$1)\n tempRestore()\n\n if (config.profile) {\n texture.stats.size = getTextureSize(\n texture.internalformat,\n texture.type,\n reglTextureCube.width,\n reglTextureCube.height,\n texInfo.genMipmaps,\n true)\n }\n\n reglTextureCube.format = textureFormatsInvert[texture.internalformat]\n reglTextureCube.type = textureTypesInvert[texture.type]\n\n reglTextureCube.mag = magFiltersInvert[texInfo.magFilter]\n reglTextureCube.min = minFiltersInvert[texInfo.minFilter]\n\n reglTextureCube.wrapS = wrapModesInvert[texInfo.wrapS]\n reglTextureCube.wrapT = wrapModesInvert[texInfo.wrapT]\n\n for (i = 0; i < 6; ++i) {\n freeMipMap(faces[i])\n }\n\n return reglTextureCube\n }\n\n function subimage (face, image, x_, y_, level_) {\n check$1(!!image, 'must specify image data')\n check$1(typeof face === 'number' && face === (face | 0) &&\n face >= 0 && face < 6, 'invalid face')\n\n var x = x_ | 0\n var y = y_ | 0\n var level = level_ | 0\n\n var imageData = allocImage()\n copyFlags(imageData, texture)\n imageData.width = 0\n imageData.height = 0\n parseImage(imageData, image)\n imageData.width = imageData.width || ((texture.width >> level) - x)\n imageData.height = imageData.height || ((texture.height >> level) - y)\n\n check$1(\n texture.type === imageData.type &&\n texture.format === imageData.format &&\n texture.internalformat === imageData.internalformat,\n 'incompatible format for texture.subimage')\n check$1(\n x >= 0 && y >= 0 &&\n x + imageData.width <= texture.width &&\n y + imageData.height <= texture.height,\n 'texture.subimage write out of bounds')\n check$1(\n texture.mipmask & (1 << level),\n 'missing mipmap data')\n check$1(\n imageData.data || imageData.element || imageData.needsCopy,\n 'missing image data')\n\n tempBind(texture)\n setSubImage(imageData, GL_TEXTURE_CUBE_MAP_POSITIVE_X$1 + face, x, y, level)\n tempRestore()\n\n freeImage(imageData)\n\n return reglTextureCube\n }\n\n function resize (radius_) {\n var radius = radius_ | 0\n if (radius === texture.width) {\n return\n }\n\n reglTextureCube.width = texture.width = radius\n reglTextureCube.height = texture.height = radius\n\n tempBind(texture)\n for (var i = 0; i < 6; ++i) {\n for (var j = 0; texture.mipmask >> j; ++j) {\n gl.texImage2D(\n GL_TEXTURE_CUBE_MAP_POSITIVE_X$1 + i,\n j,\n texture.format,\n radius >> j,\n radius >> j,\n 0,\n texture.format,\n texture.type,\n null)\n }\n }\n tempRestore()\n\n if (config.profile) {\n texture.stats.size = getTextureSize(\n texture.internalformat,\n texture.type,\n reglTextureCube.width,\n reglTextureCube.height,\n false,\n true)\n }\n\n return reglTextureCube\n }\n\n reglTextureCube(a0, a1, a2, a3, a4, a5)\n\n reglTextureCube.subimage = subimage\n reglTextureCube.resize = resize\n reglTextureCube._reglType = 'textureCube'\n reglTextureCube._texture = texture\n if (config.profile) {\n reglTextureCube.stats = texture.stats\n }\n reglTextureCube.destroy = function () {\n texture.decRef()\n }\n\n return reglTextureCube\n }\n\n // Called when regl is destroyed\n function destroyTextures () {\n for (var i = 0; i < numTexUnits; ++i) {\n gl.activeTexture(GL_TEXTURE0$1 + i)\n gl.bindTexture(GL_TEXTURE_2D$1, null)\n textureUnits[i] = null\n }\n values(textureSet).forEach(destroy)\n\n stats.cubeCount = 0\n stats.textureCount = 0\n }\n\n if (config.profile) {\n stats.getTotalTextureSize = function () {\n var total = 0\n Object.keys(textureSet).forEach(function (key) {\n total += textureSet[key].stats.size\n })\n return total\n }\n }\n\n function restoreTextures () {\n for (var i = 0; i < numTexUnits; ++i) {\n var tex = textureUnits[i]\n if (tex) {\n tex.bindCount = 0\n tex.unit = -1\n textureUnits[i] = null\n }\n }\n\n values(textureSet).forEach(function (texture) {\n texture.texture = gl.createTexture()\n gl.bindTexture(texture.target, texture.texture)\n for (var i = 0; i < 32; ++i) {\n if ((texture.mipmask & (1 << i)) === 0) {\n continue\n }\n if (texture.target === GL_TEXTURE_2D$1) {\n gl.texImage2D(GL_TEXTURE_2D$1,\n i,\n texture.internalformat,\n texture.width >> i,\n texture.height >> i,\n 0,\n texture.internalformat,\n texture.type,\n null)\n } else {\n for (var j = 0; j < 6; ++j) {\n gl.texImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X$1 + j,\n i,\n texture.internalformat,\n texture.width >> i,\n texture.height >> i,\n 0,\n texture.internalformat,\n texture.type,\n null)\n }\n }\n }\n setTexInfo(texture.texInfo, texture.target)\n })\n }\n\n return {\n create2D: createTexture2D,\n createCube: createTextureCube,\n clear: destroyTextures,\n getTexture: function (wrapper) {\n return null\n },\n restore: restoreTextures\n }\n}\n\nvar GL_RENDERBUFFER = 0x8D41\n\nvar GL_RGBA4$1 = 0x8056\nvar GL_RGB5_A1$1 = 0x8057\nvar GL_RGB565$1 = 0x8D62\nvar GL_DEPTH_COMPONENT16 = 0x81A5\nvar GL_STENCIL_INDEX8 = 0x8D48\nvar GL_DEPTH_STENCIL$1 = 0x84F9\n\nvar GL_SRGB8_ALPHA8_EXT = 0x8C43\n\nvar GL_RGBA32F_EXT = 0x8814\n\nvar GL_RGBA16F_EXT = 0x881A\nvar GL_RGB16F_EXT = 0x881B\n\nvar FORMAT_SIZES = []\n\nFORMAT_SIZES[GL_RGBA4$1] = 2\nFORMAT_SIZES[GL_RGB5_A1$1] = 2\nFORMAT_SIZES[GL_RGB565$1] = 2\n\nFORMAT_SIZES[GL_DEPTH_COMPONENT16] = 2\nFORMAT_SIZES[GL_STENCIL_INDEX8] = 1\nFORMAT_SIZES[GL_DEPTH_STENCIL$1] = 4\n\nFORMAT_SIZES[GL_SRGB8_ALPHA8_EXT] = 4\nFORMAT_SIZES[GL_RGBA32F_EXT] = 16\nFORMAT_SIZES[GL_RGBA16F_EXT] = 8\nFORMAT_SIZES[GL_RGB16F_EXT] = 6\n\nfunction getRenderbufferSize (format, width, height) {\n return FORMAT_SIZES[format] * width * height\n}\n\nvar wrapRenderbuffers = function (gl, extensions, limits, stats, config) {\n var formatTypes = {\n 'rgba4': GL_RGBA4$1,\n 'rgb565': GL_RGB565$1,\n 'rgb5 a1': GL_RGB5_A1$1,\n 'depth': GL_DEPTH_COMPONENT16,\n 'stencil': GL_STENCIL_INDEX8,\n 'depth stencil': GL_DEPTH_STENCIL$1\n }\n\n if (extensions.ext_srgb) {\n formatTypes['srgba'] = GL_SRGB8_ALPHA8_EXT\n }\n\n if (extensions.ext_color_buffer_half_float) {\n formatTypes['rgba16f'] = GL_RGBA16F_EXT\n formatTypes['rgb16f'] = GL_RGB16F_EXT\n }\n\n if (extensions.webgl_color_buffer_float) {\n formatTypes['rgba32f'] = GL_RGBA32F_EXT\n }\n\n var formatTypesInvert = []\n Object.keys(formatTypes).forEach(function (key) {\n var val = formatTypes[key]\n formatTypesInvert[val] = key\n })\n\n var renderbufferCount = 0\n var renderbufferSet = {}\n\n function REGLRenderbuffer (renderbuffer) {\n this.id = renderbufferCount++\n this.refCount = 1\n\n this.renderbuffer = renderbuffer\n\n this.format = GL_RGBA4$1\n this.width = 0\n this.height = 0\n\n if (config.profile) {\n this.stats = { size: 0 }\n }\n }\n\n REGLRenderbuffer.prototype.decRef = function () {\n if (--this.refCount <= 0) {\n destroy(this)\n }\n }\n\n function destroy (rb) {\n var handle = rb.renderbuffer\n check$1(handle, 'must not double destroy renderbuffer')\n gl.bindRenderbuffer(GL_RENDERBUFFER, null)\n gl.deleteRenderbuffer(handle)\n rb.renderbuffer = null\n rb.refCount = 0\n delete renderbufferSet[rb.id]\n stats.renderbufferCount--\n }\n\n function createRenderbuffer (a, b) {\n var renderbuffer = new REGLRenderbuffer(gl.createRenderbuffer())\n renderbufferSet[renderbuffer.id] = renderbuffer\n stats.renderbufferCount++\n\n function reglRenderbuffer (a, b) {\n var w = 0\n var h = 0\n var format = GL_RGBA4$1\n\n if (typeof a === 'object' && a) {\n var options = a\n if ('shape' in options) {\n var shape = options.shape\n check$1(Array.isArray(shape) && shape.length >= 2,\n 'invalid renderbuffer shape')\n w = shape[0] | 0\n h = shape[1] | 0\n } else {\n if ('radius' in options) {\n w = h = options.radius | 0\n }\n if ('width' in options) {\n w = options.width | 0\n }\n if ('height' in options) {\n h = options.height | 0\n }\n }\n if ('format' in options) {\n check$1.parameter(options.format, formatTypes,\n 'invalid renderbuffer format')\n format = formatTypes[options.format]\n }\n } else if (typeof a === 'number') {\n w = a | 0\n if (typeof b === 'number') {\n h = b | 0\n } else {\n h = w\n }\n } else if (!a) {\n w = h = 1\n } else {\n check$1.raise('invalid arguments to renderbuffer constructor')\n }\n\n // check shape\n check$1(\n w > 0 && h > 0 &&\n w <= limits.maxRenderbufferSize && h <= limits.maxRenderbufferSize,\n 'invalid renderbuffer size')\n\n if (w === renderbuffer.width &&\n h === renderbuffer.height &&\n format === renderbuffer.format) {\n return\n }\n\n reglRenderbuffer.width = renderbuffer.width = w\n reglRenderbuffer.height = renderbuffer.height = h\n renderbuffer.format = format\n\n gl.bindRenderbuffer(GL_RENDERBUFFER, renderbuffer.renderbuffer)\n gl.renderbufferStorage(GL_RENDERBUFFER, format, w, h)\n\n check$1(\n gl.getError() === 0,\n 'invalid render buffer format')\n\n if (config.profile) {\n renderbuffer.stats.size = getRenderbufferSize(renderbuffer.format, renderbuffer.width, renderbuffer.height)\n }\n reglRenderbuffer.format = formatTypesInvert[renderbuffer.format]\n\n return reglRenderbuffer\n }\n\n function resize (w_, h_) {\n var w = w_ | 0\n var h = (h_ | 0) || w\n\n if (w === renderbuffer.width && h === renderbuffer.height) {\n return reglRenderbuffer\n }\n\n // check shape\n check$1(\n w > 0 && h > 0 &&\n w <= limits.maxRenderbufferSize && h <= limits.maxRenderbufferSize,\n 'invalid renderbuffer size')\n\n reglRenderbuffer.width = renderbuffer.width = w\n reglRenderbuffer.height = renderbuffer.height = h\n\n gl.bindRenderbuffer(GL_RENDERBUFFER, renderbuffer.renderbuffer)\n gl.renderbufferStorage(GL_RENDERBUFFER, renderbuffer.format, w, h)\n\n check$1(\n gl.getError() === 0,\n 'invalid render buffer format')\n\n // also, recompute size.\n if (config.profile) {\n renderbuffer.stats.size = getRenderbufferSize(\n renderbuffer.format, renderbuffer.width, renderbuffer.height)\n }\n\n return reglRenderbuffer\n }\n\n reglRenderbuffer(a, b)\n\n reglRenderbuffer.resize = resize\n reglRenderbuffer._reglType = 'renderbuffer'\n reglRenderbuffer._renderbuffer = renderbuffer\n if (config.profile) {\n reglRenderbuffer.stats = renderbuffer.stats\n }\n reglRenderbuffer.destroy = function () {\n renderbuffer.decRef()\n }\n\n return reglRenderbuffer\n }\n\n if (config.profile) {\n stats.getTotalRenderbufferSize = function () {\n var total = 0\n Object.keys(renderbufferSet).forEach(function (key) {\n total += renderbufferSet[key].stats.size\n })\n return total\n }\n }\n\n function restoreRenderbuffers () {\n values(renderbufferSet).forEach(function (rb) {\n rb.renderbuffer = gl.createRenderbuffer()\n gl.bindRenderbuffer(GL_RENDERBUFFER, rb.renderbuffer)\n gl.renderbufferStorage(GL_RENDERBUFFER, rb.format, rb.width, rb.height)\n })\n gl.bindRenderbuffer(GL_RENDERBUFFER, null)\n }\n\n return {\n create: createRenderbuffer,\n clear: function () {\n values(renderbufferSet).forEach(destroy)\n },\n restore: restoreRenderbuffers\n }\n}\n\n// We store these constants so that the minifier can inline them\nvar GL_FRAMEBUFFER$1 = 0x8D40\nvar GL_RENDERBUFFER$1 = 0x8D41\n\nvar GL_TEXTURE_2D$2 = 0x0DE1\nvar GL_TEXTURE_CUBE_MAP_POSITIVE_X$2 = 0x8515\n\nvar GL_COLOR_ATTACHMENT0$1 = 0x8CE0\nvar GL_DEPTH_ATTACHMENT = 0x8D00\nvar GL_STENCIL_ATTACHMENT = 0x8D20\nvar GL_DEPTH_STENCIL_ATTACHMENT = 0x821A\n\nvar GL_FRAMEBUFFER_COMPLETE$1 = 0x8CD5\nvar GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6\nvar GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7\nvar GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9\nvar GL_FRAMEBUFFER_UNSUPPORTED = 0x8CDD\n\nvar GL_HALF_FLOAT_OES$2 = 0x8D61\nvar GL_UNSIGNED_BYTE$6 = 0x1401\nvar GL_FLOAT$5 = 0x1406\n\nvar GL_RGB$1 = 0x1907\nvar GL_RGBA$2 = 0x1908\n\nvar GL_DEPTH_COMPONENT$1 = 0x1902\n\nvar colorTextureFormatEnums = [\n GL_RGB$1,\n GL_RGBA$2\n]\n\n// for every texture format, store\n// the number of channels\nvar textureFormatChannels = []\ntextureFormatChannels[GL_RGBA$2] = 4\ntextureFormatChannels[GL_RGB$1] = 3\n\n// for every texture type, store\n// the size in bytes.\nvar textureTypeSizes = []\ntextureTypeSizes[GL_UNSIGNED_BYTE$6] = 1\ntextureTypeSizes[GL_FLOAT$5] = 4\ntextureTypeSizes[GL_HALF_FLOAT_OES$2] = 2\n\nvar GL_RGBA4$2 = 0x8056\nvar GL_RGB5_A1$2 = 0x8057\nvar GL_RGB565$2 = 0x8D62\nvar GL_DEPTH_COMPONENT16$1 = 0x81A5\nvar GL_STENCIL_INDEX8$1 = 0x8D48\nvar GL_DEPTH_STENCIL$2 = 0x84F9\n\nvar GL_SRGB8_ALPHA8_EXT$1 = 0x8C43\n\nvar GL_RGBA32F_EXT$1 = 0x8814\n\nvar GL_RGBA16F_EXT$1 = 0x881A\nvar GL_RGB16F_EXT$1 = 0x881B\n\nvar colorRenderbufferFormatEnums = [\n GL_RGBA4$2,\n GL_RGB5_A1$2,\n GL_RGB565$2,\n GL_SRGB8_ALPHA8_EXT$1,\n GL_RGBA16F_EXT$1,\n GL_RGB16F_EXT$1,\n GL_RGBA32F_EXT$1\n]\n\nvar statusCode = {}\nstatusCode[GL_FRAMEBUFFER_COMPLETE$1] = 'complete'\nstatusCode[GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT] = 'incomplete attachment'\nstatusCode[GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS] = 'incomplete dimensions'\nstatusCode[GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT] = 'incomplete, missing attachment'\nstatusCode[GL_FRAMEBUFFER_UNSUPPORTED] = 'unsupported'\n\nfunction wrapFBOState (\n gl,\n extensions,\n limits,\n textureState,\n renderbufferState,\n stats) {\n var framebufferState = {\n cur: null,\n next: null,\n dirty: false,\n setFBO: null\n }\n\n var colorTextureFormats = ['rgba']\n var colorRenderbufferFormats = ['rgba4', 'rgb565', 'rgb5 a1']\n\n if (extensions.ext_srgb) {\n colorRenderbufferFormats.push('srgba')\n }\n\n if (extensions.ext_color_buffer_half_float) {\n colorRenderbufferFormats.push('rgba16f', 'rgb16f')\n }\n\n if (extensions.webgl_color_buffer_float) {\n colorRenderbufferFormats.push('rgba32f')\n }\n\n var colorTypes = ['uint8']\n if (extensions.oes_texture_half_float) {\n colorTypes.push('half float', 'float16')\n }\n if (extensions.oes_texture_float) {\n colorTypes.push('float', 'float32')\n }\n\n function FramebufferAttachment (target, texture, renderbuffer) {\n this.target = target\n this.texture = texture\n this.renderbuffer = renderbuffer\n\n var w = 0\n var h = 0\n if (texture) {\n w = texture.width\n h = texture.height\n } else if (renderbuffer) {\n w = renderbuffer.width\n h = renderbuffer.height\n }\n this.width = w\n this.height = h\n }\n\n function decRef (attachment) {\n if (attachment) {\n if (attachment.texture) {\n attachment.texture._texture.decRef()\n }\n if (attachment.renderbuffer) {\n attachment.renderbuffer._renderbuffer.decRef()\n }\n }\n }\n\n function incRefAndCheckShape (attachment, width, height) {\n if (!attachment) {\n return\n }\n if (attachment.texture) {\n var texture = attachment.texture._texture\n var tw = Math.max(1, texture.width)\n var th = Math.max(1, texture.height)\n check$1(tw === width && th === height,\n 'inconsistent width/height for supplied texture')\n texture.refCount += 1\n } else {\n var renderbuffer = attachment.renderbuffer._renderbuffer\n check$1(\n renderbuffer.width === width && renderbuffer.height === height,\n 'inconsistent width/height for renderbuffer')\n renderbuffer.refCount += 1\n }\n }\n\n function attach (location, attachment) {\n if (attachment) {\n if (attachment.texture) {\n gl.framebufferTexture2D(\n GL_FRAMEBUFFER$1,\n location,\n attachment.target,\n attachment.texture._texture.texture,\n 0)\n } else {\n gl.framebufferRenderbuffer(\n GL_FRAMEBUFFER$1,\n location,\n GL_RENDERBUFFER$1,\n attachment.renderbuffer._renderbuffer.renderbuffer)\n }\n }\n }\n\n function parseAttachment (attachment) {\n var target = GL_TEXTURE_2D$2\n var texture = null\n var renderbuffer = null\n\n var data = attachment\n if (typeof attachment === 'object') {\n data = attachment.data\n if ('target' in attachment) {\n target = attachment.target | 0\n }\n }\n\n check$1.type(data, 'function', 'invalid attachment data')\n\n var type = data._reglType\n if (type === 'texture2d') {\n texture = data\n check$1(target === GL_TEXTURE_2D$2)\n } else if (type === 'textureCube') {\n texture = data\n check$1(\n target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X$2 &&\n target < GL_TEXTURE_CUBE_MAP_POSITIVE_X$2 + 6,\n 'invalid cube map target')\n } else if (type === 'renderbuffer') {\n renderbuffer = data\n target = GL_RENDERBUFFER$1\n } else {\n check$1.raise('invalid regl object for attachment')\n }\n\n return new FramebufferAttachment(target, texture, renderbuffer)\n }\n\n function allocAttachment (\n width,\n height,\n isTexture,\n format,\n type) {\n if (isTexture) {\n var texture = textureState.create2D({\n width: width,\n height: height,\n format: format,\n type: type\n })\n texture._texture.refCount = 0\n return new FramebufferAttachment(GL_TEXTURE_2D$2, texture, null)\n } else {\n var rb = renderbufferState.create({\n width: width,\n height: height,\n format: format\n })\n rb._renderbuffer.refCount = 0\n return new FramebufferAttachment(GL_RENDERBUFFER$1, null, rb)\n }\n }\n\n function unwrapAttachment (attachment) {\n return attachment && (attachment.texture || attachment.renderbuffer)\n }\n\n function resizeAttachment (attachment, w, h) {\n if (attachment) {\n if (attachment.texture) {\n attachment.texture.resize(w, h)\n } else if (attachment.renderbuffer) {\n attachment.renderbuffer.resize(w, h)\n }\n attachment.width = w\n attachment.height = h\n }\n }\n\n var framebufferCount = 0\n var framebufferSet = {}\n\n function REGLFramebuffer () {\n this.id = framebufferCount++\n framebufferSet[this.id] = this\n\n this.framebuffer = gl.createFramebuffer()\n this.width = 0\n this.height = 0\n\n this.colorAttachments = []\n this.depthAttachment = null\n this.stencilAttachment = null\n this.depthStencilAttachment = null\n }\n\n function decFBORefs (framebuffer) {\n framebuffer.colorAttachments.forEach(decRef)\n decRef(framebuffer.depthAttachment)\n decRef(framebuffer.stencilAttachment)\n decRef(framebuffer.depthStencilAttachment)\n }\n\n function destroy (framebuffer) {\n var handle = framebuffer.framebuffer\n check$1(handle, 'must not double destroy framebuffer')\n gl.deleteFramebuffer(handle)\n framebuffer.framebuffer = null\n stats.framebufferCount--\n delete framebufferSet[framebuffer.id]\n }\n\n function updateFramebuffer (framebuffer) {\n var i\n\n gl.bindFramebuffer(GL_FRAMEBUFFER$1, framebuffer.framebuffer)\n var colorAttachments = framebuffer.colorAttachments\n for (i = 0; i < colorAttachments.length; ++i) {\n attach(GL_COLOR_ATTACHMENT0$1 + i, colorAttachments[i])\n }\n for (i = colorAttachments.length; i < limits.maxColorAttachments; ++i) {\n gl.framebufferTexture2D(\n GL_FRAMEBUFFER$1,\n GL_COLOR_ATTACHMENT0$1 + i,\n GL_TEXTURE_2D$2,\n null,\n 0)\n }\n\n gl.framebufferTexture2D(\n GL_FRAMEBUFFER$1,\n GL_DEPTH_STENCIL_ATTACHMENT,\n GL_TEXTURE_2D$2,\n null,\n 0)\n gl.framebufferTexture2D(\n GL_FRAMEBUFFER$1,\n GL_DEPTH_ATTACHMENT,\n GL_TEXTURE_2D$2,\n null,\n 0)\n gl.framebufferTexture2D(\n GL_FRAMEBUFFER$1,\n GL_STENCIL_ATTACHMENT,\n GL_TEXTURE_2D$2,\n null,\n 0)\n\n attach(GL_DEPTH_ATTACHMENT, framebuffer.depthAttachment)\n attach(GL_STENCIL_ATTACHMENT, framebuffer.stencilAttachment)\n attach(GL_DEPTH_STENCIL_ATTACHMENT, framebuffer.depthStencilAttachment)\n\n // Check status code\n var status = gl.checkFramebufferStatus(GL_FRAMEBUFFER$1)\n if (!gl.isContextLost() && status !== GL_FRAMEBUFFER_COMPLETE$1) {\n check$1.raise('framebuffer configuration not supported, status = ' +\n statusCode[status])\n }\n\n gl.bindFramebuffer(GL_FRAMEBUFFER$1, framebufferState.next ? framebufferState.next.framebuffer : null)\n framebufferState.cur = framebufferState.next\n\n // FIXME: Clear error code here. This is a work around for a bug in\n // headless-gl\n gl.getError()\n }\n\n function createFBO (a0, a1) {\n var framebuffer = new REGLFramebuffer()\n stats.framebufferCount++\n\n function reglFramebuffer (a, b) {\n var i\n\n check$1(framebufferState.next !== framebuffer,\n 'can not update framebuffer which is currently in use')\n\n var width = 0\n var height = 0\n\n var needsDepth = true\n var needsStencil = true\n\n var colorBuffer = null\n var colorTexture = true\n var colorFormat = 'rgba'\n var colorType = 'uint8'\n var colorCount = 1\n\n var depthBuffer = null\n var stencilBuffer = null\n var depthStencilBuffer = null\n var depthStencilTexture = false\n\n if (typeof a === 'number') {\n width = a | 0\n height = (b | 0) || width\n } else if (!a) {\n width = height = 1\n } else {\n check$1.type(a, 'object', 'invalid arguments for framebuffer')\n var options = a\n\n if ('shape' in options) {\n var shape = options.shape\n check$1(Array.isArray(shape) && shape.length >= 2,\n 'invalid shape for framebuffer')\n width = shape[0]\n height = shape[1]\n } else {\n if ('radius' in options) {\n width = height = options.radius\n }\n if ('width' in options) {\n width = options.width\n }\n if ('height' in options) {\n height = options.height\n }\n }\n\n if ('color' in options ||\n 'colors' in options) {\n colorBuffer =\n options.color ||\n options.colors\n if (Array.isArray(colorBuffer)) {\n check$1(\n colorBuffer.length === 1 || extensions.webgl_draw_buffers,\n 'multiple render targets not supported')\n }\n }\n\n if (!colorBuffer) {\n if ('colorCount' in options) {\n colorCount = options.colorCount | 0\n check$1(colorCount > 0, 'invalid color buffer count')\n }\n\n if ('colorTexture' in options) {\n colorTexture = !!options.colorTexture\n colorFormat = 'rgba4'\n }\n\n if ('colorType' in options) {\n colorType = options.colorType\n if (!colorTexture) {\n if (colorType === 'half float' || colorType === 'float16') {\n check$1(extensions.ext_color_buffer_half_float,\n 'you must enable EXT_color_buffer_half_float to use 16-bit render buffers')\n colorFormat = 'rgba16f'\n } else if (colorType === 'float' || colorType === 'float32') {\n check$1(extensions.webgl_color_buffer_float,\n 'you must enable WEBGL_color_buffer_float in order to use 32-bit floating point renderbuffers')\n colorFormat = 'rgba32f'\n }\n } else {\n check$1(extensions.oes_texture_float ||\n !(colorType === 'float' || colorType === 'float32'),\n 'you must enable OES_texture_float in order to use floating point framebuffer objects')\n check$1(extensions.oes_texture_half_float ||\n !(colorType === 'half float' || colorType === 'float16'),\n 'you must enable OES_texture_half_float in order to use 16-bit floating point framebuffer objects')\n }\n check$1.oneOf(colorType, colorTypes, 'invalid color type')\n }\n\n if ('colorFormat' in options) {\n colorFormat = options.colorFormat\n if (colorTextureFormats.indexOf(colorFormat) >= 0) {\n colorTexture = true\n } else if (colorRenderbufferFormats.indexOf(colorFormat) >= 0) {\n colorTexture = false\n } else {\n if (colorTexture) {\n check$1.oneOf(\n options.colorFormat, colorTextureFormats,\n 'invalid color format for texture')\n } else {\n check$1.oneOf(\n options.colorFormat, colorRenderbufferFormats,\n 'invalid color format for renderbuffer')\n }\n }\n }\n }\n\n if ('depthTexture' in options || 'depthStencilTexture' in options) {\n depthStencilTexture = !!(options.depthTexture ||\n options.depthStencilTexture)\n check$1(!depthStencilTexture || extensions.webgl_depth_texture,\n 'webgl_depth_texture extension not supported')\n }\n\n if ('depth' in options) {\n if (typeof options.depth === 'boolean') {\n needsDepth = options.depth\n } else {\n depthBuffer = options.depth\n needsStencil = false\n }\n }\n\n if ('stencil' in options) {\n if (typeof options.stencil === 'boolean') {\n needsStencil = options.stencil\n } else {\n stencilBuffer = options.stencil\n needsDepth = false\n }\n }\n\n if ('depthStencil' in options) {\n if (typeof options.depthStencil === 'boolean') {\n needsDepth = needsStencil = options.depthStencil\n } else {\n depthStencilBuffer = options.depthStencil\n needsDepth = false\n needsStencil = false\n }\n }\n }\n\n // parse attachments\n var colorAttachments = null\n var depthAttachment = null\n var stencilAttachment = null\n var depthStencilAttachment = null\n\n // Set up color attachments\n if (Array.isArray(colorBuffer)) {\n colorAttachments = colorBuffer.map(parseAttachment)\n } else if (colorBuffer) {\n colorAttachments = [parseAttachment(colorBuffer)]\n } else {\n colorAttachments = new Array(colorCount)\n for (i = 0; i < colorCount; ++i) {\n colorAttachments[i] = allocAttachment(\n width,\n height,\n colorTexture,\n colorFormat,\n colorType)\n }\n }\n\n check$1(extensions.webgl_draw_buffers || colorAttachments.length <= 1,\n 'you must enable the WEBGL_draw_buffers extension in order to use multiple color buffers.')\n check$1(colorAttachments.length <= limits.maxColorAttachments,\n 'too many color attachments, not supported')\n\n width = width || colorAttachments[0].width\n height = height || colorAttachments[0].height\n\n if (depthBuffer) {\n depthAttachment = parseAttachment(depthBuffer)\n } else if (needsDepth && !needsStencil) {\n depthAttachment = allocAttachment(\n width,\n height,\n depthStencilTexture,\n 'depth',\n 'uint32')\n }\n\n if (stencilBuffer) {\n stencilAttachment = parseAttachment(stencilBuffer)\n } else if (needsStencil && !needsDepth) {\n stencilAttachment = allocAttachment(\n width,\n height,\n false,\n 'stencil',\n 'uint8')\n }\n\n if (depthStencilBuffer) {\n depthStencilAttachment = parseAttachment(depthStencilBuffer)\n } else if (!depthBuffer && !stencilBuffer && needsStencil && needsDepth) {\n depthStencilAttachment = allocAttachment(\n width,\n height,\n depthStencilTexture,\n 'depth stencil',\n 'depth stencil')\n }\n\n check$1(\n (!!depthBuffer) + (!!stencilBuffer) + (!!depthStencilBuffer) <= 1,\n 'invalid framebuffer configuration, can specify exactly one depth/stencil attachment')\n\n var commonColorAttachmentSize = null\n\n for (i = 0; i < colorAttachments.length; ++i) {\n incRefAndCheckShape(colorAttachments[i], width, height)\n check$1(!colorAttachments[i] ||\n (colorAttachments[i].texture &&\n colorTextureFormatEnums.indexOf(colorAttachments[i].texture._texture.format) >= 0) ||\n (colorAttachments[i].renderbuffer &&\n colorRenderbufferFormatEnums.indexOf(colorAttachments[i].renderbuffer._renderbuffer.format) >= 0),\n 'framebuffer color attachment ' + i + ' is invalid')\n\n if (colorAttachments[i] && colorAttachments[i].texture) {\n var colorAttachmentSize =\n textureFormatChannels[colorAttachments[i].texture._texture.format] *\n textureTypeSizes[colorAttachments[i].texture._texture.type]\n\n if (commonColorAttachmentSize === null) {\n commonColorAttachmentSize = colorAttachmentSize\n } else {\n // We need to make sure that all color attachments have the same number of bitplanes\n // (that is, the same numer of bits per pixel)\n // This is required by the GLES2.0 standard. See the beginning of Chapter 4 in that document.\n check$1(commonColorAttachmentSize === colorAttachmentSize,\n 'all color attachments much have the same number of bits per pixel.')\n }\n }\n }\n incRefAndCheckShape(depthAttachment, width, height)\n check$1(!depthAttachment ||\n (depthAttachment.texture &&\n depthAttachment.texture._texture.format === GL_DEPTH_COMPONENT$1) ||\n (depthAttachment.renderbuffer &&\n depthAttachment.renderbuffer._renderbuffer.format === GL_DEPTH_COMPONENT16$1),\n 'invalid depth attachment for framebuffer object')\n incRefAndCheckShape(stencilAttachment, width, height)\n check$1(!stencilAttachment ||\n (stencilAttachment.renderbuffer &&\n stencilAttachment.renderbuffer._renderbuffer.format === GL_STENCIL_INDEX8$1),\n 'invalid stencil attachment for framebuffer object')\n incRefAndCheckShape(depthStencilAttachment, width, height)\n check$1(!depthStencilAttachment ||\n (depthStencilAttachment.texture &&\n depthStencilAttachment.texture._texture.format === GL_DEPTH_STENCIL$2) ||\n (depthStencilAttachment.renderbuffer &&\n depthStencilAttachment.renderbuffer._renderbuffer.format === GL_DEPTH_STENCIL$2),\n 'invalid depth-stencil attachment for framebuffer object')\n\n // decrement references\n decFBORefs(framebuffer)\n\n framebuffer.width = width\n framebuffer.height = height\n\n framebuffer.colorAttachments = colorAttachments\n framebuffer.depthAttachment = depthAttachment\n framebuffer.stencilAttachment = stencilAttachment\n framebuffer.depthStencilAttachment = depthStencilAttachment\n\n reglFramebuffer.color = colorAttachments.map(unwrapAttachment)\n reglFramebuffer.depth = unwrapAttachment(depthAttachment)\n reglFramebuffer.stencil = unwrapAttachment(stencilAttachment)\n reglFramebuffer.depthStencil = unwrapAttachment(depthStencilAttachment)\n\n reglFramebuffer.width = framebuffer.width\n reglFramebuffer.height = framebuffer.height\n\n updateFramebuffer(framebuffer)\n\n return reglFramebuffer\n }\n\n function resize (w_, h_) {\n check$1(framebufferState.next !== framebuffer,\n 'can not resize a framebuffer which is currently in use')\n\n var w = Math.max(w_ | 0, 1)\n var h = Math.max((h_ | 0) || w, 1)\n if (w === framebuffer.width && h === framebuffer.height) {\n return reglFramebuffer\n }\n\n // resize all buffers\n var colorAttachments = framebuffer.colorAttachments\n for (var i = 0; i < colorAttachments.length; ++i) {\n resizeAttachment(colorAttachments[i], w, h)\n }\n resizeAttachment(framebuffer.depthAttachment, w, h)\n resizeAttachment(framebuffer.stencilAttachment, w, h)\n resizeAttachment(framebuffer.depthStencilAttachment, w, h)\n\n framebuffer.width = reglFramebuffer.width = w\n framebuffer.height = reglFramebuffer.height = h\n\n updateFramebuffer(framebuffer)\n\n return reglFramebuffer\n }\n\n reglFramebuffer(a0, a1)\n\n return extend(reglFramebuffer, {\n resize: resize,\n _reglType: 'framebuffer',\n _framebuffer: framebuffer,\n destroy: function () {\n destroy(framebuffer)\n decFBORefs(framebuffer)\n },\n use: function (block) {\n framebufferState.setFBO({\n framebuffer: reglFramebuffer\n }, block)\n }\n })\n }\n\n function createCubeFBO (options) {\n var faces = Array(6)\n\n function reglFramebufferCube (a) {\n var i\n\n check$1(faces.indexOf(framebufferState.next) < 0,\n 'can not update framebuffer which is currently in use')\n\n var params = {\n color: null\n }\n\n var radius = 0\n\n var colorBuffer = null\n var colorFormat = 'rgba'\n var colorType = 'uint8'\n var colorCount = 1\n\n if (typeof a === 'number') {\n radius = a | 0\n } else if (!a) {\n radius = 1\n } else {\n check$1.type(a, 'object', 'invalid arguments for framebuffer')\n var options = a\n\n if ('shape' in options) {\n var shape = options.shape\n check$1(\n Array.isArray(shape) && shape.length >= 2,\n 'invalid shape for framebuffer')\n check$1(\n shape[0] === shape[1],\n 'cube framebuffer must be square')\n radius = shape[0]\n } else {\n if ('radius' in options) {\n radius = options.radius | 0\n }\n if ('width' in options) {\n radius = options.width | 0\n if ('height' in options) {\n check$1(options.height === radius, 'must be square')\n }\n } else if ('height' in options) {\n radius = options.height | 0\n }\n }\n\n if ('color' in options ||\n 'colors' in options) {\n colorBuffer =\n options.color ||\n options.colors\n if (Array.isArray(colorBuffer)) {\n check$1(\n colorBuffer.length === 1 || extensions.webgl_draw_buffers,\n 'multiple render targets not supported')\n }\n }\n\n if (!colorBuffer) {\n if ('colorCount' in options) {\n colorCount = options.colorCount | 0\n check$1(colorCount > 0, 'invalid color buffer count')\n }\n\n if ('colorType' in options) {\n check$1.oneOf(\n options.colorType, colorTypes,\n 'invalid color type')\n colorType = options.colorType\n }\n\n if ('colorFormat' in options) {\n colorFormat = options.colorFormat\n check$1.oneOf(\n options.colorFormat, colorTextureFormats,\n 'invalid color format for texture')\n }\n }\n\n if ('depth' in options) {\n params.depth = options.depth\n }\n\n if ('stencil' in options) {\n params.stencil = options.stencil\n }\n\n if ('depthStencil' in options) {\n params.depthStencil = options.depthStencil\n }\n }\n\n var colorCubes\n if (colorBuffer) {\n if (Array.isArray(colorBuffer)) {\n colorCubes = []\n for (i = 0; i < colorBuffer.length; ++i) {\n colorCubes[i] = colorBuffer[i]\n }\n } else {\n colorCubes = [ colorBuffer ]\n }\n } else {\n colorCubes = Array(colorCount)\n var cubeMapParams = {\n radius: radius,\n format: colorFormat,\n type: colorType\n }\n for (i = 0; i < colorCount; ++i) {\n colorCubes[i] = textureState.createCube(cubeMapParams)\n }\n }\n\n // Check color cubes\n params.color = Array(colorCubes.length)\n for (i = 0; i < colorCubes.length; ++i) {\n var cube = colorCubes[i]\n check$1(\n typeof cube === 'function' && cube._reglType === 'textureCube',\n 'invalid cube map')\n radius = radius || cube.width\n check$1(\n cube.width === radius && cube.height === radius,\n 'invalid cube map shape')\n params.color[i] = {\n target: GL_TEXTURE_CUBE_MAP_POSITIVE_X$2,\n data: colorCubes[i]\n }\n }\n\n for (i = 0; i < 6; ++i) {\n for (var j = 0; j < colorCubes.length; ++j) {\n params.color[j].target = GL_TEXTURE_CUBE_MAP_POSITIVE_X$2 + i\n }\n // reuse depth-stencil attachments across all cube maps\n if (i > 0) {\n params.depth = faces[0].depth\n params.stencil = faces[0].stencil\n params.depthStencil = faces[0].depthStencil\n }\n if (faces[i]) {\n (faces[i])(params)\n } else {\n faces[i] = createFBO(params)\n }\n }\n\n return extend(reglFramebufferCube, {\n width: radius,\n height: radius,\n color: colorCubes\n })\n }\n\n function resize (radius_) {\n var i\n var radius = radius_ | 0\n check$1(radius > 0 && radius <= limits.maxCubeMapSize,\n 'invalid radius for cube fbo')\n\n if (radius === reglFramebufferCube.width) {\n return reglFramebufferCube\n }\n\n var colors = reglFramebufferCube.color\n for (i = 0; i < colors.length; ++i) {\n colors[i].resize(radius)\n }\n\n for (i = 0; i < 6; ++i) {\n faces[i].resize(radius)\n }\n\n reglFramebufferCube.width = reglFramebufferCube.height = radius\n\n return reglFramebufferCube\n }\n\n reglFramebufferCube(options)\n\n return extend(reglFramebufferCube, {\n faces: faces,\n resize: resize,\n _reglType: 'framebufferCube',\n destroy: function () {\n faces.forEach(function (f) {\n f.destroy()\n })\n }\n })\n }\n\n function restoreFramebuffers () {\n framebufferState.cur = null\n framebufferState.next = null\n framebufferState.dirty = true\n values(framebufferSet).forEach(function (fb) {\n fb.framebuffer = gl.createFramebuffer()\n updateFramebuffer(fb)\n })\n }\n\n return extend(framebufferState, {\n getFramebuffer: function (object) {\n if (typeof object === 'function' && object._reglType === 'framebuffer') {\n var fbo = object._framebuffer\n if (fbo instanceof REGLFramebuffer) {\n return fbo\n }\n }\n return null\n },\n create: createFBO,\n createCube: createCubeFBO,\n clear: function () {\n values(framebufferSet).forEach(destroy)\n },\n restore: restoreFramebuffers\n })\n}\n\nvar GL_FLOAT$6 = 5126\nvar GL_ARRAY_BUFFER$1 = 34962\n\nfunction AttributeRecord () {\n this.state = 0\n\n this.x = 0.0\n this.y = 0.0\n this.z = 0.0\n this.w = 0.0\n\n this.buffer = null\n this.size = 0\n this.normalized = false\n this.type = GL_FLOAT$6\n this.offset = 0\n this.stride = 0\n this.divisor = 0\n}\n\nfunction wrapAttributeState (\n gl,\n extensions,\n limits,\n stats,\n bufferState) {\n var NUM_ATTRIBUTES = limits.maxAttributes\n var attributeBindings = new Array(NUM_ATTRIBUTES)\n for (var i = 0; i < NUM_ATTRIBUTES; ++i) {\n attributeBindings[i] = new AttributeRecord()\n }\n var vaoCount = 0\n var vaoSet = {}\n\n var state = {\n Record: AttributeRecord,\n scope: {},\n state: attributeBindings,\n currentVAO: null,\n targetVAO: null,\n restore: extVAO() ? restoreVAO : function () {},\n createVAO: createVAO,\n getVAO: getVAO,\n destroyBuffer: destroyBuffer,\n setVAO: extVAO() ? setVAOEXT : setVAOEmulated,\n clear: extVAO() ? destroyVAOEXT : function () {}\n }\n\n function destroyBuffer (buffer) {\n for (var i = 0; i < attributeBindings.length; ++i) {\n var record = attributeBindings[i]\n if (record.buffer === buffer) {\n gl.disableVertexAttribArray(i)\n record.buffer = null\n }\n }\n }\n\n function extVAO () {\n return extensions.oes_vertex_array_object\n }\n\n function extInstanced () {\n return extensions.angle_instanced_arrays\n }\n\n function getVAO (vao) {\n if (typeof vao === 'function' && vao._vao) {\n return vao._vao\n }\n return null\n }\n\n function setVAOEXT (vao) {\n if (vao === state.currentVAO) {\n return\n }\n var ext = extVAO()\n if (vao) {\n ext.bindVertexArrayOES(vao.vao)\n } else {\n ext.bindVertexArrayOES(null)\n }\n state.currentVAO = vao\n }\n\n function setVAOEmulated (vao) {\n if (vao === state.currentVAO) {\n return\n }\n if (vao) {\n vao.bindAttrs()\n } else {\n var exti = extInstanced()\n for (var i = 0; i < attributeBindings.length; ++i) {\n var binding = attributeBindings[i]\n if (binding.buffer) {\n gl.enableVertexAttribArray(i)\n gl.vertexAttribPointer(i, binding.size, binding.type, binding.normalized, binding.stride, binding.offfset)\n if (exti) {\n exti.vertexAttribDivisorANGLE(i, binding.divisor)\n }\n } else {\n gl.disableVertexAttribArray(i)\n gl.vertexAttrib4f(i, binding.x, binding.y, binding.z, binding.w)\n }\n }\n }\n state.currentVAO = vao\n }\n\n function destroyVAOEXT () {\n values(vaoSet).forEach(function (vao) {\n vao.destroy()\n })\n }\n\n function REGLVAO () {\n this.id = ++vaoCount\n this.attributes = []\n var extension = extVAO()\n if (extension) {\n this.vao = extension.createVertexArrayOES()\n } else {\n this.vao = null\n }\n vaoSet[this.id] = this\n this.buffers = []\n }\n\n REGLVAO.prototype.bindAttrs = function () {\n var exti = extInstanced()\n var attributes = this.attributes\n for (var i = 0; i < attributes.length; ++i) {\n var attr = attributes[i]\n if (attr.buffer) {\n gl.enableVertexAttribArray(i)\n gl.bindBuffer(GL_ARRAY_BUFFER$1, attr.buffer.buffer)\n gl.vertexAttribPointer(i, attr.size, attr.type, attr.normalized, attr.stride, attr.offset)\n if (exti) {\n exti.vertexAttribDivisorANGLE(i, attr.divisor)\n }\n } else {\n gl.disableVertexAttribArray(i)\n gl.vertexAttrib4f(i, attr.x, attr.y, attr.z, attr.w)\n }\n }\n for (var j = attributes.length; j < NUM_ATTRIBUTES; ++j) {\n gl.disableVertexAttribArray(j)\n }\n }\n\n REGLVAO.prototype.refresh = function () {\n var ext = extVAO()\n if (ext) {\n ext.bindVertexArrayOES(this.vao)\n this.bindAttrs()\n state.currentVAO = this\n }\n }\n\n REGLVAO.prototype.destroy = function () {\n if (this.vao) {\n var extension = extVAO()\n if (this === state.currentVAO) {\n state.currentVAO = null\n extension.bindVertexArrayOES(null)\n }\n extension.deleteVertexArrayOES(this.vao)\n this.vao = null\n }\n if (vaoSet[this.id]) {\n delete vaoSet[this.id]\n stats.vaoCount -= 1\n }\n }\n\n function restoreVAO () {\n var ext = extVAO()\n if (ext) {\n values(vaoSet).forEach(function (vao) {\n vao.refresh()\n })\n }\n }\n\n function createVAO (_attr) {\n var vao = new REGLVAO()\n stats.vaoCount += 1\n\n function updateVAO (attributes) {\n check$1(Array.isArray(attributes), 'arguments to vertex array constructor must be an array')\n check$1(attributes.length < NUM_ATTRIBUTES, 'too many attributes')\n check$1(attributes.length > 0, 'must specify at least one attribute')\n\n for (var j = 0; j < vao.buffers.length; ++j) {\n vao.buffers[j].destroy()\n }\n vao.buffers.length = 0\n\n var nattributes = vao.attributes\n nattributes.length = attributes.length\n for (var i = 0; i < attributes.length; ++i) {\n var spec = attributes[i]\n var rec = nattributes[i] = new AttributeRecord()\n if (Array.isArray(spec) || isTypedArray(spec) || isNDArrayLike(spec)) {\n var buf = bufferState.create(spec, GL_ARRAY_BUFFER$1, false, true)\n rec.buffer = bufferState.getBuffer(buf)\n rec.size = rec.buffer.dimension | 0\n rec.normalized = false\n rec.type = rec.buffer.dtype\n rec.offset = 0\n rec.stride = 0\n rec.divisor = 0\n rec.state = 1\n vao.buffers.push(buf)\n } else if (bufferState.getBuffer(spec)) {\n rec.buffer = bufferState.getBuffer(spec)\n rec.size = rec.buffer.dimension | 0\n rec.normalized = false\n rec.type = rec.buffer.dtype\n rec.offset = 0\n rec.stride = 0\n rec.divisor = 0\n rec.state = 1\n } else if (bufferState.getBuffer(spec.buffer)) {\n rec.buffer = bufferState.getBuffer(spec.buffer)\n rec.size = ((+spec.size) || rec.buffer.dimension) | 0\n rec.normalized = !!spec.normalized || false\n if ('type' in spec) {\n check$1.parameter(spec.type, glTypes, 'invalid buffer type')\n rec.type = glTypes[spec.type]\n } else {\n rec.type = rec.buffer.dtype\n }\n rec.offset = (spec.offset || 0) | 0\n rec.stride = (spec.stride || 0) | 0\n rec.divisor = (spec.divisor || 0) | 0\n rec.state = 1\n\n check$1(rec.size >= 1 && rec.size <= 4, 'size must be between 1 and 4')\n check$1(rec.offset >= 0, 'invalid offset')\n check$1(rec.stride >= 0 && rec.stride <= 255, 'stride must be between 0 and 255')\n check$1(rec.divisor >= 0, 'divisor must be positive')\n check$1(!rec.divisor || !!extensions.angle_instanced_arrays, 'ANGLE_instanced_arrays must be enabled to use divisor')\n } else if ('x' in spec) {\n check$1(i > 0, 'first attribute must not be a constant')\n rec.x = +spec.x || 0\n rec.y = +spec.y || 0\n rec.z = +spec.z || 0\n rec.w = +spec.w || 0\n rec.state = 2\n } else {\n check$1(false, 'invalid attribute spec for location ' + i)\n }\n }\n\n vao.refresh()\n return updateVAO\n }\n\n updateVAO.destroy = function () {\n vao.destroy()\n }\n\n updateVAO._vao = vao\n updateVAO._reglType = 'vao'\n\n return updateVAO(_attr)\n }\n\n return state\n}\n\nvar GL_FRAGMENT_SHADER = 35632\nvar GL_VERTEX_SHADER = 35633\n\nvar GL_ACTIVE_UNIFORMS = 0x8B86\nvar GL_ACTIVE_ATTRIBUTES = 0x8B89\n\nfunction wrapShaderState (gl, stringStore, stats, config) {\n // ===================================================\n // glsl compilation and linking\n // ===================================================\n var fragShaders = {}\n var vertShaders = {}\n\n function ActiveInfo (name, id, location, info) {\n this.name = name\n this.id = id\n this.location = location\n this.info = info\n }\n\n function insertActiveInfo (list, info) {\n for (var i = 0; i < list.length; ++i) {\n if (list[i].id === info.id) {\n list[i].location = info.location\n return\n }\n }\n list.push(info)\n }\n\n function getShader (type, id, command) {\n var cache = type === GL_FRAGMENT_SHADER ? fragShaders : vertShaders\n var shader = cache[id]\n\n if (!shader) {\n var source = stringStore.str(id)\n shader = gl.createShader(type)\n gl.shaderSource(shader, source)\n gl.compileShader(shader)\n check$1.shaderError(gl, shader, source, type, command)\n cache[id] = shader\n }\n\n return shader\n }\n\n // ===================================================\n // program linking\n // ===================================================\n var programCache = {}\n var programList = []\n\n var PROGRAM_COUNTER = 0\n\n function REGLProgram (fragId, vertId) {\n this.id = PROGRAM_COUNTER++\n this.fragId = fragId\n this.vertId = vertId\n this.program = null\n this.uniforms = []\n this.attributes = []\n\n if (config.profile) {\n this.stats = {\n uniformsCount: 0,\n attributesCount: 0\n }\n }\n }\n\n function linkProgram (desc, command, attributeLocations) {\n var i, info\n\n // -------------------------------\n // compile & link\n // -------------------------------\n var fragShader = getShader(GL_FRAGMENT_SHADER, desc.fragId)\n var vertShader = getShader(GL_VERTEX_SHADER, desc.vertId)\n\n var program = desc.program = gl.createProgram()\n gl.attachShader(program, fragShader)\n gl.attachShader(program, vertShader)\n if (attributeLocations) {\n for (i = 0; i < attributeLocations.length; ++i) {\n var binding = attributeLocations[i]\n gl.bindAttribLocation(program, binding[0], binding[1])\n }\n }\n\n gl.linkProgram(program)\n check$1.linkError(\n gl,\n program,\n stringStore.str(desc.fragId),\n stringStore.str(desc.vertId),\n command)\n\n // -------------------------------\n // grab uniforms\n // -------------------------------\n var numUniforms = gl.getProgramParameter(program, GL_ACTIVE_UNIFORMS)\n if (config.profile) {\n desc.stats.uniformsCount = numUniforms\n }\n var uniforms = desc.uniforms\n for (i = 0; i < numUniforms; ++i) {\n info = gl.getActiveUniform(program, i)\n if (info) {\n if (info.size > 1) {\n for (var j = 0; j < info.size; ++j) {\n var name = info.name.replace('[0]', '[' + j + ']')\n insertActiveInfo(uniforms, new ActiveInfo(\n name,\n stringStore.id(name),\n gl.getUniformLocation(program, name),\n info))\n }\n } else {\n insertActiveInfo(uniforms, new ActiveInfo(\n info.name,\n stringStore.id(info.name),\n gl.getUniformLocation(program, info.name),\n info))\n }\n }\n }\n\n // -------------------------------\n // grab attributes\n // -------------------------------\n var numAttributes = gl.getProgramParameter(program, GL_ACTIVE_ATTRIBUTES)\n if (config.profile) {\n desc.stats.attributesCount = numAttributes\n }\n\n var attributes = desc.attributes\n for (i = 0; i < numAttributes; ++i) {\n info = gl.getActiveAttrib(program, i)\n if (info) {\n insertActiveInfo(attributes, new ActiveInfo(\n info.name,\n stringStore.id(info.name),\n gl.getAttribLocation(program, info.name),\n info))\n }\n }\n }\n\n if (config.profile) {\n stats.getMaxUniformsCount = function () {\n var m = 0\n programList.forEach(function (desc) {\n if (desc.stats.uniformsCount > m) {\n m = desc.stats.uniformsCount\n }\n })\n return m\n }\n\n stats.getMaxAttributesCount = function () {\n var m = 0\n programList.forEach(function (desc) {\n if (desc.stats.attributesCount > m) {\n m = desc.stats.attributesCount\n }\n })\n return m\n }\n }\n\n function restoreShaders () {\n fragShaders = {}\n vertShaders = {}\n for (var i = 0; i < programList.length; ++i) {\n linkProgram(programList[i], null, programList[i].attributes.map(function (info) {\n return [info.location, info.name]\n }))\n }\n }\n\n return {\n clear: function () {\n var deleteShader = gl.deleteShader.bind(gl)\n values(fragShaders).forEach(deleteShader)\n fragShaders = {}\n values(vertShaders).forEach(deleteShader)\n vertShaders = {}\n\n programList.forEach(function (desc) {\n gl.deleteProgram(desc.program)\n })\n programList.length = 0\n programCache = {}\n\n stats.shaderCount = 0\n },\n\n program: function (vertId, fragId, command, attribLocations) {\n check$1.command(vertId >= 0, 'missing vertex shader', command)\n check$1.command(fragId >= 0, 'missing fragment shader', command)\n\n var cache = programCache[fragId]\n if (!cache) {\n cache = programCache[fragId] = {}\n }\n var prevProgram = cache[vertId]\n if (prevProgram && !attribLocations) {\n return prevProgram\n }\n var program = new REGLProgram(fragId, vertId)\n stats.shaderCount++\n linkProgram(program, command, attribLocations)\n if (!prevProgram) {\n cache[vertId] = program\n }\n programList.push(program)\n return program\n },\n\n restore: restoreShaders,\n\n shader: getShader,\n\n frag: -1,\n vert: -1\n }\n}\n\nvar GL_RGBA$3 = 6408\nvar GL_UNSIGNED_BYTE$7 = 5121\nvar GL_PACK_ALIGNMENT = 0x0D05\nvar GL_FLOAT$7 = 0x1406 // 5126\n\nfunction wrapReadPixels (\n gl,\n framebufferState,\n reglPoll,\n context,\n glAttributes,\n extensions,\n limits) {\n function readPixelsImpl (input) {\n var type\n if (framebufferState.next === null) {\n check$1(\n glAttributes.preserveDrawingBuffer,\n 'you must create a webgl context with \"preserveDrawingBuffer\":true in order to read pixels from the drawing buffer')\n type = GL_UNSIGNED_BYTE$7\n } else {\n check$1(\n framebufferState.next.colorAttachments[0].texture !== null,\n 'You cannot read from a renderbuffer')\n type = framebufferState.next.colorAttachments[0].texture._texture.type\n\n if (extensions.oes_texture_float) {\n check$1(\n type === GL_UNSIGNED_BYTE$7 || type === GL_FLOAT$7,\n 'Reading from a framebuffer is only allowed for the types \\'uint8\\' and \\'float\\'')\n\n if (type === GL_FLOAT$7) {\n check$1(limits.readFloat, 'Reading \\'float\\' values is not permitted in your browser. For a fallback, please see: https://www.npmjs.com/package/glsl-read-float')\n }\n } else {\n check$1(\n type === GL_UNSIGNED_BYTE$7,\n 'Reading from a framebuffer is only allowed for the type \\'uint8\\'')\n }\n }\n\n var x = 0\n var y = 0\n var width = context.framebufferWidth\n var height = context.framebufferHeight\n var data = null\n\n if (isTypedArray(input)) {\n data = input\n } else if (input) {\n check$1.type(input, 'object', 'invalid arguments to regl.read()')\n x = input.x | 0\n y = input.y | 0\n check$1(\n x >= 0 && x < context.framebufferWidth,\n 'invalid x offset for regl.read')\n check$1(\n y >= 0 && y < context.framebufferHeight,\n 'invalid y offset for regl.read')\n width = (input.width || (context.framebufferWidth - x)) | 0\n height = (input.height || (context.framebufferHeight - y)) | 0\n data = input.data || null\n }\n\n // sanity check input.data\n if (data) {\n if (type === GL_UNSIGNED_BYTE$7) {\n check$1(\n data instanceof Uint8Array,\n 'buffer must be \\'Uint8Array\\' when reading from a framebuffer of type \\'uint8\\'')\n } else if (type === GL_FLOAT$7) {\n check$1(\n data instanceof Float32Array,\n 'buffer must be \\'Float32Array\\' when reading from a framebuffer of type \\'float\\'')\n }\n }\n\n check$1(\n width > 0 && width + x <= context.framebufferWidth,\n 'invalid width for read pixels')\n check$1(\n height > 0 && height + y <= context.framebufferHeight,\n 'invalid height for read pixels')\n\n // Update WebGL state\n reglPoll()\n\n // Compute size\n var size = width * height * 4\n\n // Allocate data\n if (!data) {\n if (type === GL_UNSIGNED_BYTE$7) {\n data = new Uint8Array(size)\n } else if (type === GL_FLOAT$7) {\n data = data || new Float32Array(size)\n }\n }\n\n // Type check\n check$1.isTypedArray(data, 'data buffer for regl.read() must be a typedarray')\n check$1(data.byteLength >= size, 'data buffer for regl.read() too small')\n\n // Run read pixels\n gl.pixelStorei(GL_PACK_ALIGNMENT, 4)\n gl.readPixels(x, y, width, height, GL_RGBA$3,\n type,\n data)\n\n return data\n }\n\n function readPixelsFBO (options) {\n var result\n framebufferState.setFBO({\n framebuffer: options.framebuffer\n }, function () {\n result = readPixelsImpl(options)\n })\n return result\n }\n\n function readPixels (options) {\n if (!options || !('framebuffer' in options)) {\n return readPixelsImpl(options)\n } else {\n return readPixelsFBO(options)\n }\n }\n\n return readPixels\n}\n\nfunction slice (x) {\n return Array.prototype.slice.call(x)\n}\n\nfunction join (x) {\n return slice(x).join('')\n}\n\nfunction createEnvironment () {\n // Unique variable id counter\n var varCounter = 0\n\n // Linked values are passed from this scope into the generated code block\n // Calling link() passes a value into the generated scope and returns\n // the variable name which it is bound to\n var linkedNames = []\n var linkedValues = []\n function link (value) {\n for (var i = 0; i < linkedValues.length; ++i) {\n if (linkedValues[i] === value) {\n return linkedNames[i]\n }\n }\n\n var name = 'g' + (varCounter++)\n linkedNames.push(name)\n linkedValues.push(value)\n return name\n }\n\n // create a code block\n function block () {\n var code = []\n function push () {\n code.push.apply(code, slice(arguments))\n }\n\n var vars = []\n function def () {\n var name = 'v' + (varCounter++)\n vars.push(name)\n\n if (arguments.length > 0) {\n code.push(name, '=')\n code.push.apply(code, slice(arguments))\n code.push(';')\n }\n\n return name\n }\n\n return extend(push, {\n def: def,\n toString: function () {\n return join([\n (vars.length > 0 ? 'var ' + vars.join(',') + ';' : ''),\n join(code)\n ])\n }\n })\n }\n\n function scope () {\n var entry = block()\n var exit = block()\n\n var entryToString = entry.toString\n var exitToString = exit.toString\n\n function save (object, prop) {\n exit(object, prop, '=', entry.def(object, prop), ';')\n }\n\n return extend(function () {\n entry.apply(entry, slice(arguments))\n }, {\n def: entry.def,\n entry: entry,\n exit: exit,\n save: save,\n set: function (object, prop, value) {\n save(object, prop)\n entry(object, prop, '=', value, ';')\n },\n toString: function () {\n return entryToString() + exitToString()\n }\n })\n }\n\n function conditional () {\n var pred = join(arguments)\n var thenBlock = scope()\n var elseBlock = scope()\n\n var thenToString = thenBlock.toString\n var elseToString = elseBlock.toString\n\n return extend(thenBlock, {\n then: function () {\n thenBlock.apply(thenBlock, slice(arguments))\n return this\n },\n else: function () {\n elseBlock.apply(elseBlock, slice(arguments))\n return this\n },\n toString: function () {\n var elseClause = elseToString()\n if (elseClause) {\n elseClause = 'else{' + elseClause + '}'\n }\n return join([\n 'if(', pred, '){',\n thenToString(),\n '}', elseClause\n ])\n }\n })\n }\n\n // procedure list\n var globalBlock = block()\n var procedures = {}\n function proc (name, count) {\n var args = []\n function arg () {\n var name = 'a' + args.length\n args.push(name)\n return name\n }\n\n count = count || 0\n for (var i = 0; i < count; ++i) {\n arg()\n }\n\n var body = scope()\n var bodyToString = body.toString\n\n var result = procedures[name] = extend(body, {\n arg: arg,\n toString: function () {\n return join([\n 'function(', args.join(), '){',\n bodyToString(),\n '}'\n ])\n }\n })\n\n return result\n }\n\n function compile () {\n var code = ['\"use strict\";',\n globalBlock,\n 'return {']\n Object.keys(procedures).forEach(function (name) {\n code.push('\"', name, '\":', procedures[name].toString(), ',')\n })\n code.push('}')\n var src = join(code)\n .replace(/;/g, ';\\n')\n .replace(/}/g, '}\\n')\n .replace(/{/g, '{\\n')\n var proc = Function.apply(null, linkedNames.concat(src))\n return proc.apply(null, linkedValues)\n }\n\n return {\n global: globalBlock,\n link: link,\n block: block,\n proc: proc,\n scope: scope,\n cond: conditional,\n compile: compile\n }\n}\n\n// \"cute\" names for vector components\nvar CUTE_COMPONENTS = 'xyzw'.split('')\n\nvar GL_UNSIGNED_BYTE$8 = 5121\n\nvar ATTRIB_STATE_POINTER = 1\nvar ATTRIB_STATE_CONSTANT = 2\n\nvar DYN_FUNC$1 = 0\nvar DYN_PROP$1 = 1\nvar DYN_CONTEXT$1 = 2\nvar DYN_STATE$1 = 3\nvar DYN_THUNK = 4\n\nvar S_DITHER = 'dither'\nvar S_BLEND_ENABLE = 'blend.enable'\nvar S_BLEND_COLOR = 'blend.color'\nvar S_BLEND_EQUATION = 'blend.equation'\nvar S_BLEND_FUNC = 'blend.func'\nvar S_DEPTH_ENABLE = 'depth.enable'\nvar S_DEPTH_FUNC = 'depth.func'\nvar S_DEPTH_RANGE = 'depth.range'\nvar S_DEPTH_MASK = 'depth.mask'\nvar S_COLOR_MASK = 'colorMask'\nvar S_CULL_ENABLE = 'cull.enable'\nvar S_CULL_FACE = 'cull.face'\nvar S_FRONT_FACE = 'frontFace'\nvar S_LINE_WIDTH = 'lineWidth'\nvar S_POLYGON_OFFSET_ENABLE = 'polygonOffset.enable'\nvar S_POLYGON_OFFSET_OFFSET = 'polygonOffset.offset'\nvar S_SAMPLE_ALPHA = 'sample.alpha'\nvar S_SAMPLE_ENABLE = 'sample.enable'\nvar S_SAMPLE_COVERAGE = 'sample.coverage'\nvar S_STENCIL_ENABLE = 'stencil.enable'\nvar S_STENCIL_MASK = 'stencil.mask'\nvar S_STENCIL_FUNC = 'stencil.func'\nvar S_STENCIL_OPFRONT = 'stencil.opFront'\nvar S_STENCIL_OPBACK = 'stencil.opBack'\nvar S_SCISSOR_ENABLE = 'scissor.enable'\nvar S_SCISSOR_BOX = 'scissor.box'\nvar S_VIEWPORT = 'viewport'\n\nvar S_PROFILE = 'profile'\n\nvar S_FRAMEBUFFER = 'framebuffer'\nvar S_VERT = 'vert'\nvar S_FRAG = 'frag'\nvar S_ELEMENTS = 'elements'\nvar S_PRIMITIVE = 'primitive'\nvar S_COUNT = 'count'\nvar S_OFFSET = 'offset'\nvar S_INSTANCES = 'instances'\nvar S_VAO = 'vao'\n\nvar SUFFIX_WIDTH = 'Width'\nvar SUFFIX_HEIGHT = 'Height'\n\nvar S_FRAMEBUFFER_WIDTH = S_FRAMEBUFFER + SUFFIX_WIDTH\nvar S_FRAMEBUFFER_HEIGHT = S_FRAMEBUFFER + SUFFIX_HEIGHT\nvar S_VIEWPORT_WIDTH = S_VIEWPORT + SUFFIX_WIDTH\nvar S_VIEWPORT_HEIGHT = S_VIEWPORT + SUFFIX_HEIGHT\nvar S_DRAWINGBUFFER = 'drawingBuffer'\nvar S_DRAWINGBUFFER_WIDTH = S_DRAWINGBUFFER + SUFFIX_WIDTH\nvar S_DRAWINGBUFFER_HEIGHT = S_DRAWINGBUFFER + SUFFIX_HEIGHT\n\nvar NESTED_OPTIONS = [\n S_BLEND_FUNC,\n S_BLEND_EQUATION,\n S_STENCIL_FUNC,\n S_STENCIL_OPFRONT,\n S_STENCIL_OPBACK,\n S_SAMPLE_COVERAGE,\n S_VIEWPORT,\n S_SCISSOR_BOX,\n S_POLYGON_OFFSET_OFFSET\n]\n\nvar GL_ARRAY_BUFFER$2 = 34962\nvar GL_ELEMENT_ARRAY_BUFFER$1 = 34963\n\nvar GL_FRAGMENT_SHADER$1 = 35632\nvar GL_VERTEX_SHADER$1 = 35633\n\nvar GL_TEXTURE_2D$3 = 0x0DE1\nvar GL_TEXTURE_CUBE_MAP$2 = 0x8513\n\nvar GL_CULL_FACE = 0x0B44\nvar GL_BLEND = 0x0BE2\nvar GL_DITHER = 0x0BD0\nvar GL_STENCIL_TEST = 0x0B90\nvar GL_DEPTH_TEST = 0x0B71\nvar GL_SCISSOR_TEST = 0x0C11\nvar GL_POLYGON_OFFSET_FILL = 0x8037\nvar GL_SAMPLE_ALPHA_TO_COVERAGE = 0x809E\nvar GL_SAMPLE_COVERAGE = 0x80A0\n\nvar GL_FLOAT$8 = 5126\nvar GL_FLOAT_VEC2 = 35664\nvar GL_FLOAT_VEC3 = 35665\nvar GL_FLOAT_VEC4 = 35666\nvar GL_INT$3 = 5124\nvar GL_INT_VEC2 = 35667\nvar GL_INT_VEC3 = 35668\nvar GL_INT_VEC4 = 35669\nvar GL_BOOL = 35670\nvar GL_BOOL_VEC2 = 35671\nvar GL_BOOL_VEC3 = 35672\nvar GL_BOOL_VEC4 = 35673\nvar GL_FLOAT_MAT2 = 35674\nvar GL_FLOAT_MAT3 = 35675\nvar GL_FLOAT_MAT4 = 35676\nvar GL_SAMPLER_2D = 35678\nvar GL_SAMPLER_CUBE = 35680\n\nvar GL_TRIANGLES$1 = 4\n\nvar GL_FRONT = 1028\nvar GL_BACK = 1029\nvar GL_CW = 0x0900\nvar GL_CCW = 0x0901\nvar GL_MIN_EXT = 0x8007\nvar GL_MAX_EXT = 0x8008\nvar GL_ALWAYS = 519\nvar GL_KEEP = 7680\nvar GL_ZERO = 0\nvar GL_ONE = 1\nvar GL_FUNC_ADD = 0x8006\nvar GL_LESS = 513\n\nvar GL_FRAMEBUFFER$2 = 0x8D40\nvar GL_COLOR_ATTACHMENT0$2 = 0x8CE0\n\nvar blendFuncs = {\n '0': 0,\n '1': 1,\n 'zero': 0,\n 'one': 1,\n 'src color': 768,\n 'one minus src color': 769,\n 'src alpha': 770,\n 'one minus src alpha': 771,\n 'dst color': 774,\n 'one minus dst color': 775,\n 'dst alpha': 772,\n 'one minus dst alpha': 773,\n 'constant color': 32769,\n 'one minus constant color': 32770,\n 'constant alpha': 32771,\n 'one minus constant alpha': 32772,\n 'src alpha saturate': 776\n}\n\n// There are invalid values for srcRGB and dstRGB. See:\n// https://www.khronos.org/registry/webgl/specs/1.0/#6.13\n// https://github.com/KhronosGroup/WebGL/blob/0d3201f5f7ec3c0060bc1f04077461541f1987b9/conformance-suites/1.0.3/conformance/misc/webgl-specific.html#L56\nvar invalidBlendCombinations = [\n 'constant color, constant alpha',\n 'one minus constant color, constant alpha',\n 'constant color, one minus constant alpha',\n 'one minus constant color, one minus constant alpha',\n 'constant alpha, constant color',\n 'constant alpha, one minus constant color',\n 'one minus constant alpha, constant color',\n 'one minus constant alpha, one minus constant color'\n]\n\nvar compareFuncs = {\n 'never': 512,\n 'less': 513,\n '<': 513,\n 'equal': 514,\n '=': 514,\n '==': 514,\n '===': 514,\n 'lequal': 515,\n '<=': 515,\n 'greater': 516,\n '>': 516,\n 'notequal': 517,\n '!=': 517,\n '!==': 517,\n 'gequal': 518,\n '>=': 518,\n 'always': 519\n}\n\nvar stencilOps = {\n '0': 0,\n 'zero': 0,\n 'keep': 7680,\n 'replace': 7681,\n 'increment': 7682,\n 'decrement': 7683,\n 'increment wrap': 34055,\n 'decrement wrap': 34056,\n 'invert': 5386\n}\n\nvar shaderType = {\n 'frag': GL_FRAGMENT_SHADER$1,\n 'vert': GL_VERTEX_SHADER$1\n}\n\nvar orientationType = {\n 'cw': GL_CW,\n 'ccw': GL_CCW\n}\n\nfunction isBufferArgs (x) {\n return Array.isArray(x) ||\n isTypedArray(x) ||\n isNDArrayLike(x)\n}\n\n// Make sure viewport is processed first\nfunction sortState (state) {\n return state.sort(function (a, b) {\n if (a === S_VIEWPORT) {\n return -1\n } else if (b === S_VIEWPORT) {\n return 1\n }\n return (a < b) ? -1 : 1\n })\n}\n\nfunction Declaration (thisDep, contextDep, propDep, append) {\n this.thisDep = thisDep\n this.contextDep = contextDep\n this.propDep = propDep\n this.append = append\n}\n\nfunction isStatic (decl) {\n return decl && !(decl.thisDep || decl.contextDep || decl.propDep)\n}\n\nfunction createStaticDecl (append) {\n return new Declaration(false, false, false, append)\n}\n\nfunction createDynamicDecl (dyn, append) {\n var type = dyn.type\n if (type === DYN_FUNC$1) {\n var numArgs = dyn.data.length\n return new Declaration(\n true,\n numArgs >= 1,\n numArgs >= 2,\n append)\n } else if (type === DYN_THUNK) {\n var data = dyn.data\n return new Declaration(\n data.thisDep,\n data.contextDep,\n data.propDep,\n append)\n } else {\n return new Declaration(\n type === DYN_STATE$1,\n type === DYN_CONTEXT$1,\n type === DYN_PROP$1,\n append)\n }\n}\n\nvar SCOPE_DECL = new Declaration(false, false, false, function () {})\n\nfunction reglCore (\n gl,\n stringStore,\n extensions,\n limits,\n bufferState,\n elementState,\n textureState,\n framebufferState,\n uniformState,\n attributeState,\n shaderState,\n drawState,\n contextState,\n timer,\n config) {\n var AttributeRecord = attributeState.Record\n\n var blendEquations = {\n 'add': 32774,\n 'subtract': 32778,\n 'reverse subtract': 32779\n }\n if (extensions.ext_blend_minmax) {\n blendEquations.min = GL_MIN_EXT\n blendEquations.max = GL_MAX_EXT\n }\n\n var extInstancing = extensions.angle_instanced_arrays\n var extDrawBuffers = extensions.webgl_draw_buffers\n\n // ===================================================\n // ===================================================\n // WEBGL STATE\n // ===================================================\n // ===================================================\n var currentState = {\n dirty: true,\n profile: config.profile\n }\n var nextState = {}\n var GL_STATE_NAMES = []\n var GL_FLAGS = {}\n var GL_VARIABLES = {}\n\n function propName (name) {\n return name.replace('.', '_')\n }\n\n function stateFlag (sname, cap, init) {\n var name = propName(sname)\n GL_STATE_NAMES.push(sname)\n nextState[name] = currentState[name] = !!init\n GL_FLAGS[name] = cap\n }\n\n function stateVariable (sname, func, init) {\n var name = propName(sname)\n GL_STATE_NAMES.push(sname)\n if (Array.isArray(init)) {\n currentState[name] = init.slice()\n nextState[name] = init.slice()\n } else {\n currentState[name] = nextState[name] = init\n }\n GL_VARIABLES[name] = func\n }\n\n // Dithering\n stateFlag(S_DITHER, GL_DITHER)\n\n // Blending\n stateFlag(S_BLEND_ENABLE, GL_BLEND)\n stateVariable(S_BLEND_COLOR, 'blendColor', [0, 0, 0, 0])\n stateVariable(S_BLEND_EQUATION, 'blendEquationSeparate',\n [GL_FUNC_ADD, GL_FUNC_ADD])\n stateVariable(S_BLEND_FUNC, 'blendFuncSeparate',\n [GL_ONE, GL_ZERO, GL_ONE, GL_ZERO])\n\n // Depth\n stateFlag(S_DEPTH_ENABLE, GL_DEPTH_TEST, true)\n stateVariable(S_DEPTH_FUNC, 'depthFunc', GL_LESS)\n stateVariable(S_DEPTH_RANGE, 'depthRange', [0, 1])\n stateVariable(S_DEPTH_MASK, 'depthMask', true)\n\n // Color mask\n stateVariable(S_COLOR_MASK, S_COLOR_MASK, [true, true, true, true])\n\n // Face culling\n stateFlag(S_CULL_ENABLE, GL_CULL_FACE)\n stateVariable(S_CULL_FACE, 'cullFace', GL_BACK)\n\n // Front face orientation\n stateVariable(S_FRONT_FACE, S_FRONT_FACE, GL_CCW)\n\n // Line width\n stateVariable(S_LINE_WIDTH, S_LINE_WIDTH, 1)\n\n // Polygon offset\n stateFlag(S_POLYGON_OFFSET_ENABLE, GL_POLYGON_OFFSET_FILL)\n stateVariable(S_POLYGON_OFFSET_OFFSET, 'polygonOffset', [0, 0])\n\n // Sample coverage\n stateFlag(S_SAMPLE_ALPHA, GL_SAMPLE_ALPHA_TO_COVERAGE)\n stateFlag(S_SAMPLE_ENABLE, GL_SAMPLE_COVERAGE)\n stateVariable(S_SAMPLE_COVERAGE, 'sampleCoverage', [1, false])\n\n // Stencil\n stateFlag(S_STENCIL_ENABLE, GL_STENCIL_TEST)\n stateVariable(S_STENCIL_MASK, 'stencilMask', -1)\n stateVariable(S_STENCIL_FUNC, 'stencilFunc', [GL_ALWAYS, 0, -1])\n stateVariable(S_STENCIL_OPFRONT, 'stencilOpSeparate',\n [GL_FRONT, GL_KEEP, GL_KEEP, GL_KEEP])\n stateVariable(S_STENCIL_OPBACK, 'stencilOpSeparate',\n [GL_BACK, GL_KEEP, GL_KEEP, GL_KEEP])\n\n // Scissor\n stateFlag(S_SCISSOR_ENABLE, GL_SCISSOR_TEST)\n stateVariable(S_SCISSOR_BOX, 'scissor',\n [0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight])\n\n // Viewport\n stateVariable(S_VIEWPORT, S_VIEWPORT,\n [0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight])\n\n // ===================================================\n // ===================================================\n // ENVIRONMENT\n // ===================================================\n // ===================================================\n var sharedState = {\n gl: gl,\n context: contextState,\n strings: stringStore,\n next: nextState,\n current: currentState,\n draw: drawState,\n elements: elementState,\n buffer: bufferState,\n shader: shaderState,\n attributes: attributeState.state,\n vao: attributeState,\n uniforms: uniformState,\n framebuffer: framebufferState,\n extensions: extensions,\n\n timer: timer,\n isBufferArgs: isBufferArgs\n }\n\n var sharedConstants = {\n primTypes: primTypes,\n compareFuncs: compareFuncs,\n blendFuncs: blendFuncs,\n blendEquations: blendEquations,\n stencilOps: stencilOps,\n glTypes: glTypes,\n orientationType: orientationType\n }\n\n check$1.optional(function () {\n sharedState.isArrayLike = isArrayLike\n })\n\n if (extDrawBuffers) {\n sharedConstants.backBuffer = [GL_BACK]\n sharedConstants.drawBuffer = loop(limits.maxDrawbuffers, function (i) {\n if (i === 0) {\n return [0]\n }\n return loop(i, function (j) {\n return GL_COLOR_ATTACHMENT0$2 + j\n })\n })\n }\n\n var drawCallCounter = 0\n function createREGLEnvironment () {\n var env = createEnvironment()\n var link = env.link\n var global = env.global\n env.id = drawCallCounter++\n\n env.batchId = '0'\n\n // link shared state\n var SHARED = link(sharedState)\n var shared = env.shared = {\n props: 'a0'\n }\n Object.keys(sharedState).forEach(function (prop) {\n shared[prop] = global.def(SHARED, '.', prop)\n })\n\n // Inject runtime assertion stuff for debug builds\n check$1.optional(function () {\n env.CHECK = link(check$1)\n env.commandStr = check$1.guessCommand()\n env.command = link(env.commandStr)\n env.assert = function (block, pred, message) {\n block(\n 'if(!(', pred, '))',\n this.CHECK, '.commandRaise(', link(message), ',', this.command, ');')\n }\n\n sharedConstants.invalidBlendCombinations = invalidBlendCombinations\n })\n\n // Copy GL state variables over\n var nextVars = env.next = {}\n var currentVars = env.current = {}\n Object.keys(GL_VARIABLES).forEach(function (variable) {\n if (Array.isArray(currentState[variable])) {\n nextVars[variable] = global.def(shared.next, '.', variable)\n currentVars[variable] = global.def(shared.current, '.', variable)\n }\n })\n\n // Initialize shared constants\n var constants = env.constants = {}\n Object.keys(sharedConstants).forEach(function (name) {\n constants[name] = global.def(JSON.stringify(sharedConstants[name]))\n })\n\n // Helper function for calling a block\n env.invoke = function (block, x) {\n switch (x.type) {\n case DYN_FUNC$1:\n var argList = [\n 'this',\n shared.context,\n shared.props,\n env.batchId\n ]\n return block.def(\n link(x.data), '.call(',\n argList.slice(0, Math.max(x.data.length + 1, 4)),\n ')')\n case DYN_PROP$1:\n return block.def(shared.props, x.data)\n case DYN_CONTEXT$1:\n return block.def(shared.context, x.data)\n case DYN_STATE$1:\n return block.def('this', x.data)\n case DYN_THUNK:\n x.data.append(env, block)\n return x.data.ref\n }\n }\n\n env.attribCache = {}\n\n var scopeAttribs = {}\n env.scopeAttrib = function (name) {\n var id = stringStore.id(name)\n if (id in scopeAttribs) {\n return scopeAttribs[id]\n }\n var binding = attributeState.scope[id]\n if (!binding) {\n binding = attributeState.scope[id] = new AttributeRecord()\n }\n var result = scopeAttribs[id] = link(binding)\n return result\n }\n\n return env\n }\n\n // ===================================================\n // ===================================================\n // PARSING\n // ===================================================\n // ===================================================\n function parseProfile (options) {\n var staticOptions = options.static\n var dynamicOptions = options.dynamic\n\n var profileEnable\n if (S_PROFILE in staticOptions) {\n var value = !!staticOptions[S_PROFILE]\n profileEnable = createStaticDecl(function (env, scope) {\n return value\n })\n profileEnable.enable = value\n } else if (S_PROFILE in dynamicOptions) {\n var dyn = dynamicOptions[S_PROFILE]\n profileEnable = createDynamicDecl(dyn, function (env, scope) {\n return env.invoke(scope, dyn)\n })\n }\n\n return profileEnable\n }\n\n function parseFramebuffer (options, env) {\n var staticOptions = options.static\n var dynamicOptions = options.dynamic\n\n if (S_FRAMEBUFFER in staticOptions) {\n var framebuffer = staticOptions[S_FRAMEBUFFER]\n if (framebuffer) {\n framebuffer = framebufferState.getFramebuffer(framebuffer)\n check$1.command(framebuffer, 'invalid framebuffer object')\n return createStaticDecl(function (env, block) {\n var FRAMEBUFFER = env.link(framebuffer)\n var shared = env.shared\n block.set(\n shared.framebuffer,\n '.next',\n FRAMEBUFFER)\n var CONTEXT = shared.context\n block.set(\n CONTEXT,\n '.' + S_FRAMEBUFFER_WIDTH,\n FRAMEBUFFER + '.width')\n block.set(\n CONTEXT,\n '.' + S_FRAMEBUFFER_HEIGHT,\n FRAMEBUFFER + '.height')\n return FRAMEBUFFER\n })\n } else {\n return createStaticDecl(function (env, scope) {\n var shared = env.shared\n scope.set(\n shared.framebuffer,\n '.next',\n 'null')\n var CONTEXT = shared.context\n scope.set(\n CONTEXT,\n '.' + S_FRAMEBUFFER_WIDTH,\n CONTEXT + '.' + S_DRAWINGBUFFER_WIDTH)\n scope.set(\n CONTEXT,\n '.' + S_FRAMEBUFFER_HEIGHT,\n CONTEXT + '.' + S_DRAWINGBUFFER_HEIGHT)\n return 'null'\n })\n }\n } else if (S_FRAMEBUFFER in dynamicOptions) {\n var dyn = dynamicOptions[S_FRAMEBUFFER]\n return createDynamicDecl(dyn, function (env, scope) {\n var FRAMEBUFFER_FUNC = env.invoke(scope, dyn)\n var shared = env.shared\n var FRAMEBUFFER_STATE = shared.framebuffer\n var FRAMEBUFFER = scope.def(\n FRAMEBUFFER_STATE, '.getFramebuffer(', FRAMEBUFFER_FUNC, ')')\n\n check$1.optional(function () {\n env.assert(scope,\n '!' + FRAMEBUFFER_FUNC + '||' + FRAMEBUFFER,\n 'invalid framebuffer object')\n })\n\n scope.set(\n FRAMEBUFFER_STATE,\n '.next',\n FRAMEBUFFER)\n var CONTEXT = shared.context\n scope.set(\n CONTEXT,\n '.' + S_FRAMEBUFFER_WIDTH,\n FRAMEBUFFER + '?' + FRAMEBUFFER + '.width:' +\n CONTEXT + '.' + S_DRAWINGBUFFER_WIDTH)\n scope.set(\n CONTEXT,\n '.' + S_FRAMEBUFFER_HEIGHT,\n FRAMEBUFFER +\n '?' + FRAMEBUFFER + '.height:' +\n CONTEXT + '.' + S_DRAWINGBUFFER_HEIGHT)\n return FRAMEBUFFER\n })\n } else {\n return null\n }\n }\n\n function parseViewportScissor (options, framebuffer, env) {\n var staticOptions = options.static\n var dynamicOptions = options.dynamic\n\n function parseBox (param) {\n if (param in staticOptions) {\n var box = staticOptions[param]\n check$1.commandType(box, 'object', 'invalid ' + param, env.commandStr)\n\n var isStatic = true\n var x = box.x | 0\n var y = box.y | 0\n var w, h\n if ('width' in box) {\n w = box.width | 0\n check$1.command(w >= 0, 'invalid ' + param, env.commandStr)\n } else {\n isStatic = false\n }\n if ('height' in box) {\n h = box.height | 0\n check$1.command(h >= 0, 'invalid ' + param, env.commandStr)\n } else {\n isStatic = false\n }\n\n return new Declaration(\n !isStatic && framebuffer && framebuffer.thisDep,\n !isStatic && framebuffer && framebuffer.contextDep,\n !isStatic && framebuffer && framebuffer.propDep,\n function (env, scope) {\n var CONTEXT = env.shared.context\n var BOX_W = w\n if (!('width' in box)) {\n BOX_W = scope.def(CONTEXT, '.', S_FRAMEBUFFER_WIDTH, '-', x)\n }\n var BOX_H = h\n if (!('height' in box)) {\n BOX_H = scope.def(CONTEXT, '.', S_FRAMEBUFFER_HEIGHT, '-', y)\n }\n return [x, y, BOX_W, BOX_H]\n })\n } else if (param in dynamicOptions) {\n var dynBox = dynamicOptions[param]\n var result = createDynamicDecl(dynBox, function (env, scope) {\n var BOX = env.invoke(scope, dynBox)\n\n check$1.optional(function () {\n env.assert(scope,\n BOX + '&&typeof ' + BOX + '===\"object\"',\n 'invalid ' + param)\n })\n\n var CONTEXT = env.shared.context\n var BOX_X = scope.def(BOX, '.x|0')\n var BOX_Y = scope.def(BOX, '.y|0')\n var BOX_W = scope.def(\n '\"width\" in ', BOX, '?', BOX, '.width|0:',\n '(', CONTEXT, '.', S_FRAMEBUFFER_WIDTH, '-', BOX_X, ')')\n var BOX_H = scope.def(\n '\"height\" in ', BOX, '?', BOX, '.height|0:',\n '(', CONTEXT, '.', S_FRAMEBUFFER_HEIGHT, '-', BOX_Y, ')')\n\n check$1.optional(function () {\n env.assert(scope,\n BOX_W + '>=0&&' +\n BOX_H + '>=0',\n 'invalid ' + param)\n })\n\n return [BOX_X, BOX_Y, BOX_W, BOX_H]\n })\n if (framebuffer) {\n result.thisDep = result.thisDep || framebuffer.thisDep\n result.contextDep = result.contextDep || framebuffer.contextDep\n result.propDep = result.propDep || framebuffer.propDep\n }\n return result\n } else if (framebuffer) {\n return new Declaration(\n framebuffer.thisDep,\n framebuffer.contextDep,\n framebuffer.propDep,\n function (env, scope) {\n var CONTEXT = env.shared.context\n return [\n 0, 0,\n scope.def(CONTEXT, '.', S_FRAMEBUFFER_WIDTH),\n scope.def(CONTEXT, '.', S_FRAMEBUFFER_HEIGHT)]\n })\n } else {\n return null\n }\n }\n\n var viewport = parseBox(S_VIEWPORT)\n\n if (viewport) {\n var prevViewport = viewport\n viewport = new Declaration(\n viewport.thisDep,\n viewport.contextDep,\n viewport.propDep,\n function (env, scope) {\n var VIEWPORT = prevViewport.append(env, scope)\n var CONTEXT = env.shared.context\n scope.set(\n CONTEXT,\n '.' + S_VIEWPORT_WIDTH,\n VIEWPORT[2])\n scope.set(\n CONTEXT,\n '.' + S_VIEWPORT_HEIGHT,\n VIEWPORT[3])\n return VIEWPORT\n })\n }\n\n return {\n viewport: viewport,\n scissor_box: parseBox(S_SCISSOR_BOX)\n }\n }\n\n function parseAttribLocations (options, attributes) {\n var staticOptions = options.static\n var staticProgram =\n typeof staticOptions[S_FRAG] === 'string' &&\n typeof staticOptions[S_VERT] === 'string'\n if (staticProgram) {\n if (Object.keys(attributes.dynamic).length > 0) {\n return null\n }\n var staticAttributes = attributes.static\n var sAttributes = Object.keys(staticAttributes)\n if (sAttributes.length > 0 && typeof staticAttributes[sAttributes[0]] === 'number') {\n var bindings = []\n for (var i = 0; i < sAttributes.length; ++i) {\n check$1(typeof staticAttributes[sAttributes[i]] === 'number', 'must specify all vertex attribute locations when using vaos')\n bindings.push([staticAttributes[sAttributes[i]] | 0, sAttributes[i]])\n }\n return bindings\n }\n }\n return null\n }\n\n function parseProgram (options, env, attribLocations) {\n var staticOptions = options.static\n var dynamicOptions = options.dynamic\n\n function parseShader (name) {\n if (name in staticOptions) {\n var id = stringStore.id(staticOptions[name])\n check$1.optional(function () {\n shaderState.shader(shaderType[name], id, check$1.guessCommand())\n })\n var result = createStaticDecl(function () {\n return id\n })\n result.id = id\n return result\n } else if (name in dynamicOptions) {\n var dyn = dynamicOptions[name]\n return createDynamicDecl(dyn, function (env, scope) {\n var str = env.invoke(scope, dyn)\n var id = scope.def(env.shared.strings, '.id(', str, ')')\n check$1.optional(function () {\n scope(\n env.shared.shader, '.shader(',\n shaderType[name], ',',\n id, ',',\n env.command, ');')\n })\n return id\n })\n }\n return null\n }\n\n var frag = parseShader(S_FRAG)\n var vert = parseShader(S_VERT)\n\n var program = null\n var progVar\n if (isStatic(frag) && isStatic(vert)) {\n program = shaderState.program(vert.id, frag.id, null, attribLocations)\n progVar = createStaticDecl(function (env, scope) {\n return env.link(program)\n })\n } else {\n progVar = new Declaration(\n (frag && frag.thisDep) || (vert && vert.thisDep),\n (frag && frag.contextDep) || (vert && vert.contextDep),\n (frag && frag.propDep) || (vert && vert.propDep),\n function (env, scope) {\n var SHADER_STATE = env.shared.shader\n var fragId\n if (frag) {\n fragId = frag.append(env, scope)\n } else {\n fragId = scope.def(SHADER_STATE, '.', S_FRAG)\n }\n var vertId\n if (vert) {\n vertId = vert.append(env, scope)\n } else {\n vertId = scope.def(SHADER_STATE, '.', S_VERT)\n }\n var progDef = SHADER_STATE + '.program(' + vertId + ',' + fragId\n check$1.optional(function () {\n progDef += ',' + env.command\n })\n return scope.def(progDef + ')')\n })\n }\n\n return {\n frag: frag,\n vert: vert,\n progVar: progVar,\n program: program\n }\n }\n\n function parseDraw (options, env) {\n var staticOptions = options.static\n var dynamicOptions = options.dynamic\n\n function parseElements () {\n if (S_ELEMENTS in staticOptions) {\n var elements = staticOptions[S_ELEMENTS]\n if (isBufferArgs(elements)) {\n elements = elementState.getElements(elementState.create(elements, true))\n } else if (elements) {\n elements = elementState.getElements(elements)\n check$1.command(elements, 'invalid elements', env.commandStr)\n }\n var result = createStaticDecl(function (env, scope) {\n if (elements) {\n var result = env.link(elements)\n env.ELEMENTS = result\n return result\n }\n env.ELEMENTS = null\n return null\n })\n result.value = elements\n return result\n } else if (S_ELEMENTS in dynamicOptions) {\n var dyn = dynamicOptions[S_ELEMENTS]\n return createDynamicDecl(dyn, function (env, scope) {\n var shared = env.shared\n\n var IS_BUFFER_ARGS = shared.isBufferArgs\n var ELEMENT_STATE = shared.elements\n\n var elementDefn = env.invoke(scope, dyn)\n var elements = scope.def('null')\n var elementStream = scope.def(IS_BUFFER_ARGS, '(', elementDefn, ')')\n\n var ifte = env.cond(elementStream)\n .then(elements, '=', ELEMENT_STATE, '.createStream(', elementDefn, ');')\n .else(elements, '=', ELEMENT_STATE, '.getElements(', elementDefn, ');')\n\n check$1.optional(function () {\n env.assert(ifte.else,\n '!' + elementDefn + '||' + elements,\n 'invalid elements')\n })\n\n scope.entry(ifte)\n scope.exit(\n env.cond(elementStream)\n .then(ELEMENT_STATE, '.destroyStream(', elements, ');'))\n\n env.ELEMENTS = elements\n\n return elements\n })\n }\n\n return null\n }\n\n var elements = parseElements()\n\n function parsePrimitive () {\n if (S_PRIMITIVE in staticOptions) {\n var primitive = staticOptions[S_PRIMITIVE]\n check$1.commandParameter(primitive, primTypes, 'invalid primitve', env.commandStr)\n return createStaticDecl(function (env, scope) {\n return primTypes[primitive]\n })\n } else if (S_PRIMITIVE in dynamicOptions) {\n var dynPrimitive = dynamicOptions[S_PRIMITIVE]\n return createDynamicDecl(dynPrimitive, function (env, scope) {\n var PRIM_TYPES = env.constants.primTypes\n var prim = env.invoke(scope, dynPrimitive)\n check$1.optional(function () {\n env.assert(scope,\n prim + ' in ' + PRIM_TYPES,\n 'invalid primitive, must be one of ' + Object.keys(primTypes))\n })\n return scope.def(PRIM_TYPES, '[', prim, ']')\n })\n } else if (elements) {\n if (isStatic(elements)) {\n if (elements.value) {\n return createStaticDecl(function (env, scope) {\n return scope.def(env.ELEMENTS, '.primType')\n })\n } else {\n return createStaticDecl(function () {\n return GL_TRIANGLES$1\n })\n }\n } else {\n return new Declaration(\n elements.thisDep,\n elements.contextDep,\n elements.propDep,\n function (env, scope) {\n var elements = env.ELEMENTS\n return scope.def(elements, '?', elements, '.primType:', GL_TRIANGLES$1)\n })\n }\n }\n return null\n }\n\n function parseParam (param, isOffset) {\n if (param in staticOptions) {\n var value = staticOptions[param] | 0\n check$1.command(!isOffset || value >= 0, 'invalid ' + param, env.commandStr)\n return createStaticDecl(function (env, scope) {\n if (isOffset) {\n env.OFFSET = value\n }\n return value\n })\n } else if (param in dynamicOptions) {\n var dynValue = dynamicOptions[param]\n return createDynamicDecl(dynValue, function (env, scope) {\n var result = env.invoke(scope, dynValue)\n if (isOffset) {\n env.OFFSET = result\n check$1.optional(function () {\n env.assert(scope,\n result + '>=0',\n 'invalid ' + param)\n })\n }\n return result\n })\n } else if (isOffset && elements) {\n return createStaticDecl(function (env, scope) {\n env.OFFSET = '0'\n return 0\n })\n }\n return null\n }\n\n var OFFSET = parseParam(S_OFFSET, true)\n\n function parseVertCount () {\n if (S_COUNT in staticOptions) {\n var count = staticOptions[S_COUNT] | 0\n check$1.command(\n typeof count === 'number' && count >= 0, 'invalid vertex count', env.commandStr)\n return createStaticDecl(function () {\n return count\n })\n } else if (S_COUNT in dynamicOptions) {\n var dynCount = dynamicOptions[S_COUNT]\n return createDynamicDecl(dynCount, function (env, scope) {\n var result = env.invoke(scope, dynCount)\n check$1.optional(function () {\n env.assert(scope,\n 'typeof ' + result + '===\"number\"&&' +\n result + '>=0&&' +\n result + '===(' + result + '|0)',\n 'invalid vertex count')\n })\n return result\n })\n } else if (elements) {\n if (isStatic(elements)) {\n if (elements) {\n if (OFFSET) {\n return new Declaration(\n OFFSET.thisDep,\n OFFSET.contextDep,\n OFFSET.propDep,\n function (env, scope) {\n var result = scope.def(\n env.ELEMENTS, '.vertCount-', env.OFFSET)\n\n check$1.optional(function () {\n env.assert(scope,\n result + '>=0',\n 'invalid vertex offset/element buffer too small')\n })\n\n return result\n })\n } else {\n return createStaticDecl(function (env, scope) {\n return scope.def(env.ELEMENTS, '.vertCount')\n })\n }\n } else {\n var result = createStaticDecl(function () {\n return -1\n })\n check$1.optional(function () {\n result.MISSING = true\n })\n return result\n }\n } else {\n var variable = new Declaration(\n elements.thisDep || OFFSET.thisDep,\n elements.contextDep || OFFSET.contextDep,\n elements.propDep || OFFSET.propDep,\n function (env, scope) {\n var elements = env.ELEMENTS\n if (env.OFFSET) {\n return scope.def(elements, '?', elements, '.vertCount-',\n env.OFFSET, ':-1')\n }\n return scope.def(elements, '?', elements, '.vertCount:-1')\n })\n check$1.optional(function () {\n variable.DYNAMIC = true\n })\n return variable\n }\n }\n return null\n }\n\n return {\n elements: elements,\n primitive: parsePrimitive(),\n count: parseVertCount(),\n instances: parseParam(S_INSTANCES, false),\n offset: OFFSET\n }\n }\n\n function parseGLState (options, env) {\n var staticOptions = options.static\n var dynamicOptions = options.dynamic\n\n var STATE = {}\n\n GL_STATE_NAMES.forEach(function (prop) {\n var param = propName(prop)\n\n function parseParam (parseStatic, parseDynamic) {\n if (prop in staticOptions) {\n var value = parseStatic(staticOptions[prop])\n STATE[param] = createStaticDecl(function () {\n return value\n })\n } else if (prop in dynamicOptions) {\n var dyn = dynamicOptions[prop]\n STATE[param] = createDynamicDecl(dyn, function (env, scope) {\n return parseDynamic(env, scope, env.invoke(scope, dyn))\n })\n }\n }\n\n switch (prop) {\n case S_CULL_ENABLE:\n case S_BLEND_ENABLE:\n case S_DITHER:\n case S_STENCIL_ENABLE:\n case S_DEPTH_ENABLE:\n case S_SCISSOR_ENABLE:\n case S_POLYGON_OFFSET_ENABLE:\n case S_SAMPLE_ALPHA:\n case S_SAMPLE_ENABLE:\n case S_DEPTH_MASK:\n return parseParam(\n function (value) {\n check$1.commandType(value, 'boolean', prop, env.commandStr)\n return value\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n 'typeof ' + value + '===\"boolean\"',\n 'invalid flag ' + prop, env.commandStr)\n })\n return value\n })\n\n case S_DEPTH_FUNC:\n return parseParam(\n function (value) {\n check$1.commandParameter(value, compareFuncs, 'invalid ' + prop, env.commandStr)\n return compareFuncs[value]\n },\n function (env, scope, value) {\n var COMPARE_FUNCS = env.constants.compareFuncs\n check$1.optional(function () {\n env.assert(scope,\n value + ' in ' + COMPARE_FUNCS,\n 'invalid ' + prop + ', must be one of ' + Object.keys(compareFuncs))\n })\n return scope.def(COMPARE_FUNCS, '[', value, ']')\n })\n\n case S_DEPTH_RANGE:\n return parseParam(\n function (value) {\n check$1.command(\n isArrayLike(value) &&\n value.length === 2 &&\n typeof value[0] === 'number' &&\n typeof value[1] === 'number' &&\n value[0] <= value[1],\n 'depth range is 2d array',\n env.commandStr)\n return value\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n env.shared.isArrayLike + '(' + value + ')&&' +\n value + '.length===2&&' +\n 'typeof ' + value + '[0]===\"number\"&&' +\n 'typeof ' + value + '[1]===\"number\"&&' +\n value + '[0]<=' + value + '[1]',\n 'depth range must be a 2d array')\n })\n\n var Z_NEAR = scope.def('+', value, '[0]')\n var Z_FAR = scope.def('+', value, '[1]')\n return [Z_NEAR, Z_FAR]\n })\n\n case S_BLEND_FUNC:\n return parseParam(\n function (value) {\n check$1.commandType(value, 'object', 'blend.func', env.commandStr)\n var srcRGB = ('srcRGB' in value ? value.srcRGB : value.src)\n var srcAlpha = ('srcAlpha' in value ? value.srcAlpha : value.src)\n var dstRGB = ('dstRGB' in value ? value.dstRGB : value.dst)\n var dstAlpha = ('dstAlpha' in value ? value.dstAlpha : value.dst)\n check$1.commandParameter(srcRGB, blendFuncs, param + '.srcRGB', env.commandStr)\n check$1.commandParameter(srcAlpha, blendFuncs, param + '.srcAlpha', env.commandStr)\n check$1.commandParameter(dstRGB, blendFuncs, param + '.dstRGB', env.commandStr)\n check$1.commandParameter(dstAlpha, blendFuncs, param + '.dstAlpha', env.commandStr)\n\n check$1.command(\n (invalidBlendCombinations.indexOf(srcRGB + ', ' + dstRGB) === -1),\n 'unallowed blending combination (srcRGB, dstRGB) = (' + srcRGB + ', ' + dstRGB + ')', env.commandStr)\n\n return [\n blendFuncs[srcRGB],\n blendFuncs[dstRGB],\n blendFuncs[srcAlpha],\n blendFuncs[dstAlpha]\n ]\n },\n function (env, scope, value) {\n var BLEND_FUNCS = env.constants.blendFuncs\n\n check$1.optional(function () {\n env.assert(scope,\n value + '&&typeof ' + value + '===\"object\"',\n 'invalid blend func, must be an object')\n })\n\n function read (prefix, suffix) {\n var func = scope.def(\n '\"', prefix, suffix, '\" in ', value,\n '?', value, '.', prefix, suffix,\n ':', value, '.', prefix)\n\n check$1.optional(function () {\n env.assert(scope,\n func + ' in ' + BLEND_FUNCS,\n 'invalid ' + prop + '.' + prefix + suffix + ', must be one of ' + Object.keys(blendFuncs))\n })\n\n return func\n }\n\n var srcRGB = read('src', 'RGB')\n var dstRGB = read('dst', 'RGB')\n\n check$1.optional(function () {\n var INVALID_BLEND_COMBINATIONS = env.constants.invalidBlendCombinations\n\n env.assert(scope,\n INVALID_BLEND_COMBINATIONS +\n '.indexOf(' + srcRGB + '+\", \"+' + dstRGB + ') === -1 ',\n 'unallowed blending combination for (srcRGB, dstRGB)'\n )\n })\n\n var SRC_RGB = scope.def(BLEND_FUNCS, '[', srcRGB, ']')\n var SRC_ALPHA = scope.def(BLEND_FUNCS, '[', read('src', 'Alpha'), ']')\n var DST_RGB = scope.def(BLEND_FUNCS, '[', dstRGB, ']')\n var DST_ALPHA = scope.def(BLEND_FUNCS, '[', read('dst', 'Alpha'), ']')\n\n return [SRC_RGB, DST_RGB, SRC_ALPHA, DST_ALPHA]\n })\n\n case S_BLEND_EQUATION:\n return parseParam(\n function (value) {\n if (typeof value === 'string') {\n check$1.commandParameter(value, blendEquations, 'invalid ' + prop, env.commandStr)\n return [\n blendEquations[value],\n blendEquations[value]\n ]\n } else if (typeof value === 'object') {\n check$1.commandParameter(\n value.rgb, blendEquations, prop + '.rgb', env.commandStr)\n check$1.commandParameter(\n value.alpha, blendEquations, prop + '.alpha', env.commandStr)\n return [\n blendEquations[value.rgb],\n blendEquations[value.alpha]\n ]\n } else {\n check$1.commandRaise('invalid blend.equation', env.commandStr)\n }\n },\n function (env, scope, value) {\n var BLEND_EQUATIONS = env.constants.blendEquations\n\n var RGB = scope.def()\n var ALPHA = scope.def()\n\n var ifte = env.cond('typeof ', value, '===\"string\"')\n\n check$1.optional(function () {\n function checkProp (block, name, value) {\n env.assert(block,\n value + ' in ' + BLEND_EQUATIONS,\n 'invalid ' + name + ', must be one of ' + Object.keys(blendEquations))\n }\n checkProp(ifte.then, prop, value)\n\n env.assert(ifte.else,\n value + '&&typeof ' + value + '===\"object\"',\n 'invalid ' + prop)\n checkProp(ifte.else, prop + '.rgb', value + '.rgb')\n checkProp(ifte.else, prop + '.alpha', value + '.alpha')\n })\n\n ifte.then(\n RGB, '=', ALPHA, '=', BLEND_EQUATIONS, '[', value, '];')\n ifte.else(\n RGB, '=', BLEND_EQUATIONS, '[', value, '.rgb];',\n ALPHA, '=', BLEND_EQUATIONS, '[', value, '.alpha];')\n\n scope(ifte)\n\n return [RGB, ALPHA]\n })\n\n case S_BLEND_COLOR:\n return parseParam(\n function (value) {\n check$1.command(\n isArrayLike(value) &&\n value.length === 4,\n 'blend.color must be a 4d array', env.commandStr)\n return loop(4, function (i) {\n return +value[i]\n })\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n env.shared.isArrayLike + '(' + value + ')&&' +\n value + '.length===4',\n 'blend.color must be a 4d array')\n })\n return loop(4, function (i) {\n return scope.def('+', value, '[', i, ']')\n })\n })\n\n case S_STENCIL_MASK:\n return parseParam(\n function (value) {\n check$1.commandType(value, 'number', param, env.commandStr)\n return value | 0\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n 'typeof ' + value + '===\"number\"',\n 'invalid stencil.mask')\n })\n return scope.def(value, '|0')\n })\n\n case S_STENCIL_FUNC:\n return parseParam(\n function (value) {\n check$1.commandType(value, 'object', param, env.commandStr)\n var cmp = value.cmp || 'keep'\n var ref = value.ref || 0\n var mask = 'mask' in value ? value.mask : -1\n check$1.commandParameter(cmp, compareFuncs, prop + '.cmp', env.commandStr)\n check$1.commandType(ref, 'number', prop + '.ref', env.commandStr)\n check$1.commandType(mask, 'number', prop + '.mask', env.commandStr)\n return [\n compareFuncs[cmp],\n ref,\n mask\n ]\n },\n function (env, scope, value) {\n var COMPARE_FUNCS = env.constants.compareFuncs\n check$1.optional(function () {\n function assert () {\n env.assert(scope,\n Array.prototype.join.call(arguments, ''),\n 'invalid stencil.func')\n }\n assert(value + '&&typeof ', value, '===\"object\"')\n assert('!(\"cmp\" in ', value, ')||(',\n value, '.cmp in ', COMPARE_FUNCS, ')')\n })\n var cmp = scope.def(\n '\"cmp\" in ', value,\n '?', COMPARE_FUNCS, '[', value, '.cmp]',\n ':', GL_KEEP)\n var ref = scope.def(value, '.ref|0')\n var mask = scope.def(\n '\"mask\" in ', value,\n '?', value, '.mask|0:-1')\n return [cmp, ref, mask]\n })\n\n case S_STENCIL_OPFRONT:\n case S_STENCIL_OPBACK:\n return parseParam(\n function (value) {\n check$1.commandType(value, 'object', param, env.commandStr)\n var fail = value.fail || 'keep'\n var zfail = value.zfail || 'keep'\n var zpass = value.zpass || 'keep'\n check$1.commandParameter(fail, stencilOps, prop + '.fail', env.commandStr)\n check$1.commandParameter(zfail, stencilOps, prop + '.zfail', env.commandStr)\n check$1.commandParameter(zpass, stencilOps, prop + '.zpass', env.commandStr)\n return [\n prop === S_STENCIL_OPBACK ? GL_BACK : GL_FRONT,\n stencilOps[fail],\n stencilOps[zfail],\n stencilOps[zpass]\n ]\n },\n function (env, scope, value) {\n var STENCIL_OPS = env.constants.stencilOps\n\n check$1.optional(function () {\n env.assert(scope,\n value + '&&typeof ' + value + '===\"object\"',\n 'invalid ' + prop)\n })\n\n function read (name) {\n check$1.optional(function () {\n env.assert(scope,\n '!(\"' + name + '\" in ' + value + ')||' +\n '(' + value + '.' + name + ' in ' + STENCIL_OPS + ')',\n 'invalid ' + prop + '.' + name + ', must be one of ' + Object.keys(stencilOps))\n })\n\n return scope.def(\n '\"', name, '\" in ', value,\n '?', STENCIL_OPS, '[', value, '.', name, ']:',\n GL_KEEP)\n }\n\n return [\n prop === S_STENCIL_OPBACK ? GL_BACK : GL_FRONT,\n read('fail'),\n read('zfail'),\n read('zpass')\n ]\n })\n\n case S_POLYGON_OFFSET_OFFSET:\n return parseParam(\n function (value) {\n check$1.commandType(value, 'object', param, env.commandStr)\n var factor = value.factor | 0\n var units = value.units | 0\n check$1.commandType(factor, 'number', param + '.factor', env.commandStr)\n check$1.commandType(units, 'number', param + '.units', env.commandStr)\n return [factor, units]\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n value + '&&typeof ' + value + '===\"object\"',\n 'invalid ' + prop)\n })\n\n var FACTOR = scope.def(value, '.factor|0')\n var UNITS = scope.def(value, '.units|0')\n\n return [FACTOR, UNITS]\n })\n\n case S_CULL_FACE:\n return parseParam(\n function (value) {\n var face = 0\n if (value === 'front') {\n face = GL_FRONT\n } else if (value === 'back') {\n face = GL_BACK\n }\n check$1.command(!!face, param, env.commandStr)\n return face\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n value + '===\"front\"||' +\n value + '===\"back\"',\n 'invalid cull.face')\n })\n return scope.def(value, '===\"front\"?', GL_FRONT, ':', GL_BACK)\n })\n\n case S_LINE_WIDTH:\n return parseParam(\n function (value) {\n check$1.command(\n typeof value === 'number' &&\n value >= limits.lineWidthDims[0] &&\n value <= limits.lineWidthDims[1],\n 'invalid line width, must be a positive number between ' +\n limits.lineWidthDims[0] + ' and ' + limits.lineWidthDims[1], env.commandStr)\n return value\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n 'typeof ' + value + '===\"number\"&&' +\n value + '>=' + limits.lineWidthDims[0] + '&&' +\n value + '<=' + limits.lineWidthDims[1],\n 'invalid line width')\n })\n\n return value\n })\n\n case S_FRONT_FACE:\n return parseParam(\n function (value) {\n check$1.commandParameter(value, orientationType, param, env.commandStr)\n return orientationType[value]\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n value + '===\"cw\"||' +\n value + '===\"ccw\"',\n 'invalid frontFace, must be one of cw,ccw')\n })\n return scope.def(value + '===\"cw\"?' + GL_CW + ':' + GL_CCW)\n })\n\n case S_COLOR_MASK:\n return parseParam(\n function (value) {\n check$1.command(\n isArrayLike(value) && value.length === 4,\n 'color.mask must be length 4 array', env.commandStr)\n return value.map(function (v) { return !!v })\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n env.shared.isArrayLike + '(' + value + ')&&' +\n value + '.length===4',\n 'invalid color.mask')\n })\n return loop(4, function (i) {\n return '!!' + value + '[' + i + ']'\n })\n })\n\n case S_SAMPLE_COVERAGE:\n return parseParam(\n function (value) {\n check$1.command(typeof value === 'object' && value, param, env.commandStr)\n var sampleValue = 'value' in value ? value.value : 1\n var sampleInvert = !!value.invert\n check$1.command(\n typeof sampleValue === 'number' &&\n sampleValue >= 0 && sampleValue <= 1,\n 'sample.coverage.value must be a number between 0 and 1', env.commandStr)\n return [sampleValue, sampleInvert]\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n value + '&&typeof ' + value + '===\"object\"',\n 'invalid sample.coverage')\n })\n var VALUE = scope.def(\n '\"value\" in ', value, '?+', value, '.value:1')\n var INVERT = scope.def('!!', value, '.invert')\n return [VALUE, INVERT]\n })\n }\n })\n\n return STATE\n }\n\n function parseUniforms (uniforms, env) {\n var staticUniforms = uniforms.static\n var dynamicUniforms = uniforms.dynamic\n\n var UNIFORMS = {}\n\n Object.keys(staticUniforms).forEach(function (name) {\n var value = staticUniforms[name]\n var result\n if (typeof value === 'number' ||\n typeof value === 'boolean') {\n result = createStaticDecl(function () {\n return value\n })\n } else if (typeof value === 'function') {\n var reglType = value._reglType\n if (reglType === 'texture2d' ||\n reglType === 'textureCube') {\n result = createStaticDecl(function (env) {\n return env.link(value)\n })\n } else if (reglType === 'framebuffer' ||\n reglType === 'framebufferCube') {\n check$1.command(value.color.length > 0,\n 'missing color attachment for framebuffer sent to uniform \"' + name + '\"', env.commandStr)\n result = createStaticDecl(function (env) {\n return env.link(value.color[0])\n })\n } else {\n check$1.commandRaise('invalid data for uniform \"' + name + '\"', env.commandStr)\n }\n } else if (isArrayLike(value)) {\n result = createStaticDecl(function (env) {\n var ITEM = env.global.def('[',\n loop(value.length, function (i) {\n check$1.command(\n typeof value[i] === 'number' ||\n typeof value[i] === 'boolean',\n 'invalid uniform ' + name, env.commandStr)\n return value[i]\n }), ']')\n return ITEM\n })\n } else {\n check$1.commandRaise('invalid or missing data for uniform \"' + name + '\"', env.commandStr)\n }\n result.value = value\n UNIFORMS[name] = result\n })\n\n Object.keys(dynamicUniforms).forEach(function (key) {\n var dyn = dynamicUniforms[key]\n UNIFORMS[key] = createDynamicDecl(dyn, function (env, scope) {\n return env.invoke(scope, dyn)\n })\n })\n\n return UNIFORMS\n }\n\n function parseAttributes (attributes, env) {\n var staticAttributes = attributes.static\n var dynamicAttributes = attributes.dynamic\n\n var attributeDefs = {}\n\n Object.keys(staticAttributes).forEach(function (attribute) {\n var value = staticAttributes[attribute]\n var id = stringStore.id(attribute)\n\n var record = new AttributeRecord()\n if (isBufferArgs(value)) {\n record.state = ATTRIB_STATE_POINTER\n record.buffer = bufferState.getBuffer(\n bufferState.create(value, GL_ARRAY_BUFFER$2, false, true))\n record.type = 0\n } else {\n var buffer = bufferState.getBuffer(value)\n if (buffer) {\n record.state = ATTRIB_STATE_POINTER\n record.buffer = buffer\n record.type = 0\n } else {\n check$1.command(typeof value === 'object' && value,\n 'invalid data for attribute ' + attribute, env.commandStr)\n if ('constant' in value) {\n var constant = value.constant\n record.buffer = 'null'\n record.state = ATTRIB_STATE_CONSTANT\n if (typeof constant === 'number') {\n record.x = constant\n } else {\n check$1.command(\n isArrayLike(constant) &&\n constant.length > 0 &&\n constant.length <= 4,\n 'invalid constant for attribute ' + attribute, env.commandStr)\n CUTE_COMPONENTS.forEach(function (c, i) {\n if (i < constant.length) {\n record[c] = constant[i]\n }\n })\n }\n } else {\n if (isBufferArgs(value.buffer)) {\n buffer = bufferState.getBuffer(\n bufferState.create(value.buffer, GL_ARRAY_BUFFER$2, false, true))\n } else {\n buffer = bufferState.getBuffer(value.buffer)\n }\n check$1.command(!!buffer, 'missing buffer for attribute \"' + attribute + '\"', env.commandStr)\n\n var offset = value.offset | 0\n check$1.command(offset >= 0,\n 'invalid offset for attribute \"' + attribute + '\"', env.commandStr)\n\n var stride = value.stride | 0\n check$1.command(stride >= 0 && stride < 256,\n 'invalid stride for attribute \"' + attribute + '\", must be integer betweeen [0, 255]', env.commandStr)\n\n var size = value.size | 0\n check$1.command(!('size' in value) || (size > 0 && size <= 4),\n 'invalid size for attribute \"' + attribute + '\", must be 1,2,3,4', env.commandStr)\n\n var normalized = !!value.normalized\n\n var type = 0\n if ('type' in value) {\n check$1.commandParameter(\n value.type, glTypes,\n 'invalid type for attribute ' + attribute, env.commandStr)\n type = glTypes[value.type]\n }\n\n var divisor = value.divisor | 0\n if ('divisor' in value) {\n check$1.command(divisor === 0 || extInstancing,\n 'cannot specify divisor for attribute \"' + attribute + '\", instancing not supported', env.commandStr)\n check$1.command(divisor >= 0,\n 'invalid divisor for attribute \"' + attribute + '\"', env.commandStr)\n }\n\n check$1.optional(function () {\n var command = env.commandStr\n\n var VALID_KEYS = [\n 'buffer',\n 'offset',\n 'divisor',\n 'normalized',\n 'type',\n 'size',\n 'stride'\n ]\n\n Object.keys(value).forEach(function (prop) {\n check$1.command(\n VALID_KEYS.indexOf(prop) >= 0,\n 'unknown parameter \"' + prop + '\" for attribute pointer \"' + attribute + '\" (valid parameters are ' + VALID_KEYS + ')',\n command)\n })\n })\n\n record.buffer = buffer\n record.state = ATTRIB_STATE_POINTER\n record.size = size\n record.normalized = normalized\n record.type = type || buffer.dtype\n record.offset = offset\n record.stride = stride\n record.divisor = divisor\n }\n }\n }\n\n attributeDefs[attribute] = createStaticDecl(function (env, scope) {\n var cache = env.attribCache\n if (id in cache) {\n return cache[id]\n }\n var result = {\n isStream: false\n }\n Object.keys(record).forEach(function (key) {\n result[key] = record[key]\n })\n if (record.buffer) {\n result.buffer = env.link(record.buffer)\n result.type = result.type || (result.buffer + '.dtype')\n }\n cache[id] = result\n return result\n })\n })\n\n Object.keys(dynamicAttributes).forEach(function (attribute) {\n var dyn = dynamicAttributes[attribute]\n\n function appendAttributeCode (env, block) {\n var VALUE = env.invoke(block, dyn)\n\n var shared = env.shared\n var constants = env.constants\n\n var IS_BUFFER_ARGS = shared.isBufferArgs\n var BUFFER_STATE = shared.buffer\n\n // Perform validation on attribute\n check$1.optional(function () {\n env.assert(block,\n VALUE + '&&(typeof ' + VALUE + '===\"object\"||typeof ' +\n VALUE + '===\"function\")&&(' +\n IS_BUFFER_ARGS + '(' + VALUE + ')||' +\n BUFFER_STATE + '.getBuffer(' + VALUE + ')||' +\n BUFFER_STATE + '.getBuffer(' + VALUE + '.buffer)||' +\n IS_BUFFER_ARGS + '(' + VALUE + '.buffer)||' +\n '(\"constant\" in ' + VALUE +\n '&&(typeof ' + VALUE + '.constant===\"number\"||' +\n shared.isArrayLike + '(' + VALUE + '.constant))))',\n 'invalid dynamic attribute \"' + attribute + '\"')\n })\n\n // allocate names for result\n var result = {\n isStream: block.def(false)\n }\n var defaultRecord = new AttributeRecord()\n defaultRecord.state = ATTRIB_STATE_POINTER\n Object.keys(defaultRecord).forEach(function (key) {\n result[key] = block.def('' + defaultRecord[key])\n })\n\n var BUFFER = result.buffer\n var TYPE = result.type\n block(\n 'if(', IS_BUFFER_ARGS, '(', VALUE, ')){',\n result.isStream, '=true;',\n BUFFER, '=', BUFFER_STATE, '.createStream(', GL_ARRAY_BUFFER$2, ',', VALUE, ');',\n TYPE, '=', BUFFER, '.dtype;',\n '}else{',\n BUFFER, '=', BUFFER_STATE, '.getBuffer(', VALUE, ');',\n 'if(', BUFFER, '){',\n TYPE, '=', BUFFER, '.dtype;',\n '}else if(\"constant\" in ', VALUE, '){',\n result.state, '=', ATTRIB_STATE_CONSTANT, ';',\n 'if(typeof ' + VALUE + '.constant === \"number\"){',\n result[CUTE_COMPONENTS[0]], '=', VALUE, '.constant;',\n CUTE_COMPONENTS.slice(1).map(function (n) {\n return result[n]\n }).join('='), '=0;',\n '}else{',\n CUTE_COMPONENTS.map(function (name, i) {\n return (\n result[name] + '=' + VALUE + '.constant.length>' + i +\n '?' + VALUE + '.constant[' + i + ']:0;'\n )\n }).join(''),\n '}}else{',\n 'if(', IS_BUFFER_ARGS, '(', VALUE, '.buffer)){',\n BUFFER, '=', BUFFER_STATE, '.createStream(', GL_ARRAY_BUFFER$2, ',', VALUE, '.buffer);',\n '}else{',\n BUFFER, '=', BUFFER_STATE, '.getBuffer(', VALUE, '.buffer);',\n '}',\n TYPE, '=\"type\" in ', VALUE, '?',\n constants.glTypes, '[', VALUE, '.type]:', BUFFER, '.dtype;',\n result.normalized, '=!!', VALUE, '.normalized;')\n function emitReadRecord (name) {\n block(result[name], '=', VALUE, '.', name, '|0;')\n }\n emitReadRecord('size')\n emitReadRecord('offset')\n emitReadRecord('stride')\n emitReadRecord('divisor')\n\n block('}}')\n\n block.exit(\n 'if(', result.isStream, '){',\n BUFFER_STATE, '.destroyStream(', BUFFER, ');',\n '}')\n\n return result\n }\n\n attributeDefs[attribute] = createDynamicDecl(dyn, appendAttributeCode)\n })\n\n return attributeDefs\n }\n\n function parseVAO (options, env) {\n var staticOptions = options.static\n var dynamicOptions = options.dynamic\n if (S_VAO in staticOptions) {\n var vao = staticOptions[S_VAO]\n if (vao !== null && attributeState.getVAO(vao) === null) {\n vao = attributeState.createVAO(vao)\n }\n return createStaticDecl(function (env) {\n return env.link(attributeState.getVAO(vao))\n })\n } else if (S_VAO in dynamicOptions) {\n var dyn = dynamicOptions[S_VAO]\n return createDynamicDecl(dyn, function (env, scope) {\n var vaoRef = env.invoke(scope, dyn)\n return scope.def(env.shared.vao + '.getVAO(' + vaoRef + ')')\n })\n }\n return null\n }\n\n function parseContext (context) {\n var staticContext = context.static\n var dynamicContext = context.dynamic\n var result = {}\n\n Object.keys(staticContext).forEach(function (name) {\n var value = staticContext[name]\n result[name] = createStaticDecl(function (env, scope) {\n if (typeof value === 'number' || typeof value === 'boolean') {\n return '' + value\n } else {\n return env.link(value)\n }\n })\n })\n\n Object.keys(dynamicContext).forEach(function (name) {\n var dyn = dynamicContext[name]\n result[name] = createDynamicDecl(dyn, function (env, scope) {\n return env.invoke(scope, dyn)\n })\n })\n\n return result\n }\n\n function parseArguments (options, attributes, uniforms, context, env) {\n var staticOptions = options.static\n var dynamicOptions = options.dynamic\n\n check$1.optional(function () {\n var KEY_NAMES = [\n S_FRAMEBUFFER,\n S_VERT,\n S_FRAG,\n S_ELEMENTS,\n S_PRIMITIVE,\n S_OFFSET,\n S_COUNT,\n S_INSTANCES,\n S_PROFILE,\n S_VAO\n ].concat(GL_STATE_NAMES)\n\n function checkKeys (dict) {\n Object.keys(dict).forEach(function (key) {\n check$1.command(\n KEY_NAMES.indexOf(key) >= 0,\n 'unknown parameter \"' + key + '\"',\n env.commandStr)\n })\n }\n\n checkKeys(staticOptions)\n checkKeys(dynamicOptions)\n })\n\n var attribLocations = parseAttribLocations(options, attributes)\n\n var framebuffer = parseFramebuffer(options, env)\n var viewportAndScissor = parseViewportScissor(options, framebuffer, env)\n var draw = parseDraw(options, env)\n var state = parseGLState(options, env)\n var shader = parseProgram(options, env, attribLocations)\n\n function copyBox (name) {\n var defn = viewportAndScissor[name]\n if (defn) {\n state[name] = defn\n }\n }\n copyBox(S_VIEWPORT)\n copyBox(propName(S_SCISSOR_BOX))\n\n var dirty = Object.keys(state).length > 0\n\n var result = {\n framebuffer: framebuffer,\n draw: draw,\n shader: shader,\n state: state,\n dirty: dirty,\n scopeVAO: null,\n drawVAO: null,\n useVAO: false,\n attributes: {}\n }\n\n result.profile = parseProfile(options, env)\n result.uniforms = parseUniforms(uniforms, env)\n result.drawVAO = result.scopeVAO = parseVAO(options, env)\n // special case: check if we can statically allocate a vertex array object for this program\n if (!result.drawVAO && shader.program && !attribLocations && extensions.angle_instanced_arrays) {\n var useVAO = true\n var staticBindings = shader.program.attributes.map(function (attr) {\n var binding = attributes.static[attr]\n useVAO = useVAO && !!binding\n return binding\n })\n if (useVAO && staticBindings.length > 0) {\n var vao = attributeState.getVAO(attributeState.createVAO(staticBindings))\n result.drawVAO = new Declaration(null, null, null, function (env, scope) {\n return env.link(vao)\n })\n result.useVAO = true\n }\n }\n if (attribLocations) {\n result.useVAO = true\n } else {\n result.attributes = parseAttributes(attributes, env)\n }\n result.context = parseContext(context, env)\n return result\n }\n\n // ===================================================\n // ===================================================\n // COMMON UPDATE FUNCTIONS\n // ===================================================\n // ===================================================\n function emitContext (env, scope, context) {\n var shared = env.shared\n var CONTEXT = shared.context\n\n var contextEnter = env.scope()\n\n Object.keys(context).forEach(function (name) {\n scope.save(CONTEXT, '.' + name)\n var defn = context[name]\n contextEnter(CONTEXT, '.', name, '=', defn.append(env, scope), ';')\n })\n\n scope(contextEnter)\n }\n\n // ===================================================\n // ===================================================\n // COMMON DRAWING FUNCTIONS\n // ===================================================\n // ===================================================\n function emitPollFramebuffer (env, scope, framebuffer, skipCheck) {\n var shared = env.shared\n\n var GL = shared.gl\n var FRAMEBUFFER_STATE = shared.framebuffer\n var EXT_DRAW_BUFFERS\n if (extDrawBuffers) {\n EXT_DRAW_BUFFERS = scope.def(shared.extensions, '.webgl_draw_buffers')\n }\n\n var constants = env.constants\n\n var DRAW_BUFFERS = constants.drawBuffer\n var BACK_BUFFER = constants.backBuffer\n\n var NEXT\n if (framebuffer) {\n NEXT = framebuffer.append(env, scope)\n } else {\n NEXT = scope.def(FRAMEBUFFER_STATE, '.next')\n }\n\n if (!skipCheck) {\n scope('if(', NEXT, '!==', FRAMEBUFFER_STATE, '.cur){')\n }\n scope(\n 'if(', NEXT, '){',\n GL, '.bindFramebuffer(', GL_FRAMEBUFFER$2, ',', NEXT, '.framebuffer);')\n if (extDrawBuffers) {\n scope(EXT_DRAW_BUFFERS, '.drawBuffersWEBGL(',\n DRAW_BUFFERS, '[', NEXT, '.colorAttachments.length]);')\n }\n scope('}else{',\n GL, '.bindFramebuffer(', GL_FRAMEBUFFER$2, ',null);')\n if (extDrawBuffers) {\n scope(EXT_DRAW_BUFFERS, '.drawBuffersWEBGL(', BACK_BUFFER, ');')\n }\n scope(\n '}',\n FRAMEBUFFER_STATE, '.cur=', NEXT, ';')\n if (!skipCheck) {\n scope('}')\n }\n }\n\n function emitPollState (env, scope, args) {\n var shared = env.shared\n\n var GL = shared.gl\n\n var CURRENT_VARS = env.current\n var NEXT_VARS = env.next\n var CURRENT_STATE = shared.current\n var NEXT_STATE = shared.next\n\n var block = env.cond(CURRENT_STATE, '.dirty')\n\n GL_STATE_NAMES.forEach(function (prop) {\n var param = propName(prop)\n if (param in args.state) {\n return\n }\n\n var NEXT, CURRENT\n if (param in NEXT_VARS) {\n NEXT = NEXT_VARS[param]\n CURRENT = CURRENT_VARS[param]\n var parts = loop(currentState[param].length, function (i) {\n return block.def(NEXT, '[', i, ']')\n })\n block(env.cond(parts.map(function (p, i) {\n return p + '!==' + CURRENT + '[' + i + ']'\n }).join('||'))\n .then(\n GL, '.', GL_VARIABLES[param], '(', parts, ');',\n parts.map(function (p, i) {\n return CURRENT + '[' + i + ']=' + p\n }).join(';'), ';'))\n } else {\n NEXT = block.def(NEXT_STATE, '.', param)\n var ifte = env.cond(NEXT, '!==', CURRENT_STATE, '.', param)\n block(ifte)\n if (param in GL_FLAGS) {\n ifte(\n env.cond(NEXT)\n .then(GL, '.enable(', GL_FLAGS[param], ');')\n .else(GL, '.disable(', GL_FLAGS[param], ');'),\n CURRENT_STATE, '.', param, '=', NEXT, ';')\n } else {\n ifte(\n GL, '.', GL_VARIABLES[param], '(', NEXT, ');',\n CURRENT_STATE, '.', param, '=', NEXT, ';')\n }\n }\n })\n if (Object.keys(args.state).length === 0) {\n block(CURRENT_STATE, '.dirty=false;')\n }\n scope(block)\n }\n\n function emitSetOptions (env, scope, options, filter) {\n var shared = env.shared\n var CURRENT_VARS = env.current\n var CURRENT_STATE = shared.current\n var GL = shared.gl\n sortState(Object.keys(options)).forEach(function (param) {\n var defn = options[param]\n if (filter && !filter(defn)) {\n return\n }\n var variable = defn.append(env, scope)\n if (GL_FLAGS[param]) {\n var flag = GL_FLAGS[param]\n if (isStatic(defn)) {\n if (variable) {\n scope(GL, '.enable(', flag, ');')\n } else {\n scope(GL, '.disable(', flag, ');')\n }\n } else {\n scope(env.cond(variable)\n .then(GL, '.enable(', flag, ');')\n .else(GL, '.disable(', flag, ');'))\n }\n scope(CURRENT_STATE, '.', param, '=', variable, ';')\n } else if (isArrayLike(variable)) {\n var CURRENT = CURRENT_VARS[param]\n scope(\n GL, '.', GL_VARIABLES[param], '(', variable, ');',\n variable.map(function (v, i) {\n return CURRENT + '[' + i + ']=' + v\n }).join(';'), ';')\n } else {\n scope(\n GL, '.', GL_VARIABLES[param], '(', variable, ');',\n CURRENT_STATE, '.', param, '=', variable, ';')\n }\n })\n }\n\n function injectExtensions (env, scope) {\n if (extInstancing) {\n env.instancing = scope.def(\n env.shared.extensions, '.angle_instanced_arrays')\n }\n }\n\n function emitProfile (env, scope, args, useScope, incrementCounter) {\n var shared = env.shared\n var STATS = env.stats\n var CURRENT_STATE = shared.current\n var TIMER = shared.timer\n var profileArg = args.profile\n\n function perfCounter () {\n if (typeof performance === 'undefined') {\n return 'Date.now()'\n } else {\n return 'performance.now()'\n }\n }\n\n var CPU_START, QUERY_COUNTER\n function emitProfileStart (block) {\n CPU_START = scope.def()\n block(CPU_START, '=', perfCounter(), ';')\n if (typeof incrementCounter === 'string') {\n block(STATS, '.count+=', incrementCounter, ';')\n } else {\n block(STATS, '.count++;')\n }\n if (timer) {\n if (useScope) {\n QUERY_COUNTER = scope.def()\n block(QUERY_COUNTER, '=', TIMER, '.getNumPendingQueries();')\n } else {\n block(TIMER, '.beginQuery(', STATS, ');')\n }\n }\n }\n\n function emitProfileEnd (block) {\n block(STATS, '.cpuTime+=', perfCounter(), '-', CPU_START, ';')\n if (timer) {\n if (useScope) {\n block(TIMER, '.pushScopeStats(',\n QUERY_COUNTER, ',',\n TIMER, '.getNumPendingQueries(),',\n STATS, ');')\n } else {\n block(TIMER, '.endQuery();')\n }\n }\n }\n\n function scopeProfile (value) {\n var prev = scope.def(CURRENT_STATE, '.profile')\n scope(CURRENT_STATE, '.profile=', value, ';')\n scope.exit(CURRENT_STATE, '.profile=', prev, ';')\n }\n\n var USE_PROFILE\n if (profileArg) {\n if (isStatic(profileArg)) {\n if (profileArg.enable) {\n emitProfileStart(scope)\n emitProfileEnd(scope.exit)\n scopeProfile('true')\n } else {\n scopeProfile('false')\n }\n return\n }\n USE_PROFILE = profileArg.append(env, scope)\n scopeProfile(USE_PROFILE)\n } else {\n USE_PROFILE = scope.def(CURRENT_STATE, '.profile')\n }\n\n var start = env.block()\n emitProfileStart(start)\n scope('if(', USE_PROFILE, '){', start, '}')\n var end = env.block()\n emitProfileEnd(end)\n scope.exit('if(', USE_PROFILE, '){', end, '}')\n }\n\n function emitAttributes (env, scope, args, attributes, filter) {\n var shared = env.shared\n\n function typeLength (x) {\n switch (x) {\n case GL_FLOAT_VEC2:\n case GL_INT_VEC2:\n case GL_BOOL_VEC2:\n return 2\n case GL_FLOAT_VEC3:\n case GL_INT_VEC3:\n case GL_BOOL_VEC3:\n return 3\n case GL_FLOAT_VEC4:\n case GL_INT_VEC4:\n case GL_BOOL_VEC4:\n return 4\n default:\n return 1\n }\n }\n\n function emitBindAttribute (ATTRIBUTE, size, record) {\n var GL = shared.gl\n\n var LOCATION = scope.def(ATTRIBUTE, '.location')\n var BINDING = scope.def(shared.attributes, '[', LOCATION, ']')\n\n var STATE = record.state\n var BUFFER = record.buffer\n var CONST_COMPONENTS = [\n record.x,\n record.y,\n record.z,\n record.w\n ]\n\n var COMMON_KEYS = [\n 'buffer',\n 'normalized',\n 'offset',\n 'stride'\n ]\n\n function emitBuffer () {\n scope(\n 'if(!', BINDING, '.buffer){',\n GL, '.enableVertexAttribArray(', LOCATION, ');}')\n\n var TYPE = record.type\n var SIZE\n if (!record.size) {\n SIZE = size\n } else {\n SIZE = scope.def(record.size, '||', size)\n }\n\n scope('if(',\n BINDING, '.type!==', TYPE, '||',\n BINDING, '.size!==', SIZE, '||',\n COMMON_KEYS.map(function (key) {\n return BINDING + '.' + key + '!==' + record[key]\n }).join('||'),\n '){',\n GL, '.bindBuffer(', GL_ARRAY_BUFFER$2, ',', BUFFER, '.buffer);',\n GL, '.vertexAttribPointer(', [\n LOCATION,\n SIZE,\n TYPE,\n record.normalized,\n record.stride,\n record.offset\n ], ');',\n BINDING, '.type=', TYPE, ';',\n BINDING, '.size=', SIZE, ';',\n COMMON_KEYS.map(function (key) {\n return BINDING + '.' + key + '=' + record[key] + ';'\n }).join(''),\n '}')\n\n if (extInstancing) {\n var DIVISOR = record.divisor\n scope(\n 'if(', BINDING, '.divisor!==', DIVISOR, '){',\n env.instancing, '.vertexAttribDivisorANGLE(', [LOCATION, DIVISOR], ');',\n BINDING, '.divisor=', DIVISOR, ';}')\n }\n }\n\n function emitConstant () {\n scope(\n 'if(', BINDING, '.buffer){',\n GL, '.disableVertexAttribArray(', LOCATION, ');',\n BINDING, '.buffer=null;',\n '}if(', CUTE_COMPONENTS.map(function (c, i) {\n return BINDING + '.' + c + '!==' + CONST_COMPONENTS[i]\n }).join('||'), '){',\n GL, '.vertexAttrib4f(', LOCATION, ',', CONST_COMPONENTS, ');',\n CUTE_COMPONENTS.map(function (c, i) {\n return BINDING + '.' + c + '=' + CONST_COMPONENTS[i] + ';'\n }).join(''),\n '}')\n }\n\n if (STATE === ATTRIB_STATE_POINTER) {\n emitBuffer()\n } else if (STATE === ATTRIB_STATE_CONSTANT) {\n emitConstant()\n } else {\n scope('if(', STATE, '===', ATTRIB_STATE_POINTER, '){')\n emitBuffer()\n scope('}else{')\n emitConstant()\n scope('}')\n }\n }\n\n attributes.forEach(function (attribute) {\n var name = attribute.name\n var arg = args.attributes[name]\n var record\n if (arg) {\n if (!filter(arg)) {\n return\n }\n record = arg.append(env, scope)\n } else {\n if (!filter(SCOPE_DECL)) {\n return\n }\n var scopeAttrib = env.scopeAttrib(name)\n check$1.optional(function () {\n env.assert(scope,\n scopeAttrib + '.state',\n 'missing attribute ' + name)\n })\n record = {}\n Object.keys(new AttributeRecord()).forEach(function (key) {\n record[key] = scope.def(scopeAttrib, '.', key)\n })\n }\n emitBindAttribute(\n env.link(attribute), typeLength(attribute.info.type), record)\n })\n }\n\n function emitUniforms (env, scope, args, uniforms, filter) {\n var shared = env.shared\n var GL = shared.gl\n\n var infix\n for (var i = 0; i < uniforms.length; ++i) {\n var uniform = uniforms[i]\n var name = uniform.name\n var type = uniform.info.type\n var arg = args.uniforms[name]\n var UNIFORM = env.link(uniform)\n var LOCATION = UNIFORM + '.location'\n\n var VALUE\n if (arg) {\n if (!filter(arg)) {\n continue\n }\n if (isStatic(arg)) {\n var value = arg.value\n check$1.command(\n value !== null && typeof value !== 'undefined',\n 'missing uniform \"' + name + '\"', env.commandStr)\n if (type === GL_SAMPLER_2D || type === GL_SAMPLER_CUBE) {\n check$1.command(\n typeof value === 'function' &&\n ((type === GL_SAMPLER_2D &&\n (value._reglType === 'texture2d' ||\n value._reglType === 'framebuffer')) ||\n (type === GL_SAMPLER_CUBE &&\n (value._reglType === 'textureCube' ||\n value._reglType === 'framebufferCube'))),\n 'invalid texture for uniform ' + name, env.commandStr)\n var TEX_VALUE = env.link(value._texture || value.color[0]._texture)\n scope(GL, '.uniform1i(', LOCATION, ',', TEX_VALUE + '.bind());')\n scope.exit(TEX_VALUE, '.unbind();')\n } else if (\n type === GL_FLOAT_MAT2 ||\n type === GL_FLOAT_MAT3 ||\n type === GL_FLOAT_MAT4) {\n check$1.optional(function () {\n check$1.command(isArrayLike(value),\n 'invalid matrix for uniform ' + name, env.commandStr)\n check$1.command(\n (type === GL_FLOAT_MAT2 && value.length === 4) ||\n (type === GL_FLOAT_MAT3 && value.length === 9) ||\n (type === GL_FLOAT_MAT4 && value.length === 16),\n 'invalid length for matrix uniform ' + name, env.commandStr)\n })\n var MAT_VALUE = env.global.def('new Float32Array([' +\n Array.prototype.slice.call(value) + '])')\n var dim = 2\n if (type === GL_FLOAT_MAT3) {\n dim = 3\n } else if (type === GL_FLOAT_MAT4) {\n dim = 4\n }\n scope(\n GL, '.uniformMatrix', dim, 'fv(',\n LOCATION, ',false,', MAT_VALUE, ');')\n } else {\n switch (type) {\n case GL_FLOAT$8:\n check$1.commandType(value, 'number', 'uniform ' + name, env.commandStr)\n infix = '1f'\n break\n case GL_FLOAT_VEC2:\n check$1.command(\n isArrayLike(value) && value.length === 2,\n 'uniform ' + name, env.commandStr)\n infix = '2f'\n break\n case GL_FLOAT_VEC3:\n check$1.command(\n isArrayLike(value) && value.length === 3,\n 'uniform ' + name, env.commandStr)\n infix = '3f'\n break\n case GL_FLOAT_VEC4:\n check$1.command(\n isArrayLike(value) && value.length === 4,\n 'uniform ' + name, env.commandStr)\n infix = '4f'\n break\n case GL_BOOL:\n check$1.commandType(value, 'boolean', 'uniform ' + name, env.commandStr)\n infix = '1i'\n break\n case GL_INT$3:\n check$1.commandType(value, 'number', 'uniform ' + name, env.commandStr)\n infix = '1i'\n break\n case GL_BOOL_VEC2:\n check$1.command(\n isArrayLike(value) && value.length === 2,\n 'uniform ' + name, env.commandStr)\n infix = '2i'\n break\n case GL_INT_VEC2:\n check$1.command(\n isArrayLike(value) && value.length === 2,\n 'uniform ' + name, env.commandStr)\n infix = '2i'\n break\n case GL_BOOL_VEC3:\n check$1.command(\n isArrayLike(value) && value.length === 3,\n 'uniform ' + name, env.commandStr)\n infix = '3i'\n break\n case GL_INT_VEC3:\n check$1.command(\n isArrayLike(value) && value.length === 3,\n 'uniform ' + name, env.commandStr)\n infix = '3i'\n break\n case GL_BOOL_VEC4:\n check$1.command(\n isArrayLike(value) && value.length === 4,\n 'uniform ' + name, env.commandStr)\n infix = '4i'\n break\n case GL_INT_VEC4:\n check$1.command(\n isArrayLike(value) && value.length === 4,\n 'uniform ' + name, env.commandStr)\n infix = '4i'\n break\n }\n scope(GL, '.uniform', infix, '(', LOCATION, ',',\n isArrayLike(value) ? Array.prototype.slice.call(value) : value,\n ');')\n }\n continue\n } else {\n VALUE = arg.append(env, scope)\n }\n } else {\n if (!filter(SCOPE_DECL)) {\n continue\n }\n VALUE = scope.def(shared.uniforms, '[', stringStore.id(name), ']')\n }\n\n if (type === GL_SAMPLER_2D) {\n scope(\n 'if(', VALUE, '&&', VALUE, '._reglType===\"framebuffer\"){',\n VALUE, '=', VALUE, '.color[0];',\n '}')\n } else if (type === GL_SAMPLER_CUBE) {\n scope(\n 'if(', VALUE, '&&', VALUE, '._reglType===\"framebufferCube\"){',\n VALUE, '=', VALUE, '.color[0];',\n '}')\n }\n\n // perform type validation\n check$1.optional(function () {\n function check (pred, message) {\n env.assert(scope, pred,\n 'bad data or missing for uniform \"' + name + '\". ' + message)\n }\n\n function checkType (type) {\n check(\n 'typeof ' + VALUE + '===\"' + type + '\"',\n 'invalid type, expected ' + type)\n }\n\n function checkVector (n, type) {\n check(\n shared.isArrayLike + '(' + VALUE + ')&&' + VALUE + '.length===' + n,\n 'invalid vector, should have length ' + n, env.commandStr)\n }\n\n function checkTexture (target) {\n check(\n 'typeof ' + VALUE + '===\"function\"&&' +\n VALUE + '._reglType===\"texture' +\n (target === GL_TEXTURE_2D$3 ? '2d' : 'Cube') + '\"',\n 'invalid texture type', env.commandStr)\n }\n\n switch (type) {\n case GL_INT$3:\n checkType('number')\n break\n case GL_INT_VEC2:\n checkVector(2, 'number')\n break\n case GL_INT_VEC3:\n checkVector(3, 'number')\n break\n case GL_INT_VEC4:\n checkVector(4, 'number')\n break\n case GL_FLOAT$8:\n checkType('number')\n break\n case GL_FLOAT_VEC2:\n checkVector(2, 'number')\n break\n case GL_FLOAT_VEC3:\n checkVector(3, 'number')\n break\n case GL_FLOAT_VEC4:\n checkVector(4, 'number')\n break\n case GL_BOOL:\n checkType('boolean')\n break\n case GL_BOOL_VEC2:\n checkVector(2, 'boolean')\n break\n case GL_BOOL_VEC3:\n checkVector(3, 'boolean')\n break\n case GL_BOOL_VEC4:\n checkVector(4, 'boolean')\n break\n case GL_FLOAT_MAT2:\n checkVector(4, 'number')\n break\n case GL_FLOAT_MAT3:\n checkVector(9, 'number')\n break\n case GL_FLOAT_MAT4:\n checkVector(16, 'number')\n break\n case GL_SAMPLER_2D:\n checkTexture(GL_TEXTURE_2D$3)\n break\n case GL_SAMPLER_CUBE:\n checkTexture(GL_TEXTURE_CUBE_MAP$2)\n break\n }\n })\n\n var unroll = 1\n switch (type) {\n case GL_SAMPLER_2D:\n case GL_SAMPLER_CUBE:\n var TEX = scope.def(VALUE, '._texture')\n scope(GL, '.uniform1i(', LOCATION, ',', TEX, '.bind());')\n scope.exit(TEX, '.unbind();')\n continue\n\n case GL_INT$3:\n case GL_BOOL:\n infix = '1i'\n break\n\n case GL_INT_VEC2:\n case GL_BOOL_VEC2:\n infix = '2i'\n unroll = 2\n break\n\n case GL_INT_VEC3:\n case GL_BOOL_VEC3:\n infix = '3i'\n unroll = 3\n break\n\n case GL_INT_VEC4:\n case GL_BOOL_VEC4:\n infix = '4i'\n unroll = 4\n break\n\n case GL_FLOAT$8:\n infix = '1f'\n break\n\n case GL_FLOAT_VEC2:\n infix = '2f'\n unroll = 2\n break\n\n case GL_FLOAT_VEC3:\n infix = '3f'\n unroll = 3\n break\n\n case GL_FLOAT_VEC4:\n infix = '4f'\n unroll = 4\n break\n\n case GL_FLOAT_MAT2:\n infix = 'Matrix2fv'\n break\n\n case GL_FLOAT_MAT3:\n infix = 'Matrix3fv'\n break\n\n case GL_FLOAT_MAT4:\n infix = 'Matrix4fv'\n break\n }\n\n scope(GL, '.uniform', infix, '(', LOCATION, ',')\n if (infix.charAt(0) === 'M') {\n var matSize = Math.pow(type - GL_FLOAT_MAT2 + 2, 2)\n var STORAGE = env.global.def('new Float32Array(', matSize, ')')\n scope(\n 'false,(Array.isArray(', VALUE, ')||', VALUE, ' instanceof Float32Array)?', VALUE, ':(',\n loop(matSize, function (i) {\n return STORAGE + '[' + i + ']=' + VALUE + '[' + i + ']'\n }), ',', STORAGE, ')')\n } else if (unroll > 1) {\n scope(loop(unroll, function (i) {\n return VALUE + '[' + i + ']'\n }))\n } else {\n scope(VALUE)\n }\n scope(');')\n }\n }\n\n function emitDraw (env, outer, inner, args) {\n var shared = env.shared\n var GL = shared.gl\n var DRAW_STATE = shared.draw\n\n var drawOptions = args.draw\n\n function emitElements () {\n var defn = drawOptions.elements\n var ELEMENTS\n var scope = outer\n if (defn) {\n if ((defn.contextDep && args.contextDynamic) || defn.propDep) {\n scope = inner\n }\n ELEMENTS = defn.append(env, scope)\n } else {\n ELEMENTS = scope.def(DRAW_STATE, '.', S_ELEMENTS)\n }\n if (ELEMENTS) {\n scope(\n 'if(' + ELEMENTS + ')' +\n GL + '.bindBuffer(' + GL_ELEMENT_ARRAY_BUFFER$1 + ',' + ELEMENTS + '.buffer.buffer);')\n }\n return ELEMENTS\n }\n\n function emitCount () {\n var defn = drawOptions.count\n var COUNT\n var scope = outer\n if (defn) {\n if ((defn.contextDep && args.contextDynamic) || defn.propDep) {\n scope = inner\n }\n COUNT = defn.append(env, scope)\n check$1.optional(function () {\n if (defn.MISSING) {\n env.assert(outer, 'false', 'missing vertex count')\n }\n if (defn.DYNAMIC) {\n env.assert(scope, COUNT + '>=0', 'missing vertex count')\n }\n })\n } else {\n COUNT = scope.def(DRAW_STATE, '.', S_COUNT)\n check$1.optional(function () {\n env.assert(scope, COUNT + '>=0', 'missing vertex count')\n })\n }\n return COUNT\n }\n\n var ELEMENTS = emitElements()\n function emitValue (name) {\n var defn = drawOptions[name]\n if (defn) {\n if ((defn.contextDep && args.contextDynamic) || defn.propDep) {\n return defn.append(env, inner)\n } else {\n return defn.append(env, outer)\n }\n } else {\n return outer.def(DRAW_STATE, '.', name)\n }\n }\n\n var PRIMITIVE = emitValue(S_PRIMITIVE)\n var OFFSET = emitValue(S_OFFSET)\n\n var COUNT = emitCount()\n if (typeof COUNT === 'number') {\n if (COUNT === 0) {\n return\n }\n } else {\n inner('if(', COUNT, '){')\n inner.exit('}')\n }\n\n var INSTANCES, EXT_INSTANCING\n if (extInstancing) {\n INSTANCES = emitValue(S_INSTANCES)\n EXT_INSTANCING = env.instancing\n }\n\n var ELEMENT_TYPE = ELEMENTS + '.type'\n\n var elementsStatic = drawOptions.elements && isStatic(drawOptions.elements)\n\n function emitInstancing () {\n function drawElements () {\n inner(EXT_INSTANCING, '.drawElementsInstancedANGLE(', [\n PRIMITIVE,\n COUNT,\n ELEMENT_TYPE,\n OFFSET + '<<((' + ELEMENT_TYPE + '-' + GL_UNSIGNED_BYTE$8 + ')>>1)',\n INSTANCES\n ], ');')\n }\n\n function drawArrays () {\n inner(EXT_INSTANCING, '.drawArraysInstancedANGLE(',\n [PRIMITIVE, OFFSET, COUNT, INSTANCES], ');')\n }\n\n if (ELEMENTS) {\n if (!elementsStatic) {\n inner('if(', ELEMENTS, '){')\n drawElements()\n inner('}else{')\n drawArrays()\n inner('}')\n } else {\n drawElements()\n }\n } else {\n drawArrays()\n }\n }\n\n function emitRegular () {\n function drawElements () {\n inner(GL + '.drawElements(' + [\n PRIMITIVE,\n COUNT,\n ELEMENT_TYPE,\n OFFSET + '<<((' + ELEMENT_TYPE + '-' + GL_UNSIGNED_BYTE$8 + ')>>1)'\n ] + ');')\n }\n\n function drawArrays () {\n inner(GL + '.drawArrays(' + [PRIMITIVE, OFFSET, COUNT] + ');')\n }\n\n if (ELEMENTS) {\n if (!elementsStatic) {\n inner('if(', ELEMENTS, '){')\n drawElements()\n inner('}else{')\n drawArrays()\n inner('}')\n } else {\n drawElements()\n }\n } else {\n drawArrays()\n }\n }\n\n if (extInstancing && (typeof INSTANCES !== 'number' || INSTANCES >= 0)) {\n if (typeof INSTANCES === 'string') {\n inner('if(', INSTANCES, '>0){')\n emitInstancing()\n inner('}else if(', INSTANCES, '<0){')\n emitRegular()\n inner('}')\n } else {\n emitInstancing()\n }\n } else {\n emitRegular()\n }\n }\n\n function createBody (emitBody, parentEnv, args, program, count) {\n var env = createREGLEnvironment()\n var scope = env.proc('body', count)\n check$1.optional(function () {\n env.commandStr = parentEnv.commandStr\n env.command = env.link(parentEnv.commandStr)\n })\n if (extInstancing) {\n env.instancing = scope.def(\n env.shared.extensions, '.angle_instanced_arrays')\n }\n emitBody(env, scope, args, program)\n return env.compile().body\n }\n\n // ===================================================\n // ===================================================\n // DRAW PROC\n // ===================================================\n // ===================================================\n function emitDrawBody (env, draw, args, program) {\n injectExtensions(env, draw)\n if (args.useVAO) {\n if (args.drawVAO) {\n draw(env.shared.vao, '.setVAO(', args.drawVAO.append(env, draw), ');')\n } else {\n draw(env.shared.vao, '.setVAO(', env.shared.vao, '.targetVAO);')\n }\n } else {\n draw(env.shared.vao, '.setVAO(null);')\n emitAttributes(env, draw, args, program.attributes, function () {\n return true\n })\n }\n emitUniforms(env, draw, args, program.uniforms, function () {\n return true\n })\n emitDraw(env, draw, draw, args)\n }\n\n function emitDrawProc (env, args) {\n var draw = env.proc('draw', 1)\n\n injectExtensions(env, draw)\n\n emitContext(env, draw, args.context)\n emitPollFramebuffer(env, draw, args.framebuffer)\n\n emitPollState(env, draw, args)\n emitSetOptions(env, draw, args.state)\n\n emitProfile(env, draw, args, false, true)\n\n var program = args.shader.progVar.append(env, draw)\n draw(env.shared.gl, '.useProgram(', program, '.program);')\n\n if (args.shader.program) {\n emitDrawBody(env, draw, args, args.shader.program)\n } else {\n draw(env.shared.vao, '.setVAO(null);')\n var drawCache = env.global.def('{}')\n var PROG_ID = draw.def(program, '.id')\n var CACHED_PROC = draw.def(drawCache, '[', PROG_ID, ']')\n draw(\n env.cond(CACHED_PROC)\n .then(CACHED_PROC, '.call(this,a0);')\n .else(\n CACHED_PROC, '=', drawCache, '[', PROG_ID, ']=',\n env.link(function (program) {\n return createBody(emitDrawBody, env, args, program, 1)\n }), '(', program, ');',\n CACHED_PROC, '.call(this,a0);'))\n }\n\n if (Object.keys(args.state).length > 0) {\n draw(env.shared.current, '.dirty=true;')\n }\n }\n\n // ===================================================\n // ===================================================\n // BATCH PROC\n // ===================================================\n // ===================================================\n\n function emitBatchDynamicShaderBody (env, scope, args, program) {\n env.batchId = 'a1'\n\n injectExtensions(env, scope)\n\n function all () {\n return true\n }\n\n emitAttributes(env, scope, args, program.attributes, all)\n emitUniforms(env, scope, args, program.uniforms, all)\n emitDraw(env, scope, scope, args)\n }\n\n function emitBatchBody (env, scope, args, program) {\n injectExtensions(env, scope)\n\n var contextDynamic = args.contextDep\n\n var BATCH_ID = scope.def()\n var PROP_LIST = 'a0'\n var NUM_PROPS = 'a1'\n var PROPS = scope.def()\n env.shared.props = PROPS\n env.batchId = BATCH_ID\n\n var outer = env.scope()\n var inner = env.scope()\n\n scope(\n outer.entry,\n 'for(', BATCH_ID, '=0;', BATCH_ID, '<', NUM_PROPS, ';++', BATCH_ID, '){',\n PROPS, '=', PROP_LIST, '[', BATCH_ID, '];',\n inner,\n '}',\n outer.exit)\n\n function isInnerDefn (defn) {\n return ((defn.contextDep && contextDynamic) || defn.propDep)\n }\n\n function isOuterDefn (defn) {\n return !isInnerDefn(defn)\n }\n\n if (args.needsContext) {\n emitContext(env, inner, args.context)\n }\n if (args.needsFramebuffer) {\n emitPollFramebuffer(env, inner, args.framebuffer)\n }\n emitSetOptions(env, inner, args.state, isInnerDefn)\n\n if (args.profile && isInnerDefn(args.profile)) {\n emitProfile(env, inner, args, false, true)\n }\n\n if (!program) {\n var progCache = env.global.def('{}')\n var PROGRAM = args.shader.progVar.append(env, inner)\n var PROG_ID = inner.def(PROGRAM, '.id')\n var CACHED_PROC = inner.def(progCache, '[', PROG_ID, ']')\n inner(\n env.shared.gl, '.useProgram(', PROGRAM, '.program);',\n 'if(!', CACHED_PROC, '){',\n CACHED_PROC, '=', progCache, '[', PROG_ID, ']=',\n env.link(function (program) {\n return createBody(\n emitBatchDynamicShaderBody, env, args, program, 2)\n }), '(', PROGRAM, ');}',\n CACHED_PROC, '.call(this,a0[', BATCH_ID, '],', BATCH_ID, ');')\n } else {\n if (args.useVAO) {\n if (args.drawVAO) {\n if (isInnerDefn(args.drawVAO)) {\n // vao is a prop\n inner(env.shared.vao, '.setVAO(', args.drawVAO.append(env, inner), ');')\n } else {\n // vao is invariant\n outer(env.shared.vao, '.setVAO(', args.drawVAO.append(env, outer), ');')\n }\n } else {\n // scoped vao binding\n outer(env.shared.vao, '.setVAO(', env.shared.vao, '.targetVAO);')\n }\n } else {\n outer(env.shared.vao, '.setVAO(null);')\n emitAttributes(env, outer, args, program.attributes, isOuterDefn)\n emitAttributes(env, inner, args, program.attributes, isInnerDefn)\n }\n emitUniforms(env, outer, args, program.uniforms, isOuterDefn)\n emitUniforms(env, inner, args, program.uniforms, isInnerDefn)\n emitDraw(env, outer, inner, args)\n }\n }\n\n function emitBatchProc (env, args) {\n var batch = env.proc('batch', 2)\n env.batchId = '0'\n\n injectExtensions(env, batch)\n\n // Check if any context variables depend on props\n var contextDynamic = false\n var needsContext = true\n Object.keys(args.context).forEach(function (name) {\n contextDynamic = contextDynamic || args.context[name].propDep\n })\n if (!contextDynamic) {\n emitContext(env, batch, args.context)\n needsContext = false\n }\n\n // framebuffer state affects framebufferWidth/height context vars\n var framebuffer = args.framebuffer\n var needsFramebuffer = false\n if (framebuffer) {\n if (framebuffer.propDep) {\n contextDynamic = needsFramebuffer = true\n } else if (framebuffer.contextDep && contextDynamic) {\n needsFramebuffer = true\n }\n if (!needsFramebuffer) {\n emitPollFramebuffer(env, batch, framebuffer)\n }\n } else {\n emitPollFramebuffer(env, batch, null)\n }\n\n // viewport is weird because it can affect context vars\n if (args.state.viewport && args.state.viewport.propDep) {\n contextDynamic = true\n }\n\n function isInnerDefn (defn) {\n return (defn.contextDep && contextDynamic) || defn.propDep\n }\n\n // set webgl options\n emitPollState(env, batch, args)\n emitSetOptions(env, batch, args.state, function (defn) {\n return !isInnerDefn(defn)\n })\n\n if (!args.profile || !isInnerDefn(args.profile)) {\n emitProfile(env, batch, args, false, 'a1')\n }\n\n // Save these values to args so that the batch body routine can use them\n args.contextDep = contextDynamic\n args.needsContext = needsContext\n args.needsFramebuffer = needsFramebuffer\n\n // determine if shader is dynamic\n var progDefn = args.shader.progVar\n if ((progDefn.contextDep && contextDynamic) || progDefn.propDep) {\n emitBatchBody(\n env,\n batch,\n args,\n null)\n } else {\n var PROGRAM = progDefn.append(env, batch)\n batch(env.shared.gl, '.useProgram(', PROGRAM, '.program);')\n if (args.shader.program) {\n emitBatchBody(\n env,\n batch,\n args,\n args.shader.program)\n } else {\n batch(env.shared.vao, '.setVAO(null);')\n var batchCache = env.global.def('{}')\n var PROG_ID = batch.def(PROGRAM, '.id')\n var CACHED_PROC = batch.def(batchCache, '[', PROG_ID, ']')\n batch(\n env.cond(CACHED_PROC)\n .then(CACHED_PROC, '.call(this,a0,a1);')\n .else(\n CACHED_PROC, '=', batchCache, '[', PROG_ID, ']=',\n env.link(function (program) {\n return createBody(emitBatchBody, env, args, program, 2)\n }), '(', PROGRAM, ');',\n CACHED_PROC, '.call(this,a0,a1);'))\n }\n }\n\n if (Object.keys(args.state).length > 0) {\n batch(env.shared.current, '.dirty=true;')\n }\n }\n\n // ===================================================\n // ===================================================\n // SCOPE COMMAND\n // ===================================================\n // ===================================================\n function emitScopeProc (env, args) {\n var scope = env.proc('scope', 3)\n env.batchId = 'a2'\n\n var shared = env.shared\n var CURRENT_STATE = shared.current\n\n emitContext(env, scope, args.context)\n\n if (args.framebuffer) {\n args.framebuffer.append(env, scope)\n }\n\n sortState(Object.keys(args.state)).forEach(function (name) {\n var defn = args.state[name]\n var value = defn.append(env, scope)\n if (isArrayLike(value)) {\n value.forEach(function (v, i) {\n scope.set(env.next[name], '[' + i + ']', v)\n })\n } else {\n scope.set(shared.next, '.' + name, value)\n }\n })\n\n emitProfile(env, scope, args, true, true)\n\n ;[S_ELEMENTS, S_OFFSET, S_COUNT, S_INSTANCES, S_PRIMITIVE].forEach(\n function (opt) {\n var variable = args.draw[opt]\n if (!variable) {\n return\n }\n scope.set(shared.draw, '.' + opt, '' + variable.append(env, scope))\n })\n\n Object.keys(args.uniforms).forEach(function (opt) {\n scope.set(\n shared.uniforms,\n '[' + stringStore.id(opt) + ']',\n args.uniforms[opt].append(env, scope))\n })\n\n Object.keys(args.attributes).forEach(function (name) {\n var record = args.attributes[name].append(env, scope)\n var scopeAttrib = env.scopeAttrib(name)\n Object.keys(new AttributeRecord()).forEach(function (prop) {\n scope.set(scopeAttrib, '.' + prop, record[prop])\n })\n })\n\n if (args.scopeVAO) {\n scope.set(shared.vao, '.targetVAO', args.scopeVAO.append(env, scope))\n }\n\n function saveShader (name) {\n var shader = args.shader[name]\n if (shader) {\n scope.set(shared.shader, '.' + name, shader.append(env, scope))\n }\n }\n saveShader(S_VERT)\n saveShader(S_FRAG)\n\n if (Object.keys(args.state).length > 0) {\n scope(CURRENT_STATE, '.dirty=true;')\n scope.exit(CURRENT_STATE, '.dirty=true;')\n }\n\n scope('a1(', env.shared.context, ',a0,', env.batchId, ');')\n }\n\n function isDynamicObject (object) {\n if (typeof object !== 'object' || isArrayLike(object)) {\n return\n }\n var props = Object.keys(object)\n for (var i = 0; i < props.length; ++i) {\n if (dynamic.isDynamic(object[props[i]])) {\n return true\n }\n }\n return false\n }\n\n function splatObject (env, options, name) {\n var object = options.static[name]\n if (!object || !isDynamicObject(object)) {\n return\n }\n\n var globals = env.global\n var keys = Object.keys(object)\n var thisDep = false\n var contextDep = false\n var propDep = false\n var objectRef = env.global.def('{}')\n keys.forEach(function (key) {\n var value = object[key]\n if (dynamic.isDynamic(value)) {\n if (typeof value === 'function') {\n value = object[key] = dynamic.unbox(value)\n }\n var deps = createDynamicDecl(value, null)\n thisDep = thisDep || deps.thisDep\n propDep = propDep || deps.propDep\n contextDep = contextDep || deps.contextDep\n } else {\n globals(objectRef, '.', key, '=')\n switch (typeof value) {\n case 'number':\n globals(value)\n break\n case 'string':\n globals('\"', value, '\"')\n break\n case 'object':\n if (Array.isArray(value)) {\n globals('[', value.join(), ']')\n }\n break\n default:\n globals(env.link(value))\n break\n }\n globals(';')\n }\n })\n\n function appendBlock (env, block) {\n keys.forEach(function (key) {\n var value = object[key]\n if (!dynamic.isDynamic(value)) {\n return\n }\n var ref = env.invoke(block, value)\n block(objectRef, '.', key, '=', ref, ';')\n })\n }\n\n options.dynamic[name] = new dynamic.DynamicVariable(DYN_THUNK, {\n thisDep: thisDep,\n contextDep: contextDep,\n propDep: propDep,\n ref: objectRef,\n append: appendBlock\n })\n delete options.static[name]\n }\n\n // ===========================================================================\n // ===========================================================================\n // MAIN DRAW COMMAND\n // ===========================================================================\n // ===========================================================================\n function compileCommand (options, attributes, uniforms, context, stats) {\n var env = createREGLEnvironment()\n\n // link stats, so that we can easily access it in the program.\n env.stats = env.link(stats)\n\n // splat options and attributes to allow for dynamic nested properties\n Object.keys(attributes.static).forEach(function (key) {\n splatObject(env, attributes, key)\n })\n NESTED_OPTIONS.forEach(function (name) {\n splatObject(env, options, name)\n })\n\n var args = parseArguments(options, attributes, uniforms, context, env)\n\n emitDrawProc(env, args)\n emitScopeProc(env, args)\n emitBatchProc(env, args)\n\n return env.compile()\n }\n\n // ===========================================================================\n // ===========================================================================\n // POLL / REFRESH\n // ===========================================================================\n // ===========================================================================\n return {\n next: nextState,\n current: currentState,\n procs: (function () {\n var env = createREGLEnvironment()\n var poll = env.proc('poll')\n var refresh = env.proc('refresh')\n var common = env.block()\n poll(common)\n refresh(common)\n\n var shared = env.shared\n var GL = shared.gl\n var NEXT_STATE = shared.next\n var CURRENT_STATE = shared.current\n\n common(CURRENT_STATE, '.dirty=false;')\n\n emitPollFramebuffer(env, poll)\n emitPollFramebuffer(env, refresh, null, true)\n\n // Refresh updates all attribute state changes\n var INSTANCING\n if (extInstancing) {\n INSTANCING = env.link(extInstancing)\n }\n\n // update vertex array bindings\n if (extensions.oes_vertex_array_object) {\n refresh(env.link(extensions.oes_vertex_array_object), '.bindVertexArrayOES(null);')\n }\n for (var i = 0; i < limits.maxAttributes; ++i) {\n var BINDING = refresh.def(shared.attributes, '[', i, ']')\n var ifte = env.cond(BINDING, '.buffer')\n ifte.then(\n GL, '.enableVertexAttribArray(', i, ');',\n GL, '.bindBuffer(',\n GL_ARRAY_BUFFER$2, ',',\n BINDING, '.buffer.buffer);',\n GL, '.vertexAttribPointer(',\n i, ',',\n BINDING, '.size,',\n BINDING, '.type,',\n BINDING, '.normalized,',\n BINDING, '.stride,',\n BINDING, '.offset);'\n ).else(\n GL, '.disableVertexAttribArray(', i, ');',\n GL, '.vertexAttrib4f(',\n i, ',',\n BINDING, '.x,',\n BINDING, '.y,',\n BINDING, '.z,',\n BINDING, '.w);',\n BINDING, '.buffer=null;')\n refresh(ifte)\n if (extInstancing) {\n refresh(\n INSTANCING, '.vertexAttribDivisorANGLE(',\n i, ',',\n BINDING, '.divisor);')\n }\n }\n refresh(\n env.shared.vao, '.currentVAO=null;',\n env.shared.vao, '.setVAO(', env.shared.vao, '.targetVAO);')\n\n Object.keys(GL_FLAGS).forEach(function (flag) {\n var cap = GL_FLAGS[flag]\n var NEXT = common.def(NEXT_STATE, '.', flag)\n var block = env.block()\n block('if(', NEXT, '){',\n GL, '.enable(', cap, ')}else{',\n GL, '.disable(', cap, ')}',\n CURRENT_STATE, '.', flag, '=', NEXT, ';')\n refresh(block)\n poll(\n 'if(', NEXT, '!==', CURRENT_STATE, '.', flag, '){',\n block,\n '}')\n })\n\n Object.keys(GL_VARIABLES).forEach(function (name) {\n var func = GL_VARIABLES[name]\n var init = currentState[name]\n var NEXT, CURRENT\n var block = env.block()\n block(GL, '.', func, '(')\n if (isArrayLike(init)) {\n var n = init.length\n NEXT = env.global.def(NEXT_STATE, '.', name)\n CURRENT = env.global.def(CURRENT_STATE, '.', name)\n block(\n loop(n, function (i) {\n return NEXT + '[' + i + ']'\n }), ');',\n loop(n, function (i) {\n return CURRENT + '[' + i + ']=' + NEXT + '[' + i + '];'\n }).join(''))\n poll(\n 'if(', loop(n, function (i) {\n return NEXT + '[' + i + ']!==' + CURRENT + '[' + i + ']'\n }).join('||'), '){',\n block,\n '}')\n } else {\n NEXT = common.def(NEXT_STATE, '.', name)\n CURRENT = common.def(CURRENT_STATE, '.', name)\n block(\n NEXT, ');',\n CURRENT_STATE, '.', name, '=', NEXT, ';')\n poll(\n 'if(', NEXT, '!==', CURRENT, '){',\n block,\n '}')\n }\n refresh(block)\n })\n\n return env.compile()\n })(),\n compile: compileCommand\n }\n}\n\nfunction stats () {\n return {\n vaoCount: 0,\n bufferCount: 0,\n elementsCount: 0,\n framebufferCount: 0,\n shaderCount: 0,\n textureCount: 0,\n cubeCount: 0,\n renderbufferCount: 0,\n maxTextureUnits: 0\n }\n}\n\nvar GL_QUERY_RESULT_EXT = 0x8866\nvar GL_QUERY_RESULT_AVAILABLE_EXT = 0x8867\nvar GL_TIME_ELAPSED_EXT = 0x88BF\n\nvar createTimer = function (gl, extensions) {\n if (!extensions.ext_disjoint_timer_query) {\n return null\n }\n\n // QUERY POOL BEGIN\n var queryPool = []\n function allocQuery () {\n return queryPool.pop() || extensions.ext_disjoint_timer_query.createQueryEXT()\n }\n function freeQuery (query) {\n queryPool.push(query)\n }\n // QUERY POOL END\n\n var pendingQueries = []\n function beginQuery (stats) {\n var query = allocQuery()\n extensions.ext_disjoint_timer_query.beginQueryEXT(GL_TIME_ELAPSED_EXT, query)\n pendingQueries.push(query)\n pushScopeStats(pendingQueries.length - 1, pendingQueries.length, stats)\n }\n\n function endQuery () {\n extensions.ext_disjoint_timer_query.endQueryEXT(GL_TIME_ELAPSED_EXT)\n }\n\n //\n // Pending stats pool.\n //\n function PendingStats () {\n this.startQueryIndex = -1\n this.endQueryIndex = -1\n this.sum = 0\n this.stats = null\n }\n var pendingStatsPool = []\n function allocPendingStats () {\n return pendingStatsPool.pop() || new PendingStats()\n }\n function freePendingStats (pendingStats) {\n pendingStatsPool.push(pendingStats)\n }\n // Pending stats pool end\n\n var pendingStats = []\n function pushScopeStats (start, end, stats) {\n var ps = allocPendingStats()\n ps.startQueryIndex = start\n ps.endQueryIndex = end\n ps.sum = 0\n ps.stats = stats\n pendingStats.push(ps)\n }\n\n // we should call this at the beginning of the frame,\n // in order to update gpuTime\n var timeSum = []\n var queryPtr = []\n function update () {\n var ptr, i\n\n var n = pendingQueries.length\n if (n === 0) {\n return\n }\n\n // Reserve space\n queryPtr.length = Math.max(queryPtr.length, n + 1)\n timeSum.length = Math.max(timeSum.length, n + 1)\n timeSum[0] = 0\n queryPtr[0] = 0\n\n // Update all pending timer queries\n var queryTime = 0\n ptr = 0\n for (i = 0; i < pendingQueries.length; ++i) {\n var query = pendingQueries[i]\n if (extensions.ext_disjoint_timer_query.getQueryObjectEXT(query, GL_QUERY_RESULT_AVAILABLE_EXT)) {\n queryTime += extensions.ext_disjoint_timer_query.getQueryObjectEXT(query, GL_QUERY_RESULT_EXT)\n freeQuery(query)\n } else {\n pendingQueries[ptr++] = query\n }\n timeSum[i + 1] = queryTime\n queryPtr[i + 1] = ptr\n }\n pendingQueries.length = ptr\n\n // Update all pending stat queries\n ptr = 0\n for (i = 0; i < pendingStats.length; ++i) {\n var stats = pendingStats[i]\n var start = stats.startQueryIndex\n var end = stats.endQueryIndex\n stats.sum += timeSum[end] - timeSum[start]\n var startPtr = queryPtr[start]\n var endPtr = queryPtr[end]\n if (endPtr === startPtr) {\n stats.stats.gpuTime += stats.sum / 1e6\n freePendingStats(stats)\n } else {\n stats.startQueryIndex = startPtr\n stats.endQueryIndex = endPtr\n pendingStats[ptr++] = stats\n }\n }\n pendingStats.length = ptr\n }\n\n return {\n beginQuery: beginQuery,\n endQuery: endQuery,\n pushScopeStats: pushScopeStats,\n update: update,\n getNumPendingQueries: function () {\n return pendingQueries.length\n },\n clear: function () {\n queryPool.push.apply(queryPool, pendingQueries)\n for (var i = 0; i < queryPool.length; i++) {\n extensions.ext_disjoint_timer_query.deleteQueryEXT(queryPool[i])\n }\n pendingQueries.length = 0\n queryPool.length = 0\n },\n restore: function () {\n pendingQueries.length = 0\n queryPool.length = 0\n }\n }\n}\n\nvar GL_COLOR_BUFFER_BIT = 16384\nvar GL_DEPTH_BUFFER_BIT = 256\nvar GL_STENCIL_BUFFER_BIT = 1024\n\nvar GL_ARRAY_BUFFER = 34962\n\nvar CONTEXT_LOST_EVENT = 'webglcontextlost'\nvar CONTEXT_RESTORED_EVENT = 'webglcontextrestored'\n\nvar DYN_PROP = 1\nvar DYN_CONTEXT = 2\nvar DYN_STATE = 3\n\nfunction find (haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) {\n return i\n }\n }\n return -1\n}\n\nfunction wrapREGL (args) {\n var config = parseArgs(args)\n if (!config) {\n return null\n }\n\n var gl = config.gl\n var glAttributes = gl.getContextAttributes()\n var contextLost = gl.isContextLost()\n\n var extensionState = createExtensionCache(gl, config)\n if (!extensionState) {\n return null\n }\n\n var stringStore = createStringStore()\n var stats$$1 = stats()\n var extensions = extensionState.extensions\n var timer = createTimer(gl, extensions)\n\n var START_TIME = clock()\n var WIDTH = gl.drawingBufferWidth\n var HEIGHT = gl.drawingBufferHeight\n\n var contextState = {\n tick: 0,\n time: 0,\n viewportWidth: WIDTH,\n viewportHeight: HEIGHT,\n framebufferWidth: WIDTH,\n framebufferHeight: HEIGHT,\n drawingBufferWidth: WIDTH,\n drawingBufferHeight: HEIGHT,\n pixelRatio: config.pixelRatio\n }\n var uniformState = {}\n var drawState = {\n elements: null,\n primitive: 4, // GL_TRIANGLES\n count: -1,\n offset: 0,\n instances: -1\n }\n\n var limits = wrapLimits(gl, extensions)\n var bufferState = wrapBufferState(\n gl,\n stats$$1,\n config,\n destroyBuffer)\n var attributeState = wrapAttributeState(\n gl,\n extensions,\n limits,\n stats$$1,\n bufferState)\n function destroyBuffer (buffer) {\n return attributeState.destroyBuffer(buffer)\n }\n var elementState = wrapElementsState(gl, extensions, bufferState, stats$$1)\n var shaderState = wrapShaderState(gl, stringStore, stats$$1, config)\n var textureState = createTextureSet(\n gl,\n extensions,\n limits,\n function () { core.procs.poll() },\n contextState,\n stats$$1,\n config)\n var renderbufferState = wrapRenderbuffers(gl, extensions, limits, stats$$1, config)\n var framebufferState = wrapFBOState(\n gl,\n extensions,\n limits,\n textureState,\n renderbufferState,\n stats$$1)\n var core = reglCore(\n gl,\n stringStore,\n extensions,\n limits,\n bufferState,\n elementState,\n textureState,\n framebufferState,\n uniformState,\n attributeState,\n shaderState,\n drawState,\n contextState,\n timer,\n config)\n var readPixels = wrapReadPixels(\n gl,\n framebufferState,\n core.procs.poll,\n contextState,\n glAttributes, extensions, limits)\n\n var nextState = core.next\n var canvas = gl.canvas\n\n var rafCallbacks = []\n var lossCallbacks = []\n var restoreCallbacks = []\n var destroyCallbacks = [config.onDestroy]\n\n var activeRAF = null\n function handleRAF () {\n if (rafCallbacks.length === 0) {\n if (timer) {\n timer.update()\n }\n activeRAF = null\n return\n }\n\n // schedule next animation frame\n activeRAF = raf.next(handleRAF)\n\n // poll for changes\n poll()\n\n // fire a callback for all pending rafs\n for (var i = rafCallbacks.length - 1; i >= 0; --i) {\n var cb = rafCallbacks[i]\n if (cb) {\n cb(contextState, null, 0)\n }\n }\n\n // flush all pending webgl calls\n gl.flush()\n\n // poll GPU timers *after* gl.flush so we don't delay command dispatch\n if (timer) {\n timer.update()\n }\n }\n\n function startRAF () {\n if (!activeRAF && rafCallbacks.length > 0) {\n activeRAF = raf.next(handleRAF)\n }\n }\n\n function stopRAF () {\n if (activeRAF) {\n raf.cancel(handleRAF)\n activeRAF = null\n }\n }\n\n function handleContextLoss (event) {\n event.preventDefault()\n\n // set context lost flag\n contextLost = true\n\n // pause request animation frame\n stopRAF()\n\n // lose context\n lossCallbacks.forEach(function (cb) {\n cb()\n })\n }\n\n function handleContextRestored (event) {\n // clear error code\n gl.getError()\n\n // clear context lost flag\n contextLost = false\n\n // refresh state\n extensionState.restore()\n shaderState.restore()\n bufferState.restore()\n textureState.restore()\n renderbufferState.restore()\n framebufferState.restore()\n attributeState.restore()\n if (timer) {\n timer.restore()\n }\n\n // refresh state\n core.procs.refresh()\n\n // restart RAF\n startRAF()\n\n // restore context\n restoreCallbacks.forEach(function (cb) {\n cb()\n })\n }\n\n if (canvas) {\n canvas.addEventListener(CONTEXT_LOST_EVENT, handleContextLoss, false)\n canvas.addEventListener(CONTEXT_RESTORED_EVENT, handleContextRestored, false)\n }\n\n function destroy () {\n rafCallbacks.length = 0\n stopRAF()\n\n if (canvas) {\n canvas.removeEventListener(CONTEXT_LOST_EVENT, handleContextLoss)\n canvas.removeEventListener(CONTEXT_RESTORED_EVENT, handleContextRestored)\n }\n\n shaderState.clear()\n framebufferState.clear()\n renderbufferState.clear()\n textureState.clear()\n elementState.clear()\n bufferState.clear()\n attributeState.clear()\n\n if (timer) {\n timer.clear()\n }\n\n destroyCallbacks.forEach(function (cb) {\n cb()\n })\n }\n\n function compileProcedure (options) {\n check$1(!!options, 'invalid args to regl({...})')\n check$1.type(options, 'object', 'invalid args to regl({...})')\n\n function flattenNestedOptions (options) {\n var result = extend({}, options)\n delete result.uniforms\n delete result.attributes\n delete result.context\n delete result.vao\n\n if ('stencil' in result && result.stencil.op) {\n result.stencil.opBack = result.stencil.opFront = result.stencil.op\n delete result.stencil.op\n }\n\n function merge (name) {\n if (name in result) {\n var child = result[name]\n delete result[name]\n Object.keys(child).forEach(function (prop) {\n result[name + '.' + prop] = child[prop]\n })\n }\n }\n merge('blend')\n merge('depth')\n merge('cull')\n merge('stencil')\n merge('polygonOffset')\n merge('scissor')\n merge('sample')\n\n if ('vao' in options) {\n result.vao = options.vao\n }\n\n return result\n }\n\n function separateDynamic (object) {\n var staticItems = {}\n var dynamicItems = {}\n Object.keys(object).forEach(function (option) {\n var value = object[option]\n if (dynamic.isDynamic(value)) {\n dynamicItems[option] = dynamic.unbox(value, option)\n } else {\n staticItems[option] = value\n }\n })\n return {\n dynamic: dynamicItems,\n static: staticItems\n }\n }\n\n // Treat context variables separate from other dynamic variables\n var context = separateDynamic(options.context || {})\n var uniforms = separateDynamic(options.uniforms || {})\n var attributes = separateDynamic(options.attributes || {})\n var opts = separateDynamic(flattenNestedOptions(options))\n\n var stats$$1 = {\n gpuTime: 0.0,\n cpuTime: 0.0,\n count: 0\n }\n\n var compiled = core.compile(opts, attributes, uniforms, context, stats$$1)\n\n var draw = compiled.draw\n var batch = compiled.batch\n var scope = compiled.scope\n\n // FIXME: we should modify code generation for batch commands so this\n // isn't necessary\n var EMPTY_ARRAY = []\n function reserve (count) {\n while (EMPTY_ARRAY.length < count) {\n EMPTY_ARRAY.push(null)\n }\n return EMPTY_ARRAY\n }\n\n function REGLCommand (args, body) {\n var i\n if (contextLost) {\n check$1.raise('context lost')\n }\n if (typeof args === 'function') {\n return scope.call(this, null, args, 0)\n } else if (typeof body === 'function') {\n if (typeof args === 'number') {\n for (i = 0; i < args; ++i) {\n scope.call(this, null, body, i)\n }\n } else if (Array.isArray(args)) {\n for (i = 0; i < args.length; ++i) {\n scope.call(this, args[i], body, i)\n }\n } else {\n return scope.call(this, args, body, 0)\n }\n } else if (typeof args === 'number') {\n if (args > 0) {\n return batch.call(this, reserve(args | 0), args | 0)\n }\n } else if (Array.isArray(args)) {\n if (args.length) {\n return batch.call(this, args, args.length)\n }\n } else {\n return draw.call(this, args)\n }\n }\n\n return extend(REGLCommand, {\n stats: stats$$1\n })\n }\n\n var setFBO = framebufferState.setFBO = compileProcedure({\n framebuffer: dynamic.define.call(null, DYN_PROP, 'framebuffer')\n })\n\n function clearImpl (_, options) {\n var clearFlags = 0\n core.procs.poll()\n\n var c = options.color\n if (c) {\n gl.clearColor(+c[0] || 0, +c[1] || 0, +c[2] || 0, +c[3] || 0)\n clearFlags |= GL_COLOR_BUFFER_BIT\n }\n if ('depth' in options) {\n gl.clearDepth(+options.depth)\n clearFlags |= GL_DEPTH_BUFFER_BIT\n }\n if ('stencil' in options) {\n gl.clearStencil(options.stencil | 0)\n clearFlags |= GL_STENCIL_BUFFER_BIT\n }\n\n check$1(!!clearFlags, 'called regl.clear with no buffer specified')\n gl.clear(clearFlags)\n }\n\n function clear (options) {\n check$1(\n typeof options === 'object' && options,\n 'regl.clear() takes an object as input')\n if ('framebuffer' in options) {\n if (options.framebuffer &&\n options.framebuffer_reglType === 'framebufferCube') {\n for (var i = 0; i < 6; ++i) {\n setFBO(extend({\n framebuffer: options.framebuffer.faces[i]\n }, options), clearImpl)\n }\n } else {\n setFBO(options, clearImpl)\n }\n } else {\n clearImpl(null, options)\n }\n }\n\n function frame (cb) {\n check$1.type(cb, 'function', 'regl.frame() callback must be a function')\n rafCallbacks.push(cb)\n\n function cancel () {\n // FIXME: should we check something other than equals cb here?\n // what if a user calls frame twice with the same callback...\n //\n var i = find(rafCallbacks, cb)\n check$1(i >= 0, 'cannot cancel a frame twice')\n function pendingCancel () {\n var index = find(rafCallbacks, pendingCancel)\n rafCallbacks[index] = rafCallbacks[rafCallbacks.length - 1]\n rafCallbacks.length -= 1\n if (rafCallbacks.length <= 0) {\n stopRAF()\n }\n }\n rafCallbacks[i] = pendingCancel\n }\n\n startRAF()\n\n return {\n cancel: cancel\n }\n }\n\n // poll viewport\n function pollViewport () {\n var viewport = nextState.viewport\n var scissorBox = nextState.scissor_box\n viewport[0] = viewport[1] = scissorBox[0] = scissorBox[1] = 0\n contextState.viewportWidth =\n contextState.framebufferWidth =\n contextState.drawingBufferWidth =\n viewport[2] =\n scissorBox[2] = gl.drawingBufferWidth\n contextState.viewportHeight =\n contextState.framebufferHeight =\n contextState.drawingBufferHeight =\n viewport[3] =\n scissorBox[3] = gl.drawingBufferHeight\n }\n\n function poll () {\n contextState.tick += 1\n contextState.time = now()\n pollViewport()\n core.procs.poll()\n }\n\n function refresh () {\n pollViewport()\n core.procs.refresh()\n if (timer) {\n timer.update()\n }\n }\n\n function now () {\n return (clock() - START_TIME) / 1000.0\n }\n\n refresh()\n\n function addListener (event, callback) {\n check$1.type(callback, 'function', 'listener callback must be a function')\n\n var callbacks\n switch (event) {\n case 'frame':\n return frame(callback)\n case 'lost':\n callbacks = lossCallbacks\n break\n case 'restore':\n callbacks = restoreCallbacks\n break\n case 'destroy':\n callbacks = destroyCallbacks\n break\n default:\n check$1.raise('invalid event, must be one of frame,lost,restore,destroy')\n }\n\n callbacks.push(callback)\n return {\n cancel: function () {\n for (var i = 0; i < callbacks.length; ++i) {\n if (callbacks[i] === callback) {\n callbacks[i] = callbacks[callbacks.length - 1]\n callbacks.pop()\n return\n }\n }\n }\n }\n }\n\n var regl = extend(compileProcedure, {\n // Clear current FBO\n clear: clear,\n\n // Short cuts for dynamic variables\n prop: dynamic.define.bind(null, DYN_PROP),\n context: dynamic.define.bind(null, DYN_CONTEXT),\n this: dynamic.define.bind(null, DYN_STATE),\n\n // executes an empty draw command\n draw: compileProcedure({}),\n\n // Resources\n buffer: function (options) {\n return bufferState.create(options, GL_ARRAY_BUFFER, false, false)\n },\n elements: function (options) {\n return elementState.create(options, false)\n },\n texture: textureState.create2D,\n cube: textureState.createCube,\n renderbuffer: renderbufferState.create,\n framebuffer: framebufferState.create,\n framebufferCube: framebufferState.createCube,\n vao: attributeState.createVAO,\n\n // Expose context attributes\n attributes: glAttributes,\n\n // Frame rendering\n frame: frame,\n on: addListener,\n\n // System limits\n limits: limits,\n hasExtension: function (name) {\n return limits.extensions.indexOf(name.toLowerCase()) >= 0\n },\n\n // Read pixels\n read: readPixels,\n\n // Destroy regl and all associated resources\n destroy: destroy,\n\n // Direct GL state manipulation\n _gl: gl,\n _refresh: refresh,\n\n poll: function () {\n poll()\n if (timer) {\n timer.update()\n }\n },\n\n // Current time\n now: now,\n\n // regl Statistics Information\n stats: stats$$1\n })\n\n config.onDone(null, regl)\n\n return regl\n}\n\nreturn wrapREGL;\n\n})));\n//# sourceMappingURL=regl.js.map\n","export default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array, random) {\n let m = array.length,\n t,\n i;\n\n while (m) {\n i = random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport Cell from \"../Cell\";\nimport { responseImmutable } from \"../context/TableContext\";\nimport devRenderTimes from \"../hooks/useRenderTimes\";\nimport useRowInfo from \"../hooks/useRowInfo\";\nimport ExpandedRow from \"./ExpandedRow\";\nimport { computedExpandedClassName } from \"../utils/expandUtil\";\n// ==================================================================================\n// == getCellProps ==\n// ==================================================================================\nexport function getCellProps(rowInfo, column, colIndex, indent, index) {\n var _column$onCell;\n var rowKeys = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];\n var expandedRowOffset = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n var record = rowInfo.record,\n prefixCls = rowInfo.prefixCls,\n columnsKey = rowInfo.columnsKey,\n fixedInfoList = rowInfo.fixedInfoList,\n expandIconColumnIndex = rowInfo.expandIconColumnIndex,\n nestExpandable = rowInfo.nestExpandable,\n indentSize = rowInfo.indentSize,\n expandIcon = rowInfo.expandIcon,\n expanded = rowInfo.expanded,\n hasNestChildren = rowInfo.hasNestChildren,\n onTriggerExpand = rowInfo.onTriggerExpand,\n expandable = rowInfo.expandable,\n expandedKeys = rowInfo.expandedKeys;\n var key = columnsKey[colIndex];\n var fixedInfo = fixedInfoList[colIndex];\n\n // ============= Used for nest expandable =============\n var appendCellNode;\n if (colIndex === (expandIconColumnIndex || 0) && nestExpandable) {\n appendCellNode = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"span\", {\n style: {\n paddingLeft: \"\".concat(indentSize * indent, \"px\")\n },\n className: \"\".concat(prefixCls, \"-row-indent indent-level-\").concat(indent)\n }), expandIcon({\n prefixCls: prefixCls,\n expanded: expanded,\n expandable: hasNestChildren,\n record: record,\n onExpand: onTriggerExpand\n }));\n }\n var additionalCellProps = ((_column$onCell = column.onCell) === null || _column$onCell === void 0 ? void 0 : _column$onCell.call(column, record, index)) || {};\n\n // Expandable row has offset\n if (expandedRowOffset) {\n var _additionalCellProps$ = additionalCellProps.rowSpan,\n rowSpan = _additionalCellProps$ === void 0 ? 1 : _additionalCellProps$;\n\n // For expandable row with rowSpan,\n // We should increase the rowSpan if the row is expanded\n if (expandable && rowSpan && colIndex < expandedRowOffset) {\n var currentRowSpan = rowSpan;\n for (var i = index; i < index + rowSpan; i += 1) {\n var rowKey = rowKeys[i];\n if (expandedKeys.has(rowKey)) {\n currentRowSpan += 1;\n }\n }\n additionalCellProps.rowSpan = currentRowSpan;\n }\n }\n return {\n key: key,\n fixedInfo: fixedInfo,\n appendCellNode: appendCellNode,\n additionalCellProps: additionalCellProps\n };\n}\n\n// ==================================================================================\n// == getCellProps ==\n// ==================================================================================\nfunction BodyRow(props) {\n if (process.env.NODE_ENV !== 'production') {\n devRenderTimes(props);\n }\n var className = props.className,\n style = props.style,\n record = props.record,\n index = props.index,\n renderIndex = props.renderIndex,\n rowKey = props.rowKey,\n rowKeys = props.rowKeys,\n _props$indent = props.indent,\n indent = _props$indent === void 0 ? 0 : _props$indent,\n RowComponent = props.rowComponent,\n cellComponent = props.cellComponent,\n scopeCellComponent = props.scopeCellComponent,\n expandedRowInfo = props.expandedRowInfo;\n var rowInfo = useRowInfo(record, rowKey, index, indent);\n var prefixCls = rowInfo.prefixCls,\n flattenColumns = rowInfo.flattenColumns,\n expandedRowClassName = rowInfo.expandedRowClassName,\n expandedRowRender = rowInfo.expandedRowRender,\n rowProps = rowInfo.rowProps,\n expanded = rowInfo.expanded,\n rowSupportExpand = rowInfo.rowSupportExpand;\n\n // Force render expand row if expanded before\n var expandedRef = React.useRef(false);\n expandedRef.current || (expandedRef.current = expanded);\n if (process.env.NODE_ENV !== 'production') {\n devRenderTimes(props);\n }\n\n // 若没有 expandedRowRender 参数, 将使用 baseRowNode 渲染 Children\n // 此时如果 level > 1 则说明是 expandedRow, 一样需要附加 computedExpandedRowClassName\n var expandedClsName = computedExpandedClassName(expandedRowClassName, record, index, indent);\n\n // ======================== Base tr row ========================\n var baseRowNode = /*#__PURE__*/React.createElement(RowComponent, _extends({}, rowProps, {\n \"data-row-key\": rowKey,\n className: classNames(className, \"\".concat(prefixCls, \"-row\"), \"\".concat(prefixCls, \"-row-level-\").concat(indent), rowProps === null || rowProps === void 0 ? void 0 : rowProps.className, _defineProperty({}, expandedClsName, indent >= 1)),\n style: _objectSpread(_objectSpread({}, style), rowProps === null || rowProps === void 0 ? void 0 : rowProps.style)\n }), flattenColumns.map(function (column, colIndex) {\n var render = column.render,\n dataIndex = column.dataIndex,\n columnClassName = column.className;\n var _getCellProps = getCellProps(rowInfo, column, colIndex, indent, index, rowKeys, expandedRowInfo === null || expandedRowInfo === void 0 ? void 0 : expandedRowInfo.offset),\n key = _getCellProps.key,\n fixedInfo = _getCellProps.fixedInfo,\n appendCellNode = _getCellProps.appendCellNode,\n additionalCellProps = _getCellProps.additionalCellProps;\n return /*#__PURE__*/React.createElement(Cell, _extends({\n className: columnClassName,\n ellipsis: column.ellipsis,\n align: column.align,\n scope: column.rowScope,\n component: column.rowScope ? scopeCellComponent : cellComponent,\n prefixCls: prefixCls,\n key: key,\n record: record,\n index: index,\n renderIndex: renderIndex,\n dataIndex: dataIndex,\n render: render,\n shouldCellUpdate: column.shouldCellUpdate\n }, fixedInfo, {\n appendNode: appendCellNode,\n additionalProps: additionalCellProps\n }));\n }));\n\n // ======================== Expand Row =========================\n var expandRowNode;\n if (rowSupportExpand && (expandedRef.current || expanded)) {\n var expandContent = expandedRowRender(record, index, indent + 1, expanded);\n expandRowNode = /*#__PURE__*/React.createElement(ExpandedRow, {\n expanded: expanded,\n className: classNames(\"\".concat(prefixCls, \"-expanded-row\"), \"\".concat(prefixCls, \"-expanded-row-level-\").concat(indent + 1), expandedClsName),\n prefixCls: prefixCls,\n component: RowComponent,\n cellComponent: cellComponent,\n colSpan: expandedRowInfo ? expandedRowInfo.colSpan : flattenColumns.length,\n stickyOffset: expandedRowInfo === null || expandedRowInfo === void 0 ? void 0 : expandedRowInfo.sticky,\n isEmpty: false\n }, expandContent);\n }\n return /*#__PURE__*/React.createElement(React.Fragment, null, baseRowNode, expandRowNode);\n}\nif (process.env.NODE_ENV !== 'production') {\n BodyRow.displayName = 'BodyRow';\n}\nexport default responseImmutable(BodyRow);","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { useStyle as useAntdStyle } from '@ant-design/pro-provider';\nvar genActionsStyle = function genActionsStyle(token) {\n var componentCls = token.componentCls,\n antCls = token.antCls;\n return _defineProperty({}, \"\".concat(componentCls, \"-actions\"), _defineProperty(_defineProperty({\n marginBlock: 0,\n marginInline: 0,\n paddingBlock: 0,\n paddingInline: 0,\n listStyle: 'none',\n display: 'flex',\n gap: token.marginXS,\n background: token.colorBgContainer,\n borderBlockStart: \"\".concat(token.lineWidth, \"px \").concat(token.lineType, \" \").concat(token.colorSplit),\n minHeight: 42\n }, \"& > *\", {\n alignItems: 'center',\n justifyContent: 'center',\n flex: 1,\n display: 'flex',\n cursor: 'pointer',\n color: token.colorTextSecondary,\n transition: 'color 0.3s',\n '&:hover': {\n color: token.colorPrimaryHover\n }\n }), \"& > li > div\", {\n flex: 1,\n width: '100%',\n marginBlock: token.marginSM,\n marginInline: 0,\n color: token.colorTextSecondary,\n textAlign: 'center',\n a: {\n color: token.colorTextSecondary,\n transition: 'color 0.3s',\n '&:hover': {\n color: token.colorPrimaryHover\n }\n },\n div: _defineProperty(_defineProperty({\n position: 'relative',\n display: 'block',\n minWidth: 32,\n fontSize: token.fontSize,\n lineHeight: token.lineHeight,\n cursor: 'pointer',\n '&:hover': {\n color: token.colorPrimaryHover,\n transition: 'color 0.3s'\n }\n }, \"a:not(\".concat(antCls, \"-btn),\\n > .anticon\"), {\n display: 'inline-block',\n width: '100%',\n color: token.colorTextSecondary,\n lineHeight: '22px',\n transition: 'color 0.3s',\n '&:hover': {\n color: token.colorPrimaryHover\n }\n }), '.anticon', {\n fontSize: token.cardActionIconSize,\n lineHeight: '22px'\n }),\n '&:not(:last-child)': {\n borderInlineEnd: \"\".concat(token.lineWidth, \"px \").concat(token.lineType, \" \").concat(token.colorSplit)\n }\n }));\n};\nexport default function useStyle(prefixCls) {\n return useAntdStyle('ProCardActions', function (token) {\n var proCardActionsToken = _objectSpread(_objectSpread({}, token), {}, {\n componentCls: \".\".concat(prefixCls),\n cardActionIconSize: 16\n });\n return [genActionsStyle(proCardActionsToken)];\n });\n}","import classNames from 'classnames';\nimport React from 'react';\nimport useStyle from \"./style\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar ProCardActions = function ProCardActions(props) {\n var actions = props.actions,\n prefixCls = props.prefixCls;\n var _useStyle = useStyle(prefixCls),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n if (Array.isArray(actions) && actions !== null && actions !== void 0 && actions.length) {\n return wrapSSR( /*#__PURE__*/_jsx(\"ul\", {\n className: classNames(\"\".concat(prefixCls, \"-actions\"), hashId),\n children: actions.map(function (action, index) {\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/no-array-index-key\n _jsx(\"li\", {\n style: {\n width: \"\".concat(100 / actions.length, \"%\"),\n padding: 0,\n margin: 0\n },\n className: classNames(\"\".concat(prefixCls, \"-actions-item\"), hashId),\n children: action\n }, \"action-\".concat(index))\n );\n })\n }));\n }\n return wrapSSR( /*#__PURE__*/_jsx(\"ul\", {\n className: classNames(\"\".concat(prefixCls, \"-actions\"), hashId),\n children: actions\n }));\n};\nexport default ProCardActions;","export default function mean(values, valueof) {\n let count = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n","export default (function (v) { return v; });\n//# sourceMappingURL=identity.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Path, AABB } from '@antv/g';\nimport { path as d3Path } from '@antv/vendor/d3-path';\nimport { sort, bisector } from '@antv/vendor/d3-array';\nimport { filter } from '@antv/util';\nimport { select } from '../utils/selection';\nimport { mapObject } from '../utils/array';\nimport { ELEMENT_CLASS_NAME, PLOT_CLASS_NAME, } from '../runtime';\nimport { isOrdinalScale } from '../utils/scale';\nimport { rect } from '../shape/interval/color';\nimport { isPolar, isTranspose } from '../utils/coordinate';\nimport { getStyle } from '../utils/style';\nimport { reorder } from '../shape/utils';\nimport { angle, angleBetween, sub } from '../utils/vector';\nimport { traverseElements } from '../utils/traverse-elements';\n/**\n * Given root of chart returns elements to be manipulated\n */\nexport function selectG2Elements(root) {\n return select(root)\n .selectAll(`.${ELEMENT_CLASS_NAME}`)\n .nodes()\n .filter((d) => !d.__removed__);\n}\nexport function selectFacetG2Elements(target, viewInstances) {\n return selectFacetViews(target, viewInstances).flatMap(({ container }) => selectG2Elements(container));\n}\nexport function selectFacetViews(target, viewInstances) {\n return viewInstances.filter((d) => d !== target && d.options.parentKey === target.options.key);\n}\nexport function selectPlotArea(root) {\n return select(root).select(`.${PLOT_CLASS_NAME}`).node();\n}\nexport function bboxOf(element) {\n // The geometry bounds of a group is empty, so return the render bounds.\n if (element.tagName === 'g')\n return element.getRenderBounds();\n // Compute the geometry bounds related to the parent.\n const bounds = element.getGeometryBounds();\n const aabb = new AABB();\n aabb.setFromTransformedAABB(bounds, element.getWorldTransform());\n return aabb;\n}\nexport function mousePosition(target, event) {\n const { offsetX, offsetY } = event;\n const bbox = bboxOf(target);\n const { min: [x, y], max: [x1, y1], } = bbox;\n const isOutX = offsetX < x || offsetX > x1;\n const isOutY = offsetY < y || offsetY > y1;\n if (isOutX || isOutY)\n return null;\n return [offsetX - x, offsetY - y];\n}\n/**\n * @todo Pass bbox rather than calc it here.\n */\nexport function brushMousePosition(target, event) {\n const { offsetX, offsetY } = event;\n const [x, y, x1, y1] = boundsOfBrushArea(target);\n return [\n Math.min(x1, Math.max(x, offsetX)) - x,\n Math.min(y1, Math.max(y, offsetY)) - y,\n ];\n}\nexport function boundsOfBrushArea(target) {\n // Calc bbox after clipping.\n const bbox = target.getRenderBounds();\n const { min: [x0, y0], max: [x1, y1], } = bbox;\n return [x0, y0, x1, y1];\n}\nexport function createColorKey(view) {\n return (element) => element.__data__.color;\n}\nexport function createXKey(view) {\n return (element) => element.__data__.x;\n}\nexport function createDatumof(view) {\n const views = Array.isArray(view) ? view : [view];\n const keyData = new Map(views.flatMap((view) => {\n const marks = Array.from(view.markState.keys());\n return marks.map((mark) => [keyed(view.key, mark.key), mark.data]);\n }));\n return (element) => {\n const { index, markKey, viewKey } = element.__data__;\n const data = keyData.get(keyed(viewKey, markKey));\n return data[index];\n };\n}\n/**\n * A state manager for G2Element.\n * The keys for each state's style start with the state name.\n * { selectedFill, selectedStroke } is for selected state.\n * { unselectedFill, unselectedStroke } is for unselected state.\n */\n/**\n * Define state priorities, higher number means higher priority.\n */\nconst STATE_PRIORITIES = {\n selected: 3,\n unselected: 3,\n active: 2,\n inactive: 2,\n default: 1,\n};\n/**\n * Define state groups, states in the same group are mutually exclusive.\n */\nconst STATE_GROUPS = {\n selection: ['selected', 'unselected'],\n highlight: ['active', 'inactive'],\n};\nconst setElementAttribute = (element, k, v) => {\n traverseElements(element, (el) => {\n if ('setAttribute' in el && typeof el.setAttribute === 'function') {\n el.setAttribute(k, v);\n }\n });\n};\nexport function createUseState(style, elements) {\n // Apply interaction style to all elements.\n elements.forEach((element) => {\n // @ts-ignore\n const currentStyle = element.__interactionStyle__;\n if (currentStyle) {\n // @ts-ignore\n element.__interactionStyle__ = Object.assign(Object.assign({}, currentStyle), style);\n }\n else {\n // @ts-ignore\n element.__interactionStyle__ = style;\n }\n });\n return (valueof = (d, element) => d, setAttribute = setElementAttribute) => useState(undefined, valueof, setAttribute);\n}\nexport function useState(style, valueof = (d, element) => d, setAttribute = setElementAttribute) {\n const STATES = '__states__';\n const ORIGINAL = '__ordinal__';\n // Get state priority.\n const getStatePriority = (stateName) => STATE_PRIORITIES[stateName] || STATE_PRIORITIES.default;\n // Get the group that a state belongs to.\n const getStateGroup = (stateName) => {\n var _a;\n return (_a = Object.entries(STATE_GROUPS).find(([_, states]) => states.includes(stateName))) === null || _a === void 0 ? void 0 : _a[0];\n };\n // Mix style for each state and apply it to element.\n const applyState = (element) => {\n var _a;\n const { [STATES]: states = [], [ORIGINAL]: original = {} } = element;\n // Sort states by priority.\n const sortedStates = [...states].sort((a, b) => getStatePriority(b) - getStatePriority(a));\n // Create a Map to track the highest priority state for each style attribute.\n const styleAttributeMap = new Map();\n // Iterate through all states to find the highest priority state for each style attribute.\n for (const state of sortedStates) {\n // If style exists, use it directly, else use interaction style on element.\n const stateStyles = ((_a = (style !== null && style !== void 0 ? style : element.__interactionStyle__)) === null || _a === void 0 ? void 0 : _a[state]) || {};\n for (const [key, value] of Object.entries(stateStyles)) {\n if (!styleAttributeMap.has(key)) {\n styleAttributeMap.set(key, value);\n }\n }\n }\n // Apply styles including original styles.\n const finalStyle = Object.assign({}, original);\n for (const [key, value] of styleAttributeMap.entries()) {\n finalStyle[key] = value;\n }\n if (Object.keys(finalStyle).length === 0)\n return;\n // Apply final styles to the element.\n for (const [key, value] of Object.entries(finalStyle)) {\n const currentValue = getStyle(element, key);\n const v = valueof(value, element);\n setAttribute(element, key, v);\n // Store the attribute if it does not exist in original.\n if (!(key in original))\n original[key] = currentValue;\n }\n element[ORIGINAL] = original;\n };\n const initState = (element) => {\n if (element[STATES])\n return;\n element[STATES] = [];\n return;\n };\n /**\n * Update states and update element, handle conflict states automatically.\n */\n const updateState = (element, ...states) => {\n initState(element);\n const currentStates = element[STATES];\n // Collect all new state groups.\n const newStateGroups = new Set(states\n .map((state) => getStateGroup(state))\n .filter((group) => group !== undefined));\n // Exclude old states that are in the new state group.\n const remainingStates = currentStates.filter((existingState) => !newStateGroups.has(getStateGroup(existingState)));\n element[STATES] = [...remainingStates, ...states];\n applyState(element);\n };\n /**\n * Set the states and update element.\n */\n const setState = (element, ...states) => {\n initState(element);\n element[STATES] = [...states];\n applyState(element);\n };\n /**\n * Remove the states and update element.\n */\n const removeState = (element, ...states) => {\n initState(element);\n for (const state of states) {\n const index = element[STATES].indexOf(state);\n if (index !== -1) {\n element[STATES].splice(index, 1);\n }\n }\n applyState(element);\n };\n const hasState = (element, state) => {\n initState(element);\n return element[STATES].indexOf(state) !== -1;\n };\n return {\n setState,\n updateState,\n removeState,\n hasState,\n };\n}\nfunction isEmptyObject(obj) {\n if (obj === undefined)\n return true;\n if (typeof obj !== 'object')\n return false;\n return Object.keys(obj).length === 0;\n}\n// A function to generate key for mark each view.\nfunction keyed(viewKey, markKey) {\n return `${viewKey},${markKey}`;\n}\nexport function mergeState(options, states) {\n // Index state by mark key and view key.\n const views = Array.isArray(options) ? options : [options];\n const markState = views.flatMap((view) => view.marks.map((mark) => [keyed(view.key, mark.key), mark.state]));\n const state = {};\n // Update each specified state.\n for (const descriptor of states) {\n const [key, defaults] = Array.isArray(descriptor)\n ? descriptor\n : [descriptor, {}];\n // Update each specified mark state.\n state[key] = markState.reduce((merged, mark) => {\n // Normalize state.\n const [markKey, markState = {}] = mark;\n const selectedState = isEmptyObject(markState[key])\n ? defaults\n : markState[key];\n // Update each state attribute.\n for (const [attr, value] of Object.entries(selectedState)) {\n const oldValue = merged[attr];\n const newValue = (data, index, array, element) => {\n const k = keyed(element.__data__.viewKey, element.__data__.markKey);\n if (markKey !== k)\n return oldValue === null || oldValue === void 0 ? void 0 : oldValue(data, index, array, element);\n if (typeof value !== 'function')\n return value;\n return value(data, index, array, element);\n };\n merged[attr] = newValue;\n }\n return merged;\n }, {});\n }\n return state;\n}\n// @todo Support elements from different view.\nexport function createValueof(elements, datum) {\n const elementIndex = new Map(elements.map((d, i) => [d, i]));\n const fa = datum ? elements.map(datum) : elements;\n return (d, e) => {\n if (typeof d !== 'function')\n return d;\n const i = elementIndex.get(e);\n const fe = datum ? datum(e) : e;\n return d(fe, i, fa, e);\n };\n}\nexport function renderLink(_a) {\n var { link = false, valueof = (d, element) => d, coordinate } = _a, style = __rest(_a, [\"link\", \"valueof\", \"coordinate\"]);\n const LINK_CLASS_NAME = 'element-link';\n if (!link)\n return [() => { }, () => { }];\n const pointsOf = (element) => element.__data__.points;\n const pathPointsOf = (P0, P1) => {\n const [, p1, p2] = P0;\n const [p0, , , p3] = P1;\n const P = [p1, p0, p3, p2];\n return P;\n };\n const append = (elements) => {\n var _a;\n if (elements.length <= 1)\n return;\n // Sort elements by normalized x to avoid cross.\n const sortedElements = sort(elements, (e0, e1) => {\n const { x: x0 } = e0.__data__;\n const { x: x1 } = e1.__data__;\n const dx = x0 - x1;\n return dx;\n });\n for (let i = 1; i < sortedElements.length; i++) {\n const p = d3Path();\n const e0 = sortedElements[i - 1];\n const e1 = sortedElements[i];\n const [p0, p1, p2, p3] = pathPointsOf(pointsOf(e0), pointsOf(e1));\n p.moveTo(...p0);\n p.lineTo(...p1);\n p.lineTo(...p2);\n p.lineTo(...p3);\n p.closePath();\n const _b = mapObject(style, (d) => valueof(d, e0)), { fill = e0.getAttribute('fill') } = _b, rest = __rest(_b, [\"fill\"]);\n const link = new Path({\n className: LINK_CLASS_NAME,\n style: Object.assign({ d: p.toString(), fill, zIndex: -2 }, rest),\n });\n // @ts-ignore\n (_a = e0.link) === null || _a === void 0 ? void 0 : _a.remove();\n e0.parentNode.appendChild(link);\n // @ts-ignore\n e0.link = link;\n }\n };\n const remove = (element) => {\n var _a;\n (_a = element.link) === null || _a === void 0 ? void 0 : _a.remove();\n element.link = null;\n };\n return [append, remove];\n}\n// Apply translate to mock slice out.\nexport function offsetTransform(element, offset, coordinate) {\n const append = (t) => {\n const { transform } = element.style;\n return transform ? `${transform} ${t}` : t;\n };\n if (isPolar(coordinate)) {\n const { points } = element.__data__;\n const [p0, p1] = isTranspose(coordinate) ? reorder(points) : points;\n const center = coordinate.getCenter();\n const v0 = sub(p0, center);\n const v1 = sub(p1, center);\n const a0 = angle(v0);\n const da = angleBetween(v0, v1);\n const amid = a0 + da / 2;\n const dx = offset * Math.cos(amid);\n const dy = offset * Math.sin(amid);\n return append(`translate(${dx}, ${dy})`);\n }\n if (isTranspose(coordinate))\n return append(`translate(${offset}, 0)`);\n return append(`translate(0, ${-offset})`);\n}\nexport function renderBackground(_a) {\n var { document, background, scale, coordinate, valueof } = _a, rest = __rest(_a, [\"document\", \"background\", \"scale\", \"coordinate\", \"valueof\"]);\n const BACKGROUND_CLASS_NAME = 'element-background';\n // Don't have background.\n if (!background)\n return [() => { }, () => { }];\n const extentOf = (scale, x, padding) => {\n const ax = scale.invert(x);\n const mid = x + scale.getBandWidth(ax) / 2;\n const half = scale.getStep(ax) / 2;\n const offset = half * padding;\n return [mid - half + offset, mid + half - offset];\n };\n const sizeXOf = (element, padding) => {\n const { x: scaleX } = scale;\n if (!isOrdinalScale(scaleX))\n return [0, 1];\n const { __data__: data } = element;\n const { x } = data;\n const [e1, e2] = extentOf(scaleX, x, padding);\n return [e1, e2];\n };\n const sizeYOf = (element, padding) => {\n const { y: scaleY } = scale;\n if (!isOrdinalScale(scaleY))\n return [0, 1];\n const { __data__: data } = element;\n const { y } = data;\n const [e1, e2] = extentOf(scaleY, y, padding);\n return [e1, e2];\n };\n const bandShapeOf = (element, style) => {\n const { padding } = style;\n const [x1, x2] = sizeXOf(element, padding);\n const [y1, y2] = sizeYOf(element, padding);\n const points = [\n [x1, y1],\n [x2, y1],\n [x2, y2],\n [x1, y2],\n ].map((d) => coordinate.map(d));\n const { __data__: data } = element;\n const { y: dy, y1: dy1 } = data;\n return rect(document, points, { y: dy, y1: dy1 }, coordinate, style);\n };\n // Shape without ordinal style.\n // Clone and scale it.\n const cloneShapeOf = (element, style) => {\n const { transform = 'scale(1.2, 1.2)', transformOrigin = 'center center', stroke = '' } = style, rest = __rest(style, [\"transform\", \"transformOrigin\", \"stroke\"]);\n const finalStyle = Object.assign({ transform, transformOrigin, stroke }, rest);\n const shape = element.cloneNode(true);\n for (const [key, value] of Object.entries(finalStyle)) {\n shape.style[key] = value;\n }\n return shape;\n };\n const isOrdinalShape = () => {\n const { x, y } = scale;\n return [x, y].some(isOrdinalScale);\n };\n const append = (element) => {\n if (element.background)\n element.background.remove();\n const _a = mapObject(rest, (d) => valueof(d, element)), { fill = '#CCD6EC', fillOpacity = 0.3, zIndex = -2, padding = 0.001, lineWidth = 0 } = _a, style = __rest(_a, [\"fill\", \"fillOpacity\", \"zIndex\", \"padding\", \"lineWidth\"]);\n const finalStyle = Object.assign(Object.assign({}, style), { fill,\n fillOpacity,\n zIndex,\n padding,\n lineWidth });\n const shapeOf = isOrdinalShape() ? bandShapeOf : cloneShapeOf;\n const shape = shapeOf(element, finalStyle);\n shape.className = BACKGROUND_CLASS_NAME;\n element.parentNode.parentNode.appendChild(shape);\n element.background = shape;\n };\n const remove = (element) => {\n var _a;\n (_a = element.background) === null || _a === void 0 ? void 0 : _a.remove();\n element.background = null;\n };\n const is = (element) => {\n return element.className === BACKGROUND_CLASS_NAME;\n };\n return [append, remove, is];\n}\nexport function setCursor(root, cursor) {\n // @ts-ignore\n const canvas = root.getRootNode().defaultView;\n const dom = canvas.getContextService().getDomElement();\n if (dom === null || dom === void 0 ? void 0 : dom.style) {\n root.cursor = dom.style.cursor;\n dom.style.cursor = cursor;\n }\n}\nexport function restoreCursor(root) {\n setCursor(root, root.cursor);\n}\nexport function selectElementByData(elements, data, datum) {\n return elements.find((d) => Object.entries(data).every(([key, value]) => datum(d)[key] === value));\n}\nexport function getPointsR(point, nextPoint) {\n return Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2));\n}\n// Points create path.\nexport function getPointsPath(points, isClose = false) {\n const path = filter(points, (d) => !!d).map((d, i) => {\n return [i === 0 ? 'M' : 'L', ...d];\n });\n if (isClose) {\n path.push(['Z']);\n }\n return path;\n}\n// Get element.\nexport function getElements(plot) {\n return plot.querySelectorAll('.element');\n}\n// Get Theta coordinate round path.\nexport function getThetaPath(center, points, isBig = 0) {\n const path = [['M', ...points[1]]];\n const innerRadius = getPointsR(center, points[1]);\n const outerRadius = getPointsR(center, points[0]);\n if (innerRadius === 0) {\n path.push(['L', ...points[3]], ['A', outerRadius, outerRadius, 0, isBig, 1, ...points[0]], ['Z']);\n }\n else {\n path.push(['A', innerRadius, innerRadius, 0, isBig, 0, ...points[2]], ['L', ...points[3]], ['A', outerRadius, outerRadius, 0, isBig, 1, ...points[0]], ['Z']);\n }\n return path;\n}\nexport function maybeRoot(node, rootOf) {\n if (rootOf(node))\n return node;\n let root = node.parent;\n while (root && !rootOf(root))\n root = root.parent;\n return root;\n}\nexport const VALID_FIND_BY_X_MARKS = ['interval', 'point', 'density'];\n/**\n * @description Create function that can find element by event.\n * @returns Element find function.\n */\nexport function createFindElementByEvent({ elementsof, root, coordinate, scale, validFindByXMarks = VALID_FIND_BY_X_MARKS, }) {\n var _a, _b;\n let elements = elementsof(root);\n const getValidFindByXMarks = (d) => validFindByXMarks.includes(d.markType);\n const hasValidFindByXMarks = elements.find(getValidFindByXMarks);\n // Try to find element by x position.\n if (hasValidFindByXMarks) {\n elements = elements.filter(getValidFindByXMarks);\n const scaleX = scale.x;\n const scaleSeries = scale.series;\n const bandWidth = (_b = (_a = scaleX === null || scaleX === void 0 ? void 0 : scaleX.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(scaleX)) !== null && _b !== void 0 ? _b : 0;\n const xof = scaleSeries\n ? (d) => {\n var _a, _b;\n const seriesCount = Math.round(1 / ((_a = scaleSeries.valueBandWidth) !== null && _a !== void 0 ? _a : 1));\n return (d.__data__.x +\n ((_b = d.__data__.series) !== null && _b !== void 0 ? _b : 0) * bandWidth +\n bandWidth / (seriesCount * 2));\n }\n : (d) => d.__data__.x + bandWidth / 2;\n // Sort for bisector search.\n elements.sort((a, b) => xof(a) - xof(b));\n return (event) => {\n const mouse = mousePosition(root, event);\n if (!mouse)\n return;\n const [abstractX] = coordinate.invert(mouse);\n const search = bisector(xof).center;\n const i = search(elements, abstractX);\n const target = elements[i];\n return target;\n };\n }\n // If there is no valid element find by x, just return the target element.\n return (event) => {\n const { target } = event;\n return maybeRoot(target, (node) => {\n if (!node.classList)\n return false;\n return node.classList.includes('element');\n });\n };\n}\n//# sourceMappingURL=utils.js.map","/**\n * 保留x位小数\n */\nexport function toPrecision(num, precision) {\n return +num.toPrecision(precision);\n}\n/**\n * 千分位\n * 100000 -> 10,000\n */\nexport function toThousands(num) {\n return num.toLocaleString();\n}\n/**\n * 获得数字科学计数\n * 1000000 = 1e6\n */\nexport function toScientificNotation(num) {\n return num.toExponential();\n}\n/**\n * 用k的方式表达\n * 1234 -> 1K\n * 12345 -> 12K\n */\nexport function toKNotation(num, precision) {\n if (precision === void 0) { precision = 0; }\n if (Math.abs(num) < 1000)\n return String(num);\n return \"\".concat(toPrecision(num / 1000, precision).toLocaleString(), \"K\");\n}\n// Condition if x is smaller than zero.\nexport var ifNegative = function (x, a, b) { return (x < 0 && Number.isFinite(x) ? a : b); };\n// Condition if x is greater than zero.\nexport var ifPositive = function (x, a, b) { return (x > 0 && Number.isFinite(x) ? a : b); };\n// Calculate the result of a * b.\nexport var multi = function (a, b) { return a * b; };\n// Calculate the result of (a + b) / 2.\nexport var mid = function (a, b) { return a / 2 + (b || 0) / 2; };\n//# sourceMappingURL=number.js.map","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { aProjectFlat } from '@antv/l7-utils';\nimport { vec2 } from 'gl-matrix';\nconst tmp = vec2.create();\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst capEnd = vec2.create();\nconst lineA = vec2.create();\nconst lineB = vec2.create();\nconst tangent = vec2.create();\nexport function computeMiter(lineTangent, miter, start, end, halfThick) {\n vec2.add(lineTangent, start, end);\n vec2.normalize(lineTangent, lineTangent);\n miter = vec2.fromValues(-lineTangent[1], lineTangent[0]);\n const tmpvec = vec2.fromValues(-start[1], start[0]);\n return [halfThick / vec2.dot(miter, tmpvec), miter];\n}\nexport function computeNormal(out, dir) {\n return vec2.set(out, -dir[1], dir[0]);\n}\nexport function direction(out, a, b) {\n vec2.sub(out, a, b);\n vec2.normalize(out, out);\n return out;\n}\nfunction isPointEqual(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\nexport function getArrayUnique(matrix) {\n const map = new Map();\n for (let i = 0; i < matrix.length; i++) {\n const key = matrix[0].toString() + '-' + matrix[1].toString();\n if (map.get(key)) {\n matrix.splice(i, 1);\n i++;\n } else {\n map.set(key, key);\n }\n }\n return matrix;\n}\nexport default class ExtrudePolyline {\n constructor(opts = {}) {\n _defineProperty(this, \"complex\", void 0);\n _defineProperty(this, \"join\", void 0);\n _defineProperty(this, \"cap\", void 0);\n _defineProperty(this, \"miterLimit\", void 0);\n _defineProperty(this, \"thickness\", void 0);\n _defineProperty(this, \"normal\", void 0);\n _defineProperty(this, \"lastFlip\", -1);\n _defineProperty(this, \"miter\", vec2.fromValues(0, 0));\n _defineProperty(this, \"started\", false);\n _defineProperty(this, \"dash\", false);\n _defineProperty(this, \"totalDistance\", 0);\n _defineProperty(this, \"currentIndex\", 0);\n this.join = opts.join || 'miter';\n this.cap = opts.cap || 'butt';\n this.miterLimit = opts.miterLimit || 10;\n this.thickness = opts.thickness || 1;\n this.dash = opts.dash || false;\n this.complex = {\n positions: [],\n indices: [],\n normals: [],\n startIndex: 0,\n indexes: []\n };\n }\n simpleExtrude(points) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1];\n const cur = points[i];\n const next = i < points.length - 1 ? points[i + 1] : null;\n const amt = this.simpleSegment(complex, count, last, cur, next);\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n extrude(points) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1];\n const cur = points[i];\n const next = i < points.length - 1 ? points[i + 1] : null;\n const amt = this.segment(complex, count, last, cur, next);\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n simpleSegment(complex, index, last, cur, next) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const flatCur = aProjectFlat([cur[0], cur[1]]);\n const flatLast = aProjectFlat([last[0], last[1]]);\n // @ts-ignore\n direction(lineA, flatCur, flatLast);\n let segmentDistance = 0;\n if (this.dash) {\n // @ts-ignore\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n this.extrusions(positions, normals, last, this.normal, this.thickness, this.totalDistance - segmentDistance);\n }\n indices.push(index + 0, index + 1, index + 2);\n if (!next) {\n computeNormal(this.normal, lineA);\n this.extrusions(positions, normals, cur, this.normal, this.thickness, this.totalDistance);\n indices.push(...(this.lastFlip === 1 ? [index, index + 2, index + 3] : [index + 2, index + 1, index + 3]));\n count += 2;\n } else {\n const flatNext = aProjectFlat([next[0], next[1]]);\n if (isPointEqual(flatCur, flatNext)) {\n vec2.add(flatNext, flatCur, vec2.normalize(flatNext, vec2.subtract(flatNext, flatCur, flatLast)));\n }\n direction(lineB, flatNext, flatCur);\n\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(tangent, vec2.create(), lineA, lineB, this.thickness);\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n this.extrusions(positions, normals, cur, miter, miterLen, this.totalDistance);\n indices.push(...(this.lastFlip === 1 ? [index, index + 2, index + 3] : [index + 2, index + 1, index + 3]));\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n this.lastFlip = flip;\n }\n return count;\n }\n segment(complex, index, last, cur, next) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([cur[0], cur[1]]);\n const flatLast = aProjectFlat([last[0], last[1]]);\n // @ts-ignore\n direction(lineA, flatCur, flatLast);\n let segmentDistance = 0;\n if (this.dash) {\n // @ts-ignore\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(last[0], last[1], last[2] | 0, this.totalDistance - segmentDistance, -this.thickness, last[2] | 0);\n this.complex.indexes.push(this.currentIndex);\n positions.push(last[0], last[1], last[2] | 0, this.totalDistance - segmentDistance, this.thickness, last[2] | 0);\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n // this.extrusions(positions, normals, last, out, this.thickness);\n // last = capEnd;\n } else {\n this.extrusions(positions, normals, last, this.normal, this.thickness, this.totalDistance - segmentDistance);\n }\n }\n indices.push(index + 0, index + 1, index + 2);\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, cur, lineA, this.thickness);\n // cur = capEnd;\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n // this.extrusions(positions, normals, cur, out, this.thickness);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness, cur[2] | 0);\n this.complex.indexes.push(this.currentIndex);\n positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness, cur[2] | 0);\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n } else {\n this.extrusions(positions, normals, cur, this.normal, this.thickness, this.totalDistance);\n }\n\n // this.extrusions(positions, normals, cur, this.normal, this.thickness);\n indices.push(...(this.lastFlip === 1 ? [index, index + 2, index + 3] : [index + 2, index + 1, index + 3]));\n count += 2;\n } else {\n const flatNext = aProjectFlat([next[0], next[1]]);\n if (isPointEqual(flatCur, flatNext)) {\n vec2.add(flatNext, flatCur, vec2.normalize(flatNext, vec2.subtract(flatNext, flatCur, flatLast)));\n }\n direction(lineB, flatNext, flatCur);\n\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(tangent, vec2.create(), lineA, lineB, this.thickness);\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, -this.thickness * flip, cur[2] | 0);\n this.complex.indexes.push(this.currentIndex);\n positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness * flip, cur[2] | 0);\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n indices.push(...(this.lastFlip !== -flip ? [index, index + 2, index + 3] : [index + 2, index + 1, index + 3]));\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, -this.thickness * flip, cur[2] | 0);\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n count += 3;\n } else {\n this.extrusions(positions, normals, cur, miter, miterLen, this.totalDistance);\n indices.push(...(this.lastFlip === 1 ? [index, index + 2, index + 3] : [index + 2, index + 1, index + 3]));\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n extrusions(positions, normals, point,\n // 顶点\n normal,\n // 法向量\n thickness,\n // 高度\n distanceRadio) {\n normals.push(normal[0], normal[1], 0);\n normals.push(normal[0], normal[1], 0);\n positions.push(point[0], point[1], point[2] | 0, distanceRadio, -thickness, point[2] | 0);\n this.complex.indexes.push(this.currentIndex);\n positions.push(point[0], point[1], point[2] | 0, distanceRadio, thickness, point[2] | 0);\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n }\n lineSegmentDistance(b1, a1) {\n const dx = a1[0] - b1[0];\n const dy = a1[1] - b1[1];\n return Math.sqrt(dx * dx + dy * dy);\n }\n}","import { lngLatToMeters } from '@antv/l7-utils';\nimport earcut from 'earcut';\nimport { vec3 } from 'gl-matrix';\nimport { getPolygonSurfaceIndices } from \"../utils\";\n/**\n * 拉伸多边形顶点,返回拉伸后的顶点信息\n * @param paths 路径数据组\n * @param extrude 是否拉伸\n */\nexport default function extrudePolygon(path) {\n const p1 = path[0][0];\n const p2 = path[0][path[0].length - 1];\n if (p1[0] === p2[0] && p1[1] === p2[1]) {\n path[0] = path[0].slice(0, path[0].length - 1);\n }\n const n = path[0].length;\n const flattengeo = earcut.flatten(path);\n const {\n vertices,\n dimensions\n } = flattengeo;\n const positions = [];\n const indexArray = [];\n // 设置顶部z值\n for (let j = 0; j < vertices.length / dimensions; j++) {\n if (dimensions === 2) {\n positions.push(vertices[j * 2], vertices[j * 2 + 1], 1);\n } else {\n positions.push(vertices[j * 3], vertices[j * 3 + 1], 1);\n }\n }\n const triangles = earcut(flattengeo.vertices, flattengeo.holes, flattengeo.dimensions);\n indexArray.push(...triangles);\n for (let i = 0; i < n; i++) {\n const prePoint = flattengeo.vertices.slice(i * dimensions, (i + 1) * dimensions);\n let nextPoint = flattengeo.vertices.slice((i + 1) * dimensions, (i + 2) * dimensions);\n if (nextPoint.length === 0) {\n nextPoint = flattengeo.vertices.slice(0, dimensions);\n }\n const indexOffset = positions.length / 3;\n positions.push(prePoint[0], prePoint[1], 1, nextPoint[0], nextPoint[1], 1, prePoint[0], prePoint[1], 0, nextPoint[0], nextPoint[1], 0);\n indexArray.push(...[0, 2, 1, 2, 3, 1].map(v => v + indexOffset));\n }\n return {\n positions,\n index: indexArray\n };\n}\nexport function fillPolygon(points) {\n const flattengeo = earcut.flatten(points);\n const triangles = earcut(flattengeo.vertices, flattengeo.holes, flattengeo.dimensions);\n return {\n positions: flattengeo.vertices,\n index: triangles\n };\n}\nexport function extrude_PolygonNormal(path, needFlat = false // 是否需要转成平面坐标\n) {\n const p1 = path[0][0];\n const p2 = path[0][path[0].length - 1];\n if (p1[0] === p2[0] && p1[1] === p2[1]) {\n path[0] = path[0].slice(0, path[0].length - 1);\n }\n const n = path[0].length;\n const flattengeo = earcut.flatten(path);\n const {\n vertices,\n dimensions,\n holes\n } = flattengeo;\n const positions = [];\n const indexArray = [];\n const normals = [];\n // 设置顶部z值 position uv\n for (let j = 0; j < vertices.length / dimensions; j++) {\n positions.push(vertices[j * dimensions],\n // x\n vertices[j * dimensions + 1],\n // y\n 1,\n // z\n -1,\n // 顶部uv\n -1 // 顶部uv\n );\n normals.push(0, 0, 1);\n }\n const indices = getPolygonSurfaceIndices(vertices, holes, dimensions, needFlat);\n indexArray.push(...indices);\n\n // 设置侧面\n for (let i = 0; i < n; i++) {\n const prePoint = flattengeo.vertices.slice(i * dimensions, (i + 1) * dimensions);\n let nextPoint = flattengeo.vertices.slice((i + 1) * dimensions, (i + 2) * dimensions);\n if (nextPoint.length === 0) {\n nextPoint = flattengeo.vertices.slice(0, dimensions);\n }\n const indexOffset = positions.length / 5;\n // 侧面四顶点\n positions.push(prePoint[0], prePoint[1], 1, 0, 0, nextPoint[0], nextPoint[1], 1, 0.1,\n // 侧面 低uv\n 0,\n // 侧面低 uv\n prePoint[0], prePoint[1], 0, 0, 0.8, nextPoint[0], nextPoint[1], 0, 0.1, 0.8);\n const normal = computeVertexNormals([nextPoint[0], nextPoint[1], 1], [prePoint[0], prePoint[1], 0], [prePoint[0], prePoint[1], 1], needFlat);\n normals.push(...normal, ...normal, ...normal, ...normal);\n indexArray.push(...[1, 2, 0, 3, 2, 1].map(v => v + indexOffset));\n }\n return {\n positions,\n index: indexArray,\n normals\n };\n}\nfunction computeVertexNormals(p1, p2, p3, needFlat = false) {\n const cb = vec3.create();\n const ab = vec3.create();\n const normal = vec3.create();\n if (needFlat) {\n p1 = lngLatToMeters(p1);\n p2 = lngLatToMeters(p2);\n p3 = lngLatToMeters(p3);\n }\n const pA = vec3.fromValues(...p1);\n const pB = vec3.fromValues(...p2);\n const pC = vec3.fromValues(...p3);\n vec3.sub(cb, pC, pB);\n vec3.sub(ab, pA, pB);\n vec3.cross(normal, cb, ab);\n const newNormal = vec3.create();\n vec3.normalize(newNormal, normal);\n return newNormal;\n}","import { aProjectFlat, calculateCentroid, calculatePointsCenterAndRadius, lngLatToMeters } from '@antv/l7-utils';\nimport earcut from 'earcut';\n// @ts-ignore\nimport { vec3 } from 'gl-matrix';\nimport { EARTH_RADIUS, EARTH_RADIUS_OUTER, EARTH_SEGMENTS, lglt2xyz, primitiveSphere } from \"../earth/utils\";\nimport ExtrudePolyline from \"../utils/extrude_polyline\";\nimport { geometryShape } from \"./shape/Path\";\nimport extrudePolygon, { extrude_PolygonNormal, fillPolygon } from \"./shape/extrude\";\nimport { getPolygonSurfaceIndices } from \"./utils\";\nconst GeometryCache = {};\n\n/**\n * 计算2D 填充点图顶点\n * @param feature 映射feature\n */\n\nexport function PointFillTriangulation(feature) {\n const coordinates = calculateCentroid(feature.coordinates);\n return {\n vertices: [...coordinates, ...coordinates, ...coordinates, ...coordinates],\n indices: [0, 1, 2, 2, 3, 0],\n size: coordinates.length\n };\n}\n/**\n * 计算2D 填充点图顶点 (地球模式)\n * @param feature 映射feature\n */\nexport function GlobelPointFillTriangulation(feature) {\n const coordinates = calculateCentroid(feature.coordinates);\n const xyz = lglt2xyz(coordinates);\n return {\n vertices: [...xyz, ...xyz, ...xyz, ...xyz],\n indices: [0, 1, 2, 2, 3, 0],\n size: xyz.length\n };\n}\n\n/**\n * 计算3D 拉伸点图\n * @param feature 映射feature\n */\nexport function PointExtrudeTriangulation(feature) {\n const {\n shape\n } = feature;\n const {\n positions,\n index,\n normals\n } = getGeometry(shape, false);\n return {\n vertices: positions,\n indices: index,\n normals,\n size: 5\n };\n}\n\n/**\n * 计算图片标注\n * @param feature 映射feature\n */\nexport function PointImageTriangulation(feature) {\n const coordinates = calculateCentroid(feature.coordinates);\n return {\n vertices: [...coordinates],\n indices: [0],\n size: coordinates.length\n };\n}\n\n/**\n * 线三角化\n * @param feature 映射feature\n */\nexport function LineTriangulation(feature) {\n const {\n coordinates\n } = feature;\n // let path = coordinates as number[][][] | number[][];\n // if (!Array.isArray(path[0][0])) {\n // path = [coordinates] as number[][][];\n // }\n\n const line = new ExtrudePolyline({\n dash: true,\n join: 'bevel'\n });\n let path = coordinates;\n if (path[0] && !Array.isArray(path[0][0])) {\n path = [coordinates];\n }\n path.forEach(item => {\n line.extrude(item);\n });\n const linebuffer = line.complex;\n return {\n vertices: linebuffer.positions,\n // [ x,y,z, distance, miter,total ]\n indices: linebuffer.indices,\n normals: linebuffer.normals,\n indexes: linebuffer.indexes,\n size: 6\n };\n}\nexport function FlowLineFillTriangulation(feature) {\n // @ts-ignore\n const coord = feature.coordinates.flat();\n const tin = 1;\n const tout = 1.0;\n return {\n vertices: [1, 0, 0, ...coord,\n // 0\n 1, 2, -3,\n // mapbox 为正\n ...coord,\n // 1\n 1, 1, -3,\n // mapbox 为正\n ...coord,\n // 2\n 0, 1, 0, ...coord,\n // 3\n 0, 0, 0, ...coord,\n // 4\n 1, 0, 0, ...coord,\n // 0\n 1, 2, -3,\n // mapbox 为正\n ...coord,\n // 1\n 1, 1, -3,\n // // mapbox 为正\n ...coord,\n // 2\n 0, 1, 0, ...coord,\n // 3\n 0, 0, 0, ...coord // 4\n ],\n normals: [-tin, 2 * tout, 1,\n // 0\n 2 * tout, -tout, 1,\n // 1\n tout, -tout, 1,\n // 2\n tout, -tout, 1,\n // 3\n -tin, -tout, 1,\n // 4\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n indices: [0, 1, 2, 0, 2, 3, 0, 3, 4, 5, 6, 7, 5, 7, 8, 5, 8, 9],\n size: 7\n };\n}\nexport function SimpleLineTriangulation(feature) {\n const {\n coordinates\n } = feature;\n const pos = [];\n if (!Array.isArray(coordinates[0])) {\n return {\n vertices: [],\n indices: [],\n normals: [],\n size: 6,\n count: 0\n };\n }\n const {\n results,\n totalDistance\n } = getSimpleLineVertices(coordinates);\n results.map(point => {\n pos.push(point[0], point[1], point[2], point[3], 0, totalDistance);\n });\n return {\n vertices: pos,\n indices: [],\n normals: [],\n size: 6,\n count: results.length\n };\n}\nexport function TileSimpleLineTriangulation(feature) {\n const {\n coordinates\n } = feature;\n const pos = [];\n if (!Array.isArray(coordinates[0])) {\n return {\n vertices: [],\n indices: [],\n size: 4,\n count: 0\n };\n }\n const {\n results\n } = getTileSimpleLineVertices(coordinates);\n results.map(point => {\n pos.push(point[0], point[1], point[2], point[3]);\n });\n return {\n vertices: pos,\n indices: [],\n size: 4,\n count: results.length\n };\n}\nfunction lineSegmentDistance(b1, a1) {\n const dx = a1[0] - b1[0];\n const dy = a1[1] - b1[1];\n return Math.sqrt(dx * dx + dy * dy);\n}\nfunction pushDis(point, n) {\n if (point.length < 3) {\n point.push(0);\n }\n if (n !== undefined) {\n point.push(n);\n }\n return point;\n}\nfunction getSimpleLineVertices(coordinates) {\n let points = coordinates;\n if (Array.isArray(points) && Array.isArray(points[0]) && Array.isArray(points[0][0])) {\n // @ts-ignore\n points = coordinates.flat();\n }\n //修改计算距离的方式,与普通线的计算方式保持一致 edit by huyang 20231214\n let distance = 0;\n if (points.length < 2) {\n return {\n results: points,\n totalDistance: 0\n };\n } else {\n const results = [];\n const point = pushDis(points[0], distance);\n results.push(point);\n for (let i = 1; i < points.length - 1; i++) {\n const subDistance = lineSegmentDistance(aProjectFlat(points[i - 1]), aProjectFlat(points[i]));\n distance += subDistance;\n const mulPoint = pushDis(points[i], distance);\n results.push(mulPoint);\n results.push(mulPoint);\n }\n const pointDistance = lineSegmentDistance(aProjectFlat(points[points.length - 2]), aProjectFlat(points[points.length - 1]));\n distance += pointDistance;\n results.push(pushDis(points[points.length - 1], distance));\n return {\n results,\n totalDistance: distance\n };\n }\n}\nfunction getTileSimpleLineVertices(points) {\n if (points.length < 2) {\n return {\n results: points\n };\n } else {\n const results = [];\n const point = pushDis(points[0]);\n results.push(point);\n for (let i = 1; i < points.length - 1; i++) {\n const mulPoint = pushDis(points[i]);\n results.push(mulPoint);\n results.push(mulPoint);\n }\n results.push(pushDis(points[points.length - 1]));\n return {\n results\n };\n }\n}\nexport function polygonTriangulation(feature) {\n const {\n coordinates\n } = feature;\n const flattengeo = earcut.flatten(coordinates);\n const {\n vertices,\n dimensions,\n holes\n } = flattengeo;\n const indices = getPolygonSurfaceIndices(vertices, holes, dimensions);\n return {\n indices,\n vertices,\n size: dimensions\n };\n}\n\n// 构建几何图形(带有中心点和大小)\nexport function polygonTriangulationWithCenter(feature) {\n const {\n indices,\n vertices,\n size\n } = polygonTriangulation(feature);\n return {\n indices: indices,\n vertices: getVerticesWithCenter(vertices),\n size: size + 4\n };\n}\nfunction getVerticesWithCenter(vertices) {\n const verticesWithCenter = [];\n const {\n center,\n radius\n } = calculatePointsCenterAndRadius(vertices);\n for (let i = 0; i < vertices.length; i += 2) {\n const lng = vertices[i];\n const lat = vertices[i + 1];\n verticesWithCenter.push(lng, lat, 0, ...center, radius);\n }\n return verticesWithCenter;\n}\nexport function PolygonExtrudeTriangulation(feature) {\n const coordinates = feature.coordinates;\n const {\n positions,\n index,\n normals\n } = extrude_PolygonNormal(coordinates, true);\n return {\n vertices: positions,\n // [ x, y, z, uv.x,uv.y ]\n indices: index,\n normals,\n size: 5\n };\n}\nexport function HeatmapGridTriangulation(feature) {\n const {\n shape\n } = feature;\n const {\n positions,\n index\n } = getHeatmapGeometry(shape);\n return {\n vertices: positions,\n // [ x, y, z ] 多边形顶点\n indices: index,\n size: 3\n };\n}\n\n/**\n * 图片图层顶点构造\n * @param feature 数据\n */\nexport function RasterImageTriangulation(feature) {\n const coordinates = feature.coordinates;\n // [ x, y, z. uv.x, uv.y]\n const positions = [...coordinates[0], 0, 0, 0, ...coordinates[1], 0, 1, 0, ...coordinates[2], 0, 1, 1, ...coordinates[3], 0, 0, 1];\n const indexs = [0, 1, 2, 0, 2, 3];\n return {\n vertices: positions,\n indices: indexs,\n size: 5\n };\n}\n\n/**\n * 计算3D弧线顶点\n * @param feature 映射数据\n * @param segNum 弧线线段数\n */\nexport function LineArcTriangulation(feature, styleOption) {\n // @ts-ignore\n const {\n segmentNumber = 30\n } = styleOption;\n const coordinates = feature.coordinates;\n const positions = [];\n const indexArray = [];\n for (let i = 0; i < segmentNumber; i++) {\n // 上线两个顶点\n // [ x, y, z, sx,sy, tx,ty]\n positions.push(i, 1, i, coordinates[0][0], coordinates[0][1], coordinates[1][0], coordinates[1][1], i, -1, i, coordinates[0][0], coordinates[0][1], coordinates[1][0], coordinates[1][1]);\n if (i !== segmentNumber - 1) {\n indexArray.push(...[0, 1, 2, 1, 3, 2].map(v => {\n return i * 2 + v;\n }));\n }\n }\n return {\n vertices: positions,\n indices: indexArray,\n size: 7\n };\n}\n\n/**\n * 构建热力图密度图的顶点\n * @param feature\n * @returns\n */\nexport function HeatmapTriangulation(feature) {\n const coordinates = feature.coordinates;\n if (coordinates.length === 2) {\n coordinates.push(0);\n }\n const dir = addDir(-1, 1);\n const dir1 = addDir(1, 1);\n const dir2 = addDir(-1, -1);\n const dir3 = addDir(1, -1);\n // [x,y,z, dirx ,diry, weight]\n const positions = [...coordinates, ...dir, ...coordinates, ...dir2, ...coordinates, ...dir3, ...coordinates, ...dir1];\n const indexArray = [0, 1, 2, 3, 0, 2];\n return {\n vertices: positions,\n indices: indexArray,\n size: 5\n };\n}\n\n/**\n * 点图层3d geomerty\n * @param shape 3D形状\n */\nfunction getGeometry(shape, needFlat = false) {\n if (GeometryCache && GeometryCache[shape]) {\n return GeometryCache[shape];\n }\n const path = geometryShape[shape] ? geometryShape[shape]() : geometryShape.cylinder();\n const geometry = extrude_PolygonNormal([path], needFlat);\n GeometryCache[shape] = geometry;\n return geometry;\n}\nexport function computeVertexNormals(positions, indexArray, dim = 3, needFlat = false) {\n const normals = new Float32Array(positions.length / dim * 3);\n let vA;\n let vB;\n let vC;\n const cb = vec3.create();\n const ab = vec3.create();\n const normal = vec3.create();\n for (let i = 0, li = indexArray.length; i < li; i += 3) {\n vA = indexArray[i + 0] * 3;\n vB = indexArray[i + 1] * 3;\n vC = indexArray[i + 2] * 3;\n let p1 = [positions[vA], positions[vA + 1]];\n let p2 = [positions[vB], positions[vB + 1]];\n let p3 = [positions[vC], positions[vC + 1]];\n if (needFlat) {\n p1 = lngLatToMeters(p1);\n p2 = lngLatToMeters(p2);\n p3 = lngLatToMeters(p3);\n }\n const [ax, ay] = p1;\n const pA = vec3.fromValues(ax, ay, positions[vA + 2]);\n const [bx, by] = p2;\n const pB = vec3.fromValues(bx, by, positions[vB + 2]);\n const [cx, cy] = p3;\n const pC = vec3.fromValues(cx, cy, positions[vC + 2]);\n vec3.sub(cb, pC, pB);\n vec3.sub(ab, pA, pB);\n vec3.cross(normal, cb, ab);\n normals[vA] += cb[0];\n normals[vA + 1] += cb[1];\n normals[vA + 2] += cb[2];\n normals[vB] += cb[0];\n normals[vB + 1] += cb[1];\n normals[vB + 2] += cb[2];\n normals[vC] += cb[0];\n normals[vC + 1] += cb[1];\n normals[vC + 2] += cb[2];\n }\n normalizeNormals(normals);\n return normals;\n}\nfunction normalizeNormals(normals) {\n for (let i = 0, li = normals.length; i < li; i += 3) {\n const normal = vec3.fromValues(normals[i], normals[i + 1], normals[i + 2]);\n const newNormal = vec3.create();\n vec3.normalize(newNormal, normal);\n normals.set(newNormal, i);\n }\n}\nexport function checkIsClosed(points) {\n const p1 = points[0][0];\n const p2 = points[0][points[0].length - 1];\n return p1[0] === p2[0] && p1[1] === p2[1];\n}\nfunction getHeatmapGeometry(shape) {\n const shape3d = ['cylinder', 'triangleColumn', 'hexagonColumn', 'squareColumn'];\n const path = geometryShape[shape] ? geometryShape[shape]() : geometryShape.circle();\n const geometry = shape3d.indexOf(shape) === -1 ? fillPolygon([path]) : extrudePolygon([path]);\n // const geometry = fillPolygon([path]);\n return geometry;\n}\n// 热力图计算范围\nfunction addDir(dirX, dirY) {\n const x = (dirX + 1) / 2;\n const y = (dirY + 1) / 2;\n return [x, y];\n}\n\n/**\n * 构建地球三角网格\n * @returns\n */\nexport function earthTriangulation() {\n const earthmesh = primitiveSphere(EARTH_RADIUS, {\n segments: EARTH_SEGMENTS\n });\n const {\n positionsArr,\n indicesArr,\n normalArr\n } = earthmesh;\n return {\n vertices: positionsArr,\n indices: indicesArr,\n size: 5,\n normals: normalArr\n };\n}\nexport function earthOuterTriangulation() {\n const earthmesh = primitiveSphere(EARTH_RADIUS + EARTH_RADIUS_OUTER, {\n segments: EARTH_SEGMENTS\n });\n const {\n positionsArr,\n indicesArr,\n normalArr\n } = earthmesh;\n return {\n vertices: positionsArr,\n indices: indicesArr,\n size: 5,\n normals: normalArr\n };\n}","function _interopRequireDefault(e) {\n return e && e.__esModule ? e : {\n \"default\": e\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nfunction _createForOfIteratorHelper(r, e) {\n var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (!t) {\n if (Array.isArray(r) || (t = unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) {\n t && (r = t);\n var _n = 0,\n F = function F() {};\n return {\n s: F,\n n: function n() {\n return _n >= r.length ? {\n done: !0\n } : {\n done: !1,\n value: r[_n++]\n };\n },\n e: function e(r) {\n throw r;\n },\n f: F\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n var o,\n a = !0,\n u = !1;\n return {\n s: function s() {\n t = t.call(r);\n },\n n: function n() {\n var r = t.next();\n return a = r.done, r;\n },\n e: function e(r) {\n u = !0, o = r;\n },\n f: function f() {\n try {\n a || null == t[\"return\"] || t[\"return\"]();\n } finally {\n if (u) throw o;\n }\n }\n };\n}\nexport { _createForOfIteratorHelper as default };","/**\n * Resize detection strategy that injects objects to elements in order to detect resize events.\n * Heavily inspired by: http://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/\n */\n\n\"use strict\";\n\nvar browserDetector = require(\"../browser-detector\");\n\nmodule.exports = function(options) {\n options = options || {};\n var reporter = options.reporter;\n var batchProcessor = options.batchProcessor;\n var getState = options.stateHandler.getState;\n\n if(!reporter) {\n throw new Error(\"Missing required dependency: reporter.\");\n }\n\n /**\n * Adds a resize event listener to the element.\n * @public\n * @param {element} element The element that should have the listener added.\n * @param {function} listener The listener callback to be called for each resize event of the element. The element will be given as a parameter to the listener callback.\n */\n function addListener(element, listener) {\n function listenerProxy() {\n listener(element);\n }\n\n if(browserDetector.isIE(8)) {\n //IE 8 does not support object, but supports the resize event directly on elements.\n getState(element).object = {\n proxy: listenerProxy\n };\n element.attachEvent(\"onresize\", listenerProxy);\n } else {\n var object = getObject(element);\n\n if(!object) {\n throw new Error(\"Element is not detectable by this strategy.\");\n }\n\n object.contentDocument.defaultView.addEventListener(\"resize\", listenerProxy);\n }\n }\n\n function buildCssTextString(rules) {\n var seperator = options.important ? \" !important; \" : \"; \";\n\n return (rules.join(seperator) + seperator).trim();\n }\n\n /**\n * Makes an element detectable and ready to be listened for resize events. Will call the callback when the element is ready to be listened for resize changes.\n * @private\n * @param {object} options Optional options object.\n * @param {element} element The element to make detectable\n * @param {function} callback The callback to be called when the element is ready to be listened for resize changes. Will be called with the element as first parameter.\n */\n function makeDetectable(options, element, callback) {\n if (!callback) {\n callback = element;\n element = options;\n options = null;\n }\n\n options = options || {};\n var debug = options.debug;\n\n function injectObject(element, callback) {\n var OBJECT_STYLE = buildCssTextString([\"display: block\", \"position: absolute\", \"top: 0\", \"left: 0\", \"width: 100%\", \"height: 100%\", \"border: none\", \"padding: 0\", \"margin: 0\", \"opacity: 0\", \"z-index: -1000\", \"pointer-events: none\"]);\n\n //The target element needs to be positioned (everything except static) so the absolute positioned object will be positioned relative to the target element.\n\n // Position altering may be performed directly or on object load, depending on if style resolution is possible directly or not.\n var positionCheckPerformed = false;\n\n // The element may not yet be attached to the DOM, and therefore the style object may be empty in some browsers.\n // Since the style object is a reference, it will be updated as soon as the element is attached to the DOM.\n var style = window.getComputedStyle(element);\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n getState(element).startSize = {\n width: width,\n height: height\n };\n\n function mutateDom() {\n function alterPositionStyles() {\n if(style.position === \"static\") {\n element.style.setProperty(\"position\", \"relative\", options.important ? \"important\" : \"\");\n\n var removeRelativeStyles = function(reporter, element, style, property) {\n function getNumericalValue(value) {\n return value.replace(/[^-\\d\\.]/g, \"\");\n }\n\n var value = style[property];\n\n if(value !== \"auto\" && getNumericalValue(value) !== \"0\") {\n reporter.warn(\"An element that is positioned static has style.\" + property + \"=\" + value + \" which is ignored due to the static positioning. The element will need to be positioned relative, so the style.\" + property + \" will be set to 0. Element: \", element);\n element.style.setProperty(property, \"0\", options.important ? \"important\" : \"\");\n }\n };\n\n //Check so that there are no accidental styles that will make the element styled differently now that is is relative.\n //If there are any, set them to 0 (this should be okay with the user since the style properties did nothing before [since the element was positioned static] anyway).\n removeRelativeStyles(reporter, element, style, \"top\");\n removeRelativeStyles(reporter, element, style, \"right\");\n removeRelativeStyles(reporter, element, style, \"bottom\");\n removeRelativeStyles(reporter, element, style, \"left\");\n }\n }\n\n function onObjectLoad() {\n // The object has been loaded, which means that the element now is guaranteed to be attached to the DOM.\n if (!positionCheckPerformed) {\n alterPositionStyles();\n }\n\n /*jshint validthis: true */\n\n function getDocument(element, callback) {\n //Opera 12 seem to call the object.onload before the actual document has been created.\n //So if it is not present, poll it with an timeout until it is present.\n //TODO: Could maybe be handled better with object.onreadystatechange or similar.\n if(!element.contentDocument) {\n var state = getState(element);\n if (state.checkForObjectDocumentTimeoutId) {\n window.clearTimeout(state.checkForObjectDocumentTimeoutId);\n }\n state.checkForObjectDocumentTimeoutId = setTimeout(function checkForObjectDocument() {\n state.checkForObjectDocumentTimeoutId = 0;\n getDocument(element, callback);\n }, 100);\n\n return;\n }\n\n callback(element.contentDocument);\n }\n\n //Mutating the object element here seems to fire another load event.\n //Mutating the inner document of the object element is fine though.\n var objectElement = this;\n\n //Create the style element to be added to the object.\n getDocument(objectElement, function onObjectDocumentReady(objectDocument) {\n //Notify that the element is ready to be listened to.\n callback(element);\n });\n }\n\n // The element may be detached from the DOM, and some browsers does not support style resolving of detached elements.\n // The alterPositionStyles needs to be delayed until we know the element has been attached to the DOM (which we are sure of when the onObjectLoad has been fired), if style resolution is not possible.\n if (style.position !== \"\") {\n alterPositionStyles(style);\n positionCheckPerformed = true;\n }\n\n //Add an object element as a child to the target element that will be listened to for resize events.\n var object = document.createElement(\"object\");\n object.style.cssText = OBJECT_STYLE;\n object.tabIndex = -1;\n object.type = \"text/html\";\n object.setAttribute(\"aria-hidden\", \"true\");\n object.onload = onObjectLoad;\n\n //Safari: This must occur before adding the object to the DOM.\n //IE: Does not like that this happens before, even if it is also added after.\n if(!browserDetector.isIE()) {\n object.data = \"about:blank\";\n }\n\n if (!getState(element)) {\n // The element has been uninstalled before the actual loading happened.\n return;\n }\n\n element.appendChild(object);\n getState(element).object = object;\n\n //IE: This must occur after adding the object to the DOM.\n if(browserDetector.isIE()) {\n object.data = \"about:blank\";\n }\n }\n\n if(batchProcessor) {\n batchProcessor.add(mutateDom);\n } else {\n mutateDom();\n }\n }\n\n if(browserDetector.isIE(8)) {\n //IE 8 does not support objects properly. Luckily they do support the resize event.\n //So do not inject the object and notify that the element is already ready to be listened to.\n //The event handler for the resize event is attached in the utils.addListener instead.\n callback(element);\n } else {\n injectObject(element, callback);\n }\n }\n\n /**\n * Returns the child object of the target element.\n * @private\n * @param {element} element The target element.\n * @returns The object element of the target.\n */\n function getObject(element) {\n return getState(element).object;\n }\n\n function uninstall(element) {\n if (!getState(element)) {\n return;\n }\n\n var object = getObject(element);\n\n if (!object) {\n return;\n }\n\n if (browserDetector.isIE(8)) {\n element.detachEvent(\"onresize\", object.proxy);\n } else {\n element.removeChild(object);\n }\n\n if (getState(element).checkForObjectDocumentTimeoutId) {\n window.clearTimeout(getState(element).checkForObjectDocumentTimeoutId);\n }\n\n delete getState(element).object;\n }\n\n return {\n makeDetectable: makeDetectable,\n addListener: addListener,\n uninstall: uninstall\n };\n};\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","// src/factory.ts\nvar TRANSFORMS = {};\nvar PARSERS = {};\nvar getParser = (type) => PARSERS[type];\nvar registerParser = (type, parserFunction) => {\n PARSERS[type] = parserFunction;\n};\nvar getTransform = (type) => TRANSFORMS[type];\nvar registerTransform = (type, transFunction) => {\n TRANSFORMS[type] = transFunction;\n};\nexport {\n getParser,\n getTransform,\n registerParser,\n registerTransform\n};\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","// src/utils/util.ts\nimport { lodashUtil } from \"@antv/l7-utils\";\nimport rewind from \"@mapbox/geojson-rewind\";\nfunction getColumn(data, columnName) {\n return data.map((item) => {\n return item[columnName] * 1;\n });\n}\nfunction isRasterFileData(data) {\n if (data === void 0) {\n return false;\n }\n if (!Array.isArray(data) && data.data !== void 0) {\n return true;\n } else {\n return false;\n }\n}\nfunction isRasterFileDataArray(data) {\n if (Array.isArray(data)) {\n if (data.length === 0) {\n return false;\n }\n if (isRasterFileData(data[0])) {\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n}\nfunction isNumberArray(data) {\n if (Array.isArray(data)) {\n if (data.length === 0) {\n return true;\n }\n if (typeof data[0] === \"number\") {\n return true;\n } else {\n return false;\n }\n }\n return false;\n}\nfunction geojsonRewind(geojson) {\n const data = Object.isFrozen(geojson) ? lodashUtil.cloneDeep(geojson) : geojson;\n rewind(data, true);\n return data;\n}\nfunction extentToCoord(coord, extent) {\n return coord ? coord : [\n [extent[0], extent[3]],\n [extent[2], extent[3]],\n [extent[2], extent[1]],\n [extent[0], extent[1]]\n ];\n}\nexport {\n extentToCoord,\n geojsonRewind,\n getColumn,\n isNumberArray,\n isRasterFileData,\n isRasterFileDataArray\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/parser/json.ts\nimport { getCoords } from \"@turf/invariant\";\nimport { flattenEach } from \"@turf/meta\";\nimport { geojsonRewind } from \"../utils/util\";\nfunction json(data, cfg) {\n const { x, y, x1, y1, coordinates, geometry } = cfg;\n const resultData = [];\n if (!Array.isArray(data)) {\n return {\n dataArray: []\n };\n }\n if (geometry) {\n data.filter((item) => {\n return item[geometry] && item[geometry].type && item[geometry].coordinates && item[geometry].coordinates.length > 0;\n }).forEach((col, index) => {\n const rewindGeometry = geojsonRewind(col[geometry]);\n flattenEach(rewindGeometry, (currentFeature) => {\n const coord = getCoords(currentFeature);\n const dataItem = __spreadProps(__spreadValues({}, col), {\n _id: index,\n coordinates: coord\n });\n resultData.push(dataItem);\n });\n });\n return {\n dataArray: resultData\n };\n }\n for (let featureIndex = 0; featureIndex < data.length; featureIndex++) {\n const col = data[featureIndex];\n let coords = [];\n if (coordinates) {\n let type = \"Polygon\";\n if (!Array.isArray(coordinates[0])) {\n type = \"Point\";\n }\n if (Array.isArray(coordinates[0]) && !Array.isArray(coordinates[0][0])) {\n type = \"LineString\";\n }\n const rewindGeometry = geojsonRewind({\n type,\n coordinates: col[coordinates]\n });\n coords = rewindGeometry.coordinates;\n } else if (x && y && x1 && y1) {\n const from = [parseFloat(col[x]), parseFloat(col[y])];\n const to = [parseFloat(col[x1]), parseFloat(col[y1])];\n coords = [from, to];\n } else if (x && y) {\n coords = [parseFloat(col[x]), parseFloat(col[y])];\n }\n const dataItem = __spreadProps(__spreadValues({}, col), {\n _id: featureIndex,\n coordinates: coords\n });\n resultData.push(dataItem);\n }\n return {\n dataArray: resultData\n };\n}\nexport {\n json as default\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/parser/geojson.ts\nimport { getCoords } from \"@turf/invariant\";\nimport { flattenEach } from \"@turf/meta\";\nimport { geojsonRewind } from \"../utils/util\";\nfunction djb2hash(field) {\n const str = field.toString();\n let hash = 5381;\n let i = str.length;\n while (i) {\n hash = hash * 33 ^ str.charCodeAt(--i);\n }\n return hash >>> 0;\n}\nfunction getFeatureID(feature, key) {\n if (key === void 0) {\n return null;\n }\n if (!isNaN(feature.properties[key] * 1)) {\n return feature.properties[key] * 1;\n }\n if (feature.properties && feature.properties[key]) {\n return djb2hash(feature.properties[key] + \"\") % 1000019;\n }\n return null;\n}\nfunction geoJSON(data, cfg) {\n const resultData = [];\n const featureKeys = {};\n if (!data.features) {\n data.features = [];\n return {\n dataArray: []\n };\n }\n data.features = data.features.filter((item) => {\n const geometry = item.geometry;\n return item != null && geometry && geometry.type && geometry.coordinates && geometry.coordinates.length > 0;\n });\n data = geojsonRewind(data);\n if (data.features.length === 0) {\n return {\n dataArray: [],\n featureKeys\n };\n }\n flattenEach(data, (currentFeature, featureIndex) => {\n let featureId = getFeatureID(currentFeature, cfg == null ? void 0 : cfg.featureId);\n if (featureId === null) {\n featureId = featureIndex;\n }\n const sortedID = featureId;\n const coord = getCoords(currentFeature);\n const dataItem = __spreadProps(__spreadValues({}, currentFeature.properties), {\n coordinates: coord,\n _id: sortedID\n });\n resultData.push(dataItem);\n });\n return {\n dataArray: resultData,\n featureKeys\n };\n}\nexport {\n geoJSON as default\n};\n","\nexport default function createFeature(id, type, geom, tags) {\n var feature = {\n id: typeof id === 'undefined' ? null : id,\n type: type,\n geometry: geom,\n tags: tags,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n calcBBox(feature);\n return feature;\n}\n\nfunction calcBBox(feature) {\n var geom = feature.geometry;\n var type = feature.type;\n\n if (type === 'Point' || type === 'MultiPoint' || type === 'LineString') {\n calcLineBBox(feature, geom);\n\n } else if (type === 'Polygon' || type === 'MultiLineString') {\n for (var i = 0; i < geom.length; i++) {\n calcLineBBox(feature, geom[i]);\n }\n\n } else if (type === 'MultiPolygon') {\n for (i = 0; i < geom.length; i++) {\n for (var j = 0; j < geom[i].length; j++) {\n calcLineBBox(feature, geom[i][j]);\n }\n }\n }\n}\n\nfunction calcLineBBox(feature, geom) {\n for (var i = 0; i < geom.length; i += 3) {\n feature.minX = Math.min(feature.minX, geom[i]);\n feature.minY = Math.min(feature.minY, geom[i + 1]);\n feature.maxX = Math.max(feature.maxX, geom[i]);\n feature.maxY = Math.max(feature.maxY, geom[i + 1]);\n }\n}\n","\nimport simplify from './simplify';\nimport createFeature from './feature';\n\n// converts GeoJSON feature into an intermediate projected JSON vector format with simplification data\n\nexport default function convert(data, options) {\n var features = [];\n if (data.type === 'FeatureCollection') {\n for (var i = 0; i < data.features.length; i++) {\n convertFeature(features, data.features[i], options, i);\n }\n\n } else if (data.type === 'Feature') {\n convertFeature(features, data, options);\n\n } else {\n // single geometry or a geometry collection\n convertFeature(features, {geometry: data}, options);\n }\n\n return features;\n}\n\nfunction convertFeature(features, geojson, options, index) {\n if (!geojson.geometry) return;\n\n var coords = geojson.geometry.coordinates;\n var type = geojson.geometry.type;\n var tolerance = Math.pow(options.tolerance / ((1 << options.maxZoom) * options.extent), 2);\n var geometry = [];\n var id = geojson.id;\n if (options.promoteId) {\n id = geojson.properties[options.promoteId];\n } else if (options.generateId) {\n id = index || 0;\n }\n if (type === 'Point') {\n convertPoint(coords, geometry);\n\n } else if (type === 'MultiPoint') {\n for (var i = 0; i < coords.length; i++) {\n convertPoint(coords[i], geometry);\n }\n\n } else if (type === 'LineString') {\n convertLine(coords, geometry, tolerance, false);\n\n } else if (type === 'MultiLineString') {\n if (options.lineMetrics) {\n // explode into linestrings to be able to track metrics\n for (i = 0; i < coords.length; i++) {\n geometry = [];\n convertLine(coords[i], geometry, tolerance, false);\n features.push(createFeature(id, 'LineString', geometry, geojson.properties));\n }\n return;\n } else {\n convertLines(coords, geometry, tolerance, false);\n }\n\n } else if (type === 'Polygon') {\n convertLines(coords, geometry, tolerance, true);\n\n } else if (type === 'MultiPolygon') {\n for (i = 0; i < coords.length; i++) {\n var polygon = [];\n convertLines(coords[i], polygon, tolerance, true);\n geometry.push(polygon);\n }\n } else if (type === 'GeometryCollection') {\n for (i = 0; i < geojson.geometry.geometries.length; i++) {\n convertFeature(features, {\n id: id,\n geometry: geojson.geometry.geometries[i],\n properties: geojson.properties\n }, options, index);\n }\n return;\n } else {\n throw new Error('Input data is not a valid GeoJSON object.');\n }\n\n features.push(createFeature(id, type, geometry, geojson.properties));\n}\n\nfunction convertPoint(coords, out) {\n out.push(projectX(coords[0]));\n out.push(projectY(coords[1]));\n out.push(0);\n}\n\nfunction convertLine(ring, out, tolerance, isPolygon) {\n var x0, y0;\n var size = 0;\n\n for (var j = 0; j < ring.length; j++) {\n var x = projectX(ring[j][0]);\n var y = projectY(ring[j][1]);\n\n out.push(x);\n out.push(y);\n out.push(0);\n\n if (j > 0) {\n if (isPolygon) {\n size += (x0 * y - x * y0) / 2; // area\n } else {\n size += Math.sqrt(Math.pow(x - x0, 2) + Math.pow(y - y0, 2)); // length\n }\n }\n x0 = x;\n y0 = y;\n }\n\n var last = out.length - 3;\n out[2] = 1;\n simplify(out, 0, last, tolerance);\n out[last + 2] = 1;\n\n out.size = Math.abs(size);\n out.start = 0;\n out.end = out.size;\n}\n\nfunction convertLines(rings, out, tolerance, isPolygon) {\n for (var i = 0; i < rings.length; i++) {\n var geom = [];\n convertLine(rings[i], geom, tolerance, isPolygon);\n out.push(geom);\n }\n}\n\nfunction projectX(x) {\n return x / 360 + 0.5;\n}\n\nfunction projectY(y) {\n var sin = Math.sin(y * Math.PI / 180);\n var y2 = 0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI;\n return y2 < 0 ? 0 : y2 > 1 ? 1 : y2;\n}\n","\n// calculate simplification data using optimized Douglas-Peucker algorithm\n\nexport default function simplify(coords, first, last, sqTolerance) {\n var maxSqDist = sqTolerance;\n var mid = (last - first) >> 1;\n var minPosToMid = last - first;\n var index;\n\n var ax = coords[first];\n var ay = coords[first + 1];\n var bx = coords[last];\n var by = coords[last + 1];\n\n for (var i = first + 3; i < last; i += 3) {\n var d = getSqSegDist(coords[i], coords[i + 1], ax, ay, bx, by);\n\n if (d > maxSqDist) {\n index = i;\n maxSqDist = d;\n\n } else if (d === maxSqDist) {\n // a workaround to ensure we choose a pivot close to the middle of the list,\n // reducing recursion depth, for certain degenerate inputs\n // https://github.com/mapbox/geojson-vt/issues/104\n var posToMid = Math.abs(i - mid);\n if (posToMid < minPosToMid) {\n index = i;\n minPosToMid = posToMid;\n }\n }\n }\n\n if (maxSqDist > sqTolerance) {\n if (index - first > 3) simplify(coords, first, index, sqTolerance);\n coords[index + 2] = maxSqDist;\n if (last - index > 3) simplify(coords, index, last, sqTolerance);\n }\n}\n\n// square distance from a point to a segment\nfunction getSqSegDist(px, py, x, y, bx, by) {\n\n var dx = bx - x;\n var dy = by - y;\n\n if (dx !== 0 || dy !== 0) {\n\n var t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = bx;\n y = by;\n\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = px - x;\n dy = py - y;\n\n return dx * dx + dy * dy;\n}\n","\nimport createFeature from './feature';\n\n/* clip features between two axis-parallel lines:\n * | |\n * ___|___ | /\n * / | \\____|____/\n * | |\n */\n\nexport default function clip(features, scale, k1, k2, axis, minAll, maxAll, options) {\n\n k1 /= scale;\n k2 /= scale;\n\n if (minAll >= k1 && maxAll < k2) return features; // trivial accept\n else if (maxAll < k1 || minAll >= k2) return null; // trivial reject\n\n var clipped = [];\n\n for (var i = 0; i < features.length; i++) {\n\n var feature = features[i];\n var geometry = feature.geometry;\n var type = feature.type;\n\n var min = axis === 0 ? feature.minX : feature.minY;\n var max = axis === 0 ? feature.maxX : feature.maxY;\n\n if (min >= k1 && max < k2) { // trivial accept\n clipped.push(feature);\n continue;\n } else if (max < k1 || min >= k2) { // trivial reject\n continue;\n }\n\n var newGeometry = [];\n\n if (type === 'Point' || type === 'MultiPoint') {\n clipPoints(geometry, newGeometry, k1, k2, axis);\n\n } else if (type === 'LineString') {\n clipLine(geometry, newGeometry, k1, k2, axis, false, options.lineMetrics);\n\n } else if (type === 'MultiLineString') {\n clipLines(geometry, newGeometry, k1, k2, axis, false);\n\n } else if (type === 'Polygon') {\n clipLines(geometry, newGeometry, k1, k2, axis, true);\n\n } else if (type === 'MultiPolygon') {\n for (var j = 0; j < geometry.length; j++) {\n var polygon = [];\n clipLines(geometry[j], polygon, k1, k2, axis, true);\n if (polygon.length) {\n newGeometry.push(polygon);\n }\n }\n }\n\n if (newGeometry.length) {\n if (options.lineMetrics && type === 'LineString') {\n for (j = 0; j < newGeometry.length; j++) {\n clipped.push(createFeature(feature.id, type, newGeometry[j], feature.tags));\n }\n continue;\n }\n\n if (type === 'LineString' || type === 'MultiLineString') {\n if (newGeometry.length === 1) {\n type = 'LineString';\n newGeometry = newGeometry[0];\n } else {\n type = 'MultiLineString';\n }\n }\n if (type === 'Point' || type === 'MultiPoint') {\n type = newGeometry.length === 3 ? 'Point' : 'MultiPoint';\n }\n\n clipped.push(createFeature(feature.id, type, newGeometry, feature.tags));\n }\n }\n\n return clipped.length ? clipped : null;\n}\n\nfunction clipPoints(geom, newGeom, k1, k2, axis) {\n for (var i = 0; i < geom.length; i += 3) {\n var a = geom[i + axis];\n\n if (a >= k1 && a <= k2) {\n newGeom.push(geom[i]);\n newGeom.push(geom[i + 1]);\n newGeom.push(geom[i + 2]);\n }\n }\n}\n\nfunction clipLine(geom, newGeom, k1, k2, axis, isPolygon, trackMetrics) {\n\n var slice = newSlice(geom);\n var intersect = axis === 0 ? intersectX : intersectY;\n var len = geom.start;\n var segLen, t;\n\n for (var i = 0; i < geom.length - 3; i += 3) {\n var ax = geom[i];\n var ay = geom[i + 1];\n var az = geom[i + 2];\n var bx = geom[i + 3];\n var by = geom[i + 4];\n var a = axis === 0 ? ax : ay;\n var b = axis === 0 ? bx : by;\n var exited = false;\n\n if (trackMetrics) segLen = Math.sqrt(Math.pow(ax - bx, 2) + Math.pow(ay - by, 2));\n\n if (a < k1) {\n // ---|--> | (line enters the clip region from the left)\n if (b > k1) {\n t = intersect(slice, ax, ay, bx, by, k1);\n if (trackMetrics) slice.start = len + segLen * t;\n }\n } else if (a > k2) {\n // | <--|--- (line enters the clip region from the right)\n if (b < k2) {\n t = intersect(slice, ax, ay, bx, by, k2);\n if (trackMetrics) slice.start = len + segLen * t;\n }\n } else {\n addPoint(slice, ax, ay, az);\n }\n if (b < k1 && a >= k1) {\n // <--|--- | or <--|-----|--- (line exits the clip region on the left)\n t = intersect(slice, ax, ay, bx, by, k1);\n exited = true;\n }\n if (b > k2 && a <= k2) {\n // | ---|--> or ---|-----|--> (line exits the clip region on the right)\n t = intersect(slice, ax, ay, bx, by, k2);\n exited = true;\n }\n\n if (!isPolygon && exited) {\n if (trackMetrics) slice.end = len + segLen * t;\n newGeom.push(slice);\n slice = newSlice(geom);\n }\n\n if (trackMetrics) len += segLen;\n }\n\n // add the last point\n var last = geom.length - 3;\n ax = geom[last];\n ay = geom[last + 1];\n az = geom[last + 2];\n a = axis === 0 ? ax : ay;\n if (a >= k1 && a <= k2) addPoint(slice, ax, ay, az);\n\n // close the polygon if its endpoints are not the same after clipping\n last = slice.length - 3;\n if (isPolygon && last >= 3 && (slice[last] !== slice[0] || slice[last + 1] !== slice[1])) {\n addPoint(slice, slice[0], slice[1], slice[2]);\n }\n\n // add the final slice\n if (slice.length) {\n newGeom.push(slice);\n }\n}\n\nfunction newSlice(line) {\n var slice = [];\n slice.size = line.size;\n slice.start = line.start;\n slice.end = line.end;\n return slice;\n}\n\nfunction clipLines(geom, newGeom, k1, k2, axis, isPolygon) {\n for (var i = 0; i < geom.length; i++) {\n clipLine(geom[i], newGeom, k1, k2, axis, isPolygon, false);\n }\n}\n\nfunction addPoint(out, x, y, z) {\n out.push(x);\n out.push(y);\n out.push(z);\n}\n\nfunction intersectX(out, ax, ay, bx, by, x) {\n var t = (x - ax) / (bx - ax);\n out.push(x);\n out.push(ay + (by - ay) * t);\n out.push(1);\n return t;\n}\n\nfunction intersectY(out, ax, ay, bx, by, y) {\n var t = (y - ay) / (by - ay);\n out.push(ax + (bx - ax) * t);\n out.push(y);\n out.push(1);\n return t;\n}\n","\nimport clip from './clip';\nimport createFeature from './feature';\n\nexport default function wrap(features, options) {\n var buffer = options.buffer / options.extent;\n var merged = features;\n var left = clip(features, 1, -1 - buffer, buffer, 0, -1, 2, options); // left world copy\n var right = clip(features, 1, 1 - buffer, 2 + buffer, 0, -1, 2, options); // right world copy\n\n if (left || right) {\n merged = clip(features, 1, -buffer, 1 + buffer, 0, -1, 2, options) || []; // center world copy\n\n if (left) merged = shiftFeatureCoords(left, 1).concat(merged); // merge left into center\n if (right) merged = merged.concat(shiftFeatureCoords(right, -1)); // merge right into center\n }\n\n return merged;\n}\n\nfunction shiftFeatureCoords(features, offset) {\n var newFeatures = [];\n\n for (var i = 0; i < features.length; i++) {\n var feature = features[i],\n type = feature.type;\n\n var newGeometry;\n\n if (type === 'Point' || type === 'MultiPoint' || type === 'LineString') {\n newGeometry = shiftCoords(feature.geometry, offset);\n\n } else if (type === 'MultiLineString' || type === 'Polygon') {\n newGeometry = [];\n for (var j = 0; j < feature.geometry.length; j++) {\n newGeometry.push(shiftCoords(feature.geometry[j], offset));\n }\n } else if (type === 'MultiPolygon') {\n newGeometry = [];\n for (j = 0; j < feature.geometry.length; j++) {\n var newPolygon = [];\n for (var k = 0; k < feature.geometry[j].length; k++) {\n newPolygon.push(shiftCoords(feature.geometry[j][k], offset));\n }\n newGeometry.push(newPolygon);\n }\n }\n\n newFeatures.push(createFeature(feature.id, type, newGeometry, feature.tags));\n }\n\n return newFeatures;\n}\n\nfunction shiftCoords(points, offset) {\n var newPoints = [];\n newPoints.size = points.size;\n\n if (points.start !== undefined) {\n newPoints.start = points.start;\n newPoints.end = points.end;\n }\n\n for (var i = 0; i < points.length; i += 3) {\n newPoints.push(points[i] + offset, points[i + 1], points[i + 2]);\n }\n return newPoints;\n}\n","\n// Transforms the coordinates of each feature in the given tile from\n// mercator-projected space into (extent x extent) tile space.\nexport default function transformTile(tile, extent) {\n if (tile.transformed) return tile;\n\n var z2 = 1 << tile.z,\n tx = tile.x,\n ty = tile.y,\n i, j, k;\n\n for (i = 0; i < tile.features.length; i++) {\n var feature = tile.features[i],\n geom = feature.geometry,\n type = feature.type;\n\n feature.geometry = [];\n\n if (type === 1) {\n for (j = 0; j < geom.length; j += 2) {\n feature.geometry.push(transformPoint(geom[j], geom[j + 1], extent, z2, tx, ty));\n }\n } else {\n for (j = 0; j < geom.length; j++) {\n var ring = [];\n for (k = 0; k < geom[j].length; k += 2) {\n ring.push(transformPoint(geom[j][k], geom[j][k + 1], extent, z2, tx, ty));\n }\n feature.geometry.push(ring);\n }\n }\n }\n\n tile.transformed = true;\n\n return tile;\n}\n\nfunction transformPoint(x, y, extent, z2, tx, ty) {\n return [\n Math.round(extent * (x * z2 - tx)),\n Math.round(extent * (y * z2 - ty))];\n}\n","\nexport default function createTile(features, z, tx, ty, options) {\n var tolerance = z === options.maxZoom ? 0 : options.tolerance / ((1 << z) * options.extent);\n var tile = {\n features: [],\n numPoints: 0,\n numSimplified: 0,\n numFeatures: 0,\n source: null,\n x: tx,\n y: ty,\n z: z,\n transformed: false,\n minX: 2,\n minY: 1,\n maxX: -1,\n maxY: 0\n };\n for (var i = 0; i < features.length; i++) {\n tile.numFeatures++;\n addFeature(tile, features[i], tolerance, options);\n\n var minX = features[i].minX;\n var minY = features[i].minY;\n var maxX = features[i].maxX;\n var maxY = features[i].maxY;\n\n if (minX < tile.minX) tile.minX = minX;\n if (minY < tile.minY) tile.minY = minY;\n if (maxX > tile.maxX) tile.maxX = maxX;\n if (maxY > tile.maxY) tile.maxY = maxY;\n }\n return tile;\n}\n\nfunction addFeature(tile, feature, tolerance, options) {\n\n var geom = feature.geometry,\n type = feature.type,\n simplified = [];\n\n if (type === 'Point' || type === 'MultiPoint') {\n for (var i = 0; i < geom.length; i += 3) {\n simplified.push(geom[i]);\n simplified.push(geom[i + 1]);\n tile.numPoints++;\n tile.numSimplified++;\n }\n\n } else if (type === 'LineString') {\n addLine(simplified, geom, tile, tolerance, false, false);\n\n } else if (type === 'MultiLineString' || type === 'Polygon') {\n for (i = 0; i < geom.length; i++) {\n addLine(simplified, geom[i], tile, tolerance, type === 'Polygon', i === 0);\n }\n\n } else if (type === 'MultiPolygon') {\n\n for (var k = 0; k < geom.length; k++) {\n var polygon = geom[k];\n for (i = 0; i < polygon.length; i++) {\n addLine(simplified, polygon[i], tile, tolerance, true, i === 0);\n }\n }\n }\n\n if (simplified.length) {\n var tags = feature.tags || null;\n if (type === 'LineString' && options.lineMetrics) {\n tags = {};\n for (var key in feature.tags) tags[key] = feature.tags[key];\n tags['mapbox_clip_start'] = geom.start / geom.size;\n tags['mapbox_clip_end'] = geom.end / geom.size;\n }\n var tileFeature = {\n geometry: simplified,\n type: type === 'Polygon' || type === 'MultiPolygon' ? 3 :\n type === 'LineString' || type === 'MultiLineString' ? 2 : 1,\n tags: tags\n };\n if (feature.id !== null) {\n tileFeature.id = feature.id;\n }\n tile.features.push(tileFeature);\n }\n}\n\nfunction addLine(result, geom, tile, tolerance, isPolygon, isOuter) {\n var sqTolerance = tolerance * tolerance;\n\n if (tolerance > 0 && (geom.size < (isPolygon ? sqTolerance : tolerance))) {\n tile.numPoints += geom.length / 3;\n return;\n }\n\n var ring = [];\n\n for (var i = 0; i < geom.length; i += 3) {\n if (tolerance === 0 || geom[i + 2] > sqTolerance) {\n tile.numSimplified++;\n ring.push(geom[i]);\n ring.push(geom[i + 1]);\n }\n tile.numPoints++;\n }\n\n if (isPolygon) rewind(ring, isOuter);\n\n result.push(ring);\n}\n\nfunction rewind(ring, clockwise) {\n var area = 0;\n for (var i = 0, len = ring.length, j = len - 2; i < len; j = i, i += 2) {\n area += (ring[i] - ring[j]) * (ring[i + 1] + ring[j + 1]);\n }\n if (area > 0 === clockwise) {\n for (i = 0, len = ring.length; i < len / 2; i += 2) {\n var x = ring[i];\n var y = ring[i + 1];\n ring[i] = ring[len - 2 - i];\n ring[i + 1] = ring[len - 1 - i];\n ring[len - 2 - i] = x;\n ring[len - 1 - i] = y;\n }\n }\n}\n","\nimport convert from './convert'; // GeoJSON conversion and preprocessing\nimport clip from './clip'; // stripe clipping algorithm\nimport wrap from './wrap'; // date line processing\nimport transform from './transform'; // coordinate transformation\nimport createTile from './tile'; // final simplified tile generation\n\nexport default function geojsonvt(data, options) {\n return new GeoJSONVT(data, options);\n}\n\nfunction GeoJSONVT(data, options) {\n options = this.options = extend(Object.create(this.options), options);\n\n var debug = options.debug;\n\n if (debug) console.time('preprocess data');\n\n if (options.maxZoom < 0 || options.maxZoom > 24) throw new Error('maxZoom should be in the 0-24 range');\n if (options.promoteId && options.generateId) throw new Error('promoteId and generateId cannot be used together.');\n\n var features = convert(data, options);\n\n this.tiles = {};\n this.tileCoords = [];\n\n if (debug) {\n console.timeEnd('preprocess data');\n console.log('index: maxZoom: %d, maxPoints: %d', options.indexMaxZoom, options.indexMaxPoints);\n console.time('generate tiles');\n this.stats = {};\n this.total = 0;\n }\n\n features = wrap(features, options);\n\n // start slicing from the top tile down\n if (features.length) this.splitTile(features, 0, 0, 0);\n\n if (debug) {\n if (features.length) console.log('features: %d, points: %d', this.tiles[0].numFeatures, this.tiles[0].numPoints);\n console.timeEnd('generate tiles');\n console.log('tiles generated:', this.total, JSON.stringify(this.stats));\n }\n}\n\nGeoJSONVT.prototype.options = {\n maxZoom: 14, // max zoom to preserve detail on\n indexMaxZoom: 5, // max zoom in the tile index\n indexMaxPoints: 100000, // max number of points per tile in the tile index\n tolerance: 3, // simplification tolerance (higher means simpler)\n extent: 4096, // tile extent\n buffer: 64, // tile buffer on each side\n lineMetrics: false, // whether to calculate line metrics\n promoteId: null, // name of a feature property to be promoted to feature.id\n generateId: false, // whether to generate feature ids. Cannot be used with promoteId\n debug: 0 // logging level (0, 1 or 2)\n};\n\nGeoJSONVT.prototype.splitTile = function (features, z, x, y, cz, cx, cy) {\n\n var stack = [features, z, x, y],\n options = this.options,\n debug = options.debug;\n\n // avoid recursion by using a processing queue\n while (stack.length) {\n y = stack.pop();\n x = stack.pop();\n z = stack.pop();\n features = stack.pop();\n\n var z2 = 1 << z,\n id = toID(z, x, y),\n tile = this.tiles[id];\n\n if (!tile) {\n if (debug > 1) console.time('creation');\n\n tile = this.tiles[id] = createTile(features, z, x, y, options);\n this.tileCoords.push({z: z, x: x, y: y});\n\n if (debug) {\n if (debug > 1) {\n console.log('tile z%d-%d-%d (features: %d, points: %d, simplified: %d)',\n z, x, y, tile.numFeatures, tile.numPoints, tile.numSimplified);\n console.timeEnd('creation');\n }\n var key = 'z' + z;\n this.stats[key] = (this.stats[key] || 0) + 1;\n this.total++;\n }\n }\n\n // save reference to original geometry in tile so that we can drill down later if we stop now\n tile.source = features;\n\n // if it's the first-pass tiling\n if (!cz) {\n // stop tiling if we reached max zoom, or if the tile is too simple\n if (z === options.indexMaxZoom || tile.numPoints <= options.indexMaxPoints) continue;\n\n // if a drilldown to a specific tile\n } else {\n // stop tiling if we reached base zoom or our target tile zoom\n if (z === options.maxZoom || z === cz) continue;\n\n // stop tiling if it's not an ancestor of the target tile\n var m = 1 << (cz - z);\n if (x !== Math.floor(cx / m) || y !== Math.floor(cy / m)) continue;\n }\n\n // if we slice further down, no need to keep source geometry\n tile.source = null;\n\n if (features.length === 0) continue;\n\n if (debug > 1) console.time('clipping');\n\n // values we'll use for clipping\n var k1 = 0.5 * options.buffer / options.extent,\n k2 = 0.5 - k1,\n k3 = 0.5 + k1,\n k4 = 1 + k1,\n tl, bl, tr, br, left, right;\n\n tl = bl = tr = br = null;\n\n left = clip(features, z2, x - k1, x + k3, 0, tile.minX, tile.maxX, options);\n right = clip(features, z2, x + k2, x + k4, 0, tile.minX, tile.maxX, options);\n features = null;\n\n if (left) {\n tl = clip(left, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, options);\n bl = clip(left, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, options);\n left = null;\n }\n\n if (right) {\n tr = clip(right, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, options);\n br = clip(right, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, options);\n right = null;\n }\n\n if (debug > 1) console.timeEnd('clipping');\n\n stack.push(tl || [], z + 1, x * 2, y * 2);\n stack.push(bl || [], z + 1, x * 2, y * 2 + 1);\n stack.push(tr || [], z + 1, x * 2 + 1, y * 2);\n stack.push(br || [], z + 1, x * 2 + 1, y * 2 + 1);\n }\n};\n\nGeoJSONVT.prototype.getTile = function (z, x, y) {\n var options = this.options,\n extent = options.extent,\n debug = options.debug;\n\n if (z < 0 || z > 24) return null;\n\n var z2 = 1 << z;\n x = ((x % z2) + z2) % z2; // wrap tile x coordinate\n\n var id = toID(z, x, y);\n if (this.tiles[id]) return transform(this.tiles[id], extent);\n\n if (debug > 1) console.log('drilling down to z%d-%d-%d', z, x, y);\n\n var z0 = z,\n x0 = x,\n y0 = y,\n parent;\n\n while (!parent && z0 > 0) {\n z0--;\n x0 = Math.floor(x0 / 2);\n y0 = Math.floor(y0 / 2);\n parent = this.tiles[toID(z0, x0, y0)];\n }\n\n if (!parent || !parent.source) return null;\n\n // if we found a parent tile containing the original geometry, we can drill down from it\n if (debug > 1) console.log('found parent tile z%d-%d-%d', z0, x0, y0);\n\n if (debug > 1) console.time('drilling down');\n this.splitTile(parent.source, z0, x0, y0, z, x, y);\n if (debug > 1) console.timeEnd('drilling down');\n\n return this.tiles[id] ? transform(this.tiles[id], extent) : null;\n};\n\nfunction toID(z, x, y) {\n return (((1 << z) * y + x) * 32) + z;\n}\n\nfunction extend(dest, src) {\n for (var i in src) dest[i] = src[i];\n return dest;\n}\n","// src/source/geojsonvt.ts\nvar VectorSource = class {\n constructor(vector, x, y, z) {\n this.vectorLayerCache = {};\n this.x = x;\n this.y = y;\n this.z = z;\n this.vectorTile = vector;\n }\n getTileData(sourceLayer) {\n if (!sourceLayer || !this.vectorTile.layers[sourceLayer]) {\n return [];\n }\n if (this.vectorLayerCache[sourceLayer]) {\n return this.vectorLayerCache[sourceLayer];\n }\n const vectorTile = this.vectorTile.layers[sourceLayer];\n return vectorTile.features;\n }\n getFeatureById() {\n throw new Error(\"Method not implemented.\");\n }\n};\nexport {\n VectorSource as default\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n// src/parser/geojsonvt.ts\nimport geojsonvt from \"geojson-vt\";\nimport VtSource from \"../source/geojsonvt\";\nvar DEFAULT_CONFIG = {\n tileSize: 256,\n minZoom: 0,\n maxZoom: Infinity,\n zoomOffset: 0\n};\nfunction signedArea(ring) {\n let sum = 0;\n for (let i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {\n p1 = ring[i];\n p2 = ring[j];\n sum += (p2.x - p1.x) * (p1.y + p2.y);\n }\n return sum;\n}\nfunction classifyRings(rings) {\n const len = rings.length;\n if (len <= 1) {\n return [rings];\n }\n const polygons = [];\n let polygon;\n let ccw;\n for (let i = 0; i < len; i++) {\n const area = signedArea(rings[i]);\n if (area === 0) {\n continue;\n }\n if (ccw === void 0) {\n ccw = area < 0;\n }\n if (ccw === area < 0) {\n if (polygon) {\n polygons.push(polygon);\n }\n polygon = [rings[i]];\n } else {\n polygon.push(rings[i]);\n }\n }\n if (polygon) {\n polygons.push(polygon);\n }\n return polygons;\n}\nvar VectorTileFeatureTypes = [\"Unknown\", \"Point\", \"LineString\", \"Polygon\"];\nfunction GetGeoJSON(extent, x, y, z, vectorTileFeature) {\n let coords = vectorTileFeature.geometry;\n const currenType = vectorTileFeature.type;\n const currentProperties = vectorTileFeature.tags;\n const currentId = vectorTileFeature.id;\n const size = extent * Math.pow(2, z);\n const x0 = extent * x;\n const y0 = extent * y;\n let type = VectorTileFeatureTypes[currenType];\n let i;\n let j;\n function project(line) {\n for (let index = 0; index < line.length; index++) {\n const p = line[index];\n if (p[3]) {\n break;\n }\n const y2 = 180 - (p[1] + y0) * 360 / size;\n const lng = (p[0] + x0) * 360 / size - 180;\n const lat = 360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90;\n line[index] = [lng, lat, 0, 1];\n }\n }\n switch (currenType) {\n case 1:\n const points = [];\n for (i = 0; i < coords.length; i++) {\n points[i] = coords[i][0];\n }\n coords = points;\n project(coords);\n break;\n case 2:\n for (i = 0; i < coords.length; i++) {\n project(coords[i]);\n }\n break;\n case 3:\n coords = classifyRings(coords);\n for (i = 0; i < coords.length; i++) {\n for (j = 0; j < coords[i].length; j++) {\n project(coords[i][j]);\n }\n }\n break;\n }\n if (coords.length === 1) {\n coords = coords[0];\n } else {\n type = \"Multi\" + type;\n }\n const result = {\n type: \"Feature\",\n geometry: {\n type,\n coordinates: coords\n },\n properties: currentProperties,\n id: currentId,\n relativeOrigin: [0, 0],\n coord: \"\"\n };\n return result;\n}\nvar getVectorTile = (tile, tileIndex, tileParams, extent) => __async(void 0, null, function* () {\n return new Promise((resolve) => {\n const tileData = tileIndex.getTile(tile.z, tile.x, tile.y);\n const features = tileData ? tileData.features.map((vectorTileFeature) => {\n return GetGeoJSON(extent, tileParams.x, tileParams.y, tileParams.z, vectorTileFeature);\n }) : [];\n const vectorTile = {\n layers: {\n defaultLayer: {\n // @ts-ignore\n features\n }\n }\n };\n const vectorSource = new VtSource(vectorTile, tile.x, tile.y, tile.z);\n resolve(vectorSource);\n });\n});\nfunction getOption(cfg) {\n const defaultOptions = {\n // geojson-vt default options\n maxZoom: 14,\n // max zoom to preserve detail on\n indexMaxZoom: 5,\n // max zoom in the tile index\n indexMaxPoints: 1e5,\n // max number of points per tile in the tile index\n tolerance: 3,\n // simplification tolerance (higher means simpler)\n extent: 4096,\n // tile extent\n buffer: 64,\n // tile buffer on each side\n lineMetrics: false,\n // whether to calculate line metrics\n promoteId: null,\n // name of a feature property to be promoted to feature.id\n generateId: true,\n // whether to generate feature ids. Cannot be used with promoteId\n debug: 0\n // logging level (0, 1 or 2)\n };\n if (cfg === void 0 || typeof cfg.geojsonvtOptions === \"undefined\") {\n return defaultOptions;\n } else {\n return __spreadValues(__spreadValues({}, defaultOptions), cfg.geojsonvtOptions);\n }\n}\nfunction geojsonVTTile(data, cfg) {\n const geojsonOptions = getOption(cfg);\n const extent = geojsonOptions.extent || 4096;\n const tileIndex = geojsonvt(data, geojsonOptions);\n const getTileData = (tileParams, tile) => {\n return getVectorTile(tile, tileIndex, tileParams, extent);\n };\n const tilesetOptions = __spreadProps(__spreadValues(__spreadValues({}, DEFAULT_CONFIG), cfg), {\n getTileData\n });\n return {\n data,\n dataArray: [],\n tilesetOptions,\n isTile: true\n };\n}\nexport {\n geojsonVTTile as default\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/parser/image.ts\nimport { getImage, isImageBitmap } from \"@antv/l7-utils\";\nimport { extentToCoord } from \"../utils/util\";\nfunction image(data, cfg) {\n const {\n extent = [121.168, 30.2828, 121.384, 30.4219],\n coordinates,\n requestParameters = {}\n } = cfg;\n const images = new Promise((resolve) => {\n if (data instanceof HTMLImageElement || isImageBitmap(data)) {\n resolve([data]);\n } else {\n loadData(data, requestParameters, (res) => {\n resolve(res);\n });\n }\n });\n const imageCoord = extentToCoord(coordinates, extent);\n const resultData = {\n originData: data,\n images,\n _id: 1,\n dataArray: [\n {\n _id: 0,\n coordinates: imageCoord\n }\n ]\n };\n return resultData;\n}\nfunction loadData(url, requestParameters, done) {\n const imageDatas = [];\n if (typeof url === \"string\") {\n getImage(__spreadProps(__spreadValues({}, requestParameters), { url }), (err, img) => {\n if (img) {\n imageDatas.push(img);\n done(imageDatas);\n }\n });\n } else {\n const imageCount = url.length;\n let imageindex = 0;\n url.forEach((item) => {\n getImage(__spreadProps(__spreadValues({}, requestParameters), { url: item }), (err, img) => {\n imageindex++;\n if (img) {\n imageDatas.push(img);\n }\n if (imageindex === imageCount) {\n done(imageDatas);\n }\n });\n });\n }\n return image;\n}\nexport {\n image as default\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n// src/parser/jsonTile.ts\nimport { getData, getURLFromTemplate } from \"@antv/l7-utils\";\nimport VtSource from \"../source/geojsonvt\";\nvar getVectorTile = (url, tile, requestParameters, getCustomData) => __async(void 0, null, function* () {\n const params = { x: tile.x, y: tile.y, z: tile.z };\n const tileUrl = getURLFromTemplate(url, params);\n return new Promise((resolve) => {\n if (getCustomData) {\n getCustomData(params, (err, data) => {\n if (err || !data) {\n const vectorTile = {\n layers: { defaultLayer: { features: [] } }\n };\n const vectorSource = new VtSource(vectorTile, tile.x, tile.y, tile.z);\n resolve(vectorSource);\n } else {\n const vectorTile = {\n layers: { defaultLayer: { features: data.features } }\n };\n const vectorSource = new VtSource(vectorTile, tile.x, tile.y, tile.z);\n resolve(vectorSource);\n }\n });\n } else {\n getData(\n __spreadProps(__spreadValues({}, requestParameters), {\n url: tileUrl\n }),\n (err, data) => {\n if (err || !data) {\n const vectorTile = {\n layers: {\n defaultLayer: {\n features: []\n }\n }\n };\n const vectorSource = new VtSource(vectorTile, tile.x, tile.y, tile.z);\n resolve(vectorSource);\n } else {\n const json = JSON.parse(data);\n const vectorTile = {\n layers: {\n defaultLayer: {\n features: json\n }\n }\n };\n const vectorSource = new VtSource(vectorTile, tile.x, tile.y, tile.z);\n resolve(vectorSource);\n }\n }\n );\n }\n });\n});\nfunction jsonTile(url, cfg) {\n const getTileData = (_, tile) => {\n return getVectorTile(url, tile, cfg == null ? void 0 : cfg.requestParameters, cfg.getCustomData);\n };\n const tilesetOptions = __spreadProps(__spreadValues({}, cfg), {\n getTileData\n });\n return {\n dataArray: [],\n tilesetOptions,\n isTile: true\n };\n}\nexport {\n jsonTile as default\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n// src/parser/mvt.ts\nimport { getArrayBuffer, getURLFromTemplate } from \"@antv/l7-utils\";\nimport VectorSource from \"../source/vector\";\nvar DEFAULT_CONFIG = {\n tileSize: 256,\n minZoom: 0,\n maxZoom: Infinity,\n zoomOffset: 0,\n warp: true\n};\nvar getVectorTile = (url, tileParams, tile, requestParameters, getCustomData) => __async(void 0, null, function* () {\n const tileUrl = getURLFromTemplate(url, tileParams);\n return new Promise((resolve) => {\n if (getCustomData) {\n getCustomData(\n {\n x: tile.x,\n y: tile.y,\n z: tile.z\n },\n (err, data) => {\n if (err || !data) {\n resolve(void 0);\n } else {\n const vectorSource = new VectorSource(data, tile.x, tile.y, tile.z);\n resolve(vectorSource);\n }\n }\n );\n } else {\n const xhr = getArrayBuffer(\n __spreadProps(__spreadValues({}, requestParameters), {\n url: tileUrl\n }),\n (err, data) => {\n if (err || !data) {\n resolve(void 0);\n } else {\n const vectorSource = new VectorSource(data, tile.x, tile.y, tile.z);\n resolve(vectorSource);\n }\n }\n );\n tile.xhrCancel = () => xhr.cancel();\n }\n });\n});\nfunction mapboxVectorTile(data, cfg) {\n const url = Array.isArray(data) ? data[0] : data;\n const getTileData = (tileParams, tile) => getVectorTile(url, tileParams, tile, cfg == null ? void 0 : cfg.requestParameters, cfg == null ? void 0 : cfg.getCustomData);\n const tilesetOptions = __spreadProps(__spreadValues(__spreadValues({}, DEFAULT_CONFIG), cfg), {\n getTileData\n });\n return {\n data: url,\n dataArray: [],\n tilesetOptions,\n isTile: true\n };\n}\nexport {\n mapboxVectorTile as default\n};\n","var __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n// src/utils/tile/getCustomData.ts\nimport { formatImage } from \"@antv/l7-utils\";\nimport { processRasterData } from \"../bandOperation/bands\";\nvar getCustomData = (tile, getCustomDataFunc, rasterFormat, operation) => __async(void 0, null, function* () {\n return new Promise((resolve, reject) => {\n getCustomDataFunc(\n {\n x: tile.x,\n y: tile.y,\n z: tile.z\n },\n (err, data) => {\n if (err || data.length === 0) {\n reject(err);\n return;\n }\n if (data) {\n processRasterData(\n [{ data, bands: [0] }],\n rasterFormat,\n operation,\n (error, img) => {\n if (error) {\n reject(error);\n } else if (img) {\n resolve(img);\n }\n }\n );\n }\n }\n );\n });\n});\nvar getCustomImageData = (tile, getCustomDataFunc) => __async(void 0, null, function* () {\n return new Promise((resolve, reject) => {\n getCustomDataFunc(\n {\n x: tile.x,\n y: tile.y,\n z: tile.z\n },\n (err, data) => {\n if (err || !data) {\n reject(err);\n return;\n }\n if (data instanceof ArrayBuffer) {\n formatImage(data, (error, image) => {\n if (error) {\n reject(error);\n }\n resolve(image);\n });\n } else if (data instanceof HTMLImageElement) {\n resolve(data);\n } else {\n reject(err);\n }\n }\n );\n });\n});\nexport {\n getCustomData,\n getCustomImageData\n};\n","// src/utils/tile/request.ts\nimport { getURLFromTemplate } from \"@antv/l7-utils\";\nfunction getTileUrl(url, tileParams) {\n if (Array.isArray(url)) {\n if (typeof url[0] === \"string\") {\n return url.map((src) => getURLFromTemplate(src, tileParams));\n } else {\n return url.map((o) => {\n return {\n url: getURLFromTemplate(o.url, tileParams),\n bands: o.bands || [0]\n };\n });\n }\n } else {\n return getURLFromTemplate(url, tileParams);\n }\n}\nfunction getTileBandParams(urlBandParam) {\n if (typeof urlBandParam === \"string\") {\n return [\n {\n url: urlBandParam,\n bands: [0]\n }\n ];\n } else if (typeof urlBandParam[0] === \"string\") {\n return urlBandParam.map((param) => {\n return {\n url: param,\n bands: [0]\n };\n });\n } else {\n return urlBandParam;\n }\n}\nfunction bindCancel(tile, xhrList) {\n tile.xhrCancel = () => {\n xhrList.map((xhr) => {\n xhr.abort();\n });\n };\n}\nexport {\n bindCancel,\n getTileBandParams,\n getTileUrl\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n// src/utils/tile/getRasterData.ts\nimport { getArrayBuffer, makeXMLHttpRequestPromise } from \"@antv/l7-utils\";\nimport { processRasterData } from \"../bandOperation/bands\";\nimport { bindCancel, getTileBandParams } from \"./request\";\nvar getRasterFile = (tile, requestParameters, callback, rasterFormat, operation) => __async(void 0, null, function* () {\n const tileBandParams = getTileBandParams(requestParameters.url);\n if (tileBandParams.length > 1) {\n const { rasterFiles, xhrList, errList } = yield getMultiArrayBuffer(\n tileBandParams,\n requestParameters\n );\n bindCancel(tile, xhrList);\n if (errList.length > 0) {\n callback(errList, null);\n return;\n }\n processRasterData(rasterFiles, rasterFormat, operation, callback);\n } else {\n const xhr = getArrayBuffer(requestParameters, (err, imgData) => {\n if (err) {\n callback(err);\n } else if (imgData) {\n const rasterFiles = [\n {\n data: imgData,\n bands: tileBandParams[0].bands\n }\n ];\n processRasterData(rasterFiles, rasterFormat, operation, callback);\n }\n });\n bindCancel(tile, [xhr]);\n }\n});\nfunction getMultiArrayBuffer(tileBandParams, requestParameters) {\n return __async(this, null, function* () {\n const rasterFiles = [];\n const xhrList = [];\n const errList = [];\n for (let i = 0; i < tileBandParams.length; i++) {\n const tileBandParam = tileBandParams[i];\n const params = __spreadProps(__spreadValues({}, requestParameters), {\n url: tileBandParam.url\n });\n const bands = tileBandParam.bands;\n const { err, data, xhr } = yield makeXMLHttpRequestPromise(__spreadProps(__spreadValues({}, params), {\n type: \"arrayBuffer\"\n }));\n if (err) {\n errList.push(err);\n }\n xhrList.push(xhr);\n rasterFiles.push({\n data,\n bands\n });\n }\n return { rasterFiles, xhrList, errList };\n });\n}\nexport {\n getRasterFile\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n// src/utils/tile/getRasterTile.ts\nimport { getImage, getURLFromTemplate, getWMTSURLFromTemplate } from \"@antv/l7-utils\";\nimport { getRasterFile } from \"./getRasterData\";\nimport { getTileUrl } from \"./request\";\nvar getTileBuffer = (url, tileParams, tile, cfg) => __async(void 0, null, function* () {\n const { format = defaultFormat, operation, requestParameters = {} } = cfg;\n const reqParams = __spreadProps(__spreadValues({}, requestParameters), {\n url: getTileUrl(url, tileParams)\n // getTileUrl 将原始的 url 路径进行转化(多服务器)\n });\n return new Promise((resolve, reject) => {\n getRasterFile(\n tile,\n reqParams,\n (err, img) => {\n if (err) {\n reject(err);\n } else if (img) {\n resolve(img);\n }\n },\n format,\n operation\n );\n });\n});\nvar getTileImage = (url, tileParams, tile, cfg) => __async(void 0, null, function* () {\n let imageUrl;\n const templateUrl = Array.isArray(url) ? url[0] : url;\n if (cfg.wmtsOptions) {\n const getWMTSURLFromTemplateNew = (cfg == null ? void 0 : cfg.getURLFromTemplate) || getWMTSURLFromTemplate;\n imageUrl = getWMTSURLFromTemplateNew(templateUrl, __spreadValues(__spreadValues({}, tileParams), cfg.wmtsOptions));\n } else {\n const getURLFromTemplateNew = (cfg == null ? void 0 : cfg.getURLFromTemplate) || getURLFromTemplate;\n imageUrl = getURLFromTemplateNew(templateUrl, tileParams);\n }\n return new Promise((resolve, reject) => {\n var _a;\n const xhr = getImage(\n __spreadProps(__spreadValues({}, cfg == null ? void 0 : cfg.requestParameters), {\n url: imageUrl,\n type: ((_a = cfg == null ? void 0 : cfg.requestParameters) == null ? void 0 : _a.type) || \"arrayBuffer\"\n }),\n (err, img) => {\n if (err) {\n reject(err);\n } else if (img) {\n resolve(img);\n }\n },\n cfg.transformResponse\n );\n tile.xhrCancel = () => xhr.cancel();\n });\n});\nvar defaultFormat = () => {\n return {\n rasterData: new Uint8Array([0]),\n width: 1,\n height: 1\n };\n};\nexport {\n defaultFormat,\n getTileBuffer,\n getTileImage\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/parser/raster-tile.ts\nimport { RasterTileType } from \"@antv/l7-core\";\nimport { getCustomData, getCustomImageData } from \"../utils/tile/getCustomData\";\nimport { defaultFormat, getTileBuffer, getTileImage } from \"../utils/tile/getRasterTile\";\nimport { extentToCoord } from \"../utils/util\";\nvar DEFAULT_CONFIG = {\n tileSize: 256,\n minZoom: 0,\n maxZoom: Infinity,\n zoomOffset: 0,\n warp: true\n};\nvar rasterDataTypes = [RasterTileType.ARRAYBUFFER, RasterTileType.RGB];\nfunction isUrlError(url) {\n if (Array.isArray(url) && url.length === 0) {\n return true;\n }\n if (!Array.isArray(url) && typeof url !== \"string\") {\n return true;\n }\n return false;\n}\nfunction rasterTile(data, cfg = {}) {\n if (isUrlError(data)) {\n throw new Error(\"tile server url is error\");\n }\n const { extent = [Infinity, Infinity, -Infinity, -Infinity], coordinates } = cfg;\n let tileDataType = (cfg == null ? void 0 : cfg.dataType) || RasterTileType.IMAGE;\n if (tileDataType === RasterTileType.RGB) {\n tileDataType = RasterTileType.ARRAYBUFFER;\n }\n const getTileData = (tileParams, tile) => {\n switch (tileDataType) {\n case RasterTileType.IMAGE:\n return getTileImage(data, tileParams, tile, cfg);\n case RasterTileType.CUSTOMIMAGE:\n case RasterTileType.CUSTOMTERRAINRGB:\n return getCustomImageData(\n // 自定义地形请求方式数据\n tile,\n // @ts-ignore\n cfg == null ? void 0 : cfg.getCustomData\n );\n case RasterTileType.ARRAYBUFFER:\n return getTileBuffer(data, tileParams, tile, cfg);\n case RasterTileType.CUSTOMARRAYBUFFER:\n case RasterTileType.CUSTOMRGB:\n return getCustomData(\n tile,\n // @ts-ignore\n cfg == null ? void 0 : cfg.getCustomData,\n (cfg == null ? void 0 : cfg.format) || defaultFormat,\n cfg == null ? void 0 : cfg.operation\n );\n default:\n return getTileImage(data, tileParams, tile, cfg);\n }\n };\n const tilesetOptions = __spreadProps(__spreadValues(__spreadValues({}, DEFAULT_CONFIG), cfg), { getTileData });\n const rasterTileCoord = extentToCoord(coordinates, extent);\n return {\n data,\n dataArray: [\n {\n _id: 1,\n coordinates: rasterTileCoord\n }\n ],\n tilesetOptions,\n isTile: true\n };\n}\nexport {\n rasterTile as default,\n rasterDataTypes\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\n\n// src/parser/raster/ndi.ts\nimport { extentToCoord } from \"../../utils/util\";\nfunction rasterRgb(data, cfg) {\n const _a = cfg, {\n extent = [121.168, 30.2828, 121.384, 30.4219],\n coordinates,\n width,\n height\n } = _a, options = __objRest(_a, [\n \"extent\",\n \"coordinates\",\n \"width\",\n \"height\"\n ]);\n if (data.length < 2) {\n console.warn(\"RGB解析需要2个波段的数据\");\n }\n const [n, d] = options.bands || [0, 1];\n const bandsData = [data[n], data[d]];\n const ndidata = [];\n for (let i = 0; i < bandsData[0].length; i++) {\n ndidata.push((bandsData[1][i] - bandsData[0][i]) / (bandsData[1][i] + bandsData[0][i]));\n }\n const imageCoord = extentToCoord(coordinates, extent);\n const resultData = {\n _id: 1,\n dataArray: [\n __spreadProps(__spreadValues({\n _id: 1,\n data: ndidata,\n width,\n height\n }, options), {\n coordinates: imageCoord\n })\n ]\n };\n return resultData;\n}\nexport {\n rasterRgb as default\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\n\n// src/parser/raster/rgb.ts\nimport { percentile } from \"../../utils/bandOperation/operationSchema\";\nimport { extentToCoord } from \"../../utils/util\";\nfunction rasterRgb(data, cfg) {\n const _a = cfg, { extent, coordinates, width, height } = _a, options = __objRest(_a, [\"extent\", \"coordinates\", \"width\", \"height\"]);\n if (data.length < 3) {\n console.warn(\"RGB解析需要三个波段的数据\");\n }\n const [r, g, b] = options.bands || [0, 1, 2];\n const bandsData = [data[r], data[g], data[b]];\n const rgbdata = [];\n const [low, high] = (options == null ? void 0 : options.countCut) || [2, 98];\n const minMaxR = (options == null ? void 0 : options.RMinMax) || percentile(bandsData[0], low, high);\n const minMaxG = (options == null ? void 0 : options.GMinMax) || percentile(bandsData[1], low, high);\n const minMaxB = (options == null ? void 0 : options.BMinMax) || percentile(bandsData[2], low, high);\n for (let i = 0; i < bandsData[0].length; i++) {\n rgbdata.push(Math.max(0, bandsData[0][i] - minMaxR[0]));\n rgbdata.push(Math.max(0, bandsData[1][i] - minMaxG[0]));\n rgbdata.push(Math.max(0, bandsData[2][i] - minMaxB[0]));\n }\n const imageCoord = extentToCoord(coordinates, extent);\n const resultData = {\n _id: 1,\n dataArray: [\n __spreadProps(__spreadValues({\n _id: 1,\n data: rgbdata,\n width,\n height,\n rMinMax: minMaxR,\n gMinMax: minMaxG,\n bMinMax: minMaxB\n }, options), {\n coordinates: imageCoord\n })\n ]\n };\n return resultData;\n}\nexport {\n rasterRgb as default\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\n\n// src/parser/rasterRgb.ts\nimport { bandsOperation } from \"../utils/bandOperation/bands\";\nimport { extentToCoord, isNumberArray } from \"../utils/util\";\nfunction rasterRgb(data, cfg) {\n const _a = cfg, { extent, coordinates, min, max, width, height, format, operation } = _a, rest = __objRest(_a, [\"extent\", \"coordinates\", \"min\", \"max\", \"width\", \"height\", \"format\", \"operation\"]);\n let bandData;\n if (format === void 0 || isNumberArray(data)) {\n bandData = Array.from(data);\n } else {\n const imageDataList = Array.isArray(data) ? data : [data];\n bandData = bandsOperation(imageDataList, format, operation);\n }\n const imageCoord = extentToCoord(coordinates, extent);\n const resultData = {\n _id: 1,\n dataArray: [\n __spreadProps(__spreadValues({\n _id: 1,\n data: bandData,\n width,\n height\n }, rest), {\n min,\n max,\n coordinates: imageCoord\n })\n ]\n };\n return resultData;\n}\nexport {\n rasterRgb as default\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n// src/parser/testTile.ts\nvar DEFAULT_CONFIG = {\n tileSize: 256,\n minZoom: 0,\n maxZoom: Infinity,\n zoomOffset: 0\n};\nvar getVectorTile = (tile) => __async(void 0, null, function* () {\n return new Promise((resolve) => {\n const [minLng, minLat, maxLng, maxLat] = tile.bounds;\n const vectorTile = {\n layers: {\n // Tip: fixed SourceLayer Name\n testTile: {\n features: [\n {\n type: \"Feature\",\n properties: {\n key: tile.x + \"/\" + tile.y + \"/\" + tile.z,\n x: (minLng + maxLng) / 2,\n y: (minLat + maxLat) / 2\n },\n geometry: {\n type: \"LineString\",\n coordinates: [\n [maxLng, maxLat],\n [maxLng, minLat],\n [minLng, minLat],\n [minLng, minLat]\n ]\n }\n }\n ]\n }\n }\n };\n resolve(vectorTile);\n });\n});\nfunction mapboxVectorTile(data, cfg) {\n const getTileData = (tile) => getVectorTile(tile);\n const tilesetOptions = __spreadProps(__spreadValues(__spreadValues({}, DEFAULT_CONFIG), cfg), {\n getTileData\n });\n return {\n data,\n dataArray: [],\n tilesetOptions,\n isTile: true\n };\n}\nexport {\n mapboxVectorTile as default\n};\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\n\n// src/transform/cluster.ts\nimport Supercluster from \"supercluster/dist/supercluster\";\nfunction cluster(data, option) {\n const { radius = 40, maxZoom = 18, minZoom = 0, zoom = 2 } = option;\n if (data.pointIndex) {\n const clusterData = data.pointIndex.getClusters(data.extent, Math.floor(zoom));\n data.dataArray = formatData(clusterData);\n return data;\n }\n const pointIndex = new Supercluster({\n radius,\n minZoom,\n maxZoom\n });\n const geojson = {\n type: \"FeatureCollection\",\n features: []\n };\n geojson.features = data.dataArray.map((item) => {\n return {\n type: \"Feature\",\n geometry: {\n type: \"Point\",\n coordinates: item.coordinates\n },\n properties: __spreadValues({}, item)\n };\n });\n pointIndex.load(geojson.features);\n return pointIndex;\n}\nfunction formatData(clusterPoint) {\n return clusterPoint.map((point, index) => {\n return __spreadValues({\n coordinates: point.geometry.coordinates,\n _id: index + 1\n }, point.properties);\n });\n}\nexport {\n cluster,\n formatData\n};\n","// src/utils/statistics.ts\nfunction max(x) {\n if (x.length === 0) {\n throw new Error(\"max requires at least one data point\");\n }\n let value = x[0];\n for (let i = 1; i < x.length; i++) {\n if (x[i] > value) {\n value = x[i];\n }\n }\n return value;\n}\nfunction min(x) {\n if (x.length === 0) {\n throw new Error(\"min requires at least one data point\");\n }\n let value = x[0];\n for (let i = 1; i < x.length; i++) {\n if (x[i] < value) {\n value = x[i];\n }\n }\n return value;\n}\nfunction sum(x) {\n if (x.length === 0) {\n return 0;\n }\n let sumNum = x[0];\n let correction = 0;\n let transition;\n for (let i = 1; i < x.length; i++) {\n transition = sumNum + x[i] * 1;\n if (Math.abs(sumNum) >= Math.abs(x[i])) {\n correction += sumNum - transition + x[i];\n } else {\n correction += x[i] - transition + sumNum;\n }\n sumNum = transition;\n }\n return sumNum + correction * 1;\n}\nfunction mean(x) {\n if (x.length === 0) {\n throw new Error(\"mean requires at least one data point\");\n }\n return sum(x) / x.length;\n}\nvar statMap = {\n min,\n max,\n mean,\n sum\n};\nexport {\n max,\n mean,\n min,\n statMap,\n sum\n};\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n// src/source.ts\nimport { SyncHook } from \"@antv/async-hook\";\nimport { TilesetManager, bBoxToBounds, extent, lodashUtil, padBounds } from \"@antv/l7-utils\";\nimport { EventEmitter } from \"eventemitter3\";\nimport { getParser, getTransform } from \"./factory\";\nimport { cluster } from \"./transform/cluster\";\nimport { statMap } from \"./utils/statistics\";\nimport { getColumn } from \"./utils/util\";\nvar { cloneDeep, isFunction, isString, mergeWith } = lodashUtil;\nfunction mergeCustomizer(objValue, srcValue) {\n if (Array.isArray(srcValue)) {\n return srcValue;\n }\n}\nvar Source = class extends EventEmitter {\n constructor(data, cfg) {\n super();\n this.type = \"source\";\n this.isTile = false;\n this.inited = false;\n // 生命周期钩子\n this.hooks = {\n init: new SyncHook()\n };\n this.parser = { type: \"geojson\" };\n this.transforms = [];\n this.cluster = false;\n this.clusterOptions = {\n enable: false,\n radius: 40,\n maxZoom: 20,\n zoom: -99,\n method: \"count\"\n };\n // 是否有效范围\n this.invalidExtent = false;\n this.dataArrayChanged = false;\n this.cfg = {\n autoRender: true\n };\n this.originData = data;\n this.initCfg(cfg);\n this.init().then(() => {\n this.inited = true;\n this.emit(\"update\", {\n type: \"inited\"\n });\n });\n }\n getSourceCfg() {\n return this.cfg;\n }\n getClusters(zoom) {\n return this.clusterIndex.getClusters(this.caculClusterExtent(2), zoom);\n }\n getClustersLeaves(id) {\n return this.clusterIndex.getLeaves(id, Infinity);\n }\n getParserType() {\n return this.parser.type;\n }\n updateClusterData(zoom) {\n const { method = \"sum\", field } = this.clusterOptions;\n let data = this.clusterIndex.getClusters(this.caculClusterExtent(2), Math.floor(zoom));\n this.clusterOptions.zoom = zoom;\n data.forEach((p) => {\n if (!p.id) {\n p.properties.point_count = 1;\n }\n });\n if (field || isFunction(method)) {\n data = data.map((item) => {\n const id = item.id;\n if (id) {\n const points = this.clusterIndex.getLeaves(id, Infinity);\n const properties = points.map((d) => d.properties);\n let statNum;\n if (isString(method) && field) {\n const column = getColumn(properties, field);\n statNum = statMap[method](column);\n }\n if (isFunction(method)) {\n statNum = method(properties);\n }\n item.properties.stat = statNum;\n } else {\n item.properties.point_count = 1;\n }\n return item;\n });\n }\n this.data = getParser(\"geojson\")({\n type: \"FeatureCollection\",\n features: data\n });\n this.executeTrans();\n }\n getFeatureById(id) {\n const { type = \"geojson\", geometry } = this.parser;\n if (type === \"geojson\" && !this.cluster) {\n const feature = id < this.originData.features.length ? this.originData.features[id] : \"null\";\n const newFeature = cloneDeep(feature);\n if ((newFeature == null ? void 0 : newFeature.properties) && (this.transforms.length !== 0 || this.dataArrayChanged)) {\n const item = this.data.dataArray.find((dataItem) => {\n return dataItem._id === id;\n });\n newFeature.properties = item;\n }\n return newFeature;\n } else if (type === \"json\" && geometry) {\n return this.data.dataArray.find((dataItem) => dataItem._id === id);\n } else {\n return id < this.data.dataArray.length ? this.data.dataArray[id] : \"null\";\n }\n }\n updateFeaturePropertiesById(id, properties) {\n this.data.dataArray = this.data.dataArray.map((dataItem) => {\n if (dataItem._id === id) {\n return __spreadValues(__spreadValues({}, dataItem), properties);\n }\n return dataItem;\n });\n this.dataArrayChanged = true;\n this.emit(\"update\", {\n type: \"update\"\n });\n }\n getFeatureId(field, value) {\n const feature = this.data.dataArray.find((dataItem) => {\n return dataItem[field] === value;\n });\n return feature == null ? void 0 : feature._id;\n }\n setData(data, options) {\n this.originData = data;\n this.dataArrayChanged = false;\n this.initCfg(options);\n this.init().then(() => {\n this.emit(\"update\", {\n type: \"update\"\n });\n });\n }\n reloadAllTile() {\n var _a;\n (_a = this.tileset) == null ? void 0 : _a.reloadAll();\n }\n reloadTilebyId(z, x, y) {\n var _a;\n (_a = this.tileset) == null ? void 0 : _a.reloadTileById(z, x, y);\n }\n reloadTileByLnglat(lng, lat, z) {\n var _a;\n (_a = this.tileset) == null ? void 0 : _a.reloadTileByLnglat(lng, lat, z);\n }\n getTileExtent(e, zoom) {\n var _a;\n return (_a = this.tileset) == null ? void 0 : _a.getTileExtent(e, zoom);\n }\n getTileByZXY(z, x, y) {\n var _a;\n return (_a = this.tileset) == null ? void 0 : _a.getTileByZXY(z, x, y);\n }\n reloadTileByExtent(bounds, z) {\n var _a;\n (_a = this.tileset) == null ? void 0 : _a.reloadTileByExtent(bounds, z);\n }\n destroy() {\n var _a;\n this.removeAllListeners();\n this.originData = null;\n this.clusterIndex = null;\n this.data = null;\n (_a = this.tileset) == null ? void 0 : _a.destroy();\n }\n processData() {\n return __async(this, null, function* () {\n return new Promise((resolve, reject) => {\n try {\n this.excuteParser();\n this.initCluster();\n this.executeTrans();\n resolve({});\n } catch (err) {\n reject(err);\n }\n });\n });\n }\n initCfg(option) {\n this.cfg = mergeWith(this.cfg, option, mergeCustomizer);\n const cfg = this.cfg;\n if (cfg) {\n if (cfg.parser) {\n this.parser = cfg.parser;\n }\n if (cfg.transforms) {\n this.transforms = cfg.transforms;\n }\n this.cluster = cfg.cluster || false;\n if (cfg.clusterOptions) {\n this.cluster = true;\n this.clusterOptions = __spreadValues(__spreadValues({}, this.clusterOptions), cfg.clusterOptions);\n }\n }\n }\n init() {\n return __async(this, null, function* () {\n this.inited = false;\n yield this.processData();\n this.inited = true;\n });\n }\n /**\n * 数据解析\n */\n excuteParser() {\n const parser = this.parser;\n const type = parser.type || \"geojson\";\n const sourceParser = getParser(type);\n this.data = sourceParser(this.originData, parser);\n this.tileset = this.initTileset();\n if (parser.cancelExtent) {\n return;\n }\n this.extent = extent(this.data.dataArray);\n this.setCenter(this.extent);\n this.invalidExtent = this.extent[0] === this.extent[2] || this.extent[1] === this.extent[3];\n }\n setCenter(bbox) {\n this.center = [(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2];\n if (isNaN(this.center[0]) || isNaN(this.center[1])) {\n this.center = [108.92361111111111, 34.54083333333333];\n }\n }\n /**\n * 瓦片数据管理器\n */\n initTileset() {\n const { tilesetOptions } = this.data;\n if (!tilesetOptions) {\n return;\n }\n this.isTile = true;\n if (this.tileset) {\n this.tileset.updateOptions(tilesetOptions);\n return this.tileset;\n }\n const tileset = new TilesetManager(__spreadValues({}, tilesetOptions));\n return tileset;\n }\n /**\n * 数据统计\n */\n executeTrans() {\n const trans = this.transforms;\n trans.forEach((tran) => {\n const { type } = tran;\n const data = getTransform(type)(this.data, tran);\n Object.assign(this.data, data);\n });\n }\n /**\n * 数据聚合\n */\n initCluster() {\n if (!this.cluster) {\n return;\n }\n const clusterOptions = this.clusterOptions || {};\n this.clusterIndex = cluster(this.data, clusterOptions);\n }\n caculClusterExtent(bufferRatio) {\n let newBounds = [\n [-Infinity, -Infinity],\n [Infinity, Infinity]\n ];\n if (!this.invalidExtent) {\n newBounds = padBounds(bBoxToBounds(this.extent), bufferRatio);\n }\n return newBounds[0].concat(newBounds[1]);\n }\n};\nexport {\n Source as default\n};\n","var thirdPi = Math.PI / 3,\n angles = [0, thirdPi, 2 * thirdPi, 3 * thirdPi, 4 * thirdPi, 5 * thirdPi];\n\nfunction pointX(d) {\n return d[0];\n}\n\nfunction pointY(d) {\n return d[1];\n}\n\nexport default function() {\n var x0 = 0,\n y0 = 0,\n x1 = 1,\n y1 = 1,\n x = pointX,\n y = pointY,\n r,\n dx,\n dy;\n\n function hexbin(points) {\n var binsById = {}, bins = [], i, n = points.length;\n\n for (i = 0; i < n; ++i) {\n if (isNaN(px = +x.call(null, point = points[i], i, points))\n || isNaN(py = +y.call(null, point, i, points))) continue;\n\n var point,\n px,\n py,\n pj = Math.round(py = py / dy),\n pi = Math.round(px = px / dx - (pj & 1) / 2),\n py1 = py - pj;\n\n if (Math.abs(py1) * 3 > 1) {\n var px1 = px - pi,\n pi2 = pi + (px < pi ? -1 : 1) / 2,\n pj2 = pj + (py < pj ? -1 : 1),\n px2 = px - pi2,\n py2 = py - pj2;\n if (px1 * px1 + py1 * py1 > px2 * px2 + py2 * py2) pi = pi2 + (pj & 1 ? 1 : -1) / 2, pj = pj2;\n }\n\n var id = pi + \"-\" + pj, bin = binsById[id];\n if (bin) bin.push(point);\n else {\n bins.push(bin = binsById[id] = [point]);\n bin.x = (pi + (pj & 1) / 2) * dx;\n bin.y = pj * dy;\n }\n }\n\n return bins;\n }\n\n function hexagon(radius) {\n var x0 = 0, y0 = 0;\n return angles.map(function(angle) {\n var x1 = Math.sin(angle) * radius,\n y1 = -Math.cos(angle) * radius,\n dx = x1 - x0,\n dy = y1 - y0;\n x0 = x1, y0 = y1;\n return [dx, dy];\n });\n }\n\n hexbin.hexagon = function(radius) {\n return \"m\" + hexagon(radius == null ? r : +radius).join(\"l\") + \"z\";\n };\n\n hexbin.centers = function() {\n var centers = [],\n j = Math.round(y0 / dy),\n i = Math.round(x0 / dx);\n for (var y = j * dy; y < y1 + r; y += dy, ++j) {\n for (var x = i * dx + (j & 1) * dx / 2; x < x1 + dx / 2; x += dx) {\n centers.push([x, y]);\n }\n }\n return centers;\n };\n\n hexbin.mesh = function() {\n var fragment = hexagon(r).slice(0, 4).join(\"l\");\n return hexbin.centers().map(function(p) { return \"M\" + p + \"m\" + fragment; }).join(\"\");\n };\n\n hexbin.x = function(_) {\n return arguments.length ? (x = _, hexbin) : x;\n };\n\n hexbin.y = function(_) {\n return arguments.length ? (y = _, hexbin) : y;\n };\n\n hexbin.radius = function(_) {\n return arguments.length ? (r = +_, dx = r * 2 * Math.sin(thirdPi), dy = r * 1.5, hexbin) : r;\n };\n\n hexbin.size = function(_) {\n return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], hexbin) : [x1 - x0, y1 - y0];\n };\n\n hexbin.extent = function(_) {\n return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], hexbin) : [[x0, y0], [x1, y1]];\n };\n\n return hexbin.radius(1);\n}\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/transform/hexagon.ts\nimport { Satistics, aProjectFlat } from \"@antv/l7-utils\";\nimport { hexbin } from \"d3-hexbin\";\nvar R_EARTH = 6378e3;\nfunction pointToHexbin(data, option) {\n const dataArray = data.dataArray;\n const { size = 10, method = \"sum\" } = option;\n const pixlSize = size / (2 * Math.PI * R_EARTH) * (256 << 20) / 2;\n const screenPoints = dataArray.map((point) => {\n const [x, y] = aProjectFlat(point.coordinates);\n return __spreadProps(__spreadValues({}, point), {\n coordinates: [x, y]\n });\n });\n const newHexbin = hexbin().radius(pixlSize).x((d) => d.coordinates[0]).y((d) => d.coordinates[1]);\n const hexbinBins = newHexbin(screenPoints);\n const result = {\n dataArray: hexbinBins.map((hex, index) => {\n if (option.field && method) {\n const columns = Satistics.getColumn(hex, option.field);\n hex[method] = Satistics.statMap[method](columns);\n }\n return {\n [option.method]: hex[method],\n count: hex.length,\n rawData: hex,\n coordinates: [hex.x, hex.y],\n _id: index\n };\n }),\n radius: pixlSize,\n xOffset: pixlSize,\n yOffset: pixlSize,\n type: \"hexagon\"\n };\n return result;\n}\nexport {\n pointToHexbin\n};\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\n\n// src/transform/join.ts\nfunction join(geoData, options) {\n const { sourceField, targetField, data } = options;\n const dataObj = {};\n data.forEach((element) => {\n dataObj[element[sourceField]] = element;\n });\n geoData.dataArray = geoData.dataArray.map((item) => {\n const joinName = item[targetField];\n return __spreadValues(__spreadValues({}, item), dataObj[joinName]);\n });\n return geoData;\n}\nexport {\n join\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/utils/relative-coordinates.ts\nfunction calculateRelativeOrigin(dataArray) {\n let minLng = Infinity;\n let maxLng = -Infinity;\n let minLat = Infinity;\n let maxLat = -Infinity;\n dataArray.forEach((item) => {\n const coordinates = item.coordinates;\n if (!coordinates)\n return;\n const processCoordinates = (coords) => {\n if (typeof coords[0] === \"number\" && typeof coords[1] === \"number\") {\n const [lng, lat] = coords;\n minLng = Math.min(minLng, lng);\n maxLng = Math.max(maxLng, lng);\n minLat = Math.min(minLat, lat);\n maxLat = Math.max(maxLat, lat);\n } else if (Array.isArray(coords[0])) {\n coords.forEach(processCoordinates);\n }\n };\n processCoordinates(coordinates);\n });\n const centerLng = (minLng + maxLng) / 2;\n const centerLat = (minLat + maxLat) / 2;\n return [centerLng, centerLat];\n}\nfunction convertToRelativeCoordinates(dataArray, relativeOrigin) {\n const [originLng, originLat] = relativeOrigin;\n return dataArray.map((item) => {\n if (!item.coordinates)\n return item;\n const convertCoordinates = (coords) => {\n if (typeof coords[0] === \"number\" && typeof coords[1] === \"number\") {\n const relativeLng = Number((coords[0] - originLng).toPrecision(15));\n const relativeLat = Number((coords[1] - originLat).toPrecision(15));\n return [relativeLng, relativeLat, ...coords.slice(2) || []];\n } else if (Array.isArray(coords[0])) {\n return coords.map(convertCoordinates);\n }\n return coords;\n };\n return __spreadProps(__spreadValues({}, item), {\n coordinates: convertCoordinates(item.coordinates)\n });\n });\n}\nfunction convertToAbsoluteCoordinates(dataArray, relativeOrigin) {\n const [originLng, originLat] = relativeOrigin;\n return dataArray.map((item) => {\n if (!item.coordinates)\n return item;\n const convertCoordinates = (coords) => {\n if (typeof coords[0] === \"number\" && typeof coords[1] === \"number\") {\n const absoluteLng = coords[0] + originLng;\n const absoluteLat = coords[1] + originLat;\n return [absoluteLng, absoluteLat, ...coords.slice(2) || []];\n } else if (Array.isArray(coords[0])) {\n return coords.map(convertCoordinates);\n }\n return coords;\n };\n return __spreadProps(__spreadValues({}, item), {\n coordinates: convertCoordinates(item.coordinates)\n });\n });\n}\nfunction processRelativeCoordinates(dataArray, options = {}) {\n const { enableRelativeCoordinates = false, relativeOrigin: customOrigin } = options;\n if (!enableRelativeCoordinates) {\n return {\n dataArray,\n relativeOrigin: [0, 0],\n originalExtent: [0, 0, 0, 0]\n };\n }\n let minLng = Infinity;\n let maxLng = -Infinity;\n let minLat = Infinity;\n let maxLat = -Infinity;\n dataArray.forEach((item) => {\n const coordinates = item.coordinates;\n if (!coordinates)\n return;\n const processCoordinates = (coords) => {\n if (typeof coords[0] === \"number\" && typeof coords[1] === \"number\") {\n const [lng, lat] = coords;\n minLng = Math.min(minLng, lng);\n maxLng = Math.max(maxLng, lng);\n minLat = Math.min(minLat, lat);\n maxLat = Math.max(maxLat, lat);\n } else if (Array.isArray(coords[0])) {\n coords.forEach(processCoordinates);\n }\n };\n processCoordinates(coordinates);\n });\n const originalExtent = [minLng, minLat, maxLng, maxLat];\n const relativeOrigin = customOrigin || calculateRelativeOrigin(dataArray);\n const relativeDataArray = convertToRelativeCoordinates(dataArray, relativeOrigin);\n return {\n dataArray: relativeDataArray,\n relativeOrigin,\n originalExtent\n };\n}\nexport {\n calculateRelativeOrigin,\n convertToAbsoluteCoordinates,\n convertToRelativeCoordinates,\n processRelativeCoordinates\n};\n","// src/index.ts\nimport { registerParser, registerTransform } from \"./factory\";\nimport csv from \"./parser/csv\";\nimport geojson from \"./parser/geojson\";\nimport geojsonVTTile from \"./parser/geojsonvt\";\nimport image from \"./parser/image\";\nimport json from \"./parser/json\";\nimport jsonTile from \"./parser/jsonTile\";\nimport mapboxVectorTile from \"./parser/mvt\";\nimport raster from \"./parser/raster\";\nimport rasterTile, { rasterDataTypes } from \"./parser/raster-tile\";\nimport ndi from \"./parser/raster/ndi\";\nimport rgb from \"./parser/raster/rgb\";\nimport rasterRgb from \"./parser/rasterRgb\";\nimport testTile from \"./parser/testTile\";\nimport Source from \"./source\";\nimport { cluster } from \"./transform/cluster\";\nimport { filter } from \"./transform/filter\";\nimport { aggregatorToGrid } from \"./transform/grid\";\nimport { pointToHexbin } from \"./transform/hexagon\";\nimport { join } from \"./transform/join\";\nimport { map } from \"./transform/map\";\nimport { getParser, getTransform, registerParser as registerParser2, registerTransform as registerTransform2 } from \"./factory\";\nexport * from \"./interface\";\nexport * from \"./source/index\";\nexport * from \"./utils/relative-coordinates\";\nregisterParser(\"rasterTile\", rasterTile);\nregisterParser(\"mvt\", mapboxVectorTile);\nregisterParser(\"geojsonvt\", geojsonVTTile);\nregisterParser(\"testTile\", testTile);\nregisterParser(\"geojson\", geojson);\nregisterParser(\"jsonTile\", jsonTile);\nregisterParser(\"image\", image);\nregisterParser(\"csv\", csv);\nregisterParser(\"json\", json);\nregisterParser(\"raster\", raster);\nregisterParser(\"rasterRgb\", rasterRgb);\nregisterParser(\"rgb\", rgb);\nregisterParser(\"ndi\", ndi);\nregisterTransform(\"cluster\", cluster);\nregisterTransform(\"filter\", filter);\nregisterTransform(\"join\", join);\nregisterTransform(\"map\", map);\nregisterTransform(\"grid\", aggregatorToGrid);\nregisterTransform(\"hexagon\", pointToHexbin);\nvar src_default = Source;\nexport {\n src_default as default,\n getParser,\n getTransform,\n rasterDataTypes,\n registerParser2 as registerParser,\n registerTransform2 as registerTransform\n};\n","// src/parser/csv.ts\nimport { csvParse } from \"d3-dsv\";\nimport json from \"./json\";\nfunction csv(data, cfg) {\n const csvData = csvParse(data);\n return json(csvData, cfg);\n}\nexport {\n csv as default\n};\n","// src/parser/raster.ts\nimport { bandsOperation } from \"../utils/bandOperation/bands\";\nimport { extentToCoord, isNumberArray } from \"../utils/util\";\nfunction raster(data, cfg) {\n const {\n extent = [121.168, 30.2828, 121.384, 30.4219],\n coordinates,\n width,\n height,\n min,\n max,\n format,\n operation\n } = cfg;\n let bandData;\n let rasterWidth;\n let rasterHeight;\n if (format === void 0 || isNumberArray(data)) {\n bandData = Array.from(data);\n rasterWidth = width;\n rasterHeight = height;\n } else {\n const imageDataList = Array.isArray(data) ? data : [data];\n bandData = bandsOperation(imageDataList, format, operation);\n }\n const imageCoord = extentToCoord(coordinates, extent);\n const resultData = {\n _id: 1,\n dataArray: [\n {\n _id: 1,\n data: bandData,\n width: rasterWidth,\n height: rasterHeight,\n min,\n max,\n coordinates: imageCoord\n }\n ]\n };\n return resultData;\n}\nexport {\n raster as default\n};\n","// src/transform/filter.ts\nfunction filter(data, options) {\n const { callback } = options;\n if (callback) {\n data.dataArray = data.dataArray.filter(callback);\n }\n return data;\n}\nexport {\n filter\n};\n","// src/transform/map.ts\nfunction map(data, options) {\n const { callback } = options;\n if (callback) {\n data.dataArray = data.dataArray.map(callback);\n }\n return data;\n}\nexport {\n map\n};\n","// src/transform/grid.ts\nimport { Satistics, aProjectFlat } from \"@antv/l7-utils\";\nvar R_EARTH = 6378e3;\nfunction aggregatorToGrid(data, option) {\n const dataArray = data.dataArray;\n const { size = 10 } = option;\n const pixlSize = size / (2 * Math.PI * R_EARTH) * (256 << 20) / 2;\n const { gridHash, gridOffset } = _pointsGridHash(dataArray, size);\n const layerData = _getGridLayerDataFromGridHash(gridHash, gridOffset, option);\n return {\n yOffset: pixlSize,\n xOffset: pixlSize,\n radius: pixlSize,\n type: \"grid\",\n dataArray: layerData\n };\n}\nfunction _pointsGridHash(dataArray, size) {\n let latMin = Infinity;\n let latMax = -Infinity;\n let pLat;\n for (const point of dataArray) {\n pLat = point.coordinates[1];\n if (Number.isFinite(pLat)) {\n latMin = pLat < latMin ? pLat : latMin;\n latMax = pLat > latMax ? pLat : latMax;\n }\n }\n const centerLat = (latMin + latMax) / 2;\n const gridOffset = _calculateGridLatLonOffset(size, centerLat);\n if (gridOffset.xOffset <= 0 || gridOffset.yOffset <= 0) {\n return { gridHash: {}, gridOffset };\n }\n const gridHash = {};\n for (const point of dataArray) {\n const lat = point.coordinates[1];\n const lng = point.coordinates[0];\n if (Number.isFinite(lat) && Number.isFinite(lng)) {\n const latIdx = Math.floor((lat + 90) / gridOffset.yOffset);\n const lonIdx = Math.floor((lng + 180) / gridOffset.xOffset);\n const key = `${latIdx}-${lonIdx}`;\n gridHash[key] = gridHash[key] || { count: 0, points: [] };\n gridHash[key].count += 1;\n gridHash[key].points.push(point);\n }\n }\n return { gridHash, gridOffset };\n}\nfunction _calculateGridLatLonOffset(cellSize, latitude) {\n const yOffset = _calculateLatOffset(cellSize);\n const xOffset = _calculateLonOffset(latitude, cellSize);\n return { yOffset, xOffset };\n}\nfunction _calculateLatOffset(dy) {\n return dy / R_EARTH * (180 / Math.PI);\n}\nfunction _calculateLonOffset(lat, dx) {\n return dx / R_EARTH * (180 / Math.PI) / Math.cos(lat * Math.PI / 180);\n}\nfunction _getGridLayerDataFromGridHash(gridHash, gridOffset, option) {\n return Object.keys(gridHash).reduce((accu, key, i) => {\n const idxs = key.split(\"-\");\n const latIdx = parseInt(idxs[0], 10);\n const lonIdx = parseInt(idxs[1], 10);\n const item = {};\n if (option.field && option.method) {\n const columns = Satistics.getColumn(gridHash[key].points, option.field);\n item[option.method] = Satistics.statMap[option.method](columns);\n }\n Object.assign(item, {\n _id: i,\n coordinates: aProjectFlat([\n -180 + gridOffset.xOffset * (lonIdx + 0.5),\n -90 + gridOffset.yOffset * (latIdx + 0.5)\n ]),\n rawData: gridHash[key].points,\n count: gridHash[key].count\n });\n accu.push(item);\n return accu;\n }, []);\n}\nexport {\n aggregatorToGrid\n};\n","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar _excluded = [\"tab\", \"children\"],\n _excluded2 = [\"key\", \"tab\", \"tabKey\", \"disabled\", \"destroyInactiveTabPane\", \"children\", \"className\", \"style\", \"cardProps\"];\nimport { ConfigProvider, Tabs, version } from 'antd';\nimport classNames from 'classnames';\nimport toArray from \"rc-util/es/Children/toArray\";\nimport { noteOnce } from \"rc-util/es/warning\";\nimport React, { useContext } from 'react';\nimport Card from \"../Card\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nfunction filter(items) {\n return items.filter(function (item) {\n return item;\n });\n}\nexport function useLegacyItems(items, children, tabs) {\n if (items) {\n return items.map(function (item) {\n return _objectSpread(_objectSpread({}, item), {}, {\n children: /*#__PURE__*/_jsx(Card, _objectSpread(_objectSpread({}, tabs === null || tabs === void 0 ? void 0 : tabs.cardProps), {}, {\n children: item.children\n }))\n });\n });\n }\n noteOnce(!tabs, 'Tabs.TabPane is deprecated. Please use `items` directly.');\n var childrenItems = toArray(children).map(function (node) {\n if ( /*#__PURE__*/React.isValidElement(node)) {\n var key = node.key,\n props = node.props;\n var _ref = props || {},\n tab = _ref.tab,\n tempChild = _ref.children,\n restProps = _objectWithoutProperties(_ref, _excluded);\n var item = _objectSpread(_objectSpread({\n key: String(key)\n }, restProps), {}, {\n children: /*#__PURE__*/_jsx(Card, _objectSpread(_objectSpread({}, tabs === null || tabs === void 0 ? void 0 : tabs.cardProps), {}, {\n children: tempChild\n })),\n label: tab\n });\n return item;\n }\n return null;\n });\n return filter(childrenItems);\n}\n/**\n * @deprecated ProComponets 3.0\n */\nvar TabPane = function TabPane(props) {\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n // 如果是antd v5 则返回为空\n if (version.startsWith('5')) {\n return /*#__PURE__*/_jsx(_Fragment, {});\n } else {\n var key = props.key,\n tab = props.tab,\n tabKey = props.tabKey,\n disabled = props.disabled,\n destroyInactiveTabPane = props.destroyInactiveTabPane,\n children = props.children,\n className = props.className,\n style = props.style,\n cardProps = props.cardProps,\n rest = _objectWithoutProperties(props, _excluded2);\n var prefixCls = getPrefixCls('pro-card-tabpane');\n var tabPaneClassName = classNames(prefixCls, className);\n return /*#__PURE__*/_jsx(Tabs.TabPane, _objectSpread(_objectSpread({\n tabKey: tabKey,\n tab: tab,\n className: tabPaneClassName,\n style: style,\n disabled: disabled,\n destroyInactiveTabPane: destroyInactiveTabPane\n }, rest), {}, {\n children: /*#__PURE__*/_jsx(Card, _objectSpread(_objectSpread({}, cardProps), {}, {\n children: children\n }))\n }), key);\n }\n};\nif (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\n TabPane.displayName = 'DeprecatedTabPane';\n}\nexport default TabPane;","import colorString from 'color-string';\nfunction hue2rgb(p, q, m) {\n let t = m;\n if (t < 0)\n t += 1;\n if (t > 1)\n t -= 1;\n if (t < 1 / 6)\n return p + (q - p) * 6 * t;\n if (t < 1 / 2)\n return q;\n if (t < 2 / 3)\n return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\nfunction hsl2rbg(hsl) {\n const h = hsl[0] / 360;\n const s = hsl[1] / 100;\n const l = hsl[2] / 100;\n const a = hsl[3];\n if (s === 0)\n return [l * 255, l * 255, l * 255, a];\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n const r = hue2rgb(p, q, h + 1 / 3);\n const g = hue2rgb(p, q, h);\n const b = hue2rgb(p, q, h - 1 / 3);\n return [r * 255, g * 255, b * 255, a];\n}\nexport function string2rbg(s) {\n const color = colorString.get(s);\n if (!color)\n return null;\n const { model, value } = color;\n if (model === 'rgb')\n return value;\n if (model === 'hsl')\n return hsl2rbg(value);\n return null;\n}\n//# sourceMappingURL=color.js.map","import { string2rbg } from './color';\n/**\n * 返回一个线性插值器,接受数字\n * @param a 任意值\n * @param b 任意值\n * @returns 线性插值器\n */\nexport const createInterpolateNumber = (a, b) => {\n return (t) => a * (1 - t) + b * t;\n};\nexport const createInterpolateColor = (a, b) => {\n const c1 = string2rbg(a);\n const c2 = string2rbg(b);\n if (c1 === null || c2 === null)\n return c1 ? () => a : () => b;\n return (t) => {\n const values = new Array(4);\n for (let i = 0; i < 4; i += 1) {\n const from = c1[i];\n const to = c2[i];\n values[i] = from * (1 - t) + to * t;\n }\n const [r, g, b, a] = values;\n return `rgba(${Math.round(r)}, ${Math.round(g)}, ${Math.round(b)}, ${a})`;\n };\n};\n/**\n * 返回一个线性插值器,接受数字和颜色\n * @param a 任意值\n * @param b 任意值\n * @returns 线性插值器\n */\nexport const createInterpolateValue = (a, b) => {\n if (typeof a === 'number' && typeof b === 'number')\n return createInterpolateNumber(a, b);\n if (typeof a === 'string' && typeof b === 'string')\n return createInterpolateColor(a, b);\n return () => a;\n};\n/**\n * 返回一个 round 线性差值器,对输出值进行四舍五入\n * @param a 任意值\n * @param b 任意值\n * @returns 线性插值器\n */\nexport const createInterpolateRound = (a, b) => {\n const interpolateNumber = createInterpolateNumber(a, b);\n return (t) => Math.round(interpolateNumber(t));\n};\n//# sourceMappingURL=interpolate.js.map","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","import { isAbsoluteArray } from './is-absolute-array';\n/**\n * Iterates an array to check if it's a `PathArray`\n * with all segments are in non-shorthand notation\n * with absolute values.\n */\nexport function isNormalizedArray(path) {\n return isAbsoluteArray(path) && path.every(function (_a) {\n var pc = _a[0];\n return 'ACLMQZ'.includes(pc);\n });\n}\n//# sourceMappingURL=is-normalized-array.js.map","export function hasAddon(props) {\n return !!(props.addonBefore || props.addonAfter);\n}\nexport function hasPrefixSuffix(props) {\n return !!(props.prefix || props.suffix || props.allowClear);\n}\n\n// TODO: It's better to use `Proxy` replace the `element.value`. But we still need support IE11.\nfunction cloneEvent(event, target, value) {\n // A bug report filed on WebKit's Bugzilla tracker, dating back to 2009, specifically addresses the issue of cloneNode() not copying files of elements.\n // As of the last update, this bug was still marked as \"NEW,\" indicating that it might not have been resolved yet​​.\n // https://bugs.webkit.org/show_bug.cgi?id=28123\n var currentTarget = target.cloneNode(true);\n\n // click clear icon\n var newEvent = Object.create(event, {\n target: {\n value: currentTarget\n },\n currentTarget: {\n value: currentTarget\n }\n });\n\n // Fill data\n currentTarget.value = value;\n\n // Fill selection. Some type like `email` not support selection\n // https://github.com/ant-design/ant-design/issues/47833\n if (typeof target.selectionStart === 'number' && typeof target.selectionEnd === 'number') {\n currentTarget.selectionStart = target.selectionStart;\n currentTarget.selectionEnd = target.selectionEnd;\n }\n currentTarget.setSelectionRange = function () {\n target.setSelectionRange.apply(target, arguments);\n };\n return newEvent;\n}\nexport function resolveOnChange(target, e, onChange, targetValue) {\n if (!onChange) {\n return;\n }\n var event = e;\n if (e.type === 'click') {\n // Clone a new target for event.\n // Avoid the following usage, the setQuery method gets the original value.\n //\n // const [query, setQuery] = React.useState('');\n // {\n // setQuery((prevStatus) => e.target.value);\n // }}\n // />\n\n event = cloneEvent(e, target, '');\n onChange(event);\n return;\n }\n\n // Trigger by composition event, this means we need force change the input value\n // https://github.com/ant-design/ant-design/issues/45737\n // https://github.com/ant-design/ant-design/issues/46598\n if (target.type !== 'file' && targetValue !== undefined) {\n event = cloneEvent(e, target, targetValue);\n onChange(event);\n return;\n }\n onChange(event);\n}\nexport function triggerFocus(element, option) {\n if (!element) return;\n element.focus(option);\n\n // Selection content\n var _ref = option || {},\n cursor = _ref.cursor;\n if (cursor) {\n var len = element.value.length;\n switch (cursor) {\n case 'start':\n element.setSelectionRange(0, 0);\n break;\n case 'end':\n element.setSelectionRange(len, len);\n break;\n default:\n element.setSelectionRange(0, len);\n }\n }\n}","/* istanbul ignore file */\nimport * as React from 'react';\nfunction useRenderTimes(props, debug) {\n // Render times\n var timesRef = React.useRef(0);\n timesRef.current += 1;\n\n // Props changed\n var propsRef = React.useRef(props);\n var keys = [];\n Object.keys(props || {}).map(function (key) {\n var _propsRef$current;\n if ((props === null || props === void 0 ? void 0 : props[key]) !== ((_propsRef$current = propsRef.current) === null || _propsRef$current === void 0 ? void 0 : _propsRef$current[key])) {\n keys.push(key);\n }\n });\n propsRef.current = props;\n\n // Cache keys since React rerender may cause it lost\n var keysRef = React.useRef([]);\n if (keys.length) {\n keysRef.current = keys;\n }\n React.useDebugValue(timesRef.current);\n React.useDebugValue(keysRef.current.join(', '));\n if (debug) {\n console.log(\"\".concat(debug, \":\"), timesRef.current, keysRef.current);\n }\n return timesRef.current;\n}\nexport default process.env.NODE_ENV !== 'production' ? useRenderTimes : function () {};\nexport var RenderBlock = /*#__PURE__*/React.memo(function () {\n var times = useRenderTimes();\n return /*#__PURE__*/React.createElement(\"h1\", null, \"Render Times: \", times);\n});\nif (process.env.NODE_ENV !== 'production') {\n RenderBlock.displayName = 'RenderBlock';\n}","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { wrap } from \"../util/util\";\n\n/*\n * Approximate radius of the earth in meters.\n * Uses the WGS-84 approximation. The radius at the equator is ~6378137 and at the poles is ~6356752. https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84\n * 6371008.8 is one published \"average radius\" see https://en.wikipedia.org/wiki/Earth_radius#Mean_radius, or ftp://athena.fsv.cvut.cz/ZFG/grs80-Moritz.pdf p.4\n */\nexport const earthRadius = 6371008.8;\n\n/**\n * A {@link LngLat} object, an array of two numbers representing longitude and latitude,\n * or an object with `lng` and `lat` or `lon` and `lat` properties.\n *\n * @group Geography and Geometry\n *\n * @example\n * ```ts\n * let v1 = new LngLat(-122.420679, 37.772537);\n * let v2 = [-122.420679, 37.772537];\n * let v3 = {lon: -122.420679, lat: 37.772537};\n * ```\n */\n\n/**\n * A `LngLat` object represents a given longitude and latitude coordinate, measured in degrees.\n * These coordinates are based on the [WGS84 (EPSG:4326) standard](https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84).\n *\n * MapLibre GL JS uses longitude, latitude coordinate order (as opposed to latitude, longitude) to match the\n * [GeoJSON specification](https://tools.ietf.org/html/rfc7946).\n *\n * Note that any MapLibre GL JS method that accepts a `LngLat` object as an argument or option\n * can also accept an `Array` of two numbers and will perform an implicit conversion.\n * This flexible type is documented as {@link LngLatLike}.\n *\n * @group Geography and Geometry\n *\n * @example\n * ```ts\n * let ll = new LngLat(-123.9749, 40.7736);\n * ll.lng; // = -123.9749\n * ```\n * @see [Get coordinates of the mouse pointer](https://maplibre.org/maplibre-gl-js/docs/examples/mouse-position/)\n * @see [Display a popup](https://maplibre.org/maplibre-gl-js/docs/examples/popup/)\n * @see [Create a timeline animation](https://maplibre.org/maplibre-gl-js/docs/examples/timeline-animation/)\n */\nexport class LngLat {\n /**\n * @param lng - Longitude, measured in degrees.\n * @param lat - Latitude, measured in degrees.\n */\n constructor(lng, lat) {\n _defineProperty(this, \"lng\", void 0);\n _defineProperty(this, \"lat\", void 0);\n if (isNaN(lng) || isNaN(lat)) {\n throw new Error(`Invalid LngLat object: (${lng}, ${lat})`);\n }\n this.lng = +lng;\n this.lat = +lat;\n if (this.lat > 90 || this.lat < -90) {\n throw new Error('Invalid LngLat latitude value: must be between -90 and 90');\n }\n }\n\n /**\n * Returns a new `LngLat` object whose longitude is wrapped to the range (-180, 180).\n *\n * @returns The wrapped `LngLat` object.\n * @example\n * ```ts\n * let ll = new LngLat(286.0251, 40.7736);\n * let wrapped = ll.wrap();\n * wrapped.lng; // = -73.9749\n * ```\n */\n wrap() {\n return new LngLat(wrap(this.lng, -180, 180), this.lat);\n }\n\n /**\n * Returns the coordinates represented as an array of two numbers.\n *\n * @returns The coordinates represented as an array of longitude and latitude.\n * @example\n * ```ts\n * let ll = new LngLat(-73.9749, 40.7736);\n * ll.toArray(); // = [-73.9749, 40.7736]\n * ```\n */\n toArray() {\n return [this.lng, this.lat];\n }\n\n /**\n * Returns the coordinates represent as a string.\n *\n * @returns The coordinates represented as a string of the format `'LngLat(lng, lat)'`.\n * @example\n * ```ts\n * let ll = new LngLat(-73.9749, 40.7736);\n * ll.toString(); // = \"LngLat(-73.9749, 40.7736)\"\n * ```\n */\n toString() {\n return `LngLat(${this.lng}, ${this.lat})`;\n }\n\n /**\n * Returns the approximate distance between a pair of coordinates in meters\n * Uses the Haversine Formula (from R.W. Sinnott, \"Virtues of the Haversine\", Sky and Telescope, vol. 68, no. 2, 1984, p. 159)\n *\n * @param lngLat - coordinates to compute the distance to\n * @returns Distance in meters between the two coordinates.\n * @example\n * ```ts\n * let new_york = new LngLat(-74.0060, 40.7128);\n * let los_angeles = new LngLat(-118.2437, 34.0522);\n * new_york.distanceTo(los_angeles); // = 3935751.690893987, \"true distance\" using a non-spherical approximation is ~3966km\n * ```\n */\n distanceTo(lngLat) {\n const rad = Math.PI / 180;\n const lat1 = this.lat * rad;\n const lat2 = lngLat.lat * rad;\n const a = Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos((lngLat.lng - this.lng) * rad);\n const maxMeters = earthRadius * Math.acos(Math.min(a, 1));\n return maxMeters;\n }\n\n /**\n * Converts an array of two numbers or an object with `lng` and `lat` or `lon` and `lat` properties\n * to a `LngLat` object.\n *\n * If a `LngLat` object is passed in, the function returns it unchanged.\n *\n * @param input - An array of two numbers or object to convert, or a `LngLat` object to return.\n * @returns A new `LngLat` object, if a conversion occurred, or the original `LngLat` object.\n * @example\n * ```ts\n * let arr = [-73.9749, 40.7736];\n * let ll = LngLat.convert(arr);\n * ll; // = LngLat {lng: -73.9749, lat: 40.7736}\n * ```\n */\n static convert(input) {\n if (input instanceof LngLat) {\n return input;\n }\n if (Array.isArray(input) && (input.length === 2 || input.length === 3)) {\n return new LngLat(Number(input[0]), Number(input[1]));\n }\n if (!Array.isArray(input) && typeof input === 'object' && input !== null) {\n return new LngLat(\n // flow can't refine this to have one of lng or lat, so we have to cast to any\n Number('lng' in input ? input.lng : input.lon), Number(input.lat));\n }\n throw new Error('`LngLatLike` argument must be specified as a LngLat instance, an object {lng: , lat: }, an object {lon: , lat: }, or an array of [, ]');\n }\n}","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","// src/lodash-adapter.ts\nimport clamp from \"lodash/clamp\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport debounce from \"lodash/debounce\";\nimport get from \"lodash/get\";\nimport isBoolean from \"lodash/isBoolean\";\nimport isEqual from \"lodash/isEqual\";\nimport isNil from \"lodash/isNil\";\nimport isNumber from \"lodash/isNumber\";\nimport isPlainObject from \"lodash/isPlainObject\";\nimport isString from \"lodash/isString\";\nimport isTypedArray from \"lodash/isTypedArray\";\nimport merge from \"lodash/merge\";\nimport mergeWith from \"lodash/mergeWith\";\nimport pull from \"lodash/pull\";\nimport throttle from \"lodash/throttle\";\nimport uniq from \"lodash/uniq\";\nimport upperFirst from \"lodash/upperFirst\";\nimport isFunction from \"lodash/isFunction\";\nimport isObject from \"lodash/isObject\";\nimport isUndefined from \"lodash/isUndefined\";\nimport camelCase from \"lodash/camelCase\";\nimport uniqueId from \"lodash/uniqueId\";\nvar lodashUtil = {\n isNil,\n merge,\n throttle,\n isString,\n debounce,\n pull,\n isTypedArray,\n isPlainObject,\n isNumber,\n isBoolean,\n isEqual,\n cloneDeep,\n uniq,\n clamp,\n upperFirst,\n get,\n mergeWith,\n isFunction,\n isObject,\n isUndefined,\n camelCase,\n uniqueId\n};\nexport {\n lodashUtil\n};\n","import _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { PlusOutlined } from '@ant-design/icons';\nimport { ProProvider, useIntl } from '@ant-design/pro-provider';\nimport { nanoid, runFunction } from '@ant-design/pro-utils';\nimport { Button } from 'antd';\nimport omit from \"rc-util/es/omit\";\nimport { useContext, useMemo, useRef, useState } from 'react';\nimport { EditOrReadOnlyContext } from \"../../BaseForm/EditOrReadOnlyContext\";\nimport { ProFormListItem } from \"./ListItem\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createElement as _createElement } from \"react\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar ProFormListContainer = function ProFormListContainer(props) {\n var intl = useIntl();\n var creatorButtonProps = props.creatorButtonProps,\n prefixCls = props.prefixCls,\n children = props.children,\n creatorRecord = props.creatorRecord,\n action = props.action,\n fields = props.fields,\n actionGuard = props.actionGuard,\n max = props.max,\n fieldExtraRender = props.fieldExtraRender,\n meta = props.meta,\n containerClassName = props.containerClassName,\n containerStyle = props.containerStyle,\n onAfterAdd = props.onAfterAdd,\n onAfterRemove = props.onAfterRemove;\n var _useContext = useContext(ProProvider),\n hashId = _useContext.hashId;\n var fieldKeyMap = useRef(new Map());\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n loading = _useState2[0],\n setLoading = _useState2[1];\n var uuidFields = useMemo(function () {\n return fields.map(function (field) {\n var _fieldKeyMap$current, _fieldKeyMap$current3;\n if (!((_fieldKeyMap$current = fieldKeyMap.current) !== null && _fieldKeyMap$current !== void 0 && _fieldKeyMap$current.has(field.key.toString()))) {\n var _fieldKeyMap$current2;\n (_fieldKeyMap$current2 = fieldKeyMap.current) === null || _fieldKeyMap$current2 === void 0 || _fieldKeyMap$current2.set(field.key.toString(), nanoid());\n }\n var uuid = (_fieldKeyMap$current3 = fieldKeyMap.current) === null || _fieldKeyMap$current3 === void 0 ? void 0 : _fieldKeyMap$current3.get(field.key.toString());\n return _objectSpread(_objectSpread({}, field), {}, {\n uuid: uuid\n });\n });\n }, [fields]);\n\n /**\n * 根据行为守卫包装action函数\n */\n var wrapperAction = useMemo(function () {\n var wrapAction = _objectSpread({}, action);\n var count = uuidFields.length;\n if (actionGuard !== null && actionGuard !== void 0 && actionGuard.beforeAddRow) {\n wrapAction.add = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n var _len,\n rest,\n _key,\n success,\n res,\n _args = arguments;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n for (_len = _args.length, rest = new Array(_len), _key = 0; _key < _len; _key++) {\n rest[_key] = _args[_key];\n }\n _context.next = 3;\n return actionGuard.beforeAddRow.apply(actionGuard, rest.concat([count]));\n case 3:\n success = _context.sent;\n if (!success) {\n _context.next = 8;\n break;\n }\n res = action.add.apply(action, rest);\n onAfterAdd === null || onAfterAdd === void 0 || onAfterAdd.apply(void 0, rest.concat([count + 1]));\n return _context.abrupt(\"return\", res);\n case 8:\n return _context.abrupt(\"return\", false);\n case 9:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n } else {\n wrapAction.add = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n var _len2,\n rest,\n _key2,\n res,\n _args2 = arguments;\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n for (_len2 = _args2.length, rest = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n rest[_key2] = _args2[_key2];\n }\n res = action.add.apply(action, rest);\n onAfterAdd === null || onAfterAdd === void 0 || onAfterAdd.apply(void 0, rest.concat([count + 1]));\n return _context2.abrupt(\"return\", res);\n case 4:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n }\n if (actionGuard !== null && actionGuard !== void 0 && actionGuard.beforeRemoveRow) {\n wrapAction.remove = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\n var _len3,\n rest,\n _key3,\n success,\n res,\n _args3 = arguments;\n return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n for (_len3 = _args3.length, rest = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n rest[_key3] = _args3[_key3];\n }\n _context3.next = 3;\n return actionGuard.beforeRemoveRow.apply(actionGuard, rest.concat([count]));\n case 3:\n success = _context3.sent;\n if (!success) {\n _context3.next = 8;\n break;\n }\n res = action.remove.apply(action, rest);\n onAfterRemove === null || onAfterRemove === void 0 || onAfterRemove.apply(void 0, rest.concat([count - 1]));\n return _context3.abrupt(\"return\", res);\n case 8:\n return _context3.abrupt(\"return\", false);\n case 9:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }));\n } else {\n wrapAction.remove = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {\n var _len4,\n rest,\n _key4,\n res,\n _args4 = arguments;\n return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n for (_len4 = _args4.length, rest = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n rest[_key4] = _args4[_key4];\n }\n res = action.remove.apply(action, rest);\n onAfterRemove === null || onAfterRemove === void 0 || onAfterRemove.apply(void 0, rest.concat([count - 1]));\n return _context4.abrupt(\"return\", res);\n case 4:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4);\n }));\n }\n return wrapAction;\n }, [action, actionGuard === null || actionGuard === void 0 ? void 0 : actionGuard.beforeAddRow, actionGuard === null || actionGuard === void 0 ? void 0 : actionGuard.beforeRemoveRow, onAfterAdd, onAfterRemove, uuidFields.length]);\n var creatorButton = useMemo(function () {\n if (creatorButtonProps === false || uuidFields.length === max) return null;\n var _ref5 = creatorButtonProps || {},\n _ref5$position = _ref5.position,\n position = _ref5$position === void 0 ? 'bottom' : _ref5$position,\n _ref5$creatorButtonTe = _ref5.creatorButtonText,\n creatorButtonText = _ref5$creatorButtonTe === void 0 ? intl.getMessage('editableTable.action.add', '添加一行数据') : _ref5$creatorButtonTe;\n return /*#__PURE__*/_jsx(Button, _objectSpread(_objectSpread({\n className: \"\".concat(prefixCls, \"-creator-button-\").concat(position, \" \").concat(hashId || '').trim(),\n type: \"dashed\",\n loading: loading,\n block: true,\n icon: /*#__PURE__*/_jsx(PlusOutlined, {})\n }, omit(creatorButtonProps || {}, ['position', 'creatorButtonText'])), {}, {\n onClick: /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {\n var _runFunction;\n var index;\n return _regeneratorRuntime().wrap(function _callee5$(_context5) {\n while (1) switch (_context5.prev = _context5.next) {\n case 0:\n setLoading(true);\n // 如果不是从顶部开始添加,则插入的索引为当前行数\n index = uuidFields.length; // 如果是顶部,加到第一个,如果不是,为空就是最后一个\n if (position === 'top') index = 0;\n _context5.next = 5;\n return wrapperAction.add((_runFunction = runFunction(creatorRecord)) !== null && _runFunction !== void 0 ? _runFunction : {}, index);\n case 5:\n setLoading(false);\n case 6:\n case \"end\":\n return _context5.stop();\n }\n }, _callee5);\n })),\n children: creatorButtonText\n }));\n }, [creatorButtonProps, uuidFields.length, max, intl, prefixCls, hashId, loading, wrapperAction, creatorRecord]);\n var readOnlyContext = useContext(EditOrReadOnlyContext);\n var defaultStyle = _objectSpread({\n width: 'max-content',\n maxWidth: '100%',\n minWidth: '100%'\n }, containerStyle);\n var itemList = useMemo(function () {\n return uuidFields.map(function (field, index) {\n return /*#__PURE__*/_createElement(ProFormListItem, _objectSpread(_objectSpread({}, props), {}, {\n key: field.uuid,\n field: field,\n index: index,\n action: wrapperAction,\n count: uuidFields.length\n }), children);\n });\n }, [children, props, uuidFields, wrapperAction]);\n if (readOnlyContext.mode === 'read' || props.readonly === true) {\n return /*#__PURE__*/_jsx(_Fragment, {\n children: itemList\n });\n }\n return /*#__PURE__*/_jsxs(\"div\", {\n style: defaultStyle,\n className: containerClassName,\n children: [creatorButtonProps !== false && (creatorButtonProps === null || creatorButtonProps === void 0 ? void 0 : creatorButtonProps.position) === 'top' && creatorButton, itemList, fieldExtraRender && fieldExtraRender(wrapperAction, meta), creatorButtonProps !== false && (creatorButtonProps === null || creatorButtonProps === void 0 ? void 0 : creatorButtonProps.position) !== 'top' && creatorButton]\n });\n};\nexport { ProFormListContainer };","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"fieldProps\", \"children\", \"params\", \"proFieldProps\", \"mode\", \"valueEnum\", \"request\", \"showSearch\", \"options\"],\n _excluded2 = [\"fieldProps\", \"children\", \"params\", \"proFieldProps\", \"mode\", \"valueEnum\", \"request\", \"options\"];\nimport { runFunction } from '@ant-design/pro-utils';\nimport React, { useContext } from 'react';\nimport FieldContext from \"../../FieldContext\";\nimport ProFormField from \"../Field\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * 选择框\n *\n * @param\n */\nvar ProFormSelectComponents = function ProFormSelectComponents(_ref, ref) {\n var fieldProps = _ref.fieldProps,\n children = _ref.children,\n params = _ref.params,\n proFieldProps = _ref.proFieldProps,\n mode = _ref.mode,\n valueEnum = _ref.valueEnum,\n request = _ref.request,\n showSearch = _ref.showSearch,\n options = _ref.options,\n rest = _objectWithoutProperties(_ref, _excluded);\n var context = useContext(FieldContext);\n return /*#__PURE__*/_jsx(ProFormField, _objectSpread(_objectSpread({\n valueEnum: runFunction(valueEnum),\n request: request,\n params: params,\n valueType: \"select\",\n filedConfig: {\n customLightMode: true\n },\n fieldProps: _objectSpread({\n options: options,\n mode: mode,\n showSearch: showSearch,\n getPopupContainer: context.getPopupContainer\n }, fieldProps),\n ref: ref,\n proFieldProps: proFieldProps\n }, rest), {}, {\n children: children\n }));\n};\nvar SearchSelect = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {\n var fieldProps = _ref2.fieldProps,\n children = _ref2.children,\n params = _ref2.params,\n proFieldProps = _ref2.proFieldProps,\n mode = _ref2.mode,\n valueEnum = _ref2.valueEnum,\n request = _ref2.request,\n options = _ref2.options,\n rest = _objectWithoutProperties(_ref2, _excluded2);\n var props = _objectSpread({\n options: options,\n mode: mode || 'multiple',\n labelInValue: true,\n showSearch: true,\n suffixIcon: null,\n autoClearSearchValue: true,\n optionLabelProp: 'label'\n }, fieldProps);\n var context = useContext(FieldContext);\n return /*#__PURE__*/_jsx(ProFormField, _objectSpread(_objectSpread({\n valueEnum: runFunction(valueEnum),\n request: request,\n params: params,\n valueType: \"select\",\n filedConfig: {\n customLightMode: true\n },\n fieldProps: _objectSpread({\n getPopupContainer: context.getPopupContainer\n }, props),\n ref: ref,\n proFieldProps: proFieldProps\n }, rest), {}, {\n children: children\n }));\n});\nvar ProFormSelect = /*#__PURE__*/React.forwardRef(ProFormSelectComponents);\nvar ProFormSearchSelect = SearchSelect;\nvar WrappedProFormSelect = ProFormSelect;\nWrappedProFormSelect.SearchSelect = ProFormSearchSelect;\n\n// @ts-ignore\n// eslint-disable-next-line no-param-reassign\nWrappedProFormSelect.displayName = 'ProFormComponent';\nexport default WrappedProFormSelect;","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport BaseModel from \"../../core/BaseModel\";\n/* babel-plugin-inline-import '../shaders/normal/normal_frag.glsl' */\nconst normalFrag = \"in vec4 v_color;\\nout vec4 outputColor;\\nvoid main() {\\n outputColor = v_color;\\n}\";\n/* babel-plugin-inline-import '../shaders/normal/normal_vert.glsl' */\nconst normalVert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\n\\nlayout(std140) uniform u_Common {\\n float u_size_scale;\\n};\\n\\nout vec4 v_color;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"project\\\"\\n\\nvoid main() {\\n v_color = vec4(a_Color.xyz, a_Color.w * opacity);\\n\\n vec4 project_pos = project_position(vec4(a_Position, 1.0), a_Position64Low);\\n gl_Position = project_common_position_to_clipspace(project_pos);\\n\\n gl_PointSize = a_Size * u_size_scale * 2.0 * u_DevicePixelRatio;\\n}\\n\";\nexport function PointTriangulation(feature) {\n const coordinates = feature.coordinates;\n return {\n vertices: [...coordinates],\n indices: [0],\n size: coordinates.length\n };\n}\nexport default class NormalModel extends BaseModel {\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9\n });\n }\n getDefaultStyle() {\n return {\n blend: 'additive'\n };\n }\n getCommonUniformsInfo() {\n const commonOptions = {\n u_size_scale: 0.5\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.layer.triangulation = PointTriangulation;\n _this2.initUniformsBuffer();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'pointNormal',\n vertexShader: normalVert,\n fragmentShader: normalFrag,\n triangulation: PointTriangulation,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n depth: {\n enable: false\n },\n primitive: gl.POINTS,\n pick: false\n });\n return [model];\n })();\n }\n clearModels() {\n return;\n }\n registerBuiltinAttributes() {\n // 注册 Position 属性 64 位地位部分,经纬度数据开启双精度,避免大于 20层级以上出现数据偏移\n this.registerPosition64LowAttribute();\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n size = 1\n } = feature;\n return Array.isArray(size) ? [size[0]] : [size];\n }\n }\n });\n }\n}","// This icon file is generated automatically.\nvar CaretUpOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"0 0 1024 1024\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M858.9 689L530.5 308.2c-9.4-10.9-27.5-10.9-37 0L165.1 689c-12.2 14.2-1.2 35 18.5 35h656.8c19.7 0 30.7-20.8 18.5-35z\" } }] }, \"name\": \"caret-up\", \"theme\": \"outlined\" };\nexport default CaretUpOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport CaretUpOutlinedSvg from \"@ant-design/icons-svg/es/asn/CaretUpOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar CaretUpOutlined = function CaretUpOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: CaretUpOutlinedSvg\n }));\n};\n\n/**![caret-up](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg1OC45IDY4OUw1MzAuNSAzMDguMmMtOS40LTEwLjktMjcuNS0xMC45LTM3IDBMMTY1LjEgNjg5Yy0xMi4yIDE0LjItMS4yIDM1IDE4LjUgMzVoNjU2LjhjMTkuNyAwIDMwLjctMjAuOCAxOC41LTM1eiIgLz48L3N2Zz4=) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(CaretUpOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'CaretUpOutlined';\n}\nexport default RefIcon;","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n constructor() {\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n add(x) {\n const p = this._partials;\n let i = 0;\n for (let j = 0; j < this._n && j < 32; j++) {\n const y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n valueOf() {\n const p = this._partials;\n let n = this._n, x, y, lo, hi = 0;\n if (n > 0) {\n hi = p[--n];\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n return hi;\n }\n}\n\nexport function fsum(values, valueof) {\n const adder = new Adder();\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n adder.add(value);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n adder.add(value);\n }\n }\n }\n return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n const adder = new Adder();\n let index = -1;\n return Float64Array.from(values, valueof === undefined\n ? v => adder.add(+v || 0)\n : v => adder.add(+valueof(v, ++index, values) || 0)\n );\n}\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { LngLat, earthRadius } from \"./lng_lat\";\n/*\n * The average circumference of the world in meters.\n */\nconst earthCircumfrence = 2 * Math.PI * earthRadius; // meters\n\n/*\n * The circumference at a line of latitude in meters.\n */\nfunction circumferenceAtLatitude(latitude) {\n return earthCircumfrence * Math.cos(latitude * Math.PI / 180);\n}\nexport function mercatorXfromLng(lng) {\n return (180 + lng) / 360;\n}\nexport function mercatorYfromLat(lat) {\n return (180 - 180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + lat * Math.PI / 360))) / 360;\n}\nexport function mercatorZfromAltitude(altitude, lat) {\n return altitude / circumferenceAtLatitude(lat);\n}\nexport function lngFromMercatorX(x) {\n return x * 360 - 180;\n}\nexport function latFromMercatorY(y) {\n const y2 = 180 - y * 360;\n return 360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90;\n}\nexport function altitudeFromMercatorZ(z, y) {\n return z * circumferenceAtLatitude(latFromMercatorY(y));\n}\n\n/**\n * Determine the Mercator scale factor for a given latitude, see\n * https://en.wikipedia.org/wiki/Mercator_projection#Scale_factor\n *\n * At the equator the scale factor will be 1, which increases at higher latitudes.\n *\n * @param lat - Latitude\n * @returns scale factor\n */\nexport function mercatorScale(lat) {\n return 1 / Math.cos(lat * Math.PI / 180);\n}\n\n/**\n * A `MercatorCoordinate` object represents a projected three dimensional position.\n *\n * `MercatorCoordinate` uses the web mercator projection ([EPSG:3857](https://epsg.io/3857)) with slightly different units:\n *\n * - the size of 1 unit is the width of the projected world instead of the \"mercator meter\"\n * - the origin of the coordinate space is at the north-west corner instead of the middle\n *\n * For example, `MercatorCoordinate(0, 0, 0)` is the north-west corner of the mercator world and\n * `MercatorCoordinate(1, 1, 0)` is the south-east corner. If you are familiar with\n * [vector tiles](https://github.com/mapbox/vector-tile-spec) it may be helpful to think\n * of the coordinate space as the `0/0/0` tile with an extent of `1`.\n *\n * The `z` dimension of `MercatorCoordinate` is conformal. A cube in the mercator coordinate space would be rendered as a cube.\n *\n * @group Geography and Geometry\n *\n * @example\n * ```ts\n * let nullIsland = new MercatorCoordinate(0.5, 0.5, 0);\n * ```\n * @see [Add a custom style layer](https://maplibre.org/maplibre-gl-js/docs/examples/custom-style-layer/)\n */\nexport class MercatorCoordinate {\n /**\n * @param x - The x component of the position.\n * @param y - The y component of the position.\n * @param z - The z component of the position.\n */\n constructor(x, y, z = 0) {\n _defineProperty(this, \"x\", void 0);\n _defineProperty(this, \"y\", void 0);\n _defineProperty(this, \"z\", void 0);\n this.x = +x;\n this.y = +y;\n this.z = +z;\n }\n\n /**\n * Project a `LngLat` to a `MercatorCoordinate`.\n *\n * @param lngLatLike - The location to project.\n * @param altitude - The altitude in meters of the position.\n * @returns The projected mercator coordinate.\n * @example\n * ```ts\n * let coord = MercatorCoordinate.fromLngLat({ lng: 0, lat: 0}, 0);\n * coord; // MercatorCoordinate(0.5, 0.5, 0)\n * ```\n */\n static fromLngLat(lngLatLike, altitude = 0) {\n const lngLat = LngLat.convert(lngLatLike);\n return new MercatorCoordinate(mercatorXfromLng(lngLat.lng), mercatorYfromLat(lngLat.lat), mercatorZfromAltitude(altitude, lngLat.lat));\n }\n\n /**\n * Returns the `LngLat` for the coordinate.\n *\n * @returns The `LngLat` object.\n * @example\n * ```ts\n * let coord = new MercatorCoordinate(0.5, 0.5, 0);\n * let lngLat = coord.toLngLat(); // LngLat(0, 0)\n * ```\n */\n toLngLat() {\n return new LngLat(lngFromMercatorX(this.x), latFromMercatorY(this.y));\n }\n\n /**\n * Returns the altitude in meters of the coordinate.\n *\n * @returns The altitude in meters.\n * @example\n * ```ts\n * let coord = new MercatorCoordinate(0, 0, 0.02);\n * coord.toAltitude(); // 6914.281956295339\n * ```\n */\n toAltitude() {\n return altitudeFromMercatorZ(this.z, this.y);\n }\n\n /**\n * Returns the distance of 1 meter in `MercatorCoordinate` units at this latitude.\n *\n * For coordinates in real world units using meters, this naturally provides the scale\n * to transform into `MercatorCoordinate`s.\n *\n * @returns Distance of 1 meter in `MercatorCoordinate` units.\n */\n meterInMercatorCoordinateUnits() {\n // 1 meter / circumference at equator in meters * Mercator projection scale factor at this latitude\n return 1 / earthCircumfrence * mercatorScale(latFromMercatorY(this.y));\n }\n}","import warning from \"rc-util/es/warning\";\nimport getEntity from \"./keyUtil\";\nfunction removeFromCheckedKeys(halfCheckedKeys, checkedKeys) {\n var filteredKeys = new Set();\n halfCheckedKeys.forEach(function (key) {\n if (!checkedKeys.has(key)) {\n filteredKeys.add(key);\n }\n });\n return filteredKeys;\n}\nexport function isCheckDisabled(node) {\n var _ref = node || {},\n disabled = _ref.disabled,\n disableCheckbox = _ref.disableCheckbox,\n checkable = _ref.checkable;\n return !!(disabled || disableCheckbox) || checkable === false;\n}\n\n// Fill miss keys\nfunction fillConductCheck(keys, levelEntities, maxLevel, syntheticGetCheckDisabled) {\n var checkedKeys = new Set(keys);\n var halfCheckedKeys = new Set();\n\n // Add checked keys top to bottom\n for (var level = 0; level <= maxLevel; level += 1) {\n var entities = levelEntities.get(level) || new Set();\n entities.forEach(function (entity) {\n var key = entity.key,\n node = entity.node,\n _entity$children = entity.children,\n children = _entity$children === void 0 ? [] : _entity$children;\n if (checkedKeys.has(key) && !syntheticGetCheckDisabled(node)) {\n children.filter(function (childEntity) {\n return !syntheticGetCheckDisabled(childEntity.node);\n }).forEach(function (childEntity) {\n checkedKeys.add(childEntity.key);\n });\n }\n });\n }\n\n // Add checked keys from bottom to top\n var visitedKeys = new Set();\n for (var _level = maxLevel; _level >= 0; _level -= 1) {\n var _entities = levelEntities.get(_level) || new Set();\n _entities.forEach(function (entity) {\n var parent = entity.parent,\n node = entity.node;\n\n // Skip if no need to check\n if (syntheticGetCheckDisabled(node) || !entity.parent || visitedKeys.has(entity.parent.key)) {\n return;\n }\n\n // Skip if parent is disabled\n if (syntheticGetCheckDisabled(entity.parent.node)) {\n visitedKeys.add(parent.key);\n return;\n }\n var allChecked = true;\n var partialChecked = false;\n (parent.children || []).filter(function (childEntity) {\n return !syntheticGetCheckDisabled(childEntity.node);\n }).forEach(function (_ref2) {\n var key = _ref2.key;\n var checked = checkedKeys.has(key);\n if (allChecked && !checked) {\n allChecked = false;\n }\n if (!partialChecked && (checked || halfCheckedKeys.has(key))) {\n partialChecked = true;\n }\n });\n if (allChecked) {\n checkedKeys.add(parent.key);\n }\n if (partialChecked) {\n halfCheckedKeys.add(parent.key);\n }\n visitedKeys.add(parent.key);\n });\n }\n return {\n checkedKeys: Array.from(checkedKeys),\n halfCheckedKeys: Array.from(removeFromCheckedKeys(halfCheckedKeys, checkedKeys))\n };\n}\n\n// Remove useless key\nfunction cleanConductCheck(keys, halfKeys, levelEntities, maxLevel, syntheticGetCheckDisabled) {\n var checkedKeys = new Set(keys);\n var halfCheckedKeys = new Set(halfKeys);\n\n // Remove checked keys from top to bottom\n for (var level = 0; level <= maxLevel; level += 1) {\n var entities = levelEntities.get(level) || new Set();\n entities.forEach(function (entity) {\n var key = entity.key,\n node = entity.node,\n _entity$children2 = entity.children,\n children = _entity$children2 === void 0 ? [] : _entity$children2;\n if (!checkedKeys.has(key) && !halfCheckedKeys.has(key) && !syntheticGetCheckDisabled(node)) {\n children.filter(function (childEntity) {\n return !syntheticGetCheckDisabled(childEntity.node);\n }).forEach(function (childEntity) {\n checkedKeys.delete(childEntity.key);\n });\n }\n });\n }\n\n // Remove checked keys form bottom to top\n halfCheckedKeys = new Set();\n var visitedKeys = new Set();\n for (var _level2 = maxLevel; _level2 >= 0; _level2 -= 1) {\n var _entities2 = levelEntities.get(_level2) || new Set();\n _entities2.forEach(function (entity) {\n var parent = entity.parent,\n node = entity.node;\n\n // Skip if no need to check\n if (syntheticGetCheckDisabled(node) || !entity.parent || visitedKeys.has(entity.parent.key)) {\n return;\n }\n\n // Skip if parent is disabled\n if (syntheticGetCheckDisabled(entity.parent.node)) {\n visitedKeys.add(parent.key);\n return;\n }\n var allChecked = true;\n var partialChecked = false;\n (parent.children || []).filter(function (childEntity) {\n return !syntheticGetCheckDisabled(childEntity.node);\n }).forEach(function (_ref3) {\n var key = _ref3.key;\n var checked = checkedKeys.has(key);\n if (allChecked && !checked) {\n allChecked = false;\n }\n if (!partialChecked && (checked || halfCheckedKeys.has(key))) {\n partialChecked = true;\n }\n });\n if (!allChecked) {\n checkedKeys.delete(parent.key);\n }\n if (partialChecked) {\n halfCheckedKeys.add(parent.key);\n }\n visitedKeys.add(parent.key);\n });\n }\n return {\n checkedKeys: Array.from(checkedKeys),\n halfCheckedKeys: Array.from(removeFromCheckedKeys(halfCheckedKeys, checkedKeys))\n };\n}\n\n/**\n * Conduct with keys.\n * @param keyList current key list\n * @param keyEntities key - dataEntity map\n * @param mode `fill` to fill missing key, `clean` to remove useless key\n */\nexport function conductCheck(keyList, checked, keyEntities, getCheckDisabled) {\n var warningMissKeys = [];\n var syntheticGetCheckDisabled;\n if (getCheckDisabled) {\n syntheticGetCheckDisabled = getCheckDisabled;\n } else {\n syntheticGetCheckDisabled = isCheckDisabled;\n }\n\n // We only handle exist keys\n var keys = new Set(keyList.filter(function (key) {\n var hasEntity = !!getEntity(keyEntities, key);\n if (!hasEntity) {\n warningMissKeys.push(key);\n }\n return hasEntity;\n }));\n var levelEntities = new Map();\n var maxLevel = 0;\n\n // Convert entities by level for calculation\n Object.keys(keyEntities).forEach(function (key) {\n var entity = keyEntities[key];\n var level = entity.level;\n var levelSet = levelEntities.get(level);\n if (!levelSet) {\n levelSet = new Set();\n levelEntities.set(level, levelSet);\n }\n levelSet.add(entity);\n maxLevel = Math.max(maxLevel, level);\n });\n warning(!warningMissKeys.length, \"Tree missing follow keys: \".concat(warningMissKeys.slice(0, 100).map(function (key) {\n return \"'\".concat(key, \"'\");\n }).join(', ')));\n var result;\n if (checked === true) {\n result = fillConductCheck(keys, levelEntities, maxLevel, syntheticGetCheckDisabled);\n } else {\n result = cleanConductCheck(keys, checked.halfCheckedKeys, levelEntities, maxLevel, syntheticGetCheckDisabled);\n }\n return result;\n}","import isArray from './is-array';\n/**\n * @param {Array} arr The array to iterate over.\n * @return {*} Returns the minimum value.\n * @example\n *\n * min([1, 2]);\n * // => 1\n *\n * min([]);\n * // => undefined\n *\n * const data = new Array(1250010).fill(1).map((d,idx) => idx);\n *\n * min(data);\n * // => 1250010\n * // Math.min(...data) will encounter \"Maximum call stack size exceeded\" error\n */\nexport default (function (arr) {\n if (!isArray(arr)) {\n return undefined;\n }\n return arr.reduce(function (prev, curr) {\n return Math.min(prev, curr);\n }, arr[0]);\n});\n//# sourceMappingURL=min.js.map","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import { __read } from \"tslib\";\nvar BBox = /** @class */ (function () {\n function BBox(x, y, width, height) {\n if (x === void 0) { x = 0; }\n if (y === void 0) { y = 0; }\n if (width === void 0) { width = 0; }\n if (height === void 0) { height = 0; }\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n Object.defineProperty(BBox.prototype, \"bottom\", {\n get: function () {\n return this.y + this.height;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BBox.prototype, \"left\", {\n get: function () {\n return this.x;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BBox.prototype, \"right\", {\n get: function () {\n return this.x + this.width;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BBox.prototype, \"top\", {\n get: function () {\n return this.y;\n },\n enumerable: false,\n configurable: true\n });\n BBox.fromRect = function (other) {\n return new BBox(other.x, other.y, other.width, other.height);\n };\n BBox.prototype.toJSON = function () {\n return {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height,\n top: this.top,\n right: this.right,\n bottom: this.bottom,\n left: this.left,\n };\n };\n /**\n * 点是否在 bbox 中\n * @param p\n */\n BBox.prototype.isPointIn = function (x, y) {\n return x >= this.left && x <= this.right && y >= this.top && y <= this.bottom;\n };\n return BBox;\n}());\nexport { BBox };\nexport function getRenderBBox(element) {\n var _a = element.getRenderBounds(), _b = __read(_a.min, 2), minX = _b[0], minY = _b[1], _c = __read(_a.max, 2), maxX = _c[0], maxY = _c[1];\n var width = maxX - minX;\n var height = maxY - minY;\n return new BBox(minX, minY, width, height);\n}\n//# sourceMappingURL=bbox.js.map","var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","import { tickIncrement } from '../utils';\nexport const d3Ticks = (begin, end, count) => {\n let n;\n let ticks;\n let start = begin;\n let stop = end;\n if (start === stop && count > 0) {\n return [start];\n }\n let step = tickIncrement(start, stop, count);\n if (step === 0 || !Number.isFinite(step)) {\n return [];\n }\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array((n = Math.ceil(stop - start + 1)));\n for (let i = 0; i < n; i += 1) {\n ticks[i] = (start + i) * step;\n }\n }\n else {\n step = -step;\n start = Math.ceil(start * step);\n stop = Math.floor(stop * step);\n ticks = new Array((n = Math.ceil(stop - start + 1)));\n for (let i = 0; i < n; i += 1) {\n ticks[i] = (start + i) / step;\n }\n }\n return ticks;\n};\n//# sourceMappingURL=d3-ticks.js.map","// This file is autogenerated. It's used to publish ESM to npm.\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n\nvar trimLeft = /^\\s+/;\nvar trimRight = /\\s+$/;\nfunction tinycolor(color, opts) {\n color = color ? color : \"\";\n opts = opts || {};\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n var rgb = inputToRGB(color);\n this._originalInput = color, this._r = rgb.r, this._g = rgb.g, this._b = rgb.b, this._a = rgb.a, this._roundA = Math.round(100 * this._a) / 100, this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) this._r = Math.round(this._r);\n if (this._g < 1) this._g = Math.round(this._g);\n if (this._b < 1) this._b = Math.round(this._b);\n this._ok = rgb.ok;\n}\ntinycolor.prototype = {\n isDark: function isDark() {\n return this.getBrightness() < 128;\n },\n isLight: function isLight() {\n return !this.isDark();\n },\n isValid: function isValid() {\n return this._ok;\n },\n getOriginalInput: function getOriginalInput() {\n return this._originalInput;\n },\n getFormat: function getFormat() {\n return this._format;\n },\n getAlpha: function getAlpha() {\n return this._a;\n },\n getBrightness: function getBrightness() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function getLuminance() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r / 255;\n GsRGB = rgb.g / 255;\n BsRGB = rgb.b / 255;\n if (RsRGB <= 0.03928) R = RsRGB / 12.92;else R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n if (GsRGB <= 0.03928) G = GsRGB / 12.92;else G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n if (BsRGB <= 0.03928) B = BsRGB / 12.92;else B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n },\n setAlpha: function setAlpha(value) {\n this._a = boundAlpha(value);\n this._roundA = Math.round(100 * this._a) / 100;\n return this;\n },\n toHsv: function toHsv() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return {\n h: hsv.h * 360,\n s: hsv.s,\n v: hsv.v,\n a: this._a\n };\n },\n toHsvString: function toHsvString() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = Math.round(hsv.h * 360),\n s = Math.round(hsv.s * 100),\n v = Math.round(hsv.v * 100);\n return this._a == 1 ? \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" : \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + this._roundA + \")\";\n },\n toHsl: function toHsl() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return {\n h: hsl.h * 360,\n s: hsl.s,\n l: hsl.l,\n a: this._a\n };\n },\n toHslString: function toHslString() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = Math.round(hsl.h * 360),\n s = Math.round(hsl.s * 100),\n l = Math.round(hsl.l * 100);\n return this._a == 1 ? \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" : \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + this._roundA + \")\";\n },\n toHex: function toHex(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function toHexString(allow3Char) {\n return \"#\" + this.toHex(allow3Char);\n },\n toHex8: function toHex8(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function toHex8String(allow4Char) {\n return \"#\" + this.toHex8(allow4Char);\n },\n toRgb: function toRgb() {\n return {\n r: Math.round(this._r),\n g: Math.round(this._g),\n b: Math.round(this._b),\n a: this._a\n };\n },\n toRgbString: function toRgbString() {\n return this._a == 1 ? \"rgb(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \")\" : \"rgba(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function toPercentageRgb() {\n return {\n r: Math.round(bound01(this._r, 255) * 100) + \"%\",\n g: Math.round(bound01(this._g, 255) * 100) + \"%\",\n b: Math.round(bound01(this._b, 255) * 100) + \"%\",\n a: this._a\n };\n },\n toPercentageRgbString: function toPercentageRgbString() {\n return this._a == 1 ? \"rgb(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%)\" : \"rgba(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function toName() {\n if (this._a === 0) {\n return \"transparent\";\n }\n if (this._a < 1) {\n return false;\n }\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function toFilter(secondColor) {\n var hex8String = \"#\" + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = \"#\" + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n return \"progid:DXImageTransform.Microsoft.gradient(\" + gradientType + \"startColorstr=\" + hex8String + \",endColorstr=\" + secondHex8String + \")\";\n },\n toString: function toString(format) {\n var formatSet = !!format;\n format = format || this._format;\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n return formattedString || this.toHexString();\n },\n clone: function clone() {\n return tinycolor(this.toString());\n },\n _applyModification: function _applyModification(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function lighten() {\n return this._applyModification(_lighten, arguments);\n },\n brighten: function brighten() {\n return this._applyModification(_brighten, arguments);\n },\n darken: function darken() {\n return this._applyModification(_darken, arguments);\n },\n desaturate: function desaturate() {\n return this._applyModification(_desaturate, arguments);\n },\n saturate: function saturate() {\n return this._applyModification(_saturate, arguments);\n },\n greyscale: function greyscale() {\n return this._applyModification(_greyscale, arguments);\n },\n spin: function spin() {\n return this._applyModification(_spin, arguments);\n },\n _applyCombination: function _applyCombination(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function analogous() {\n return this._applyCombination(_analogous, arguments);\n },\n complement: function complement() {\n return this._applyCombination(_complement, arguments);\n },\n monochromatic: function monochromatic() {\n return this._applyCombination(_monochromatic, arguments);\n },\n splitcomplement: function splitcomplement() {\n return this._applyCombination(_splitcomplement, arguments);\n },\n // Disabled until https://github.com/bgrins/TinyColor/issues/254\n // polyad: function (number) {\n // return this._applyCombination(polyad, [number]);\n // },\n triad: function triad() {\n return this._applyCombination(polyad, [3]);\n },\n tetrad: function tetrad() {\n return this._applyCombination(polyad, [4]);\n }\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function (color, opts) {\n if (_typeof(color) == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n } else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n// \"red\"\n// \"#f00\" or \"f00\"\n// \"#ff0000\" or \"ff0000\"\n// \"#ff000000\" or \"ff000000\"\n// \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n// \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n// \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n// \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n// \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n// \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n// \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n var rgb = {\n r: 0,\n g: 0,\n b: 0\n };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n if (_typeof(color) == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n a = boundAlpha(a);\n return {\n ok: ok,\n format: color.format || format,\n r: Math.min(255, Math.max(rgb.r, 0)),\n g: Math.min(255, Math.max(rgb.g, 0)),\n b: Math.min(255, Math.max(rgb.b, 0)),\n a: a\n };\n}\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// \n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// \n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b) {\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n if (max == min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h,\n s: s,\n l: l\n };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n var r, g, b;\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n v = max;\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n if (max == min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h,\n s: s,\n v: v\n };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hsvToRgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n}\n\n// `rgbToHex`\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n return hex.join(\"\");\n}\n\n// `rgbaToHex`\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16)), pad2(convertDecimalToHex(a))];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n return hex.join(\"\");\n}\n\n// `rgbaToArgbHex`\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n var hex = [pad2(convertDecimalToHex(a)), pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n return hex.join(\"\");\n}\n\n// `equals`\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) return false;\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\ntinycolor.random = function () {\n return tinycolor.fromRatio({\n r: Math.random(),\n g: Math.random(),\n b: Math.random()\n });\n};\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// \n\nfunction _desaturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\nfunction _saturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\nfunction _greyscale(color) {\n return tinycolor(color).desaturate(100);\n}\nfunction _lighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\nfunction _brighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var rgb = tinycolor(color).toRgb();\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n return tinycolor(rgb);\n}\nfunction _darken(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction _spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// \n\nfunction _complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n}\nfunction polyad(color, number) {\n if (isNaN(number) || number <= 0) {\n throw new Error(\"Argument to polyad must be a positive number\");\n }\n var hsl = tinycolor(color).toHsl();\n var result = [tinycolor(color)];\n var step = 360 / number;\n for (var i = 1; i < number; i++) {\n result.push(tinycolor({\n h: (hsl.h + i * step) % 360,\n s: hsl.s,\n l: hsl.l\n }));\n }\n return result;\n}\nfunction _splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [tinycolor(color), tinycolor({\n h: (h + 72) % 360,\n s: hsl.s,\n l: hsl.l\n }), tinycolor({\n h: (h + 216) % 360,\n s: hsl.s,\n l: hsl.l\n })];\n}\nfunction _analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results;) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n}\nfunction _monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h,\n s = hsv.s,\n v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n while (results--) {\n ret.push(tinycolor({\n h: h,\n s: s,\n v: v\n }));\n v = (v + modification) % 1;\n }\n return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function (color1, color2, amount) {\n amount = amount === 0 ? 0 : amount || 50;\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n var p = amount / 100;\n var rgba = {\n r: (rgb2.r - rgb1.r) * p + rgb1.r,\n g: (rgb2.g - rgb1.g) * p + rgb1.g,\n b: (rgb2.b - rgb1.b) * p + rgb1.b,\n a: (rgb2.a - rgb1.a) * p + rgb1.a\n };\n return tinycolor(rgba);\n};\n\n// Readability Functions\n// ---------------------\n// false\n// tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function (color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n out = false;\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n};\n\n// `mostReadable`\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function (baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors;\n level = args.level;\n size = args.size;\n for (var i = 0; i < colorList.length; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n if (tinycolor.isReadable(baseColor, bestColor, {\n level: level,\n size: size\n }) || !includeFallbackColors) {\n return bestColor;\n } else {\n args.includeFallbackColors = false;\n return tinycolor.mostReadable(baseColor, [\"#fff\", \"#000\"], args);\n }\n};\n\n// Big List of Colors\n// ------------------\n// \nvar names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via `hexNames[hex]`\nvar hexNames = tinycolor.hexNames = flip(names);\n\n// Utilities\n// ---------\n\n// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\nfunction flip(o) {\n var flipped = {};\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n a = parseFloat(a);\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n if (isOnePointZero(n)) n = \"100%\";\n var processPercent = isPercentage(n);\n n = Math.min(max, Math.max(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return n % max / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n return Math.min(1, Math.max(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// \nfunction isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf(\".\") != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n return typeof n === \"string\" && n.indexOf(\"%\") != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n return c.length == 1 ? \"0\" + c : \"\" + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n if (n <= 1) {\n n = n * 100 + \"%\";\n }\n return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n return parseIntFromHex(h) / 255;\n}\nvar matchers = function () {\n // \n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // \n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n}();\n\n// `isValidCSSUnit`\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see `matchers` above for definition).\nfunction isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n}\n\n// `stringInputToObject`\n// Permissive string parsing. Take in a number of formats, and output an object\n// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n color = color.replace(trimLeft, \"\").replace(trimRight, \"\").toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n } else if (color == \"transparent\") {\n return {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n format: \"name\"\n };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if (match = matchers.rgb.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3]\n };\n }\n if (match = matchers.rgba.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hsl.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3]\n };\n }\n if (match = matchers.hsla.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hsv.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3]\n };\n }\n if (match = matchers.hsva.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hex8.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if (match = matchers.hex6.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if (match = matchers.hex4.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n a: convertHexToDecimal(match[4] + \"\" + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if (match = matchers.hex3.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n return false;\n}\nfunction validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\n level: \"AA\",\n size: \"small\"\n };\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\n level: level,\n size: size\n };\n}\n\nexport { tinycolor as default };\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React, { Component, PureComponent } from 'react';\nimport debounce from 'lodash/debounce';\nimport * as color from '../../helpers/color';\nexport var ColorWrap = function ColorWrap(Picker) {\n var ColorPicker = /*#__PURE__*/function (_ref) {\n _inherits(ColorPicker, _ref);\n var _super = _createSuper(ColorPicker);\n function ColorPicker(props) {\n var _this;\n _classCallCheck(this, ColorPicker);\n _this = _super.call(this);\n _this.handleChange = function (data, event) {\n var isValidColor = color.simpleCheckForValidColor(data);\n if (isValidColor) {\n var colors = color.toState(data, data.h || _this.state.oldHue);\n _this.setState(colors);\n _this.props.onChangeComplete && _this.debounce(_this.props.onChangeComplete, colors, event);\n _this.props.onChange && _this.props.onChange(colors, event);\n }\n };\n _this.handleSwatchHover = function (data, event) {\n var isValidColor = color.simpleCheckForValidColor(data);\n if (isValidColor) {\n var colors = color.toState(data, data.h || _this.state.oldHue);\n _this.props.onSwatchHover && _this.props.onSwatchHover(colors, event);\n }\n };\n _this.state = _objectSpread({}, color.toState(props.color, 0));\n _this.debounce = debounce(function (fn, data, event) {\n fn(data, event);\n }, 100);\n return _this;\n }\n _createClass(ColorPicker, [{\n key: \"render\",\n value: function render() {\n var optionalEvents = {};\n if (this.props.onSwatchHover) {\n optionalEvents.onSwatchHover = this.handleSwatchHover;\n }\n return /*#__PURE__*/React.createElement(Picker, _extends({}, this.props, this.state, {\n onChange: this.handleChange\n }, optionalEvents));\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, state) {\n return _objectSpread({}, color.toState(nextProps.color, state.oldHue));\n }\n }]);\n return ColorPicker;\n }(PureComponent || Component);\n ColorPicker.propTypes = _objectSpread({}, Picker.propTypes);\n ColorPicker.defaultProps = _objectSpread(_objectSpread({}, Picker.defaultProps), {}, {\n color: {\n h: 250,\n s: 0.5,\n l: 0.2,\n a: 1\n }\n });\n return ColorPicker;\n};\nexport default ColorWrap;","import { SEARCH_MARK } from \"../hooks/useSearchOptions\";\nexport var VALUE_SPLIT = '__RC_CASCADER_SPLIT__';\nexport var SHOW_PARENT = 'SHOW_PARENT';\nexport var SHOW_CHILD = 'SHOW_CHILD';\n\n/**\n * Will convert value to string, and join with `VALUE_SPLIT`\n */\nexport function toPathKey(value) {\n return value.join(VALUE_SPLIT);\n}\n\n/**\n * Batch convert value to string, and join with `VALUE_SPLIT`\n */\nexport function toPathKeys(value) {\n return value.map(toPathKey);\n}\nexport function toPathValueStr(pathKey) {\n return pathKey.split(VALUE_SPLIT);\n}\nexport function fillFieldNames(fieldNames) {\n var _ref = fieldNames || {},\n label = _ref.label,\n value = _ref.value,\n children = _ref.children;\n var val = value || 'value';\n return {\n label: label || 'label',\n value: val,\n key: val,\n children: children || 'children'\n };\n}\nexport function isLeaf(option, fieldNames) {\n var _option$isLeaf, _option;\n return (_option$isLeaf = option.isLeaf) !== null && _option$isLeaf !== void 0 ? _option$isLeaf : !((_option = option[fieldNames.children]) !== null && _option !== void 0 && _option.length);\n}\nexport function scrollIntoParentView(element) {\n var parent = element.parentElement;\n if (!parent) {\n return;\n }\n var elementToParent = element.offsetTop - parent.offsetTop; // offsetParent may not be parent.\n if (elementToParent - parent.scrollTop < 0) {\n parent.scrollTo({\n top: elementToParent\n });\n } else if (elementToParent + element.offsetHeight - parent.scrollTop > parent.offsetHeight) {\n parent.scrollTo({\n top: elementToParent + element.offsetHeight - parent.offsetHeight\n });\n }\n}\nexport function getFullPathKeys(options, fieldNames) {\n return options.map(function (item) {\n var _item$SEARCH_MARK;\n return (_item$SEARCH_MARK = item[SEARCH_MARK]) === null || _item$SEARCH_MARK === void 0 ? void 0 : _item$SEARCH_MARK.map(function (opt) {\n return opt[fieldNames.value];\n });\n });\n}\nfunction isMultipleValue(value) {\n return Array.isArray(value) && Array.isArray(value[0]);\n}\nexport function toRawValues(value) {\n if (!value) {\n return [];\n }\n if (isMultipleValue(value)) {\n return value;\n }\n return (value.length === 0 ? [] : [value]).map(function (val) {\n return Array.isArray(val) ? val : [val];\n });\n}","import { SHOW_CHILD } from \"./commonUtil\";\nexport function formatStrategyValues(pathKeys, getKeyPathEntities, showCheckedStrategy) {\n var valueSet = new Set(pathKeys);\n var keyPathEntities = getKeyPathEntities();\n return pathKeys.filter(function (key) {\n var entity = keyPathEntities[key];\n var parent = entity ? entity.parent : null;\n var children = entity ? entity.children : null;\n if (entity && entity.node.disabled) {\n return true;\n }\n return showCheckedStrategy === SHOW_CHILD ? !(children && children.some(function (child) {\n return child.key && valueSet.has(child.key);\n })) : !(parent && !parent.node.disabled && valueSet.has(parent.key));\n });\n}\nexport function toPathOptions(valueCells, options, fieldNames) {\n var stringMode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var currentList = options;\n var valueOptions = [];\n var _loop = function _loop() {\n var _currentList, _currentList2, _foundOption$fieldNam;\n var valueCell = valueCells[i];\n var foundIndex = (_currentList = currentList) === null || _currentList === void 0 ? void 0 : _currentList.findIndex(function (option) {\n var val = option[fieldNames.value];\n return stringMode ? String(val) === String(valueCell) : val === valueCell;\n });\n var foundOption = foundIndex !== -1 ? (_currentList2 = currentList) === null || _currentList2 === void 0 ? void 0 : _currentList2[foundIndex] : null;\n valueOptions.push({\n value: (_foundOption$fieldNam = foundOption === null || foundOption === void 0 ? void 0 : foundOption[fieldNames.value]) !== null && _foundOption$fieldNam !== void 0 ? _foundOption$fieldNam : valueCell,\n index: foundIndex,\n option: foundOption\n });\n currentList = foundOption === null || foundOption === void 0 ? void 0 : foundOption[fieldNames.children];\n };\n for (var i = 0; i < valueCells.length; i += 1) {\n _loop();\n }\n return valueOptions;\n}","import * as React from 'react';\nimport { toPathOptions } from \"../utils/treeUtil\";\nexport default function useMissingValues(options, fieldNames) {\n return React.useCallback(function (rawValues) {\n var missingValues = [];\n var existsValues = [];\n rawValues.forEach(function (valueCell) {\n var pathOptions = toPathOptions(valueCell, options, fieldNames);\n if (pathOptions.every(function (opt) {\n return opt.option;\n })) {\n existsValues.push(valueCell);\n } else {\n missingValues.push(valueCell);\n }\n });\n return [existsValues, missingValues];\n }, [options, fieldNames]);\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nimport { convertDataToEntities } from \"rc-tree/es/utils/treeUtil\";\nimport { VALUE_SPLIT } from \"../utils/commonUtil\";\n/** Lazy parse options data into conduct-able info to avoid perf issue in single mode */\nexport default (function (options, fieldNames) {\n var cacheRef = React.useRef({\n options: [],\n info: {\n keyEntities: {},\n pathKeyEntities: {}\n }\n });\n var getEntities = React.useCallback(function () {\n if (cacheRef.current.options !== options) {\n cacheRef.current.options = options;\n cacheRef.current.info = convertDataToEntities(options, {\n fieldNames: fieldNames,\n initWrapper: function initWrapper(wrapper) {\n return _objectSpread(_objectSpread({}, wrapper), {}, {\n pathKeyEntities: {}\n });\n },\n processEntity: function processEntity(entity, wrapper) {\n var pathKey = entity.nodes.map(function (node) {\n return node[fieldNames.value];\n }).join(VALUE_SPLIT);\n wrapper.pathKeyEntities[pathKey] = entity;\n\n // Overwrite origin key.\n // this is very hack but we need let conduct logic work with connect path\n entity.key = pathKey;\n }\n });\n }\n return cacheRef.current.info.pathKeyEntities;\n }, [fieldNames, options]);\n return getEntities;\n});","import * as React from 'react';\nimport useEntities from \"./useEntities\";\nexport default function useOptions(mergedFieldNames, options) {\n var mergedOptions = React.useMemo(function () {\n return options || [];\n }, [options]);\n\n // Only used in multiple mode, this fn will not call in single mode\n var getPathKeyEntities = useEntities(mergedOptions, mergedFieldNames);\n\n /** Convert path key back to value format */\n var getValueByKeyPath = React.useCallback(function (pathKeys) {\n var keyPathEntities = getPathKeyEntities();\n return pathKeys.map(function (pathKey) {\n var nodes = keyPathEntities[pathKey].nodes;\n return nodes.map(function (node) {\n return node[mergedFieldNames.value];\n });\n });\n }, [getPathKeyEntities, mergedFieldNames]);\n return [mergedOptions, getPathKeyEntities, getValueByKeyPath];\n}","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport { conductCheck } from \"rc-tree/es/utils/conductUtil\";\nimport { toPathKey, toPathKeys } from \"../utils/commonUtil\";\nimport { formatStrategyValues } from \"../utils/treeUtil\";\nexport default function useSelect(multiple, triggerChange, checkedValues, halfCheckedValues, missingCheckedValues, getPathKeyEntities, getValueByKeyPath, showCheckedStrategy) {\n return function (valuePath) {\n if (!multiple) {\n triggerChange(valuePath);\n } else {\n // Prepare conduct required info\n var pathKey = toPathKey(valuePath);\n var checkedPathKeys = toPathKeys(checkedValues);\n var halfCheckedPathKeys = toPathKeys(halfCheckedValues);\n var existInChecked = checkedPathKeys.includes(pathKey);\n var existInMissing = missingCheckedValues.some(function (valueCells) {\n return toPathKey(valueCells) === pathKey;\n });\n\n // Do update\n var nextCheckedValues = checkedValues;\n var nextMissingValues = missingCheckedValues;\n if (existInMissing && !existInChecked) {\n // Missing value only do filter\n nextMissingValues = missingCheckedValues.filter(function (valueCells) {\n return toPathKey(valueCells) !== pathKey;\n });\n } else {\n // Update checked key first\n var nextRawCheckedKeys = existInChecked ? checkedPathKeys.filter(function (key) {\n return key !== pathKey;\n }) : [].concat(_toConsumableArray(checkedPathKeys), [pathKey]);\n var pathKeyEntities = getPathKeyEntities();\n\n // Conduction by selected or not\n var checkedKeys;\n if (existInChecked) {\n var _conductCheck = conductCheck(nextRawCheckedKeys, {\n checked: false,\n halfCheckedKeys: halfCheckedPathKeys\n }, pathKeyEntities);\n checkedKeys = _conductCheck.checkedKeys;\n } else {\n var _conductCheck2 = conductCheck(nextRawCheckedKeys, true, pathKeyEntities);\n checkedKeys = _conductCheck2.checkedKeys;\n }\n\n // Roll up to parent level keys\n var deDuplicatedKeys = formatStrategyValues(checkedKeys, getPathKeyEntities, showCheckedStrategy);\n nextCheckedValues = getValueByKeyPath(deDuplicatedKeys);\n }\n triggerChange([].concat(_toConsumableArray(nextMissingValues), _toConsumableArray(nextCheckedValues)));\n }\n };\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { conductCheck } from \"rc-tree/es/utils/conductUtil\";\nimport * as React from 'react';\nimport { toPathKeys } from \"../utils/commonUtil\";\nexport default function useValues(multiple, rawValues, getPathKeyEntities, getValueByKeyPath, getMissingValues) {\n // Fill `rawValues` with checked conduction values\n return React.useMemo(function () {\n var _getMissingValues = getMissingValues(rawValues),\n _getMissingValues2 = _slicedToArray(_getMissingValues, 2),\n existValues = _getMissingValues2[0],\n missingValues = _getMissingValues2[1];\n if (!multiple || !rawValues.length) {\n return [existValues, [], missingValues];\n }\n var keyPathValues = toPathKeys(existValues);\n var keyPathEntities = getPathKeyEntities();\n var _conductCheck = conductCheck(keyPathValues, true, keyPathEntities),\n checkedKeys = _conductCheck.checkedKeys,\n halfCheckedKeys = _conductCheck.halfCheckedKeys;\n\n // Convert key back to value cells\n return [getValueByKeyPath(checkedKeys), getValueByKeyPath(halfCheckedKeys), missingValues];\n }, [multiple, rawValues, getPathKeyEntities, getValueByKeyPath, getMissingValues]);\n}","import * as React from 'react';\nvar CacheContent = /*#__PURE__*/React.memo(function (_ref) {\n var children = _ref.children;\n return children;\n}, function (_, next) {\n return !next.open;\n});\nif (process.env.NODE_ENV !== 'production') {\n CacheContent.displayName = 'CacheContent';\n}\nexport default CacheContent;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport CascaderContext from \"../context\";\nexport default function Checkbox(_ref) {\n var _classNames;\n var prefixCls = _ref.prefixCls,\n checked = _ref.checked,\n halfChecked = _ref.halfChecked,\n disabled = _ref.disabled,\n onClick = _ref.onClick,\n disableCheckbox = _ref.disableCheckbox;\n var _React$useContext = React.useContext(CascaderContext),\n checkable = _React$useContext.checkable;\n var customCheckbox = typeof checkable !== 'boolean' ? checkable : null;\n return /*#__PURE__*/React.createElement(\"span\", {\n className: classNames(\"\".concat(prefixCls), (_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-checked\"), checked), _defineProperty(_classNames, \"\".concat(prefixCls, \"-indeterminate\"), !checked && halfChecked), _defineProperty(_classNames, \"\".concat(prefixCls, \"-disabled\"), disabled || disableCheckbox), _classNames)),\n onClick: onClick\n }, customCheckbox);\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport CascaderContext from \"../context\";\nimport { SEARCH_MARK } from \"../hooks/useSearchOptions\";\nimport { isLeaf, toPathKey } from \"../utils/commonUtil\";\nimport Checkbox from \"./Checkbox\";\nexport var FIX_LABEL = '__cascader_fix_label__';\nexport default function Column(_ref) {\n var prefixCls = _ref.prefixCls,\n multiple = _ref.multiple,\n options = _ref.options,\n activeValue = _ref.activeValue,\n prevValuePath = _ref.prevValuePath,\n onToggleOpen = _ref.onToggleOpen,\n onSelect = _ref.onSelect,\n onActive = _ref.onActive,\n checkedSet = _ref.checkedSet,\n halfCheckedSet = _ref.halfCheckedSet,\n loadingKeys = _ref.loadingKeys,\n isSelectable = _ref.isSelectable,\n propsDisabled = _ref.disabled;\n var menuPrefixCls = \"\".concat(prefixCls, \"-menu\");\n var menuItemPrefixCls = \"\".concat(prefixCls, \"-menu-item\");\n var _React$useContext = React.useContext(CascaderContext),\n fieldNames = _React$useContext.fieldNames,\n changeOnSelect = _React$useContext.changeOnSelect,\n expandTrigger = _React$useContext.expandTrigger,\n expandIcon = _React$useContext.expandIcon,\n loadingIcon = _React$useContext.loadingIcon,\n dropdownMenuColumnStyle = _React$useContext.dropdownMenuColumnStyle,\n optionRender = _React$useContext.optionRender;\n var hoverOpen = expandTrigger === 'hover';\n var isOptionDisabled = function isOptionDisabled(disabled) {\n return propsDisabled || disabled;\n };\n\n // ============================ Option ============================\n var optionInfoList = React.useMemo(function () {\n return options.map(function (option) {\n var _option$FIX_LABEL;\n var disabled = option.disabled,\n disableCheckbox = option.disableCheckbox;\n var searchOptions = option[SEARCH_MARK];\n var label = (_option$FIX_LABEL = option[FIX_LABEL]) !== null && _option$FIX_LABEL !== void 0 ? _option$FIX_LABEL : option[fieldNames.label];\n var value = option[fieldNames.value];\n var isMergedLeaf = isLeaf(option, fieldNames);\n\n // Get real value of option. Search option is different way.\n var fullPath = searchOptions ? searchOptions.map(function (opt) {\n return opt[fieldNames.value];\n }) : [].concat(_toConsumableArray(prevValuePath), [value]);\n var fullPathKey = toPathKey(fullPath);\n var isLoading = loadingKeys.includes(fullPathKey);\n\n // >>>>> checked\n var checked = checkedSet.has(fullPathKey);\n\n // >>>>> halfChecked\n var halfChecked = halfCheckedSet.has(fullPathKey);\n return {\n disabled: disabled,\n label: label,\n value: value,\n isLeaf: isMergedLeaf,\n isLoading: isLoading,\n checked: checked,\n halfChecked: halfChecked,\n option: option,\n disableCheckbox: disableCheckbox,\n fullPath: fullPath,\n fullPathKey: fullPathKey\n };\n });\n }, [options, checkedSet, fieldNames, halfCheckedSet, loadingKeys, prevValuePath]);\n\n // ============================ Render ============================\n return /*#__PURE__*/React.createElement(\"ul\", {\n className: menuPrefixCls,\n role: \"menu\"\n }, optionInfoList.map(function (_ref2) {\n var _classNames;\n var disabled = _ref2.disabled,\n label = _ref2.label,\n value = _ref2.value,\n isMergedLeaf = _ref2.isLeaf,\n isLoading = _ref2.isLoading,\n checked = _ref2.checked,\n halfChecked = _ref2.halfChecked,\n option = _ref2.option,\n fullPath = _ref2.fullPath,\n fullPathKey = _ref2.fullPathKey,\n disableCheckbox = _ref2.disableCheckbox;\n // >>>>> Open\n var triggerOpenPath = function triggerOpenPath() {\n if (isOptionDisabled(disabled)) {\n return;\n }\n var nextValueCells = _toConsumableArray(fullPath);\n if (hoverOpen && isMergedLeaf) {\n nextValueCells.pop();\n }\n onActive(nextValueCells);\n };\n\n // >>>>> Selection\n var triggerSelect = function triggerSelect() {\n if (isSelectable(option) && !isOptionDisabled(disabled)) {\n onSelect(fullPath, isMergedLeaf);\n }\n };\n\n // >>>>> Title\n var title;\n if (typeof option.title === 'string') {\n title = option.title;\n } else if (typeof label === 'string') {\n title = label;\n }\n\n // >>>>> Render\n return /*#__PURE__*/React.createElement(\"li\", {\n key: fullPathKey,\n className: classNames(menuItemPrefixCls, (_classNames = {}, _defineProperty(_classNames, \"\".concat(menuItemPrefixCls, \"-expand\"), !isMergedLeaf), _defineProperty(_classNames, \"\".concat(menuItemPrefixCls, \"-active\"), activeValue === value || activeValue === fullPathKey), _defineProperty(_classNames, \"\".concat(menuItemPrefixCls, \"-disabled\"), isOptionDisabled(disabled)), _defineProperty(_classNames, \"\".concat(menuItemPrefixCls, \"-loading\"), isLoading), _classNames)),\n style: dropdownMenuColumnStyle,\n role: \"menuitemcheckbox\",\n title: title,\n \"aria-checked\": checked,\n \"data-path-key\": fullPathKey,\n onClick: function onClick() {\n triggerOpenPath();\n if (disableCheckbox) {\n return;\n }\n if (!multiple || isMergedLeaf) {\n triggerSelect();\n }\n },\n onDoubleClick: function onDoubleClick() {\n if (changeOnSelect) {\n onToggleOpen(false);\n }\n },\n onMouseEnter: function onMouseEnter() {\n if (hoverOpen) {\n triggerOpenPath();\n }\n },\n onMouseDown: function onMouseDown(e) {\n // Prevent selector from blurring\n e.preventDefault();\n }\n }, multiple && /*#__PURE__*/React.createElement(Checkbox, {\n prefixCls: \"\".concat(prefixCls, \"-checkbox\"),\n checked: checked,\n halfChecked: halfChecked,\n disabled: isOptionDisabled(disabled) || disableCheckbox,\n disableCheckbox: disableCheckbox,\n onClick: function onClick(e) {\n if (disableCheckbox) {\n return;\n }\n e.stopPropagation();\n triggerSelect();\n }\n }), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(menuItemPrefixCls, \"-content\")\n }, optionRender ? optionRender(option) : label), !isLoading && expandIcon && !isMergedLeaf && /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(menuItemPrefixCls, \"-expand-icon\")\n }, expandIcon), isLoading && loadingIcon && /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(menuItemPrefixCls, \"-loading-icon\")\n }, loadingIcon));\n }));\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport CascaderContext from \"../context\";\n\n/**\n * Control the active open options path.\n */\nvar useActive = function useActive(multiple, open) {\n var _React$useContext = React.useContext(CascaderContext),\n values = _React$useContext.values;\n var firstValueCells = values[0];\n\n // Record current dropdown active options\n // This also control the open status\n var _React$useState = React.useState([]),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n activeValueCells = _React$useState2[0],\n setActiveValueCells = _React$useState2[1];\n React.useEffect(function () {\n if (!multiple) {\n setActiveValueCells(firstValueCells || []);\n }\n }, /* eslint-disable react-hooks/exhaustive-deps */\n [open, firstValueCells]\n /* eslint-enable react-hooks/exhaustive-deps */);\n\n return [activeValueCells, setActiveValueCells];\n};\nexport default useActive;","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport * as React from 'react';\nimport { SEARCH_MARK } from \"../hooks/useSearchOptions\";\nimport { getFullPathKeys, toPathKey } from \"../utils/commonUtil\";\nexport default (function (ref, options, fieldNames, activeValueCells, setActiveValueCells, onKeyBoardSelect, contextProps) {\n var direction = contextProps.direction,\n searchValue = contextProps.searchValue,\n toggleOpen = contextProps.toggleOpen,\n open = contextProps.open;\n var rtl = direction === 'rtl';\n var _React$useMemo = React.useMemo(function () {\n var activeIndex = -1;\n var currentOptions = options;\n var mergedActiveIndexes = [];\n var mergedActiveValueCells = [];\n var len = activeValueCells.length;\n var pathKeys = getFullPathKeys(options, fieldNames);\n\n // Fill validate active value cells and index\n var _loop = function _loop(i) {\n // Mark the active index for current options\n var nextActiveIndex = currentOptions.findIndex(function (option, index) {\n return (pathKeys[index] ? toPathKey(pathKeys[index]) : option[fieldNames.value]) === activeValueCells[i];\n });\n if (nextActiveIndex === -1) {\n return 1; // break\n }\n activeIndex = nextActiveIndex;\n mergedActiveIndexes.push(activeIndex);\n mergedActiveValueCells.push(activeValueCells[i]);\n currentOptions = currentOptions[activeIndex][fieldNames.children];\n };\n for (var i = 0; i < len && currentOptions; i += 1) {\n if (_loop(i)) break;\n }\n\n // Fill last active options\n var activeOptions = options;\n for (var _i = 0; _i < mergedActiveIndexes.length - 1; _i += 1) {\n activeOptions = activeOptions[mergedActiveIndexes[_i]][fieldNames.children];\n }\n return [mergedActiveValueCells, activeIndex, activeOptions, pathKeys];\n }, [activeValueCells, fieldNames, options]),\n _React$useMemo2 = _slicedToArray(_React$useMemo, 4),\n validActiveValueCells = _React$useMemo2[0],\n lastActiveIndex = _React$useMemo2[1],\n lastActiveOptions = _React$useMemo2[2],\n fullPathKeys = _React$useMemo2[3];\n\n // Update active value cells and scroll to target element\n var internalSetActiveValueCells = function internalSetActiveValueCells(next) {\n setActiveValueCells(next);\n };\n\n // Same options offset\n var offsetActiveOption = function offsetActiveOption(offset) {\n var len = lastActiveOptions.length;\n var currentIndex = lastActiveIndex;\n if (currentIndex === -1 && offset < 0) {\n currentIndex = len;\n }\n for (var i = 0; i < len; i += 1) {\n currentIndex = (currentIndex + offset + len) % len;\n var _option = lastActiveOptions[currentIndex];\n if (_option && !_option.disabled) {\n var nextActiveCells = validActiveValueCells.slice(0, -1).concat(fullPathKeys[currentIndex] ? toPathKey(fullPathKeys[currentIndex]) : _option[fieldNames.value]);\n internalSetActiveValueCells(nextActiveCells);\n return;\n }\n }\n };\n\n // Different options offset\n var prevColumn = function prevColumn() {\n if (validActiveValueCells.length > 1) {\n var nextActiveCells = validActiveValueCells.slice(0, -1);\n internalSetActiveValueCells(nextActiveCells);\n } else {\n toggleOpen(false);\n }\n };\n var nextColumn = function nextColumn() {\n var _lastActiveOptions$la;\n var nextOptions = ((_lastActiveOptions$la = lastActiveOptions[lastActiveIndex]) === null || _lastActiveOptions$la === void 0 ? void 0 : _lastActiveOptions$la[fieldNames.children]) || [];\n var nextOption = nextOptions.find(function (option) {\n return !option.disabled;\n });\n if (nextOption) {\n var nextActiveCells = [].concat(_toConsumableArray(validActiveValueCells), [nextOption[fieldNames.value]]);\n internalSetActiveValueCells(nextActiveCells);\n }\n };\n React.useImperativeHandle(ref, function () {\n return {\n // scrollTo: treeRef.current?.scrollTo,\n onKeyDown: function onKeyDown(event) {\n var which = event.which;\n switch (which) {\n // >>> Arrow keys\n case KeyCode.UP:\n case KeyCode.DOWN:\n {\n var offset = 0;\n if (which === KeyCode.UP) {\n offset = -1;\n } else if (which === KeyCode.DOWN) {\n offset = 1;\n }\n if (offset !== 0) {\n offsetActiveOption(offset);\n }\n break;\n }\n case KeyCode.LEFT:\n {\n if (searchValue) {\n break;\n }\n if (rtl) {\n nextColumn();\n } else {\n prevColumn();\n }\n break;\n }\n case KeyCode.RIGHT:\n {\n if (searchValue) {\n break;\n }\n if (rtl) {\n prevColumn();\n } else {\n nextColumn();\n }\n break;\n }\n case KeyCode.BACKSPACE:\n {\n if (!searchValue) {\n prevColumn();\n }\n break;\n }\n\n // >>> Select\n case KeyCode.ENTER:\n {\n if (validActiveValueCells.length) {\n var _option2 = lastActiveOptions[lastActiveIndex];\n\n // Search option should revert back of origin options\n var originOptions = (_option2 === null || _option2 === void 0 ? void 0 : _option2[SEARCH_MARK]) || [];\n if (originOptions.length) {\n onKeyBoardSelect(originOptions.map(function (opt) {\n return opt[fieldNames.value];\n }), originOptions[originOptions.length - 1]);\n } else {\n onKeyBoardSelect(validActiveValueCells, lastActiveOptions[lastActiveIndex]);\n }\n }\n break;\n }\n\n // >>> Close\n case KeyCode.ESC:\n {\n toggleOpen(false);\n if (open) {\n event.stopPropagation();\n }\n }\n }\n },\n onKeyUp: function onKeyUp() {}\n };\n });\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\n/* eslint-disable default-case */\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport CascaderContext from \"../context\";\nimport { getFullPathKeys, isLeaf, scrollIntoParentView, toPathKey, toPathKeys, toPathValueStr } from \"../utils/commonUtil\";\nimport { toPathOptions } from \"../utils/treeUtil\";\nimport CacheContent from \"./CacheContent\";\nimport Column, { FIX_LABEL } from \"./Column\";\nimport useActive from \"./useActive\";\nimport useKeyboard from \"./useKeyboard\";\nvar RawOptionList = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var _optionColumns$, _ref3, _classNames;\n var prefixCls = props.prefixCls,\n multiple = props.multiple,\n searchValue = props.searchValue,\n toggleOpen = props.toggleOpen,\n notFoundContent = props.notFoundContent,\n direction = props.direction,\n open = props.open,\n disabled = props.disabled;\n var containerRef = React.useRef(null);\n var rtl = direction === 'rtl';\n var _React$useContext = React.useContext(CascaderContext),\n options = _React$useContext.options,\n values = _React$useContext.values,\n halfValues = _React$useContext.halfValues,\n fieldNames = _React$useContext.fieldNames,\n changeOnSelect = _React$useContext.changeOnSelect,\n onSelect = _React$useContext.onSelect,\n searchOptions = _React$useContext.searchOptions,\n dropdownPrefixCls = _React$useContext.dropdownPrefixCls,\n loadData = _React$useContext.loadData,\n expandTrigger = _React$useContext.expandTrigger;\n var mergedPrefixCls = dropdownPrefixCls || prefixCls;\n\n // ========================= loadData =========================\n var _React$useState = React.useState([]),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n loadingKeys = _React$useState2[0],\n setLoadingKeys = _React$useState2[1];\n var internalLoadData = function internalLoadData(valueCells) {\n // Do not load when search\n if (!loadData || searchValue) {\n return;\n }\n var optionList = toPathOptions(valueCells, options, fieldNames);\n var rawOptions = optionList.map(function (_ref) {\n var option = _ref.option;\n return option;\n });\n var lastOption = rawOptions[rawOptions.length - 1];\n if (lastOption && !isLeaf(lastOption, fieldNames)) {\n var pathKey = toPathKey(valueCells);\n setLoadingKeys(function (keys) {\n return [].concat(_toConsumableArray(keys), [pathKey]);\n });\n loadData(rawOptions);\n }\n };\n\n // zombieJ: This is bad. We should make this same as `rc-tree` to use Promise instead.\n React.useEffect(function () {\n if (loadingKeys.length) {\n loadingKeys.forEach(function (loadingKey) {\n var valueStrCells = toPathValueStr(loadingKey);\n var optionList = toPathOptions(valueStrCells, options, fieldNames, true).map(function (_ref2) {\n var option = _ref2.option;\n return option;\n });\n var lastOption = optionList[optionList.length - 1];\n if (!lastOption || lastOption[fieldNames.children] || isLeaf(lastOption, fieldNames)) {\n setLoadingKeys(function (keys) {\n return keys.filter(function (key) {\n return key !== loadingKey;\n });\n });\n }\n });\n }\n }, [options, loadingKeys, fieldNames]);\n\n // ========================== Values ==========================\n var checkedSet = React.useMemo(function () {\n return new Set(toPathKeys(values));\n }, [values]);\n var halfCheckedSet = React.useMemo(function () {\n return new Set(toPathKeys(halfValues));\n }, [halfValues]);\n\n // ====================== Accessibility =======================\n var _useActive = useActive(multiple, open),\n _useActive2 = _slicedToArray(_useActive, 2),\n activeValueCells = _useActive2[0],\n setActiveValueCells = _useActive2[1];\n\n // =========================== Path ===========================\n var onPathOpen = function onPathOpen(nextValueCells) {\n setActiveValueCells(nextValueCells);\n\n // Trigger loadData\n internalLoadData(nextValueCells);\n };\n var isSelectable = function isSelectable(option) {\n if (disabled) {\n return false;\n }\n var optionDisabled = option.disabled;\n var isMergedLeaf = isLeaf(option, fieldNames);\n return !optionDisabled && (isMergedLeaf || changeOnSelect || multiple);\n };\n var onPathSelect = function onPathSelect(valuePath, leaf) {\n var fromKeyboard = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n onSelect(valuePath);\n if (!multiple && (leaf || changeOnSelect && (expandTrigger === 'hover' || fromKeyboard))) {\n toggleOpen(false);\n }\n };\n\n // ========================== Option ==========================\n var mergedOptions = React.useMemo(function () {\n if (searchValue) {\n return searchOptions;\n }\n return options;\n }, [searchValue, searchOptions, options]);\n\n // ========================== Column ==========================\n var optionColumns = React.useMemo(function () {\n var optionList = [{\n options: mergedOptions\n }];\n var currentList = mergedOptions;\n var fullPathKeys = getFullPathKeys(currentList, fieldNames);\n var _loop = function _loop() {\n var activeValueCell = activeValueCells[i];\n var currentOption = currentList.find(function (option, index) {\n return (fullPathKeys[index] ? toPathKey(fullPathKeys[index]) : option[fieldNames.value]) === activeValueCell;\n });\n var subOptions = currentOption === null || currentOption === void 0 ? void 0 : currentOption[fieldNames.children];\n if (!(subOptions !== null && subOptions !== void 0 && subOptions.length)) {\n return 1; // break\n }\n currentList = subOptions;\n optionList.push({\n options: subOptions\n });\n };\n for (var i = 0; i < activeValueCells.length; i += 1) {\n if (_loop()) break;\n }\n return optionList;\n }, [mergedOptions, activeValueCells, fieldNames]);\n\n // ========================= Keyboard =========================\n var onKeyboardSelect = function onKeyboardSelect(selectValueCells, option) {\n if (isSelectable(option)) {\n onPathSelect(selectValueCells, isLeaf(option, fieldNames), true);\n }\n };\n useKeyboard(ref, mergedOptions, fieldNames, activeValueCells, onPathOpen, onKeyboardSelect, {\n direction: direction,\n searchValue: searchValue,\n toggleOpen: toggleOpen,\n open: open\n });\n\n // >>>>> Active Scroll\n React.useEffect(function () {\n if (searchValue) {\n return;\n }\n for (var i = 0; i < activeValueCells.length; i += 1) {\n var _containerRef$current;\n var cellPath = activeValueCells.slice(0, i + 1);\n var cellKeyPath = toPathKey(cellPath);\n var ele = (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.querySelector(\"li[data-path-key=\\\"\".concat(cellKeyPath.replace(/\\\\{0,2}\"/g, '\\\\\"'), \"\\\"]\") // matches unescaped double quotes\n );\n if (ele) {\n scrollIntoParentView(ele);\n }\n }\n }, [activeValueCells, searchValue]);\n\n // ========================== Render ==========================\n // >>>>> Empty\n var isEmpty = !((_optionColumns$ = optionColumns[0]) !== null && _optionColumns$ !== void 0 && (_optionColumns$ = _optionColumns$.options) !== null && _optionColumns$ !== void 0 && _optionColumns$.length);\n var emptyList = [(_ref3 = {}, _defineProperty(_ref3, fieldNames.value, '__EMPTY__'), _defineProperty(_ref3, FIX_LABEL, notFoundContent), _defineProperty(_ref3, \"disabled\", true), _ref3)];\n var columnProps = _objectSpread(_objectSpread({}, props), {}, {\n multiple: !isEmpty && multiple,\n onSelect: onPathSelect,\n onActive: onPathOpen,\n onToggleOpen: toggleOpen,\n checkedSet: checkedSet,\n halfCheckedSet: halfCheckedSet,\n loadingKeys: loadingKeys,\n isSelectable: isSelectable\n });\n\n // >>>>> Columns\n var mergedOptionColumns = isEmpty ? [{\n options: emptyList\n }] : optionColumns;\n var columnNodes = mergedOptionColumns.map(function (col, index) {\n var prevValuePath = activeValueCells.slice(0, index);\n var activeValue = activeValueCells[index];\n return /*#__PURE__*/React.createElement(Column, _extends({\n key: index\n }, columnProps, {\n prefixCls: mergedPrefixCls,\n options: col.options,\n prevValuePath: prevValuePath,\n activeValue: activeValue\n }));\n });\n\n // >>>>> Render\n return /*#__PURE__*/React.createElement(CacheContent, {\n open: open\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: classNames(\"\".concat(mergedPrefixCls, \"-menus\"), (_classNames = {}, _defineProperty(_classNames, \"\".concat(mergedPrefixCls, \"-menu-empty\"), isEmpty), _defineProperty(_classNames, \"\".concat(mergedPrefixCls, \"-rtl\"), rtl), _classNames)),\n ref: containerRef\n }, columnNodes));\n});\nif (process.env.NODE_ENV !== 'production') {\n RawOptionList.displayName = 'RawOptionList';\n}\nexport default RawOptionList;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { useBaseProps } from 'rc-select';\nimport * as React from 'react';\nimport RawOptionList from \"./List\";\nvar RefOptionList = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var baseProps = useBaseProps();\n\n // >>>>> Render\n return /*#__PURE__*/React.createElement(RawOptionList, _extends({}, props, baseProps, {\n ref: ref\n }));\n});\nexport default RefOptionList;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport classNames from 'classnames';\nimport { useEvent, useMergedState } from 'rc-util';\nimport * as React from 'react';\nimport CascaderContext from \"./context\";\nimport useMissingValues from \"./hooks/useMissingValues\";\nimport useOptions from \"./hooks/useOptions\";\nimport useSelect from \"./hooks/useSelect\";\nimport useValues from \"./hooks/useValues\";\nimport RawOptionList from \"./OptionList/List\";\nimport { fillFieldNames, toRawValues } from \"./utils/commonUtil\";\nimport { toPathOptions } from \"./utils/treeUtil\";\nfunction noop() {}\nexport default function Panel(props) {\n var _classNames;\n var _ref = props,\n _ref$prefixCls = _ref.prefixCls,\n prefixCls = _ref$prefixCls === void 0 ? 'rc-cascader' : _ref$prefixCls,\n style = _ref.style,\n className = _ref.className,\n options = _ref.options,\n checkable = _ref.checkable,\n defaultValue = _ref.defaultValue,\n value = _ref.value,\n fieldNames = _ref.fieldNames,\n changeOnSelect = _ref.changeOnSelect,\n onChange = _ref.onChange,\n showCheckedStrategy = _ref.showCheckedStrategy,\n loadData = _ref.loadData,\n expandTrigger = _ref.expandTrigger,\n _ref$expandIcon = _ref.expandIcon,\n expandIcon = _ref$expandIcon === void 0 ? '>' : _ref$expandIcon,\n loadingIcon = _ref.loadingIcon,\n direction = _ref.direction,\n _ref$notFoundContent = _ref.notFoundContent,\n notFoundContent = _ref$notFoundContent === void 0 ? 'Not Found' : _ref$notFoundContent,\n disabled = _ref.disabled;\n\n // ======================== Multiple ========================\n var multiple = !!checkable;\n\n // ========================= Values =========================\n var _useMergedState = useMergedState(defaultValue, {\n value: value,\n postState: toRawValues\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n rawValues = _useMergedState2[0],\n setRawValues = _useMergedState2[1];\n\n // ========================= FieldNames =========================\n var mergedFieldNames = React.useMemo(function () {\n return fillFieldNames(fieldNames);\n }, /* eslint-disable react-hooks/exhaustive-deps */\n [JSON.stringify(fieldNames)]\n /* eslint-enable react-hooks/exhaustive-deps */);\n\n // =========================== Option ===========================\n var _useOptions = useOptions(mergedFieldNames, options),\n _useOptions2 = _slicedToArray(_useOptions, 3),\n mergedOptions = _useOptions2[0],\n getPathKeyEntities = _useOptions2[1],\n getValueByKeyPath = _useOptions2[2];\n\n // ========================= Values =========================\n var getMissingValues = useMissingValues(mergedOptions, mergedFieldNames);\n\n // Fill `rawValues` with checked conduction values\n var _useValues = useValues(multiple, rawValues, getPathKeyEntities, getValueByKeyPath, getMissingValues),\n _useValues2 = _slicedToArray(_useValues, 3),\n checkedValues = _useValues2[0],\n halfCheckedValues = _useValues2[1],\n missingCheckedValues = _useValues2[2];\n\n // =========================== Change ===========================\n var triggerChange = useEvent(function (nextValues) {\n setRawValues(nextValues);\n\n // Save perf if no need trigger event\n if (onChange) {\n var nextRawValues = toRawValues(nextValues);\n var valueOptions = nextRawValues.map(function (valueCells) {\n return toPathOptions(valueCells, mergedOptions, mergedFieldNames).map(function (valueOpt) {\n return valueOpt.option;\n });\n });\n var triggerValues = multiple ? nextRawValues : nextRawValues[0];\n var triggerOptions = multiple ? valueOptions : valueOptions[0];\n onChange(triggerValues, triggerOptions);\n }\n });\n\n // =========================== Select ===========================\n var handleSelection = useSelect(multiple, triggerChange, checkedValues, halfCheckedValues, missingCheckedValues, getPathKeyEntities, getValueByKeyPath, showCheckedStrategy);\n var onInternalSelect = useEvent(function (valuePath) {\n handleSelection(valuePath);\n });\n\n // ======================== Context =========================\n var cascaderContext = React.useMemo(function () {\n return {\n options: mergedOptions,\n fieldNames: mergedFieldNames,\n values: checkedValues,\n halfValues: halfCheckedValues,\n changeOnSelect: changeOnSelect,\n onSelect: onInternalSelect,\n checkable: checkable,\n searchOptions: [],\n dropdownPrefixCls: undefined,\n loadData: loadData,\n expandTrigger: expandTrigger,\n expandIcon: expandIcon,\n loadingIcon: loadingIcon,\n dropdownMenuColumnStyle: undefined\n };\n }, [mergedOptions, mergedFieldNames, checkedValues, halfCheckedValues, changeOnSelect, onInternalSelect, checkable, loadData, expandTrigger, expandIcon, loadingIcon]);\n\n // ========================= Render =========================\n var panelPrefixCls = \"\".concat(prefixCls, \"-panel\");\n var isEmpty = !mergedOptions.length;\n return /*#__PURE__*/React.createElement(CascaderContext.Provider, {\n value: cascaderContext\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: classNames(panelPrefixCls, (_classNames = {}, _defineProperty(_classNames, \"\".concat(panelPrefixCls, \"-rtl\"), direction === 'rtl'), _defineProperty(_classNames, \"\".concat(panelPrefixCls, \"-empty\"), isEmpty), _classNames), className),\n style: style\n }, isEmpty ? notFoundContent : /*#__PURE__*/React.createElement(RawOptionList, {\n prefixCls: prefixCls,\n searchValue: \"\",\n multiple: multiple,\n toggleOpen: noop,\n open: true,\n direction: direction,\n disabled: disabled\n })));\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"id\", \"prefixCls\", \"fieldNames\", \"defaultValue\", \"value\", \"changeOnSelect\", \"onChange\", \"displayRender\", \"checkable\", \"autoClearSearchValue\", \"searchValue\", \"onSearch\", \"showSearch\", \"expandTrigger\", \"options\", \"dropdownPrefixCls\", \"loadData\", \"popupVisible\", \"open\", \"popupClassName\", \"dropdownClassName\", \"dropdownMenuColumnStyle\", \"dropdownStyle\", \"popupPlacement\", \"placement\", \"onDropdownVisibleChange\", \"onPopupVisibleChange\", \"onOpenChange\", \"expandIcon\", \"loadingIcon\", \"children\", \"dropdownMatchSelectWidth\", \"showCheckedStrategy\", \"optionRender\"];\nimport { BaseSelect } from 'rc-select';\nimport useId from \"rc-select/es/hooks/useId\";\nimport useEvent from \"rc-util/es/hooks/useEvent\";\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport * as React from 'react';\nimport CascaderContext from \"./context\";\nimport useDisplayValues from \"./hooks/useDisplayValues\";\nimport useMissingValues from \"./hooks/useMissingValues\";\nimport useOptions from \"./hooks/useOptions\";\nimport useSearchConfig from \"./hooks/useSearchConfig\";\nimport useSearchOptions from \"./hooks/useSearchOptions\";\nimport useSelect from \"./hooks/useSelect\";\nimport useValues from \"./hooks/useValues\";\nimport OptionList from \"./OptionList\";\nimport Panel from \"./Panel\";\nimport { fillFieldNames, SHOW_CHILD, SHOW_PARENT, toPathKeys, toRawValues } from \"./utils/commonUtil\";\nimport { formatStrategyValues, toPathOptions } from \"./utils/treeUtil\";\nimport warningProps, { warningNullOptions } from \"./utils/warningPropsUtil\";\nvar Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var id = props.id,\n _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'rc-cascader' : _props$prefixCls,\n fieldNames = props.fieldNames,\n defaultValue = props.defaultValue,\n value = props.value,\n changeOnSelect = props.changeOnSelect,\n onChange = props.onChange,\n displayRender = props.displayRender,\n checkable = props.checkable,\n _props$autoClearSearc = props.autoClearSearchValue,\n autoClearSearchValue = _props$autoClearSearc === void 0 ? true : _props$autoClearSearc,\n searchValue = props.searchValue,\n onSearch = props.onSearch,\n showSearch = props.showSearch,\n expandTrigger = props.expandTrigger,\n options = props.options,\n dropdownPrefixCls = props.dropdownPrefixCls,\n loadData = props.loadData,\n popupVisible = props.popupVisible,\n open = props.open,\n popupClassName = props.popupClassName,\n dropdownClassName = props.dropdownClassName,\n dropdownMenuColumnStyle = props.dropdownMenuColumnStyle,\n customDropdownStyle = props.dropdownStyle,\n popupPlacement = props.popupPlacement,\n placement = props.placement,\n onDropdownVisibleChange = props.onDropdownVisibleChange,\n onPopupVisibleChange = props.onPopupVisibleChange,\n onOpenChange = props.onOpenChange,\n _props$expandIcon = props.expandIcon,\n expandIcon = _props$expandIcon === void 0 ? '>' : _props$expandIcon,\n loadingIcon = props.loadingIcon,\n children = props.children,\n _props$dropdownMatchS = props.dropdownMatchSelectWidth,\n dropdownMatchSelectWidth = _props$dropdownMatchS === void 0 ? false : _props$dropdownMatchS,\n _props$showCheckedStr = props.showCheckedStrategy,\n showCheckedStrategy = _props$showCheckedStr === void 0 ? SHOW_PARENT : _props$showCheckedStr,\n optionRender = props.optionRender,\n restProps = _objectWithoutProperties(props, _excluded);\n var mergedId = useId(id);\n var multiple = !!checkable;\n\n // =========================== Values ===========================\n var _useMergedState = useMergedState(defaultValue, {\n value: value,\n postState: toRawValues\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n rawValues = _useMergedState2[0],\n setRawValues = _useMergedState2[1];\n\n // ========================= FieldNames =========================\n var mergedFieldNames = React.useMemo(function () {\n return fillFieldNames(fieldNames);\n }, /* eslint-disable react-hooks/exhaustive-deps */\n [JSON.stringify(fieldNames)]\n /* eslint-enable react-hooks/exhaustive-deps */);\n\n // =========================== Option ===========================\n var _useOptions = useOptions(mergedFieldNames, options),\n _useOptions2 = _slicedToArray(_useOptions, 3),\n mergedOptions = _useOptions2[0],\n getPathKeyEntities = _useOptions2[1],\n getValueByKeyPath = _useOptions2[2];\n\n // =========================== Search ===========================\n var _useMergedState3 = useMergedState('', {\n value: searchValue,\n postState: function postState(search) {\n return search || '';\n }\n }),\n _useMergedState4 = _slicedToArray(_useMergedState3, 2),\n mergedSearchValue = _useMergedState4[0],\n setSearchValue = _useMergedState4[1];\n var onInternalSearch = function onInternalSearch(searchText, info) {\n setSearchValue(searchText);\n if (info.source !== 'blur' && onSearch) {\n onSearch(searchText);\n }\n };\n var _useSearchConfig = useSearchConfig(showSearch),\n _useSearchConfig2 = _slicedToArray(_useSearchConfig, 2),\n mergedShowSearch = _useSearchConfig2[0],\n searchConfig = _useSearchConfig2[1];\n var searchOptions = useSearchOptions(mergedSearchValue, mergedOptions, mergedFieldNames, dropdownPrefixCls || prefixCls, searchConfig, changeOnSelect || multiple);\n\n // =========================== Values ===========================\n var getMissingValues = useMissingValues(mergedOptions, mergedFieldNames);\n\n // Fill `rawValues` with checked conduction values\n var _useValues = useValues(multiple, rawValues, getPathKeyEntities, getValueByKeyPath, getMissingValues),\n _useValues2 = _slicedToArray(_useValues, 3),\n checkedValues = _useValues2[0],\n halfCheckedValues = _useValues2[1],\n missingCheckedValues = _useValues2[2];\n var deDuplicatedValues = React.useMemo(function () {\n var checkedKeys = toPathKeys(checkedValues);\n var deduplicateKeys = formatStrategyValues(checkedKeys, getPathKeyEntities, showCheckedStrategy);\n return [].concat(_toConsumableArray(missingCheckedValues), _toConsumableArray(getValueByKeyPath(deduplicateKeys)));\n }, [checkedValues, getPathKeyEntities, getValueByKeyPath, missingCheckedValues, showCheckedStrategy]);\n var displayValues = useDisplayValues(deDuplicatedValues, mergedOptions, mergedFieldNames, multiple, displayRender);\n\n // =========================== Change ===========================\n var triggerChange = useEvent(function (nextValues) {\n setRawValues(nextValues);\n\n // Save perf if no need trigger event\n if (onChange) {\n var nextRawValues = toRawValues(nextValues);\n var valueOptions = nextRawValues.map(function (valueCells) {\n return toPathOptions(valueCells, mergedOptions, mergedFieldNames).map(function (valueOpt) {\n return valueOpt.option;\n });\n });\n var triggerValues = multiple ? nextRawValues : nextRawValues[0];\n var triggerOptions = multiple ? valueOptions : valueOptions[0];\n onChange(triggerValues, triggerOptions);\n }\n });\n\n // =========================== Select ===========================\n var handleSelection = useSelect(multiple, triggerChange, checkedValues, halfCheckedValues, missingCheckedValues, getPathKeyEntities, getValueByKeyPath, showCheckedStrategy);\n var onInternalSelect = useEvent(function (valuePath) {\n if (!multiple || autoClearSearchValue) {\n setSearchValue('');\n }\n handleSelection(valuePath);\n });\n\n // Display Value change logic\n var onDisplayValuesChange = function onDisplayValuesChange(_, info) {\n if (info.type === 'clear') {\n triggerChange([]);\n return;\n }\n\n // Cascader do not support `add` type. Only support `remove`\n var _ref = info.values[0],\n valueCells = _ref.valueCells;\n onInternalSelect(valueCells);\n };\n\n // ============================ Open ============================\n var mergedOpen = open !== undefined ? open : popupVisible;\n var mergedDropdownClassName = dropdownClassName || popupClassName;\n var mergedPlacement = placement || popupPlacement;\n var onInternalDropdownVisibleChange = function onInternalDropdownVisibleChange(nextVisible) {\n onOpenChange === null || onOpenChange === void 0 || onOpenChange(nextVisible);\n onDropdownVisibleChange === null || onDropdownVisibleChange === void 0 || onDropdownVisibleChange(nextVisible);\n onPopupVisibleChange === null || onPopupVisibleChange === void 0 || onPopupVisibleChange(nextVisible);\n };\n\n // ========================== Warning ===========================\n if (process.env.NODE_ENV !== 'production') {\n warningProps(props);\n warningNullOptions(mergedOptions, mergedFieldNames);\n }\n\n // ========================== Context ===========================\n var cascaderContext = React.useMemo(function () {\n return {\n options: mergedOptions,\n fieldNames: mergedFieldNames,\n values: checkedValues,\n halfValues: halfCheckedValues,\n changeOnSelect: changeOnSelect,\n onSelect: onInternalSelect,\n checkable: checkable,\n searchOptions: searchOptions,\n dropdownPrefixCls: dropdownPrefixCls,\n loadData: loadData,\n expandTrigger: expandTrigger,\n expandIcon: expandIcon,\n loadingIcon: loadingIcon,\n dropdownMenuColumnStyle: dropdownMenuColumnStyle,\n optionRender: optionRender\n };\n }, [mergedOptions, mergedFieldNames, checkedValues, halfCheckedValues, changeOnSelect, onInternalSelect, checkable, searchOptions, dropdownPrefixCls, loadData, expandTrigger, expandIcon, loadingIcon, dropdownMenuColumnStyle, optionRender]);\n\n // ==============================================================\n // == Render ==\n // ==============================================================\n var emptyOptions = !(mergedSearchValue ? searchOptions : mergedOptions).length;\n var dropdownStyle =\n // Search to match width\n mergedSearchValue && searchConfig.matchInputWidth ||\n // Empty keep the width\n emptyOptions ? {} : {\n minWidth: 'auto'\n };\n return /*#__PURE__*/React.createElement(CascaderContext.Provider, {\n value: cascaderContext\n }, /*#__PURE__*/React.createElement(BaseSelect, _extends({}, restProps, {\n // MISC\n ref: ref,\n id: mergedId,\n prefixCls: prefixCls,\n autoClearSearchValue: autoClearSearchValue,\n dropdownMatchSelectWidth: dropdownMatchSelectWidth,\n dropdownStyle: _objectSpread(_objectSpread({}, dropdownStyle), customDropdownStyle)\n // Value\n ,\n displayValues: displayValues,\n onDisplayValuesChange: onDisplayValuesChange,\n mode: multiple ? 'multiple' : undefined\n // Search\n ,\n searchValue: mergedSearchValue,\n onSearch: onInternalSearch,\n showSearch: mergedShowSearch\n // Options\n ,\n OptionList: OptionList,\n emptyOptions: emptyOptions\n // Open\n ,\n open: mergedOpen,\n dropdownClassName: mergedDropdownClassName,\n placement: mergedPlacement,\n onDropdownVisibleChange: onInternalDropdownVisibleChange\n // Children\n ,\n getRawInputElement: function getRawInputElement() {\n return children;\n }\n })));\n});\nif (process.env.NODE_ENV !== 'production') {\n Cascader.displayName = 'Cascader';\n}\nCascader.SHOW_PARENT = SHOW_PARENT;\nCascader.SHOW_CHILD = SHOW_CHILD;\nCascader.Panel = Panel;\nexport default Cascader;","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport { toPathOptions } from \"../utils/treeUtil\";\nimport * as React from 'react';\nimport { toPathKey } from \"../utils/commonUtil\";\nexport default (function (rawValues, options, fieldNames, multiple, displayRender) {\n return React.useMemo(function () {\n var mergedDisplayRender = displayRender ||\n // Default displayRender\n function (labels) {\n var mergedLabels = multiple ? labels.slice(-1) : labels;\n var SPLIT = ' / ';\n if (mergedLabels.every(function (label) {\n return ['string', 'number'].includes(_typeof(label));\n })) {\n return mergedLabels.join(SPLIT);\n }\n\n // If exist non-string value, use ReactNode instead\n return mergedLabels.reduce(function (list, label, index) {\n var keyedLabel = /*#__PURE__*/React.isValidElement(label) ? /*#__PURE__*/React.cloneElement(label, {\n key: index\n }) : label;\n if (index === 0) {\n return [keyedLabel];\n }\n return [].concat(_toConsumableArray(list), [SPLIT, keyedLabel]);\n }, []);\n };\n return rawValues.map(function (valueCells) {\n var _valueOptions;\n var valueOptions = toPathOptions(valueCells, options, fieldNames);\n var label = mergedDisplayRender(valueOptions.map(function (_ref) {\n var _option$fieldNames$la;\n var option = _ref.option,\n value = _ref.value;\n return (_option$fieldNames$la = option === null || option === void 0 ? void 0 : option[fieldNames.label]) !== null && _option$fieldNames$la !== void 0 ? _option$fieldNames$la : value;\n }), valueOptions.map(function (_ref2) {\n var option = _ref2.option;\n return option;\n }));\n var value = toPathKey(valueCells);\n return {\n label: label,\n value: value,\n key: value,\n valueCells: valueCells,\n disabled: (_valueOptions = valueOptions[valueOptions.length - 1]) === null || _valueOptions === void 0 || (_valueOptions = _valueOptions.option) === null || _valueOptions === void 0 ? void 0 : _valueOptions.disabled\n };\n });\n }, [rawValues, options, fieldNames, displayRender, multiple]);\n});","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport warning from \"rc-util/es/warning\";\nimport * as React from 'react';\n// Convert `showSearch` to unique config\nexport default function useSearchConfig(showSearch) {\n return React.useMemo(function () {\n if (!showSearch) {\n return [false, {}];\n }\n var searchConfig = {\n matchInputWidth: true,\n limit: 50\n };\n if (showSearch && _typeof(showSearch) === 'object') {\n searchConfig = _objectSpread(_objectSpread({}, searchConfig), showSearch);\n }\n if (searchConfig.limit <= 0) {\n searchConfig.limit = false;\n if (process.env.NODE_ENV !== 'production') {\n warning(false, \"'limit' of showSearch should be positive number or false.\");\n }\n }\n return [true, searchConfig];\n }, [showSearch]);\n}","import * as React from 'react';\nimport { ConfigContext } from '../../config-provider';\nfunction useBase(customizePrefixCls, direction) {\n const {\n getPrefixCls,\n direction: rootDirection,\n renderEmpty\n } = React.useContext(ConfigContext);\n const mergedDirection = direction || rootDirection;\n const prefixCls = getPrefixCls('select', customizePrefixCls);\n const cascaderPrefixCls = getPrefixCls('cascader', customizePrefixCls);\n return [prefixCls, cascaderPrefixCls, mergedDirection, renderEmpty];\n}\nexport default useBase;","\"use client\";\n\nimport * as React from 'react';\nexport default function useCheckable(cascaderPrefixCls, multiple) {\n return React.useMemo(() => multiple ? /*#__PURE__*/React.createElement(\"span\", {\n className: `${cascaderPrefixCls}-checkbox-inner`\n }) : false, [multiple]);\n}","\"use client\";\n\nimport * as React from 'react';\nimport LeftOutlined from \"@ant-design/icons/es/icons/LeftOutlined\";\nimport LoadingOutlined from \"@ant-design/icons/es/icons/LoadingOutlined\";\nimport RightOutlined from \"@ant-design/icons/es/icons/RightOutlined\";\nconst useColumnIcons = (prefixCls, rtl, expandIcon) => {\n let mergedExpandIcon = expandIcon;\n if (!expandIcon) {\n mergedExpandIcon = rtl ? /*#__PURE__*/React.createElement(LeftOutlined, null) : /*#__PURE__*/React.createElement(RightOutlined, null);\n }\n const loadingIcon = /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-menu-item-loading-icon`\n }, /*#__PURE__*/React.createElement(LoadingOutlined, {\n spin: true\n }));\n return React.useMemo(() => [mergedExpandIcon, loadingIcon], [mergedExpandIcon]);\n};\nexport default useColumnIcons;","import { unit } from '@ant-design/cssinjs';\nimport { getStyle as getCheckboxStyle } from '../../checkbox/style';\nimport { textEllipsis } from '../../style';\nconst getColumnsStyle = token => {\n const {\n prefixCls,\n componentCls\n } = token;\n const cascaderMenuItemCls = `${componentCls}-menu-item`;\n const iconCls = `\n &${cascaderMenuItemCls}-expand ${cascaderMenuItemCls}-expand-icon,\n ${cascaderMenuItemCls}-loading-icon\n`;\n return [\n // ==================== Checkbox ====================\n getCheckboxStyle(`${prefixCls}-checkbox`, token), {\n [componentCls]: {\n // ================== Checkbox ==================\n '&-checkbox': {\n top: 0,\n marginInlineEnd: token.paddingXS,\n pointerEvents: 'unset'\n },\n // ==================== Menu ====================\n // >>> Menus\n '&-menus': {\n display: 'flex',\n flexWrap: 'nowrap',\n alignItems: 'flex-start',\n [`&${componentCls}-menu-empty`]: {\n [`${componentCls}-menu`]: {\n width: '100%',\n height: 'auto',\n [cascaderMenuItemCls]: {\n color: token.colorTextDisabled\n }\n }\n }\n },\n // >>> Menu\n '&-menu': {\n flexGrow: 1,\n flexShrink: 0,\n minWidth: token.controlItemWidth,\n height: token.dropdownHeight,\n margin: 0,\n padding: token.menuPadding,\n overflow: 'auto',\n verticalAlign: 'top',\n listStyle: 'none',\n '-ms-overflow-style': '-ms-autohiding-scrollbar',\n // https://github.com/ant-design/ant-design/issues/11857\n '&:not(:last-child)': {\n borderInlineEnd: `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`\n },\n '&-item': Object.assign(Object.assign({}, textEllipsis), {\n display: 'flex',\n flexWrap: 'nowrap',\n alignItems: 'center',\n padding: token.optionPadding,\n lineHeight: token.lineHeight,\n cursor: 'pointer',\n transition: `all ${token.motionDurationMid}`,\n borderRadius: token.borderRadiusSM,\n '&:hover': {\n background: token.controlItemBgHover\n },\n '&-disabled': {\n color: token.colorTextDisabled,\n cursor: 'not-allowed',\n '&:hover': {\n background: 'transparent'\n },\n [iconCls]: {\n color: token.colorTextDisabled\n }\n },\n [`&-active:not(${cascaderMenuItemCls}-disabled)`]: {\n '&, &:hover': {\n color: token.optionSelectedColor,\n fontWeight: token.optionSelectedFontWeight,\n backgroundColor: token.optionSelectedBg\n }\n },\n '&-content': {\n flex: 'auto'\n },\n [iconCls]: {\n marginInlineStart: token.paddingXXS,\n color: token.colorIcon,\n fontSize: token.fontSizeIcon\n },\n '&-keyword': {\n color: token.colorHighlight\n }\n })\n }\n }\n }];\n};\nexport default getColumnsStyle;","import { genCompactItemStyle } from '../../style/compact-item';\nimport { genStyleHooks } from '../../theme/internal';\nimport getColumnsStyle from './columns';\n// =============================== Base ===============================\nconst genBaseStyle = token => {\n const {\n componentCls,\n antCls\n } = token;\n return [\n // =====================================================\n // == Control ==\n // =====================================================\n {\n [componentCls]: {\n width: token.controlWidth\n }\n },\n // =====================================================\n // == Popup ==\n // =====================================================\n {\n [`${componentCls}-dropdown`]: [{\n [`&${antCls}-select-dropdown`]: {\n padding: 0\n }\n }, getColumnsStyle(token)]\n },\n // =====================================================\n // == RTL ==\n // =====================================================\n {\n [`${componentCls}-dropdown-rtl`]: {\n direction: 'rtl'\n }\n },\n // =====================================================\n // == Space Compact ==\n // =====================================================\n genCompactItemStyle(token)];\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = token => {\n const itemPaddingVertical = Math.round((token.controlHeight - token.fontSize * token.lineHeight) / 2);\n return {\n controlWidth: 184,\n controlItemWidth: 111,\n dropdownHeight: 180,\n optionSelectedBg: token.controlItemBgActive,\n optionSelectedFontWeight: token.fontWeightStrong,\n optionPadding: `${itemPaddingVertical}px ${token.paddingSM}px`,\n menuPadding: token.paddingXXS,\n optionSelectedColor: token.colorText\n };\n};\nexport default genStyleHooks('Cascader', token => [genBaseStyle(token)], prepareComponentToken, {\n unitless: {\n optionSelectedFontWeight: true\n }\n});","import { unit } from '@ant-design/cssinjs';\nimport { prepareComponentToken } from '.';\nimport { genComponentStyleHook } from '../../theme/internal';\nimport getColumnsStyle from './columns';\n// ============================== Panel ===============================\nconst genPanelStyle = token => {\n const {\n componentCls\n } = token;\n return {\n [`${componentCls}-panel`]: [getColumnsStyle(token), {\n display: 'inline-flex',\n border: `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,\n borderRadius: token.borderRadiusLG,\n overflowX: 'auto',\n maxWidth: '100%',\n [`${componentCls}-menus`]: {\n alignItems: 'stretch'\n },\n [`${componentCls}-menu`]: {\n height: 'auto'\n },\n '&-empty': {\n padding: token.paddingXXS\n }\n }]\n };\n};\n// ============================== Export ==============================\nexport default genComponentStyleHook(['Cascader', 'Panel'], token => genPanelStyle(token), prepareComponentToken);","\"use client\";\n\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport cls from 'classnames';\nimport RcCascader from 'rc-cascader';\nimport omit from \"rc-util/es/omit\";\nimport { useZIndex } from '../_util/hooks/useZIndex';\nimport { getTransitionName } from '../_util/motion';\nimport genPurePanel from '../_util/PurePanel';\nimport { getMergedStatus, getStatusClassNames } from '../_util/statusUtils';\nimport { devUseWarning } from '../_util/warning';\nimport { ConfigContext } from '../config-provider';\nimport { useComponentConfig } from '../config-provider/context';\nimport DefaultRenderEmpty from '../config-provider/defaultRenderEmpty';\nimport DisabledContext from '../config-provider/DisabledContext';\nimport useCSSVarCls from '../config-provider/hooks/useCSSVarCls';\nimport useSize from '../config-provider/hooks/useSize';\nimport { FormItemInputContext } from '../form/context';\nimport useVariant from '../form/hooks/useVariants';\nimport mergedBuiltinPlacements from '../select/mergedBuiltinPlacements';\nimport useSelectStyle from '../select/style';\nimport useIcons from '../select/useIcons';\nimport useShowArrow from '../select/useShowArrow';\nimport { useCompactItemContext } from '../space/Compact';\nimport useBase from './hooks/useBase';\nimport useCheckable from './hooks/useCheckable';\nimport useColumnIcons from './hooks/useColumnIcons';\nimport CascaderPanel from './Panel';\nimport useStyle from './style';\nconst {\n SHOW_CHILD,\n SHOW_PARENT\n} = RcCascader;\nfunction highlightKeyword(str, lowerKeyword, prefixCls) {\n const cells = str.toLowerCase().split(lowerKeyword).reduce((list, cur, index) => index === 0 ? [cur] : [].concat(_toConsumableArray(list), [lowerKeyword, cur]), []);\n const fillCells = [];\n let start = 0;\n cells.forEach((cell, index) => {\n const end = start + cell.length;\n let originWorld = str.slice(start, end);\n start = end;\n if (index % 2 === 1) {\n originWorld =\n /*#__PURE__*/\n // eslint-disable-next-line react/no-array-index-key\n React.createElement(\"span\", {\n className: `${prefixCls}-menu-item-keyword`,\n key: `separator-${index}`\n }, originWorld);\n }\n fillCells.push(originWorld);\n });\n return fillCells;\n}\nconst defaultSearchRender = (inputValue, path, prefixCls, fieldNames) => {\n const optionList = [];\n // We do lower here to save perf\n const lower = inputValue.toLowerCase();\n path.forEach((node, index) => {\n if (index !== 0) {\n optionList.push(' / ');\n }\n let label = node[fieldNames.label];\n const type = typeof label;\n if (type === 'string' || type === 'number') {\n label = highlightKeyword(String(label), lower, prefixCls);\n }\n optionList.push(label);\n });\n return optionList;\n};\nconst Cascader = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _a, _b, _c, _d;\n const {\n prefixCls: customizePrefixCls,\n size: customizeSize,\n disabled: customDisabled,\n className,\n rootClassName,\n multiple,\n bordered = true,\n transitionName,\n choiceTransitionName = '',\n popupClassName,\n dropdownClassName,\n expandIcon,\n placement,\n showSearch,\n allowClear = true,\n notFoundContent,\n direction,\n getPopupContainer,\n status: customStatus,\n showArrow,\n builtinPlacements,\n style,\n variant: customVariant,\n dropdownRender,\n onDropdownVisibleChange,\n dropdownMenuColumnStyle,\n popupRender,\n dropdownStyle,\n popupMenuColumnStyle,\n onOpenChange,\n styles,\n classNames\n } = props,\n rest = __rest(props, [\"prefixCls\", \"size\", \"disabled\", \"className\", \"rootClassName\", \"multiple\", \"bordered\", \"transitionName\", \"choiceTransitionName\", \"popupClassName\", \"dropdownClassName\", \"expandIcon\", \"placement\", \"showSearch\", \"allowClear\", \"notFoundContent\", \"direction\", \"getPopupContainer\", \"status\", \"showArrow\", \"builtinPlacements\", \"style\", \"variant\", \"dropdownRender\", \"onDropdownVisibleChange\", \"dropdownMenuColumnStyle\", \"popupRender\", \"dropdownStyle\", \"popupMenuColumnStyle\", \"onOpenChange\", \"styles\", \"classNames\"]);\n const restProps = omit(rest, ['suffixIcon']);\n const {\n getPrefixCls,\n getPopupContainer: getContextPopupContainer,\n className: contextClassName,\n style: contextStyle,\n classNames: contextClassNames,\n styles: contextStyles\n } = useComponentConfig('cascader');\n const {\n popupOverflow\n } = React.useContext(ConfigContext);\n // =================== Form =====================\n const {\n status: contextStatus,\n hasFeedback,\n isFormItemInput,\n feedbackIcon\n } = React.useContext(FormItemInputContext);\n const mergedStatus = getMergedStatus(contextStatus, customStatus);\n // =================== Warning =====================\n if (process.env.NODE_ENV !== 'production') {\n const warning = devUseWarning('Cascader');\n // v5 deprecated dropdown api\n const deprecatedProps = {\n dropdownClassName: 'classNames.popup.root',\n dropdownStyle: 'styles.popup.root',\n dropdownRender: 'popupRender',\n dropdownMenuColumnStyle: 'popupMenuColumnStyle',\n onDropdownVisibleChange: 'onOpenChange',\n bordered: 'variant'\n };\n Object.entries(deprecatedProps).forEach(([oldProp, newProp]) => {\n warning.deprecated(!(oldProp in props), oldProp, newProp);\n });\n process.env.NODE_ENV !== \"production\" ? warning(!('showArrow' in props), 'deprecated', '`showArrow` is deprecated which will be removed in next major version. It will be a default behavior, you can hide it by setting `suffixIcon` to null.') : void 0;\n }\n // ==================== Prefix =====================\n const [prefixCls, cascaderPrefixCls, mergedDirection, renderEmpty] = useBase(customizePrefixCls, direction);\n const isRtl = mergedDirection === 'rtl';\n const rootPrefixCls = getPrefixCls();\n const rootCls = useCSSVarCls(prefixCls);\n const [wrapSelectCSSVar, hashId, cssVarCls] = useSelectStyle(prefixCls, rootCls);\n const cascaderRootCls = useCSSVarCls(cascaderPrefixCls);\n const [wrapCascaderCSSVar] = useStyle(cascaderPrefixCls, cascaderRootCls);\n const {\n compactSize,\n compactItemClassnames\n } = useCompactItemContext(prefixCls, direction);\n const [variant, enableVariantCls] = useVariant('cascader', customVariant, bordered);\n // =================== No Found ====================\n const mergedNotFoundContent = notFoundContent || (renderEmpty === null || renderEmpty === void 0 ? void 0 : renderEmpty('Cascader')) || (/*#__PURE__*/React.createElement(DefaultRenderEmpty, {\n componentName: \"Cascader\"\n }));\n // =================== Dropdown ====================\n const mergedPopupClassName = cls(((_a = classNames === null || classNames === void 0 ? void 0 : classNames.popup) === null || _a === void 0 ? void 0 : _a.root) || ((_b = contextClassNames.popup) === null || _b === void 0 ? void 0 : _b.root) || popupClassName || dropdownClassName, `${cascaderPrefixCls}-dropdown`, {\n [`${cascaderPrefixCls}-dropdown-rtl`]: mergedDirection === 'rtl'\n }, rootClassName, rootCls, contextClassNames.root, classNames === null || classNames === void 0 ? void 0 : classNames.root, cascaderRootCls, hashId, cssVarCls);\n const mergedPopupRender = popupRender || dropdownRender;\n const mergedPopupMenuColumnStyle = popupMenuColumnStyle || dropdownMenuColumnStyle;\n const mergedOnOpenChange = onOpenChange || onDropdownVisibleChange;\n const mergedPopupStyle = ((_c = styles === null || styles === void 0 ? void 0 : styles.popup) === null || _c === void 0 ? void 0 : _c.root) || ((_d = contextStyles.popup) === null || _d === void 0 ? void 0 : _d.root) || dropdownStyle;\n // ==================== Search =====================\n const mergedShowSearch = React.useMemo(() => {\n if (!showSearch) {\n return showSearch;\n }\n let searchConfig = {\n render: defaultSearchRender\n };\n if (typeof showSearch === 'object') {\n searchConfig = Object.assign(Object.assign({}, searchConfig), showSearch);\n }\n return searchConfig;\n }, [showSearch]);\n // ===================== Size ======================\n const mergedSize = useSize(ctx => {\n var _a;\n return (_a = customizeSize !== null && customizeSize !== void 0 ? customizeSize : compactSize) !== null && _a !== void 0 ? _a : ctx;\n });\n // ===================== Disabled =====================\n const disabled = React.useContext(DisabledContext);\n const mergedDisabled = customDisabled !== null && customDisabled !== void 0 ? customDisabled : disabled;\n // ===================== Icon ======================\n const [mergedExpandIcon, loadingIcon] = useColumnIcons(prefixCls, isRtl, expandIcon);\n // =================== Multiple ====================\n const checkable = useCheckable(cascaderPrefixCls, multiple);\n // ===================== Icons =====================\n const showSuffixIcon = useShowArrow(props.suffixIcon, showArrow);\n const {\n suffixIcon,\n removeIcon,\n clearIcon\n } = useIcons(Object.assign(Object.assign({}, props), {\n hasFeedback,\n feedbackIcon,\n showSuffixIcon,\n multiple,\n prefixCls,\n componentName: 'Cascader'\n }));\n // ===================== Placement =====================\n const memoPlacement = React.useMemo(() => {\n if (placement !== undefined) {\n return placement;\n }\n return isRtl ? 'bottomRight' : 'bottomLeft';\n }, [placement, isRtl]);\n const mergedAllowClear = allowClear === true ? {\n clearIcon\n } : allowClear;\n // ============================ zIndex ============================\n const [zIndex] = useZIndex('SelectLike', mergedPopupStyle === null || mergedPopupStyle === void 0 ? void 0 : mergedPopupStyle.zIndex);\n // ==================== Render =====================\n const renderNode = /*#__PURE__*/React.createElement(RcCascader, Object.assign({\n prefixCls: prefixCls,\n className: cls(!customizePrefixCls && cascaderPrefixCls, {\n [`${prefixCls}-lg`]: mergedSize === 'large',\n [`${prefixCls}-sm`]: mergedSize === 'small',\n [`${prefixCls}-rtl`]: isRtl,\n [`${prefixCls}-${variant}`]: enableVariantCls,\n [`${prefixCls}-in-form-item`]: isFormItemInput\n }, getStatusClassNames(prefixCls, mergedStatus, hasFeedback), compactItemClassnames, contextClassName, className, rootClassName, classNames === null || classNames === void 0 ? void 0 : classNames.root, contextClassNames.root, rootCls, cascaderRootCls, hashId, cssVarCls),\n disabled: mergedDisabled,\n style: Object.assign(Object.assign(Object.assign(Object.assign({}, contextStyles.root), styles === null || styles === void 0 ? void 0 : styles.root), contextStyle), style)\n }, restProps, {\n builtinPlacements: mergedBuiltinPlacements(builtinPlacements, popupOverflow),\n direction: mergedDirection,\n placement: memoPlacement,\n notFoundContent: mergedNotFoundContent,\n allowClear: mergedAllowClear,\n showSearch: mergedShowSearch,\n expandIcon: mergedExpandIcon,\n suffixIcon: suffixIcon,\n removeIcon: removeIcon,\n loadingIcon: loadingIcon,\n checkable: checkable,\n dropdownClassName: mergedPopupClassName,\n dropdownPrefixCls: customizePrefixCls || cascaderPrefixCls,\n dropdownStyle: Object.assign(Object.assign({}, mergedPopupStyle), {\n zIndex\n }),\n dropdownRender: mergedPopupRender,\n dropdownMenuColumnStyle: mergedPopupMenuColumnStyle,\n onOpenChange: mergedOnOpenChange,\n choiceTransitionName: getTransitionName(rootPrefixCls, '', choiceTransitionName),\n transitionName: getTransitionName(rootPrefixCls, 'slide-up', transitionName),\n getPopupContainer: getPopupContainer || getContextPopupContainer,\n ref: ref\n }));\n return wrapCascaderCSSVar(wrapSelectCSSVar(renderNode));\n});\nif (process.env.NODE_ENV !== 'production') {\n Cascader.displayName = 'Cascader';\n}\n// We don't care debug panel\n/* istanbul ignore next */\nconst PurePanel = genPurePanel(Cascader, 'dropdownAlign', props => omit(props, ['visible']));\nCascader.SHOW_PARENT = SHOW_PARENT;\nCascader.SHOW_CHILD = SHOW_CHILD;\nCascader.Panel = CascaderPanel;\nCascader._InternalPanelDoNotUseOrYouWillBeFired = PurePanel;\nexport default Cascader;","\"use client\";\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { Panel } from 'rc-cascader';\nimport DefaultRenderEmpty from '../config-provider/defaultRenderEmpty';\nimport DisabledContext from '../config-provider/DisabledContext';\nimport useCSSVarCls from '../config-provider/hooks/useCSSVarCls';\nimport useBase from './hooks/useBase';\nimport useCheckable from './hooks/useCheckable';\nimport useColumnIcons from './hooks/useColumnIcons';\nimport useStyle from './style';\nimport usePanelStyle from './style/panel';\nfunction CascaderPanel(props) {\n const {\n prefixCls: customizePrefixCls,\n className,\n multiple,\n rootClassName,\n notFoundContent,\n direction,\n expandIcon,\n disabled: customDisabled\n } = props;\n const disabled = React.useContext(DisabledContext);\n const mergedDisabled = customDisabled !== null && customDisabled !== void 0 ? customDisabled : disabled;\n const [prefixCls, cascaderPrefixCls, mergedDirection, renderEmpty] = useBase(customizePrefixCls, direction);\n const rootCls = useCSSVarCls(cascaderPrefixCls);\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(cascaderPrefixCls, rootCls);\n usePanelStyle(cascaderPrefixCls);\n const isRtl = mergedDirection === 'rtl';\n // ===================== Icon ======================\n const [mergedExpandIcon, loadingIcon] = useColumnIcons(prefixCls, isRtl, expandIcon);\n // ===================== Empty =====================\n const mergedNotFoundContent = notFoundContent || (renderEmpty === null || renderEmpty === void 0 ? void 0 : renderEmpty('Cascader')) || (/*#__PURE__*/React.createElement(DefaultRenderEmpty, {\n componentName: \"Cascader\"\n }));\n // =================== Multiple ====================\n const checkable = useCheckable(cascaderPrefixCls, multiple);\n // ==================== Render =====================\n return wrapCSSVar(/*#__PURE__*/React.createElement(Panel, Object.assign({}, props, {\n checkable: checkable,\n prefixCls: cascaderPrefixCls,\n className: classNames(className, hashId, rootClassName, cssVarCls, rootCls),\n notFoundContent: mergedNotFoundContent,\n direction: mergedDirection,\n expandIcon: mergedExpandIcon,\n loadingIcon: loadingIcon,\n disabled: mergedDisabled\n })));\n}\nexport default CascaderPanel;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"radioType\", \"renderFormItem\", \"mode\", \"render\", \"label\", \"light\"];\nimport { LoadingOutlined } from '@ant-design/icons';\nimport { useIntl } from '@ant-design/pro-provider';\nimport { FieldLabel, compatibleBorder, objectToMap, proFieldParsingText } from '@ant-design/pro-utils';\nimport { Cascader, ConfigProvider } from 'antd';\nimport classNames from 'classnames';\nimport React, { useContext, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { useFieldFetchData } from \"../Select\";\n\n// 兼容代码-----------\nimport \"antd/es/cascader/style\";\n//----------------------\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * 级联选择组件\n *\n * @param param0\n * @param ref\n */\nvar FieldCascader = function FieldCascader(_ref, ref) {\n var _rest$fieldProps2;\n var radioType = _ref.radioType,\n renderFormItem = _ref.renderFormItem,\n mode = _ref.mode,\n render = _ref.render,\n label = _ref.label,\n light = _ref.light,\n rest = _objectWithoutProperties(_ref, _excluded);\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var layoutClassName = getPrefixCls('pro-field-cascader');\n var _useFieldFetchData = useFieldFetchData(rest),\n _useFieldFetchData2 = _slicedToArray(_useFieldFetchData, 3),\n loading = _useFieldFetchData2[0],\n options = _useFieldFetchData2[1],\n _fetchData = _useFieldFetchData2[2];\n var intl = useIntl();\n var cascaderRef = useRef();\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n open = _useState2[0],\n setOpen = _useState2[1];\n useImperativeHandle(ref, function () {\n return _objectSpread(_objectSpread({}, cascaderRef.current || {}), {}, {\n fetchData: function fetchData(keyWord) {\n return _fetchData(keyWord);\n }\n });\n }, [_fetchData]);\n var optionsValueEnum = useMemo(function () {\n var _rest$fieldProps;\n if (mode !== 'read') return;\n /**\n * Support cascader fieldNames\n *\n * @see https://ant.design/components/cascader-cn/#header\n */\n var _ref2 = ((_rest$fieldProps = rest.fieldProps) === null || _rest$fieldProps === void 0 ? void 0 : _rest$fieldProps.fieldNames) || {},\n _ref2$value = _ref2.value,\n valuePropsName = _ref2$value === void 0 ? 'value' : _ref2$value,\n _ref2$label = _ref2.label,\n labelPropsName = _ref2$label === void 0 ? 'label' : _ref2$label,\n _ref2$children = _ref2.children,\n childrenPropsName = _ref2$children === void 0 ? 'children' : _ref2$children;\n var valuesMap = new Map();\n var traverseOptions = function traverseOptions(_options) {\n if (!(_options !== null && _options !== void 0 && _options.length)) {\n return valuesMap;\n }\n var length = _options.length;\n var i = 0;\n while (i < length) {\n var cur = _options[i++];\n valuesMap.set(cur[valuePropsName], cur[labelPropsName]);\n traverseOptions(cur[childrenPropsName]);\n }\n return valuesMap;\n };\n return traverseOptions(options);\n }, [mode, options, (_rest$fieldProps2 = rest.fieldProps) === null || _rest$fieldProps2 === void 0 ? void 0 : _rest$fieldProps2.fieldNames]);\n if (mode === 'read') {\n var dom = /*#__PURE__*/_jsx(_Fragment, {\n children: proFieldParsingText(rest.text, objectToMap(rest.valueEnum || optionsValueEnum))\n });\n if (render) {\n var _render;\n return (_render = render(rest.text, _objectSpread({\n mode: mode\n }, rest.fieldProps), dom)) !== null && _render !== void 0 ? _render : null;\n }\n return dom;\n }\n if (mode === 'edit') {\n var _rest$fieldProps3, _rest$fieldProps5;\n var _dom = /*#__PURE__*/_jsx(Cascader, _objectSpread(_objectSpread(_objectSpread({}, compatibleBorder(!light)), {}, {\n ref: cascaderRef,\n open: open,\n suffixIcon: loading ? /*#__PURE__*/_jsx(LoadingOutlined, {}) : undefined,\n placeholder: intl.getMessage('tableForm.selectPlaceholder', '请选择'),\n allowClear: ((_rest$fieldProps3 = rest.fieldProps) === null || _rest$fieldProps3 === void 0 ? void 0 : _rest$fieldProps3.allowClear) !== false\n }, rest.fieldProps), {}, {\n onDropdownVisibleChange: function onDropdownVisibleChange(isOpen) {\n var _rest$fieldProps4, _rest$fieldProps4$onD;\n rest === null || rest === void 0 || (_rest$fieldProps4 = rest.fieldProps) === null || _rest$fieldProps4 === void 0 || (_rest$fieldProps4$onD = _rest$fieldProps4.onDropdownVisibleChange) === null || _rest$fieldProps4$onD === void 0 || _rest$fieldProps4$onD.call(_rest$fieldProps4, isOpen);\n setOpen(isOpen);\n },\n className: classNames((_rest$fieldProps5 = rest.fieldProps) === null || _rest$fieldProps5 === void 0 ? void 0 : _rest$fieldProps5.className, layoutClassName),\n options: options\n }));\n if (renderFormItem) {\n var _renderFormItem;\n _dom = (_renderFormItem = renderFormItem(rest.text, _objectSpread(_objectSpread({\n mode: mode\n }, rest.fieldProps), {}, {\n options: options,\n loading: loading\n }), _dom)) !== null && _renderFormItem !== void 0 ? _renderFormItem : null;\n }\n if (light) {\n var _rest$fieldProps6 = rest.fieldProps,\n disabled = _rest$fieldProps6.disabled,\n value = _rest$fieldProps6.value;\n var notEmpty = !!value && (value === null || value === void 0 ? void 0 : value.length) !== 0;\n return /*#__PURE__*/_jsx(FieldLabel, {\n label: label,\n disabled: disabled,\n bordered: rest.bordered,\n value: notEmpty || open ? _dom : null,\n style: notEmpty ? {\n paddingInlineEnd: 0\n } : undefined,\n allowClear: false,\n downIcon: notEmpty || open ? false : undefined,\n onClick: function onClick() {\n var _rest$fieldProps7, _rest$fieldProps7$onD;\n setOpen(true);\n rest === null || rest === void 0 || (_rest$fieldProps7 = rest.fieldProps) === null || _rest$fieldProps7 === void 0 || (_rest$fieldProps7$onD = _rest$fieldProps7.onDropdownVisibleChange) === null || _rest$fieldProps7$onD === void 0 || _rest$fieldProps7$onD.call(_rest$fieldProps7, true);\n }\n });\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldCascader);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"layout\", \"renderFormItem\", \"mode\", \"render\"],\n _excluded2 = [\"fieldNames\"];\nimport { objectToMap, proFieldParsingText, useStyle } from '@ant-design/pro-utils';\nimport { Checkbox, ConfigProvider, Form, Spin } from 'antd';\nimport classNames from 'classnames';\nimport React, { useContext, useImperativeHandle, useRef } from 'react';\nimport { useFieldFetchData } from \"../Select\";\n// 兼容代码-----------\nimport { useToken } from '@ant-design/pro-provider';\nimport \"antd/es/checkbox/style\";\n//----------------------\n/**\n * 多选组件\n *\n * @param param0\n * @param ref\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar FieldCheckbox = function FieldCheckbox(_ref, ref) {\n var _Form$Item, _Form$Item$useStatus;\n var _ref$layout = _ref.layout,\n layout = _ref$layout === void 0 ? 'horizontal' : _ref$layout,\n renderFormItem = _ref.renderFormItem,\n mode = _ref.mode,\n render = _ref.render,\n rest = _objectWithoutProperties(_ref, _excluded);\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var layoutClassName = getPrefixCls('pro-field-checkbox');\n var status = (_Form$Item = Form.Item) === null || _Form$Item === void 0 || (_Form$Item$useStatus = _Form$Item.useStatus) === null || _Form$Item$useStatus === void 0 ? void 0 : _Form$Item$useStatus.call(_Form$Item);\n var _useFieldFetchData = useFieldFetchData(rest),\n _useFieldFetchData2 = _slicedToArray(_useFieldFetchData, 3),\n loading = _useFieldFetchData2[0],\n options = _useFieldFetchData2[1],\n _fetchData = _useFieldFetchData2[2];\n // css\n var _useStyle = useStyle('Checkbox', function (token) {\n return _defineProperty({}, \".\".concat(layoutClassName), {\n '&-error': {\n span: {\n color: token.colorError\n }\n },\n '&-warning': {\n span: {\n color: token.colorWarning\n }\n },\n '&-vertical': _defineProperty(_defineProperty(_defineProperty({}, \"&\".concat(token.antCls, \"-checkbox-group\"), {\n display: 'inline-block'\n }), \"\".concat(token.antCls, \"-checkbox-wrapper+\").concat(token.antCls, \"-checkbox-wrapper\"), {\n 'margin-inline-start': '0 !important'\n }), \"\".concat(token.antCls, \"-checkbox-group-item\"), {\n display: 'flex',\n marginInlineEnd: 0\n })\n });\n }),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n var _useToken = useToken === null || useToken === void 0 ? void 0 : useToken(),\n token = _useToken.token;\n var checkBoxRef = useRef();\n useImperativeHandle(ref, function () {\n return _objectSpread(_objectSpread({}, checkBoxRef.current || {}), {}, {\n fetchData: function fetchData(keyWord) {\n return _fetchData(keyWord);\n }\n });\n }, [_fetchData]);\n if (loading) {\n return /*#__PURE__*/_jsx(Spin, {\n size: \"small\"\n });\n }\n if (mode === 'read') {\n var optionsValueEnum = options !== null && options !== void 0 && options.length ? options === null || options === void 0 ? void 0 : options.reduce(function (pre, cur) {\n var _ref3;\n return _objectSpread(_objectSpread({}, pre), {}, _defineProperty({}, (_ref3 = cur.value) !== null && _ref3 !== void 0 ? _ref3 : '', cur.label));\n }, {}) : undefined;\n var dom = proFieldParsingText(rest.text, objectToMap(rest.valueEnum || optionsValueEnum));\n if (render) {\n var _render;\n return (_render = render(rest.text, _objectSpread({\n mode: mode\n }, rest.fieldProps), /*#__PURE__*/_jsx(_Fragment, {\n children: dom\n }))) !== null && _render !== void 0 ? _render : null;\n }\n return /*#__PURE__*/_jsx(\"div\", {\n style: {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: token.marginSM\n },\n children: dom\n });\n }\n if (mode === 'edit') {\n var _rest$fieldProps;\n var _ref4 = rest.fieldProps || {},\n fieldNames = _ref4.fieldNames,\n restFieldProps = _objectWithoutProperties(_ref4, _excluded2);\n var _dom = wrapSSR(\n /*#__PURE__*/\n //@ts-ignore\n _jsx(Checkbox.Group, _objectSpread(_objectSpread({}, restFieldProps), {}, {\n className: classNames((_rest$fieldProps = rest.fieldProps) === null || _rest$fieldProps === void 0 ? void 0 : _rest$fieldProps.className, hashId, \"\".concat(layoutClassName, \"-\").concat(layout), _defineProperty(_defineProperty({}, \"\".concat(layoutClassName, \"-error\"), (status === null || status === void 0 ? void 0 : status.status) === 'error'), \"\".concat(layoutClassName, \"-warning\"), (status === null || status === void 0 ? void 0 : status.status) === 'warning')),\n options: options\n })));\n if (renderFormItem) {\n var _renderFormItem;\n return (_renderFormItem = renderFormItem(rest.text, _objectSpread(_objectSpread({\n mode: mode\n }, rest.fieldProps), {}, {\n options: options,\n loading: loading\n }), _dom)) !== null && _renderFormItem !== void 0 ? _renderFormItem : null;\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldCheckbox);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { Input } from 'antd';\nimport React from 'react';\n// 兼容代码-----------\nimport { proTheme } from '@ant-design/pro-provider';\nimport \"antd/es/input/style\";\n//----------------------\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar languageFormat = function languageFormat(text, language) {\n if (typeof text !== 'string') {\n return text;\n }\n try {\n if (language === 'json') {\n return JSON.stringify(JSON.parse(text), null, 2);\n }\n } catch (error) {\n // console.log(error)\n }\n return text;\n};\n\n/**\n * 代码片段组件 这个组件为了显示简单的配置,复杂的请使用更加重型的组件\n *\n * @param\n */\nvar FieldCode = function FieldCode(_ref, ref) {\n var text = _ref.text,\n mode = _ref.mode,\n render = _ref.render,\n _ref$language = _ref.language,\n language = _ref$language === void 0 ? 'text' : _ref$language,\n renderFormItem = _ref.renderFormItem,\n plain = _ref.plain,\n fieldProps = _ref.fieldProps;\n var code = languageFormat(text, language);\n var _proTheme$useToken = proTheme.useToken(),\n token = _proTheme$useToken.token;\n if (mode === 'read') {\n var dom = /*#__PURE__*/_jsx(\"pre\", _objectSpread(_objectSpread({\n ref: ref\n }, fieldProps), {}, {\n style: _objectSpread({\n padding: 16,\n overflow: 'auto',\n fontSize: '85%',\n lineHeight: 1.45,\n color: token.colorTextSecondary,\n fontFamily: token.fontFamilyCode,\n backgroundColor: 'rgba(150, 150, 150, 0.1)',\n borderRadius: 3,\n width: 'min-content'\n }, fieldProps.style),\n children: /*#__PURE__*/_jsx(\"code\", {\n children: code\n })\n }));\n if (render) {\n return render(code, _objectSpread(_objectSpread({\n mode: mode\n }, fieldProps), {}, {\n ref: ref\n }), dom);\n }\n return dom;\n }\n if (mode === 'edit' || mode === 'update') {\n fieldProps.value = code;\n var _dom = /*#__PURE__*/_jsx(Input.TextArea, _objectSpread(_objectSpread({\n rows: 5\n }, fieldProps), {}, {\n ref: ref\n }));\n if (plain) {\n _dom = /*#__PURE__*/_jsx(Input, _objectSpread(_objectSpread({}, fieldProps), {}, {\n ref: ref\n }));\n }\n if (renderFormItem) {\n var _renderFormItem;\n return (_renderFormItem = renderFormItem(code, _objectSpread(_objectSpread({\n mode: mode\n }, fieldProps), {}, {\n ref: ref\n }), _dom)) !== null && _renderFormItem !== void 0 ? _renderFormItem : null;\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldCode);","import React from 'react';\nexport const PanelPickerContext = /*#__PURE__*/React.createContext({});\nexport const PanelPresetsContext = /*#__PURE__*/React.createContext({});","\"use client\";\n\nimport React from 'react';\nimport { generateColor } from '../util';\nconst ColorClear = ({\n prefixCls,\n value,\n onChange\n}) => {\n const handleClick = () => {\n if (onChange && value && !value.cleared) {\n const hsba = value.toHsb();\n hsba.a = 0;\n const genColor = generateColor(hsba);\n genColor.cleared = true;\n onChange(genColor);\n }\n };\n return /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-clear`,\n onClick: handleClick\n });\n};\nexport default ColorClear;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useState } from 'react';\nimport isMobile from \"../isMobile\";\nimport useLayoutEffect from \"./useLayoutEffect\";\n\n/**\n * Hook to detect if the user is on a mobile device\n * Notice that this hook will only detect the device type in effect, so it will always be false in server side\n */\nvar useMobile = function useMobile() {\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n mobile = _useState2[0],\n setMobile = _useState2[1];\n useLayoutEffect(function () {\n setMobile(isMobile());\n }, []);\n return mobile;\n};\nexport default useMobile;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n/* eslint-disable react/no-unknown-property */\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport useMobile from \"rc-util/es/hooks/useMobile\";\nimport raf from \"rc-util/es/raf\";\n\n/**\n * When click and hold on a button - the speed of auto changing the value.\n */\nvar STEP_INTERVAL = 200;\n\n/**\n * When click and hold on a button - the delay before auto changing the value.\n */\nvar STEP_DELAY = 600;\nexport default function StepHandler(_ref) {\n var prefixCls = _ref.prefixCls,\n upNode = _ref.upNode,\n downNode = _ref.downNode,\n upDisabled = _ref.upDisabled,\n downDisabled = _ref.downDisabled,\n onStep = _ref.onStep;\n // ======================== Step ========================\n var stepTimeoutRef = React.useRef();\n var frameIds = React.useRef([]);\n var onStepRef = React.useRef();\n onStepRef.current = onStep;\n var onStopStep = function onStopStep() {\n clearTimeout(stepTimeoutRef.current);\n };\n\n // We will interval update step when hold mouse down\n var onStepMouseDown = function onStepMouseDown(e, up) {\n e.preventDefault();\n onStopStep();\n onStepRef.current(up);\n\n // Loop step for interval\n function loopStep() {\n onStepRef.current(up);\n stepTimeoutRef.current = setTimeout(loopStep, STEP_INTERVAL);\n }\n\n // First time press will wait some time to trigger loop step update\n stepTimeoutRef.current = setTimeout(loopStep, STEP_DELAY);\n };\n React.useEffect(function () {\n return function () {\n onStopStep();\n frameIds.current.forEach(function (id) {\n return raf.cancel(id);\n });\n };\n }, []);\n\n // ======================= Render =======================\n var isMobile = useMobile();\n if (isMobile) {\n return null;\n }\n var handlerClassName = \"\".concat(prefixCls, \"-handler\");\n var upClassName = classNames(handlerClassName, \"\".concat(handlerClassName, \"-up\"), _defineProperty({}, \"\".concat(handlerClassName, \"-up-disabled\"), upDisabled));\n var downClassName = classNames(handlerClassName, \"\".concat(handlerClassName, \"-down\"), _defineProperty({}, \"\".concat(handlerClassName, \"-down-disabled\"), downDisabled));\n\n // fix: https://github.com/ant-design/ant-design/issues/43088\n // In Safari, When we fire onmousedown and onmouseup events in quick succession, \n // there may be a problem that the onmouseup events are executed first, \n // resulting in a disordered program execution.\n // So, we need to use requestAnimationFrame to ensure that the onmouseup event is executed after the onmousedown event.\n var safeOnStopStep = function safeOnStopStep() {\n return frameIds.current.push(raf(onStopStep));\n };\n var sharedHandlerProps = {\n unselectable: 'on',\n role: 'button',\n onMouseUp: safeOnStopStep,\n onMouseLeave: safeOnStopStep\n };\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(handlerClassName, \"-wrap\")\n }, /*#__PURE__*/React.createElement(\"span\", _extends({}, sharedHandlerProps, {\n onMouseDown: function onMouseDown(e) {\n onStepMouseDown(e, true);\n },\n \"aria-label\": \"Increase Value\",\n \"aria-disabled\": upDisabled,\n className: upClassName\n }), upNode || /*#__PURE__*/React.createElement(\"span\", {\n unselectable: \"on\",\n className: \"\".concat(prefixCls, \"-handler-up-inner\")\n })), /*#__PURE__*/React.createElement(\"span\", _extends({}, sharedHandlerProps, {\n onMouseDown: function onMouseDown(e) {\n onStepMouseDown(e, false);\n },\n \"aria-label\": \"Decrease Value\",\n \"aria-disabled\": downDisabled,\n className: downClassName\n }), downNode || /*#__PURE__*/React.createElement(\"span\", {\n unselectable: \"on\",\n className: \"\".concat(prefixCls, \"-handler-down-inner\")\n })));\n}","import { trimNumber, num2str } from '@rc-component/mini-decimal';\nexport function getDecupleSteps(step) {\n var stepStr = typeof step === 'number' ? num2str(step) : trimNumber(step).fullStr;\n var hasPoint = stepStr.includes('.');\n if (!hasPoint) {\n return step + '0';\n }\n return trimNumber(stepStr.replace(/(\\d)\\.(\\d)/g, '$1$2.')).fullStr;\n}","import { useRef, useEffect } from 'react';\nimport raf from \"rc-util/es/raf\";\n\n/**\n * Always trigger latest once when call multiple time\n */\nexport default (function () {\n var idRef = useRef(0);\n var cleanUp = function cleanUp() {\n raf.cancel(idRef.current);\n };\n useEffect(function () {\n return cleanUp;\n }, []);\n return function (callback) {\n cleanUp();\n idRef.current = raf(function () {\n callback();\n });\n };\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"prefixCls\", \"className\", \"style\", \"min\", \"max\", \"step\", \"defaultValue\", \"value\", \"disabled\", \"readOnly\", \"upHandler\", \"downHandler\", \"keyboard\", \"changeOnWheel\", \"controls\", \"classNames\", \"stringMode\", \"parser\", \"formatter\", \"precision\", \"decimalSeparator\", \"onChange\", \"onInput\", \"onPressEnter\", \"onStep\", \"changeOnBlur\", \"domRef\"],\n _excluded2 = [\"disabled\", \"style\", \"prefixCls\", \"value\", \"prefix\", \"suffix\", \"addonBefore\", \"addonAfter\", \"className\", \"classNames\"];\nimport getMiniDecimal, { getNumberPrecision, num2str, toFixed, validateNumber } from '@rc-component/mini-decimal';\nimport clsx from 'classnames';\nimport { BaseInput } from 'rc-input';\nimport { useLayoutUpdateEffect } from \"rc-util/es/hooks/useLayoutEffect\";\nimport proxyObject from \"rc-util/es/proxyObject\";\nimport { composeRef } from \"rc-util/es/ref\";\nimport * as React from 'react';\nimport useCursor from \"./hooks/useCursor\";\nimport StepHandler from \"./StepHandler\";\nimport { getDecupleSteps } from \"./utils/numberUtil\";\nimport { triggerFocus } from \"rc-input/es/utils/commonUtils\";\nimport useFrame from \"./hooks/useFrame\";\n/**\n * We support `stringMode` which need handle correct type when user call in onChange\n * format max or min value\n * 1. if isInvalid return null\n * 2. if precision is undefined, return decimal\n * 3. format with precision\n * I. if max > 0, round down with precision. Example: max= 3.5, precision=0 afterFormat: 3\n * II. if max < 0, round up with precision. Example: max= -3.5, precision=0 afterFormat: -4\n * III. if min > 0, round up with precision. Example: min= 3.5, precision=0 afterFormat: 4\n * IV. if min < 0, round down with precision. Example: max= -3.5, precision=0 afterFormat: -3\n */\nvar getDecimalValue = function getDecimalValue(stringMode, decimalValue) {\n if (stringMode || decimalValue.isEmpty()) {\n return decimalValue.toString();\n }\n return decimalValue.toNumber();\n};\nvar getDecimalIfValidate = function getDecimalIfValidate(value) {\n var decimal = getMiniDecimal(value);\n return decimal.isInvalidate() ? null : decimal;\n};\nvar InternalInputNumber = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var prefixCls = props.prefixCls,\n className = props.className,\n style = props.style,\n min = props.min,\n max = props.max,\n _props$step = props.step,\n step = _props$step === void 0 ? 1 : _props$step,\n defaultValue = props.defaultValue,\n value = props.value,\n disabled = props.disabled,\n readOnly = props.readOnly,\n upHandler = props.upHandler,\n downHandler = props.downHandler,\n keyboard = props.keyboard,\n _props$changeOnWheel = props.changeOnWheel,\n changeOnWheel = _props$changeOnWheel === void 0 ? false : _props$changeOnWheel,\n _props$controls = props.controls,\n controls = _props$controls === void 0 ? true : _props$controls,\n classNames = props.classNames,\n stringMode = props.stringMode,\n parser = props.parser,\n formatter = props.formatter,\n precision = props.precision,\n decimalSeparator = props.decimalSeparator,\n onChange = props.onChange,\n onInput = props.onInput,\n onPressEnter = props.onPressEnter,\n onStep = props.onStep,\n _props$changeOnBlur = props.changeOnBlur,\n changeOnBlur = _props$changeOnBlur === void 0 ? true : _props$changeOnBlur,\n domRef = props.domRef,\n inputProps = _objectWithoutProperties(props, _excluded);\n var inputClassName = \"\".concat(prefixCls, \"-input\");\n var inputRef = React.useRef(null);\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n focus = _React$useState2[0],\n setFocus = _React$useState2[1];\n var userTypingRef = React.useRef(false);\n var compositionRef = React.useRef(false);\n var shiftKeyRef = React.useRef(false);\n\n // ============================ Value =============================\n // Real value control\n var _React$useState3 = React.useState(function () {\n return getMiniDecimal(value !== null && value !== void 0 ? value : defaultValue);\n }),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n decimalValue = _React$useState4[0],\n setDecimalValue = _React$useState4[1];\n function setUncontrolledDecimalValue(newDecimal) {\n if (value === undefined) {\n setDecimalValue(newDecimal);\n }\n }\n\n // ====================== Parser & Formatter ======================\n /**\n * `precision` is used for formatter & onChange.\n * It will auto generate by `value` & `step`.\n * But it will not block user typing.\n *\n * Note: Auto generate `precision` is used for legacy logic.\n * We should remove this since we already support high precision with BigInt.\n *\n * @param number Provide which number should calculate precision\n * @param userTyping Change by user typing\n */\n var getPrecision = React.useCallback(function (numStr, userTyping) {\n if (userTyping) {\n return undefined;\n }\n if (precision >= 0) {\n return precision;\n }\n return Math.max(getNumberPrecision(numStr), getNumberPrecision(step));\n }, [precision, step]);\n\n // >>> Parser\n var mergedParser = React.useCallback(function (num) {\n var numStr = String(num);\n if (parser) {\n return parser(numStr);\n }\n var parsedStr = numStr;\n if (decimalSeparator) {\n parsedStr = parsedStr.replace(decimalSeparator, '.');\n }\n\n // [Legacy] We still support auto convert `$ 123,456` to `123456`\n return parsedStr.replace(/[^\\w.-]+/g, '');\n }, [parser, decimalSeparator]);\n\n // >>> Formatter\n var inputValueRef = React.useRef('');\n var mergedFormatter = React.useCallback(function (number, userTyping) {\n if (formatter) {\n return formatter(number, {\n userTyping: userTyping,\n input: String(inputValueRef.current)\n });\n }\n var str = typeof number === 'number' ? num2str(number) : number;\n\n // User typing will not auto format with precision directly\n if (!userTyping) {\n var mergedPrecision = getPrecision(str, userTyping);\n if (validateNumber(str) && (decimalSeparator || mergedPrecision >= 0)) {\n // Separator\n var separatorStr = decimalSeparator || '.';\n str = toFixed(str, separatorStr, mergedPrecision);\n }\n }\n return str;\n }, [formatter, getPrecision, decimalSeparator]);\n\n // ========================== InputValue ==========================\n /**\n * Input text value control\n *\n * User can not update input content directly. It updates with follow rules by priority:\n * 1. controlled `value` changed\n * * [SPECIAL] Typing like `1.` should not immediately convert to `1`\n * 2. User typing with format (not precision)\n * 3. Blur or Enter trigger revalidate\n */\n var _React$useState5 = React.useState(function () {\n var initValue = defaultValue !== null && defaultValue !== void 0 ? defaultValue : value;\n if (decimalValue.isInvalidate() && ['string', 'number'].includes(_typeof(initValue))) {\n return Number.isNaN(initValue) ? '' : initValue;\n }\n return mergedFormatter(decimalValue.toString(), false);\n }),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n inputValue = _React$useState6[0],\n setInternalInputValue = _React$useState6[1];\n inputValueRef.current = inputValue;\n\n // Should always be string\n function setInputValue(newValue, userTyping) {\n setInternalInputValue(mergedFormatter(\n // Invalidate number is sometime passed by external control, we should let it go\n // Otherwise is controlled by internal interactive logic which check by userTyping\n // You can ref 'show limited value when input is not focused' test for more info.\n newValue.isInvalidate() ? newValue.toString(false) : newValue.toString(!userTyping), userTyping));\n }\n\n // >>> Max & Min limit\n var maxDecimal = React.useMemo(function () {\n return getDecimalIfValidate(max);\n }, [max, precision]);\n var minDecimal = React.useMemo(function () {\n return getDecimalIfValidate(min);\n }, [min, precision]);\n var upDisabled = React.useMemo(function () {\n if (!maxDecimal || !decimalValue || decimalValue.isInvalidate()) {\n return false;\n }\n return maxDecimal.lessEquals(decimalValue);\n }, [maxDecimal, decimalValue]);\n var downDisabled = React.useMemo(function () {\n if (!minDecimal || !decimalValue || decimalValue.isInvalidate()) {\n return false;\n }\n return decimalValue.lessEquals(minDecimal);\n }, [minDecimal, decimalValue]);\n\n // Cursor controller\n var _useCursor = useCursor(inputRef.current, focus),\n _useCursor2 = _slicedToArray(_useCursor, 2),\n recordCursor = _useCursor2[0],\n restoreCursor = _useCursor2[1];\n\n // ============================= Data =============================\n /**\n * Find target value closet within range.\n * e.g. [11, 28]:\n * 3 => 11\n * 23 => 23\n * 99 => 28\n */\n var getRangeValue = function getRangeValue(target) {\n // target > max\n if (maxDecimal && !target.lessEquals(maxDecimal)) {\n return maxDecimal;\n }\n\n // target < min\n if (minDecimal && !minDecimal.lessEquals(target)) {\n return minDecimal;\n }\n return null;\n };\n\n /**\n * Check value is in [min, max] range\n */\n var isInRange = function isInRange(target) {\n return !getRangeValue(target);\n };\n\n /**\n * Trigger `onChange` if value validated and not equals of origin.\n * Return the value that re-align in range.\n */\n var triggerValueUpdate = function triggerValueUpdate(newValue, userTyping) {\n var updateValue = newValue;\n var isRangeValidate = isInRange(updateValue) || updateValue.isEmpty();\n\n // Skip align value when trigger value is empty.\n // We just trigger onChange(null)\n // This should not block user typing\n if (!updateValue.isEmpty() && !userTyping) {\n // Revert value in range if needed\n updateValue = getRangeValue(updateValue) || updateValue;\n isRangeValidate = true;\n }\n if (!readOnly && !disabled && isRangeValidate) {\n var numStr = updateValue.toString();\n var mergedPrecision = getPrecision(numStr, userTyping);\n if (mergedPrecision >= 0) {\n updateValue = getMiniDecimal(toFixed(numStr, '.', mergedPrecision));\n\n // When to fixed. The value may out of min & max range.\n // 4 in [0, 3.8] => 3.8 => 4 (toFixed)\n if (!isInRange(updateValue)) {\n updateValue = getMiniDecimal(toFixed(numStr, '.', mergedPrecision, true));\n }\n }\n\n // Trigger event\n if (!updateValue.equals(decimalValue)) {\n setUncontrolledDecimalValue(updateValue);\n onChange === null || onChange === void 0 || onChange(updateValue.isEmpty() ? null : getDecimalValue(stringMode, updateValue));\n\n // Reformat input if value is not controlled\n if (value === undefined) {\n setInputValue(updateValue, userTyping);\n }\n }\n return updateValue;\n }\n return decimalValue;\n };\n\n // ========================== User Input ==========================\n var onNextPromise = useFrame();\n\n // >>> Collect input value\n var collectInputValue = function collectInputValue(inputStr) {\n recordCursor();\n\n // Update inputValue in case input can not parse as number\n // Refresh ref value immediately since it may used by formatter\n inputValueRef.current = inputStr;\n setInternalInputValue(inputStr);\n\n // Parse number\n if (!compositionRef.current) {\n var finalValue = mergedParser(inputStr);\n var finalDecimal = getMiniDecimal(finalValue);\n if (!finalDecimal.isNaN()) {\n triggerValueUpdate(finalDecimal, true);\n }\n }\n\n // Trigger onInput later to let user customize value if they want to handle something after onChange\n onInput === null || onInput === void 0 || onInput(inputStr);\n\n // optimize for chinese input experience\n // https://github.com/ant-design/ant-design/issues/8196\n onNextPromise(function () {\n var nextInputStr = inputStr;\n if (!parser) {\n nextInputStr = inputStr.replace(/。/g, '.');\n }\n if (nextInputStr !== inputStr) {\n collectInputValue(nextInputStr);\n }\n });\n };\n\n // >>> Composition\n var onCompositionStart = function onCompositionStart() {\n compositionRef.current = true;\n };\n var onCompositionEnd = function onCompositionEnd() {\n compositionRef.current = false;\n collectInputValue(inputRef.current.value);\n };\n\n // >>> Input\n var onInternalInput = function onInternalInput(e) {\n collectInputValue(e.target.value);\n };\n\n // ============================= Step =============================\n var onInternalStep = function onInternalStep(up) {\n var _inputRef$current;\n // Ignore step since out of range\n if (up && upDisabled || !up && downDisabled) {\n return;\n }\n\n // Clear typing status since it may be caused by up & down key.\n // We should sync with input value.\n userTypingRef.current = false;\n var stepDecimal = getMiniDecimal(shiftKeyRef.current ? getDecupleSteps(step) : step);\n if (!up) {\n stepDecimal = stepDecimal.negate();\n }\n var target = (decimalValue || getMiniDecimal(0)).add(stepDecimal.toString());\n var updatedValue = triggerValueUpdate(target, false);\n onStep === null || onStep === void 0 || onStep(getDecimalValue(stringMode, updatedValue), {\n offset: shiftKeyRef.current ? getDecupleSteps(step) : step,\n type: up ? 'up' : 'down'\n });\n (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.focus();\n };\n\n // ============================ Flush =============================\n /**\n * Flush current input content to trigger value change & re-formatter input if needed.\n * This will always flush input value for update.\n * If it's invalidate, will fallback to last validate value.\n */\n var flushInputValue = function flushInputValue(userTyping) {\n var parsedValue = getMiniDecimal(mergedParser(inputValue));\n var formatValue;\n if (!parsedValue.isNaN()) {\n // Only validate value or empty value can be re-fill to inputValue\n // Reassign the formatValue within ranged of trigger control\n formatValue = triggerValueUpdate(parsedValue, userTyping);\n } else {\n formatValue = triggerValueUpdate(decimalValue, userTyping);\n }\n if (value !== undefined) {\n // Reset back with controlled value first\n setInputValue(decimalValue, false);\n } else if (!formatValue.isNaN()) {\n // Reset input back since no validate value\n setInputValue(formatValue, false);\n }\n };\n\n // Solve the issue of the event triggering sequence when entering numbers in chinese input (Safari)\n var onBeforeInput = function onBeforeInput() {\n userTypingRef.current = true;\n };\n var onKeyDown = function onKeyDown(event) {\n var key = event.key,\n shiftKey = event.shiftKey;\n userTypingRef.current = true;\n shiftKeyRef.current = shiftKey;\n if (key === 'Enter') {\n if (!compositionRef.current) {\n userTypingRef.current = false;\n }\n flushInputValue(false);\n onPressEnter === null || onPressEnter === void 0 || onPressEnter(event);\n }\n if (keyboard === false) {\n return;\n }\n\n // Do step\n if (!compositionRef.current && ['Up', 'ArrowUp', 'Down', 'ArrowDown'].includes(key)) {\n onInternalStep(key === 'Up' || key === 'ArrowUp');\n event.preventDefault();\n }\n };\n var onKeyUp = function onKeyUp() {\n userTypingRef.current = false;\n shiftKeyRef.current = false;\n };\n React.useEffect(function () {\n if (changeOnWheel && focus) {\n var onWheel = function onWheel(event) {\n // moving mouse wheel rises wheel event with deltaY < 0\n // scroll value grows from top to bottom, as screen Y coordinate\n onInternalStep(event.deltaY < 0);\n event.preventDefault();\n };\n var input = inputRef.current;\n if (input) {\n // React onWheel is passive and we can't preventDefault() in it.\n // That's why we should subscribe with DOM listener\n // https://stackoverflow.com/questions/63663025/react-onwheel-handler-cant-preventdefault-because-its-a-passive-event-listenev\n input.addEventListener('wheel', onWheel, {\n passive: false\n });\n return function () {\n return input.removeEventListener('wheel', onWheel);\n };\n }\n }\n });\n\n // >>> Focus & Blur\n var onBlur = function onBlur() {\n if (changeOnBlur) {\n flushInputValue(false);\n }\n setFocus(false);\n userTypingRef.current = false;\n };\n\n // ========================== Controlled ==========================\n // Input by precision & formatter\n useLayoutUpdateEffect(function () {\n if (!decimalValue.isInvalidate()) {\n setInputValue(decimalValue, false);\n }\n }, [precision, formatter]);\n\n // Input by value\n useLayoutUpdateEffect(function () {\n var newValue = getMiniDecimal(value);\n setDecimalValue(newValue);\n var currentParsedValue = getMiniDecimal(mergedParser(inputValue));\n\n // When user typing from `1.2` to `1.`, we should not convert to `1` immediately.\n // But let it go if user set `formatter`\n if (!newValue.equals(currentParsedValue) || !userTypingRef.current || formatter) {\n // Update value as effect\n setInputValue(newValue, userTypingRef.current);\n }\n }, [value]);\n\n // ============================ Cursor ============================\n useLayoutUpdateEffect(function () {\n if (formatter) {\n restoreCursor();\n }\n }, [inputValue]);\n\n // ============================ Render ============================\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: domRef,\n className: clsx(prefixCls, className, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-focused\"), focus), \"\".concat(prefixCls, \"-disabled\"), disabled), \"\".concat(prefixCls, \"-readonly\"), readOnly), \"\".concat(prefixCls, \"-not-a-number\"), decimalValue.isNaN()), \"\".concat(prefixCls, \"-out-of-range\"), !decimalValue.isInvalidate() && !isInRange(decimalValue))),\n style: style,\n onFocus: function onFocus() {\n setFocus(true);\n },\n onBlur: onBlur,\n onKeyDown: onKeyDown,\n onKeyUp: onKeyUp,\n onCompositionStart: onCompositionStart,\n onCompositionEnd: onCompositionEnd,\n onBeforeInput: onBeforeInput\n }, controls && /*#__PURE__*/React.createElement(StepHandler, {\n prefixCls: prefixCls,\n upNode: upHandler,\n downNode: downHandler,\n upDisabled: upDisabled,\n downDisabled: downDisabled,\n onStep: onInternalStep\n }), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(inputClassName, \"-wrap\")\n }, /*#__PURE__*/React.createElement(\"input\", _extends({\n autoComplete: \"off\",\n role: \"spinbutton\",\n \"aria-valuemin\": min,\n \"aria-valuemax\": max,\n \"aria-valuenow\": decimalValue.isInvalidate() ? null : decimalValue.toString(),\n step: step\n }, inputProps, {\n ref: composeRef(inputRef, ref),\n className: inputClassName,\n value: inputValue,\n onChange: onInternalInput,\n disabled: disabled,\n readOnly: readOnly\n }))));\n});\nvar InputNumber = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var disabled = props.disabled,\n style = props.style,\n _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'rc-input-number' : _props$prefixCls,\n value = props.value,\n prefix = props.prefix,\n suffix = props.suffix,\n addonBefore = props.addonBefore,\n addonAfter = props.addonAfter,\n className = props.className,\n classNames = props.classNames,\n rest = _objectWithoutProperties(props, _excluded2);\n var holderRef = React.useRef(null);\n var inputNumberDomRef = React.useRef(null);\n var inputFocusRef = React.useRef(null);\n var focus = function focus(option) {\n if (inputFocusRef.current) {\n triggerFocus(inputFocusRef.current, option);\n }\n };\n React.useImperativeHandle(ref, function () {\n return proxyObject(inputFocusRef.current, {\n focus: focus,\n nativeElement: holderRef.current.nativeElement || inputNumberDomRef.current\n });\n });\n return /*#__PURE__*/React.createElement(BaseInput, {\n className: className,\n triggerFocus: focus,\n prefixCls: prefixCls,\n value: value,\n disabled: disabled,\n style: style,\n prefix: prefix,\n suffix: suffix,\n addonAfter: addonAfter,\n addonBefore: addonBefore,\n classNames: classNames,\n components: {\n affixWrapper: 'div',\n groupWrapper: 'div',\n wrapper: 'div',\n groupAddon: 'div'\n },\n ref: holderRef\n }, /*#__PURE__*/React.createElement(InternalInputNumber, _extends({\n prefixCls: prefixCls,\n disabled: disabled,\n ref: inputFocusRef,\n domRef: inputNumberDomRef,\n className: classNames === null || classNames === void 0 ? void 0 : classNames.input\n }, rest)));\n});\nif (process.env.NODE_ENV !== 'production') {\n InputNumber.displayName = 'InputNumber';\n}\nexport default InputNumber;","import { useRef } from 'react';\nimport warning from \"rc-util/es/warning\";\n/**\n * Keep input cursor in the correct position if possible.\n * Is this necessary since we have `formatter` which may mass the content?\n */\nexport default function useCursor(input, focused) {\n var selectionRef = useRef(null);\n function recordCursor() {\n // Record position\n try {\n var start = input.selectionStart,\n end = input.selectionEnd,\n value = input.value;\n var beforeTxt = value.substring(0, start);\n var afterTxt = value.substring(end);\n selectionRef.current = {\n start: start,\n end: end,\n value: value,\n beforeTxt: beforeTxt,\n afterTxt: afterTxt\n };\n } catch (e) {\n // Fix error in Chrome:\n // Failed to read the 'selectionStart' property from 'HTMLInputElement'\n // http://stackoverflow.com/q/21177489/3040605\n }\n }\n\n /**\n * Restore logic:\n * 1. back string same\n * 2. start string same\n */\n function restoreCursor() {\n if (input && selectionRef.current && focused) {\n try {\n var value = input.value;\n var _selectionRef$current = selectionRef.current,\n beforeTxt = _selectionRef$current.beforeTxt,\n afterTxt = _selectionRef$current.afterTxt,\n start = _selectionRef$current.start;\n var startPos = value.length;\n if (value.startsWith(beforeTxt)) {\n startPos = beforeTxt.length;\n } else if (value.endsWith(afterTxt)) {\n startPos = value.length - selectionRef.current.afterTxt.length;\n } else {\n var beforeLastChar = beforeTxt[start - 1];\n var newIndex = value.indexOf(beforeLastChar, start - 1);\n if (newIndex !== -1) {\n startPos = newIndex + 1;\n }\n }\n input.setSelectionRange(startPos, startPos);\n } catch (e) {\n warning(false, \"Something warning of cursor restore. Please fire issue about this: \".concat(e.message));\n }\n }\n }\n return [recordCursor, restoreCursor];\n}","/**\n * Proxy object if environment supported\n */\nexport default function proxyObject(obj, extendProps) {\n if (typeof Proxy !== 'undefined' && obj) {\n return new Proxy(obj, {\n get: function get(target, prop) {\n if (extendProps[prop]) {\n return extendProps[prop];\n }\n\n // Proxy origin property\n var originProp = target[prop];\n return typeof originProp === 'function' ? originProp.bind(target) : originProp;\n }\n });\n }\n return obj;\n}","import { unit } from '@ant-design/cssinjs';\nimport { genBasicInputStyle, genInputGroupStyle, genPlaceholderStyle, initInputToken } from '../../input/style';\nimport { genBorderlessStyle, genFilledGroupStyle, genFilledStyle, genOutlinedGroupStyle, genOutlinedStyle, genUnderlinedStyle } from '../../input/style/variants';\nimport { resetComponent, resetIcon } from '../../style';\nimport { genCompactItemStyle } from '../../style/compact-item';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport { prepareComponentToken } from './token';\nexport const genRadiusStyle = ({\n componentCls,\n borderRadiusSM,\n borderRadiusLG\n}, size) => {\n const borderRadius = size === 'lg' ? borderRadiusLG : borderRadiusSM;\n return {\n [`&-${size}`]: {\n [`${componentCls}-handler-wrap`]: {\n borderStartEndRadius: borderRadius,\n borderEndEndRadius: borderRadius\n },\n [`${componentCls}-handler-up`]: {\n borderStartEndRadius: borderRadius\n },\n [`${componentCls}-handler-down`]: {\n borderEndEndRadius: borderRadius\n }\n }\n };\n};\nconst genInputNumberStyles = token => {\n const {\n componentCls,\n lineWidth,\n lineType,\n borderRadius,\n inputFontSizeSM,\n inputFontSizeLG,\n controlHeightLG,\n controlHeightSM,\n colorError,\n paddingInlineSM,\n paddingBlockSM,\n paddingBlockLG,\n paddingInlineLG,\n colorIcon,\n motionDurationMid,\n handleHoverColor,\n handleOpacity,\n paddingInline,\n paddingBlock,\n handleBg,\n handleActiveBg,\n colorTextDisabled,\n borderRadiusSM,\n borderRadiusLG,\n controlWidth,\n handleBorderColor,\n filledHandleBg,\n lineHeightLG,\n calc\n } = token;\n return [{\n [componentCls]: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, resetComponent(token)), genBasicInputStyle(token)), {\n display: 'inline-block',\n width: controlWidth,\n margin: 0,\n padding: 0,\n borderRadius\n }), genOutlinedStyle(token, {\n [`${componentCls}-handler-wrap`]: {\n background: handleBg,\n [`${componentCls}-handler-down`]: {\n borderBlockStart: `${unit(lineWidth)} ${lineType} ${handleBorderColor}`\n }\n }\n })), genFilledStyle(token, {\n [`${componentCls}-handler-wrap`]: {\n background: filledHandleBg,\n [`${componentCls}-handler-down`]: {\n borderBlockStart: `${unit(lineWidth)} ${lineType} ${handleBorderColor}`\n }\n },\n '&:focus-within': {\n [`${componentCls}-handler-wrap`]: {\n background: handleBg\n }\n }\n })), genUnderlinedStyle(token, {\n [`${componentCls}-handler-wrap`]: {\n background: handleBg,\n [`${componentCls}-handler-down`]: {\n borderBlockStart: `${unit(lineWidth)} ${lineType} ${handleBorderColor}`\n }\n }\n })), genBorderlessStyle(token)), {\n '&-rtl': {\n direction: 'rtl',\n [`${componentCls}-input`]: {\n direction: 'rtl'\n }\n },\n '&-lg': {\n padding: 0,\n fontSize: inputFontSizeLG,\n lineHeight: lineHeightLG,\n borderRadius: borderRadiusLG,\n [`input${componentCls}-input`]: {\n height: calc(controlHeightLG).sub(calc(lineWidth).mul(2)).equal(),\n padding: `${unit(paddingBlockLG)} ${unit(paddingInlineLG)}`\n }\n },\n '&-sm': {\n padding: 0,\n fontSize: inputFontSizeSM,\n borderRadius: borderRadiusSM,\n [`input${componentCls}-input`]: {\n height: calc(controlHeightSM).sub(calc(lineWidth).mul(2)).equal(),\n padding: `${unit(paddingBlockSM)} ${unit(paddingInlineSM)}`\n }\n },\n // ===================== Out Of Range =====================\n '&-out-of-range': {\n [`${componentCls}-input-wrap`]: {\n input: {\n color: colorError\n }\n }\n },\n // Style for input-group: input with label, with button or dropdown...\n '&-group': Object.assign(Object.assign(Object.assign({}, resetComponent(token)), genInputGroupStyle(token)), {\n '&-wrapper': Object.assign(Object.assign(Object.assign({\n display: 'inline-block',\n textAlign: 'start',\n verticalAlign: 'top',\n [`${componentCls}-affix-wrapper`]: {\n width: '100%'\n },\n // Size\n '&-lg': {\n [`${componentCls}-group-addon`]: {\n borderRadius: borderRadiusLG,\n fontSize: token.fontSizeLG\n }\n },\n '&-sm': {\n [`${componentCls}-group-addon`]: {\n borderRadius: borderRadiusSM\n }\n }\n }, genOutlinedGroupStyle(token)), genFilledGroupStyle(token)), {\n // Fix the issue of using icons in Space Compact mode\n // https://github.com/ant-design/ant-design/issues/45764\n [`&:not(${componentCls}-compact-first-item):not(${componentCls}-compact-last-item)${componentCls}-compact-item`]: {\n [`${componentCls}, ${componentCls}-group-addon`]: {\n borderRadius: 0\n }\n },\n [`&:not(${componentCls}-compact-last-item)${componentCls}-compact-first-item`]: {\n [`${componentCls}, ${componentCls}-group-addon`]: {\n borderStartEndRadius: 0,\n borderEndEndRadius: 0\n }\n },\n [`&:not(${componentCls}-compact-first-item)${componentCls}-compact-last-item`]: {\n [`${componentCls}, ${componentCls}-group-addon`]: {\n borderStartStartRadius: 0,\n borderEndStartRadius: 0\n }\n }\n })\n }),\n [`&-disabled ${componentCls}-input`]: {\n cursor: 'not-allowed'\n },\n [componentCls]: {\n '&-input': Object.assign(Object.assign(Object.assign(Object.assign({}, resetComponent(token)), {\n width: '100%',\n padding: `${unit(paddingBlock)} ${unit(paddingInline)}`,\n textAlign: 'start',\n backgroundColor: 'transparent',\n border: 0,\n borderRadius,\n outline: 0,\n transition: `all ${motionDurationMid} linear`,\n appearance: 'textfield',\n fontSize: 'inherit'\n }), genPlaceholderStyle(token.colorTextPlaceholder)), {\n '&[type=\"number\"]::-webkit-inner-spin-button, &[type=\"number\"]::-webkit-outer-spin-button': {\n margin: 0,\n appearance: 'none'\n }\n })\n },\n [`&:hover ${componentCls}-handler-wrap, &-focused ${componentCls}-handler-wrap`]: {\n width: token.handleWidth,\n opacity: 1\n }\n })\n },\n // Handler\n {\n [componentCls]: Object.assign(Object.assign(Object.assign({\n [`${componentCls}-handler-wrap`]: {\n position: 'absolute',\n insetBlockStart: 0,\n insetInlineEnd: 0,\n width: token.handleVisibleWidth,\n opacity: handleOpacity,\n height: '100%',\n borderStartStartRadius: 0,\n borderStartEndRadius: borderRadius,\n borderEndEndRadius: borderRadius,\n borderEndStartRadius: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n transition: `all ${motionDurationMid}`,\n overflow: 'hidden',\n // Fix input number inside Menu makes icon too large\n // We arise the selector priority by nest selector here\n // https://github.com/ant-design/ant-design/issues/14367\n [`${componentCls}-handler`]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flex: 'auto',\n height: '40%',\n [`\n ${componentCls}-handler-up-inner,\n ${componentCls}-handler-down-inner\n `]: {\n marginInlineEnd: 0,\n fontSize: token.handleFontSize\n }\n }\n },\n [`${componentCls}-handler`]: {\n height: '50%',\n overflow: 'hidden',\n color: colorIcon,\n fontWeight: 'bold',\n lineHeight: 0,\n textAlign: 'center',\n cursor: 'pointer',\n borderInlineStart: `${unit(lineWidth)} ${lineType} ${handleBorderColor}`,\n transition: `all ${motionDurationMid} linear`,\n '&:active': {\n background: handleActiveBg\n },\n // Hover\n '&:hover': {\n height: `60%`,\n [`\n ${componentCls}-handler-up-inner,\n ${componentCls}-handler-down-inner\n `]: {\n color: handleHoverColor\n }\n },\n '&-up-inner, &-down-inner': Object.assign(Object.assign({}, resetIcon()), {\n color: colorIcon,\n transition: `all ${motionDurationMid} linear`,\n userSelect: 'none'\n })\n },\n [`${componentCls}-handler-up`]: {\n borderStartEndRadius: borderRadius\n },\n [`${componentCls}-handler-down`]: {\n borderEndEndRadius: borderRadius\n }\n }, genRadiusStyle(token, 'lg')), genRadiusStyle(token, 'sm')), {\n // Disabled\n '&-disabled, &-readonly': {\n [`${componentCls}-handler-wrap`]: {\n display: 'none'\n },\n [`${componentCls}-input`]: {\n color: 'inherit'\n }\n },\n [`\n ${componentCls}-handler-up-disabled,\n ${componentCls}-handler-down-disabled\n `]: {\n cursor: 'not-allowed'\n },\n [`\n ${componentCls}-handler-up-disabled:hover &-handler-up-inner,\n ${componentCls}-handler-down-disabled:hover &-handler-down-inner\n `]: {\n color: colorTextDisabled\n }\n })\n }];\n};\nconst genAffixWrapperStyles = token => {\n const {\n componentCls,\n paddingBlock,\n paddingInline,\n inputAffixPadding,\n controlWidth,\n borderRadiusLG,\n borderRadiusSM,\n paddingInlineLG,\n paddingInlineSM,\n paddingBlockLG,\n paddingBlockSM,\n motionDurationMid\n } = token;\n return {\n [`${componentCls}-affix-wrapper`]: Object.assign(Object.assign({\n [`input${componentCls}-input`]: {\n padding: `${unit(paddingBlock)} 0`\n }\n }, genBasicInputStyle(token)), {\n // or number handler will cover form status\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n width: controlWidth,\n padding: 0,\n paddingInlineStart: paddingInline,\n '&-lg': {\n borderRadius: borderRadiusLG,\n paddingInlineStart: paddingInlineLG,\n [`input${componentCls}-input`]: {\n padding: `${unit(paddingBlockLG)} 0`\n }\n },\n '&-sm': {\n borderRadius: borderRadiusSM,\n paddingInlineStart: paddingInlineSM,\n [`input${componentCls}-input`]: {\n padding: `${unit(paddingBlockSM)} 0`\n }\n },\n [`&:not(${componentCls}-disabled):hover`]: {\n zIndex: 1\n },\n '&-focused, &:focus': {\n zIndex: 1\n },\n [`&-disabled > ${componentCls}-disabled`]: {\n background: 'transparent'\n },\n [`> div${componentCls}`]: {\n width: '100%',\n border: 'none',\n outline: 'none',\n [`&${componentCls}-focused`]: {\n boxShadow: 'none !important'\n }\n },\n '&::before': {\n display: 'inline-block',\n width: 0,\n visibility: 'hidden',\n content: '\"\\\\a0\"'\n },\n [`${componentCls}-handler-wrap`]: {\n zIndex: 2\n },\n [componentCls]: {\n position: 'static',\n color: 'inherit',\n '&-prefix, &-suffix': {\n display: 'flex',\n flex: 'none',\n alignItems: 'center',\n pointerEvents: 'none'\n },\n '&-prefix': {\n marginInlineEnd: inputAffixPadding\n },\n '&-suffix': {\n insetBlockStart: 0,\n insetInlineEnd: 0,\n height: '100%',\n marginInlineEnd: paddingInline,\n marginInlineStart: inputAffixPadding,\n transition: `margin ${motionDurationMid}`\n }\n },\n [`&:hover ${componentCls}-handler-wrap, &-focused ${componentCls}-handler-wrap`]: {\n width: token.handleWidth,\n opacity: 1\n },\n [`&:not(${componentCls}-affix-wrapper-without-controls):hover ${componentCls}-suffix`]: {\n marginInlineEnd: token.calc(token.handleWidth).add(paddingInline).equal()\n }\n }),\n // 覆盖 affix-wrapper borderRadius!\n [`${componentCls}-underlined`]: {\n borderRadius: 0\n }\n };\n};\nexport default genStyleHooks('InputNumber', token => {\n const inputNumberToken = mergeToken(token, initInputToken(token));\n return [genInputNumberStyles(inputNumberToken), genAffixWrapperStyles(inputNumberToken),\n // =====================================================\n // == Space Compact ==\n // =====================================================\n genCompactItemStyle(inputNumberToken)];\n}, prepareComponentToken, {\n unitless: {\n handleOpacity: true\n }\n});","import { FastColor } from '@ant-design/fast-color';\nimport { initComponentToken } from '../../input/style/token';\nexport const prepareComponentToken = token => {\n var _a;\n const handleVisible = (_a = token.handleVisible) !== null && _a !== void 0 ? _a : 'auto';\n const handleWidth = token.controlHeightSM - token.lineWidth * 2;\n return Object.assign(Object.assign({}, initComponentToken(token)), {\n controlWidth: 90,\n handleWidth,\n handleFontSize: token.fontSize / 2,\n handleVisible,\n handleActiveBg: token.colorFillAlter,\n handleBg: token.colorBgContainer,\n filledHandleBg: new FastColor(token.colorFillSecondary).onBackground(token.colorBgContainer).toHexString(),\n handleHoverColor: token.colorPrimary,\n handleBorderColor: token.colorBorder,\n handleOpacity: handleVisible === true ? 1 : 0,\n handleVisibleWidth: handleVisible === true ? handleWidth : 0\n });\n};","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport DownOutlined from \"@ant-design/icons/es/icons/DownOutlined\";\nimport UpOutlined from \"@ant-design/icons/es/icons/UpOutlined\";\nimport classNames from 'classnames';\nimport RcInputNumber from 'rc-input-number';\nimport ContextIsolator from '../_util/ContextIsolator';\nimport { getMergedStatus, getStatusClassNames } from '../_util/statusUtils';\nimport { devUseWarning } from '../_util/warning';\nimport ConfigProvider, { ConfigContext } from '../config-provider';\nimport DisabledContext from '../config-provider/DisabledContext';\nimport useCSSVarCls from '../config-provider/hooks/useCSSVarCls';\nimport useSize from '../config-provider/hooks/useSize';\nimport { FormItemInputContext } from '../form/context';\nimport useVariant from '../form/hooks/useVariants';\nimport { useCompactItemContext } from '../space/Compact';\nimport useStyle from './style';\nconst InputNumber = /*#__PURE__*/React.forwardRef((props, ref) => {\n if (process.env.NODE_ENV !== 'production') {\n const typeWarning = devUseWarning('InputNumber');\n typeWarning.deprecated(!('bordered' in props), 'bordered', 'variant');\n typeWarning(!(props.type === 'number' && props.changeOnWheel), 'usage', 'When `type=number` is used together with `changeOnWheel`, changeOnWheel may not work properly. Please delete `type=number` if it is not necessary.');\n }\n const {\n getPrefixCls,\n direction\n } = React.useContext(ConfigContext);\n const inputRef = React.useRef(null);\n React.useImperativeHandle(ref, () => inputRef.current);\n const {\n className,\n rootClassName,\n size: customizeSize,\n disabled: customDisabled,\n prefixCls: customizePrefixCls,\n addonBefore,\n addonAfter,\n prefix,\n suffix,\n bordered,\n readOnly,\n status: customStatus,\n controls,\n variant: customVariant\n } = props,\n others = __rest(props, [\"className\", \"rootClassName\", \"size\", \"disabled\", \"prefixCls\", \"addonBefore\", \"addonAfter\", \"prefix\", \"suffix\", \"bordered\", \"readOnly\", \"status\", \"controls\", \"variant\"]);\n const prefixCls = getPrefixCls('input-number', customizePrefixCls);\n // Style\n const rootCls = useCSSVarCls(prefixCls);\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls, rootCls);\n const {\n compactSize,\n compactItemClassnames\n } = useCompactItemContext(prefixCls, direction);\n let upIcon = /*#__PURE__*/React.createElement(UpOutlined, {\n className: `${prefixCls}-handler-up-inner`\n });\n let downIcon = /*#__PURE__*/React.createElement(DownOutlined, {\n className: `${prefixCls}-handler-down-inner`\n });\n const controlsTemp = typeof controls === 'boolean' ? controls : undefined;\n if (typeof controls === 'object') {\n upIcon = typeof controls.upIcon === 'undefined' ? upIcon : (/*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-handler-up-inner`\n }, controls.upIcon));\n downIcon = typeof controls.downIcon === 'undefined' ? downIcon : (/*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-handler-down-inner`\n }, controls.downIcon));\n }\n const {\n hasFeedback,\n status: contextStatus,\n isFormItemInput,\n feedbackIcon\n } = React.useContext(FormItemInputContext);\n const mergedStatus = getMergedStatus(contextStatus, customStatus);\n const mergedSize = useSize(ctx => {\n var _a;\n return (_a = customizeSize !== null && customizeSize !== void 0 ? customizeSize : compactSize) !== null && _a !== void 0 ? _a : ctx;\n });\n // ===================== Disabled =====================\n const disabled = React.useContext(DisabledContext);\n const mergedDisabled = customDisabled !== null && customDisabled !== void 0 ? customDisabled : disabled;\n const [variant, enableVariantCls] = useVariant('inputNumber', customVariant, bordered);\n const suffixNode = hasFeedback && /*#__PURE__*/React.createElement(React.Fragment, null, feedbackIcon);\n const inputNumberClass = classNames({\n [`${prefixCls}-lg`]: mergedSize === 'large',\n [`${prefixCls}-sm`]: mergedSize === 'small',\n [`${prefixCls}-rtl`]: direction === 'rtl',\n [`${prefixCls}-in-form-item`]: isFormItemInput\n }, hashId);\n const wrapperClassName = `${prefixCls}-group`;\n const element = /*#__PURE__*/React.createElement(RcInputNumber, Object.assign({\n ref: inputRef,\n disabled: mergedDisabled,\n className: classNames(cssVarCls, rootCls, className, rootClassName, compactItemClassnames),\n upHandler: upIcon,\n downHandler: downIcon,\n prefixCls: prefixCls,\n readOnly: readOnly,\n controls: controlsTemp,\n prefix: prefix,\n suffix: suffixNode || suffix,\n addonBefore: addonBefore && (/*#__PURE__*/React.createElement(ContextIsolator, {\n form: true,\n space: true\n }, addonBefore)),\n addonAfter: addonAfter && (/*#__PURE__*/React.createElement(ContextIsolator, {\n form: true,\n space: true\n }, addonAfter)),\n classNames: {\n input: inputNumberClass,\n variant: classNames({\n [`${prefixCls}-${variant}`]: enableVariantCls\n }, getStatusClassNames(prefixCls, mergedStatus, hasFeedback)),\n affixWrapper: classNames({\n [`${prefixCls}-affix-wrapper-sm`]: mergedSize === 'small',\n [`${prefixCls}-affix-wrapper-lg`]: mergedSize === 'large',\n [`${prefixCls}-affix-wrapper-rtl`]: direction === 'rtl',\n [`${prefixCls}-affix-wrapper-without-controls`]: controls === false || mergedDisabled\n }, hashId),\n wrapper: classNames({\n [`${wrapperClassName}-rtl`]: direction === 'rtl'\n }, hashId),\n groupWrapper: classNames({\n [`${prefixCls}-group-wrapper-sm`]: mergedSize === 'small',\n [`${prefixCls}-group-wrapper-lg`]: mergedSize === 'large',\n [`${prefixCls}-group-wrapper-rtl`]: direction === 'rtl',\n [`${prefixCls}-group-wrapper-${variant}`]: enableVariantCls\n }, getStatusClassNames(`${prefixCls}-group-wrapper`, mergedStatus, hasFeedback), hashId)\n }\n }, others));\n return wrapCSSVar(element);\n});\nconst TypedInputNumber = InputNumber;\n/** @private Internal Component. Do not use in your production. */\nconst PureInputNumber = props => (/*#__PURE__*/React.createElement(ConfigProvider, {\n theme: {\n components: {\n InputNumber: {\n handleVisible: true\n }\n }\n }\n}, /*#__PURE__*/React.createElement(InputNumber, Object.assign({}, props))));\nif (process.env.NODE_ENV !== 'production') {\n TypedInputNumber.displayName = 'InputNumber';\n}\nTypedInputNumber._InternalPanelDoNotUseOrYouWillBeFired = PureInputNumber;\nexport default TypedInputNumber;","\"use client\";\n\nimport React, { useState } from 'react';\nimport classNames from 'classnames';\nimport InputNumber from '../../input-number';\nconst ColorSteppers = ({\n prefixCls,\n min = 0,\n max = 100,\n value,\n onChange,\n className,\n formatter\n}) => {\n const colorSteppersPrefixCls = `${prefixCls}-steppers`;\n const [internalValue, setInternalValue] = useState(0);\n const stepValue = !Number.isNaN(value) ? value : internalValue;\n return /*#__PURE__*/React.createElement(InputNumber, {\n className: classNames(colorSteppersPrefixCls, className),\n min: min,\n max: max,\n value: stepValue,\n formatter: formatter,\n size: \"small\",\n onChange: step => {\n setInternalValue(step || 0);\n onChange === null || onChange === void 0 ? void 0 : onChange(step);\n }\n });\n};\nexport default ColorSteppers;","\"use client\";\n\nimport React, { useState } from 'react';\nimport { generateColor, getColorAlpha } from '../util';\nimport ColorSteppers from './ColorSteppers';\nconst ColorAlphaInput = ({\n prefixCls,\n value,\n onChange\n}) => {\n const colorAlphaInputPrefixCls = `${prefixCls}-alpha-input`;\n const [internalValue, setInternalValue] = useState(() => generateColor(value || '#000'));\n const alphaValue = value || internalValue;\n const handleAlphaChange = step => {\n const hsba = alphaValue.toHsb();\n hsba.a = (step || 0) / 100;\n const genColor = generateColor(hsba);\n setInternalValue(genColor);\n onChange === null || onChange === void 0 ? void 0 : onChange(genColor);\n };\n return /*#__PURE__*/React.createElement(ColorSteppers, {\n value: getColorAlpha(alphaValue),\n prefixCls: prefixCls,\n formatter: step => `${step}%`,\n className: colorAlphaInputPrefixCls,\n onChange: handleAlphaChange\n });\n};\nexport default ColorAlphaInput;","\"use client\";\n\nimport React, { useEffect, useState } from 'react';\nimport Input from '../../input/Input';\nimport { toHexFormat } from '../color';\nimport { generateColor } from '../util';\nconst hexReg = /(^#[\\da-f]{6}$)|(^#[\\da-f]{8}$)/i;\nconst isHexString = hex => hexReg.test(`#${hex}`);\nconst ColorHexInput = ({\n prefixCls,\n value,\n onChange\n}) => {\n const colorHexInputPrefixCls = `${prefixCls}-hex-input`;\n const [hexValue, setHexValue] = useState(() => value ? toHexFormat(value.toHexString()) : undefined);\n // Update step value\n useEffect(() => {\n if (value) {\n setHexValue(toHexFormat(value.toHexString()));\n }\n }, [value]);\n const handleHexChange = e => {\n const originValue = e.target.value;\n setHexValue(toHexFormat(originValue));\n if (isHexString(toHexFormat(originValue, true))) {\n onChange === null || onChange === void 0 ? void 0 : onChange(generateColor(originValue));\n }\n };\n return /*#__PURE__*/React.createElement(Input, {\n className: colorHexInputPrefixCls,\n value: hexValue,\n prefix: \"#\",\n onChange: handleHexChange,\n size: \"small\"\n });\n};\nexport default ColorHexInput;","\"use client\";\n\nimport React, { useState } from 'react';\nimport { generateColor, getRoundNumber } from '../util';\nimport ColorSteppers from './ColorSteppers';\nconst ColorHsbInput = ({\n prefixCls,\n value,\n onChange\n}) => {\n const colorHsbInputPrefixCls = `${prefixCls}-hsb-input`;\n const [internalValue, setInternalValue] = useState(() => generateColor(value || '#000'));\n const hsbValue = value || internalValue;\n const handleHsbChange = (step, type) => {\n const hsb = hsbValue.toHsb();\n hsb[type] = type === 'h' ? step : (step || 0) / 100;\n const genColor = generateColor(hsb);\n setInternalValue(genColor);\n onChange === null || onChange === void 0 ? void 0 : onChange(genColor);\n };\n return /*#__PURE__*/React.createElement(\"div\", {\n className: colorHsbInputPrefixCls\n }, /*#__PURE__*/React.createElement(ColorSteppers, {\n max: 360,\n min: 0,\n value: Number(hsbValue.toHsb().h),\n prefixCls: prefixCls,\n className: colorHsbInputPrefixCls,\n formatter: step => getRoundNumber(step || 0).toString(),\n onChange: step => handleHsbChange(Number(step), 'h')\n }), /*#__PURE__*/React.createElement(ColorSteppers, {\n max: 100,\n min: 0,\n value: Number(hsbValue.toHsb().s) * 100,\n prefixCls: prefixCls,\n className: colorHsbInputPrefixCls,\n formatter: step => `${getRoundNumber(step || 0)}%`,\n onChange: step => handleHsbChange(Number(step), 's')\n }), /*#__PURE__*/React.createElement(ColorSteppers, {\n max: 100,\n min: 0,\n value: Number(hsbValue.toHsb().b) * 100,\n prefixCls: prefixCls,\n className: colorHsbInputPrefixCls,\n formatter: step => `${getRoundNumber(step || 0)}%`,\n onChange: step => handleHsbChange(Number(step), 'b')\n }));\n};\nexport default ColorHsbInput;","\"use client\";\n\nimport React, { useState } from 'react';\nimport { generateColor } from '../util';\nimport ColorSteppers from './ColorSteppers';\nconst ColorRgbInput = ({\n prefixCls,\n value,\n onChange\n}) => {\n const colorRgbInputPrefixCls = `${prefixCls}-rgb-input`;\n const [internalValue, setInternalValue] = useState(() => generateColor(value || '#000'));\n const rgbValue = value || internalValue;\n const handleRgbChange = (step, type) => {\n const rgb = rgbValue.toRgb();\n rgb[type] = step || 0;\n const genColor = generateColor(rgb);\n setInternalValue(genColor);\n onChange === null || onChange === void 0 ? void 0 : onChange(genColor);\n };\n return /*#__PURE__*/React.createElement(\"div\", {\n className: colorRgbInputPrefixCls\n }, /*#__PURE__*/React.createElement(ColorSteppers, {\n max: 255,\n min: 0,\n value: Number(rgbValue.toRgb().r),\n prefixCls: prefixCls,\n className: colorRgbInputPrefixCls,\n onChange: step => handleRgbChange(Number(step), 'r')\n }), /*#__PURE__*/React.createElement(ColorSteppers, {\n max: 255,\n min: 0,\n value: Number(rgbValue.toRgb().g),\n prefixCls: prefixCls,\n className: colorRgbInputPrefixCls,\n onChange: step => handleRgbChange(Number(step), 'g')\n }), /*#__PURE__*/React.createElement(ColorSteppers, {\n max: 255,\n min: 0,\n value: Number(rgbValue.toRgb().b),\n prefixCls: prefixCls,\n className: colorRgbInputPrefixCls,\n onChange: step => handleRgbChange(Number(step), 'b')\n }));\n};\nexport default ColorRgbInput;","\"use client\";\n\nimport React, { useMemo } from 'react';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport Select from '../../select';\nimport { FORMAT_HEX, FORMAT_HSB, FORMAT_RGB } from '../interface';\nimport ColorAlphaInput from './ColorAlphaInput';\nimport ColorHexInput from './ColorHexInput';\nimport ColorHsbInput from './ColorHsbInput';\nimport ColorRgbInput from './ColorRgbInput';\nconst selectOptions = [FORMAT_HEX, FORMAT_HSB, FORMAT_RGB].map(format => ({\n value: format,\n label: format.toUpperCase()\n}));\nconst ColorInput = props => {\n const {\n prefixCls,\n format,\n value,\n disabledAlpha,\n onFormatChange,\n onChange,\n disabledFormat\n } = props;\n const [colorFormat, setColorFormat] = useMergedState(FORMAT_HEX, {\n value: format,\n onChange: onFormatChange\n });\n const colorInputPrefixCls = `${prefixCls}-input`;\n const handleFormatChange = newFormat => {\n setColorFormat(newFormat);\n };\n const steppersNode = useMemo(() => {\n const inputProps = {\n value,\n prefixCls,\n onChange\n };\n switch (colorFormat) {\n case FORMAT_HSB:\n return /*#__PURE__*/React.createElement(ColorHsbInput, Object.assign({}, inputProps));\n case FORMAT_RGB:\n return /*#__PURE__*/React.createElement(ColorRgbInput, Object.assign({}, inputProps));\n // case FORMAT_HEX:\n default:\n return /*#__PURE__*/React.createElement(ColorHexInput, Object.assign({}, inputProps));\n }\n }, [colorFormat, prefixCls, value, onChange]);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: `${colorInputPrefixCls}-container`\n }, !disabledFormat && (/*#__PURE__*/React.createElement(Select, {\n value: colorFormat,\n variant: \"borderless\",\n getPopupContainer: current => current,\n popupMatchSelectWidth: 68,\n placement: \"bottomRight\",\n onChange: handleFormatChange,\n className: `${prefixCls}-format-select`,\n size: \"small\",\n options: selectOptions\n })), /*#__PURE__*/React.createElement(\"div\", {\n className: colorInputPrefixCls\n }, steppersNode), !disabledAlpha && (/*#__PURE__*/React.createElement(ColorAlphaInput, {\n prefixCls: prefixCls,\n value: value,\n onChange: onChange\n })));\n};\nexport default ColorInput;","export const FORMAT_HEX = 'hex';\nexport const FORMAT_RGB = 'rgb';\nexport const FORMAT_HSB = 'hsb';","import * as React from 'react';\nvar SliderContext = /*#__PURE__*/React.createContext({\n min: 0,\n max: 0,\n direction: 'ltr',\n step: 1,\n includedStart: 0,\n includedEnd: 0,\n tabIndex: 0,\n keyboard: true,\n styles: {},\n classNames: {}\n});\nexport default SliderContext;\n/** @private NOT PROMISE AVAILABLE. DO NOT USE IN PRODUCTION. */\nexport var UnstableContext = /*#__PURE__*/React.createContext({});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"prefixCls\", \"value\", \"valueIndex\", \"onStartMove\", \"onDelete\", \"style\", \"render\", \"dragging\", \"draggingDelete\", \"onOffsetChange\", \"onChangeComplete\", \"onFocus\", \"onMouseEnter\"];\nimport cls from 'classnames';\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport * as React from 'react';\nimport SliderContext from \"../context\";\nimport { getDirectionStyle, getIndex } from \"../util\";\nvar Handle = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var prefixCls = props.prefixCls,\n value = props.value,\n valueIndex = props.valueIndex,\n onStartMove = props.onStartMove,\n onDelete = props.onDelete,\n style = props.style,\n render = props.render,\n dragging = props.dragging,\n draggingDelete = props.draggingDelete,\n onOffsetChange = props.onOffsetChange,\n onChangeComplete = props.onChangeComplete,\n onFocus = props.onFocus,\n onMouseEnter = props.onMouseEnter,\n restProps = _objectWithoutProperties(props, _excluded);\n var _React$useContext = React.useContext(SliderContext),\n min = _React$useContext.min,\n max = _React$useContext.max,\n direction = _React$useContext.direction,\n disabled = _React$useContext.disabled,\n keyboard = _React$useContext.keyboard,\n range = _React$useContext.range,\n tabIndex = _React$useContext.tabIndex,\n ariaLabelForHandle = _React$useContext.ariaLabelForHandle,\n ariaLabelledByForHandle = _React$useContext.ariaLabelledByForHandle,\n ariaRequired = _React$useContext.ariaRequired,\n ariaValueTextFormatterForHandle = _React$useContext.ariaValueTextFormatterForHandle,\n styles = _React$useContext.styles,\n classNames = _React$useContext.classNames;\n var handlePrefixCls = \"\".concat(prefixCls, \"-handle\");\n\n // ============================ Events ============================\n var onInternalStartMove = function onInternalStartMove(e) {\n if (!disabled) {\n onStartMove(e, valueIndex);\n }\n };\n var onInternalFocus = function onInternalFocus(e) {\n onFocus === null || onFocus === void 0 || onFocus(e, valueIndex);\n };\n var onInternalMouseEnter = function onInternalMouseEnter(e) {\n onMouseEnter(e, valueIndex);\n };\n\n // =========================== Keyboard ===========================\n var onKeyDown = function onKeyDown(e) {\n if (!disabled && keyboard) {\n var offset = null;\n\n // Change the value\n switch (e.which || e.keyCode) {\n case KeyCode.LEFT:\n offset = direction === 'ltr' || direction === 'btt' ? -1 : 1;\n break;\n case KeyCode.RIGHT:\n offset = direction === 'ltr' || direction === 'btt' ? 1 : -1;\n break;\n\n // Up is plus\n case KeyCode.UP:\n offset = direction !== 'ttb' ? 1 : -1;\n break;\n\n // Down is minus\n case KeyCode.DOWN:\n offset = direction !== 'ttb' ? -1 : 1;\n break;\n case KeyCode.HOME:\n offset = 'min';\n break;\n case KeyCode.END:\n offset = 'max';\n break;\n case KeyCode.PAGE_UP:\n offset = 2;\n break;\n case KeyCode.PAGE_DOWN:\n offset = -2;\n break;\n case KeyCode.BACKSPACE:\n case KeyCode.DELETE:\n onDelete(valueIndex);\n break;\n }\n if (offset !== null) {\n e.preventDefault();\n onOffsetChange(offset, valueIndex);\n }\n }\n };\n var handleKeyUp = function handleKeyUp(e) {\n switch (e.which || e.keyCode) {\n case KeyCode.LEFT:\n case KeyCode.RIGHT:\n case KeyCode.UP:\n case KeyCode.DOWN:\n case KeyCode.HOME:\n case KeyCode.END:\n case KeyCode.PAGE_UP:\n case KeyCode.PAGE_DOWN:\n onChangeComplete === null || onChangeComplete === void 0 || onChangeComplete();\n break;\n }\n };\n\n // ============================ Offset ============================\n var positionStyle = getDirectionStyle(direction, value, min, max);\n\n // ============================ Render ============================\n var divProps = {};\n if (valueIndex !== null) {\n var _getIndex;\n divProps = {\n tabIndex: disabled ? null : getIndex(tabIndex, valueIndex),\n role: 'slider',\n 'aria-valuemin': min,\n 'aria-valuemax': max,\n 'aria-valuenow': value,\n 'aria-disabled': disabled,\n 'aria-label': getIndex(ariaLabelForHandle, valueIndex),\n 'aria-labelledby': getIndex(ariaLabelledByForHandle, valueIndex),\n 'aria-required': getIndex(ariaRequired, valueIndex),\n 'aria-valuetext': (_getIndex = getIndex(ariaValueTextFormatterForHandle, valueIndex)) === null || _getIndex === void 0 ? void 0 : _getIndex(value),\n 'aria-orientation': direction === 'ltr' || direction === 'rtl' ? 'horizontal' : 'vertical',\n onMouseDown: onInternalStartMove,\n onTouchStart: onInternalStartMove,\n onFocus: onInternalFocus,\n onMouseEnter: onInternalMouseEnter,\n onKeyDown: onKeyDown,\n onKeyUp: handleKeyUp\n };\n }\n var handleNode = /*#__PURE__*/React.createElement(\"div\", _extends({\n ref: ref,\n className: cls(handlePrefixCls, _defineProperty(_defineProperty(_defineProperty({}, \"\".concat(handlePrefixCls, \"-\").concat(valueIndex + 1), valueIndex !== null && range), \"\".concat(handlePrefixCls, \"-dragging\"), dragging), \"\".concat(handlePrefixCls, \"-dragging-delete\"), draggingDelete), classNames.handle),\n style: _objectSpread(_objectSpread(_objectSpread({}, positionStyle), style), styles.handle)\n }, divProps, restProps));\n\n // Customize\n if (render) {\n handleNode = render(handleNode, {\n index: valueIndex,\n prefixCls: prefixCls,\n value: value,\n dragging: dragging,\n draggingDelete: draggingDelete\n });\n }\n return handleNode;\n});\nif (process.env.NODE_ENV !== 'production') {\n Handle.displayName = 'Handle';\n}\nexport default Handle;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"prefixCls\", \"style\", \"onStartMove\", \"onOffsetChange\", \"values\", \"handleRender\", \"activeHandleRender\", \"draggingIndex\", \"draggingDelete\", \"onFocus\"];\nimport * as React from 'react';\nimport { flushSync } from 'react-dom';\nimport { getIndex } from \"../util\";\nimport Handle from \"./Handle\";\nvar Handles = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var prefixCls = props.prefixCls,\n style = props.style,\n onStartMove = props.onStartMove,\n onOffsetChange = props.onOffsetChange,\n values = props.values,\n handleRender = props.handleRender,\n activeHandleRender = props.activeHandleRender,\n draggingIndex = props.draggingIndex,\n draggingDelete = props.draggingDelete,\n onFocus = props.onFocus,\n restProps = _objectWithoutProperties(props, _excluded);\n var handlesRef = React.useRef({});\n\n // =========================== Active ===========================\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n activeVisible = _React$useState2[0],\n setActiveVisible = _React$useState2[1];\n var _React$useState3 = React.useState(-1),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n activeIndex = _React$useState4[0],\n setActiveIndex = _React$useState4[1];\n var onActive = function onActive(index) {\n setActiveIndex(index);\n setActiveVisible(true);\n };\n var onHandleFocus = function onHandleFocus(e, index) {\n onActive(index);\n onFocus === null || onFocus === void 0 || onFocus(e);\n };\n var onHandleMouseEnter = function onHandleMouseEnter(e, index) {\n onActive(index);\n };\n\n // =========================== Render ===========================\n React.useImperativeHandle(ref, function () {\n return {\n focus: function focus(index) {\n var _handlesRef$current$i;\n (_handlesRef$current$i = handlesRef.current[index]) === null || _handlesRef$current$i === void 0 || _handlesRef$current$i.focus();\n },\n hideHelp: function hideHelp() {\n flushSync(function () {\n setActiveVisible(false);\n });\n }\n };\n });\n\n // =========================== Render ===========================\n // Handle Props\n var handleProps = _objectSpread({\n prefixCls: prefixCls,\n onStartMove: onStartMove,\n onOffsetChange: onOffsetChange,\n render: handleRender,\n onFocus: onHandleFocus,\n onMouseEnter: onHandleMouseEnter\n }, restProps);\n return /*#__PURE__*/React.createElement(React.Fragment, null, values.map(function (value, index) {\n var dragging = draggingIndex === index;\n return /*#__PURE__*/React.createElement(Handle, _extends({\n ref: function ref(node) {\n if (!node) {\n delete handlesRef.current[index];\n } else {\n handlesRef.current[index] = node;\n }\n },\n dragging: dragging,\n draggingDelete: dragging && draggingDelete,\n style: getIndex(style, index),\n key: index,\n value: value,\n valueIndex: index\n }, handleProps));\n }), activeHandleRender && activeVisible && /*#__PURE__*/React.createElement(Handle, _extends({\n key: \"a11y\"\n }, handleProps, {\n value: values[activeIndex],\n valueIndex: null,\n dragging: draggingIndex !== -1,\n draggingDelete: draggingDelete,\n render: activeHandleRender,\n style: {\n pointerEvents: 'none'\n },\n tabIndex: null,\n \"aria-hidden\": true\n })));\n});\nif (process.env.NODE_ENV !== 'production') {\n Handles.displayName = 'Handles';\n}\nexport default Handles;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport SliderContext from \"../context\";\nimport { getDirectionStyle } from \"../util\";\nvar Mark = function Mark(props) {\n var prefixCls = props.prefixCls,\n style = props.style,\n children = props.children,\n value = props.value,\n _onClick = props.onClick;\n var _React$useContext = React.useContext(SliderContext),\n min = _React$useContext.min,\n max = _React$useContext.max,\n direction = _React$useContext.direction,\n includedStart = _React$useContext.includedStart,\n includedEnd = _React$useContext.includedEnd,\n included = _React$useContext.included;\n var textCls = \"\".concat(prefixCls, \"-text\");\n\n // ============================ Offset ============================\n var positionStyle = getDirectionStyle(direction, value, min, max);\n return /*#__PURE__*/React.createElement(\"span\", {\n className: classNames(textCls, _defineProperty({}, \"\".concat(textCls, \"-active\"), included && includedStart <= value && value <= includedEnd)),\n style: _objectSpread(_objectSpread({}, positionStyle), style),\n onMouseDown: function onMouseDown(e) {\n e.stopPropagation();\n },\n onClick: function onClick() {\n _onClick(value);\n }\n }, children);\n};\nexport default Mark;","import * as React from 'react';\nimport Mark from \"./Mark\";\nvar Marks = function Marks(props) {\n var prefixCls = props.prefixCls,\n marks = props.marks,\n onClick = props.onClick;\n var markPrefixCls = \"\".concat(prefixCls, \"-mark\");\n\n // Not render mark if empty\n if (!marks.length) {\n return null;\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n className: markPrefixCls\n }, marks.map(function (_ref) {\n var value = _ref.value,\n style = _ref.style,\n label = _ref.label;\n return /*#__PURE__*/React.createElement(Mark, {\n key: value,\n prefixCls: markPrefixCls,\n style: style,\n value: value,\n onClick: onClick\n }, label);\n }));\n};\nexport default Marks;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport SliderContext from \"../context\";\nimport { getDirectionStyle } from \"../util\";\nvar Dot = function Dot(props) {\n var prefixCls = props.prefixCls,\n value = props.value,\n style = props.style,\n activeStyle = props.activeStyle;\n var _React$useContext = React.useContext(SliderContext),\n min = _React$useContext.min,\n max = _React$useContext.max,\n direction = _React$useContext.direction,\n included = _React$useContext.included,\n includedStart = _React$useContext.includedStart,\n includedEnd = _React$useContext.includedEnd;\n var dotClassName = \"\".concat(prefixCls, \"-dot\");\n var active = included && includedStart <= value && value <= includedEnd;\n\n // ============================ Offset ============================\n var mergedStyle = _objectSpread(_objectSpread({}, getDirectionStyle(direction, value, min, max)), typeof style === 'function' ? style(value) : style);\n if (active) {\n mergedStyle = _objectSpread(_objectSpread({}, mergedStyle), typeof activeStyle === 'function' ? activeStyle(value) : activeStyle);\n }\n return /*#__PURE__*/React.createElement(\"span\", {\n className: classNames(dotClassName, _defineProperty({}, \"\".concat(dotClassName, \"-active\"), active)),\n style: mergedStyle\n });\n};\nexport default Dot;","import * as React from 'react';\nimport SliderContext from \"../context\";\nimport Dot from \"./Dot\";\nvar Steps = function Steps(props) {\n var prefixCls = props.prefixCls,\n marks = props.marks,\n dots = props.dots,\n style = props.style,\n activeStyle = props.activeStyle;\n var _React$useContext = React.useContext(SliderContext),\n min = _React$useContext.min,\n max = _React$useContext.max,\n step = _React$useContext.step;\n var stepDots = React.useMemo(function () {\n var dotSet = new Set();\n\n // Add marks\n marks.forEach(function (mark) {\n dotSet.add(mark.value);\n });\n\n // Fill dots\n if (dots && step !== null) {\n var current = min;\n while (current <= max) {\n dotSet.add(current);\n current += step;\n }\n }\n return Array.from(dotSet);\n }, [min, max, step, dots, marks]);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-step\")\n }, stepDots.map(function (dotValue) {\n return /*#__PURE__*/React.createElement(Dot, {\n prefixCls: prefixCls,\n key: dotValue,\n value: dotValue,\n style: style,\n activeStyle: activeStyle\n });\n }));\n};\nexport default Steps;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport cls from 'classnames';\nimport * as React from 'react';\nimport SliderContext from \"../context\";\nimport { getOffset } from \"../util\";\nvar Track = function Track(props) {\n var prefixCls = props.prefixCls,\n style = props.style,\n start = props.start,\n end = props.end,\n index = props.index,\n onStartMove = props.onStartMove,\n replaceCls = props.replaceCls;\n var _React$useContext = React.useContext(SliderContext),\n direction = _React$useContext.direction,\n min = _React$useContext.min,\n max = _React$useContext.max,\n disabled = _React$useContext.disabled,\n range = _React$useContext.range,\n classNames = _React$useContext.classNames;\n var trackPrefixCls = \"\".concat(prefixCls, \"-track\");\n var offsetStart = getOffset(start, min, max);\n var offsetEnd = getOffset(end, min, max);\n\n // ============================ Events ============================\n var onInternalStartMove = function onInternalStartMove(e) {\n if (!disabled && onStartMove) {\n onStartMove(e, -1);\n }\n };\n\n // ============================ Render ============================\n var positionStyle = {};\n switch (direction) {\n case 'rtl':\n positionStyle.right = \"\".concat(offsetStart * 100, \"%\");\n positionStyle.width = \"\".concat(offsetEnd * 100 - offsetStart * 100, \"%\");\n break;\n case 'btt':\n positionStyle.bottom = \"\".concat(offsetStart * 100, \"%\");\n positionStyle.height = \"\".concat(offsetEnd * 100 - offsetStart * 100, \"%\");\n break;\n case 'ttb':\n positionStyle.top = \"\".concat(offsetStart * 100, \"%\");\n positionStyle.height = \"\".concat(offsetEnd * 100 - offsetStart * 100, \"%\");\n break;\n default:\n positionStyle.left = \"\".concat(offsetStart * 100, \"%\");\n positionStyle.width = \"\".concat(offsetEnd * 100 - offsetStart * 100, \"%\");\n }\n var className = replaceCls || cls(trackPrefixCls, _defineProperty(_defineProperty({}, \"\".concat(trackPrefixCls, \"-\").concat(index + 1), index !== null && range), \"\".concat(prefixCls, \"-track-draggable\"), onStartMove), classNames.track);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: className,\n style: _objectSpread(_objectSpread({}, positionStyle), style),\n onMouseDown: onInternalStartMove,\n onTouchStart: onInternalStartMove\n });\n};\nexport default Track;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport cls from 'classnames';\nimport * as React from 'react';\nimport SliderContext from \"../context\";\nimport { getIndex } from \"../util\";\nimport Track from \"./Track\";\nvar Tracks = function Tracks(props) {\n var prefixCls = props.prefixCls,\n style = props.style,\n values = props.values,\n startPoint = props.startPoint,\n onStartMove = props.onStartMove;\n var _React$useContext = React.useContext(SliderContext),\n included = _React$useContext.included,\n range = _React$useContext.range,\n min = _React$useContext.min,\n styles = _React$useContext.styles,\n classNames = _React$useContext.classNames;\n\n // =========================== List ===========================\n var trackList = React.useMemo(function () {\n if (!range) {\n // null value do not have track\n if (values.length === 0) {\n return [];\n }\n var startValue = startPoint !== null && startPoint !== void 0 ? startPoint : min;\n var endValue = values[0];\n return [{\n start: Math.min(startValue, endValue),\n end: Math.max(startValue, endValue)\n }];\n }\n\n // Multiple\n var list = [];\n for (var i = 0; i < values.length - 1; i += 1) {\n list.push({\n start: values[i],\n end: values[i + 1]\n });\n }\n return list;\n }, [values, range, startPoint, min]);\n if (!included) {\n return null;\n }\n\n // ========================== Render ==========================\n var tracksNode = trackList !== null && trackList !== void 0 && trackList.length && (classNames.tracks || styles.tracks) ? /*#__PURE__*/React.createElement(Track, {\n index: null,\n prefixCls: prefixCls,\n start: trackList[0].start,\n end: trackList[trackList.length - 1].end,\n replaceCls: cls(classNames.tracks, \"\".concat(prefixCls, \"-tracks\")),\n style: styles.tracks\n }) : null;\n return /*#__PURE__*/React.createElement(React.Fragment, null, tracksNode, trackList.map(function (_ref, index) {\n var start = _ref.start,\n end = _ref.end;\n return /*#__PURE__*/React.createElement(Track, {\n index: index,\n prefixCls: prefixCls,\n style: _objectSpread(_objectSpread({}, getIndex(style, index)), styles.track),\n start: start,\n end: end,\n key: index,\n onStartMove: onStartMove\n });\n }));\n};\nexport default Tracks;","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport useEvent from \"rc-util/es/hooks/useEvent\";\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport { UnstableContext } from \"../context\";\n/** Drag to delete offset. It's a user experience number for dragging out */\nvar REMOVE_DIST = 130;\nfunction getPosition(e) {\n var obj = 'targetTouches' in e ? e.targetTouches[0] : e;\n return {\n pageX: obj.pageX,\n pageY: obj.pageY\n };\n}\nfunction useDrag(containerRef, direction, rawValues, min, max, formatValue, triggerChange, finishChange, offsetValues, editable, minCount) {\n var _React$useState = React.useState(null),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n draggingValue = _React$useState2[0],\n setDraggingValue = _React$useState2[1];\n var _React$useState3 = React.useState(-1),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n draggingIndex = _React$useState4[0],\n setDraggingIndex = _React$useState4[1];\n var _React$useState5 = React.useState(false),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n draggingDelete = _React$useState6[0],\n setDraggingDelete = _React$useState6[1];\n var _React$useState7 = React.useState(rawValues),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n cacheValues = _React$useState8[0],\n setCacheValues = _React$useState8[1];\n var _React$useState9 = React.useState(rawValues),\n _React$useState10 = _slicedToArray(_React$useState9, 2),\n originValues = _React$useState10[0],\n setOriginValues = _React$useState10[1];\n var mouseMoveEventRef = React.useRef(null);\n var mouseUpEventRef = React.useRef(null);\n var touchEventTargetRef = React.useRef(null);\n var _React$useContext = React.useContext(UnstableContext),\n onDragStart = _React$useContext.onDragStart,\n onDragChange = _React$useContext.onDragChange;\n useLayoutEffect(function () {\n if (draggingIndex === -1) {\n setCacheValues(rawValues);\n }\n }, [rawValues, draggingIndex]);\n\n // Clean up event\n React.useEffect(function () {\n return function () {\n document.removeEventListener('mousemove', mouseMoveEventRef.current);\n document.removeEventListener('mouseup', mouseUpEventRef.current);\n if (touchEventTargetRef.current) {\n touchEventTargetRef.current.removeEventListener('touchmove', mouseMoveEventRef.current);\n touchEventTargetRef.current.removeEventListener('touchend', mouseUpEventRef.current);\n }\n };\n }, []);\n var flushValues = function flushValues(nextValues, nextValue, deleteMark) {\n // Perf: Only update state when value changed\n if (nextValue !== undefined) {\n setDraggingValue(nextValue);\n }\n setCacheValues(nextValues);\n var changeValues = nextValues;\n if (deleteMark) {\n changeValues = nextValues.filter(function (_, i) {\n return i !== draggingIndex;\n });\n }\n triggerChange(changeValues);\n if (onDragChange) {\n onDragChange({\n rawValues: nextValues,\n deleteIndex: deleteMark ? draggingIndex : -1,\n draggingIndex: draggingIndex,\n draggingValue: nextValue\n });\n }\n };\n var updateCacheValue = useEvent(function (valueIndex, offsetPercent, deleteMark) {\n if (valueIndex === -1) {\n // >>>> Dragging on the track\n var startValue = originValues[0];\n var endValue = originValues[originValues.length - 1];\n var maxStartOffset = min - startValue;\n var maxEndOffset = max - endValue;\n\n // Get valid offset\n var offset = offsetPercent * (max - min);\n offset = Math.max(offset, maxStartOffset);\n offset = Math.min(offset, maxEndOffset);\n\n // Use first value to revert back of valid offset (like steps marks)\n var formatStartValue = formatValue(startValue + offset);\n offset = formatStartValue - startValue;\n var cloneCacheValues = originValues.map(function (val) {\n return val + offset;\n });\n flushValues(cloneCacheValues);\n } else {\n // >>>> Dragging on the handle\n var offsetDist = (max - min) * offsetPercent;\n\n // Always start with the valueIndex origin value\n var cloneValues = _toConsumableArray(cacheValues);\n cloneValues[valueIndex] = originValues[valueIndex];\n var next = offsetValues(cloneValues, offsetDist, valueIndex, 'dist');\n flushValues(next.values, next.value, deleteMark);\n }\n });\n var onStartMove = function onStartMove(e, valueIndex, startValues) {\n e.stopPropagation();\n\n // 如果是点击 track 触发的,需要传入变化后的初始值,而不能直接用 rawValues\n var initialValues = startValues || rawValues;\n var originValue = initialValues[valueIndex];\n setDraggingIndex(valueIndex);\n setDraggingValue(originValue);\n setOriginValues(initialValues);\n setCacheValues(initialValues);\n setDraggingDelete(false);\n var _getPosition = getPosition(e),\n startX = _getPosition.pageX,\n startY = _getPosition.pageY;\n\n // We declare it here since closure can't get outer latest value\n var deleteMark = false;\n\n // Internal trigger event\n if (onDragStart) {\n onDragStart({\n rawValues: initialValues,\n draggingIndex: valueIndex,\n draggingValue: originValue\n });\n }\n\n // Moving\n var onMouseMove = function onMouseMove(event) {\n event.preventDefault();\n var _getPosition2 = getPosition(event),\n moveX = _getPosition2.pageX,\n moveY = _getPosition2.pageY;\n var offsetX = moveX - startX;\n var offsetY = moveY - startY;\n var _containerRef$current = containerRef.current.getBoundingClientRect(),\n width = _containerRef$current.width,\n height = _containerRef$current.height;\n var offSetPercent;\n var removeDist;\n switch (direction) {\n case 'btt':\n offSetPercent = -offsetY / height;\n removeDist = offsetX;\n break;\n case 'ttb':\n offSetPercent = offsetY / height;\n removeDist = offsetX;\n break;\n case 'rtl':\n offSetPercent = -offsetX / width;\n removeDist = offsetY;\n break;\n default:\n offSetPercent = offsetX / width;\n removeDist = offsetY;\n }\n\n // Check if need mark remove\n deleteMark = editable ? Math.abs(removeDist) > REMOVE_DIST && minCount < cacheValues.length : false;\n setDraggingDelete(deleteMark);\n updateCacheValue(valueIndex, offSetPercent, deleteMark);\n };\n\n // End\n var onMouseUp = function onMouseUp(event) {\n event.preventDefault();\n document.removeEventListener('mouseup', onMouseUp);\n document.removeEventListener('mousemove', onMouseMove);\n if (touchEventTargetRef.current) {\n touchEventTargetRef.current.removeEventListener('touchmove', mouseMoveEventRef.current);\n touchEventTargetRef.current.removeEventListener('touchend', mouseUpEventRef.current);\n }\n mouseMoveEventRef.current = null;\n mouseUpEventRef.current = null;\n touchEventTargetRef.current = null;\n finishChange(deleteMark);\n setDraggingIndex(-1);\n setDraggingDelete(false);\n };\n document.addEventListener('mouseup', onMouseUp);\n document.addEventListener('mousemove', onMouseMove);\n e.currentTarget.addEventListener('touchend', onMouseUp);\n e.currentTarget.addEventListener('touchmove', onMouseMove);\n mouseMoveEventRef.current = onMouseMove;\n mouseUpEventRef.current = onMouseUp;\n touchEventTargetRef.current = e.currentTarget;\n };\n\n // Only return cache value when it mapping with rawValues\n var returnValues = React.useMemo(function () {\n var sourceValues = _toConsumableArray(rawValues).sort(function (a, b) {\n return a - b;\n });\n var targetValues = _toConsumableArray(cacheValues).sort(function (a, b) {\n return a - b;\n });\n var counts = {};\n targetValues.forEach(function (val) {\n counts[val] = (counts[val] || 0) + 1;\n });\n sourceValues.forEach(function (val) {\n counts[val] = (counts[val] || 0) - 1;\n });\n var maxDiffCount = editable ? 1 : 0;\n var diffCount = Object.values(counts).reduce(function (prev, next) {\n return prev + Math.abs(next);\n }, 0);\n return diffCount <= maxDiffCount ? cacheValues : rawValues;\n }, [rawValues, cacheValues, editable]);\n return [draggingIndex, draggingValue, draggingDelete, returnValues, onStartMove];\n}\nexport default useDrag;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport cls from 'classnames';\nimport useEvent from \"rc-util/es/hooks/useEvent\";\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport isEqual from \"rc-util/es/isEqual\";\nimport warning from \"rc-util/es/warning\";\nimport * as React from 'react';\nimport Handles from \"./Handles\";\nimport Marks from \"./Marks\";\nimport Steps from \"./Steps\";\nimport Tracks from \"./Tracks\";\nimport SliderContext from \"./context\";\nimport useDrag from \"./hooks/useDrag\";\nimport useOffset from \"./hooks/useOffset\";\nimport useRange from \"./hooks/useRange\";\n\n/**\n * New:\n * - click mark to update range value\n * - handleRender\n * - Fix handle with count not correct\n * - Fix pushable not work in some case\n * - No more FindDOMNode\n * - Move all position related style into inline style\n * - Key: up is plus, down is minus\n * - fix Key with step = null not align with marks\n * - Change range should not trigger onChange\n * - keyboard support pushable\n */\n\nvar Slider = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'rc-slider' : _props$prefixCls,\n className = props.className,\n style = props.style,\n classNames = props.classNames,\n styles = props.styles,\n id = props.id,\n _props$disabled = props.disabled,\n disabled = _props$disabled === void 0 ? false : _props$disabled,\n _props$keyboard = props.keyboard,\n keyboard = _props$keyboard === void 0 ? true : _props$keyboard,\n autoFocus = props.autoFocus,\n onFocus = props.onFocus,\n onBlur = props.onBlur,\n _props$min = props.min,\n min = _props$min === void 0 ? 0 : _props$min,\n _props$max = props.max,\n max = _props$max === void 0 ? 100 : _props$max,\n _props$step = props.step,\n step = _props$step === void 0 ? 1 : _props$step,\n value = props.value,\n defaultValue = props.defaultValue,\n range = props.range,\n count = props.count,\n onChange = props.onChange,\n onBeforeChange = props.onBeforeChange,\n onAfterChange = props.onAfterChange,\n onChangeComplete = props.onChangeComplete,\n _props$allowCross = props.allowCross,\n allowCross = _props$allowCross === void 0 ? true : _props$allowCross,\n _props$pushable = props.pushable,\n pushable = _props$pushable === void 0 ? false : _props$pushable,\n reverse = props.reverse,\n vertical = props.vertical,\n _props$included = props.included,\n included = _props$included === void 0 ? true : _props$included,\n startPoint = props.startPoint,\n trackStyle = props.trackStyle,\n handleStyle = props.handleStyle,\n railStyle = props.railStyle,\n dotStyle = props.dotStyle,\n activeDotStyle = props.activeDotStyle,\n marks = props.marks,\n dots = props.dots,\n handleRender = props.handleRender,\n activeHandleRender = props.activeHandleRender,\n track = props.track,\n _props$tabIndex = props.tabIndex,\n tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,\n ariaLabelForHandle = props.ariaLabelForHandle,\n ariaLabelledByForHandle = props.ariaLabelledByForHandle,\n ariaRequired = props.ariaRequired,\n ariaValueTextFormatterForHandle = props.ariaValueTextFormatterForHandle;\n var handlesRef = React.useRef(null);\n var containerRef = React.useRef(null);\n var direction = React.useMemo(function () {\n if (vertical) {\n return reverse ? 'ttb' : 'btt';\n }\n return reverse ? 'rtl' : 'ltr';\n }, [reverse, vertical]);\n\n // ============================ Range =============================\n var _useRange = useRange(range),\n _useRange2 = _slicedToArray(_useRange, 5),\n rangeEnabled = _useRange2[0],\n rangeEditable = _useRange2[1],\n rangeDraggableTrack = _useRange2[2],\n minCount = _useRange2[3],\n maxCount = _useRange2[4];\n var mergedMin = React.useMemo(function () {\n return isFinite(min) ? min : 0;\n }, [min]);\n var mergedMax = React.useMemo(function () {\n return isFinite(max) ? max : 100;\n }, [max]);\n\n // ============================= Step =============================\n var mergedStep = React.useMemo(function () {\n return step !== null && step <= 0 ? 1 : step;\n }, [step]);\n\n // ============================= Push =============================\n var mergedPush = React.useMemo(function () {\n if (typeof pushable === 'boolean') {\n return pushable ? mergedStep : false;\n }\n return pushable >= 0 ? pushable : false;\n }, [pushable, mergedStep]);\n\n // ============================ Marks =============================\n var markList = React.useMemo(function () {\n return Object.keys(marks || {}).map(function (key) {\n var mark = marks[key];\n var markObj = {\n value: Number(key)\n };\n if (mark && _typeof(mark) === 'object' && ! /*#__PURE__*/React.isValidElement(mark) && ('label' in mark || 'style' in mark)) {\n markObj.style = mark.style;\n markObj.label = mark.label;\n } else {\n markObj.label = mark;\n }\n return markObj;\n }).filter(function (_ref) {\n var label = _ref.label;\n return label || typeof label === 'number';\n }).sort(function (a, b) {\n return a.value - b.value;\n });\n }, [marks]);\n\n // ============================ Format ============================\n var _useOffset = useOffset(mergedMin, mergedMax, mergedStep, markList, allowCross, mergedPush),\n _useOffset2 = _slicedToArray(_useOffset, 2),\n formatValue = _useOffset2[0],\n offsetValues = _useOffset2[1];\n\n // ============================ Values ============================\n var _useMergedState = useMergedState(defaultValue, {\n value: value\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n mergedValue = _useMergedState2[0],\n setValue = _useMergedState2[1];\n var rawValues = React.useMemo(function () {\n var valueList = mergedValue === null || mergedValue === undefined ? [] : Array.isArray(mergedValue) ? mergedValue : [mergedValue];\n var _valueList = _slicedToArray(valueList, 1),\n _valueList$ = _valueList[0],\n val0 = _valueList$ === void 0 ? mergedMin : _valueList$;\n var returnValues = mergedValue === null ? [] : [val0];\n\n // Format as range\n if (rangeEnabled) {\n returnValues = _toConsumableArray(valueList);\n\n // When count provided or value is `undefined`, we fill values\n if (count || mergedValue === undefined) {\n var pointCount = count >= 0 ? count + 1 : 2;\n returnValues = returnValues.slice(0, pointCount);\n\n // Fill with count\n while (returnValues.length < pointCount) {\n var _returnValues;\n returnValues.push((_returnValues = returnValues[returnValues.length - 1]) !== null && _returnValues !== void 0 ? _returnValues : mergedMin);\n }\n }\n returnValues.sort(function (a, b) {\n return a - b;\n });\n }\n\n // Align in range\n returnValues.forEach(function (val, index) {\n returnValues[index] = formatValue(val);\n });\n return returnValues;\n }, [mergedValue, rangeEnabled, mergedMin, count, formatValue]);\n\n // =========================== onChange ===========================\n var getTriggerValue = function getTriggerValue(triggerValues) {\n return rangeEnabled ? triggerValues : triggerValues[0];\n };\n var triggerChange = useEvent(function (nextValues) {\n // Order first\n var cloneNextValues = _toConsumableArray(nextValues).sort(function (a, b) {\n return a - b;\n });\n\n // Trigger event if needed\n if (onChange && !isEqual(cloneNextValues, rawValues, true)) {\n onChange(getTriggerValue(cloneNextValues));\n }\n\n // We set this later since it will re-render component immediately\n setValue(cloneNextValues);\n });\n var finishChange = useEvent(function (draggingDelete) {\n // Trigger from `useDrag` will tell if it's a delete action\n if (draggingDelete) {\n handlesRef.current.hideHelp();\n }\n var finishValue = getTriggerValue(rawValues);\n onAfterChange === null || onAfterChange === void 0 || onAfterChange(finishValue);\n warning(!onAfterChange, '[rc-slider] `onAfterChange` is deprecated. Please use `onChangeComplete` instead.');\n onChangeComplete === null || onChangeComplete === void 0 || onChangeComplete(finishValue);\n });\n var onDelete = function onDelete(index) {\n if (disabled || !rangeEditable || rawValues.length <= minCount) {\n return;\n }\n var cloneNextValues = _toConsumableArray(rawValues);\n cloneNextValues.splice(index, 1);\n onBeforeChange === null || onBeforeChange === void 0 || onBeforeChange(getTriggerValue(cloneNextValues));\n triggerChange(cloneNextValues);\n var nextFocusIndex = Math.max(0, index - 1);\n handlesRef.current.hideHelp();\n handlesRef.current.focus(nextFocusIndex);\n };\n var _useDrag = useDrag(containerRef, direction, rawValues, mergedMin, mergedMax, formatValue, triggerChange, finishChange, offsetValues, rangeEditable, minCount),\n _useDrag2 = _slicedToArray(_useDrag, 5),\n draggingIndex = _useDrag2[0],\n draggingValue = _useDrag2[1],\n draggingDelete = _useDrag2[2],\n cacheValues = _useDrag2[3],\n onStartDrag = _useDrag2[4];\n\n /**\n * When `rangeEditable` will insert a new value in the values array.\n * Else it will replace the value in the values array.\n */\n var changeToCloseValue = function changeToCloseValue(newValue, e) {\n if (!disabled) {\n // Create new values\n var cloneNextValues = _toConsumableArray(rawValues);\n var valueIndex = 0;\n var valueBeforeIndex = 0; // Record the index which value < newValue\n var valueDist = mergedMax - mergedMin;\n rawValues.forEach(function (val, index) {\n var dist = Math.abs(newValue - val);\n if (dist <= valueDist) {\n valueDist = dist;\n valueIndex = index;\n }\n if (val < newValue) {\n valueBeforeIndex = index;\n }\n });\n var focusIndex = valueIndex;\n if (rangeEditable && valueDist !== 0 && (!maxCount || rawValues.length < maxCount)) {\n cloneNextValues.splice(valueBeforeIndex + 1, 0, newValue);\n focusIndex = valueBeforeIndex + 1;\n } else {\n cloneNextValues[valueIndex] = newValue;\n }\n\n // Fill value to match default 2 (only when `rawValues` is empty)\n if (rangeEnabled && !rawValues.length && count === undefined) {\n cloneNextValues.push(newValue);\n }\n var nextValue = getTriggerValue(cloneNextValues);\n onBeforeChange === null || onBeforeChange === void 0 || onBeforeChange(nextValue);\n triggerChange(cloneNextValues);\n if (e) {\n var _document$activeEleme, _document$activeEleme2;\n (_document$activeEleme = document.activeElement) === null || _document$activeEleme === void 0 || (_document$activeEleme2 = _document$activeEleme.blur) === null || _document$activeEleme2 === void 0 || _document$activeEleme2.call(_document$activeEleme);\n handlesRef.current.focus(focusIndex);\n onStartDrag(e, focusIndex, cloneNextValues);\n } else {\n // https://github.com/ant-design/ant-design/issues/49997\n onAfterChange === null || onAfterChange === void 0 || onAfterChange(nextValue);\n warning(!onAfterChange, '[rc-slider] `onAfterChange` is deprecated. Please use `onChangeComplete` instead.');\n onChangeComplete === null || onChangeComplete === void 0 || onChangeComplete(nextValue);\n }\n }\n };\n\n // ============================ Click =============================\n var onSliderMouseDown = function onSliderMouseDown(e) {\n e.preventDefault();\n var _containerRef$current = containerRef.current.getBoundingClientRect(),\n width = _containerRef$current.width,\n height = _containerRef$current.height,\n left = _containerRef$current.left,\n top = _containerRef$current.top,\n bottom = _containerRef$current.bottom,\n right = _containerRef$current.right;\n var clientX = e.clientX,\n clientY = e.clientY;\n var percent;\n switch (direction) {\n case 'btt':\n percent = (bottom - clientY) / height;\n break;\n case 'ttb':\n percent = (clientY - top) / height;\n break;\n case 'rtl':\n percent = (right - clientX) / width;\n break;\n default:\n percent = (clientX - left) / width;\n }\n var nextValue = mergedMin + percent * (mergedMax - mergedMin);\n changeToCloseValue(formatValue(nextValue), e);\n };\n\n // =========================== Keyboard ===========================\n var _React$useState = React.useState(null),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n keyboardValue = _React$useState2[0],\n setKeyboardValue = _React$useState2[1];\n var onHandleOffsetChange = function onHandleOffsetChange(offset, valueIndex) {\n if (!disabled) {\n var next = offsetValues(rawValues, offset, valueIndex);\n onBeforeChange === null || onBeforeChange === void 0 || onBeforeChange(getTriggerValue(rawValues));\n triggerChange(next.values);\n setKeyboardValue(next.value);\n }\n };\n React.useEffect(function () {\n if (keyboardValue !== null) {\n var valueIndex = rawValues.indexOf(keyboardValue);\n if (valueIndex >= 0) {\n handlesRef.current.focus(valueIndex);\n }\n }\n setKeyboardValue(null);\n }, [keyboardValue]);\n\n // ============================= Drag =============================\n var mergedDraggableTrack = React.useMemo(function () {\n if (rangeDraggableTrack && mergedStep === null) {\n if (process.env.NODE_ENV !== 'production') {\n warning(false, '`draggableTrack` is not supported when `step` is `null`.');\n }\n return false;\n }\n return rangeDraggableTrack;\n }, [rangeDraggableTrack, mergedStep]);\n var onStartMove = useEvent(function (e, valueIndex) {\n onStartDrag(e, valueIndex);\n onBeforeChange === null || onBeforeChange === void 0 || onBeforeChange(getTriggerValue(rawValues));\n });\n\n // Auto focus for updated handle\n var dragging = draggingIndex !== -1;\n React.useEffect(function () {\n if (!dragging) {\n var valueIndex = rawValues.lastIndexOf(draggingValue);\n handlesRef.current.focus(valueIndex);\n }\n }, [dragging]);\n\n // =========================== Included ===========================\n var sortedCacheValues = React.useMemo(function () {\n return _toConsumableArray(cacheValues).sort(function (a, b) {\n return a - b;\n });\n }, [cacheValues]);\n\n // Provide a range values with included [min, max]\n // Used for Track, Mark & Dot\n var _React$useMemo = React.useMemo(function () {\n if (!rangeEnabled) {\n return [mergedMin, sortedCacheValues[0]];\n }\n return [sortedCacheValues[0], sortedCacheValues[sortedCacheValues.length - 1]];\n }, [sortedCacheValues, rangeEnabled, mergedMin]),\n _React$useMemo2 = _slicedToArray(_React$useMemo, 2),\n includedStart = _React$useMemo2[0],\n includedEnd = _React$useMemo2[1];\n\n // ============================= Refs =============================\n React.useImperativeHandle(ref, function () {\n return {\n focus: function focus() {\n handlesRef.current.focus(0);\n },\n blur: function blur() {\n var _containerRef$current2;\n var _document = document,\n activeElement = _document.activeElement;\n if ((_containerRef$current2 = containerRef.current) !== null && _containerRef$current2 !== void 0 && _containerRef$current2.contains(activeElement)) {\n activeElement === null || activeElement === void 0 || activeElement.blur();\n }\n }\n };\n });\n\n // ========================== Auto Focus ==========================\n React.useEffect(function () {\n if (autoFocus) {\n handlesRef.current.focus(0);\n }\n }, []);\n\n // =========================== Context ============================\n var context = React.useMemo(function () {\n return {\n min: mergedMin,\n max: mergedMax,\n direction: direction,\n disabled: disabled,\n keyboard: keyboard,\n step: mergedStep,\n included: included,\n includedStart: includedStart,\n includedEnd: includedEnd,\n range: rangeEnabled,\n tabIndex: tabIndex,\n ariaLabelForHandle: ariaLabelForHandle,\n ariaLabelledByForHandle: ariaLabelledByForHandle,\n ariaRequired: ariaRequired,\n ariaValueTextFormatterForHandle: ariaValueTextFormatterForHandle,\n styles: styles || {},\n classNames: classNames || {}\n };\n }, [mergedMin, mergedMax, direction, disabled, keyboard, mergedStep, included, includedStart, includedEnd, rangeEnabled, tabIndex, ariaLabelForHandle, ariaLabelledByForHandle, ariaRequired, ariaValueTextFormatterForHandle, styles, classNames]);\n\n // ============================ Render ============================\n return /*#__PURE__*/React.createElement(SliderContext.Provider, {\n value: context\n }, /*#__PURE__*/React.createElement(\"div\", {\n ref: containerRef,\n className: cls(prefixCls, className, _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-disabled\"), disabled), \"\".concat(prefixCls, \"-vertical\"), vertical), \"\".concat(prefixCls, \"-horizontal\"), !vertical), \"\".concat(prefixCls, \"-with-marks\"), markList.length)),\n style: style,\n onMouseDown: onSliderMouseDown,\n id: id\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: cls(\"\".concat(prefixCls, \"-rail\"), classNames === null || classNames === void 0 ? void 0 : classNames.rail),\n style: _objectSpread(_objectSpread({}, railStyle), styles === null || styles === void 0 ? void 0 : styles.rail)\n }), track !== false && /*#__PURE__*/React.createElement(Tracks, {\n prefixCls: prefixCls,\n style: trackStyle,\n values: rawValues,\n startPoint: startPoint,\n onStartMove: mergedDraggableTrack ? onStartMove : undefined\n }), /*#__PURE__*/React.createElement(Steps, {\n prefixCls: prefixCls,\n marks: markList,\n dots: dots,\n style: dotStyle,\n activeStyle: activeDotStyle\n }), /*#__PURE__*/React.createElement(Handles, {\n ref: handlesRef,\n prefixCls: prefixCls,\n style: handleStyle,\n values: cacheValues,\n draggingIndex: draggingIndex,\n draggingDelete: draggingDelete,\n onStartMove: onStartMove,\n onOffsetChange: onHandleOffsetChange,\n onFocus: onFocus,\n onBlur: onBlur,\n handleRender: handleRender,\n activeHandleRender: activeHandleRender,\n onChangeComplete: finishChange,\n onDelete: rangeEditable ? onDelete : undefined\n }), /*#__PURE__*/React.createElement(Marks, {\n prefixCls: prefixCls,\n marks: markList,\n onClick: changeToCloseValue\n })));\n});\nif (process.env.NODE_ENV !== 'production') {\n Slider.displayName = 'Slider';\n}\nexport default Slider;","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport * as React from 'react';\n\n/** Format the value in the range of [min, max] */\n\n/** Format value align with step */\n\n/** Format value align with step & marks */\n\nexport default function useOffset(min, max, step, markList, allowCross, pushable) {\n var formatRangeValue = React.useCallback(function (val) {\n return Math.max(min, Math.min(max, val));\n }, [min, max]);\n var formatStepValue = React.useCallback(function (val) {\n if (step !== null) {\n var stepValue = min + Math.round((formatRangeValue(val) - min) / step) * step;\n\n // Cut number in case to be like 0.30000000000000004\n var getDecimal = function getDecimal(num) {\n return (String(num).split('.')[1] || '').length;\n };\n var maxDecimal = Math.max(getDecimal(step), getDecimal(max), getDecimal(min));\n var fixedValue = Number(stepValue.toFixed(maxDecimal));\n return min <= fixedValue && fixedValue <= max ? fixedValue : null;\n }\n return null;\n }, [step, min, max, formatRangeValue]);\n var formatValue = React.useCallback(function (val) {\n var formatNextValue = formatRangeValue(val);\n\n // List align values\n var alignValues = markList.map(function (mark) {\n return mark.value;\n });\n if (step !== null) {\n alignValues.push(formatStepValue(val));\n }\n\n // min & max\n alignValues.push(min, max);\n\n // Align with marks\n var closeValue = alignValues[0];\n var closeDist = max - min;\n alignValues.forEach(function (alignValue) {\n var dist = Math.abs(formatNextValue - alignValue);\n if (dist <= closeDist) {\n closeValue = alignValue;\n closeDist = dist;\n }\n });\n return closeValue;\n }, [min, max, markList, step, formatRangeValue, formatStepValue]);\n\n // ========================== Offset ==========================\n // Single Value\n var offsetValue = function offsetValue(values, offset, valueIndex) {\n var mode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'unit';\n if (typeof offset === 'number') {\n var nextValue;\n var originValue = values[valueIndex];\n\n // Only used for `dist` mode\n var targetDistValue = originValue + offset;\n\n // Compare next step value & mark value which is best match\n var potentialValues = [];\n markList.forEach(function (mark) {\n potentialValues.push(mark.value);\n });\n\n // Min & Max\n potentialValues.push(min, max);\n\n // In case origin value is align with mark but not with step\n potentialValues.push(formatStepValue(originValue));\n\n // Put offset step value also\n var sign = offset > 0 ? 1 : -1;\n if (mode === 'unit') {\n potentialValues.push(formatStepValue(originValue + sign * step));\n } else {\n potentialValues.push(formatStepValue(targetDistValue));\n }\n\n // Find close one\n potentialValues = potentialValues.filter(function (val) {\n return val !== null;\n })\n // Remove reverse value\n .filter(function (val) {\n return offset < 0 ? val <= originValue : val >= originValue;\n });\n if (mode === 'unit') {\n // `unit` mode can not contain itself\n potentialValues = potentialValues.filter(function (val) {\n return val !== originValue;\n });\n }\n var compareValue = mode === 'unit' ? originValue : targetDistValue;\n nextValue = potentialValues[0];\n var valueDist = Math.abs(nextValue - compareValue);\n potentialValues.forEach(function (potentialValue) {\n var dist = Math.abs(potentialValue - compareValue);\n if (dist < valueDist) {\n nextValue = potentialValue;\n valueDist = dist;\n }\n });\n\n // Out of range will back to range\n if (nextValue === undefined) {\n return offset < 0 ? min : max;\n }\n\n // `dist` mode\n if (mode === 'dist') {\n return nextValue;\n }\n\n // `unit` mode may need another round\n if (Math.abs(offset) > 1) {\n var cloneValues = _toConsumableArray(values);\n cloneValues[valueIndex] = nextValue;\n return offsetValue(cloneValues, offset - sign, valueIndex, mode);\n }\n return nextValue;\n } else if (offset === 'min') {\n return min;\n } else if (offset === 'max') {\n return max;\n }\n };\n\n /** Same as `offsetValue` but return `changed` mark to tell value changed */\n var offsetChangedValue = function offsetChangedValue(values, offset, valueIndex) {\n var mode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'unit';\n var originValue = values[valueIndex];\n var nextValue = offsetValue(values, offset, valueIndex, mode);\n return {\n value: nextValue,\n changed: nextValue !== originValue\n };\n };\n var needPush = function needPush(dist) {\n return pushable === null && dist === 0 || typeof pushable === 'number' && dist < pushable;\n };\n\n // Values\n var offsetValues = function offsetValues(values, offset, valueIndex) {\n var mode = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'unit';\n var nextValues = values.map(formatValue);\n var originValue = nextValues[valueIndex];\n var nextValue = offsetValue(nextValues, offset, valueIndex, mode);\n nextValues[valueIndex] = nextValue;\n if (allowCross === false) {\n // >>>>> Allow Cross\n var pushNum = pushable || 0;\n\n // ============ AllowCross ===============\n if (valueIndex > 0 && nextValues[valueIndex - 1] !== originValue) {\n nextValues[valueIndex] = Math.max(nextValues[valueIndex], nextValues[valueIndex - 1] + pushNum);\n }\n if (valueIndex < nextValues.length - 1 && nextValues[valueIndex + 1] !== originValue) {\n nextValues[valueIndex] = Math.min(nextValues[valueIndex], nextValues[valueIndex + 1] - pushNum);\n }\n } else if (typeof pushable === 'number' || pushable === null) {\n // >>>>> Pushable\n // =============== Push ==================\n\n // >>>>>> Basic push\n // End values\n for (var i = valueIndex + 1; i < nextValues.length; i += 1) {\n var changed = true;\n while (needPush(nextValues[i] - nextValues[i - 1]) && changed) {\n var _offsetChangedValue = offsetChangedValue(nextValues, 1, i);\n nextValues[i] = _offsetChangedValue.value;\n changed = _offsetChangedValue.changed;\n }\n }\n\n // Start values\n for (var _i = valueIndex; _i > 0; _i -= 1) {\n var _changed = true;\n while (needPush(nextValues[_i] - nextValues[_i - 1]) && _changed) {\n var _offsetChangedValue2 = offsetChangedValue(nextValues, -1, _i - 1);\n nextValues[_i - 1] = _offsetChangedValue2.value;\n _changed = _offsetChangedValue2.changed;\n }\n }\n\n // >>>>> Revert back to safe push range\n // End to Start\n for (var _i2 = nextValues.length - 1; _i2 > 0; _i2 -= 1) {\n var _changed2 = true;\n while (needPush(nextValues[_i2] - nextValues[_i2 - 1]) && _changed2) {\n var _offsetChangedValue3 = offsetChangedValue(nextValues, -1, _i2 - 1);\n nextValues[_i2 - 1] = _offsetChangedValue3.value;\n _changed2 = _offsetChangedValue3.changed;\n }\n }\n\n // Start to End\n for (var _i3 = 0; _i3 < nextValues.length - 1; _i3 += 1) {\n var _changed3 = true;\n while (needPush(nextValues[_i3 + 1] - nextValues[_i3]) && _changed3) {\n var _offsetChangedValue4 = offsetChangedValue(nextValues, 1, _i3 + 1);\n nextValues[_i3 + 1] = _offsetChangedValue4.value;\n _changed3 = _offsetChangedValue4.changed;\n }\n }\n }\n return {\n value: nextValues[valueIndex],\n values: nextValues\n };\n };\n return [formatValue, offsetValues];\n}","import { warning } from \"rc-util/es/warning\";\nimport { useMemo } from 'react';\nexport default function useRange(range) {\n return useMemo(function () {\n if (range === true || !range) {\n return [!!range, false, false, 0];\n }\n var editable = range.editable,\n draggableTrack = range.draggableTrack,\n minCount = range.minCount,\n maxCount = range.maxCount;\n if (process.env.NODE_ENV !== 'production') {\n warning(!editable || !draggableTrack, '`editable` can not work with `draggableTrack`.');\n }\n return [true, editable, !editable && draggableTrack, minCount || 0, maxCount];\n }, [range]);\n}","import { createContext } from 'react';\n/** @private Internal context. Do not use in your production. */\nconst SliderInternalContext = /*#__PURE__*/createContext({});\nexport default SliderInternalContext;","\"use client\";\n\nimport * as React from 'react';\nimport { useRef } from 'react';\nimport raf from \"rc-util/es/raf\";\nimport { composeRef } from \"rc-util/es/ref\";\nimport Tooltip from '../tooltip';\nconst SliderTooltip = /*#__PURE__*/React.forwardRef((props, ref) => {\n const {\n open,\n draggingDelete,\n value\n } = props;\n const innerRef = useRef(null);\n const mergedOpen = open && !draggingDelete;\n const rafRef = useRef(null);\n function cancelKeepAlign() {\n raf.cancel(rafRef.current);\n rafRef.current = null;\n }\n function keepAlign() {\n rafRef.current = raf(() => {\n var _a;\n (_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.forceAlign();\n rafRef.current = null;\n });\n }\n React.useEffect(() => {\n if (mergedOpen) {\n keepAlign();\n } else {\n cancelKeepAlign();\n }\n return cancelKeepAlign;\n }, [mergedOpen, props.title, value]);\n return /*#__PURE__*/React.createElement(Tooltip, Object.assign({\n ref: composeRef(innerRef, ref)\n }, props, {\n open: mergedOpen\n }));\n});\nif (process.env.NODE_ENV !== 'production') {\n SliderTooltip.displayName = 'SliderTooltip';\n}\nexport default SliderTooltip;","import { unit } from '@ant-design/cssinjs';\nimport { FastColor } from '@ant-design/fast-color';\nimport { resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\n// =============================== Base ===============================\nconst genBaseStyle = token => {\n const {\n componentCls,\n antCls,\n controlSize,\n dotSize,\n marginFull,\n marginPart,\n colorFillContentHover,\n handleColorDisabled,\n calc,\n handleSize,\n handleSizeHover,\n handleActiveColor,\n handleActiveOutlineColor,\n handleLineWidth,\n handleLineWidthHover,\n motionDurationMid\n } = token;\n return {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), {\n position: 'relative',\n height: controlSize,\n margin: `${unit(marginPart)} ${unit(marginFull)}`,\n padding: 0,\n cursor: 'pointer',\n touchAction: 'none',\n '&-vertical': {\n margin: `${unit(marginFull)} ${unit(marginPart)}`\n },\n [`${componentCls}-rail`]: {\n position: 'absolute',\n backgroundColor: token.railBg,\n borderRadius: token.borderRadiusXS,\n transition: `background-color ${motionDurationMid}`\n },\n [`${componentCls}-track,${componentCls}-tracks`]: {\n position: 'absolute',\n transition: `background-color ${motionDurationMid}`\n },\n [`${componentCls}-track`]: {\n backgroundColor: token.trackBg,\n borderRadius: token.borderRadiusXS\n },\n [`${componentCls}-track-draggable`]: {\n boxSizing: 'content-box',\n backgroundClip: 'content-box',\n border: 'solid rgba(0,0,0,0)'\n },\n '&:hover': {\n [`${componentCls}-rail`]: {\n backgroundColor: token.railHoverBg\n },\n [`${componentCls}-track`]: {\n backgroundColor: token.trackHoverBg\n },\n [`${componentCls}-dot`]: {\n borderColor: colorFillContentHover\n },\n [`${componentCls}-handle::after`]: {\n boxShadow: `0 0 0 ${unit(handleLineWidth)} ${token.colorPrimaryBorderHover}`\n },\n [`${componentCls}-dot-active`]: {\n borderColor: token.dotActiveBorderColor\n }\n },\n [`${componentCls}-handle`]: {\n position: 'absolute',\n width: handleSize,\n height: handleSize,\n outline: 'none',\n userSelect: 'none',\n // Dragging status\n '&-dragging-delete': {\n opacity: 0\n },\n // 扩大选区\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n insetInlineStart: calc(handleLineWidth).mul(-1).equal(),\n insetBlockStart: calc(handleLineWidth).mul(-1).equal(),\n width: calc(handleSize).add(calc(handleLineWidth).mul(2)).equal(),\n height: calc(handleSize).add(calc(handleLineWidth).mul(2)).equal(),\n backgroundColor: 'transparent'\n },\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n insetBlockStart: 0,\n insetInlineStart: 0,\n width: handleSize,\n height: handleSize,\n backgroundColor: token.colorBgElevated,\n boxShadow: `0 0 0 ${unit(handleLineWidth)} ${token.handleColor}`,\n outline: `0px solid transparent`,\n borderRadius: '50%',\n cursor: 'pointer',\n transition: `\n inset-inline-start ${motionDurationMid},\n inset-block-start ${motionDurationMid},\n width ${motionDurationMid},\n height ${motionDurationMid},\n box-shadow ${motionDurationMid},\n outline ${motionDurationMid}\n `\n },\n '&:hover, &:active, &:focus': {\n '&::before': {\n insetInlineStart: calc(handleSizeHover).sub(handleSize).div(2).add(handleLineWidthHover).mul(-1).equal(),\n insetBlockStart: calc(handleSizeHover).sub(handleSize).div(2).add(handleLineWidthHover).mul(-1).equal(),\n width: calc(handleSizeHover).add(calc(handleLineWidthHover).mul(2)).equal(),\n height: calc(handleSizeHover).add(calc(handleLineWidthHover).mul(2)).equal()\n },\n '&::after': {\n boxShadow: `0 0 0 ${unit(handleLineWidthHover)} ${handleActiveColor}`,\n outline: `6px solid ${handleActiveOutlineColor}`,\n width: handleSizeHover,\n height: handleSizeHover,\n insetInlineStart: token.calc(handleSize).sub(handleSizeHover).div(2).equal(),\n insetBlockStart: token.calc(handleSize).sub(handleSizeHover).div(2).equal()\n }\n }\n },\n [`&-lock ${componentCls}-handle`]: {\n '&::before, &::after': {\n transition: 'none'\n }\n },\n [`${componentCls}-mark`]: {\n position: 'absolute',\n fontSize: token.fontSize\n },\n [`${componentCls}-mark-text`]: {\n position: 'absolute',\n display: 'inline-block',\n color: token.colorTextDescription,\n textAlign: 'center',\n wordBreak: 'keep-all',\n cursor: 'pointer',\n userSelect: 'none',\n '&-active': {\n color: token.colorText\n }\n },\n [`${componentCls}-step`]: {\n position: 'absolute',\n background: 'transparent',\n pointerEvents: 'none'\n },\n [`${componentCls}-dot`]: {\n position: 'absolute',\n width: dotSize,\n height: dotSize,\n backgroundColor: token.colorBgElevated,\n border: `${unit(handleLineWidth)} solid ${token.dotBorderColor}`,\n borderRadius: '50%',\n cursor: 'pointer',\n transition: `border-color ${token.motionDurationSlow}`,\n pointerEvents: 'auto',\n '&-active': {\n borderColor: token.dotActiveBorderColor\n }\n },\n [`&${componentCls}-disabled`]: {\n cursor: 'not-allowed',\n [`${componentCls}-rail`]: {\n backgroundColor: `${token.railBg} !important`\n },\n [`${componentCls}-track`]: {\n backgroundColor: `${token.trackBgDisabled} !important`\n },\n [`\n ${componentCls}-dot\n `]: {\n backgroundColor: token.colorBgElevated,\n borderColor: token.trackBgDisabled,\n boxShadow: 'none',\n cursor: 'not-allowed'\n },\n [`${componentCls}-handle::after`]: {\n backgroundColor: token.colorBgElevated,\n cursor: 'not-allowed',\n width: handleSize,\n height: handleSize,\n boxShadow: `0 0 0 ${unit(handleLineWidth)} ${handleColorDisabled}`,\n insetInlineStart: 0,\n insetBlockStart: 0\n },\n [`\n ${componentCls}-mark-text,\n ${componentCls}-dot\n `]: {\n cursor: `not-allowed !important`\n }\n },\n [`&-tooltip ${antCls}-tooltip-inner`]: {\n minWidth: 'unset'\n }\n })\n };\n};\n// ============================ Horizontal ============================\nconst genDirectionStyle = (token, horizontal) => {\n const {\n componentCls,\n railSize,\n handleSize,\n dotSize,\n marginFull,\n calc\n } = token;\n const railPadding = horizontal ? 'paddingBlock' : 'paddingInline';\n const full = horizontal ? 'width' : 'height';\n const part = horizontal ? 'height' : 'width';\n const handlePos = horizontal ? 'insetBlockStart' : 'insetInlineStart';\n const markInset = horizontal ? 'top' : 'insetInlineStart';\n const handlePosSize = calc(railSize).mul(3).sub(handleSize).div(2).equal();\n const draggableBorderSize = calc(handleSize).sub(railSize).div(2).equal();\n const draggableBorder = horizontal ? {\n borderWidth: `${unit(draggableBorderSize)} 0`,\n transform: `translateY(${unit(calc(draggableBorderSize).mul(-1).equal())})`\n } : {\n borderWidth: `0 ${unit(draggableBorderSize)}`,\n transform: `translateX(${unit(token.calc(draggableBorderSize).mul(-1).equal())})`\n };\n return {\n [railPadding]: railSize,\n [part]: calc(railSize).mul(3).equal(),\n [`${componentCls}-rail`]: {\n [full]: '100%',\n [part]: railSize\n },\n [`${componentCls}-track,${componentCls}-tracks`]: {\n [part]: railSize\n },\n [`${componentCls}-track-draggable`]: Object.assign({}, draggableBorder),\n [`${componentCls}-handle`]: {\n [handlePos]: handlePosSize\n },\n [`${componentCls}-mark`]: {\n // Reset all\n insetInlineStart: 0,\n top: 0,\n // https://github.com/ant-design/ant-design/issues/43731\n [markInset]: calc(railSize).mul(3).add(horizontal ? 0 : marginFull).equal(),\n [full]: '100%'\n },\n [`${componentCls}-step`]: {\n // Reset all\n insetInlineStart: 0,\n top: 0,\n [markInset]: railSize,\n [full]: '100%',\n [part]: railSize\n },\n [`${componentCls}-dot`]: {\n position: 'absolute',\n [handlePos]: calc(railSize).sub(dotSize).div(2).equal()\n }\n };\n};\n// ============================ Horizontal ============================\nconst genHorizontalStyle = token => {\n const {\n componentCls,\n marginPartWithMark\n } = token;\n return {\n [`${componentCls}-horizontal`]: Object.assign(Object.assign({}, genDirectionStyle(token, true)), {\n [`&${componentCls}-with-marks`]: {\n marginBottom: marginPartWithMark\n }\n })\n };\n};\n// ============================= Vertical =============================\nconst genVerticalStyle = token => {\n const {\n componentCls\n } = token;\n return {\n [`${componentCls}-vertical`]: Object.assign(Object.assign({}, genDirectionStyle(token, false)), {\n height: '100%'\n })\n };\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = token => {\n // Handle line width is always width-er 1px\n const increaseHandleWidth = 1;\n const controlSize = token.controlHeightLG / 4;\n const controlSizeHover = token.controlHeightSM / 2;\n const handleLineWidth = token.lineWidth + increaseHandleWidth;\n const handleLineWidthHover = token.lineWidth + increaseHandleWidth * 1.5;\n const handleActiveColor = token.colorPrimary;\n const handleActiveOutlineColor = new FastColor(handleActiveColor).setA(0.2).toRgbString();\n return {\n controlSize,\n railSize: 4,\n handleSize: controlSize,\n handleSizeHover: controlSizeHover,\n dotSize: 8,\n handleLineWidth,\n handleLineWidthHover,\n railBg: token.colorFillTertiary,\n railHoverBg: token.colorFillSecondary,\n trackBg: token.colorPrimaryBorder,\n trackHoverBg: token.colorPrimaryBorderHover,\n handleColor: token.colorPrimaryBorder,\n handleActiveColor,\n handleActiveOutlineColor,\n handleColorDisabled: new FastColor(token.colorTextDisabled).onBackground(token.colorBgContainer).toHexString(),\n dotBorderColor: token.colorBorderSecondary,\n dotActiveBorderColor: token.colorPrimaryBorder,\n trackBgDisabled: token.colorBgContainerDisabled\n };\n};\nexport default genStyleHooks('Slider', token => {\n const sliderToken = mergeToken(token, {\n marginPart: token.calc(token.controlHeight).sub(token.controlSize).div(2).equal(),\n marginFull: token.calc(token.controlSize).div(2).equal(),\n marginPartWithMark: token.calc(token.controlHeightLG).sub(token.controlSize).equal()\n });\n return [genBaseStyle(sliderToken), genHorizontalStyle(sliderToken), genVerticalStyle(sliderToken)];\n}, prepareComponentToken);","import * as React from 'react';\nimport raf from \"rc-util/es/raf\";\nexport default function useRafLock() {\n const [state, setState] = React.useState(false);\n const rafRef = React.useRef(null);\n const cleanup = () => {\n raf.cancel(rafRef.current);\n };\n const setDelayState = nextState => {\n cleanup();\n if (nextState) {\n setState(nextState);\n } else {\n rafRef.current = raf(() => {\n setState(nextState);\n });\n }\n };\n React.useEffect(() => cleanup, []);\n return [state, setDelayState];\n}","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nimport classNames from 'classnames';\nimport RcSlider from 'rc-slider';\nimport raf from \"rc-util/es/raf\";\nimport { devUseWarning } from '../_util/warning';\nimport DisabledContext from '../config-provider/DisabledContext';\nimport SliderInternalContext from './Context';\nimport SliderTooltip from './SliderTooltip';\nimport useStyle from './style';\nimport useRafLock from './useRafLock';\nimport { useComponentConfig } from '../config-provider/context';\nfunction getTipFormatter(tipFormatter, legacyTipFormatter) {\n if (tipFormatter || tipFormatter === null) {\n return tipFormatter;\n }\n if (legacyTipFormatter || legacyTipFormatter === null) {\n return legacyTipFormatter;\n }\n return val => typeof val === 'number' ? val.toString() : '';\n}\nconst Slider = /*#__PURE__*/React.forwardRef((props, ref) => {\n const {\n prefixCls: customizePrefixCls,\n range,\n className,\n rootClassName,\n style,\n disabled,\n // Deprecated Props\n tooltipPrefixCls: legacyTooltipPrefixCls,\n tipFormatter: legacyTipFormatter,\n tooltipVisible: legacyTooltipVisible,\n getTooltipPopupContainer: legacyGetTooltipPopupContainer,\n tooltipPlacement: legacyTooltipPlacement,\n tooltip = {},\n onChangeComplete,\n classNames: sliderClassNames,\n styles\n } = props,\n restProps = __rest(props, [\"prefixCls\", \"range\", \"className\", \"rootClassName\", \"style\", \"disabled\", \"tooltipPrefixCls\", \"tipFormatter\", \"tooltipVisible\", \"getTooltipPopupContainer\", \"tooltipPlacement\", \"tooltip\", \"onChangeComplete\", \"classNames\", \"styles\"]);\n const {\n vertical\n } = props;\n const {\n getPrefixCls,\n direction: contextDirection,\n className: contextClassName,\n style: contextStyle,\n classNames: contextClassNames,\n styles: contextStyles,\n getPopupContainer\n } = useComponentConfig('slider');\n const contextDisabled = React.useContext(DisabledContext);\n const mergedDisabled = disabled !== null && disabled !== void 0 ? disabled : contextDisabled;\n // ============================= Context ==============================\n const {\n handleRender: contextHandleRender,\n direction: internalContextDirection\n } = React.useContext(SliderInternalContext);\n const mergedDirection = internalContextDirection || contextDirection;\n const isRTL = mergedDirection === 'rtl';\n // =============================== Open ===============================\n const [hoverOpen, setHoverOpen] = useRafLock();\n const [focusOpen, setFocusOpen] = useRafLock();\n const tooltipProps = Object.assign({}, tooltip);\n const {\n open: tooltipOpen,\n placement: tooltipPlacement,\n getPopupContainer: getTooltipPopupContainer,\n prefixCls: customizeTooltipPrefixCls,\n formatter: tipFormatter\n } = tooltipProps;\n const lockOpen = tooltipOpen !== null && tooltipOpen !== void 0 ? tooltipOpen : legacyTooltipVisible;\n const activeOpen = (hoverOpen || focusOpen) && lockOpen !== false;\n const mergedTipFormatter = getTipFormatter(tipFormatter, legacyTipFormatter);\n // ============================= Change ==============================\n const [dragging, setDragging] = useRafLock();\n const onInternalChangeComplete = nextValues => {\n onChangeComplete === null || onChangeComplete === void 0 ? void 0 : onChangeComplete(nextValues);\n setDragging(false);\n };\n // ============================ Placement ============================\n const getTooltipPlacement = (placement, vert) => {\n if (placement) {\n return placement;\n }\n if (!vert) {\n return 'top';\n }\n return isRTL ? 'left' : 'right';\n };\n // ============================== Style ===============================\n const prefixCls = getPrefixCls('slider', customizePrefixCls);\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls);\n const rootClassNames = classNames(className, contextClassName, contextClassNames.root, sliderClassNames === null || sliderClassNames === void 0 ? void 0 : sliderClassNames.root, rootClassName, {\n [`${prefixCls}-rtl`]: isRTL,\n [`${prefixCls}-lock`]: dragging\n }, hashId, cssVarCls);\n // make reverse default on rtl direction\n if (isRTL && !restProps.vertical) {\n restProps.reverse = !restProps.reverse;\n }\n // ============================= Warning ==============================\n // Warning for deprecated usage\n if (process.env.NODE_ENV !== 'production') {\n const warning = devUseWarning('Slider');\n [['tooltipPrefixCls', 'prefixCls'], ['getTooltipPopupContainer', 'getPopupContainer'], ['tipFormatter', 'formatter'], ['tooltipPlacement', 'placement'], ['tooltipVisible', 'open']].forEach(([deprecatedName, newName]) => {\n warning.deprecated(!(deprecatedName in props), deprecatedName, `tooltip.${newName}`);\n });\n }\n // ============================== Handle ==============================\n React.useEffect(() => {\n const onMouseUp = () => {\n // Delay for 1 frame to make the click to enable hide tooltip\n // even when the handle is focused\n raf(() => {\n setFocusOpen(false);\n }, 1);\n };\n document.addEventListener('mouseup', onMouseUp);\n return () => {\n document.removeEventListener('mouseup', onMouseUp);\n };\n }, []);\n const useActiveTooltipHandle = range && !lockOpen;\n const handleRender = contextHandleRender || ((node, info) => {\n const {\n index\n } = info;\n const nodeProps = node.props;\n function proxyEvent(eventName, event, triggerRestPropsEvent) {\n var _a, _b, _c, _d;\n if (triggerRestPropsEvent) {\n (_b = (_a = restProps)[eventName]) === null || _b === void 0 ? void 0 : _b.call(_a, event);\n }\n (_d = (_c = nodeProps)[eventName]) === null || _d === void 0 ? void 0 : _d.call(_c, event);\n }\n const passedProps = Object.assign(Object.assign({}, nodeProps), {\n onMouseEnter: e => {\n setHoverOpen(true);\n proxyEvent('onMouseEnter', e);\n },\n onMouseLeave: e => {\n setHoverOpen(false);\n proxyEvent('onMouseLeave', e);\n },\n onMouseDown: e => {\n setFocusOpen(true);\n setDragging(true);\n proxyEvent('onMouseDown', e);\n },\n onFocus: e => {\n var _a;\n setFocusOpen(true);\n (_a = restProps.onFocus) === null || _a === void 0 ? void 0 : _a.call(restProps, e);\n proxyEvent('onFocus', e, true);\n },\n onBlur: e => {\n var _a;\n setFocusOpen(false);\n (_a = restProps.onBlur) === null || _a === void 0 ? void 0 : _a.call(restProps, e);\n proxyEvent('onBlur', e, true);\n }\n });\n const cloneNode = /*#__PURE__*/React.cloneElement(node, passedProps);\n const open = (!!lockOpen || activeOpen) && mergedTipFormatter !== null;\n // Wrap on handle with Tooltip when is single mode or multiple with all show tooltip\n if (!useActiveTooltipHandle) {\n return /*#__PURE__*/React.createElement(SliderTooltip, Object.assign({}, tooltipProps, {\n prefixCls: getPrefixCls('tooltip', customizeTooltipPrefixCls !== null && customizeTooltipPrefixCls !== void 0 ? customizeTooltipPrefixCls : legacyTooltipPrefixCls),\n title: mergedTipFormatter ? mergedTipFormatter(info.value) : '',\n value: info.value,\n open: open,\n placement: getTooltipPlacement(tooltipPlacement !== null && tooltipPlacement !== void 0 ? tooltipPlacement : legacyTooltipPlacement, vertical),\n key: index,\n classNames: {\n root: `${prefixCls}-tooltip`\n },\n getPopupContainer: getTooltipPopupContainer || legacyGetTooltipPopupContainer || getPopupContainer\n }), cloneNode);\n }\n return cloneNode;\n });\n // ========================== Active Handle ===========================\n const activeHandleRender = useActiveTooltipHandle ? (handle, info) => {\n const cloneNode = /*#__PURE__*/React.cloneElement(handle, {\n style: Object.assign(Object.assign({}, handle.props.style), {\n visibility: 'hidden'\n })\n });\n return /*#__PURE__*/React.createElement(SliderTooltip, Object.assign({}, tooltipProps, {\n prefixCls: getPrefixCls('tooltip', customizeTooltipPrefixCls !== null && customizeTooltipPrefixCls !== void 0 ? customizeTooltipPrefixCls : legacyTooltipPrefixCls),\n title: mergedTipFormatter ? mergedTipFormatter(info.value) : '',\n open: mergedTipFormatter !== null && activeOpen,\n placement: getTooltipPlacement(tooltipPlacement !== null && tooltipPlacement !== void 0 ? tooltipPlacement : legacyTooltipPlacement, vertical),\n key: \"tooltip\",\n classNames: {\n root: `${prefixCls}-tooltip`\n },\n getPopupContainer: getTooltipPopupContainer || legacyGetTooltipPopupContainer || getPopupContainer,\n draggingDelete: info.draggingDelete\n }), cloneNode);\n } : undefined;\n // ============================== Render ==============================\n const rootStyle = Object.assign(Object.assign(Object.assign(Object.assign({}, contextStyles.root), contextStyle), styles === null || styles === void 0 ? void 0 : styles.root), style);\n const mergedTracks = Object.assign(Object.assign({}, contextStyles.tracks), styles === null || styles === void 0 ? void 0 : styles.tracks);\n const mergedTracksClassNames = classNames(contextClassNames.tracks, sliderClassNames === null || sliderClassNames === void 0 ? void 0 : sliderClassNames.tracks);\n return wrapCSSVar(\n /*#__PURE__*/\n // @ts-ignore\n React.createElement(RcSlider, Object.assign({}, restProps, {\n classNames: Object.assign({\n handle: classNames(contextClassNames.handle, sliderClassNames === null || sliderClassNames === void 0 ? void 0 : sliderClassNames.handle),\n rail: classNames(contextClassNames.rail, sliderClassNames === null || sliderClassNames === void 0 ? void 0 : sliderClassNames.rail),\n track: classNames(contextClassNames.track, sliderClassNames === null || sliderClassNames === void 0 ? void 0 : sliderClassNames.track)\n }, mergedTracksClassNames ? {\n tracks: mergedTracksClassNames\n } : {}),\n styles: Object.assign({\n handle: Object.assign(Object.assign({}, contextStyles.handle), styles === null || styles === void 0 ? void 0 : styles.handle),\n rail: Object.assign(Object.assign({}, contextStyles.rail), styles === null || styles === void 0 ? void 0 : styles.rail),\n track: Object.assign(Object.assign({}, contextStyles.track), styles === null || styles === void 0 ? void 0 : styles.track)\n }, Object.keys(mergedTracks).length ? {\n tracks: mergedTracks\n } : {}),\n step: restProps.step,\n range: range,\n className: rootClassNames,\n style: rootStyle,\n disabled: mergedDisabled,\n ref: ref,\n prefixCls: prefixCls,\n handleRender: handleRender,\n activeHandleRender: activeHandleRender,\n onChangeComplete: onInternalChangeComplete\n })));\n});\nif (process.env.NODE_ENV !== 'production') {\n Slider.displayName = 'Slider';\n}\nexport default Slider;","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { UnstableContext } from 'rc-slider';\nimport useEvent from \"rc-util/es/hooks/useEvent\";\nimport Slider from '../../slider';\nimport SliderInternalContext from '../../slider/Context';\nimport { getGradientPercentColor } from '../util';\nexport const GradientColorSlider = props => {\n const {\n prefixCls,\n colors,\n type,\n color,\n range = false,\n className,\n activeIndex,\n onActive,\n onDragStart,\n onDragChange,\n onKeyDelete\n } = props,\n restProps = __rest(props, [\"prefixCls\", \"colors\", \"type\", \"color\", \"range\", \"className\", \"activeIndex\", \"onActive\", \"onDragStart\", \"onDragChange\", \"onKeyDelete\"]);\n const sliderProps = Object.assign(Object.assign({}, restProps), {\n track: false\n });\n // ========================== Background ==========================\n const linearCss = React.useMemo(() => {\n const colorsStr = colors.map(c => `${c.color} ${c.percent}%`).join(', ');\n return `linear-gradient(90deg, ${colorsStr})`;\n }, [colors]);\n const pointColor = React.useMemo(() => {\n if (!color || !type) {\n return null;\n }\n if (type === 'alpha') {\n return color.toRgbString();\n }\n return `hsl(${color.toHsb().h}, 100%, 50%)`;\n }, [color, type]);\n // ======================= Context: Slider ========================\n const onInternalDragStart = useEvent(onDragStart);\n const onInternalDragChange = useEvent(onDragChange);\n const unstableContext = React.useMemo(() => ({\n onDragStart: onInternalDragStart,\n onDragChange: onInternalDragChange\n }), []);\n // ======================= Context: Render ========================\n const handleRender = useEvent((ori, info) => {\n const {\n onFocus,\n style,\n className: handleCls,\n onKeyDown\n } = ori.props;\n // Point Color\n const mergedStyle = Object.assign({}, style);\n if (type === 'gradient') {\n mergedStyle.background = getGradientPercentColor(colors, info.value);\n }\n return /*#__PURE__*/React.cloneElement(ori, {\n onFocus: e => {\n onActive === null || onActive === void 0 ? void 0 : onActive(info.index);\n onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);\n },\n style: mergedStyle,\n className: classNames(handleCls, {\n [`${prefixCls}-slider-handle-active`]: activeIndex === info.index\n }),\n onKeyDown: e => {\n if ((e.key === 'Delete' || e.key === 'Backspace') && onKeyDelete) {\n onKeyDelete(info.index);\n }\n onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);\n }\n });\n });\n const sliderContext = React.useMemo(() => ({\n direction: 'ltr',\n handleRender\n }), []);\n // ============================ Render ============================\n return /*#__PURE__*/React.createElement(SliderInternalContext.Provider, {\n value: sliderContext\n }, /*#__PURE__*/React.createElement(UnstableContext.Provider, {\n value: unstableContext\n }, /*#__PURE__*/React.createElement(Slider, Object.assign({}, sliderProps, {\n className: classNames(className, `${prefixCls}-slider`),\n tooltip: {\n open: false\n },\n range: {\n editable: range,\n minCount: 2\n },\n styles: {\n rail: {\n background: linearCss\n },\n handle: pointColor ? {\n background: pointColor\n } : {}\n },\n classNames: {\n rail: `${prefixCls}-slider-rail`,\n handle: `${prefixCls}-slider-handle`\n }\n }))));\n};\nconst SingleColorSlider = props => {\n const {\n value,\n onChange,\n onChangeComplete\n } = props;\n const singleOnChange = v => onChange(v[0]);\n const singleOnChangeComplete = v => onChangeComplete(v[0]);\n return /*#__PURE__*/React.createElement(GradientColorSlider, Object.assign({}, props, {\n value: [value],\n onChange: singleOnChange,\n onChangeComplete: singleOnChangeComplete\n }));\n};\nexport default SingleColorSlider;","\"use client\";\n\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport * as React from 'react';\nimport { AggregationColor } from '../../color';\nimport { getGradientPercentColor } from '../../util';\nimport { GradientColorSlider } from '../ColorSlider';\nfunction sortColors(colors) {\n return _toConsumableArray(colors).sort((a, b) => a.percent - b.percent);\n}\n/**\n * GradientColorBar will auto show when the mode is `gradient`.\n */\nconst GradientColorBar = props => {\n const {\n prefixCls,\n mode,\n onChange,\n onChangeComplete,\n onActive,\n activeIndex,\n onGradientDragging,\n colors\n } = props;\n const isGradient = mode === 'gradient';\n // ============================= Colors =============================\n const colorList = React.useMemo(() => colors.map(info => ({\n percent: info.percent,\n color: info.color.toRgbString()\n })), [colors]);\n const values = React.useMemo(() => colorList.map(info => info.percent), [colorList]);\n // ============================== Drag ==============================\n const colorsRef = React.useRef(colorList);\n // Record current colors\n const onDragStart = ({\n rawValues,\n draggingIndex,\n draggingValue\n }) => {\n if (rawValues.length > colorList.length) {\n // Add new node\n const newPointColor = getGradientPercentColor(colorList, draggingValue);\n const nextColors = _toConsumableArray(colorList);\n nextColors.splice(draggingIndex, 0, {\n percent: draggingValue,\n color: newPointColor\n });\n colorsRef.current = nextColors;\n } else {\n colorsRef.current = colorList;\n }\n onGradientDragging(true);\n onChange(new AggregationColor(sortColors(colorsRef.current)), true);\n };\n // Adjust color when dragging\n const onDragChange = ({\n deleteIndex,\n draggingIndex,\n draggingValue\n }) => {\n let nextColors = _toConsumableArray(colorsRef.current);\n if (deleteIndex !== -1) {\n nextColors.splice(deleteIndex, 1);\n } else {\n nextColors[draggingIndex] = Object.assign(Object.assign({}, nextColors[draggingIndex]), {\n percent: draggingValue\n });\n nextColors = sortColors(nextColors);\n }\n onChange(new AggregationColor(nextColors), true);\n };\n // ============================== Key ===============================\n const onKeyDelete = index => {\n const nextColors = _toConsumableArray(colorList);\n nextColors.splice(index, 1);\n const nextColor = new AggregationColor(nextColors);\n onChange(nextColor);\n onChangeComplete(nextColor);\n };\n // ============================= Change =============================\n const onInternalChangeComplete = nextValues => {\n onChangeComplete(new AggregationColor(colorList));\n // Reset `activeIndex` if out of range\n if (activeIndex >= nextValues.length) {\n onActive(nextValues.length - 1);\n }\n onGradientDragging(false);\n };\n // ============================= Render =============================\n if (!isGradient) {\n return null;\n }\n return /*#__PURE__*/React.createElement(GradientColorSlider, {\n min: 0,\n max: 100,\n prefixCls: prefixCls,\n className: `${prefixCls}-gradient-slider`,\n colors: colorList,\n color: null,\n value: values,\n range: true,\n onChangeComplete: onInternalChangeComplete,\n disabled: false,\n type: \"gradient\",\n // Active\n activeIndex: activeIndex,\n onActive: onActive,\n // Drag\n onDragStart: onDragStart,\n onDragChange: onDragChange,\n onKeyDelete: onKeyDelete\n });\n};\nexport default /*#__PURE__*/React.memo(GradientColorBar);","\"use client\";\n\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { useContext } from 'react';\nimport RcColorPicker from '@rc-component/color-picker';\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport Segmented from '../../../segmented';\nimport { AggregationColor } from '../../color';\nimport { PanelPickerContext } from '../../context';\nimport { genAlphaColor, generateColor } from '../../util';\nimport ColorClear from '../ColorClear';\nimport ColorInput from '../ColorInput';\nimport ColorSlider from '../ColorSlider';\nimport GradientColorBar from './GradientColorBar';\nconst components = {\n slider: ColorSlider\n};\nconst PanelPicker = () => {\n const panelPickerContext = useContext(PanelPickerContext);\n const {\n mode,\n onModeChange,\n modeOptions,\n prefixCls,\n allowClear,\n value,\n disabledAlpha,\n onChange,\n onClear,\n onChangeComplete,\n activeIndex,\n gradientDragging\n } = panelPickerContext,\n injectProps = __rest(panelPickerContext, [\"mode\", \"onModeChange\", \"modeOptions\", \"prefixCls\", \"allowClear\", \"value\", \"disabledAlpha\", \"onChange\", \"onClear\", \"onChangeComplete\", \"activeIndex\", \"gradientDragging\"]);\n // ============================ Colors ============================\n const colors = React.useMemo(() => {\n if (!value.cleared) {\n return value.getColors();\n }\n return [{\n percent: 0,\n color: new AggregationColor('')\n }, {\n percent: 100,\n color: new AggregationColor('')\n }];\n }, [value]);\n // ========================= Single Color =========================\n const isSingle = !value.isGradient();\n // We cache the point color in case user drag the gradient point across another one\n const [lockedColor, setLockedColor] = React.useState(value);\n // Use layout effect here since `useEffect` will cause a blink when mouseDown\n useLayoutEffect(() => {\n var _a;\n if (!isSingle) {\n setLockedColor((_a = colors[activeIndex]) === null || _a === void 0 ? void 0 : _a.color);\n }\n }, [gradientDragging, activeIndex]);\n const activeColor = React.useMemo(() => {\n var _a;\n if (isSingle) {\n return value;\n }\n // Use cache when dragging. User can not operation panel when dragging.\n if (gradientDragging) {\n return lockedColor;\n }\n return (_a = colors[activeIndex]) === null || _a === void 0 ? void 0 : _a.color;\n }, [value, activeIndex, isSingle, lockedColor, gradientDragging]);\n // ========================= Picker Color =========================\n const [pickerColor, setPickerColor] = React.useState(activeColor);\n const [forceSync, setForceSync] = React.useState(0);\n const mergedPickerColor = (pickerColor === null || pickerColor === void 0 ? void 0 : pickerColor.equals(activeColor)) ? activeColor : pickerColor;\n useLayoutEffect(() => {\n setPickerColor(activeColor);\n }, [forceSync, activeColor === null || activeColor === void 0 ? void 0 : activeColor.toHexString()]);\n // ============================ Change ============================\n const fillColor = (nextColor, info) => {\n let submitColor = generateColor(nextColor);\n // Fill alpha color to 100% if origin is cleared color\n if (value.cleared) {\n const rgb = submitColor.toRgb();\n // Auto fill color if origin is `0/0/0` to enhance user experience\n if (!rgb.r && !rgb.g && !rgb.b && info) {\n const {\n type: infoType,\n value: infoValue = 0\n } = info;\n submitColor = new AggregationColor({\n h: infoType === 'hue' ? infoValue : 0,\n s: 1,\n b: 1,\n a: infoType === 'alpha' ? infoValue / 100 : 1\n });\n } else {\n submitColor = genAlphaColor(submitColor);\n }\n }\n if (mode === 'single') {\n return submitColor;\n }\n const nextColors = _toConsumableArray(colors);\n nextColors[activeIndex] = Object.assign(Object.assign({}, nextColors[activeIndex]), {\n color: submitColor\n });\n return new AggregationColor(nextColors);\n };\n const onPickerChange = (colorValue, fromPicker, info) => {\n const nextColor = fillColor(colorValue, info);\n setPickerColor(nextColor.isGradient() ? nextColor.getColors()[activeIndex].color : nextColor);\n onChange(nextColor, fromPicker);\n };\n const onInternalChangeComplete = (nextColor, info) => {\n // Trigger complete event\n onChangeComplete(fillColor(nextColor, info));\n // Back of origin color in case in controlled\n // This will set after `onChangeComplete` to avoid `setState` trigger rerender\n // which will make `fillColor` get wrong `color.cleared` state\n setForceSync(ori => ori + 1);\n };\n const onInputChange = colorValue => {\n onChange(fillColor(colorValue));\n };\n // ============================ Render ============================\n // Operation bar\n let operationNode = null;\n const showMode = modeOptions.length > 1;\n if (allowClear || showMode) {\n operationNode = /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-operation`\n }, showMode && (/*#__PURE__*/React.createElement(Segmented, {\n size: \"small\",\n options: modeOptions,\n value: mode,\n onChange: onModeChange\n })), /*#__PURE__*/React.createElement(ColorClear, Object.assign({\n prefixCls: prefixCls,\n value: value,\n onChange: clearColor => {\n onChange(clearColor);\n onClear === null || onClear === void 0 ? void 0 : onClear();\n }\n }, injectProps)));\n }\n // Return\n return /*#__PURE__*/React.createElement(React.Fragment, null, operationNode, /*#__PURE__*/React.createElement(GradientColorBar, Object.assign({}, panelPickerContext, {\n colors: colors\n })), /*#__PURE__*/React.createElement(RcColorPicker, {\n prefixCls: prefixCls,\n value: mergedPickerColor === null || mergedPickerColor === void 0 ? void 0 : mergedPickerColor.toHsb(),\n disabledAlpha: disabledAlpha,\n onChange: (colorValue, info) => {\n onPickerChange(colorValue, true, info);\n },\n onChangeComplete: (colorValue, info) => {\n onInternalChangeComplete(colorValue, info);\n },\n components: components\n }), /*#__PURE__*/React.createElement(ColorInput, Object.assign({\n value: activeColor,\n onChange: onInputChange,\n prefixCls: prefixCls,\n disabledAlpha: disabledAlpha\n }, injectProps)));\n};\nexport default PanelPicker;","\"use client\";\n\nimport React, { useContext } from 'react';\nimport { PanelPresetsContext } from '../context';\nimport ColorPresets from './ColorPresets';\nconst PanelPresets = () => {\n const {\n prefixCls,\n value,\n presets,\n onChange\n } = useContext(PanelPresetsContext);\n return Array.isArray(presets) ? (/*#__PURE__*/React.createElement(ColorPresets, {\n value: value,\n presets: presets,\n prefixCls: prefixCls,\n onChange: onChange\n })) : null;\n};\nexport default PanelPresets;","\"use client\";\n\nimport React from 'react';\nimport Divider from '../divider';\nimport PanelPicker from './components/PanelPicker';\nimport PanelPresets from './components/PanelPresets';\nimport { PanelPickerContext, PanelPresetsContext } from './context';\nconst ColorPickerPanel = props => {\n const {\n prefixCls,\n presets,\n panelRender,\n value,\n onChange,\n onClear,\n allowClear,\n disabledAlpha,\n mode,\n onModeChange,\n modeOptions,\n onChangeComplete,\n activeIndex,\n onActive,\n format,\n onFormatChange,\n gradientDragging,\n onGradientDragging,\n disabledFormat\n } = props;\n const colorPickerPanelPrefixCls = `${prefixCls}-inner`;\n // ===================== Context ======================\n const panelContext = React.useMemo(() => ({\n prefixCls,\n value,\n onChange,\n onClear,\n allowClear,\n disabledAlpha,\n mode,\n onModeChange,\n modeOptions,\n onChangeComplete,\n activeIndex,\n onActive,\n format,\n onFormatChange,\n gradientDragging,\n onGradientDragging,\n disabledFormat\n }), [prefixCls, value, onChange, onClear, allowClear, disabledAlpha, mode, onModeChange, modeOptions, onChangeComplete, activeIndex, onActive, format, onFormatChange, gradientDragging, onGradientDragging, disabledFormat]);\n const presetContext = React.useMemo(() => ({\n prefixCls,\n value,\n presets,\n onChange\n }), [prefixCls, value, presets, onChange]);\n // ====================== Render ======================\n const innerPanel = /*#__PURE__*/React.createElement(\"div\", {\n className: `${colorPickerPanelPrefixCls}-content`\n }, /*#__PURE__*/React.createElement(PanelPicker, null), Array.isArray(presets) && /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(PanelPresets, null));\n return /*#__PURE__*/React.createElement(PanelPickerContext.Provider, {\n value: panelContext\n }, /*#__PURE__*/React.createElement(PanelPresetsContext.Provider, {\n value: presetContext\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: colorPickerPanelPrefixCls\n }, typeof panelRender === 'function' ? panelRender(innerPanel, {\n components: {\n Picker: PanelPicker,\n Presets: PanelPresets\n }\n }) : innerPanel)));\n};\nif (process.env.NODE_ENV !== 'production') {\n ColorPickerPanel.displayName = 'ColorPickerPanel';\n}\nexport default ColorPickerPanel;","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { forwardRef, useMemo } from 'react';\nimport { ColorBlock } from '@rc-component/color-picker';\nimport classNames from 'classnames';\nimport pickAttrs from \"rc-util/es/pickAttrs\";\nimport { useLocale } from '../../locale';\nimport { getColorAlpha } from '../util';\nimport ColorClear from './ColorClear';\nconst ColorTrigger = /*#__PURE__*/forwardRef((props, ref) => {\n const {\n color,\n prefixCls,\n open,\n disabled,\n format,\n className,\n showText,\n activeIndex\n } = props,\n rest = __rest(props, [\"color\", \"prefixCls\", \"open\", \"disabled\", \"format\", \"className\", \"showText\", \"activeIndex\"]);\n const colorTriggerPrefixCls = `${prefixCls}-trigger`;\n const colorTextPrefixCls = `${colorTriggerPrefixCls}-text`;\n const colorTextCellPrefixCls = `${colorTextPrefixCls}-cell`;\n const [locale] = useLocale('ColorPicker');\n // ============================== Text ==============================\n const desc = React.useMemo(() => {\n if (!showText) {\n return '';\n }\n if (typeof showText === 'function') {\n return showText(color);\n }\n if (color.cleared) {\n return locale.transparent;\n }\n if (color.isGradient()) {\n return color.getColors().map((c, index) => {\n const inactive = activeIndex !== -1 && activeIndex !== index;\n return /*#__PURE__*/React.createElement(\"span\", {\n key: index,\n className: classNames(colorTextCellPrefixCls, inactive && `${colorTextCellPrefixCls}-inactive`)\n }, c.color.toRgbString(), \" \", c.percent, \"%\");\n });\n }\n const hexString = color.toHexString().toUpperCase();\n const alpha = getColorAlpha(color);\n switch (format) {\n case 'rgb':\n return color.toRgbString();\n case 'hsb':\n return color.toHsbString();\n // case 'hex':\n default:\n return alpha < 100 ? `${hexString.slice(0, 7)},${alpha}%` : hexString;\n }\n }, [color, format, showText, activeIndex]);\n // ============================= Render =============================\n const containerNode = useMemo(() => color.cleared ? (/*#__PURE__*/React.createElement(ColorClear, {\n prefixCls: prefixCls\n })) : (/*#__PURE__*/React.createElement(ColorBlock, {\n prefixCls: prefixCls,\n color: color.toCssString()\n })), [color, prefixCls]);\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n ref: ref,\n className: classNames(colorTriggerPrefixCls, className, {\n [`${colorTriggerPrefixCls}-active`]: open,\n [`${colorTriggerPrefixCls}-disabled`]: disabled\n })\n }, pickAttrs(rest)), containerNode, showText && /*#__PURE__*/React.createElement(\"div\", {\n className: colorTextPrefixCls\n }, desc));\n});\nexport default ColorTrigger;","import { unit } from '@ant-design/cssinjs';\n/**\n * @private Internal usage only\n * see: https://developer.mozilla.org/en-US/docs/Web/CSS/gradient/conic-gradient#checkerboard\n */\nexport const getTransBg = (size, colorFill) => ({\n backgroundImage: `conic-gradient(${colorFill} 25%, transparent 25% 50%, ${colorFill} 50% 75%, transparent 75% 100%)`,\n backgroundSize: `${size} ${size}`\n});\nconst genColorBlockStyle = (token, size) => {\n const {\n componentCls,\n borderRadiusSM,\n colorPickerInsetShadow,\n lineWidth,\n colorFillSecondary\n } = token;\n return {\n [`${componentCls}-color-block`]: Object.assign(Object.assign({\n position: 'relative',\n borderRadius: borderRadiusSM,\n width: size,\n height: size,\n boxShadow: colorPickerInsetShadow,\n flex: 'none'\n }, getTransBg('50%', token.colorFillSecondary)), {\n [`${componentCls}-color-block-inner`]: {\n width: '100%',\n height: '100%',\n boxShadow: `inset 0 0 0 ${unit(lineWidth)} ${colorFillSecondary}`,\n borderRadius: 'inherit'\n }\n })\n };\n};\nexport default genColorBlockStyle;","import { unit } from '@ant-design/cssinjs';\nconst genInputStyle = token => {\n const {\n componentCls,\n antCls,\n fontSizeSM,\n lineHeightSM,\n colorPickerAlphaInputWidth,\n marginXXS,\n paddingXXS,\n controlHeightSM,\n marginXS,\n fontSizeIcon,\n paddingXS,\n colorTextPlaceholder,\n colorPickerInputNumberHandleWidth,\n lineWidth\n } = token;\n return {\n [`${componentCls}-input-container`]: {\n display: 'flex',\n [`${componentCls}-steppers${antCls}-input-number`]: {\n fontSize: fontSizeSM,\n lineHeight: lineHeightSM,\n [`${antCls}-input-number-input`]: {\n paddingInlineStart: paddingXXS,\n paddingInlineEnd: 0\n },\n [`${antCls}-input-number-handler-wrap`]: {\n width: colorPickerInputNumberHandleWidth\n }\n },\n [`${componentCls}-steppers${componentCls}-alpha-input`]: {\n flex: `0 0 ${unit(colorPickerAlphaInputWidth)}`,\n marginInlineStart: marginXXS\n },\n [`${componentCls}-format-select${antCls}-select`]: {\n marginInlineEnd: marginXS,\n width: 'auto',\n '&-single': {\n [`${antCls}-select-selector`]: {\n padding: 0,\n border: 0\n },\n [`${antCls}-select-arrow`]: {\n insetInlineEnd: 0\n },\n [`${antCls}-select-selection-item`]: {\n paddingInlineEnd: token.calc(fontSizeIcon).add(marginXXS).equal(),\n fontSize: fontSizeSM,\n lineHeight: unit(controlHeightSM)\n },\n [`${antCls}-select-item-option-content`]: {\n fontSize: fontSizeSM,\n lineHeight: lineHeightSM\n },\n [`${antCls}-select-dropdown`]: {\n [`${antCls}-select-item`]: {\n minHeight: 'auto'\n }\n }\n }\n },\n [`${componentCls}-input`]: {\n gap: marginXXS,\n alignItems: 'center',\n flex: 1,\n width: 0,\n [`${componentCls}-hsb-input,${componentCls}-rgb-input`]: {\n display: 'flex',\n gap: marginXXS,\n alignItems: 'center'\n },\n [`${componentCls}-steppers`]: {\n flex: 1\n },\n [`${componentCls}-hex-input${antCls}-input-affix-wrapper`]: {\n flex: 1,\n padding: `0 ${unit(paddingXS)}`,\n [`${antCls}-input`]: {\n fontSize: fontSizeSM,\n textTransform: 'uppercase',\n lineHeight: unit(token.calc(controlHeightSM).sub(token.calc(lineWidth).mul(2)).equal())\n },\n [`${antCls}-input-prefix`]: {\n color: colorTextPlaceholder\n }\n }\n }\n }\n };\n};\nexport default genInputStyle;","import { unit } from '@ant-design/cssinjs';\nconst genPickerStyle = token => {\n const {\n componentCls,\n controlHeightLG,\n borderRadiusSM,\n colorPickerInsetShadow,\n marginSM,\n colorBgElevated,\n colorFillSecondary,\n lineWidthBold,\n colorPickerHandlerSize\n } = token;\n return {\n userSelect: 'none',\n [`${componentCls}-select`]: {\n [`${componentCls}-palette`]: {\n minHeight: token.calc(controlHeightLG).mul(4).equal(),\n overflow: 'hidden',\n borderRadius: borderRadiusSM\n },\n [`${componentCls}-saturation`]: {\n position: 'absolute',\n borderRadius: 'inherit',\n boxShadow: colorPickerInsetShadow,\n inset: 0\n },\n marginBottom: marginSM\n },\n // ======================== Panel =========================\n [`${componentCls}-handler`]: {\n width: colorPickerHandlerSize,\n height: colorPickerHandlerSize,\n border: `${unit(lineWidthBold)} solid ${colorBgElevated}`,\n position: 'relative',\n borderRadius: '50%',\n cursor: 'pointer',\n boxShadow: `${colorPickerInsetShadow}, 0 0 0 1px ${colorFillSecondary}`\n }\n };\n};\nexport default genPickerStyle;","import { unit } from '@ant-design/cssinjs';\nconst genPresetsStyle = token => {\n const {\n componentCls,\n antCls,\n colorTextQuaternary,\n paddingXXS,\n colorPickerPresetColorSize,\n fontSizeSM,\n colorText,\n lineHeightSM,\n lineWidth,\n borderRadius,\n colorFill,\n colorWhite,\n marginXXS,\n paddingXS,\n fontHeightSM\n } = token;\n return {\n [`${componentCls}-presets`]: {\n [`${antCls}-collapse-item > ${antCls}-collapse-header`]: {\n padding: 0,\n [`${antCls}-collapse-expand-icon`]: {\n height: fontHeightSM,\n color: colorTextQuaternary,\n paddingInlineEnd: paddingXXS\n }\n },\n [`${antCls}-collapse`]: {\n display: 'flex',\n flexDirection: 'column',\n gap: marginXXS\n },\n [`${antCls}-collapse-item > ${antCls}-collapse-content > ${antCls}-collapse-content-box`]: {\n padding: `${unit(paddingXS)} 0`\n },\n '&-label': {\n fontSize: fontSizeSM,\n color: colorText,\n lineHeight: lineHeightSM\n },\n '&-items': {\n display: 'flex',\n flexWrap: 'wrap',\n gap: token.calc(marginXXS).mul(1.5).equal(),\n [`${componentCls}-presets-color`]: {\n position: 'relative',\n cursor: 'pointer',\n width: colorPickerPresetColorSize,\n height: colorPickerPresetColorSize,\n '&::before': {\n content: '\"\"',\n pointerEvents: 'none',\n width: token.calc(colorPickerPresetColorSize).add(token.calc(lineWidth).mul(4)).equal(),\n height: token.calc(colorPickerPresetColorSize).add(token.calc(lineWidth).mul(4)).equal(),\n position: 'absolute',\n top: token.calc(lineWidth).mul(-2).equal(),\n insetInlineStart: token.calc(lineWidth).mul(-2).equal(),\n borderRadius,\n border: `${unit(lineWidth)} solid transparent`,\n transition: `border-color ${token.motionDurationMid} ${token.motionEaseInBack}`\n },\n '&:hover::before': {\n borderColor: colorFill\n },\n '&::after': {\n boxSizing: 'border-box',\n position: 'absolute',\n top: '50%',\n insetInlineStart: '21.5%',\n display: 'table',\n width: token.calc(colorPickerPresetColorSize).div(13).mul(5).equal(),\n height: token.calc(colorPickerPresetColorSize).div(13).mul(8).equal(),\n border: `${unit(token.lineWidthBold)} solid ${token.colorWhite}`,\n borderTop: 0,\n borderInlineStart: 0,\n transform: 'rotate(45deg) scale(0) translate(-50%,-50%)',\n opacity: 0,\n content: '\"\"',\n transition: `all ${token.motionDurationFast} ${token.motionEaseInBack}, opacity ${token.motionDurationFast}`\n },\n [`&${componentCls}-presets-color-checked`]: {\n '&::after': {\n opacity: 1,\n borderColor: colorWhite,\n transform: 'rotate(45deg) scale(1) translate(-50%,-50%)',\n transition: `transform ${token.motionDurationMid} ${token.motionEaseOutBack} ${token.motionDurationFast}`\n },\n [`&${componentCls}-presets-color-bright`]: {\n '&::after': {\n borderColor: 'rgba(0, 0, 0, 0.45)'\n }\n }\n }\n }\n },\n '&-empty': {\n fontSize: fontSizeSM,\n color: colorTextQuaternary\n }\n }\n };\n};\nexport default genPresetsStyle;","import { unit } from '@ant-design/cssinjs';\nimport { getTransBg } from './color-block';\nconst genSliderStyle = token => {\n const {\n componentCls,\n colorPickerInsetShadow,\n colorBgElevated,\n colorFillSecondary,\n lineWidthBold,\n colorPickerHandlerSizeSM,\n colorPickerSliderHeight,\n marginSM,\n marginXS\n } = token;\n const handleInnerSize = token.calc(colorPickerHandlerSizeSM).sub(token.calc(lineWidthBold).mul(2).equal()).equal();\n const handleHoverSize = token.calc(colorPickerHandlerSizeSM).add(token.calc(lineWidthBold).mul(2).equal()).equal();\n const activeHandleStyle = {\n '&:after': {\n transform: 'scale(1)',\n boxShadow: `${colorPickerInsetShadow}, 0 0 0 1px ${token.colorPrimaryActive}`\n }\n };\n return {\n // ======================== Slider ========================\n [`${componentCls}-slider`]: [getTransBg(unit(colorPickerSliderHeight), token.colorFillSecondary), {\n margin: 0,\n padding: 0,\n height: colorPickerSliderHeight,\n borderRadius: token.calc(colorPickerSliderHeight).div(2).equal(),\n '&-rail': {\n height: colorPickerSliderHeight,\n borderRadius: token.calc(colorPickerSliderHeight).div(2).equal(),\n boxShadow: colorPickerInsetShadow\n },\n [`& ${componentCls}-slider-handle`]: {\n width: handleInnerSize,\n height: handleInnerSize,\n top: 0,\n borderRadius: '100%',\n '&:before': {\n display: 'block',\n position: 'absolute',\n background: 'transparent',\n left: {\n _skip_check_: true,\n value: '50%'\n },\n top: '50%',\n transform: 'translate(-50%, -50%)',\n width: handleHoverSize,\n height: handleHoverSize,\n borderRadius: '100%'\n },\n '&:after': {\n width: colorPickerHandlerSizeSM,\n height: colorPickerHandlerSizeSM,\n border: `${unit(lineWidthBold)} solid ${colorBgElevated}`,\n boxShadow: `${colorPickerInsetShadow}, 0 0 0 1px ${colorFillSecondary}`,\n outline: 'none',\n insetInlineStart: token.calc(lineWidthBold).mul(-1).equal(),\n top: token.calc(lineWidthBold).mul(-1).equal(),\n background: 'transparent',\n transition: 'none'\n },\n '&:focus': activeHandleStyle\n }\n }],\n // ======================== Layout ========================\n [`${componentCls}-slider-container`]: {\n display: 'flex',\n gap: marginSM,\n marginBottom: marginSM,\n // Group\n [`${componentCls}-slider-group`]: {\n flex: 1,\n flexDirection: 'column',\n justifyContent: 'space-between',\n display: 'flex',\n '&-disabled-alpha': {\n justifyContent: 'center'\n }\n }\n },\n [`${componentCls}-gradient-slider`]: {\n marginBottom: marginXS,\n [`& ${componentCls}-slider-handle`]: {\n '&:after': {\n transform: 'scale(0.8)'\n },\n '&-active, &:focus': activeHandleStyle\n }\n }\n };\n};\nexport default genSliderStyle;","import { unit } from '@ant-design/cssinjs';\nimport { genCompactItemStyle } from '../../style/compact-item';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport genColorBlockStyle from './color-block';\nimport genInputStyle from './input';\nimport genPickerStyle from './picker';\nimport genPresetsStyle from './presets';\nimport genSliderStyle from './slider';\nexport const genActiveStyle = (token, borderColor, outlineColor) => ({\n borderInlineEndWidth: token.lineWidth,\n borderColor,\n boxShadow: `0 0 0 ${unit(token.controlOutlineWidth)} ${outlineColor}`,\n outline: 0\n});\nconst genRtlStyle = token => {\n const {\n componentCls\n } = token;\n return {\n '&-rtl': {\n [`${componentCls}-presets-color`]: {\n '&::after': {\n direction: 'ltr'\n }\n },\n [`${componentCls}-clear`]: {\n '&::after': {\n direction: 'ltr'\n }\n }\n }\n };\n};\nconst genClearStyle = (token, size, extraStyle) => {\n const {\n componentCls,\n borderRadiusSM,\n lineWidth,\n colorSplit,\n colorBorder,\n red6\n } = token;\n return {\n [`${componentCls}-clear`]: Object.assign(Object.assign({\n width: size,\n height: size,\n borderRadius: borderRadiusSM,\n border: `${unit(lineWidth)} solid ${colorSplit}`,\n position: 'relative',\n overflow: 'hidden',\n cursor: 'inherit',\n transition: `all ${token.motionDurationFast}`\n }, extraStyle), {\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n insetInlineEnd: token.calc(lineWidth).mul(-1).equal(),\n top: token.calc(lineWidth).mul(-1).equal(),\n display: 'block',\n width: 40,\n // maximum\n height: 2,\n // fixed\n transformOrigin: `calc(100% - 1px) 1px`,\n transform: 'rotate(-45deg)',\n backgroundColor: red6\n },\n '&:hover': {\n borderColor: colorBorder\n }\n })\n };\n};\nconst genStatusStyle = token => {\n const {\n componentCls,\n colorError,\n colorWarning,\n colorErrorHover,\n colorWarningHover,\n colorErrorOutline,\n colorWarningOutline\n } = token;\n return {\n [`&${componentCls}-status-error`]: {\n borderColor: colorError,\n '&:hover': {\n borderColor: colorErrorHover\n },\n [`&${componentCls}-trigger-active`]: Object.assign({}, genActiveStyle(token, colorError, colorErrorOutline))\n },\n [`&${componentCls}-status-warning`]: {\n borderColor: colorWarning,\n '&:hover': {\n borderColor: colorWarningHover\n },\n [`&${componentCls}-trigger-active`]: Object.assign({}, genActiveStyle(token, colorWarning, colorWarningOutline))\n }\n };\n};\nconst genSizeStyle = token => {\n const {\n componentCls,\n controlHeightLG,\n controlHeightSM,\n controlHeight,\n controlHeightXS,\n borderRadius,\n borderRadiusSM,\n borderRadiusXS,\n borderRadiusLG,\n fontSizeLG\n } = token;\n return {\n [`&${componentCls}-lg`]: {\n minWidth: controlHeightLG,\n minHeight: controlHeightLG,\n borderRadius: borderRadiusLG,\n [`${componentCls}-color-block, ${componentCls}-clear`]: {\n width: controlHeight,\n height: controlHeight,\n borderRadius\n },\n [`${componentCls}-trigger-text`]: {\n fontSize: fontSizeLG\n }\n },\n [`&${componentCls}-sm`]: {\n minWidth: controlHeightSM,\n minHeight: controlHeightSM,\n borderRadius: borderRadiusSM,\n [`${componentCls}-color-block, ${componentCls}-clear`]: {\n width: controlHeightXS,\n height: controlHeightXS,\n borderRadius: borderRadiusXS\n },\n [`${componentCls}-trigger-text`]: {\n lineHeight: unit(controlHeightXS)\n }\n }\n };\n};\nconst genColorPickerStyle = token => {\n const {\n antCls,\n componentCls,\n colorPickerWidth,\n colorPrimary,\n motionDurationMid,\n colorBgElevated,\n colorTextDisabled,\n colorText,\n colorBgContainerDisabled,\n borderRadius,\n marginXS,\n marginSM,\n controlHeight,\n controlHeightSM,\n colorBgTextActive,\n colorPickerPresetColorSize,\n colorPickerPreviewSize,\n lineWidth,\n colorBorder,\n paddingXXS,\n fontSize,\n colorPrimaryHover,\n controlOutline\n } = token;\n return [{\n [componentCls]: Object.assign({\n [`${componentCls}-inner`]: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({\n '&-content': {\n display: 'flex',\n flexDirection: 'column',\n width: colorPickerWidth,\n [`& > ${antCls}-divider`]: {\n margin: `${unit(marginSM)} 0 ${unit(marginXS)}`\n }\n },\n [`${componentCls}-panel`]: Object.assign({}, genPickerStyle(token))\n }, genSliderStyle(token)), genColorBlockStyle(token, colorPickerPreviewSize)), genInputStyle(token)), genPresetsStyle(token)), genClearStyle(token, colorPickerPresetColorSize, {\n marginInlineStart: 'auto'\n })), {\n // Operation bar\n [`${componentCls}-operation`]: {\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: marginXS\n }\n }),\n '&-trigger': Object.assign(Object.assign(Object.assign(Object.assign({\n minWidth: controlHeight,\n minHeight: controlHeight,\n borderRadius,\n border: `${unit(lineWidth)} solid ${colorBorder}`,\n cursor: 'pointer',\n display: 'inline-flex',\n alignItems: 'flex-start',\n justifyContent: 'center',\n transition: `all ${motionDurationMid}`,\n background: colorBgElevated,\n padding: token.calc(paddingXXS).sub(lineWidth).equal(),\n [`${componentCls}-trigger-text`]: {\n marginInlineStart: marginXS,\n marginInlineEnd: token.calc(marginXS).sub(token.calc(paddingXXS).sub(lineWidth)).equal(),\n fontSize,\n color: colorText,\n alignSelf: 'center',\n '&-cell': {\n '&:not(:last-child):after': {\n content: '\", \"'\n },\n '&-inactive': {\n color: colorTextDisabled\n }\n }\n },\n '&:hover': {\n borderColor: colorPrimaryHover\n },\n [`&${componentCls}-trigger-active`]: Object.assign({}, genActiveStyle(token, colorPrimary, controlOutline)),\n '&-disabled': {\n color: colorTextDisabled,\n background: colorBgContainerDisabled,\n cursor: 'not-allowed',\n '&:hover': {\n borderColor: colorBgTextActive\n },\n [`${componentCls}-trigger-text`]: {\n color: colorTextDisabled\n }\n }\n }, genClearStyle(token, controlHeightSM)), genColorBlockStyle(token, controlHeightSM)), genStatusStyle(token)), genSizeStyle(token))\n }, genRtlStyle(token))\n }, genCompactItemStyle(token, {\n focusElCls: `${componentCls}-trigger-active`\n })];\n};\nexport default genStyleHooks('ColorPicker', token => {\n const {\n colorTextQuaternary,\n marginSM\n } = token;\n const colorPickerSliderHeight = 8;\n const colorPickerToken = mergeToken(token, {\n colorPickerWidth: 234,\n colorPickerHandlerSize: 16,\n colorPickerHandlerSizeSM: 12,\n colorPickerAlphaInputWidth: 44,\n colorPickerInputNumberHandleWidth: 16,\n colorPickerPresetColorSize: 24,\n colorPickerInsetShadow: `inset 0 0 1px 0 ${colorTextQuaternary}`,\n colorPickerSliderHeight,\n colorPickerPreviewSize: token.calc(colorPickerSliderHeight).mul(2).add(marginSM).equal()\n });\n return [genColorPickerStyle(colorPickerToken)];\n});","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { useContext, useMemo } from 'react';\nimport classNames from 'classnames';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport ContextIsolator from '../_util/ContextIsolator';\nimport genPurePanel from '../_util/PurePanel';\nimport { getStatusClassNames } from '../_util/statusUtils';\nimport { devUseWarning } from '../_util/warning';\nimport { ConfigContext } from '../config-provider/context';\nimport DisabledContext from '../config-provider/DisabledContext';\nimport useCSSVarCls from '../config-provider/hooks/useCSSVarCls';\nimport useSize from '../config-provider/hooks/useSize';\nimport { FormItemInputContext } from '../form/context';\nimport Popover from '../popover';\nimport { useCompactItemContext } from '../space/Compact';\nimport { AggregationColor } from './color';\nimport ColorPickerPanel from './ColorPickerPanel';\nimport ColorTrigger from './components/ColorTrigger';\nimport useModeColor from './hooks/useModeColor';\nimport useStyle from './style';\nimport { genAlphaColor, generateColor, getColorAlpha } from './util';\nconst ColorPicker = props => {\n const {\n mode,\n value,\n defaultValue,\n format,\n defaultFormat,\n allowClear = false,\n presets,\n children,\n trigger = 'click',\n open,\n disabled,\n placement = 'bottomLeft',\n arrow = true,\n panelRender,\n showText,\n style,\n className,\n size: customizeSize,\n rootClassName,\n prefixCls: customizePrefixCls,\n styles,\n disabledAlpha = false,\n onFormatChange,\n onChange,\n onClear,\n onOpenChange,\n onChangeComplete,\n getPopupContainer,\n autoAdjustOverflow = true,\n destroyTooltipOnHide,\n destroyOnHidden,\n disabledFormat\n } = props,\n rest = __rest(props, [\"mode\", \"value\", \"defaultValue\", \"format\", \"defaultFormat\", \"allowClear\", \"presets\", \"children\", \"trigger\", \"open\", \"disabled\", \"placement\", \"arrow\", \"panelRender\", \"showText\", \"style\", \"className\", \"size\", \"rootClassName\", \"prefixCls\", \"styles\", \"disabledAlpha\", \"onFormatChange\", \"onChange\", \"onClear\", \"onOpenChange\", \"onChangeComplete\", \"getPopupContainer\", \"autoAdjustOverflow\", \"destroyTooltipOnHide\", \"destroyOnHidden\", \"disabledFormat\"]);\n const {\n getPrefixCls,\n direction,\n colorPicker\n } = useContext(ConfigContext);\n const contextDisabled = useContext(DisabledContext);\n const mergedDisabled = disabled !== null && disabled !== void 0 ? disabled : contextDisabled;\n const [popupOpen, setPopupOpen] = useMergedState(false, {\n value: open,\n postState: openData => !mergedDisabled && openData,\n onChange: onOpenChange\n });\n const [formatValue, setFormatValue] = useMergedState(format, {\n value: format,\n defaultValue: defaultFormat,\n onChange: onFormatChange\n });\n const prefixCls = getPrefixCls('color-picker', customizePrefixCls);\n // ================== Value & Mode =================\n const [mergedColor, setColor, modeState, setModeState, modeOptions] = useModeColor(defaultValue, value, mode);\n const isAlphaColor = useMemo(() => getColorAlpha(mergedColor) < 100, [mergedColor]);\n // ==================== Change =====================\n // To enhance user experience, we cache the gradient color when switch from gradient to single\n // If user not modify single color, we will use the cached gradient color.\n const [cachedGradientColor, setCachedGradientColor] = React.useState(null);\n const onInternalChangeComplete = color => {\n if (onChangeComplete) {\n let changeColor = generateColor(color);\n // ignore alpha color\n if (disabledAlpha && isAlphaColor) {\n changeColor = genAlphaColor(color);\n }\n onChangeComplete(changeColor);\n }\n };\n const onInternalChange = (data, changeFromPickerDrag) => {\n let color = generateColor(data);\n // ignore alpha color\n if (disabledAlpha && isAlphaColor) {\n color = genAlphaColor(color);\n }\n setColor(color);\n setCachedGradientColor(null);\n // Trigger change event\n if (onChange) {\n onChange(color, color.toCssString());\n }\n // Only for drag-and-drop color picking\n if (!changeFromPickerDrag) {\n onInternalChangeComplete(color);\n }\n };\n // =================== Gradient ====================\n const [activeIndex, setActiveIndex] = React.useState(0);\n const [gradientDragging, setGradientDragging] = React.useState(false);\n // Mode change should also trigger color change\n const onInternalModeChange = newMode => {\n setModeState(newMode);\n if (newMode === 'single' && mergedColor.isGradient()) {\n setActiveIndex(0);\n onInternalChange(new AggregationColor(mergedColor.getColors()[0].color));\n // Should after `onInternalChange` since it will clear the cached color\n setCachedGradientColor(mergedColor);\n } else if (newMode === 'gradient' && !mergedColor.isGradient()) {\n const baseColor = isAlphaColor ? genAlphaColor(mergedColor) : mergedColor;\n onInternalChange(new AggregationColor(cachedGradientColor || [{\n percent: 0,\n color: baseColor\n }, {\n percent: 100,\n color: baseColor\n }]));\n }\n };\n // ================== Form Status ==================\n const {\n status: contextStatus\n } = React.useContext(FormItemInputContext);\n // ==================== Compact ====================\n const {\n compactSize,\n compactItemClassnames\n } = useCompactItemContext(prefixCls, direction);\n // ===================== Style =====================\n const mergedSize = useSize(ctx => {\n var _a;\n return (_a = customizeSize !== null && customizeSize !== void 0 ? customizeSize : compactSize) !== null && _a !== void 0 ? _a : ctx;\n });\n const rootCls = useCSSVarCls(prefixCls);\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls, rootCls);\n const rtlCls = {\n [`${prefixCls}-rtl`]: direction\n };\n const mergedRootCls = classNames(rootClassName, cssVarCls, rootCls, rtlCls);\n const mergedCls = classNames(getStatusClassNames(prefixCls, contextStatus), {\n [`${prefixCls}-sm`]: mergedSize === 'small',\n [`${prefixCls}-lg`]: mergedSize === 'large'\n }, compactItemClassnames, colorPicker === null || colorPicker === void 0 ? void 0 : colorPicker.className, mergedRootCls, className, hashId);\n const mergedPopupCls = classNames(prefixCls, mergedRootCls);\n // ===================== Warning ======================\n if (process.env.NODE_ENV !== 'production') {\n const warning = devUseWarning('ColorPicker');\n process.env.NODE_ENV !== \"production\" ? warning(!(disabledAlpha && isAlphaColor), 'usage', '`disabledAlpha` will make the alpha to be 100% when use alpha color.') : void 0;\n }\n const popoverProps = {\n open: popupOpen,\n trigger,\n placement,\n arrow,\n rootClassName,\n getPopupContainer,\n autoAdjustOverflow,\n destroyOnHidden: destroyOnHidden !== null && destroyOnHidden !== void 0 ? destroyOnHidden : !!destroyTooltipOnHide\n };\n const mergedStyle = Object.assign(Object.assign({}, colorPicker === null || colorPicker === void 0 ? void 0 : colorPicker.style), style);\n // ============================ zIndex ============================\n return wrapCSSVar(/*#__PURE__*/React.createElement(Popover, Object.assign({\n style: styles === null || styles === void 0 ? void 0 : styles.popup,\n styles: {\n body: styles === null || styles === void 0 ? void 0 : styles.popupOverlayInner\n },\n onOpenChange: visible => {\n if (!visible || !mergedDisabled) {\n setPopupOpen(visible);\n }\n },\n content: /*#__PURE__*/React.createElement(ContextIsolator, {\n form: true\n }, /*#__PURE__*/React.createElement(ColorPickerPanel, {\n mode: modeState,\n onModeChange: onInternalModeChange,\n modeOptions: modeOptions,\n prefixCls: prefixCls,\n value: mergedColor,\n allowClear: allowClear,\n disabled: mergedDisabled,\n disabledAlpha: disabledAlpha,\n presets: presets,\n panelRender: panelRender,\n format: formatValue,\n onFormatChange: setFormatValue,\n onChange: onInternalChange,\n onChangeComplete: onInternalChangeComplete,\n onClear: onClear,\n activeIndex: activeIndex,\n onActive: setActiveIndex,\n gradientDragging: gradientDragging,\n onGradientDragging: setGradientDragging,\n disabledFormat: disabledFormat\n })),\n classNames: {\n root: mergedPopupCls\n }\n }, popoverProps), children || (/*#__PURE__*/React.createElement(ColorTrigger, Object.assign({\n activeIndex: popupOpen ? activeIndex : -1,\n open: popupOpen,\n className: mergedCls,\n style: mergedStyle,\n prefixCls: prefixCls,\n disabled: mergedDisabled,\n showText: showText,\n format: formatValue\n }, rest, {\n color: mergedColor\n })))));\n};\nif (process.env.NODE_ENV !== 'production') {\n ColorPicker.displayName = 'ColorPicker';\n}\nconst PurePanel = genPurePanel(ColorPicker, undefined, props => Object.assign(Object.assign({}, props), {\n placement: 'bottom',\n autoAdjustOverflow: false\n}), 'color-picker', /* istanbul ignore next */\nprefixCls => prefixCls);\nColorPicker._InternalPanelDoNotUseOrYouWillBeFired = PurePanel;\nexport default ColorPicker;","import * as React from 'react';\nimport useEvent from \"rc-util/es/hooks/useEvent\";\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport { useLocale } from '../../locale';\nimport { generateColor } from '../util';\n/**\n * Combine the `color` and `mode` to make sure sync of state.\n */\nexport default function useModeColor(defaultValue, value, mode) {\n const [locale] = useLocale('ColorPicker');\n // ======================== Base ========================\n // Color\n const [mergedColor, setMergedColor] = useMergedState(defaultValue, {\n value\n });\n // Mode\n const [modeState, setModeState] = React.useState('single');\n const [modeOptionList, modeSet] = React.useMemo(() => {\n const list = (Array.isArray(mode) ? mode : [mode]).filter(m => m);\n if (!list.length) {\n list.push('single');\n }\n const modes = new Set(list);\n const optionList = [];\n const pushOption = (modeType, localeTxt) => {\n if (modes.has(modeType)) {\n optionList.push({\n label: localeTxt,\n value: modeType\n });\n }\n };\n pushOption('single', locale.singleColor);\n pushOption('gradient', locale.gradientColor);\n return [optionList, modes];\n }, [mode]);\n // ======================== Post ========================\n // We need align `mode` with `color` state\n // >>>>> Color\n const [cacheColor, setCacheColor] = React.useState(null);\n const setColor = useEvent(nextColor => {\n setCacheColor(nextColor);\n setMergedColor(nextColor);\n });\n const postColor = React.useMemo(() => {\n const colorObj = generateColor(mergedColor || '');\n // Use `cacheColor` in case the color is `cleared`\n return colorObj.equals(cacheColor) ? cacheColor : colorObj;\n }, [mergedColor, cacheColor]);\n // >>>>> Mode\n const postMode = React.useMemo(() => {\n var _a;\n if (modeSet.has(modeState)) {\n return modeState;\n }\n return (_a = modeOptionList[0]) === null || _a === void 0 ? void 0 : _a.value;\n }, [modeSet, modeState, modeOptionList]);\n // ======================= Effect =======================\n // Dynamic update mode when color change\n React.useEffect(() => {\n setModeState(postColor.isGradient() ? 'gradient' : 'single');\n }, [postColor]);\n // ======================= Return =======================\n return [postColor, setColor, postMode, setModeState, modeOptionList];\n}","export var calculateChange = function calculateChange(e, hsl, direction, initialA, container) {\n var containerWidth = container.clientWidth;\n var containerHeight = container.clientHeight;\n var x = typeof e.pageX === 'number' ? e.pageX : e.touches[0].pageX;\n var y = typeof e.pageY === 'number' ? e.pageY : e.touches[0].pageY;\n var left = x - (container.getBoundingClientRect().left + window.pageXOffset);\n var top = y - (container.getBoundingClientRect().top + window.pageYOffset);\n if (direction === 'vertical') {\n var a;\n if (top < 0) {\n a = 0;\n } else if (top > containerHeight) {\n a = 1;\n } else {\n a = Math.round(top * 100 / containerHeight) / 100;\n }\n if (hsl.a !== a) {\n return {\n h: hsl.h,\n s: hsl.s,\n l: hsl.l,\n a: a,\n source: 'rgb'\n };\n }\n } else {\n var _a;\n if (left < 0) {\n _a = 0;\n } else if (left > containerWidth) {\n _a = 1;\n } else {\n _a = Math.round(left * 100 / containerWidth) / 100;\n }\n if (initialA !== _a) {\n return {\n h: hsl.h,\n s: hsl.s,\n l: hsl.l,\n a: _a,\n source: 'rgb'\n };\n }\n }\n return null;\n};","var checkboardCache = {};\nexport var render = function render(c1, c2, size, serverCanvas) {\n if (typeof document === 'undefined' && !serverCanvas) {\n return null;\n }\n var canvas = serverCanvas ? new serverCanvas() : document.createElement('canvas');\n canvas.width = size * 2;\n canvas.height = size * 2;\n var ctx = canvas.getContext('2d');\n if (!ctx) {\n return null;\n } // If no context can be found, return early.\n ctx.fillStyle = c1;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.fillStyle = c2;\n ctx.fillRect(0, 0, size, size);\n ctx.translate(size, size);\n ctx.fillRect(0, 0, size, size);\n return canvas.toDataURL();\n};\nexport var get = function get(c1, c2, size, serverCanvas) {\n var key = \"\".concat(c1, \"-\").concat(c2, \"-\").concat(size).concat(serverCanvas ? '-server' : '');\n if (checkboardCache[key]) {\n return checkboardCache[key];\n }\n var checkboard = render(c1, c2, size, serverCanvas);\n checkboardCache[key] = checkboard;\n return checkboard;\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { isValidElement } from 'react';\nimport reactCSS from 'reactcss';\nimport * as checkboard from '../../helpers/checkboard';\nexport var Checkboard = function Checkboard(_ref) {\n var white = _ref.white,\n grey = _ref.grey,\n size = _ref.size,\n renderers = _ref.renderers,\n borderRadius = _ref.borderRadius,\n boxShadow = _ref.boxShadow,\n children = _ref.children;\n var styles = reactCSS({\n default: {\n grid: {\n borderRadius: borderRadius,\n boxShadow: boxShadow,\n absolute: '0px 0px 0px 0px',\n background: \"url(\".concat(checkboard.get(white, grey, size, renderers.canvas), \") center left\")\n }\n }\n });\n return /*#__PURE__*/isValidElement(children) ? /*#__PURE__*/React.cloneElement(children, _objectSpread(_objectSpread({}, children.props), {}, {\n style: _objectSpread(_objectSpread({}, children.props.style), styles.grid)\n })) : /*#__PURE__*/React.createElement(\"div\", {\n style: styles.grid\n });\n};\nCheckboard.defaultProps = {\n size: 8,\n white: 'transparent',\n grey: 'rgba(0,0,0,.08)',\n renderers: {}\n};\nexport default Checkboard;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React, { Component, PureComponent } from 'react';\nimport reactCSS from 'reactcss';\nimport * as alpha from '../../helpers/alpha';\nimport Checkboard from './Checkboard';\nexport var Alpha = /*#__PURE__*/function (_ref) {\n _inherits(Alpha, _ref);\n var _super = _createSuper(Alpha);\n function Alpha() {\n var _this;\n _classCallCheck(this, Alpha);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _this.handleChange = function (e) {\n var change = alpha.calculateChange(e, _this.props.hsl, _this.props.direction, _this.props.a, _this.container);\n change && typeof _this.props.onChange === 'function' && _this.props.onChange(change, e);\n };\n _this.handleMouseDown = function (e) {\n _this.handleChange(e);\n window.addEventListener('mousemove', _this.handleChange);\n window.addEventListener('mouseup', _this.handleMouseUp);\n };\n _this.handleMouseUp = function () {\n _this.unbindEventListeners();\n };\n _this.unbindEventListeners = function () {\n window.removeEventListener('mousemove', _this.handleChange);\n window.removeEventListener('mouseup', _this.handleMouseUp);\n };\n return _this;\n }\n _createClass(Alpha, [{\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.unbindEventListeners();\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n var rgb = this.props.rgb;\n var styles = reactCSS({\n default: {\n alpha: {\n absolute: '0px 0px 0px 0px',\n borderRadius: this.props.radius\n },\n checkboard: {\n absolute: '0px 0px 0px 0px',\n overflow: 'hidden',\n borderRadius: this.props.radius\n },\n gradient: {\n absolute: '0px 0px 0px 0px',\n background: \"linear-gradient(to right, rgba(\".concat(rgb.r, \",\").concat(rgb.g, \",\").concat(rgb.b, \", 0) 0%,\\n rgba(\").concat(rgb.r, \",\").concat(rgb.g, \",\").concat(rgb.b, \", 1) 100%)\"),\n boxShadow: this.props.shadow,\n borderRadius: this.props.radius\n },\n container: {\n position: 'relative',\n height: '100%',\n margin: '0 3px'\n },\n pointer: {\n position: 'absolute',\n left: \"\".concat(rgb.a * 100, \"%\")\n },\n slider: {\n width: '4px',\n borderRadius: '1px',\n height: '8px',\n boxShadow: '0 0 2px rgba(0, 0, 0, .6)',\n background: '#fff',\n marginTop: '1px',\n transform: 'translateX(-2px)'\n }\n },\n vertical: {\n gradient: {\n background: \"linear-gradient(to bottom, rgba(\".concat(rgb.r, \",\").concat(rgb.g, \",\").concat(rgb.b, \", 0) 0%,\\n rgba(\").concat(rgb.r, \",\").concat(rgb.g, \",\").concat(rgb.b, \", 1) 100%)\")\n },\n pointer: {\n left: 0,\n top: \"\".concat(rgb.a * 100, \"%\")\n }\n },\n overwrite: _objectSpread({}, this.props.style)\n }, {\n vertical: this.props.direction === 'vertical',\n overwrite: true\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n style: styles.alpha\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: styles.checkboard\n }, /*#__PURE__*/React.createElement(Checkboard, {\n renderers: this.props.renderers\n })), /*#__PURE__*/React.createElement(\"div\", {\n style: styles.gradient\n }), /*#__PURE__*/React.createElement(\"div\", {\n style: styles.container,\n ref: function ref(container) {\n return _this2.container = container;\n },\n onMouseDown: this.handleMouseDown,\n onTouchMove: this.handleChange,\n onTouchStart: this.handleChange\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: styles.pointer\n }, this.props.pointer ? /*#__PURE__*/React.createElement(this.props.pointer, this.props) : /*#__PURE__*/React.createElement(\"div\", {\n style: styles.slider\n }))));\n }\n }]);\n return Alpha;\n}(PureComponent || Component);\nexport default Alpha;","export var calculateChange = function calculateChange(e, direction, hsl, container) {\n var containerWidth = container.clientWidth;\n var containerHeight = container.clientHeight;\n var x = typeof e.pageX === 'number' ? e.pageX : e.touches[0].pageX;\n var y = typeof e.pageY === 'number' ? e.pageY : e.touches[0].pageY;\n var left = x - (container.getBoundingClientRect().left + window.pageXOffset);\n var top = y - (container.getBoundingClientRect().top + window.pageYOffset);\n if (direction === 'vertical') {\n var h;\n if (top < 0) {\n h = 359;\n } else if (top > containerHeight) {\n h = 0;\n } else {\n var percent = -(top * 100 / containerHeight) + 100;\n h = 360 * percent / 100;\n }\n if (hsl.h !== h) {\n return {\n h: h,\n s: hsl.s,\n l: hsl.l,\n a: hsl.a,\n source: 'hsl'\n };\n }\n } else {\n var _h;\n if (left < 0) {\n _h = 0;\n } else if (left > containerWidth) {\n _h = 359;\n } else {\n var _percent = left * 100 / containerWidth;\n _h = 360 * _percent / 100;\n }\n if (hsl.h !== _h) {\n return {\n h: _h,\n s: hsl.s,\n l: hsl.l,\n a: hsl.a,\n source: 'hsl'\n };\n }\n }\n return null;\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React, { Component, PureComponent } from 'react';\nimport reactCSS from 'reactcss';\nimport * as hue from '../../helpers/hue';\nexport var Hue = /*#__PURE__*/function (_ref) {\n _inherits(Hue, _ref);\n var _super = _createSuper(Hue);\n function Hue() {\n var _this;\n _classCallCheck(this, Hue);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _this.handleChange = function (e) {\n var change = hue.calculateChange(e, _this.props.direction, _this.props.hsl, _this.container);\n change && typeof _this.props.onChange === 'function' && _this.props.onChange(change, e);\n };\n _this.handleMouseDown = function (e) {\n _this.handleChange(e);\n window.addEventListener('mousemove', _this.handleChange);\n window.addEventListener('mouseup', _this.handleMouseUp);\n };\n _this.handleMouseUp = function () {\n _this.unbindEventListeners();\n };\n return _this;\n }\n _createClass(Hue, [{\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.unbindEventListeners();\n }\n }, {\n key: \"unbindEventListeners\",\n value: function unbindEventListeners() {\n window.removeEventListener('mousemove', this.handleChange);\n window.removeEventListener('mouseup', this.handleMouseUp);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n var _this$props$direction = this.props.direction,\n direction = _this$props$direction === void 0 ? 'horizontal' : _this$props$direction;\n var styles = reactCSS({\n default: {\n hue: {\n absolute: '0px 0px 0px 0px',\n borderRadius: this.props.radius,\n boxShadow: this.props.shadow\n },\n container: {\n padding: '0 2px',\n position: 'relative',\n height: '100%',\n borderRadius: this.props.radius\n },\n pointer: {\n position: 'absolute',\n left: \"\".concat(this.props.hsl.h * 100 / 360, \"%\")\n },\n slider: {\n marginTop: '1px',\n width: '4px',\n borderRadius: '1px',\n height: '8px',\n boxShadow: '0 0 2px rgba(0, 0, 0, .6)',\n background: '#fff',\n transform: 'translateX(-2px)'\n }\n },\n vertical: {\n pointer: {\n left: '0px',\n top: \"\".concat(-(this.props.hsl.h * 100 / 360) + 100, \"%\")\n }\n }\n }, {\n vertical: direction === 'vertical'\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n style: styles.hue\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"hue-\".concat(direction),\n style: styles.container,\n ref: function ref(container) {\n return _this2.container = container;\n },\n onMouseDown: this.handleMouseDown,\n onTouchMove: this.handleChange,\n onTouchStart: this.handleChange\n }, /*#__PURE__*/React.createElement(\"style\", null, \"\\n .hue-horizontal {\\n background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0\\n 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\\n background: -webkit-linear-gradient(to right, #f00 0%, #ff0\\n 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\\n }\\n\\n .hue-vertical {\\n background: linear-gradient(to top, #f00 0%, #ff0 17%, #0f0 33%,\\n #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\\n background: -webkit-linear-gradient(to top, #f00 0%, #ff0 17%,\\n #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\\n }\\n \"), /*#__PURE__*/React.createElement(\"div\", {\n style: styles.pointer\n }, this.props.pointer ? /*#__PURE__*/React.createElement(this.props.pointer, this.props) : /*#__PURE__*/React.createElement(\"div\", {\n style: styles.slider\n }))));\n }\n }]);\n return Hue;\n}(PureComponent || Component);\nexport default Hue;","export var calculateChange = function calculateChange(e, hsl, container) {\n var _container$getBoundin = container.getBoundingClientRect(),\n containerWidth = _container$getBoundin.width,\n containerHeight = _container$getBoundin.height;\n var x = typeof e.pageX === 'number' ? e.pageX : e.touches[0].pageX;\n var y = typeof e.pageY === 'number' ? e.pageY : e.touches[0].pageY;\n var left = x - (container.getBoundingClientRect().left + window.pageXOffset);\n var top = y - (container.getBoundingClientRect().top + window.pageYOffset);\n if (left < 0) {\n left = 0;\n } else if (left > containerWidth) {\n left = containerWidth;\n }\n if (top < 0) {\n top = 0;\n } else if (top > containerHeight) {\n top = containerHeight;\n }\n var saturation = left / containerWidth;\n var bright = 1 - top / containerHeight;\n return {\n h: hsl.h,\n s: saturation,\n v: bright,\n a: hsl.a,\n source: 'hsv'\n };\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React, { Component, PureComponent } from 'react';\nimport reactCSS from 'reactcss';\nimport throttle from 'lodash/throttle';\nimport * as saturation from '../../helpers/saturation';\nexport var Saturation = /*#__PURE__*/function (_ref) {\n _inherits(Saturation, _ref);\n var _super = _createSuper(Saturation);\n function Saturation(props) {\n var _this;\n _classCallCheck(this, Saturation);\n _this = _super.call(this, props);\n _this.handleChange = function (e) {\n typeof _this.props.onChange === 'function' && _this.throttle(_this.props.onChange, saturation.calculateChange(e, _this.props.hsl, _this.container), e);\n };\n _this.handleMouseDown = function (e) {\n _this.handleChange(e);\n var renderWindow = _this.getContainerRenderWindow();\n renderWindow.addEventListener('mousemove', _this.handleChange);\n renderWindow.addEventListener('mouseup', _this.handleMouseUp);\n };\n _this.handleMouseUp = function () {\n _this.unbindEventListeners();\n };\n _this.throttle = throttle(function (fn, data, e) {\n fn(data, e);\n }, 50);\n return _this;\n }\n _createClass(Saturation, [{\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.throttle.cancel();\n this.unbindEventListeners();\n }\n }, {\n key: \"getContainerRenderWindow\",\n value: function getContainerRenderWindow() {\n var container = this.container;\n var renderWindow = window;\n while (!renderWindow.document.contains(container) && renderWindow.parent !== renderWindow) {\n renderWindow = renderWindow.parent;\n }\n return renderWindow;\n }\n }, {\n key: \"unbindEventListeners\",\n value: function unbindEventListeners() {\n var renderWindow = this.getContainerRenderWindow();\n renderWindow.removeEventListener('mousemove', this.handleChange);\n renderWindow.removeEventListener('mouseup', this.handleMouseUp);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n var _ref2 = this.props.style || {},\n color = _ref2.color,\n white = _ref2.white,\n black = _ref2.black,\n pointer = _ref2.pointer,\n circle = _ref2.circle;\n var styles = reactCSS({\n default: {\n color: {\n absolute: '0px 0px 0px 0px',\n background: \"hsl(\".concat(this.props.hsl.h, \",100%, 50%)\"),\n borderRadius: this.props.radius\n },\n white: {\n absolute: '0px 0px 0px 0px',\n borderRadius: this.props.radius\n },\n black: {\n absolute: '0px 0px 0px 0px',\n boxShadow: this.props.shadow,\n borderRadius: this.props.radius\n },\n pointer: {\n position: 'absolute',\n top: \"\".concat(-(this.props.hsv.v * 100) + 100, \"%\"),\n left: \"\".concat(this.props.hsv.s * 100, \"%\"),\n cursor: 'default'\n },\n circle: {\n width: '4px',\n height: '4px',\n boxShadow: \"0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,.3),\\n 0 0 1px 2px rgba(0,0,0,.4)\",\n borderRadius: '50%',\n cursor: 'hand',\n transform: 'translate(-2px, -2px)'\n }\n },\n custom: {\n color: color,\n white: white,\n black: black,\n pointer: pointer,\n circle: circle\n }\n }, {\n custom: !!this.props.style\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n style: styles.color,\n ref: function ref(container) {\n return _this2.container = container;\n },\n onMouseDown: this.handleMouseDown,\n onTouchMove: this.handleChange,\n onTouchStart: this.handleChange\n }, /*#__PURE__*/React.createElement(\"style\", null, \"\\n .saturation-white {\\n background: -webkit-linear-gradient(to right, #fff, rgba(255,255,255,0));\\n background: linear-gradient(to right, #fff, rgba(255,255,255,0));\\n }\\n .saturation-black {\\n background: -webkit-linear-gradient(to top, #000, rgba(0,0,0,0));\\n background: linear-gradient(to top, #000, rgba(0,0,0,0));\\n }\\n \"), /*#__PURE__*/React.createElement(\"div\", {\n style: styles.white,\n className: \"saturation-white\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: styles.black,\n className: \"saturation-black\"\n }), /*#__PURE__*/React.createElement(\"div\", {\n style: styles.pointer\n }, this.props.pointer ? /*#__PURE__*/React.createElement(this.props.pointer, this.props) : /*#__PURE__*/React.createElement(\"div\", {\n style: styles.circle\n }))));\n }\n }]);\n return Saturation;\n}(PureComponent || Component);\nexport default Saturation;","import each from 'lodash/each';\nimport tinycolor from 'tinycolor2';\nexport var simpleCheckForValidColor = function simpleCheckForValidColor(data) {\n var keysToCheck = ['r', 'g', 'b', 'a', 'h', 's', 'l', 'v'];\n var checked = 0;\n var passed = 0;\n each(keysToCheck, function (letter) {\n if (data[letter]) {\n checked += 1;\n // @ts-ignore\n if (!isNaN(data[letter])) {\n passed += 1;\n }\n if (letter === 's' || letter === 'l') {\n var percentPatt = /^\\d+%$/;\n if (percentPatt.test(data[letter])) {\n passed += 1;\n }\n }\n }\n });\n return checked === passed ? data : false;\n};\nexport var toState = function toState(data, oldHue) {\n // @ts-ignore\n var color = data.hex ? tinycolor(data.hex) : tinycolor(data);\n var hsl = color.toHsl();\n var hsv = color.toHsv();\n var rgb = color.toRgb();\n var hex = color.toHex();\n if (hsl.s === 0) {\n hsl.h = oldHue || 0;\n hsv.h = oldHue || 0;\n }\n var transparent = hex === '000000' && rgb.a === 0;\n return {\n hsl: hsl,\n hex: transparent ? 'transparent' : \"#\".concat(hex),\n rgb: rgb,\n hsv: hsv,\n oldHue: data.h || oldHue || hsl.h,\n source: data.source\n };\n};\nexport var isValidHex = function isValidHex(hex) {\n if (hex === 'transparent') {\n return true;\n }\n // disable hex4 and hex8\n var lh = String(hex).charAt(0) === '#' ? 1 : 0;\n // @ts-ignore\n return hex.length !== 4 + lh && hex.length < 7 + lh && tinycolor(hex).isValid();\n};\nexport var getContrastingColor = function getContrastingColor(data) {\n if (!data) {\n return '#fff';\n }\n var col = toState(data);\n if (col.hex === 'transparent') {\n return 'rgba(0,0,0,0.4)';\n }\n var yiq = (col.rgb.r * 299 + col.rgb.g * 587 + col.rgb.b * 114) / 1000;\n return yiq >= 128 ? '#000' : '#fff';\n};\nexport var red = {\n hsl: {\n a: 1,\n h: 0,\n l: 0.5,\n s: 1\n },\n hex: '#ff0000',\n rgb: {\n r: 255,\n g: 0,\n b: 0,\n a: 1\n },\n hsv: {\n h: 0,\n s: 1,\n v: 1,\n a: 1\n }\n};\nexport var isvalidColorString = function isvalidColorString(string, type) {\n var stringWithoutDegree = string.replace('°', '');\n // @ts-ignore\n return tinycolor(\"\".concat(type, \" (\").concat(stringWithoutDegree, \")\"))._ok;\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nimport React, { Component, PureComponent } from 'react';\nimport reactCSS from 'reactcss';\nvar DEFAULT_ARROW_OFFSET = 1;\nvar UP_KEY_CODE = 38;\nvar DOWN_KEY_CODE = 40;\nvar VALID_KEY_CODES = [UP_KEY_CODE, DOWN_KEY_CODE];\nvar isValidKeyCode = function isValidKeyCode(keyCode) {\n return VALID_KEY_CODES.indexOf(keyCode) > -1;\n};\nvar getNumberValue = function getNumberValue(value) {\n return Number(String(value).replace(/%/g, ''));\n};\nvar idCounter = 1;\nexport var EditableInput = /*#__PURE__*/function (_ref) {\n _inherits(EditableInput, _ref);\n var _super = _createSuper(EditableInput);\n function EditableInput(props) {\n var _this;\n _classCallCheck(this, EditableInput);\n _this = _super.call(this);\n _this.handleBlur = function () {\n if (_this.state.blurValue) {\n _this.setState({\n value: _this.state.blurValue,\n blurValue: null\n });\n }\n };\n _this.handleChange = function (e) {\n _this.setUpdatedValue(e.target.value, e);\n };\n _this.handleKeyDown = function (e) {\n // In case `e.target.value` is a percentage remove the `%` character\n // and update accordingly with a percentage\n // https://github.com/casesandberg/react-color/issues/383\n var value = getNumberValue(e.target.value);\n if (!isNaN(value) && isValidKeyCode(e.keyCode)) {\n var offset = _this.getArrowOffset();\n var updatedValue = e.keyCode === UP_KEY_CODE ? value + offset : value - offset;\n _this.setUpdatedValue(updatedValue, e);\n }\n };\n _this.handleDrag = function (e) {\n if (_this.props.dragLabel) {\n var newValue = Math.round(_this.props.value + e.movementX);\n if (newValue >= 0 && newValue <= _this.props.dragMax) {\n _this.props.onChange && _this.props.onChange(_this.getValueObjectWithLabel(newValue), e);\n }\n }\n };\n _this.handleMouseDown = function (e) {\n if (_this.props.dragLabel) {\n e.preventDefault();\n _this.handleDrag(e);\n window.addEventListener('mousemove', _this.handleDrag);\n window.addEventListener('mouseup', _this.handleMouseUp);\n }\n };\n _this.handleMouseUp = function () {\n _this.unbindEventListeners();\n };\n _this.unbindEventListeners = function () {\n window.removeEventListener('mousemove', _this.handleDrag);\n window.removeEventListener('mouseup', _this.handleMouseUp);\n };\n _this.state = {\n value: String(props.value).toUpperCase(),\n blurValue: String(props.value).toUpperCase()\n };\n _this.inputId = \"rc-editable-input-\".concat(idCounter++);\n return _this;\n }\n _createClass(EditableInput, [{\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (this.props.value !== this.state.value && (prevProps.value !== this.props.value || prevState.value !== this.state.value)) {\n if (this.input === document.activeElement) {\n this.setState({\n blurValue: String(this.props.value).toUpperCase()\n });\n } else {\n this.setState({\n value: String(this.props.value).toUpperCase(),\n blurValue: !this.state.blurValue && String(this.props.value).toUpperCase()\n });\n }\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.unbindEventListeners();\n }\n }, {\n key: \"getValueObjectWithLabel\",\n value: function getValueObjectWithLabel(value) {\n return _defineProperty({}, this.props.label, value);\n }\n }, {\n key: \"getArrowOffset\",\n value: function getArrowOffset() {\n return this.props.arrowOffset || DEFAULT_ARROW_OFFSET;\n }\n }, {\n key: \"setUpdatedValue\",\n value: function setUpdatedValue(value, e) {\n var onChangeValue = this.props.label ? this.getValueObjectWithLabel(value) : value;\n this.props.onChange && this.props.onChange(onChangeValue, e);\n this.setState({\n value: value\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n var styles = reactCSS({\n 'default': {\n wrap: {\n position: 'relative'\n }\n },\n 'user-override': {\n wrap: this.props.style && this.props.style.wrap ? this.props.style.wrap : {},\n input: this.props.style && this.props.style.input ? this.props.style.input : {},\n label: this.props.style && this.props.style.label ? this.props.style.label : {}\n },\n 'dragLabel-true': {\n label: {\n cursor: 'ew-resize'\n }\n }\n }, {\n 'user-override': true\n }, this.props);\n return /*#__PURE__*/React.createElement(\"div\", {\n style: styles.wrap\n }, /*#__PURE__*/React.createElement(\"input\", {\n id: this.inputId,\n style: styles.input,\n ref: function ref(input) {\n return _this2.input = input;\n },\n value: this.state.value,\n onKeyDown: this.handleKeyDown,\n onChange: this.handleChange,\n onBlur: this.handleBlur,\n placeholder: this.props.placeholder,\n spellCheck: \"false\"\n }), this.props.label && !this.props.hideLabel ? /*#__PURE__*/React.createElement(\"label\", {\n htmlFor: this.inputId,\n style: styles.label,\n onMouseDown: this.handleMouseDown\n }, this.props.label) : null);\n }\n }]);\n return EditableInput;\n}(PureComponent || Component);\nexport default EditableInput;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n/* eslint-disable no-invalid-this */\nimport React from 'react';\nexport var handleFocus = function handleFocus(Component) {\n var Span = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'span';\n return /*#__PURE__*/function (_React$Component) {\n _inherits(Focus, _React$Component);\n var _super = _createSuper(Focus);\n function Focus() {\n var _this;\n _classCallCheck(this, Focus);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _this.state = {\n focus: false\n };\n _this.handleFocus = function () {\n return _this.setState({\n focus: true\n });\n };\n _this.handleBlur = function () {\n return _this.setState({\n focus: false\n });\n };\n return _this;\n }\n _createClass(Focus, [{\n key: \"render\",\n value: function render() {\n return /*#__PURE__*/React.createElement(Span, {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur\n }, /*#__PURE__*/React.createElement(Component, _extends({}, this.props, this.state)));\n }\n }]);\n return Focus;\n }(React.Component);\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React from 'react';\nimport reactCSS from 'reactcss';\nimport { handleFocus } from '../../helpers/interaction';\nimport Checkboard from './Checkboard';\nvar ENTER = 13;\nexport var Swatch = function Swatch(_ref) {\n var color = _ref.color,\n style = _ref.style,\n _ref$onClick = _ref.onClick,\n onClick = _ref$onClick === void 0 ? function () {} : _ref$onClick,\n onHover = _ref.onHover,\n _ref$title = _ref.title,\n title = _ref$title === void 0 ? color : _ref$title,\n children = _ref.children,\n focus = _ref.focus,\n _ref$focusStyle = _ref.focusStyle,\n focusStyle = _ref$focusStyle === void 0 ? {} : _ref$focusStyle;\n var transparent = color === 'transparent';\n var styles = reactCSS({\n default: {\n swatch: _objectSpread(_objectSpread({\n background: color,\n height: '100%',\n width: '100%',\n cursor: 'pointer',\n position: 'relative',\n outline: 'none'\n }, style), focus ? focusStyle : {})\n }\n });\n var handleClick = function handleClick(e) {\n return onClick(color, e);\n };\n var handleKeyDown = function handleKeyDown(e) {\n return e.keyCode === ENTER && onClick(color, e);\n };\n var handleHover = function handleHover(e) {\n return onHover(color, e);\n };\n var optionalEvents = {};\n if (onHover) {\n optionalEvents.onMouseOver = handleHover;\n }\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n style: styles.swatch,\n onClick: handleClick,\n title: title,\n tabIndex: 0,\n onKeyDown: handleKeyDown\n }, optionalEvents), children, transparent && /*#__PURE__*/React.createElement(Checkboard, {\n borderRadius: styles.swatch.borderRadius,\n boxShadow: \"inset 0 0 0 1px rgba(0,0,0,0.1)\"\n }));\n};\nexport default handleFocus(Swatch);","/* eslint-disable no-param-reassign */\nimport React from 'react';\nimport reactCSS from 'reactcss';\nimport * as color from '../../helpers/color';\nimport { EditableInput } from '../common';\nexport var SketchFields = function SketchFields(_ref) {\n var onChange = _ref.onChange,\n rgb = _ref.rgb,\n hsl = _ref.hsl,\n hex = _ref.hex,\n disableAlpha = _ref.disableAlpha;\n var styles = reactCSS({\n default: {\n fields: {\n display: 'flex',\n paddingTop: '4px'\n },\n single: {\n flex: '1',\n paddingLeft: '6px'\n },\n alpha: {\n flex: '1',\n paddingLeft: '6px'\n },\n double: {\n flex: '2'\n },\n input: {\n width: '80%',\n padding: '4px 10% 3px',\n border: 'none',\n boxShadow: 'inset 0 0 0 1px #ccc',\n fontSize: '11px'\n },\n label: {\n display: 'block',\n textAlign: 'center',\n fontSize: '11px',\n color: '#222',\n paddingTop: '3px',\n paddingBottom: '4px',\n textTransform: 'capitalize'\n }\n },\n disableAlpha: {\n alpha: {\n display: 'none'\n }\n }\n }, {\n disableAlpha: disableAlpha\n });\n var handleChange = function handleChange(data, e) {\n if (data.hex) {\n color.isValidHex(data.hex) && (onChange === null || onChange === void 0 ? void 0 : onChange({\n hex: data.hex,\n source: 'hex'\n }, e));\n } else if (data.r || data.g || data.b) {\n onChange === null || onChange === void 0 ? void 0 : onChange({\n r: data.r || (rgb === null || rgb === void 0 ? void 0 : rgb.r),\n g: data.g || (rgb === null || rgb === void 0 ? void 0 : rgb.g),\n b: data.b || (rgb === null || rgb === void 0 ? void 0 : rgb.b),\n a: rgb === null || rgb === void 0 ? void 0 : rgb.a,\n source: 'rgb'\n }, e);\n } else if (data.a) {\n if (data.a < 0) {\n data.a = 0;\n } else if (data.a > 100) {\n data.a = 100;\n }\n data.a /= 100;\n onChange === null || onChange === void 0 ? void 0 : onChange({\n h: hsl === null || hsl === void 0 ? void 0 : hsl.h,\n s: hsl === null || hsl === void 0 ? void 0 : hsl.s,\n l: hsl === null || hsl === void 0 ? void 0 : hsl.l,\n a: data.a,\n source: 'rgb'\n }, e);\n }\n };\n return /*#__PURE__*/React.createElement(\"div\", {\n style: styles.fields,\n className: \"flexbox-fix\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: styles.double\n }, /*#__PURE__*/React.createElement(EditableInput, {\n style: {\n input: styles.input,\n label: styles.label\n },\n label: \"hex\",\n value: hex === null || hex === void 0 ? void 0 : hex.replace('#', ''),\n onChange: handleChange\n })), /*#__PURE__*/React.createElement(\"div\", {\n style: styles.single\n }, /*#__PURE__*/React.createElement(EditableInput, {\n style: {\n input: styles.input,\n label: styles.label\n },\n label: \"r\",\n value: rgb === null || rgb === void 0 ? void 0 : rgb.r,\n onChange: handleChange,\n dragLabel: \"true\",\n dragMax: \"255\"\n })), /*#__PURE__*/React.createElement(\"div\", {\n style: styles.single\n }, /*#__PURE__*/React.createElement(EditableInput, {\n style: {\n input: styles.input,\n label: styles.label\n },\n label: \"g\",\n value: rgb === null || rgb === void 0 ? void 0 : rgb.g,\n onChange: handleChange,\n dragLabel: \"true\",\n dragMax: \"255\"\n })), /*#__PURE__*/React.createElement(\"div\", {\n style: styles.single\n }, /*#__PURE__*/React.createElement(EditableInput, {\n style: {\n input: styles.input,\n label: styles.label\n },\n label: \"b\",\n value: rgb === null || rgb === void 0 ? void 0 : rgb.b,\n onChange: handleChange,\n dragLabel: \"true\",\n dragMax: \"255\"\n })), /*#__PURE__*/React.createElement(\"div\", {\n style: styles.alpha\n }, /*#__PURE__*/React.createElement(EditableInput, {\n style: {\n input: styles.input,\n label: styles.label\n },\n label: \"a\",\n value: Math.round(((rgb === null || rgb === void 0 ? void 0 : rgb.a) || 0) * 100),\n onChange: handleChange,\n dragLabel: \"true\",\n dragMax: \"100\"\n })));\n};\nexport default SketchFields;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React from 'react';\nimport { Swatch } from '../common';\nexport var SketchPresetColors = function SketchPresetColors(_ref) {\n var colors = _ref.colors,\n _ref$onClick = _ref.onClick,\n onClick = _ref$onClick === void 0 ? function () {} : _ref$onClick,\n onSwatchHover = _ref.onSwatchHover;\n var styles = {\n colors: {\n margin: '0 -10px',\n padding: '10px 0 0 10px',\n borderTop: '1px solid #eee',\n display: 'flex',\n flexWrap: 'wrap',\n position: 'relative'\n },\n swatchWrap: {\n width: '16px',\n height: '16px',\n margin: '0 10px 10px 0'\n },\n swatch: {\n msBorderRadius: '3px',\n MozBorderRadius: '3px',\n OBorderRadius: '3px',\n WebkitBorderRadius: '3px',\n borderRadius: '3px',\n msBoxShadow: 'inset 0 0 0 1px rgba(0,0,0,.15)',\n MozBoxShadow: 'inset 0 0 0 1px rgba(0,0,0,.15)',\n OBoxShadow: 'inset 0 0 0 1px rgba(0,0,0,.15)',\n WebkitBoxShadow: 'inset 0 0 0 1px rgba(0,0,0,.15)',\n boxShadow: 'inset 0 0 0 1px rgba(0,0,0,.15)'\n }\n };\n var handleClick = function handleClick(hex, e) {\n onClick === null || onClick === void 0 ? void 0 : onClick({\n hex: hex,\n source: 'hex'\n }, e);\n };\n return /*#__PURE__*/React.createElement(\"div\", {\n style: styles.colors,\n className: \"flexbox-fix\"\n }, colors === null || colors === void 0 ? void 0 : colors.map(function (colorObjOrString) {\n var c = typeof colorObjOrString === 'string' ? {\n color: colorObjOrString,\n title: undefined\n } : colorObjOrString;\n var key = \"\".concat(c.color).concat((c === null || c === void 0 ? void 0 : c.title) || '');\n return /*#__PURE__*/React.createElement(\"div\", {\n key: key,\n style: styles.swatchWrap\n }, /*#__PURE__*/React.createElement(Swatch, _objectSpread(_objectSpread({}, c), {}, {\n style: styles.swatch,\n onClick: handleClick,\n onHover: onSwatchHover,\n focusStyle: {\n boxShadow: \"inset 0 0 0 1px rgba(0,0,0,.15), 0 0 4px \".concat(c.color)\n }\n })));\n }));\n};\nexport default SketchPresetColors;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\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(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React from 'react';\nimport reactCSS from 'reactcss';\nimport merge from 'lodash/merge';\nimport { ColorWrap, Saturation, Hue, Alpha, Checkboard } from '../common';\nimport SketchFields from './SketchFields';\nimport SketchPresetColors from './SketchPresetColors';\nexport var Sketch = function Sketch(_ref) {\n var width = _ref.width,\n rgb = _ref.rgb,\n hex = _ref.hex,\n hsv = _ref.hsv,\n hsl = _ref.hsl,\n onChange = _ref.onChange,\n onSwatchHover = _ref.onSwatchHover,\n disableAlpha = _ref.disableAlpha,\n presetColors = _ref.presetColors,\n renderers = _ref.renderers,\n _ref$styles = _ref.styles,\n passedStyles = _ref$styles === void 0 ? {} : _ref$styles,\n _ref$className = _ref.className,\n className = _ref$className === void 0 ? '' : _ref$className;\n var styles = reactCSS(\n //@ts-ignore\n merge({\n default: _objectSpread({\n picker: {\n width: width,\n padding: '10px 10px 0',\n boxSizing: 'initial',\n background: '#fff',\n borderRadius: '4px',\n boxShadow: '0 0 0 1px rgba(0,0,0,.15), 0 8px 16px rgba(0,0,0,.15)'\n },\n saturation: {\n width: '100%',\n paddingBottom: '75%',\n position: 'relative',\n overflow: 'hidden'\n },\n Saturation: {\n radius: '3px',\n shadow: 'inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)'\n },\n controls: {\n display: 'flex'\n },\n sliders: {\n padding: '4px 0',\n flex: '1'\n },\n color: {\n width: '24px',\n height: '24px',\n position: 'relative',\n marginTop: '4px',\n marginLeft: '4px',\n borderRadius: '3px'\n },\n activeColor: {\n absolute: '0px 0px 0px 0px',\n borderRadius: '2px',\n background: \"rgba(\".concat(rgb.r, \",\").concat(rgb.g, \",\").concat(rgb.b, \",\").concat(rgb.a, \")\"),\n boxShadow: 'inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)'\n },\n hue: {\n position: 'relative',\n height: '10px',\n overflow: 'hidden'\n },\n Hue: {\n radius: '2px',\n shadow: 'inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)'\n },\n alpha: {\n position: 'relative',\n height: '10px',\n marginTop: '4px',\n overflow: 'hidden'\n },\n Alpha: {\n radius: '2px',\n shadow: 'inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)'\n }\n }, passedStyles),\n disableAlpha: {\n color: {\n height: '10px'\n },\n hue: {\n height: '10px'\n },\n alpha: {\n display: 'none'\n }\n }\n }, passedStyles), {\n disableAlpha: disableAlpha\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n style: styles.picker,\n className: \"sketch-picker \".concat(className)\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: styles.saturation\n }, /*#__PURE__*/React.createElement(Saturation, {\n style: styles.Saturation,\n hsl: hsl,\n hsv: hsv,\n onChange: onChange\n })), /*#__PURE__*/React.createElement(\"div\", {\n style: styles.controls,\n className: \"flexbox-fix\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: styles.sliders\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: styles.hue\n }, /*#__PURE__*/React.createElement(Hue, {\n style: styles.Hue,\n hsl: hsl,\n onChange: onChange\n })), /*#__PURE__*/React.createElement(\"div\", {\n style: styles.alpha\n }, /*#__PURE__*/React.createElement(Alpha, {\n style: styles.Alpha,\n rgb: rgb,\n hsl: hsl,\n renderers: renderers,\n onChange: onChange\n }))), /*#__PURE__*/React.createElement(\"div\", {\n style: styles.color\n }, /*#__PURE__*/React.createElement(Checkboard, null), /*#__PURE__*/React.createElement(\"div\", {\n style: styles.activeColor\n }))), /*#__PURE__*/React.createElement(SketchFields, {\n rgb: rgb,\n hsl: hsl,\n hex: hex,\n onChange: onChange,\n disableAlpha: disableAlpha\n }), /*#__PURE__*/React.createElement(SketchPresetColors, {\n colors: presetColors,\n onClick: onChange,\n onSwatchHover: onSwatchHover\n }));\n};\nSketch.defaultProps = {\n disableAlpha: false,\n width: 200,\n styles: {},\n presetColors: ['#D0021B', '#F5A623', '#F8E71C', '#8B572A', '#7ED321', '#417505', '#BD10E0', '#9013FE', '#4A90E2', '#50E3C2', '#B8E986', '#000000', '#4A4A4A', '#9B9B9B', '#FFFFFF']\n};\nvar SketchPicker = ColorWrap(Sketch);\nexport { SketchPicker };","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"mode\", \"popoverProps\"];\nimport { proTheme, useStyle } from '@ant-design/pro-provider';\nimport { SketchPicker } from '@chenshuai2144/sketch-color';\nimport { ConfigProvider, Popover } from 'antd';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport React, { useContext, useImperativeHandle } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var DEFAULT_COLORS = ['#FF9D4E',\n// 0 - 橘黄色\n'#5BD8A6',\n// 1 - 绿色\n'#5B8FF9',\n// 2 - 蓝色\n'#F7664E',\n// 3 - 红色\n'#FF86B7',\n// 4 - 水红色\n'#2B9E9D',\n// 5 - 墨绿色\n'#9270CA',\n// 6 - 紫色\n'#6DC8EC',\n// 7 - 浅蓝色\n'#667796',\n// 8 - 黛蓝色\n'#F6BD16' // 9 - 黄色\n];\nexport var ColorPicker = /*#__PURE__*/React.forwardRef(function (_ref, ref) {\n var mode = _ref.mode,\n popoverProps = _ref.popoverProps,\n rest = _objectWithoutProperties(_ref, _excluded);\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var prefixCls = getPrefixCls('pro-field-color-picker');\n var _proTheme$useToken = proTheme.useToken(),\n token = _proTheme$useToken.token;\n var _useMergedState = useMergedState('#1890ff', {\n value: rest.value,\n onChange: rest.onChange\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n color = _useMergedState2[0],\n setColor = _useMergedState2[1];\n var _useStyle = useStyle('ProFiledColorPicker' + color, function () {\n return _defineProperty({}, \".\".concat(prefixCls), {\n width: 32,\n height: 32,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxSizing: 'border-box',\n border: \"1px solid \".concat(token.colorSplit),\n borderRadius: token.borderRadius,\n '&:hover': {\n borderColor: color\n }\n });\n }),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n var readDom = wrapSSR( /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefixCls, \" \").concat(hashId).trim(),\n style: {\n cursor: rest.disabled ? 'not-allowed' : 'pointer',\n backgroundColor: rest.disabled ? token.colorBgContainerDisabled : token.colorBgContainer\n },\n children: /*#__PURE__*/_jsx(\"div\", {\n style: {\n backgroundColor: color,\n width: 24,\n boxSizing: 'border-box',\n height: 24,\n borderRadius: token.borderRadius\n }\n })\n }));\n useImperativeHandle(ref, function () {});\n if (mode === 'read' || rest.disabled) {\n return readDom;\n }\n return /*#__PURE__*/_jsx(Popover, _objectSpread(_objectSpread({\n trigger: \"click\",\n placement: \"right\"\n }, popoverProps), {}, {\n content: /*#__PURE__*/_jsx(\"div\", {\n style: {\n margin: '-12px -16px'\n },\n children: /*#__PURE__*/_jsx(SketchPicker, _objectSpread(_objectSpread({}, rest), {}, {\n presetColors: rest.colors || rest.presetColors || DEFAULT_COLORS,\n color: color,\n onChange: function onChange(_ref3) {\n var hex = _ref3.hex,\n _ref3$rgb = _ref3.rgb,\n r = _ref3$rgb.r,\n g = _ref3$rgb.g,\n b = _ref3$rgb.b,\n a = _ref3$rgb.a;\n if (a && a < 1) {\n setColor(\"rgba(\".concat(r, \", \").concat(g, \", \").concat(b, \", \").concat(a, \")\"));\n return;\n }\n setColor(hex);\n }\n }))\n }),\n children: readDom\n }));\n});","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { compareVersions } from '@ant-design/pro-utils';\nimport { ColorPicker as ColorPickerV5, ConfigProvider, version } from 'antd';\nimport classNames from 'classnames';\nimport React, { useContext, useMemo } from 'react';\nimport { ColorPicker as ColorPickerV4 } from \"./old\";\n// https://ant.design/components/color-picker-cn 示例颜色\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar DEFAULT_PRESETS = {\n label: 'Recommended',\n colors: ['#F5222D', '#FA8C16', '#FADB14', '#8BBB11', '#52C41A', '#13A8A8', '#1677FF', '#2F54EB', '#722ED1', '#EB2F96', '#F5222D4D', '#FA8C164D', '#FADB144D', '#8BBB114D', '#52C41A4D', '#13A8A84D', '#1677FF4D', '#2F54EB4D', '#722ED14D', '#EB2F964D']\n};\n/**\n * 判断是否是 5.5.0 以上的版本\n * @returns\n */\nfunction IsIt_Render_V5() {\n return compareVersions(version, '5.5.0') > -1;\n}\n/**\n * 获取颜色组件\n * @param {boolean} [old=false] 是否使用旧版本\n * @return {*}\n */\nfunction getColorPicker() {\n var old = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n if ((typeof old === 'undefined' || old === false) && IsIt_Render_V5()) {\n return ColorPickerV5;\n }\n return ColorPickerV4;\n}\n// const ColorPicker = getColorPicker();\n/**\n * 颜色组件\n * Antd > 5.5.0 的版本 使用 antd 的 ColorPicker\n * @param FieldColorPicker {\n * text: number;\n * moneySymbol?: string; }\n */\nvar FieldColorPicker = function FieldColorPicker(_ref, ref) {\n var text = _ref.text,\n type = _ref.mode,\n render = _ref.render,\n renderFormItem = _ref.renderFormItem,\n fieldProps = _ref.fieldProps,\n old = _ref.old;\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var ColorPicker = React.useMemo(function () {\n return getColorPicker(old);\n }, [old]);\n var prefixCls = getPrefixCls('pro-field-color-picker');\n // 5.5.0 以上版本追加 className\n var className = useMemo(function () {\n if (old) return '';\n return classNames(_defineProperty({}, prefixCls, IsIt_Render_V5()));\n }, [prefixCls, old]);\n if (type === 'read') {\n var dom = /*#__PURE__*/_jsx(ColorPicker, {\n value: text,\n mode: \"read\",\n ref: ref,\n className: className\n // @ts-ignore 设置无法 open\n ,\n open: false\n });\n if (render) {\n return render(text, _objectSpread({\n mode: type\n }, fieldProps), dom);\n }\n return dom;\n }\n if (type === 'edit' || type === 'update') {\n // 解决 默认的 width 100% 问题\n var style = _objectSpread({\n display: 'table-cell'\n }, fieldProps.style);\n var _dom = /*#__PURE__*/_jsx(ColorPicker, _objectSpread(_objectSpread({\n ref: ref,\n presets: [DEFAULT_PRESETS]\n }, fieldProps), {}, {\n style: style,\n className: className\n }));\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread(_objectSpread({\n mode: type\n }, fieldProps), {}, {\n style: style\n }), _dom);\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldColorPicker);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useIntl } from '@ant-design/pro-provider';\nimport { FieldLabel, compatibleBorder, parseValueToDay } from '@ant-design/pro-utils';\nimport { DatePicker } from 'antd';\nimport dayjs from 'dayjs';\nimport weekOfYear from 'dayjs/plugin/weekOfYear';\nimport React, { useState } from 'react';\n// 兼容代码-----------\nimport \"antd/es/date-picker/style\";\n//----------------------\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\ndayjs.extend(weekOfYear);\nvar formatDate = function formatDate(text, format) {\n if (!text) return '-';\n if (typeof format === 'function') {\n return format(dayjs(text));\n } else {\n return dayjs(text).format((Array.isArray(format) ? format[0] : format) || 'YYYY-MM-DD');\n }\n};\n\n/**\n * 日期选择组件\n *\n * @param\n */\nvar FieldDatePicker = function FieldDatePicker(_ref, ref) {\n var text = _ref.text,\n mode = _ref.mode,\n format = _ref.format,\n label = _ref.label,\n light = _ref.light,\n render = _ref.render,\n renderFormItem = _ref.renderFormItem,\n plain = _ref.plain,\n showTime = _ref.showTime,\n fieldProps = _ref.fieldProps,\n picker = _ref.picker,\n bordered = _ref.bordered,\n lightLabel = _ref.lightLabel;\n var intl = useIntl();\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n open = _useState2[0],\n setOpen = _useState2[1];\n if (mode === 'read') {\n var dom = formatDate(text, fieldProps.format || format);\n if (render) {\n return render(text, _objectSpread({\n mode: mode\n }, fieldProps), /*#__PURE__*/_jsx(_Fragment, {\n children: dom\n }));\n }\n return /*#__PURE__*/_jsx(_Fragment, {\n children: dom\n });\n }\n if (mode === 'edit' || mode === 'update') {\n var _dom;\n var disabled = fieldProps.disabled,\n value = fieldProps.value,\n _fieldProps$placehold = fieldProps.placeholder,\n placeholder = _fieldProps$placehold === void 0 ? intl.getMessage('tableForm.selectPlaceholder', '请选择') : _fieldProps$placehold;\n var dayValue = parseValueToDay(value);\n if (light) {\n _dom = /*#__PURE__*/_jsx(FieldLabel, {\n label: label,\n onClick: function onClick() {\n var _fieldProps$onOpenCha;\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onOpenCha = fieldProps.onOpenChange) === null || _fieldProps$onOpenCha === void 0 || _fieldProps$onOpenCha.call(fieldProps, true);\n setOpen(true);\n },\n style: dayValue ? {\n paddingInlineEnd: 0\n } : undefined,\n disabled: disabled,\n value: dayValue || open ? /*#__PURE__*/_jsx(DatePicker, _objectSpread(_objectSpread(_objectSpread({\n picker: picker,\n showTime: showTime,\n format: format,\n ref: ref\n }, fieldProps), {}, {\n value: dayValue,\n onOpenChange: function onOpenChange(isOpen) {\n var _fieldProps$onOpenCha2;\n setOpen(isOpen);\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onOpenCha2 = fieldProps.onOpenChange) === null || _fieldProps$onOpenCha2 === void 0 || _fieldProps$onOpenCha2.call(fieldProps, isOpen);\n }\n }, compatibleBorder(false)), {}, {\n open: open\n })) : undefined,\n allowClear: false,\n downIcon: dayValue || open ? false : undefined,\n bordered: bordered,\n ref: lightLabel\n });\n } else {\n _dom = /*#__PURE__*/_jsx(DatePicker, _objectSpread(_objectSpread(_objectSpread({\n picker: picker,\n showTime: showTime,\n format: format,\n placeholder: placeholder\n }, compatibleBorder(plain === undefined ? true : !plain)), {}, {\n ref: ref\n }, fieldProps), {}, {\n value: dayValue\n }));\n }\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: mode\n }, fieldProps), _dom);\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldDatePicker);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { isNil } from '@ant-design/pro-utils';\nimport { InputNumber } from 'antd';\nimport omit from \"rc-util/es/omit\";\nimport React, { useCallback } from 'react';\n// 兼容代码-----------\nimport { useIntl } from '@ant-design/pro-provider';\nimport \"antd/es/input-number/style\";\n//----------------------\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * 数字组件\n *\n * @param FieldDigitProps {\n * text: number;\n * moneySymbol?: string; }\n */\nvar FieldDigit = function FieldDigit(_ref, ref) {\n var text = _ref.text,\n type = _ref.mode,\n render = _ref.render,\n placeholder = _ref.placeholder,\n renderFormItem = _ref.renderFormItem,\n fieldProps = _ref.fieldProps;\n var intl = useIntl();\n var placeholderValue = placeholder || intl.getMessage('tableForm.inputPlaceholder', '请输入');\n var proxyChange = useCallback(function (value) {\n var val = value !== null && value !== void 0 ? value : undefined;\n if (!fieldProps.stringMode && typeof val === 'string') {\n val = Number(val);\n }\n if (typeof val === 'number' && !isNil(val) && !isNil(fieldProps.precision)) {\n val = Number(val.toFixed(fieldProps.precision));\n }\n return val;\n }, [fieldProps]);\n if (type === 'read') {\n var _fieldProps$formatter;\n var fractionDigits = {};\n if (fieldProps !== null && fieldProps !== void 0 && fieldProps.precision) {\n fractionDigits = {\n minimumFractionDigits: Number(fieldProps.precision),\n maximumFractionDigits: Number(fieldProps.precision)\n };\n }\n var digit = new Intl.NumberFormat(undefined, _objectSpread(_objectSpread({}, fractionDigits), (fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.intlProps) || {})).format(Number(text));\n\n // 如果是 string 模式,什么都不要处理了\n var dom = !(fieldProps !== null && fieldProps !== void 0 && fieldProps.stringMode) ? /*#__PURE__*/_jsx(\"span\", {\n ref: ref,\n children: (fieldProps === null || fieldProps === void 0 || (_fieldProps$formatter = fieldProps.formatter) === null || _fieldProps$formatter === void 0 ? void 0 : _fieldProps$formatter.call(fieldProps, digit)) || digit\n }) : /*#__PURE__*/_jsx(\"span\", {\n children: text\n });\n if (render) {\n return render(text, _objectSpread({\n mode: type\n }, fieldProps), dom);\n }\n return dom;\n }\n if (type === 'edit' || type === 'update') {\n var _dom = /*#__PURE__*/_jsx(InputNumber, _objectSpread(_objectSpread({\n ref: ref,\n min: 0,\n placeholder: placeholderValue\n }, omit(fieldProps, ['onChange', 'onBlur'])), {}, {\n onChange: function onChange(e) {\n var _fieldProps$onChange;\n return fieldProps === null || fieldProps === void 0 || (_fieldProps$onChange = fieldProps.onChange) === null || _fieldProps$onChange === void 0 ? void 0 : _fieldProps$onChange.call(fieldProps, proxyChange(e));\n },\n onBlur: function onBlur(e) {\n var _fieldProps$onBlur;\n return fieldProps === null || fieldProps === void 0 || (_fieldProps$onBlur = fieldProps.onBlur) === null || _fieldProps$onBlur === void 0 ? void 0 : _fieldProps$onBlur.call(fieldProps, proxyChange(e.target.value));\n }\n }));\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: type\n }, fieldProps), _dom);\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldDigit);","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { proTheme, useIntl } from '@ant-design/pro-provider';\nimport { Input, InputNumber, Space } from 'antd';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport React, { useRef } from 'react';\n// 兼容代码-----------\nimport \"antd/es/input-number/style\";\n//----------------------\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * 数字范围组件\n *\n * @param FieldDigitRangeProps\n */\nvar FieldDigitRange = function FieldDigitRange(_ref, ref) {\n var text = _ref.text,\n type = _ref.mode,\n render = _ref.render,\n placeholder = _ref.placeholder,\n renderFormItem = _ref.renderFormItem,\n fieldProps = _ref.fieldProps,\n _ref$separator = _ref.separator,\n separator = _ref$separator === void 0 ? '~' : _ref$separator,\n _ref$separatorWidth = _ref.separatorWidth,\n separatorWidth = _ref$separatorWidth === void 0 ? 30 : _ref$separatorWidth;\n var value = fieldProps.value,\n defaultValue = fieldProps.defaultValue,\n onChange = fieldProps.onChange,\n id = fieldProps.id;\n var intl = useIntl();\n var _proTheme$useToken = proTheme.useToken(),\n token = _proTheme$useToken.token;\n var _useMergedState = useMergedState(function () {\n return defaultValue;\n }, {\n value: value,\n onChange: onChange\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n valuePair = _useMergedState2[0],\n setValuePair = _useMergedState2[1];\n var valuePairRef = useRef(valuePair);\n if (type === 'read') {\n var getContent = function getContent(number) {\n var _fieldProps$formatter;\n var digit = new Intl.NumberFormat(undefined, _objectSpread({\n minimumSignificantDigits: 2\n }, (fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.intlProps) || {})).format(Number(number));\n return (fieldProps === null || fieldProps === void 0 || (_fieldProps$formatter = fieldProps.formatter) === null || _fieldProps$formatter === void 0 ? void 0 : _fieldProps$formatter.call(fieldProps, digit)) || digit;\n };\n var dom = /*#__PURE__*/_jsxs(\"span\", {\n ref: ref,\n children: [getContent(text[0]), \" \", separator, \" \", getContent(text[1])]\n });\n if (render) {\n return render(text, _objectSpread({\n mode: type\n }, fieldProps), dom);\n }\n return dom;\n }\n if (type === 'edit' || type === 'update') {\n var handleGroupBlur = function handleGroupBlur() {\n if (Array.isArray(valuePairRef.current)) {\n // 仅在两个值均为数字时才做比较并转换\n var _valuePairRef$current = _slicedToArray(valuePairRef.current, 2),\n value0 = _valuePairRef$current[0],\n value1 = _valuePairRef$current[1];\n if (typeof value0 === 'number' && typeof value1 === 'number' && value0 > value1) {\n setValuePair([value1, value0]);\n } else if (value0 === undefined && value1 === undefined) {\n // 当两个值均为undefined时将值变为undefined,方便required处理\n setValuePair(undefined);\n }\n }\n };\n var handleChange = function handleChange(index, changedValue) {\n var newValuePair = _toConsumableArray(valuePair || []);\n newValuePair[index] = changedValue === null ? undefined : changedValue;\n valuePairRef.current = newValuePair;\n setValuePair(newValuePair);\n };\n var placeholderValue = (fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.placeholder) || placeholder || [intl.getMessage('tableForm.inputPlaceholder', '请输入'), intl.getMessage('tableForm.inputPlaceholder', '请输入')];\n var getInputNumberPlaceholder = function getInputNumberPlaceholder(index) {\n return Array.isArray(placeholderValue) ? placeholderValue[index] : placeholderValue;\n };\n var Compact = Space.Compact || Input.Group;\n var compactProps = !!Space.Compact ? {} : {\n compact: true\n };\n var _dom = /*#__PURE__*/_jsxs(Compact, _objectSpread(_objectSpread({}, compactProps), {}, {\n onBlur: handleGroupBlur,\n children: [/*#__PURE__*/_jsx(InputNumber, _objectSpread(_objectSpread({}, fieldProps), {}, {\n placeholder: getInputNumberPlaceholder(0),\n id: id !== null && id !== void 0 ? id : \"\".concat(id, \"-0\"),\n style: {\n width: \"calc((100% - \".concat(separatorWidth, \"px) / 2)\")\n },\n value: valuePair === null || valuePair === void 0 ? void 0 : valuePair[0],\n defaultValue: defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue[0],\n onChange: function onChange(changedValue) {\n return handleChange(0, changedValue);\n }\n })), /*#__PURE__*/_jsx(Input, {\n style: {\n width: separatorWidth,\n textAlign: 'center',\n borderInlineStart: 0,\n borderInlineEnd: 0,\n pointerEvents: 'none',\n backgroundColor: token === null || token === void 0 ? void 0 : token.colorBgContainer\n },\n placeholder: separator,\n disabled: true\n }), /*#__PURE__*/_jsx(InputNumber, _objectSpread(_objectSpread({}, fieldProps), {}, {\n placeholder: getInputNumberPlaceholder(1),\n id: id !== null && id !== void 0 ? id : \"\".concat(id, \"-1\"),\n style: {\n width: \"calc((100% - \".concat(separatorWidth, \"px) / 2)\"),\n borderInlineStart: 0\n },\n value: valuePair === null || valuePair === void 0 ? void 0 : valuePair[1],\n defaultValue: defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue[1],\n onChange: function onChange(changedValue) {\n return handleChange(1, changedValue);\n }\n }))]\n }));\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: type\n }, fieldProps), _dom);\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldDigitRange);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { useIntl } from '@ant-design/pro-provider';\nimport { compatibleBorder, parseValueToDay } from '@ant-design/pro-utils';\nimport { DatePicker, Tooltip } from 'antd';\nimport dayjs from 'dayjs';\nimport relativeTime from 'dayjs/plugin/relativeTime';\n// 兼容代码-----------\nimport \"antd/es/date-picker/style\";\nimport React from 'react';\n//----------------------\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\ndayjs.extend(relativeTime);\n/**\n * 与当前的时间进行比较 http://momentjs.cn/docs/displaying/fromnow.html\n *\n * @param\n */\nvar FieldFromNow = function FieldFromNow(_ref, ref) {\n var text = _ref.text,\n mode = _ref.mode,\n plain = _ref.plain,\n render = _ref.render,\n renderFormItem = _ref.renderFormItem,\n format = _ref.format,\n fieldProps = _ref.fieldProps;\n var intl = useIntl();\n if (mode === 'read') {\n var dom = /*#__PURE__*/_jsx(Tooltip, {\n title: dayjs(text).format((fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.format) || format || 'YYYY-MM-DD HH:mm:ss'),\n children: dayjs(text).fromNow()\n });\n if (render) {\n return render(text, _objectSpread({\n mode: mode\n }, fieldProps), /*#__PURE__*/_jsx(_Fragment, {\n children: dom\n }));\n }\n return /*#__PURE__*/_jsx(_Fragment, {\n children: dom\n });\n }\n if (mode === 'edit' || mode === 'update') {\n var placeholder = intl.getMessage('tableForm.selectPlaceholder', '请选择');\n var momentValue = parseValueToDay(fieldProps.value);\n var _dom = /*#__PURE__*/_jsx(DatePicker, _objectSpread(_objectSpread(_objectSpread({\n ref: ref,\n placeholder: placeholder,\n showTime: true\n }, compatibleBorder(plain === undefined ? true : !plain)), fieldProps), {}, {\n value: momentValue\n }));\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: mode\n }, fieldProps), _dom);\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldFromNow);","// This icon file is generated automatically.\nvar RotateLeftOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"defs\", \"attrs\": {}, \"children\": [{ \"tag\": \"style\", \"attrs\": {} }] }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M672 418H144c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32zm-44 402H188V494h440v326z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M819.3 328.5c-78.8-100.7-196-153.6-314.6-154.2l-.2-64c0-6.5-7.6-10.1-12.6-6.1l-128 101c-4 3.1-3.9 9.1 0 12.3L492 318.6c5.1 4 12.7.4 12.6-6.1v-63.9c12.9.1 25.9.9 38.8 2.5 42.1 5.2 82.1 18.2 119 38.7 38.1 21.2 71.2 49.7 98.4 84.3 27.1 34.7 46.7 73.7 58.1 115.8a325.95 325.95 0 016.5 140.9h74.9c14.8-103.6-11.3-213-81-302.3z\" } }] }, \"name\": \"rotate-left\", \"theme\": \"outlined\" };\nexport default RotateLeftOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport RotateLeftOutlinedSvg from \"@ant-design/icons-svg/es/asn/RotateLeftOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar RotateLeftOutlined = function RotateLeftOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: RotateLeftOutlinedSvg\n }));\n};\n\n/**![rotate-left](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHN0eWxlIC8+PC9kZWZzPjxwYXRoIGQ9Ik02NzIgNDE4SDE0NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NDE0YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDUyOGMxNy43IDAgMzItMTQuMyAzMi0zMlY0NTBjMC0xNy43LTE0LjMtMzItMzItMzJ6bS00NCA0MDJIMTg4VjQ5NGg0NDB2MzI2eiIgLz48cGF0aCBkPSJNODE5LjMgMzI4LjVjLTc4LjgtMTAwLjctMTk2LTE1My42LTMxNC42LTE1NC4ybC0uMi02NGMwLTYuNS03LjYtMTAuMS0xMi42LTYuMWwtMTI4IDEwMWMtNCAzLjEtMy45IDkuMSAwIDEyLjNMNDkyIDMxOC42YzUuMSA0IDEyLjcuNCAxMi42LTYuMXYtNjMuOWMxMi45LjEgMjUuOS45IDM4LjggMi41IDQyLjEgNS4yIDgyLjEgMTguMiAxMTkgMzguNyAzOC4xIDIxLjIgNzEuMiA0OS43IDk4LjQgODQuMyAyNy4xIDM0LjcgNDYuNyA3My43IDU4LjEgMTE1LjhhMzI1Ljk1IDMyNS45NSAwIDAxNi41IDE0MC45aDc0LjljMTQuOC0xMDMuNi0xMS4zLTIxMy04MS0zMDIuM3oiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(RotateLeftOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'RotateLeftOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar RotateRightOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"defs\", \"attrs\": {}, \"children\": [{ \"tag\": \"style\", \"attrs\": {} }] }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M480.5 251.2c13-1.6 25.9-2.4 38.8-2.5v63.9c0 6.5 7.5 10.1 12.6 6.1L660 217.6c4-3.2 4-9.2 0-12.3l-128-101c-5.1-4-12.6-.4-12.6 6.1l-.2 64c-118.6.5-235.8 53.4-314.6 154.2A399.75 399.75 0 00123.5 631h74.9c-.9-5.3-1.7-10.7-2.4-16.1-5.1-42.1-2.1-84.1 8.9-124.8 11.4-42.2 31-81.1 58.1-115.8 27.2-34.7 60.3-63.2 98.4-84.3 37-20.6 76.9-33.6 119.1-38.8z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M880 418H352c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32zm-44 402H396V494h440v326z\" } }] }, \"name\": \"rotate-right\", \"theme\": \"outlined\" };\nexport default RotateRightOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport RotateRightOutlinedSvg from \"@ant-design/icons-svg/es/asn/RotateRightOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar RotateRightOutlined = function RotateRightOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: RotateRightOutlinedSvg\n }));\n};\n\n/**![rotate-right](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHN0eWxlIC8+PC9kZWZzPjxwYXRoIGQ9Ik00ODAuNSAyNTEuMmMxMy0xLjYgMjUuOS0yLjQgMzguOC0yLjV2NjMuOWMwIDYuNSA3LjUgMTAuMSAxMi42IDYuMUw2NjAgMjE3LjZjNC0zLjIgNC05LjIgMC0xMi4zbC0xMjgtMTAxYy01LjEtNC0xMi42LS40LTEyLjYgNi4xbC0uMiA2NGMtMTE4LjYuNS0yMzUuOCA1My40LTMxNC42IDE1NC4yQTM5OS43NSAzOTkuNzUgMCAwMDEyMy41IDYzMWg3NC45Yy0uOS01LjMtMS43LTEwLjctMi40LTE2LjEtNS4xLTQyLjEtMi4xLTg0LjEgOC45LTEyNC44IDExLjQtNDIuMiAzMS04MS4xIDU4LjEtMTE1LjggMjcuMi0zNC43IDYwLjMtNjMuMiA5OC40LTg0LjMgMzctMjAuNiA3Ni45LTMzLjYgMTE5LjEtMzguOHoiIC8+PHBhdGggZD0iTTg4MCA0MThIMzUyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY0MTRjMCAxNy43IDE0LjMgMzIgMzIgMzJoNTI4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjQ1MGMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTQ0IDQwMkgzOTZWNDk0aDQ0MHYzMjZ6IiAvPjwvc3ZnPg==) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(RotateRightOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'RotateRightOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar SwapOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M847.9 592H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h605.2L612.9 851c-4.1 5.2-.4 13 6.3 13h72.5c4.9 0 9.5-2.2 12.6-6.1l168.8-214.1c16.5-21 1.6-51.8-25.2-51.8zM872 356H266.8l144.3-183c4.1-5.2.4-13-6.3-13h-72.5c-4.9 0-9.5 2.2-12.6 6.1L150.9 380.2c-16.5 21-1.6 51.8 25.1 51.8h696c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8z\" } }] }, \"name\": \"swap\", \"theme\": \"outlined\" };\nexport default SwapOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport SwapOutlinedSvg from \"@ant-design/icons-svg/es/asn/SwapOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar SwapOutlined = function SwapOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: SwapOutlinedSvg\n }));\n};\n\n/**![swap](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg0Ny45IDU5MkgxNTJjLTQuNCAwLTggMy42LTggOHY2MGMwIDQuNCAzLjYgOCA4IDhoNjA1LjJMNjEyLjkgODUxYy00LjEgNS4yLS40IDEzIDYuMyAxM2g3Mi41YzQuOSAwIDkuNS0yLjIgMTIuNi02LjFsMTY4LjgtMjE0LjFjMTYuNS0yMSAxLjYtNTEuOC0yNS4yLTUxLjh6TTg3MiAzNTZIMjY2LjhsMTQ0LjMtMTgzYzQuMS01LjIuNC0xMy02LjMtMTNoLTcyLjVjLTQuOSAwLTkuNSAyLjItMTIuNiA2LjFMMTUwLjkgMzgwLjJjLTE2LjUgMjEtMS42IDUxLjggMjUuMSA1MS44aDY5NmM0LjQgMCA4LTMuNiA4LTh2LTYwYzAtNC40LTMuNi04LTgtOHoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(SwapOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'SwapOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar ZoomInOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M637 443H519V309c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v134H325c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h118v134c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V519h118c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm284 424L775 721c122.1-148.9 113.6-369.5-26-509-148-148.1-388.4-148.1-537 0-148.1 148.6-148.1 389 0 537 139.5 139.6 360.1 148.1 509 26l146 146c3.2 2.8 8.3 2.8 11 0l43-43c2.8-2.7 2.8-7.8 0-11zM696 696c-118.8 118.7-311.2 118.7-430 0-118.7-118.8-118.7-311.2 0-430 118.8-118.7 311.2-118.7 430 0 118.7 118.8 118.7 311.2 0 430z\" } }] }, \"name\": \"zoom-in\", \"theme\": \"outlined\" };\nexport default ZoomInOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport ZoomInOutlinedSvg from \"@ant-design/icons-svg/es/asn/ZoomInOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar ZoomInOutlined = function ZoomInOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: ZoomInOutlinedSvg\n }));\n};\n\n/**![zoom-in](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTYzNyA0NDNINTE5VjMwOWMwLTQuNC0zLjYtOC04LThoLTYwYy00LjQgMC04IDMuNi04IDh2MTM0SDMyNWMtNC40IDAtOCAzLjYtOCA4djYwYzAgNC40IDMuNiA4IDggOGgxMTh2MTM0YzAgNC40IDMuNiA4IDggOGg2MGM0LjQgMCA4LTMuNiA4LThWNTE5aDExOGM0LjQgMCA4LTMuNiA4LTh2LTYwYzAtNC40LTMuNi04LTgtOHptMjg0IDQyNEw3NzUgNzIxYzEyMi4xLTE0OC45IDExMy42LTM2OS41LTI2LTUwOS0xNDgtMTQ4LjEtMzg4LjQtMTQ4LjEtNTM3IDAtMTQ4LjEgMTQ4LjYtMTQ4LjEgMzg5IDAgNTM3IDEzOS41IDEzOS42IDM2MC4xIDE0OC4xIDUwOSAyNmwxNDYgMTQ2YzMuMiAyLjggOC4zIDIuOCAxMSAwbDQzLTQzYzIuOC0yLjcgMi44LTcuOCAwLTExek02OTYgNjk2Yy0xMTguOCAxMTguNy0zMTEuMiAxMTguNy00MzAgMC0xMTguNy0xMTguOC0xMTguNy0zMTEuMiAwLTQzMCAxMTguOC0xMTguNyAzMTEuMi0xMTguNyA0MzAgMCAxMTguNyAxMTguOCAxMTguNyAzMTEuMiAwIDQzMHoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(ZoomInOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'ZoomInOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar ZoomOutOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M637 443H325c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h312c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm284 424L775 721c122.1-148.9 113.6-369.5-26-509-148-148.1-388.4-148.1-537 0-148.1 148.6-148.1 389 0 537 139.5 139.6 360.1 148.1 509 26l146 146c3.2 2.8 8.3 2.8 11 0l43-43c2.8-2.7 2.8-7.8 0-11zM696 696c-118.8 118.7-311.2 118.7-430 0-118.7-118.8-118.7-311.2 0-430 118.8-118.7 311.2-118.7 430 0 118.7 118.8 118.7 311.2 0 430z\" } }] }, \"name\": \"zoom-out\", \"theme\": \"outlined\" };\nexport default ZoomOutOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport ZoomOutOutlinedSvg from \"@ant-design/icons-svg/es/asn/ZoomOutOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar ZoomOutOutlined = function ZoomOutOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: ZoomOutOutlinedSvg\n }));\n};\n\n/**![zoom-out](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTYzNyA0NDNIMzI1Yy00LjQgMC04IDMuNi04IDh2NjBjMCA0LjQgMy42IDggOCA4aDMxMmM0LjQgMCA4LTMuNiA4LTh2LTYwYzAtNC40LTMuNi04LTgtOHptMjg0IDQyNEw3NzUgNzIxYzEyMi4xLTE0OC45IDExMy42LTM2OS41LTI2LTUwOS0xNDgtMTQ4LjEtMzg4LjQtMTQ4LjEtNTM3IDAtMTQ4LjEgMTQ4LjYtMTQ4LjEgMzg5IDAgNTM3IDEzOS41IDEzOS42IDM2MC4xIDE0OC4xIDUwOSAyNmwxNDYgMTQ2YzMuMiAyLjggOC4zIDIuOCAxMSAwbDQzLTQzYzIuOC0yLjcgMi44LTcuOCAwLTExek02OTYgNjk2Yy0xMTguOCAxMTguNy0zMTEuMiAxMTguNy00MzAgMC0xMTguNy0xMTguOC0xMTguNy0zMTEuMiAwLTQzMCAxMTguOC0xMTguNyAzMTEuMi0xMTguNyA0MzAgMCAxMTguNyAxMTguOCAxMTguNyAzMTEuMiAwIDQzMHoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(ZoomOutOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'ZoomOutOutlined';\n}\nexport default RefIcon;","import { unit } from '@ant-design/cssinjs';\nimport { FastColor } from '@ant-design/fast-color';\nimport { genModalMaskStyle } from '../../modal/style';\nimport { textEllipsis } from '../../style';\nimport { initFadeMotion, initZoomMotion } from '../../style/motion';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nexport const genBoxStyle = position => ({\n position: position || 'absolute',\n inset: 0\n});\nexport const genImageMaskStyle = token => {\n const {\n iconCls,\n motionDurationSlow,\n paddingXXS,\n marginXXS,\n prefixCls,\n colorTextLightSolid\n } = token;\n return {\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: colorTextLightSolid,\n background: new FastColor('#000').setA(0.5).toRgbString(),\n cursor: 'pointer',\n opacity: 0,\n transition: `opacity ${motionDurationSlow}`,\n [`.${prefixCls}-mask-info`]: Object.assign(Object.assign({}, textEllipsis), {\n padding: `0 ${unit(paddingXXS)}`,\n [iconCls]: {\n marginInlineEnd: marginXXS,\n svg: {\n verticalAlign: 'baseline'\n }\n }\n })\n };\n};\nexport const genPreviewOperationsStyle = token => {\n const {\n previewCls,\n modalMaskBg,\n paddingSM,\n marginXL,\n margin,\n paddingLG,\n previewOperationColorDisabled,\n previewOperationHoverColor,\n motionDurationSlow,\n iconCls,\n colorTextLightSolid\n } = token;\n const operationBg = new FastColor(modalMaskBg).setA(0.1);\n const operationBgHover = operationBg.clone().setA(0.2);\n return {\n [`${previewCls}-footer`]: {\n position: 'fixed',\n bottom: marginXL,\n left: {\n _skip_check_: true,\n value: '50%'\n },\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n color: token.previewOperationColor,\n transform: 'translateX(-50%)'\n },\n [`${previewCls}-progress`]: {\n marginBottom: margin\n },\n [`${previewCls}-close`]: {\n position: 'fixed',\n top: marginXL,\n right: {\n _skip_check_: true,\n value: marginXL\n },\n display: 'flex',\n color: colorTextLightSolid,\n backgroundColor: operationBg.toRgbString(),\n borderRadius: '50%',\n padding: paddingSM,\n outline: 0,\n border: 0,\n cursor: 'pointer',\n transition: `all ${motionDurationSlow}`,\n '&:hover': {\n backgroundColor: operationBgHover.toRgbString()\n },\n [`& > ${iconCls}`]: {\n fontSize: token.previewOperationSize\n }\n },\n [`${previewCls}-operations`]: {\n display: 'flex',\n alignItems: 'center',\n padding: `0 ${unit(paddingLG)}`,\n backgroundColor: operationBg.toRgbString(),\n borderRadius: 100,\n '&-operation': {\n marginInlineStart: paddingSM,\n padding: paddingSM,\n cursor: 'pointer',\n transition: `all ${motionDurationSlow}`,\n userSelect: 'none',\n [`&:not(${previewCls}-operations-operation-disabled):hover > ${iconCls}`]: {\n color: previewOperationHoverColor\n },\n '&-disabled': {\n color: previewOperationColorDisabled,\n cursor: 'not-allowed'\n },\n '&:first-of-type': {\n marginInlineStart: 0\n },\n [`& > ${iconCls}`]: {\n fontSize: token.previewOperationSize\n }\n }\n }\n };\n};\nexport const genPreviewSwitchStyle = token => {\n const {\n modalMaskBg,\n iconCls,\n previewOperationColorDisabled,\n previewCls,\n zIndexPopup,\n motionDurationSlow\n } = token;\n const operationBg = new FastColor(modalMaskBg).setA(0.1);\n const operationBgHover = operationBg.clone().setA(0.2);\n return {\n [`${previewCls}-switch-left, ${previewCls}-switch-right`]: {\n position: 'fixed',\n insetBlockStart: '50%',\n zIndex: token.calc(zIndexPopup).add(1).equal(),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: token.imagePreviewSwitchSize,\n height: token.imagePreviewSwitchSize,\n marginTop: token.calc(token.imagePreviewSwitchSize).mul(-1).div(2).equal(),\n color: token.previewOperationColor,\n background: operationBg.toRgbString(),\n borderRadius: '50%',\n transform: `translateY(-50%)`,\n cursor: 'pointer',\n transition: `all ${motionDurationSlow}`,\n userSelect: 'none',\n '&:hover': {\n background: operationBgHover.toRgbString()\n },\n '&-disabled': {\n '&, &:hover': {\n color: previewOperationColorDisabled,\n background: 'transparent',\n cursor: 'not-allowed',\n [`> ${iconCls}`]: {\n cursor: 'not-allowed'\n }\n }\n },\n [`> ${iconCls}`]: {\n fontSize: token.previewOperationSize\n }\n },\n [`${previewCls}-switch-left`]: {\n insetInlineStart: token.marginSM\n },\n [`${previewCls}-switch-right`]: {\n insetInlineEnd: token.marginSM\n }\n };\n};\nexport const genImagePreviewStyle = token => {\n const {\n motionEaseOut,\n previewCls,\n motionDurationSlow,\n componentCls\n } = token;\n return [{\n [`${componentCls}-preview-root`]: {\n [previewCls]: {\n height: '100%',\n textAlign: 'center',\n pointerEvents: 'none'\n },\n [`${previewCls}-body`]: Object.assign(Object.assign({}, genBoxStyle()), {\n overflow: 'hidden'\n }),\n [`${previewCls}-img`]: {\n maxWidth: '100%',\n maxHeight: '70%',\n verticalAlign: 'middle',\n transform: 'scale3d(1, 1, 1)',\n cursor: 'grab',\n transition: `transform ${motionDurationSlow} ${motionEaseOut} 0s`,\n userSelect: 'none',\n '&-wrapper': Object.assign(Object.assign({}, genBoxStyle()), {\n transition: `transform ${motionDurationSlow} ${motionEaseOut} 0s`,\n // https://github.com/ant-design/ant-design/issues/39913\n // TailwindCSS will reset img default style.\n // Let's set back.\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n '& > *': {\n pointerEvents: 'auto'\n },\n '&::before': {\n display: 'inline-block',\n width: 1,\n height: '50%',\n marginInlineEnd: -1,\n content: '\"\"'\n }\n })\n },\n [`${previewCls}-moving`]: {\n [`${previewCls}-preview-img`]: {\n cursor: 'grabbing',\n '&-wrapper': {\n transitionDuration: '0s'\n }\n }\n }\n }\n },\n // Override\n {\n [`${componentCls}-preview-root`]: {\n [`${previewCls}-wrap`]: {\n zIndex: token.zIndexPopup\n }\n }\n },\n // Preview operations & switch\n {\n [`${componentCls}-preview-operations-wrapper`]: {\n position: 'fixed',\n zIndex: token.calc(token.zIndexPopup).add(1).equal()\n },\n '&': [genPreviewOperationsStyle(token), genPreviewSwitchStyle(token)]\n }];\n};\nconst genImageStyle = token => {\n const {\n componentCls\n } = token;\n return {\n // ============================== image ==============================\n [componentCls]: {\n position: 'relative',\n display: 'inline-block',\n [`${componentCls}-img`]: {\n width: '100%',\n height: 'auto',\n verticalAlign: 'middle'\n },\n [`${componentCls}-img-placeholder`]: {\n backgroundColor: token.colorBgContainerDisabled,\n backgroundImage: \"url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4=')\",\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center center',\n backgroundSize: '30%'\n },\n [`${componentCls}-mask`]: Object.assign({}, genImageMaskStyle(token)),\n [`${componentCls}-mask:hover`]: {\n opacity: 1\n },\n [`${componentCls}-placeholder`]: Object.assign({}, genBoxStyle())\n }\n };\n};\nconst genPreviewMotion = token => {\n const {\n previewCls\n } = token;\n return {\n [`${previewCls}-root`]: initZoomMotion(token, 'zoom'),\n '&': initFadeMotion(token, true)\n };\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = token => ({\n zIndexPopup: token.zIndexPopupBase + 80,\n previewOperationColor: new FastColor(token.colorTextLightSolid).setA(0.65).toRgbString(),\n previewOperationHoverColor: new FastColor(token.colorTextLightSolid).setA(0.85).toRgbString(),\n previewOperationColorDisabled: new FastColor(token.colorTextLightSolid).setA(0.25).toRgbString(),\n previewOperationSize: token.fontSizeIcon * 1.5 // FIXME: fontSizeIconLG\n});\nexport default genStyleHooks('Image', token => {\n const previewCls = `${token.componentCls}-preview`;\n const imageToken = mergeToken(token, {\n previewCls,\n modalMaskBg: new FastColor('#000').setA(0.45).toRgbString(),\n // FIXME: Shared Token\n imagePreviewSwitchSize: token.controlHeightLG\n });\n return [genImageStyle(imageToken), genImagePreviewStyle(imageToken), genModalMaskStyle(mergeToken(imageToken, {\n componentCls: previewCls\n })), genPreviewMotion(imageToken)];\n}, prepareComponentToken);","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport CloseOutlined from \"@ant-design/icons/es/icons/CloseOutlined\";\nimport LeftOutlined from \"@ant-design/icons/es/icons/LeftOutlined\";\nimport RightOutlined from \"@ant-design/icons/es/icons/RightOutlined\";\nimport RotateLeftOutlined from \"@ant-design/icons/es/icons/RotateLeftOutlined\";\nimport RotateRightOutlined from \"@ant-design/icons/es/icons/RotateRightOutlined\";\nimport SwapOutlined from \"@ant-design/icons/es/icons/SwapOutlined\";\nimport ZoomInOutlined from \"@ant-design/icons/es/icons/ZoomInOutlined\";\nimport ZoomOutOutlined from \"@ant-design/icons/es/icons/ZoomOutOutlined\";\nimport classNames from 'classnames';\nimport RcImage from 'rc-image';\nimport { useZIndex } from '../_util/hooks/useZIndex';\nimport { getTransitionName } from '../_util/motion';\nimport { ConfigContext } from '../config-provider';\nimport useCSSVarCls from '../config-provider/hooks/useCSSVarCls';\nimport useStyle from './style';\nexport const icons = {\n rotateLeft: /*#__PURE__*/React.createElement(RotateLeftOutlined, null),\n rotateRight: /*#__PURE__*/React.createElement(RotateRightOutlined, null),\n zoomIn: /*#__PURE__*/React.createElement(ZoomInOutlined, null),\n zoomOut: /*#__PURE__*/React.createElement(ZoomOutOutlined, null),\n close: /*#__PURE__*/React.createElement(CloseOutlined, null),\n left: /*#__PURE__*/React.createElement(LeftOutlined, null),\n right: /*#__PURE__*/React.createElement(RightOutlined, null),\n flipX: /*#__PURE__*/React.createElement(SwapOutlined, null),\n flipY: /*#__PURE__*/React.createElement(SwapOutlined, {\n rotate: 90\n })\n};\nconst InternalPreviewGroup = _a => {\n var {\n previewPrefixCls: customizePrefixCls,\n preview\n } = _a,\n otherProps = __rest(_a, [\"previewPrefixCls\", \"preview\"]);\n const {\n getPrefixCls,\n direction\n } = React.useContext(ConfigContext);\n const prefixCls = getPrefixCls('image', customizePrefixCls);\n const previewPrefixCls = `${prefixCls}-preview`;\n const rootPrefixCls = getPrefixCls();\n const rootCls = useCSSVarCls(prefixCls);\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls, rootCls);\n const [zIndex] = useZIndex('ImagePreview', typeof preview === 'object' ? preview.zIndex : undefined);\n const memoizedIcons = React.useMemo(() => Object.assign(Object.assign({}, icons), {\n left: direction === 'rtl' ? /*#__PURE__*/React.createElement(RightOutlined, null) : /*#__PURE__*/React.createElement(LeftOutlined, null),\n right: direction === 'rtl' ? /*#__PURE__*/React.createElement(LeftOutlined, null) : /*#__PURE__*/React.createElement(RightOutlined, null)\n }), [direction]);\n const mergedPreview = React.useMemo(() => {\n var _a;\n if (preview === false) {\n return preview;\n }\n const _preview = typeof preview === 'object' ? preview : {};\n const mergedRootClassName = classNames(hashId, cssVarCls, rootCls, (_a = _preview.rootClassName) !== null && _a !== void 0 ? _a : '');\n return Object.assign(Object.assign({}, _preview), {\n transitionName: getTransitionName(rootPrefixCls, 'zoom', _preview.transitionName),\n maskTransitionName: getTransitionName(rootPrefixCls, 'fade', _preview.maskTransitionName),\n rootClassName: mergedRootClassName,\n zIndex\n });\n }, [preview]);\n return wrapCSSVar(/*#__PURE__*/React.createElement(RcImage.PreviewGroup, Object.assign({\n preview: mergedPreview,\n previewPrefixCls: previewPrefixCls,\n icons: memoizedIcons\n }, otherProps)));\n};\nexport default InternalPreviewGroup;","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport EyeOutlined from \"@ant-design/icons/es/icons/EyeOutlined\";\nimport classNames from 'classnames';\nimport RcImage from 'rc-image';\nimport { useZIndex } from '../_util/hooks/useZIndex';\nimport { getTransitionName } from '../_util/motion';\nimport { devUseWarning } from '../_util/warning';\nimport { useComponentConfig } from '../config-provider/context';\nimport useCSSVarCls from '../config-provider/hooks/useCSSVarCls';\nimport { useLocale } from '../locale';\nimport PreviewGroup, { icons } from './PreviewGroup';\nimport useStyle from './style';\nconst Image = props => {\n const {\n prefixCls: customizePrefixCls,\n preview,\n className,\n rootClassName,\n style\n } = props,\n otherProps = __rest(props, [\"prefixCls\", \"preview\", \"className\", \"rootClassName\", \"style\"]);\n if (process.env.NODE_ENV !== 'production') {\n const warning = devUseWarning('Image');\n warning.deprecated(!(preview && typeof preview === 'object' && 'destroyOnClose' in preview), 'destroyOnClose', 'destroyOnHidden');\n }\n const {\n getPrefixCls,\n getPopupContainer: getContextPopupContainer,\n className: contextClassName,\n style: contextStyle,\n preview: contextPreview\n } = useComponentConfig('image');\n const [imageLocale] = useLocale('Image');\n const prefixCls = getPrefixCls('image', customizePrefixCls);\n const rootPrefixCls = getPrefixCls();\n // Style\n const rootCls = useCSSVarCls(prefixCls);\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls, rootCls);\n const mergedRootClassName = classNames(rootClassName, hashId, cssVarCls, rootCls);\n const mergedClassName = classNames(className, hashId, contextClassName);\n const [zIndex] = useZIndex('ImagePreview', typeof preview === 'object' ? preview.zIndex : undefined);\n const mergedPreview = React.useMemo(() => {\n if (preview === false) {\n return preview;\n }\n const _preview = typeof preview === 'object' ? preview : {};\n const {\n getContainer,\n closeIcon,\n rootClassName,\n destroyOnClose,\n destroyOnHidden\n } = _preview,\n restPreviewProps = __rest(_preview, [\"getContainer\", \"closeIcon\", \"rootClassName\", \"destroyOnClose\", \"destroyOnHidden\"]);\n return Object.assign(Object.assign({\n mask: (/*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-mask-info`\n }, /*#__PURE__*/React.createElement(EyeOutlined, null), imageLocale === null || imageLocale === void 0 ? void 0 : imageLocale.preview)),\n icons\n }, restPreviewProps), {\n // TODO: In the future, destroyOnClose in rc-image needs to be upgrade to destroyOnHidden\n destroyOnClose: destroyOnHidden !== null && destroyOnHidden !== void 0 ? destroyOnHidden : destroyOnClose,\n rootClassName: classNames(mergedRootClassName, rootClassName),\n getContainer: getContainer !== null && getContainer !== void 0 ? getContainer : getContextPopupContainer,\n transitionName: getTransitionName(rootPrefixCls, 'zoom', _preview.transitionName),\n maskTransitionName: getTransitionName(rootPrefixCls, 'fade', _preview.maskTransitionName),\n zIndex,\n closeIcon: closeIcon !== null && closeIcon !== void 0 ? closeIcon : contextPreview === null || contextPreview === void 0 ? void 0 : contextPreview.closeIcon\n });\n }, [preview, imageLocale, contextPreview === null || contextPreview === void 0 ? void 0 : contextPreview.closeIcon]);\n const mergedStyle = Object.assign(Object.assign({}, contextStyle), style);\n return wrapCSSVar(/*#__PURE__*/React.createElement(RcImage, Object.assign({\n prefixCls: prefixCls,\n preview: mergedPreview,\n rootClassName: mergedRootClassName,\n className: mergedClassName,\n style: mergedStyle\n }, otherProps)));\n};\nImage.PreviewGroup = PreviewGroup;\nif (process.env.NODE_ENV !== 'production') {\n Image.displayName = 'Image';\n}\nexport default Image;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { useIntl } from '@ant-design/pro-provider';\nimport { Image, Input } from 'antd';\nimport React from 'react';\n// 兼容代码-----------\nimport \"antd/es/image/style\";\n//----------------------\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * 数字组件\n *\n * @param FieldImageProps {\n * text: number;\n * moneySymbol?: string; }\n */\nvar FieldImage = /*#__PURE__*/React.forwardRef(function (_ref, ref) {\n var text = _ref.text,\n type = _ref.mode,\n render = _ref.render,\n renderFormItem = _ref.renderFormItem,\n fieldProps = _ref.fieldProps,\n placeholder = _ref.placeholder,\n width = _ref.width;\n var intl = useIntl();\n var placeholderValue = placeholder || intl.getMessage('tableForm.inputPlaceholder', '请输入');\n if (type === 'read') {\n var dom = /*#__PURE__*/_jsx(Image, _objectSpread({\n ref: ref,\n width: width || 32,\n src: text\n }, fieldProps));\n if (render) {\n return render(text, _objectSpread({\n mode: type\n }, fieldProps), dom);\n }\n return dom;\n }\n if (type === 'edit' || type === 'update') {\n var _dom = /*#__PURE__*/_jsx(Input, _objectSpread({\n ref: ref,\n placeholder: placeholderValue\n }, fieldProps));\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: type\n }, fieldProps), _dom);\n }\n return _dom;\n }\n return null;\n});\nexport default FieldImage;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { useStyle } from '@ant-design/pro-utils';\nimport { ConfigProvider } from 'antd';\nimport classnames from 'classnames';\nimport React, { useContext } from 'react';\n\n/**\n * 默认的 index 列容器,提供一个好看的 index\n *\n * @param param0\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar IndexColumn = function IndexColumn(_ref, ref) {\n var _ref$border = _ref.border,\n border = _ref$border === void 0 ? false : _ref$border,\n children = _ref.children;\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var className = getPrefixCls('pro-field-index-column');\n\n // css\n var _useStyle = useStyle('IndexColumn', function () {\n return _defineProperty({}, \".\".concat(className), {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '18px',\n height: '18px',\n '&-border': {\n color: '#fff',\n fontSize: '12px',\n lineHeight: '12px',\n backgroundColor: '#314659',\n borderRadius: '9px',\n '&.top-three': {\n backgroundColor: '#979797'\n }\n }\n });\n }),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n return wrapSSR( /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n className: classnames(className, hashId, _defineProperty(_defineProperty({}, \"\".concat(className, \"-border\"), border), 'top-three', children > 3)),\n children: children\n }));\n};\nexport default /*#__PURE__*/React.forwardRef(IndexColumn);","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar _excluded = [\"contentRender\", \"numberFormatOptions\", \"numberPopoverRender\", \"open\"],\n _excluded2 = [\"text\", \"mode\", \"render\", \"renderFormItem\", \"fieldProps\", \"proFieldKey\", \"plain\", \"valueEnum\", \"placeholder\", \"locale\", \"customSymbol\", \"numberFormatOptions\", \"numberPopoverRender\"];\nimport { intlMap as allIntlMap, useIntl } from '@ant-design/pro-provider';\nimport { InputNumber, Popover } from 'antd';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport omit from \"rc-util/es/omit\";\nimport React, { useCallback, useMemo } from 'react';\n// 兼容代码-----------\nimport \"antd/es/input-number/style\";\nimport \"antd/es/popover/style\";\n//----------------------\n\nimport { openVisibleCompatible } from '@ant-design/pro-utils';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar defaultMoneyIntl = new Intl.NumberFormat('zh-Hans-CN', {\n currency: 'CNY',\n style: 'currency'\n});\nvar enMoneyIntl = {\n style: 'currency',\n currency: 'USD'\n};\nvar ruMoneyIntl = {\n style: 'currency',\n currency: 'RUB'\n};\nvar rsMoneyIntl = {\n style: 'currency',\n currency: 'RSD'\n};\nvar msMoneyIntl = {\n style: 'currency',\n currency: 'MYR'\n};\nvar ptMoneyIntl = {\n style: 'currency',\n currency: 'BRL'\n};\nvar intlMap = {\n default: defaultMoneyIntl,\n 'zh-Hans-CN': {\n currency: 'CNY',\n style: 'currency'\n },\n 'en-US': enMoneyIntl,\n 'ru-RU': ruMoneyIntl,\n 'ms-MY': msMoneyIntl,\n 'sr-RS': rsMoneyIntl,\n 'pt-BR': ptMoneyIntl\n};\n\n/**\n * A function that formats the number.\n * @param {string | false} locale - The currency symbol, which is the first parameter of the\n * formatMoney function.\n * @param {number | string | undefined} paramsText - The text to be formatted\n * @param {number} precision - number, // decimal places\n * @param {any} [config] - the configuration of the number format, which is the same as the\n * configuration of the number format in the Intl.NumberFormat method.\n * @returns A function that takes in 4 parameters and returns a string.\n */\nvar getTextByLocale = function getTextByLocale(locale, paramsText, precision, config) {\n var moneySymbol = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';\n var moneyText = paramsText === null || paramsText === void 0 ? void 0 : paramsText.toString().replaceAll(',', '');\n if (typeof moneyText === 'string') {\n var parsedNum = Number(moneyText);\n // 转换数字为NaN时,返回原始值展示\n if (Number.isNaN(parsedNum)) return moneyText;\n moneyText = parsedNum;\n }\n if (!moneyText && moneyText !== 0) return '';\n var supportFormat = false;\n try {\n supportFormat = locale !== false && Intl.NumberFormat.supportedLocalesOf([locale.replace('_', '-')], {\n localeMatcher: 'lookup'\n }).length > 0;\n } catch (error) {}\n try {\n // Formatting the number, when readonly moneySymbol = false, unused currency.\n var initNumberFormatter = new Intl.NumberFormat(supportFormat && locale !== false ? (locale === null || locale === void 0 ? void 0 : locale.replace('_', '-')) || 'zh-Hans-CN' : 'zh-Hans-CN', _objectSpread(_objectSpread({}, intlMap[locale || 'zh-Hans-CN'] || defaultMoneyIntl), {}, {\n maximumFractionDigits: precision\n }, config));\n var finalMoneyText = initNumberFormatter.format(moneyText);\n\n // 同时出现两个符号的情况需要处理\n var doubleSymbolFormat = function doubleSymbolFormat(Text) {\n var match = Text.match(/\\d+/);\n if (match) {\n var number = match[0];\n return Text.slice(Text.indexOf(number));\n } else {\n return Text;\n }\n };\n // 过滤一下,只留下数字\n var pureMoneyText = doubleSymbolFormat(finalMoneyText);\n\n /**\n * 首字母判断是否是正负符号\n */\n var _ref = finalMoneyText || '',\n _ref2 = _slicedToArray(_ref, 1),\n operatorSymbol = _ref2[0];\n\n // 兼容正负号\n if (['+', '-'].includes(operatorSymbol)) {\n return \"\".concat(moneySymbol || '').concat(operatorSymbol).concat(pureMoneyText);\n }\n return \"\".concat(moneySymbol || '').concat(pureMoneyText);\n } catch (error) {\n return moneyText;\n }\n};\n\n// 默认的代码类型\nvar DefaultPrecisionCont = 2;\n\n/**\n * input 的弹框,用于显示格式化之后的内容\n *\n * @result 10,000 -> 一万\n * @result 10, 00, 000, 000 -> 一亿\n */\nvar InputNumberPopover = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {\n var content = _ref3.contentRender,\n numberFormatOptions = _ref3.numberFormatOptions,\n numberPopoverRender = _ref3.numberPopoverRender,\n open = _ref3.open,\n rest = _objectWithoutProperties(_ref3, _excluded);\n var _useMergedState = useMergedState(function () {\n return rest.defaultValue;\n }, {\n value: rest.value,\n onChange: rest.onChange\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n value = _useMergedState2[0],\n onChange = _useMergedState2[1];\n\n /**\n * 如果content 存在要根据 content 渲染一下\n */\n var dom = content === null || content === void 0 ? void 0 : content(_objectSpread(_objectSpread({}, rest), {}, {\n value: value\n }));\n var props = openVisibleCompatible(dom ? open : false);\n return /*#__PURE__*/_jsx(Popover, _objectSpread(_objectSpread({\n placement: \"topLeft\"\n }, props), {}, {\n trigger: ['focus', 'click'],\n content: dom,\n getPopupContainer: function getPopupContainer(triggerNode) {\n return (triggerNode === null || triggerNode === void 0 ? void 0 : triggerNode.parentElement) || document.body;\n },\n children: /*#__PURE__*/_jsx(InputNumber, _objectSpread(_objectSpread({\n ref: ref\n }, rest), {}, {\n value: value,\n onChange: onChange\n }))\n }));\n});\n\n/**\n * 金额组件\n *\n * @param FieldMoneyProps {\n * text: number;\n * moneySymbol?: string; }\n */\nvar FieldMoney = function FieldMoney(_ref4, ref) {\n var _fieldProps$precision;\n var text = _ref4.text,\n type = _ref4.mode,\n render = _ref4.render,\n renderFormItem = _ref4.renderFormItem,\n fieldProps = _ref4.fieldProps,\n proFieldKey = _ref4.proFieldKey,\n plain = _ref4.plain,\n valueEnum = _ref4.valueEnum,\n placeholder = _ref4.placeholder,\n locale = _ref4.locale,\n _ref4$customSymbol = _ref4.customSymbol,\n customSymbol = _ref4$customSymbol === void 0 ? fieldProps.customSymbol : _ref4$customSymbol,\n _ref4$numberFormatOpt = _ref4.numberFormatOptions,\n numberFormatOptions = _ref4$numberFormatOpt === void 0 ? fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.numberFormatOptions : _ref4$numberFormatOpt,\n _ref4$numberPopoverRe = _ref4.numberPopoverRender,\n numberPopoverRender = _ref4$numberPopoverRe === void 0 ? (fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.numberPopoverRender) || false : _ref4$numberPopoverRe,\n rest = _objectWithoutProperties(_ref4, _excluded2);\n var precision = (_fieldProps$precision = fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.precision) !== null && _fieldProps$precision !== void 0 ? _fieldProps$precision : DefaultPrecisionCont;\n var intl = useIntl();\n // 当手动传入locale时,应该以传入的locale为准,未传入时则根据全局的locale进行国际化\n if (locale && allIntlMap[locale]) {\n intl = allIntlMap[locale];\n }\n var placeholderValue = placeholder || intl.getMessage('tableForm.inputPlaceholder', '请输入');\n\n /**\n * 获取货币的符号\n * 如果 customSymbol 存在直接使用 customSymbol\n * 如果 moneySymbol 为 false,返回空\n * 如果没有配置使用默认的\n */\n var moneySymbol = useMemo(function () {\n if (customSymbol) {\n return customSymbol;\n }\n if (rest.moneySymbol === false || fieldProps.moneySymbol === false) {\n return undefined;\n }\n return intl.getMessage('moneySymbol', '¥');\n }, [customSymbol, fieldProps.moneySymbol, intl, rest.moneySymbol]);\n\n /*\n * A function that formats the number.\n * 1000 -> 1,000\n */\n var getFormateValue = useCallback(function (value) {\n // 新建数字正则,需要配置小数点\n var reg = new RegExp(\"\\\\B(?=(\\\\d{\".concat(3 + Math.max(precision - DefaultPrecisionCont, 0), \"})+(?!\\\\d))\"), 'g');\n // 切分为 整数 和 小数 不同\n var _String$split = String(value).split('.'),\n _String$split2 = _slicedToArray(_String$split, 2),\n intStr = _String$split2[0],\n floatStr = _String$split2[1];\n\n // 最终的数据string,需要去掉 , 号。\n var resultInt = intStr.replace(reg, ',');\n\n // 计算最终的小数点\n var resultFloat = '';\n\n /* Taking the floatStr and slicing it to the precision. */\n if (floatStr && precision > 0) {\n resultFloat = \".\".concat(floatStr.slice(0, precision === undefined ? DefaultPrecisionCont : precision));\n }\n return \"\".concat(resultInt).concat(resultFloat);\n }, [precision]);\n\n // 如果是阅读模式,直接返回字符串\n if (type === 'read') {\n var dom = /*#__PURE__*/_jsx(\"span\", {\n ref: ref,\n children: getTextByLocale(locale || false, text, precision, numberFormatOptions !== null && numberFormatOptions !== void 0 ? numberFormatOptions : fieldProps.numberFormatOptions, moneySymbol)\n });\n if (render) {\n return render(text, _objectSpread({\n mode: type\n }, fieldProps), dom);\n }\n return dom;\n }\n if (type === 'edit' || type === 'update') {\n var _dom = /*#__PURE__*/_jsx(InputNumberPopover, _objectSpread(_objectSpread({\n contentRender: function contentRender(props) {\n if (numberPopoverRender === false) return null;\n if (!props.value) return null;\n var localeText = getTextByLocale(moneySymbol || locale || false, \"\".concat(getFormateValue(props.value)), precision, _objectSpread(_objectSpread({}, numberFormatOptions), {}, {\n notation: 'compact'\n }), moneySymbol);\n if (typeof numberPopoverRender === 'function') {\n return numberPopoverRender === null || numberPopoverRender === void 0 ? void 0 : numberPopoverRender(props, localeText);\n }\n return localeText;\n },\n ref: ref,\n precision: precision\n // 删除默认min={0},允许输入一个负数的金额,用户可自行配置min来限制是否允许小于0的金额\n ,\n formatter: function formatter(value) {\n if (value && moneySymbol) {\n return \"\".concat(moneySymbol, \" \").concat(getFormateValue(value));\n }\n return value === null || value === void 0 ? void 0 : value.toString();\n },\n parser: function parser(value) {\n if (moneySymbol && value) {\n return value.replace(new RegExp(\"\\\\\".concat(moneySymbol, \"\\\\s?|(,*)\"), 'g'), '');\n }\n return value;\n },\n placeholder: placeholderValue\n }, omit(fieldProps, ['numberFormatOptions', 'precision', 'numberPopoverRender', 'customSymbol', 'moneySymbol', 'visible', 'open'])), {}, {\n onBlur: fieldProps.onBlur ? function (e) {\n var _fieldProps$onBlur;\n var value = e.target.value;\n if (moneySymbol && value) {\n value = value.replace(new RegExp(\"\\\\\".concat(moneySymbol, \"\\\\s?|(,*)\"), 'g'), '');\n }\n (_fieldProps$onBlur = fieldProps.onBlur) === null || _fieldProps$onBlur === void 0 || _fieldProps$onBlur.call(fieldProps, value);\n } : undefined\n }));\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: type\n }, fieldProps), _dom);\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldMoney);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { ConfigProvider } from 'antd';\nimport React, { useContext, useImperativeHandle } from 'react';\n// 兼容代码-----------\nimport { proTheme } from '@ant-design/pro-provider';\nimport \"antd/es/space/style\";\n//----------------------\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar addArrayKeys = function addArrayKeys(doms) {\n return doms.map(function (dom, index) {\n var _dom$props;\n if (! /*#__PURE__*/React.isValidElement(dom)) {\n // eslint-disable-next-line react/no-array-index-key\n return /*#__PURE__*/_jsx(React.Fragment, {\n children: dom\n }, index);\n }\n return /*#__PURE__*/React.cloneElement(dom, _objectSpread(_objectSpread({\n // eslint-disable-next-line react/no-array-index-key\n key: index\n }, dom === null || dom === void 0 ? void 0 : dom.props), {}, {\n style: _objectSpread({}, dom === null || dom === void 0 || (_dom$props = dom.props) === null || _dom$props === void 0 ? void 0 : _dom$props.style)\n }));\n });\n};\n\n/**\n * 一般用于放多个按钮\n *\n * @param\n */\nvar FieldOptions = function FieldOptions(_ref, ref) {\n var text = _ref.text,\n type = _ref.mode,\n render = _ref.render,\n fieldProps = _ref.fieldProps;\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var className = getPrefixCls('pro-field-option');\n var _proTheme$useToken = proTheme.useToken(),\n token = _proTheme$useToken.token;\n useImperativeHandle(ref, function () {\n return {};\n });\n if (render) {\n var doms = render(text, _objectSpread({\n mode: type\n }, fieldProps), /*#__PURE__*/_jsx(_Fragment, {}));\n if (!doms || (doms === null || doms === void 0 ? void 0 : doms.length) < 1 || !Array.isArray(doms)) {\n return null;\n }\n return /*#__PURE__*/_jsx(\"div\", {\n style: {\n display: 'flex',\n gap: token.margin,\n alignItems: 'center'\n },\n className: className,\n children: addArrayKeys(doms)\n });\n }\n if (!text || !Array.isArray(text)) {\n if (! /*#__PURE__*/React.isValidElement(text)) {\n return null;\n }\n return text;\n }\n return /*#__PURE__*/_jsx(\"div\", {\n style: {\n display: 'flex',\n gap: token.margin,\n alignItems: 'center'\n },\n className: className,\n children: addArrayKeys(text)\n });\n};\nexport default /*#__PURE__*/React.forwardRef(FieldOptions);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"text\", \"mode\", \"render\", \"renderFormItem\", \"fieldProps\", \"proFieldKey\"];\nimport { EyeInvisibleOutlined, EyeOutlined } from '@ant-design/icons';\nimport { useIntl } from '@ant-design/pro-provider';\nimport { Input, Space } from 'antd';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport React from 'react';\n// 兼容代码-----------\nimport \"antd/es/input/style\";\nimport \"antd/es/space/style\";\n//----------------------\n\n/**\n * 最基本的组件,就是个普通的 Input.Password\n *\n * @param\n */\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar FieldPassword = function FieldPassword(_ref, ref) {\n var text = _ref.text,\n mode = _ref.mode,\n render = _ref.render,\n renderFormItem = _ref.renderFormItem,\n fieldProps = _ref.fieldProps,\n proFieldKey = _ref.proFieldKey,\n rest = _objectWithoutProperties(_ref, _excluded);\n var intl = useIntl();\n var _useMergedState = useMergedState(function () {\n return rest.open || rest.visible || false;\n }, {\n value: rest.open || rest.visible,\n onChange: rest.onOpenChange || rest.onVisible\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n open = _useMergedState2[0],\n setOpen = _useMergedState2[1];\n if (mode === 'read') {\n var dom = /*#__PURE__*/_jsx(_Fragment, {\n children: \"-\"\n });\n if (text) {\n dom = /*#__PURE__*/_jsxs(Space, {\n children: [/*#__PURE__*/_jsx(\"span\", {\n ref: ref,\n children: open ? text : '********'\n }), /*#__PURE__*/_jsx(\"a\", {\n onClick: function onClick() {\n return setOpen(!open);\n },\n children: open ? /*#__PURE__*/_jsx(EyeOutlined, {}) : /*#__PURE__*/_jsx(EyeInvisibleOutlined, {})\n })]\n });\n }\n if (render) {\n return render(text, _objectSpread({\n mode: mode\n }, fieldProps), dom);\n }\n return dom;\n }\n if (mode === 'edit' || mode === 'update') {\n var _dom = /*#__PURE__*/_jsx(Input.Password, _objectSpread({\n placeholder: intl.getMessage('tableForm.inputPlaceholder', '请输入'),\n ref: ref\n }, fieldProps));\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: mode\n }, fieldProps), _dom);\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldPassword);","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\n/** 获取展示符号 */\nexport function getSymbolByRealValue(realValue) {\n if (realValue === 0) {\n return null;\n }\n if (realValue > 0) {\n return '+';\n }\n return '-';\n}\n\n/** 获取颜色 */\nexport function getColorByRealValue(realValue) {\n if (realValue === 0) {\n return '#595959';\n }\n return realValue > 0 ? '#ff4d4f' : '#52c41a';\n}\n\n/** 获取到最后展示的数字 */\nexport function getRealTextWithPrecision(realValue) {\n var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n return precision >= 0 ? realValue === null || realValue === void 0 ? void 0 : realValue.toFixed(precision) : realValue;\n}\n\n/**\n * 转化为数字\n * @copy from https://github.com/toss/es-toolkit/blob/32a183828c244d675f46810935e45dfefec81a54/src/compat/util/toNumber.ts#L19\n */\nexport function toNumber(value) {\n if (_typeof(value) === 'symbol' || value instanceof Symbol) {\n return NaN;\n }\n return Number(value);\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { useIntl } from '@ant-design/pro-provider';\nimport { InputNumber } from 'antd';\nimport React, { Fragment, useMemo } from 'react';\nimport { getColorByRealValue, getRealTextWithPrecision, getSymbolByRealValue, toNumber } from \"./util\";\n\n// 兼容代码-----------\nimport \"antd/es/input-number/style\";\n//------------\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * 百分比组件\n *\n * @param PercentPropInt\n */\nvar FieldPercent = function FieldPercent(_ref, ref) {\n var text = _ref.text,\n prefix = _ref.prefix,\n precision = _ref.precision,\n _ref$suffix = _ref.suffix,\n suffix = _ref$suffix === void 0 ? '%' : _ref$suffix,\n mode = _ref.mode,\n _ref$showColor = _ref.showColor,\n showColor = _ref$showColor === void 0 ? false : _ref$showColor,\n render = _ref.render,\n renderFormItem = _ref.renderFormItem,\n fieldProps = _ref.fieldProps,\n placeholder = _ref.placeholder,\n propsShowSymbol = _ref.showSymbol;\n var intl = useIntl();\n var placeholderValue = placeholder || intl.getMessage('tableForm.inputPlaceholder', '请输入');\n var realValue = useMemo(function () {\n return typeof text === 'string' && text.includes('%') ? toNumber(text.replace('%', '')) : toNumber(text);\n }, [text]);\n var showSymbol = useMemo(function () {\n if (typeof propsShowSymbol === 'function') {\n return propsShowSymbol === null || propsShowSymbol === void 0 ? void 0 : propsShowSymbol(text);\n }\n return propsShowSymbol;\n }, [propsShowSymbol, text]);\n if (mode === 'read') {\n /** 颜色有待确定, 根据提供 colors: ['正', '负'] | boolean */\n var style = showColor ? {\n color: getColorByRealValue(realValue)\n } : {};\n var dom = /*#__PURE__*/_jsxs(\"span\", {\n style: style,\n ref: ref,\n children: [prefix && /*#__PURE__*/_jsx(\"span\", {\n children: prefix\n }), showSymbol && /*#__PURE__*/_jsxs(Fragment, {\n children: [getSymbolByRealValue(realValue), \" \"]\n }), getRealTextWithPrecision(Math.abs(realValue), precision), suffix && suffix]\n });\n if (render) {\n return render(text, _objectSpread(_objectSpread({\n mode: mode\n }, fieldProps), {}, {\n prefix: prefix,\n precision: precision,\n showSymbol: showSymbol,\n suffix: suffix\n }), dom);\n }\n return dom;\n }\n if (mode === 'edit' || mode === 'update') {\n var _dom = /*#__PURE__*/_jsx(InputNumber, _objectSpread({\n ref: ref,\n formatter: function formatter(value) {\n if (value && prefix) {\n return \"\".concat(prefix, \" \").concat(value).replace(/\\B(?=(\\d{3})+(?!\\d)$)/g, ',');\n }\n return value;\n },\n parser: function parser(value) {\n return value ? value.replace(/.*\\s|,/g, '') : '';\n },\n placeholder: placeholderValue\n }, fieldProps));\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: mode\n }, fieldProps), _dom);\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldPercent);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { useIntl } from '@ant-design/pro-provider';\nimport { InputNumber, Progress } from 'antd';\nimport React, { useMemo } from 'react';\nimport { toNumber } from \"../Percent/util\";\n\n// 兼容代码-----------\nimport \"antd/es/input-number/style\";\nimport \"antd/es/progress/style\";\n\n//------------\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function getProgressStatus(text) {\n if (text === 100) {\n return 'success';\n }\n if (text < 0) {\n return 'exception';\n }\n if (text < 100) {\n return 'active';\n }\n return 'normal';\n}\n\n/**\n * 进度条组件\n *\n * @param\n */\nvar FieldProgress = function FieldProgress(_ref, ref) {\n var text = _ref.text,\n mode = _ref.mode,\n render = _ref.render,\n plain = _ref.plain,\n renderFormItem = _ref.renderFormItem,\n fieldProps = _ref.fieldProps,\n placeholder = _ref.placeholder;\n var intl = useIntl();\n var placeholderValue = placeholder || intl.getMessage('tableForm.inputPlaceholder', '请输入');\n var realValue = useMemo(function () {\n return typeof text === 'string' && text.includes('%') ? toNumber(text.replace('%', '')) : toNumber(text);\n }, [text]);\n if (mode === 'read') {\n var dom = /*#__PURE__*/_jsx(Progress, _objectSpread({\n ref: ref,\n size: \"small\",\n style: {\n minWidth: 100,\n maxWidth: 320\n },\n percent: realValue,\n steps: plain ? 10 : undefined,\n status: getProgressStatus(realValue)\n }, fieldProps));\n if (render) {\n return render(realValue, _objectSpread({\n mode: mode\n }, fieldProps), dom);\n }\n return dom;\n }\n if (mode === 'edit' || mode === 'update') {\n var _dom = /*#__PURE__*/_jsx(InputNumber, _objectSpread({\n ref: ref,\n placeholder: placeholderValue\n }, fieldProps));\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: mode\n }, fieldProps), _dom);\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldProgress);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"radioType\", \"renderFormItem\", \"mode\", \"render\"];\nimport { objectToMap, proFieldParsingText, useStyle } from '@ant-design/pro-utils';\nimport { ConfigProvider, Form, Radio, Spin } from 'antd';\nimport classNames from 'classnames';\nimport React, { useContext, useImperativeHandle, useRef } from 'react';\nimport { useFieldFetchData } from \"../Select\";\n\n// 兼容代码-----------\nimport \"antd/es/radio/style\";\n//------------\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * 单选组件\n *\n * @param param0\n * @param ref\n */\nvar FieldRadio = function FieldRadio(_ref, ref) {\n var _Form$Item, _Form$Item$useStatus;\n var radioType = _ref.radioType,\n renderFormItem = _ref.renderFormItem,\n mode = _ref.mode,\n render = _ref.render,\n rest = _objectWithoutProperties(_ref, _excluded);\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var layoutClassName = getPrefixCls('pro-field-radio');\n var _useFieldFetchData = useFieldFetchData(rest),\n _useFieldFetchData2 = _slicedToArray(_useFieldFetchData, 3),\n loading = _useFieldFetchData2[0],\n options = _useFieldFetchData2[1],\n _fetchData = _useFieldFetchData2[2];\n var radioRef = useRef();\n var status = (_Form$Item = Form.Item) === null || _Form$Item === void 0 || (_Form$Item$useStatus = _Form$Item.useStatus) === null || _Form$Item$useStatus === void 0 ? void 0 : _Form$Item$useStatus.call(_Form$Item);\n useImperativeHandle(ref, function () {\n return _objectSpread(_objectSpread({}, radioRef.current || {}), {}, {\n fetchData: function fetchData(keyWord) {\n return _fetchData(keyWord);\n }\n });\n }, [_fetchData]);\n\n // css\n var _useStyle = useStyle('FieldRadioRadio', function (token) {\n return _defineProperty(_defineProperty(_defineProperty({}, \".\".concat(layoutClassName, \"-error\"), {\n span: {\n color: token.colorError\n }\n }), \".\".concat(layoutClassName, \"-warning\"), {\n span: {\n color: token.colorWarning\n }\n }), \".\".concat(layoutClassName, \"-vertical\"), _defineProperty({}, \"\".concat(token.antCls, \"-radio-wrapper\"), {\n display: 'flex',\n marginInlineEnd: 0\n }));\n }),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n if (loading) {\n return /*#__PURE__*/_jsx(Spin, {\n size: \"small\"\n });\n }\n if (mode === 'read') {\n var optionsValueEnum = options !== null && options !== void 0 && options.length ? options === null || options === void 0 ? void 0 : options.reduce(function (pre, cur) {\n var _ref3;\n return _objectSpread(_objectSpread({}, pre), {}, _defineProperty({}, (_ref3 = cur.value) !== null && _ref3 !== void 0 ? _ref3 : '', cur.label));\n }, {}) : undefined;\n var dom = /*#__PURE__*/_jsx(_Fragment, {\n children: proFieldParsingText(rest.text, objectToMap(rest.valueEnum || optionsValueEnum))\n });\n if (render) {\n var _render;\n return (_render = render(rest.text, _objectSpread({\n mode: mode\n }, rest.fieldProps), dom)) !== null && _render !== void 0 ? _render : null;\n }\n return dom;\n }\n if (mode === 'edit') {\n var _rest$fieldProps;\n var _dom = wrapSSR( /*#__PURE__*/_jsx(Radio.Group, _objectSpread(_objectSpread({\n ref: radioRef,\n optionType: radioType\n }, rest.fieldProps), {}, {\n className: classNames((_rest$fieldProps = rest.fieldProps) === null || _rest$fieldProps === void 0 ? void 0 : _rest$fieldProps.className, _defineProperty(_defineProperty({}, \"\".concat(layoutClassName, \"-error\"), (status === null || status === void 0 ? void 0 : status.status) === 'error'), \"\".concat(layoutClassName, \"-warning\"), (status === null || status === void 0 ? void 0 : status.status) === 'warning'), hashId, \"\".concat(layoutClassName, \"-\").concat(rest.fieldProps.layout || 'horizontal')),\n options: options\n })));\n if (renderFormItem) {\n var _renderFormItem;\n return (_renderFormItem = renderFormItem(rest.text, _objectSpread(_objectSpread({\n mode: mode\n }, rest.fieldProps), {}, {\n options: options,\n loading: loading\n }), _dom)) !== null && _renderFormItem !== void 0 ? _renderFormItem : null;\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldRadio);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useIntl } from '@ant-design/pro-provider';\nimport { FieldLabel, compatibleBorder, parseValueToDay } from '@ant-design/pro-utils';\nimport { DatePicker } from 'antd';\nimport dayjs from 'dayjs';\nimport React, { useCallback } from 'react';\n// 兼容代码-----------\nimport \"antd/es/date-picker/style\";\n//------------\n\n/**\n * 日期范围选择组件\n *\n * @param\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar FieldRangePicker = function FieldRangePicker(_ref, ref) {\n var text = _ref.text,\n mode = _ref.mode,\n light = _ref.light,\n label = _ref.label,\n format = _ref.format,\n render = _ref.render,\n picker = _ref.picker,\n renderFormItem = _ref.renderFormItem,\n plain = _ref.plain,\n showTime = _ref.showTime,\n lightLabel = _ref.lightLabel,\n bordered = _ref.bordered,\n fieldProps = _ref.fieldProps;\n var intl = useIntl();\n var _ref2 = Array.isArray(text) ? text : [],\n _ref3 = _slicedToArray(_ref2, 2),\n startText = _ref3[0],\n endText = _ref3[1];\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n open = _React$useState2[0],\n setOpen = _React$useState2[1];\n // antd 改了一下 交互,这里要兼容一下,不然会导致无法选中第二个数据\n var genFormatText = useCallback(function (formatValue) {\n if (typeof (fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.format) === 'function') {\n var _fieldProps$format;\n return fieldProps === null || fieldProps === void 0 || (_fieldProps$format = fieldProps.format) === null || _fieldProps$format === void 0 ? void 0 : _fieldProps$format.call(fieldProps, formatValue);\n }\n return (fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.format) || format || 'YYYY-MM-DD';\n }, [fieldProps, format]);\n // activePickerIndex for https://github.com/ant-design/ant-design/issues/22158\n var parsedStartText = startText ? dayjs(startText).format(genFormatText(dayjs(startText))) : '';\n var parsedEndText = endText ? dayjs(endText).format(genFormatText(dayjs(endText))) : '';\n if (mode === 'read') {\n var dom = /*#__PURE__*/_jsxs(\"div\", {\n ref: ref,\n style: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: 8,\n alignItems: 'center'\n },\n children: [/*#__PURE__*/_jsx(\"div\", {\n children: parsedStartText || '-'\n }), /*#__PURE__*/_jsx(\"div\", {\n children: parsedEndText || '-'\n })]\n });\n if (render) {\n return render(text, _objectSpread({\n mode: mode\n }, fieldProps), /*#__PURE__*/_jsx(\"span\", {\n children: dom\n }));\n }\n return dom;\n }\n if (mode === 'edit' || mode === 'update') {\n var dayValue = parseValueToDay(fieldProps.value);\n var _dom;\n if (light) {\n var _fieldProps$placehold;\n _dom = /*#__PURE__*/_jsx(FieldLabel, {\n label: label,\n onClick: function onClick() {\n var _fieldProps$onOpenCha;\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onOpenCha = fieldProps.onOpenChange) === null || _fieldProps$onOpenCha === void 0 || _fieldProps$onOpenCha.call(fieldProps, true);\n setOpen(true);\n },\n style: dayValue ? {\n paddingInlineEnd: 0\n } : undefined,\n disabled: fieldProps.disabled,\n value: dayValue || open ? /*#__PURE__*/_jsx(DatePicker.RangePicker, _objectSpread(_objectSpread(_objectSpread({\n picker: picker,\n showTime: showTime,\n format: format\n }, compatibleBorder(false)), fieldProps), {}, {\n placeholder: (_fieldProps$placehold = fieldProps.placeholder) !== null && _fieldProps$placehold !== void 0 ? _fieldProps$placehold : [intl.getMessage('tableForm.selectPlaceholder', '请选择'), intl.getMessage('tableForm.selectPlaceholder', '请选择')],\n onClear: function onClear() {\n var _fieldProps$onClear;\n setOpen(false);\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onClear = fieldProps.onClear) === null || _fieldProps$onClear === void 0 || _fieldProps$onClear.call(fieldProps);\n },\n value: dayValue,\n onOpenChange: function onOpenChange(isOpen) {\n var _fieldProps$onOpenCha2;\n if (dayValue) setOpen(isOpen);\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onOpenCha2 = fieldProps.onOpenChange) === null || _fieldProps$onOpenCha2 === void 0 || _fieldProps$onOpenCha2.call(fieldProps, isOpen);\n }\n })) : null,\n allowClear: false,\n bordered: bordered,\n ref: lightLabel,\n downIcon: dayValue || open ? false : undefined\n });\n } else {\n _dom = /*#__PURE__*/_jsx(DatePicker.RangePicker, _objectSpread(_objectSpread(_objectSpread({\n ref: ref,\n format: format,\n showTime: showTime,\n placeholder: [intl.getMessage('tableForm.selectPlaceholder', '请选择'), intl.getMessage('tableForm.selectPlaceholder', '请选择')]\n }, compatibleBorder(plain === undefined ? true : !plain)), fieldProps), {}, {\n value: dayValue\n }));\n }\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: mode\n }, fieldProps), _dom);\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldRangePicker);","// This icon file is generated automatically.\nvar StarFilled = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M908.1 353.1l-253.9-36.9L540.7 86.1c-3.1-6.3-8.2-11.4-14.5-14.5-15.8-7.8-35-1.3-42.9 14.5L369.8 316.2l-253.9 36.9c-7 1-13.4 4.3-18.3 9.3a32.05 32.05 0 00.6 45.3l183.7 179.1-43.4 252.9a31.95 31.95 0 0046.4 33.7L512 754l227.1 119.4c6.2 3.3 13.4 4.4 20.3 3.2 17.4-3 29.1-19.5 26.1-36.9l-43.4-252.9 183.7-179.1c5-4.9 8.3-11.3 9.3-18.3 2.7-17.5-9.5-33.7-27-36.3z\" } }] }, \"name\": \"star\", \"theme\": \"filled\" };\nexport default StarFilled;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport StarFilledSvg from \"@ant-design/icons-svg/es/asn/StarFilled\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar StarFilled = function StarFilled(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: StarFilledSvg\n }));\n};\n\n/**![star](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTkwOC4xIDM1My4xbC0yNTMuOS0zNi45TDU0MC43IDg2LjFjLTMuMS02LjMtOC4yLTExLjQtMTQuNS0xNC41LTE1LjgtNy44LTM1LTEuMy00Mi45IDE0LjVMMzY5LjggMzE2LjJsLTI1My45IDM2LjljLTcgMS0xMy40IDQuMy0xOC4zIDkuM2EzMi4wNSAzMi4wNSAwIDAwLjYgNDUuM2wxODMuNyAxNzkuMS00My40IDI1Mi45YTMxLjk1IDMxLjk1IDAgMDA0Ni40IDMzLjdMNTEyIDc1NGwyMjcuMSAxMTkuNGM2LjIgMy4zIDEzLjQgNC40IDIwLjMgMy4yIDE3LjQtMyAyOS4xLTE5LjUgMjYuMS0zNi45bC00My40LTI1Mi45IDE4My43LTE3OS4xYzUtNC45IDguMy0xMS4zIDkuMy0xOC4zIDIuNy0xNy41LTkuNS0zMy43LTI3LTM2LjN6IiAvPjwvc3ZnPg==) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(StarFilled);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'StarFilled';\n}\nexport default RefIcon;","import React from 'react';\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport classNames from 'classnames';\nfunction Star(props, ref) {\n var disabled = props.disabled,\n prefixCls = props.prefixCls,\n character = props.character,\n characterRender = props.characterRender,\n index = props.index,\n count = props.count,\n value = props.value,\n allowHalf = props.allowHalf,\n focused = props.focused,\n onHover = props.onHover,\n onClick = props.onClick;\n\n // =========================== Events ===========================\n var onInternalHover = function onInternalHover(e) {\n onHover(e, index);\n };\n var onInternalClick = function onInternalClick(e) {\n onClick(e, index);\n };\n var onInternalKeyDown = function onInternalKeyDown(e) {\n if (e.keyCode === KeyCode.ENTER) {\n onClick(e, index);\n }\n };\n\n // =========================== Render ===========================\n // >>>>> ClassName\n var starValue = index + 1;\n var classNameList = new Set([prefixCls]);\n\n // TODO: Current we just refactor from CC to FC. This logic seems can be optimized.\n if (value === 0 && index === 0 && focused) {\n classNameList.add(\"\".concat(prefixCls, \"-focused\"));\n } else if (allowHalf && value + 0.5 >= starValue && value < starValue) {\n classNameList.add(\"\".concat(prefixCls, \"-half\"));\n classNameList.add(\"\".concat(prefixCls, \"-active\"));\n if (focused) {\n classNameList.add(\"\".concat(prefixCls, \"-focused\"));\n }\n } else {\n if (starValue <= value) {\n classNameList.add(\"\".concat(prefixCls, \"-full\"));\n } else {\n classNameList.add(\"\".concat(prefixCls, \"-zero\"));\n }\n if (starValue === value && focused) {\n classNameList.add(\"\".concat(prefixCls, \"-focused\"));\n }\n }\n\n // >>>>> Node\n var characterNode = typeof character === 'function' ? character(props) : character;\n var start = /*#__PURE__*/React.createElement(\"li\", {\n className: classNames(Array.from(classNameList)),\n ref: ref\n }, /*#__PURE__*/React.createElement(\"div\", {\n onClick: disabled ? null : onInternalClick,\n onKeyDown: disabled ? null : onInternalKeyDown,\n onMouseMove: disabled ? null : onInternalHover,\n role: \"radio\",\n \"aria-checked\": value > index ? 'true' : 'false',\n \"aria-posinset\": index + 1,\n \"aria-setsize\": count,\n tabIndex: disabled ? -1 : 0\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-first\")\n }, characterNode), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-second\")\n }, characterNode)));\n if (characterRender) {\n start = characterRender(start, props);\n }\n return start;\n}\nexport default /*#__PURE__*/React.forwardRef(Star);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"prefixCls\", \"className\", \"defaultValue\", \"value\", \"count\", \"allowHalf\", \"allowClear\", \"keyboard\", \"character\", \"characterRender\", \"disabled\", \"direction\", \"tabIndex\", \"autoFocus\", \"onHoverChange\", \"onChange\", \"onFocus\", \"onBlur\", \"onKeyDown\", \"onMouseLeave\"];\nimport classNames from 'classnames';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport pickAttrs from \"rc-util/es/pickAttrs\";\nimport React from 'react';\nimport Star from \"./Star\";\nimport useRefs from \"./useRefs\";\nimport { getOffsetLeft } from \"./util\";\nfunction Rate(props, ref) {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'rc-rate' : _props$prefixCls,\n className = props.className,\n defaultValue = props.defaultValue,\n propValue = props.value,\n _props$count = props.count,\n count = _props$count === void 0 ? 5 : _props$count,\n _props$allowHalf = props.allowHalf,\n allowHalf = _props$allowHalf === void 0 ? false : _props$allowHalf,\n _props$allowClear = props.allowClear,\n allowClear = _props$allowClear === void 0 ? true : _props$allowClear,\n _props$keyboard = props.keyboard,\n keyboard = _props$keyboard === void 0 ? true : _props$keyboard,\n _props$character = props.character,\n character = _props$character === void 0 ? '★' : _props$character,\n characterRender = props.characterRender,\n disabled = props.disabled,\n _props$direction = props.direction,\n direction = _props$direction === void 0 ? 'ltr' : _props$direction,\n _props$tabIndex = props.tabIndex,\n tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,\n autoFocus = props.autoFocus,\n onHoverChange = props.onHoverChange,\n onChange = props.onChange,\n onFocus = props.onFocus,\n onBlur = props.onBlur,\n onKeyDown = props.onKeyDown,\n onMouseLeave = props.onMouseLeave,\n restProps = _objectWithoutProperties(props, _excluded);\n var _useRefs = useRefs(),\n _useRefs2 = _slicedToArray(_useRefs, 2),\n getStarRef = _useRefs2[0],\n setStarRef = _useRefs2[1];\n var rateRef = React.useRef(null);\n\n // ============================ Ref =============================\n var triggerFocus = function triggerFocus() {\n if (!disabled) {\n var _rateRef$current;\n (_rateRef$current = rateRef.current) === null || _rateRef$current === void 0 || _rateRef$current.focus();\n }\n };\n React.useImperativeHandle(ref, function () {\n return {\n focus: triggerFocus,\n blur: function blur() {\n if (!disabled) {\n var _rateRef$current2;\n (_rateRef$current2 = rateRef.current) === null || _rateRef$current2 === void 0 || _rateRef$current2.blur();\n }\n }\n };\n });\n\n // =========================== Value ============================\n var _useMergedState = useMergedState(defaultValue || 0, {\n value: propValue\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n value = _useMergedState2[0],\n setValue = _useMergedState2[1];\n var _useMergedState3 = useMergedState(null),\n _useMergedState4 = _slicedToArray(_useMergedState3, 2),\n cleanedValue = _useMergedState4[0],\n setCleanedValue = _useMergedState4[1];\n var getStarValue = function getStarValue(index, x) {\n var reverse = direction === 'rtl';\n var starValue = index + 1;\n if (allowHalf) {\n var starEle = getStarRef(index);\n var leftDis = getOffsetLeft(starEle);\n var width = starEle.clientWidth;\n if (reverse && x - leftDis > width / 2) {\n starValue -= 0.5;\n } else if (!reverse && x - leftDis < width / 2) {\n starValue -= 0.5;\n }\n }\n return starValue;\n };\n\n // >>>>> Change\n var changeValue = function changeValue(nextValue) {\n setValue(nextValue);\n onChange === null || onChange === void 0 || onChange(nextValue);\n };\n\n // =========================== Focus ============================\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n focused = _React$useState2[0],\n setFocused = _React$useState2[1];\n var onInternalFocus = function onInternalFocus() {\n setFocused(true);\n onFocus === null || onFocus === void 0 || onFocus();\n };\n var onInternalBlur = function onInternalBlur() {\n setFocused(false);\n onBlur === null || onBlur === void 0 || onBlur();\n };\n\n // =========================== Hover ============================\n var _React$useState3 = React.useState(null),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n hoverValue = _React$useState4[0],\n setHoverValue = _React$useState4[1];\n var onHover = function onHover(event, index) {\n var nextHoverValue = getStarValue(index, event.pageX);\n if (nextHoverValue !== cleanedValue) {\n setHoverValue(nextHoverValue);\n setCleanedValue(null);\n }\n onHoverChange === null || onHoverChange === void 0 || onHoverChange(nextHoverValue);\n };\n var onMouseLeaveCallback = function onMouseLeaveCallback(event) {\n if (!disabled) {\n setHoverValue(null);\n setCleanedValue(null);\n onHoverChange === null || onHoverChange === void 0 || onHoverChange(undefined);\n }\n if (event) {\n onMouseLeave === null || onMouseLeave === void 0 || onMouseLeave(event);\n }\n };\n\n // =========================== Click ============================\n var onClick = function onClick(event, index) {\n var newValue = getStarValue(index, event.pageX);\n var isReset = false;\n if (allowClear) {\n isReset = newValue === value;\n }\n onMouseLeaveCallback();\n changeValue(isReset ? 0 : newValue);\n setCleanedValue(isReset ? newValue : null);\n };\n var onInternalKeyDown = function onInternalKeyDown(event) {\n var keyCode = event.keyCode;\n var reverse = direction === 'rtl';\n var step = allowHalf ? 0.5 : 1;\n if (keyboard) {\n if (keyCode === KeyCode.RIGHT && value < count && !reverse) {\n changeValue(value + step);\n event.preventDefault();\n } else if (keyCode === KeyCode.LEFT && value > 0 && !reverse) {\n changeValue(value - step);\n event.preventDefault();\n } else if (keyCode === KeyCode.RIGHT && value > 0 && reverse) {\n changeValue(value - step);\n event.preventDefault();\n } else if (keyCode === KeyCode.LEFT && value < count && reverse) {\n changeValue(value + step);\n event.preventDefault();\n }\n }\n onKeyDown === null || onKeyDown === void 0 || onKeyDown(event);\n };\n\n // =========================== Effect ===========================\n\n React.useEffect(function () {\n if (autoFocus && !disabled) {\n triggerFocus();\n }\n }, []);\n\n // =========================== Render ===========================\n // >>> Star\n var starNodes = new Array(count).fill(0).map(function (item, index) {\n return /*#__PURE__*/React.createElement(Star, {\n ref: setStarRef(index),\n index: index,\n count: count,\n disabled: disabled,\n prefixCls: \"\".concat(prefixCls, \"-star\"),\n allowHalf: allowHalf,\n value: hoverValue === null ? value : hoverValue,\n onClick: onClick,\n onHover: onHover,\n key: item || index,\n character: character,\n characterRender: characterRender,\n focused: focused\n });\n });\n var classString = classNames(prefixCls, className, _defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-disabled\"), disabled), \"\".concat(prefixCls, \"-rtl\"), direction === 'rtl'));\n\n // >>> Node\n return /*#__PURE__*/React.createElement(\"ul\", _extends({\n className: classString,\n onMouseLeave: onMouseLeaveCallback,\n tabIndex: disabled ? -1 : tabIndex,\n onFocus: disabled ? null : onInternalFocus,\n onBlur: disabled ? null : onInternalBlur,\n onKeyDown: disabled ? null : onInternalKeyDown,\n ref: rateRef\n }, pickAttrs(restProps, {\n aria: true,\n data: true,\n attr: true\n })), starNodes);\n}\nexport default /*#__PURE__*/React.forwardRef(Rate);","import * as React from 'react';\nexport default function useRefs() {\n var nodeRef = React.useRef({});\n function getRef(index) {\n return nodeRef.current[index];\n }\n function setRef(index) {\n return function (node) {\n nodeRef.current[index] = node;\n };\n }\n return [getRef, setRef];\n}","function getScroll(w) {\n var ret = w.pageXOffset;\n var method = 'scrollLeft';\n if (typeof ret !== 'number') {\n var d = w.document;\n // ie6,7,8 standard mode\n ret = d.documentElement[method];\n if (typeof ret !== 'number') {\n // quirks mode\n ret = d.body[method];\n }\n }\n return ret;\n}\nfunction getClientPosition(elem) {\n var x;\n var y;\n var doc = elem.ownerDocument;\n var body = doc.body;\n var docElem = doc && doc.documentElement;\n var box = elem.getBoundingClientRect();\n x = box.left;\n y = box.top;\n x -= docElem.clientLeft || body.clientLeft || 0;\n y -= docElem.clientTop || body.clientTop || 0;\n return {\n left: x,\n top: y\n };\n}\nexport function getOffsetLeft(el) {\n var pos = getClientPosition(el);\n var doc = el.ownerDocument;\n // Only IE use `parentWindow`\n var w = doc.defaultView || doc.parentWindow;\n pos.left += getScroll(w);\n return pos.left;\n}","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport StarFilled from \"@ant-design/icons/es/icons/StarFilled\";\nimport classNames from 'classnames';\nimport RcRate from 'rc-rate';\nimport { ConfigContext } from '../config-provider';\nimport Tooltip from '../tooltip';\nimport useStyle from './style';\nimport DisabledContext from '../config-provider/DisabledContext';\nconst Rate = /*#__PURE__*/React.forwardRef((props, ref) => {\n const {\n prefixCls,\n className,\n rootClassName,\n style,\n tooltips,\n character = /*#__PURE__*/React.createElement(StarFilled, null),\n disabled: customDisabled\n } = props,\n rest = __rest(props, [\"prefixCls\", \"className\", \"rootClassName\", \"style\", \"tooltips\", \"character\", \"disabled\"]);\n const characterRender = (node, {\n index\n }) => {\n if (!tooltips) {\n return node;\n }\n return /*#__PURE__*/React.createElement(Tooltip, {\n title: tooltips[index]\n }, node);\n };\n const {\n getPrefixCls,\n direction,\n rate\n } = React.useContext(ConfigContext);\n const ratePrefixCls = getPrefixCls('rate', prefixCls);\n // Style\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(ratePrefixCls);\n const mergedStyle = Object.assign(Object.assign({}, rate === null || rate === void 0 ? void 0 : rate.style), style);\n // ===================== Disabled =====================\n const disabled = React.useContext(DisabledContext);\n const mergedDisabled = customDisabled !== null && customDisabled !== void 0 ? customDisabled : disabled;\n return wrapCSSVar(/*#__PURE__*/React.createElement(RcRate, Object.assign({\n ref: ref,\n character: character,\n characterRender: characterRender,\n disabled: mergedDisabled\n }, rest, {\n className: classNames(className, rootClassName, hashId, cssVarCls, rate === null || rate === void 0 ? void 0 : rate.className),\n style: mergedStyle,\n prefixCls: ratePrefixCls,\n direction: direction\n })));\n});\nif (process.env.NODE_ENV !== 'production') {\n Rate.displayName = 'Rate';\n}\nexport default Rate;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { Rate } from 'antd';\nimport React from 'react';\n// 兼容代码-----------\nimport \"antd/es/rate/style\";\n//------------\n\n/**\n * 评分组件\n *\n * @param\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar FieldRate = function FieldRate(_ref, ref) {\n var text = _ref.text,\n mode = _ref.mode,\n render = _ref.render,\n renderFormItem = _ref.renderFormItem,\n fieldProps = _ref.fieldProps;\n if (mode === 'read') {\n var dom = /*#__PURE__*/_jsx(Rate, _objectSpread(_objectSpread({\n allowHalf: true,\n disabled: true,\n ref: ref\n }, fieldProps), {}, {\n value: text\n }));\n if (render) {\n return render(text, _objectSpread({\n mode: mode\n }, fieldProps), /*#__PURE__*/_jsx(_Fragment, {\n children: dom\n }));\n }\n return dom;\n }\n if (mode === 'edit' || mode === 'update') {\n var _dom = /*#__PURE__*/_jsx(Rate, _objectSpread({\n allowHalf: true,\n ref: ref\n }, fieldProps));\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: mode\n }, fieldProps), _dom);\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldRate);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { useIntl } from '@ant-design/pro-provider';\nimport { InputNumber } from 'antd';\nimport React from 'react';\n// 兼容代码-----------\nimport \"antd/es/input-number/style\";\n//------------\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * 格式化秒\n *\n * @param result\n * @returns {string}\n */\nexport function formatSecond(result) {\n var newResult = result;\n var formatText = '';\n var past = false;\n if (newResult < 0) {\n newResult = -newResult;\n past = true;\n }\n var d = Math.floor(newResult / (3600 * 24));\n var h = Math.floor(newResult / 3600 % 24);\n var m = Math.floor(newResult / 60 % 60);\n var s = Math.floor(newResult % 60);\n formatText = \"\".concat(s, \"\\u79D2\");\n if (m > 0) {\n formatText = \"\".concat(m, \"\\u5206\\u949F\").concat(formatText);\n }\n if (h > 0) {\n formatText = \"\".concat(h, \"\\u5C0F\\u65F6\").concat(formatText);\n }\n if (d > 0) {\n formatText = \"\".concat(d, \"\\u5929\").concat(formatText);\n }\n if (past) {\n formatText += '前';\n }\n return formatText;\n}\n\n/**\n * 格式化秒\n *\n * @param FieldSecond\n */\nvar Second = function Second(_ref, ref) {\n var text = _ref.text,\n type = _ref.mode,\n render = _ref.render,\n renderFormItem = _ref.renderFormItem,\n fieldProps = _ref.fieldProps,\n placeholder = _ref.placeholder;\n var intl = useIntl();\n var placeholderValue = placeholder || intl.getMessage('tableForm.inputPlaceholder', '请输入');\n if (type === 'read') {\n var secondText = formatSecond(Number(text));\n var dom = /*#__PURE__*/_jsx(\"span\", {\n ref: ref,\n children: secondText\n });\n if (render) {\n return render(text, _objectSpread({\n mode: type\n }, fieldProps), dom);\n }\n return dom;\n }\n if (type === 'edit' || type === 'update') {\n var _dom = /*#__PURE__*/_jsx(InputNumber, _objectSpread({\n ref: ref,\n min: 0,\n style: {\n width: '100%'\n },\n placeholder: placeholderValue\n }, fieldProps));\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: type\n }, fieldProps), _dom);\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(Second);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"mode\", \"render\", \"renderFormItem\", \"fieldProps\", \"emptyText\"];\nimport { Segmented, Spin } from 'antd';\nimport omit from \"rc-util/es/omit\";\nimport React, { useImperativeHandle, useRef } from 'react';\nimport { useFieldFetchData } from \"../Select\";\nimport { objectToMap, proFieldParsingText } from '@ant-design/pro-utils';\nimport \"antd/es/segmented/style\";\nimport \"antd/es/spin/style\";\n\n/**\n * Segmented https://ant.design/components/segmented-cn/\n *\n * @param\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar FieldSegmented = function FieldSegmented(props, ref) {\n var mode = props.mode,\n render = props.render,\n renderFormItem = props.renderFormItem,\n fieldProps = props.fieldProps,\n _props$emptyText = props.emptyText,\n emptyText = _props$emptyText === void 0 ? '-' : _props$emptyText,\n rest = _objectWithoutProperties(props, _excluded);\n var inputRef = useRef();\n var _useFieldFetchData = useFieldFetchData(props),\n _useFieldFetchData2 = _slicedToArray(_useFieldFetchData, 3),\n loading = _useFieldFetchData2[0],\n options = _useFieldFetchData2[1],\n _fetchData = _useFieldFetchData2[2];\n useImperativeHandle(ref, function () {\n return _objectSpread(_objectSpread({}, inputRef.current || {}), {}, {\n fetchData: function fetchData(keyWord) {\n return _fetchData(keyWord);\n }\n });\n }, [_fetchData]);\n if (loading) {\n return /*#__PURE__*/_jsx(Spin, {\n size: \"small\"\n });\n }\n if (mode === 'read') {\n var optionsValueEnum = options !== null && options !== void 0 && options.length ? options === null || options === void 0 ? void 0 : options.reduce(function (pre, cur) {\n var _ref;\n return _objectSpread(_objectSpread({}, pre), {}, _defineProperty({}, (_ref = cur.value) !== null && _ref !== void 0 ? _ref : '', cur.label));\n }, {}) : undefined;\n var dom = /*#__PURE__*/_jsx(_Fragment, {\n children: proFieldParsingText(rest.text, objectToMap(rest.valueEnum || optionsValueEnum))\n });\n if (render) {\n var _render;\n return (_render = render(rest.text, _objectSpread({\n mode: mode\n }, fieldProps), /*#__PURE__*/_jsx(_Fragment, {\n children: dom\n }))) !== null && _render !== void 0 ? _render : emptyText;\n }\n return dom;\n }\n if (mode === 'edit' || mode === 'update') {\n var _dom = /*#__PURE__*/_jsx(Segmented, _objectSpread(_objectSpread({\n ref: inputRef\n }, omit(fieldProps || {}, ['allowClear'])), {}, {\n options: options\n }));\n if (renderFormItem) {\n return renderFormItem(rest.text, _objectSpread(_objectSpread({\n mode: mode\n }, fieldProps), {}, {\n options: options,\n loading: loading\n }), _dom);\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldSegmented);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { Slider } from 'antd';\nimport React from 'react';\n// 兼容代码-----------\nimport \"antd/es/slider/style\";\n//------------\n/**\n * 评分组件\n *\n * @param\n */\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar FieldSlider = function FieldSlider(_ref, ref) {\n var text = _ref.text,\n mode = _ref.mode,\n render = _ref.render,\n renderFormItem = _ref.renderFormItem,\n fieldProps = _ref.fieldProps;\n if (mode === 'read') {\n var dom = text;\n if (render) {\n return render(text, _objectSpread({\n mode: mode\n }, fieldProps), /*#__PURE__*/_jsx(_Fragment, {\n children: dom\n }));\n }\n return /*#__PURE__*/_jsx(_Fragment, {\n children: dom\n });\n }\n if (mode === 'edit' || mode === 'update') {\n var _dom = /*#__PURE__*/_jsx(Slider, _objectSpread(_objectSpread({\n ref: ref\n }, fieldProps), {}, {\n style: _objectSpread({\n minWidth: 120\n }, fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.style)\n }));\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: mode\n }, fieldProps), _dom);\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldSlider);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { useIntl } from '@ant-design/pro-provider';\nimport { Switch } from 'antd';\nimport omit from \"rc-util/es/omit\";\nimport React, { useMemo } from 'react';\n// 兼容代码-----------\nimport { FieldLabel } from '@ant-design/pro-utils';\nimport \"antd/es/switch/style\";\n//------------\n\n/**\n * 评分组件\n *\n * @param\n */\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar FieldSwitch = function FieldSwitch(_ref, ref) {\n var text = _ref.text,\n mode = _ref.mode,\n render = _ref.render,\n light = _ref.light,\n label = _ref.label,\n renderFormItem = _ref.renderFormItem,\n fieldProps = _ref.fieldProps;\n var intl = useIntl();\n var dom = useMemo(function () {\n var _fieldProps$checkedCh, _fieldProps$unChecked;\n if (text === undefined || text === null || \"\".concat(text).length < 1) return '-';\n return text ? (_fieldProps$checkedCh = fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.checkedChildren) !== null && _fieldProps$checkedCh !== void 0 ? _fieldProps$checkedCh : intl.getMessage('switch.open', '打开') : (_fieldProps$unChecked = fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.unCheckedChildren) !== null && _fieldProps$unChecked !== void 0 ? _fieldProps$unChecked : intl.getMessage('switch.close', '关闭');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.checkedChildren, fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.unCheckedChildren, text]);\n if (mode === 'read') {\n if (render) {\n return render(text, _objectSpread({\n mode: mode\n }, fieldProps), /*#__PURE__*/_jsx(_Fragment, {\n children: dom\n }));\n }\n return dom !== null && dom !== void 0 ? dom : '-';\n }\n if (mode === 'edit' || mode === 'update') {\n var _fieldProps$checked;\n var editDom = /*#__PURE__*/_jsx(Switch, _objectSpread(_objectSpread({\n ref: ref,\n size: light ? 'small' : undefined\n }, omit(fieldProps, ['value'])), {}, {\n checked: (_fieldProps$checked = fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.checked) !== null && _fieldProps$checked !== void 0 ? _fieldProps$checked : fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.value\n }));\n if (light) {\n var disabled = fieldProps.disabled,\n bordered = fieldProps.bordered;\n return /*#__PURE__*/_jsx(FieldLabel, {\n label: label,\n disabled: disabled,\n bordered: bordered,\n downIcon: false,\n value: /*#__PURE__*/_jsx(\"div\", {\n style: {\n paddingLeft: 8\n },\n children: editDom\n }),\n allowClear: false\n });\n }\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: mode\n }, fieldProps), editDom);\n }\n return editDom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldSwitch);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { useIntl } from '@ant-design/pro-provider';\nimport { Input } from 'antd';\nimport React, { useEffect, useImperativeHandle, useRef } from 'react';\n// 兼容代码-----------\nimport \"antd/es/input/style\";\n//------------\n\n/**\n * 最基本的组件,就是个普通的 Input\n *\n * @param\n */\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar FieldText = function FieldText(_ref, ref) {\n var text = _ref.text,\n mode = _ref.mode,\n render = _ref.render,\n renderFormItem = _ref.renderFormItem,\n fieldProps = _ref.fieldProps,\n _ref$emptyText = _ref.emptyText,\n emptyText = _ref$emptyText === void 0 ? '-' : _ref$emptyText;\n var _ref2 = fieldProps || {},\n autoFocus = _ref2.autoFocus,\n _ref2$prefix = _ref2.prefix,\n prefix = _ref2$prefix === void 0 ? '' : _ref2$prefix,\n _ref2$suffix = _ref2.suffix,\n suffix = _ref2$suffix === void 0 ? '' : _ref2$suffix;\n var intl = useIntl();\n var inputRef = useRef();\n useImperativeHandle(ref, function () {\n return inputRef.current;\n }, []);\n useEffect(function () {\n if (autoFocus) {\n var _inputRef$current;\n (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.focus();\n }\n }, [autoFocus]);\n if (mode === 'read') {\n var dom = /*#__PURE__*/_jsxs(_Fragment, {\n children: [prefix, text !== null && text !== void 0 ? text : emptyText, suffix]\n });\n if (render) {\n var _render;\n return (_render = render(text, _objectSpread({\n mode: mode\n }, fieldProps), dom)) !== null && _render !== void 0 ? _render : emptyText;\n }\n return dom;\n }\n if (mode === 'edit' || mode === 'update') {\n var placeholder = intl.getMessage('tableForm.inputPlaceholder', '请输入');\n var _dom = /*#__PURE__*/_jsx(Input, _objectSpread({\n ref: inputRef,\n placeholder: placeholder,\n allowClear: true\n }, fieldProps));\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: mode\n }, fieldProps), _dom);\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldText);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { useStyle } from '@ant-design/pro-utils';\nimport { ConfigProvider } from 'antd';\nimport classNames from 'classnames';\nimport React, { useContext } from 'react';\n// 兼容代码-----------\nimport \"antd/es/input/style\";\nimport omit from \"rc-util/es/omit\";\n//------------\n\n/**\n * Input.TextArea 只读模式时渲染的组件\n *\n * @param\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar FieldTextAreaReadonly = function FieldTextAreaReadonly(_ref, ref) {\n var text = _ref.text,\n fieldProps = _ref.fieldProps;\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var readonlyClassName = getPrefixCls('pro-field-readonly');\n var compClassName = \"\".concat(readonlyClassName, \"-textarea\");\n var _useStyle = useStyle('TextArea', function () {\n return _defineProperty({}, \".\".concat(compClassName), {\n display: 'inline-block',\n lineHeight: '1.5715',\n maxWidth: '100%',\n whiteSpace: 'pre-wrap'\n });\n }),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n return wrapSSR( /*#__PURE__*/_jsx(\"span\", _objectSpread(_objectSpread({\n ref: ref,\n className: classNames(hashId, readonlyClassName, compClassName)\n }, omit(fieldProps, ['autoSize', 'classNames', 'styles'])), {}, {\n children: text !== null && text !== void 0 ? text : '-'\n })));\n};\nexport default /*#__PURE__*/React.forwardRef(FieldTextAreaReadonly);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { useIntl } from '@ant-design/pro-provider';\nimport { Input } from 'antd';\nimport omit from \"rc-util/es/omit\";\nimport React from 'react';\nimport FieldTextAreaReadonly from \"./readonly\";\n\n// 兼容代码-----------\nimport \"antd/es/input/style\";\n//------------\n/**\n * 最基本的组件,就是个普通的 Input.TextArea\n *\n * @param\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar FieldTextArea = function FieldTextArea(props, ref) {\n var text = props.text,\n mode = props.mode,\n render = props.render,\n renderFormItem = props.renderFormItem,\n fieldProps = props.fieldProps;\n var intl = useIntl();\n if (mode === 'read') {\n var dom = /*#__PURE__*/_jsx(FieldTextAreaReadonly, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref\n }));\n if (render) {\n return render(text, _objectSpread({\n mode: mode\n }, omit(fieldProps, ['showCount'])), dom);\n }\n return dom;\n }\n if (mode === 'edit' || mode === 'update') {\n var _dom = /*#__PURE__*/_jsx(Input.TextArea, _objectSpread({\n ref: ref,\n rows: 3,\n onKeyPress: function onKeyPress(e) {\n if (e.key === 'Enter') e.stopPropagation();\n },\n placeholder: intl.getMessage('tableForm.inputPlaceholder', '请输入')\n }, fieldProps));\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: mode\n }, fieldProps), _dom);\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldTextArea);","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport genPurePanel from '../_util/PurePanel';\nimport { devUseWarning } from '../_util/warning';\nimport DatePicker from '../date-picker';\nimport useVariant from '../form/hooks/useVariants';\nconst {\n TimePicker: InternalTimePicker,\n RangePicker: InternalRangePicker\n} = DatePicker;\nconst RangePicker = /*#__PURE__*/React.forwardRef((props, ref) => (/*#__PURE__*/React.createElement(InternalRangePicker, Object.assign({}, props, {\n picker: \"time\",\n mode: undefined,\n ref: ref\n}))));\nconst TimePicker = /*#__PURE__*/React.forwardRef((_a, ref) => {\n var {\n addon,\n renderExtraFooter,\n variant,\n bordered\n } = _a,\n restProps = __rest(_a, [\"addon\", \"renderExtraFooter\", \"variant\", \"bordered\"]);\n if (process.env.NODE_ENV !== 'production') {\n const warning = devUseWarning('TimePicker');\n warning.deprecated(!addon, 'addon', 'renderExtraFooter');\n }\n const [mergedVariant] = useVariant('timePicker', variant, bordered);\n const internalRenderExtraFooter = React.useMemo(() => {\n if (renderExtraFooter) {\n return renderExtraFooter;\n }\n if (addon) {\n return addon;\n }\n return undefined;\n }, [addon, renderExtraFooter]);\n return /*#__PURE__*/React.createElement(InternalTimePicker, Object.assign({}, restProps, {\n mode: undefined,\n ref: ref,\n renderExtraFooter: internalRenderExtraFooter,\n variant: mergedVariant\n }));\n});\nif (process.env.NODE_ENV !== 'production') {\n TimePicker.displayName = 'TimePicker';\n}\n// We don't care debug panel\n/* istanbul ignore next */\nconst PurePanel = genPurePanel(TimePicker, 'popupAlign', undefined, 'picker');\nTimePicker._InternalPanelDoNotUseOrYouWillBeFired = PurePanel;\nTimePicker.RangePicker = RangePicker;\nTimePicker._InternalPanelDoNotUseOrYouWillBeFired = PurePanel;\nexport default TimePicker;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useIntl } from '@ant-design/pro-provider';\nimport { FieldLabel, compatibleBorder, parseValueToDay } from '@ant-design/pro-utils';\nimport { DatePicker, TimePicker } from 'antd';\nimport dayjs from 'dayjs';\nimport React, { useState } from 'react';\n// 兼容代码-----------\nimport \"antd/es/date-picker/style\";\n//----------------------;\n\n/**\n * 时间选择组件\n *\n * @param\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar FieldTimePicker = function FieldTimePicker(_ref, ref) {\n var text = _ref.text,\n mode = _ref.mode,\n light = _ref.light,\n label = _ref.label,\n format = _ref.format,\n render = _ref.render,\n renderFormItem = _ref.renderFormItem,\n plain = _ref.plain,\n fieldProps = _ref.fieldProps,\n lightLabel = _ref.lightLabel;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n open = _useState2[0],\n setOpen = _useState2[1];\n var intl = useIntl();\n var finalFormat = (fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.format) || format || 'HH:mm:ss';\n var isNumberOrMoment = dayjs.isDayjs(text) || typeof text === 'number';\n if (mode === 'read') {\n var dom = /*#__PURE__*/_jsx(\"span\", {\n ref: ref,\n children: text ? dayjs(text, isNumberOrMoment ? undefined : finalFormat).format(finalFormat) : '-'\n });\n if (render) {\n return render(text, _objectSpread({\n mode: mode\n }, fieldProps), /*#__PURE__*/_jsx(\"span\", {\n children: dom\n }));\n }\n return dom;\n }\n if (mode === 'edit' || mode === 'update') {\n var _dom;\n var disabled = fieldProps.disabled,\n value = fieldProps.value;\n var dayValue = parseValueToDay(value, finalFormat);\n if (light) {\n var _fieldProps$placehold;\n _dom = /*#__PURE__*/_jsx(FieldLabel, {\n onClick: function onClick() {\n var _fieldProps$onOpenCha;\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onOpenCha = fieldProps.onOpenChange) === null || _fieldProps$onOpenCha === void 0 || _fieldProps$onOpenCha.call(fieldProps, true);\n setOpen(true);\n },\n style: dayValue ? {\n paddingInlineEnd: 0\n } : undefined,\n label: label,\n disabled: disabled,\n value: dayValue || open ? /*#__PURE__*/_jsx(TimePicker, _objectSpread(_objectSpread(_objectSpread({}, compatibleBorder(false)), {}, {\n format: format,\n ref: ref\n }, fieldProps), {}, {\n placeholder: (_fieldProps$placehold = fieldProps.placeholder) !== null && _fieldProps$placehold !== void 0 ? _fieldProps$placehold : intl.getMessage('tableForm.selectPlaceholder', '请选择'),\n value: dayValue,\n onOpenChange: function onOpenChange(isOpen) {\n var _fieldProps$onOpenCha2;\n setOpen(isOpen);\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onOpenCha2 = fieldProps.onOpenChange) === null || _fieldProps$onOpenCha2 === void 0 || _fieldProps$onOpenCha2.call(fieldProps, isOpen);\n },\n open: open\n })) : null,\n downIcon: dayValue || open ? false : undefined,\n allowClear: false,\n ref: lightLabel\n });\n } else {\n _dom = /*#__PURE__*/_jsx(DatePicker.TimePicker, _objectSpread(_objectSpread(_objectSpread({\n ref: ref,\n format: format\n }, compatibleBorder(plain === undefined ? true : !plain)), fieldProps), {}, {\n value: dayValue\n }));\n }\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: mode\n }, fieldProps), _dom);\n }\n return _dom;\n }\n return null;\n};\n\n/**\n * 时间区间选择\n *\n * @param param0\n * @param ref\n */\nvar FieldTimeRangePickerComponents = function FieldTimeRangePickerComponents(_ref2, ref) {\n var text = _ref2.text,\n light = _ref2.light,\n label = _ref2.label,\n mode = _ref2.mode,\n lightLabel = _ref2.lightLabel,\n format = _ref2.format,\n render = _ref2.render,\n renderFormItem = _ref2.renderFormItem,\n plain = _ref2.plain,\n fieldProps = _ref2.fieldProps;\n var intl = useIntl();\n var _useState3 = useState(false),\n _useState4 = _slicedToArray(_useState3, 2),\n open = _useState4[0],\n setOpen = _useState4[1];\n var finalFormat = (fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.format) || format || 'HH:mm:ss';\n var _ref3 = Array.isArray(text) ? text : [],\n _ref4 = _slicedToArray(_ref3, 2),\n startText = _ref4[0],\n endText = _ref4[1];\n var startTextIsNumberOrMoment = dayjs.isDayjs(startText) || typeof startText === 'number';\n var endTextIsNumberOrMoment = dayjs.isDayjs(endText) || typeof endText === 'number';\n var parsedStartText = startText ? dayjs(startText, startTextIsNumberOrMoment ? undefined : finalFormat).format(finalFormat) : '';\n var parsedEndText = endText ? dayjs(endText, endTextIsNumberOrMoment ? undefined : finalFormat).format(finalFormat) : '';\n if (mode === 'read') {\n var dom = /*#__PURE__*/_jsxs(\"div\", {\n ref: ref,\n children: [/*#__PURE__*/_jsx(\"div\", {\n children: parsedStartText || '-'\n }), /*#__PURE__*/_jsx(\"div\", {\n children: parsedEndText || '-'\n })]\n });\n if (render) {\n return render(text, _objectSpread({\n mode: mode\n }, fieldProps), /*#__PURE__*/_jsx(\"span\", {\n children: dom\n }));\n }\n return dom;\n }\n if (mode === 'edit' || mode === 'update') {\n var dayValue = parseValueToDay(fieldProps.value, finalFormat);\n var _dom2;\n if (light) {\n var disabled = fieldProps.disabled,\n _fieldProps$placehold2 = fieldProps.placeholder,\n placeholder = _fieldProps$placehold2 === void 0 ? [intl.getMessage('tableForm.selectPlaceholder', '请选择'), intl.getMessage('tableForm.selectPlaceholder', '请选择')] : _fieldProps$placehold2;\n _dom2 = /*#__PURE__*/_jsx(FieldLabel, {\n onClick: function onClick() {\n var _fieldProps$onOpenCha3;\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onOpenCha3 = fieldProps.onOpenChange) === null || _fieldProps$onOpenCha3 === void 0 || _fieldProps$onOpenCha3.call(fieldProps, true);\n setOpen(true);\n },\n style: dayValue ? {\n paddingInlineEnd: 0\n } : undefined,\n label: label,\n disabled: disabled,\n placeholder: placeholder,\n value: dayValue || open ? /*#__PURE__*/_jsx(TimePicker.RangePicker, _objectSpread(_objectSpread(_objectSpread({}, compatibleBorder(false)), {}, {\n format: format,\n ref: ref\n }, fieldProps), {}, {\n placeholder: placeholder,\n value: dayValue,\n onOpenChange: function onOpenChange(isOpen) {\n var _fieldProps$onOpenCha4;\n setOpen(isOpen);\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onOpenCha4 = fieldProps.onOpenChange) === null || _fieldProps$onOpenCha4 === void 0 || _fieldProps$onOpenCha4.call(fieldProps, isOpen);\n },\n open: open\n })) : null,\n downIcon: dayValue || open ? false : undefined,\n allowClear: false,\n ref: lightLabel\n });\n } else {\n _dom2 = /*#__PURE__*/_jsx(TimePicker.RangePicker, _objectSpread(_objectSpread(_objectSpread({\n ref: ref,\n format: format\n }, compatibleBorder(plain === undefined ? true : !plain)), fieldProps), {}, {\n value: dayValue\n }));\n }\n if (renderFormItem) {\n return renderFormItem(text, _objectSpread({\n mode: mode\n }, fieldProps), _dom2);\n }\n return _dom2;\n }\n return null;\n};\nvar FieldTimeRangePicker = /*#__PURE__*/React.forwardRef(FieldTimeRangePickerComponents);\nexport { FieldTimeRangePicker };\nexport default /*#__PURE__*/React.forwardRef(FieldTimePicker);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\n/**\n * This function will try to call requestIdleCallback if available to save performance.\n * No need `getLabel` here since already fetch on `rawLabeledValue`.\n */\nexport default (function (values) {\n var cacheRef = React.useRef({\n valueLabels: new Map()\n });\n return React.useMemo(function () {\n var valueLabels = cacheRef.current.valueLabels;\n var valueLabelsCache = new Map();\n var filledValues = values.map(function (item) {\n var value = item.value,\n label = item.label;\n var mergedLabel = label !== null && label !== void 0 ? label : valueLabels.get(value);\n\n // Save in cache\n valueLabelsCache.set(value, mergedLabel);\n return _objectSpread(_objectSpread({}, item), {}, {\n label: mergedLabel\n });\n });\n cacheRef.current.valueLabels = valueLabelsCache;\n return [filledValues];\n }, [values]);\n});","export var toArray = function toArray(value) {\n return Array.isArray(value) ? value : value !== undefined ? [value] : [];\n};\nexport var fillFieldNames = function fillFieldNames(fieldNames) {\n var _ref = fieldNames || {},\n label = _ref.label,\n value = _ref.value,\n children = _ref.children;\n return {\n _title: label ? [label] : ['title', 'label'],\n value: value || 'value',\n key: value || 'value',\n children: children || 'children'\n };\n};\nexport var isCheckDisabled = function isCheckDisabled(node) {\n return !node || node.disabled || node.disableCheckbox || node.checkable === false;\n};\nexport var getAllKeys = function getAllKeys(treeData, fieldNames) {\n var keys = [];\n var dig = function dig(list) {\n list.forEach(function (item) {\n var children = item[fieldNames.children];\n if (children) {\n keys.push(item[fieldNames.value]);\n dig(children);\n }\n });\n };\n dig(treeData);\n return keys;\n};\nexport var isNil = function isNil(val) {\n return val === null || val === undefined;\n};","/* istanbul ignore file */\n\n/** This is a placeholder, not real render in dom */\nvar TreeNode = function TreeNode() {\n return null;\n};\nexport default TreeNode;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\", \"value\"];\nimport * as React from 'react';\nimport toArray from \"rc-util/es/Children/toArray\";\nimport warning from \"rc-util/es/warning\";\nimport TreeNode from \"../TreeNode\";\nexport function convertChildrenToData(nodes) {\n return toArray(nodes).map(function (node) {\n if (! /*#__PURE__*/React.isValidElement(node) || !node.type) {\n return null;\n }\n var _ref = node,\n key = _ref.key,\n _ref$props = _ref.props,\n children = _ref$props.children,\n value = _ref$props.value,\n restProps = _objectWithoutProperties(_ref$props, _excluded);\n var data = _objectSpread({\n key: key,\n value: value\n }, restProps);\n var childData = convertChildrenToData(children);\n if (childData.length) {\n data.children = childData;\n }\n return data;\n }).filter(function (data) {\n return data;\n });\n}\nexport function fillLegacyProps(dataNode) {\n if (!dataNode) {\n return dataNode;\n }\n var cloneNode = _objectSpread({}, dataNode);\n if (!('props' in cloneNode)) {\n Object.defineProperty(cloneNode, 'props', {\n get: function get() {\n warning(false, 'New `rc-tree-select` not support return node instance as argument anymore. Please consider to remove `props` access.');\n return cloneNode;\n }\n });\n }\n return cloneNode;\n}\nexport function fillAdditionalInfo(extra, triggerValue, checkedValues, treeData, showPosition, fieldNames) {\n var triggerNode = null;\n var nodeList = null;\n function generateMap() {\n function dig(list) {\n var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '0';\n var parentIncluded = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n return list.map(function (option, index) {\n var pos = \"\".concat(level, \"-\").concat(index);\n var value = option[fieldNames.value];\n var included = checkedValues.includes(value);\n var children = dig(option[fieldNames.children] || [], pos, included);\n var node = /*#__PURE__*/React.createElement(TreeNode, option, children.map(function (child) {\n return child.node;\n }));\n\n // Link with trigger node\n if (triggerValue === value) {\n triggerNode = node;\n }\n if (included) {\n var checkedNode = {\n pos: pos,\n node: node,\n children: children\n };\n if (!parentIncluded) {\n nodeList.push(checkedNode);\n }\n return checkedNode;\n }\n return null;\n }).filter(function (node) {\n return node;\n });\n }\n if (!nodeList) {\n nodeList = [];\n dig(treeData);\n\n // Sort to keep the checked node length\n nodeList.sort(function (_ref2, _ref3) {\n var val1 = _ref2.node.props.value;\n var val2 = _ref3.node.props.value;\n var index1 = checkedValues.indexOf(val1);\n var index2 = checkedValues.indexOf(val2);\n return index1 - index2;\n });\n }\n }\n Object.defineProperty(extra, 'triggerNode', {\n get: function get() {\n warning(false, '`triggerNode` is deprecated. Please consider decoupling data with node.');\n generateMap();\n return triggerNode;\n }\n });\n Object.defineProperty(extra, 'allCheckedNodes', {\n get: function get() {\n warning(false, '`allCheckedNodes` is deprecated. Please consider decoupling data with node.');\n generateMap();\n if (showPosition) {\n return nodeList;\n }\n return nodeList.map(function (_ref4) {\n var node = _ref4.node;\n return node;\n });\n }\n });\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nimport { fillLegacyProps } from \"../utils/legacyUtil\";\nvar useFilterTreeData = function useFilterTreeData(treeData, searchValue, options) {\n var fieldNames = options.fieldNames,\n treeNodeFilterProp = options.treeNodeFilterProp,\n filterTreeNode = options.filterTreeNode;\n var fieldChildren = fieldNames.children;\n return React.useMemo(function () {\n if (!searchValue || filterTreeNode === false) {\n return treeData;\n }\n var filterOptionFunc = typeof filterTreeNode === 'function' ? filterTreeNode : function (_, dataNode) {\n return String(dataNode[treeNodeFilterProp]).toUpperCase().includes(searchValue.toUpperCase());\n };\n var filterTreeNodes = function filterTreeNodes(nodes) {\n var keepAll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n return nodes.reduce(function (filtered, node) {\n var children = node[fieldChildren];\n var isMatch = keepAll || filterOptionFunc(searchValue, fillLegacyProps(node));\n var filteredChildren = filterTreeNodes(children || [], isMatch);\n if (isMatch || filteredChildren.length) {\n filtered.push(_objectSpread(_objectSpread({}, node), {}, _defineProperty({\n isLeaf: undefined\n }, fieldChildren, filteredChildren)));\n }\n return filtered;\n }, []);\n };\n return filterTreeNodes(treeData);\n }, [treeData, searchValue, fieldChildren, treeNodeFilterProp, filterTreeNode]);\n};\nexport default useFilterTreeData;","import * as React from 'react';\n\n/**\n * Same as `React.useCallback` but always return a memoized function\n * but redirect to real function.\n */\nexport default function useRefFunc(callback) {\n var funcRef = React.useRef();\n funcRef.current = callback;\n var cacheFn = React.useCallback(function () {\n return funcRef.current.apply(funcRef, arguments);\n }, []);\n return cacheFn;\n}","import * as React from 'react';\nvar LegacySelectContext = /*#__PURE__*/React.createContext(null);\nexport default LegacySelectContext;","import * as React from 'react';\nvar TreeSelectContext = /*#__PURE__*/React.createContext(null);\nexport default TreeSelectContext;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _createForOfIteratorHelper from \"@babel/runtime/helpers/esm/createForOfIteratorHelper\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useBaseProps } from 'rc-select';\nimport Tree from 'rc-tree';\nimport { UnstableContext } from 'rc-tree';\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport useMemo from \"rc-util/es/hooks/useMemo\";\nimport * as React from 'react';\nimport LegacyContext from \"./LegacyContext\";\nimport TreeSelectContext from \"./TreeSelectContext\";\nimport { getAllKeys, isCheckDisabled } from \"./utils/valueUtil\";\nimport { useEvent } from 'rc-util';\nvar HIDDEN_STYLE = {\n width: 0,\n height: 0,\n display: 'flex',\n overflow: 'hidden',\n opacity: 0,\n border: 0,\n padding: 0,\n margin: 0\n};\nvar OptionList = function OptionList(_, ref) {\n var _useBaseProps = useBaseProps(),\n prefixCls = _useBaseProps.prefixCls,\n multiple = _useBaseProps.multiple,\n searchValue = _useBaseProps.searchValue,\n toggleOpen = _useBaseProps.toggleOpen,\n open = _useBaseProps.open,\n notFoundContent = _useBaseProps.notFoundContent;\n var _React$useContext = React.useContext(TreeSelectContext),\n virtual = _React$useContext.virtual,\n listHeight = _React$useContext.listHeight,\n listItemHeight = _React$useContext.listItemHeight,\n listItemScrollOffset = _React$useContext.listItemScrollOffset,\n treeData = _React$useContext.treeData,\n fieldNames = _React$useContext.fieldNames,\n onSelect = _React$useContext.onSelect,\n dropdownMatchSelectWidth = _React$useContext.dropdownMatchSelectWidth,\n treeExpandAction = _React$useContext.treeExpandAction,\n treeTitleRender = _React$useContext.treeTitleRender,\n onPopupScroll = _React$useContext.onPopupScroll,\n leftMaxCount = _React$useContext.leftMaxCount,\n leafCountOnly = _React$useContext.leafCountOnly,\n valueEntities = _React$useContext.valueEntities;\n var _React$useContext2 = React.useContext(LegacyContext),\n checkable = _React$useContext2.checkable,\n checkedKeys = _React$useContext2.checkedKeys,\n halfCheckedKeys = _React$useContext2.halfCheckedKeys,\n treeExpandedKeys = _React$useContext2.treeExpandedKeys,\n treeDefaultExpandAll = _React$useContext2.treeDefaultExpandAll,\n treeDefaultExpandedKeys = _React$useContext2.treeDefaultExpandedKeys,\n onTreeExpand = _React$useContext2.onTreeExpand,\n treeIcon = _React$useContext2.treeIcon,\n showTreeIcon = _React$useContext2.showTreeIcon,\n switcherIcon = _React$useContext2.switcherIcon,\n treeLine = _React$useContext2.treeLine,\n treeNodeFilterProp = _React$useContext2.treeNodeFilterProp,\n loadData = _React$useContext2.loadData,\n treeLoadedKeys = _React$useContext2.treeLoadedKeys,\n treeMotion = _React$useContext2.treeMotion,\n onTreeLoad = _React$useContext2.onTreeLoad,\n keyEntities = _React$useContext2.keyEntities;\n var treeRef = React.useRef();\n var memoTreeData = useMemo(function () {\n return treeData;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [open, treeData], function (prev, next) {\n return next[0] && prev[1] !== next[1];\n });\n\n // ========================== Values ==========================\n var mergedCheckedKeys = React.useMemo(function () {\n if (!checkable) {\n return null;\n }\n return {\n checked: checkedKeys,\n halfChecked: halfCheckedKeys\n };\n }, [checkable, checkedKeys, halfCheckedKeys]);\n\n // ========================== Scroll ==========================\n React.useEffect(function () {\n // Single mode should scroll to current key\n if (open && !multiple && checkedKeys.length) {\n var _treeRef$current;\n (_treeRef$current = treeRef.current) === null || _treeRef$current === void 0 || _treeRef$current.scrollTo({\n key: checkedKeys[0]\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n // ========================== Events ==========================\n var onListMouseDown = function onListMouseDown(event) {\n event.preventDefault();\n };\n var onInternalSelect = function onInternalSelect(__, info) {\n var node = info.node;\n if (checkable && isCheckDisabled(node)) {\n return;\n }\n onSelect(node.key, {\n selected: !checkedKeys.includes(node.key)\n });\n if (!multiple) {\n toggleOpen(false);\n }\n };\n\n // =========================== Keys ===========================\n var _React$useState = React.useState(treeDefaultExpandedKeys),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n expandedKeys = _React$useState2[0],\n setExpandedKeys = _React$useState2[1];\n var _React$useState3 = React.useState(null),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n searchExpandedKeys = _React$useState4[0],\n setSearchExpandedKeys = _React$useState4[1];\n var mergedExpandedKeys = React.useMemo(function () {\n if (treeExpandedKeys) {\n return _toConsumableArray(treeExpandedKeys);\n }\n return searchValue ? searchExpandedKeys : expandedKeys;\n }, [expandedKeys, searchExpandedKeys, treeExpandedKeys, searchValue]);\n var onInternalExpand = function onInternalExpand(keys) {\n setExpandedKeys(keys);\n setSearchExpandedKeys(keys);\n if (onTreeExpand) {\n onTreeExpand(keys);\n }\n };\n\n // ========================== Search ==========================\n var lowerSearchValue = String(searchValue).toLowerCase();\n var filterTreeNode = function filterTreeNode(treeNode) {\n if (!lowerSearchValue) {\n return false;\n }\n return String(treeNode[treeNodeFilterProp]).toLowerCase().includes(lowerSearchValue);\n };\n React.useEffect(function () {\n if (searchValue) {\n setSearchExpandedKeys(getAllKeys(treeData, fieldNames));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchValue]);\n\n // ========================= Disabled =========================\n // Cache disabled states in React state to ensure re-render when cache updates\n var _React$useState5 = React.useState(function () {\n return new Map();\n }),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n disabledCache = _React$useState6[0],\n setDisabledCache = _React$useState6[1];\n React.useEffect(function () {\n if (leftMaxCount) {\n setDisabledCache(new Map());\n }\n }, [leftMaxCount]);\n function getDisabledWithCache(node) {\n var value = node[fieldNames.value];\n if (!disabledCache.has(value)) {\n var entity = valueEntities.get(value);\n var isLeaf = (entity.children || []).length === 0;\n if (!isLeaf) {\n var checkableChildren = entity.children.filter(function (childTreeNode) {\n return !childTreeNode.node.disabled && !childTreeNode.node.disableCheckbox && !checkedKeys.includes(childTreeNode.node[fieldNames.value]);\n });\n var checkableChildrenCount = checkableChildren.length;\n disabledCache.set(value, checkableChildrenCount > leftMaxCount);\n } else {\n disabledCache.set(value, false);\n }\n }\n return disabledCache.get(value);\n }\n var nodeDisabled = useEvent(function (node) {\n var nodeValue = node[fieldNames.value];\n if (checkedKeys.includes(nodeValue)) {\n return false;\n }\n if (leftMaxCount === null) {\n return false;\n }\n if (leftMaxCount <= 0) {\n return true;\n }\n\n // This is a low performance calculation\n if (leafCountOnly && leftMaxCount) {\n return getDisabledWithCache(node);\n }\n return false;\n });\n\n // ========================== Get First Selectable Node ==========================\n var getFirstMatchingNode = function getFirstMatchingNode(nodes) {\n var _iterator = _createForOfIteratorHelper(nodes),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var node = _step.value;\n if (node.disabled || node.selectable === false) {\n continue;\n }\n if (searchValue) {\n if (filterTreeNode(node)) {\n return node;\n }\n } else {\n return node;\n }\n if (node[fieldNames.children]) {\n var matchInChildren = getFirstMatchingNode(node[fieldNames.children]);\n if (matchInChildren) {\n return matchInChildren;\n }\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return null;\n };\n\n // ========================== Active ==========================\n var _React$useState7 = React.useState(null),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n activeKey = _React$useState8[0],\n setActiveKey = _React$useState8[1];\n var activeEntity = keyEntities[activeKey];\n React.useEffect(function () {\n if (!open) {\n return;\n }\n var nextActiveKey = null;\n var getFirstNode = function getFirstNode() {\n var firstNode = getFirstMatchingNode(memoTreeData);\n return firstNode ? firstNode[fieldNames.value] : null;\n };\n\n // single mode active first checked node\n if (!multiple && checkedKeys.length && !searchValue) {\n nextActiveKey = checkedKeys[0];\n } else {\n nextActiveKey = getFirstNode();\n }\n setActiveKey(nextActiveKey);\n }, [open, searchValue]);\n\n // ========================= Keyboard =========================\n React.useImperativeHandle(ref, function () {\n var _treeRef$current2;\n return {\n scrollTo: (_treeRef$current2 = treeRef.current) === null || _treeRef$current2 === void 0 ? void 0 : _treeRef$current2.scrollTo,\n onKeyDown: function onKeyDown(event) {\n var _treeRef$current3;\n var which = event.which;\n switch (which) {\n // >>> Arrow keys\n case KeyCode.UP:\n case KeyCode.DOWN:\n case KeyCode.LEFT:\n case KeyCode.RIGHT:\n (_treeRef$current3 = treeRef.current) === null || _treeRef$current3 === void 0 || _treeRef$current3.onKeyDown(event);\n break;\n\n // >>> Select item\n case KeyCode.ENTER:\n {\n if (activeEntity) {\n var isNodeDisabled = nodeDisabled(activeEntity.node);\n var _ref = (activeEntity === null || activeEntity === void 0 ? void 0 : activeEntity.node) || {},\n selectable = _ref.selectable,\n value = _ref.value,\n disabled = _ref.disabled;\n if (selectable !== false && !disabled && !isNodeDisabled) {\n onInternalSelect(null, {\n node: {\n key: activeKey\n },\n selected: !checkedKeys.includes(value)\n });\n }\n }\n break;\n }\n\n // >>> Close\n case KeyCode.ESC:\n {\n toggleOpen(false);\n }\n }\n },\n onKeyUp: function onKeyUp() {}\n };\n });\n var hasLoadDataFn = useMemo(function () {\n return searchValue ? false : true;\n }, [searchValue, treeExpandedKeys || expandedKeys], function (_ref2, _ref3) {\n var _ref4 = _slicedToArray(_ref2, 1),\n preSearchValue = _ref4[0];\n var _ref5 = _slicedToArray(_ref3, 2),\n nextSearchValue = _ref5[0],\n nextExcludeSearchExpandedKeys = _ref5[1];\n return preSearchValue !== nextSearchValue && !!(nextSearchValue || nextExcludeSearchExpandedKeys);\n });\n var syncLoadData = hasLoadDataFn ? loadData : null;\n\n // ========================== Render ==========================\n if (memoTreeData.length === 0) {\n return /*#__PURE__*/React.createElement(\"div\", {\n role: \"listbox\",\n className: \"\".concat(prefixCls, \"-empty\"),\n onMouseDown: onListMouseDown\n }, notFoundContent);\n }\n var treeProps = {\n fieldNames: fieldNames\n };\n if (treeLoadedKeys) {\n treeProps.loadedKeys = treeLoadedKeys;\n }\n if (mergedExpandedKeys) {\n treeProps.expandedKeys = mergedExpandedKeys;\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n onMouseDown: onListMouseDown\n }, activeEntity && open && /*#__PURE__*/React.createElement(\"span\", {\n style: HIDDEN_STYLE,\n \"aria-live\": \"assertive\"\n }, activeEntity.node.value), /*#__PURE__*/React.createElement(UnstableContext.Provider, {\n value: {\n nodeDisabled: nodeDisabled\n }\n }, /*#__PURE__*/React.createElement(Tree, _extends({\n ref: treeRef,\n focusable: false,\n prefixCls: \"\".concat(prefixCls, \"-tree\"),\n treeData: memoTreeData,\n height: listHeight,\n itemHeight: listItemHeight,\n itemScrollOffset: listItemScrollOffset,\n virtual: virtual !== false && dropdownMatchSelectWidth !== false,\n multiple: multiple,\n icon: treeIcon,\n showIcon: showTreeIcon,\n switcherIcon: switcherIcon,\n showLine: treeLine,\n loadData: syncLoadData,\n motion: treeMotion,\n activeKey: activeKey\n // We handle keys by out instead tree self\n ,\n checkable: checkable,\n checkStrictly: true,\n checkedKeys: mergedCheckedKeys,\n selectedKeys: !checkable ? checkedKeys : [],\n defaultExpandAll: treeDefaultExpandAll,\n titleRender: treeTitleRender\n }, treeProps, {\n // Proxy event out\n onActiveChange: setActiveKey,\n onSelect: onInternalSelect,\n onCheck: onInternalSelect,\n onExpand: onInternalExpand,\n onLoad: onTreeLoad,\n filterTreeNode: filterTreeNode,\n expandAction: treeExpandAction,\n onScroll: onPopupScroll\n }))));\n};\nvar RefOptionList = /*#__PURE__*/React.forwardRef(OptionList);\nif (process.env.NODE_ENV !== 'production') {\n RefOptionList.displayName = 'OptionList';\n}\nexport default RefOptionList;","import { isCheckDisabled } from \"./valueUtil\";\nexport var SHOW_ALL = 'SHOW_ALL';\nexport var SHOW_PARENT = 'SHOW_PARENT';\nexport var SHOW_CHILD = 'SHOW_CHILD';\nexport function formatStrategyValues(values, strategy, keyEntities, fieldNames) {\n var valueSet = new Set(values);\n if (strategy === SHOW_CHILD) {\n return values.filter(function (key) {\n var entity = keyEntities[key];\n return !entity || !entity.children || !entity.children.some(function (_ref) {\n var node = _ref.node;\n return valueSet.has(node[fieldNames.value]);\n }) || !entity.children.every(function (_ref2) {\n var node = _ref2.node;\n return isCheckDisabled(node) || valueSet.has(node[fieldNames.value]);\n });\n });\n }\n if (strategy === SHOW_PARENT) {\n return values.filter(function (key) {\n var entity = keyEntities[key];\n var parent = entity ? entity.parent : null;\n return !parent || isCheckDisabled(parent.node) || !valueSet.has(parent.key);\n });\n }\n return values;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nvar _excluded = [\"id\", \"prefixCls\", \"value\", \"defaultValue\", \"onChange\", \"onSelect\", \"onDeselect\", \"searchValue\", \"inputValue\", \"onSearch\", \"autoClearSearchValue\", \"filterTreeNode\", \"treeNodeFilterProp\", \"showCheckedStrategy\", \"treeNodeLabelProp\", \"multiple\", \"treeCheckable\", \"treeCheckStrictly\", \"labelInValue\", \"maxCount\", \"fieldNames\", \"treeDataSimpleMode\", \"treeData\", \"children\", \"loadData\", \"treeLoadedKeys\", \"onTreeLoad\", \"treeDefaultExpandAll\", \"treeExpandedKeys\", \"treeDefaultExpandedKeys\", \"onTreeExpand\", \"treeExpandAction\", \"virtual\", \"listHeight\", \"listItemHeight\", \"listItemScrollOffset\", \"onDropdownVisibleChange\", \"dropdownMatchSelectWidth\", \"treeLine\", \"treeIcon\", \"showTreeIcon\", \"switcherIcon\", \"treeMotion\", \"treeTitleRender\", \"onPopupScroll\"];\nimport { BaseSelect } from 'rc-select';\nimport useId from \"rc-select/es/hooks/useId\";\nimport { conductCheck } from \"rc-tree/es/utils/conductUtil\";\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport warning from \"rc-util/es/warning\";\nimport * as React from 'react';\nimport useCache from \"./hooks/useCache\";\nimport useCheckedKeys from \"./hooks/useCheckedKeys\";\nimport useDataEntities from \"./hooks/useDataEntities\";\nimport useFilterTreeData from \"./hooks/useFilterTreeData\";\nimport useRefFunc from \"./hooks/useRefFunc\";\nimport useTreeData from \"./hooks/useTreeData\";\nimport LegacyContext from \"./LegacyContext\";\nimport OptionList from \"./OptionList\";\nimport TreeNode from \"./TreeNode\";\nimport TreeSelectContext from \"./TreeSelectContext\";\nimport { fillAdditionalInfo, fillLegacyProps } from \"./utils/legacyUtil\";\nimport { formatStrategyValues, SHOW_ALL, SHOW_CHILD, SHOW_PARENT } from \"./utils/strategyUtil\";\nimport { fillFieldNames, isNil, toArray } from \"./utils/valueUtil\";\nimport warningProps from \"./utils/warningPropsUtil\";\nfunction isRawValue(value) {\n return !value || _typeof(value) !== 'object';\n}\nvar TreeSelect = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var id = props.id,\n _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'rc-tree-select' : _props$prefixCls,\n value = props.value,\n defaultValue = props.defaultValue,\n onChange = props.onChange,\n onSelect = props.onSelect,\n onDeselect = props.onDeselect,\n searchValue = props.searchValue,\n inputValue = props.inputValue,\n onSearch = props.onSearch,\n _props$autoClearSearc = props.autoClearSearchValue,\n autoClearSearchValue = _props$autoClearSearc === void 0 ? true : _props$autoClearSearc,\n filterTreeNode = props.filterTreeNode,\n _props$treeNodeFilter = props.treeNodeFilterProp,\n treeNodeFilterProp = _props$treeNodeFilter === void 0 ? 'value' : _props$treeNodeFilter,\n showCheckedStrategy = props.showCheckedStrategy,\n treeNodeLabelProp = props.treeNodeLabelProp,\n multiple = props.multiple,\n treeCheckable = props.treeCheckable,\n treeCheckStrictly = props.treeCheckStrictly,\n labelInValue = props.labelInValue,\n maxCount = props.maxCount,\n fieldNames = props.fieldNames,\n treeDataSimpleMode = props.treeDataSimpleMode,\n treeData = props.treeData,\n children = props.children,\n loadData = props.loadData,\n treeLoadedKeys = props.treeLoadedKeys,\n onTreeLoad = props.onTreeLoad,\n treeDefaultExpandAll = props.treeDefaultExpandAll,\n treeExpandedKeys = props.treeExpandedKeys,\n treeDefaultExpandedKeys = props.treeDefaultExpandedKeys,\n onTreeExpand = props.onTreeExpand,\n treeExpandAction = props.treeExpandAction,\n virtual = props.virtual,\n _props$listHeight = props.listHeight,\n listHeight = _props$listHeight === void 0 ? 200 : _props$listHeight,\n _props$listItemHeight = props.listItemHeight,\n listItemHeight = _props$listItemHeight === void 0 ? 20 : _props$listItemHeight,\n _props$listItemScroll = props.listItemScrollOffset,\n listItemScrollOffset = _props$listItemScroll === void 0 ? 0 : _props$listItemScroll,\n onDropdownVisibleChange = props.onDropdownVisibleChange,\n _props$dropdownMatchS = props.dropdownMatchSelectWidth,\n dropdownMatchSelectWidth = _props$dropdownMatchS === void 0 ? true : _props$dropdownMatchS,\n treeLine = props.treeLine,\n treeIcon = props.treeIcon,\n showTreeIcon = props.showTreeIcon,\n switcherIcon = props.switcherIcon,\n treeMotion = props.treeMotion,\n treeTitleRender = props.treeTitleRender,\n onPopupScroll = props.onPopupScroll,\n restProps = _objectWithoutProperties(props, _excluded);\n var mergedId = useId(id);\n var treeConduction = treeCheckable && !treeCheckStrictly;\n var mergedCheckable = treeCheckable || treeCheckStrictly;\n var mergedLabelInValue = treeCheckStrictly || labelInValue;\n var mergedMultiple = mergedCheckable || multiple;\n var _useMergedState = useMergedState(defaultValue, {\n value: value\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n internalValue = _useMergedState2[0],\n setInternalValue = _useMergedState2[1];\n\n // `multiple` && `!treeCheckable` should be show all\n var mergedShowCheckedStrategy = React.useMemo(function () {\n if (!treeCheckable) {\n return SHOW_ALL;\n }\n return showCheckedStrategy || SHOW_CHILD;\n }, [showCheckedStrategy, treeCheckable]);\n\n // ========================== Warning ===========================\n if (process.env.NODE_ENV !== 'production') {\n warningProps(props);\n }\n\n // ========================= FieldNames =========================\n var mergedFieldNames = React.useMemo(function () {\n return fillFieldNames(fieldNames);\n }, /* eslint-disable react-hooks/exhaustive-deps */\n [JSON.stringify(fieldNames)]\n /* eslint-enable react-hooks/exhaustive-deps */);\n\n // =========================== Search ===========================\n var _useMergedState3 = useMergedState('', {\n value: searchValue !== undefined ? searchValue : inputValue,\n postState: function postState(search) {\n return search || '';\n }\n }),\n _useMergedState4 = _slicedToArray(_useMergedState3, 2),\n mergedSearchValue = _useMergedState4[0],\n setSearchValue = _useMergedState4[1];\n var onInternalSearch = function onInternalSearch(searchText) {\n setSearchValue(searchText);\n onSearch === null || onSearch === void 0 || onSearch(searchText);\n };\n\n // ============================ Data ============================\n // `useTreeData` only do convert of `children` or `simpleMode`.\n // Else will return origin `treeData` for perf consideration.\n // Do not do anything to loop the data.\n var mergedTreeData = useTreeData(treeData, children, treeDataSimpleMode);\n var _useDataEntities = useDataEntities(mergedTreeData, mergedFieldNames),\n keyEntities = _useDataEntities.keyEntities,\n valueEntities = _useDataEntities.valueEntities;\n\n /** Get `missingRawValues` which not exist in the tree yet */\n var splitRawValues = React.useCallback(function (newRawValues) {\n var missingRawValues = [];\n var existRawValues = [];\n\n // Keep missing value in the cache\n newRawValues.forEach(function (val) {\n if (valueEntities.has(val)) {\n existRawValues.push(val);\n } else {\n missingRawValues.push(val);\n }\n });\n return {\n missingRawValues: missingRawValues,\n existRawValues: existRawValues\n };\n }, [valueEntities]);\n\n // Filtered Tree\n var filteredTreeData = useFilterTreeData(mergedTreeData, mergedSearchValue, {\n fieldNames: mergedFieldNames,\n treeNodeFilterProp: treeNodeFilterProp,\n filterTreeNode: filterTreeNode\n });\n\n // =========================== Label ============================\n var getLabel = React.useCallback(function (item) {\n if (item) {\n if (treeNodeLabelProp) {\n return item[treeNodeLabelProp];\n }\n\n // Loop from fieldNames\n var titleList = mergedFieldNames._title;\n for (var i = 0; i < titleList.length; i += 1) {\n var title = item[titleList[i]];\n if (title !== undefined) {\n return title;\n }\n }\n }\n }, [mergedFieldNames, treeNodeLabelProp]);\n\n // ========================= Wrap Value =========================\n var toLabeledValues = React.useCallback(function (draftValues) {\n var values = toArray(draftValues);\n return values.map(function (val) {\n if (isRawValue(val)) {\n return {\n value: val\n };\n }\n return val;\n });\n }, []);\n var convert2LabelValues = React.useCallback(function (draftValues) {\n var values = toLabeledValues(draftValues);\n return values.map(function (item) {\n var rawLabel = item.label;\n var rawValue = item.value,\n rawHalfChecked = item.halfChecked;\n var rawDisabled;\n var entity = valueEntities.get(rawValue);\n\n // Fill missing label & status\n if (entity) {\n var _rawLabel;\n rawLabel = treeTitleRender ? treeTitleRender(entity.node) : (_rawLabel = rawLabel) !== null && _rawLabel !== void 0 ? _rawLabel : getLabel(entity.node);\n rawDisabled = entity.node.disabled;\n } else if (rawLabel === undefined) {\n // We try to find in current `labelInValue` value\n var labelInValueItem = toLabeledValues(internalValue).find(function (labeledItem) {\n return labeledItem.value === rawValue;\n });\n rawLabel = labelInValueItem.label;\n }\n return {\n label: rawLabel,\n value: rawValue,\n halfChecked: rawHalfChecked,\n disabled: rawDisabled\n };\n });\n }, [valueEntities, getLabel, toLabeledValues, internalValue]);\n\n // =========================== Values ===========================\n var rawMixedLabeledValues = React.useMemo(function () {\n return toLabeledValues(internalValue === null ? [] : internalValue);\n }, [toLabeledValues, internalValue]);\n\n // Split value into full check and half check\n var _React$useMemo = React.useMemo(function () {\n var fullCheckValues = [];\n var halfCheckValues = [];\n rawMixedLabeledValues.forEach(function (item) {\n if (item.halfChecked) {\n halfCheckValues.push(item);\n } else {\n fullCheckValues.push(item);\n }\n });\n return [fullCheckValues, halfCheckValues];\n }, [rawMixedLabeledValues]),\n _React$useMemo2 = _slicedToArray(_React$useMemo, 2),\n rawLabeledValues = _React$useMemo2[0],\n rawHalfLabeledValues = _React$useMemo2[1];\n\n // const [mergedValues] = useCache(rawLabeledValues);\n var rawValues = React.useMemo(function () {\n return rawLabeledValues.map(function (item) {\n return item.value;\n });\n }, [rawLabeledValues]);\n\n // Convert value to key. Will fill missed keys for conduct check.\n var _useCheckedKeys = useCheckedKeys(rawLabeledValues, rawHalfLabeledValues, treeConduction, keyEntities),\n _useCheckedKeys2 = _slicedToArray(_useCheckedKeys, 2),\n rawCheckedValues = _useCheckedKeys2[0],\n rawHalfCheckedValues = _useCheckedKeys2[1];\n\n // Convert rawCheckedKeys to check strategy related values\n var displayValues = React.useMemo(function () {\n // Collect keys which need to show\n var displayKeys = formatStrategyValues(rawCheckedValues, mergedShowCheckedStrategy, keyEntities, mergedFieldNames);\n\n // Convert to value and filled with label\n var values = displayKeys.map(function (key) {\n var _keyEntities$key$node, _keyEntities$key;\n return (_keyEntities$key$node = (_keyEntities$key = keyEntities[key]) === null || _keyEntities$key === void 0 || (_keyEntities$key = _keyEntities$key.node) === null || _keyEntities$key === void 0 ? void 0 : _keyEntities$key[mergedFieldNames.value]) !== null && _keyEntities$key$node !== void 0 ? _keyEntities$key$node : key;\n });\n\n // Back fill with origin label\n var labeledValues = values.map(function (val) {\n var targetItem = rawLabeledValues.find(function (item) {\n return item.value === val;\n });\n var label = labelInValue ? targetItem === null || targetItem === void 0 ? void 0 : targetItem.label : treeTitleRender === null || treeTitleRender === void 0 ? void 0 : treeTitleRender(targetItem);\n return {\n value: val,\n label: label\n };\n });\n var rawDisplayValues = convert2LabelValues(labeledValues);\n var firstVal = rawDisplayValues[0];\n if (!mergedMultiple && firstVal && isNil(firstVal.value) && isNil(firstVal.label)) {\n return [];\n }\n return rawDisplayValues.map(function (item) {\n var _item$label;\n return _objectSpread(_objectSpread({}, item), {}, {\n label: (_item$label = item.label) !== null && _item$label !== void 0 ? _item$label : item.value\n });\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [mergedFieldNames, mergedMultiple, rawCheckedValues, rawLabeledValues, convert2LabelValues, mergedShowCheckedStrategy, keyEntities]);\n var _useCache = useCache(displayValues),\n _useCache2 = _slicedToArray(_useCache, 1),\n cachedDisplayValues = _useCache2[0];\n\n // ========================== MaxCount ==========================\n var mergedMaxCount = React.useMemo(function () {\n if (mergedMultiple && (mergedShowCheckedStrategy === 'SHOW_CHILD' || treeCheckStrictly || !treeCheckable)) {\n return maxCount;\n }\n return null;\n }, [maxCount, mergedMultiple, treeCheckStrictly, mergedShowCheckedStrategy, treeCheckable]);\n\n // =========================== Change ===========================\n var triggerChange = useRefFunc(function (newRawValues, extra, source) {\n var formattedKeyList = formatStrategyValues(newRawValues, mergedShowCheckedStrategy, keyEntities, mergedFieldNames);\n\n // Not allow pass with `maxCount`\n if (mergedMaxCount && formattedKeyList.length > mergedMaxCount) {\n return;\n }\n var labeledValues = convert2LabelValues(newRawValues);\n setInternalValue(labeledValues);\n\n // Clean up if needed\n if (autoClearSearchValue) {\n setSearchValue('');\n }\n\n // Generate rest parameters is costly, so only do it when necessary\n if (onChange) {\n var eventValues = newRawValues;\n if (treeConduction) {\n eventValues = formattedKeyList.map(function (key) {\n var entity = valueEntities.get(key);\n return entity ? entity.node[mergedFieldNames.value] : key;\n });\n }\n var _ref = extra || {\n triggerValue: undefined,\n selected: undefined\n },\n triggerValue = _ref.triggerValue,\n selected = _ref.selected;\n var returnRawValues = eventValues;\n\n // We need fill half check back\n if (treeCheckStrictly) {\n var halfValues = rawHalfLabeledValues.filter(function (item) {\n return !eventValues.includes(item.value);\n });\n returnRawValues = [].concat(_toConsumableArray(returnRawValues), _toConsumableArray(halfValues));\n }\n var returnLabeledValues = convert2LabelValues(returnRawValues);\n var additionalInfo = {\n // [Legacy] Always return as array contains label & value\n preValue: rawLabeledValues,\n triggerValue: triggerValue\n };\n\n // [Legacy] Fill legacy data if user query.\n // This is expansive that we only fill when user query\n // https://github.com/react-component/tree-select/blob/fe33eb7c27830c9ac70cd1fdb1ebbe7bc679c16a/src/Select.jsx\n var showPosition = true;\n if (treeCheckStrictly || source === 'selection' && !selected) {\n showPosition = false;\n }\n fillAdditionalInfo(additionalInfo, triggerValue, newRawValues, mergedTreeData, showPosition, mergedFieldNames);\n if (mergedCheckable) {\n additionalInfo.checked = selected;\n } else {\n additionalInfo.selected = selected;\n }\n var returnValues = mergedLabelInValue ? returnLabeledValues : returnLabeledValues.map(function (item) {\n return item.value;\n });\n onChange(mergedMultiple ? returnValues : returnValues[0], mergedLabelInValue ? null : returnLabeledValues.map(function (item) {\n return item.label;\n }), additionalInfo);\n }\n });\n\n // ========================== Options ===========================\n /** Trigger by option list */\n var onOptionSelect = React.useCallback(function (selectedKey, _ref2) {\n var _node$mergedFieldName;\n var selected = _ref2.selected,\n source = _ref2.source;\n var entity = keyEntities[selectedKey];\n var node = entity === null || entity === void 0 ? void 0 : entity.node;\n var selectedValue = (_node$mergedFieldName = node === null || node === void 0 ? void 0 : node[mergedFieldNames.value]) !== null && _node$mergedFieldName !== void 0 ? _node$mergedFieldName : selectedKey;\n\n // Never be falsy but keep it safe\n if (!mergedMultiple) {\n // Single mode always set value\n triggerChange([selectedValue], {\n selected: true,\n triggerValue: selectedValue\n }, 'option');\n } else {\n var newRawValues = selected ? [].concat(_toConsumableArray(rawValues), [selectedValue]) : rawCheckedValues.filter(function (v) {\n return v !== selectedValue;\n });\n\n // Add keys if tree conduction\n if (treeConduction) {\n // Should keep missing values\n var _splitRawValues = splitRawValues(newRawValues),\n missingRawValues = _splitRawValues.missingRawValues,\n existRawValues = _splitRawValues.existRawValues;\n var keyList = existRawValues.map(function (val) {\n return valueEntities.get(val).key;\n });\n\n // Conduction by selected or not\n var checkedKeys;\n if (selected) {\n var _conductCheck = conductCheck(keyList, true, keyEntities);\n checkedKeys = _conductCheck.checkedKeys;\n } else {\n var _conductCheck2 = conductCheck(keyList, {\n checked: false,\n halfCheckedKeys: rawHalfCheckedValues\n }, keyEntities);\n checkedKeys = _conductCheck2.checkedKeys;\n }\n\n // Fill back of keys\n newRawValues = [].concat(_toConsumableArray(missingRawValues), _toConsumableArray(checkedKeys.map(function (key) {\n return keyEntities[key].node[mergedFieldNames.value];\n })));\n }\n triggerChange(newRawValues, {\n selected: selected,\n triggerValue: selectedValue\n }, source || 'option');\n }\n\n // Trigger select event\n if (selected || !mergedMultiple) {\n onSelect === null || onSelect === void 0 || onSelect(selectedValue, fillLegacyProps(node));\n } else {\n onDeselect === null || onDeselect === void 0 || onDeselect(selectedValue, fillLegacyProps(node));\n }\n }, [splitRawValues, valueEntities, keyEntities, mergedFieldNames, mergedMultiple, rawValues, triggerChange, treeConduction, onSelect, onDeselect, rawCheckedValues, rawHalfCheckedValues, maxCount]);\n\n // ========================== Dropdown ==========================\n var onInternalDropdownVisibleChange = React.useCallback(function (open) {\n if (onDropdownVisibleChange) {\n var legacyParam = {};\n Object.defineProperty(legacyParam, 'documentClickClose', {\n get: function get() {\n warning(false, 'Second param of `onDropdownVisibleChange` has been removed.');\n return false;\n }\n });\n onDropdownVisibleChange(open, legacyParam);\n }\n }, [onDropdownVisibleChange]);\n\n // ====================== Display Change ========================\n var onDisplayValuesChange = useRefFunc(function (newValues, info) {\n var newRawValues = newValues.map(function (item) {\n return item.value;\n });\n if (info.type === 'clear') {\n triggerChange(newRawValues, {}, 'selection');\n return;\n }\n\n // TreeSelect only have multiple mode which means display change only has remove\n if (info.values.length) {\n onOptionSelect(info.values[0].value, {\n selected: false,\n source: 'selection'\n });\n }\n });\n\n // ========================== Context ===========================\n var treeSelectContext = React.useMemo(function () {\n return {\n virtual: virtual,\n dropdownMatchSelectWidth: dropdownMatchSelectWidth,\n listHeight: listHeight,\n listItemHeight: listItemHeight,\n listItemScrollOffset: listItemScrollOffset,\n treeData: filteredTreeData,\n fieldNames: mergedFieldNames,\n onSelect: onOptionSelect,\n treeExpandAction: treeExpandAction,\n treeTitleRender: treeTitleRender,\n onPopupScroll: onPopupScroll,\n leftMaxCount: maxCount === undefined ? null : maxCount - cachedDisplayValues.length,\n leafCountOnly: mergedShowCheckedStrategy === 'SHOW_CHILD' && !treeCheckStrictly && !!treeCheckable,\n valueEntities: valueEntities\n };\n }, [virtual, dropdownMatchSelectWidth, listHeight, listItemHeight, listItemScrollOffset, filteredTreeData, mergedFieldNames, onOptionSelect, treeExpandAction, treeTitleRender, onPopupScroll, maxCount, cachedDisplayValues.length, mergedShowCheckedStrategy, treeCheckStrictly, treeCheckable, valueEntities]);\n\n // ======================= Legacy Context =======================\n var legacyContext = React.useMemo(function () {\n return {\n checkable: mergedCheckable,\n loadData: loadData,\n treeLoadedKeys: treeLoadedKeys,\n onTreeLoad: onTreeLoad,\n checkedKeys: rawCheckedValues,\n halfCheckedKeys: rawHalfCheckedValues,\n treeDefaultExpandAll: treeDefaultExpandAll,\n treeExpandedKeys: treeExpandedKeys,\n treeDefaultExpandedKeys: treeDefaultExpandedKeys,\n onTreeExpand: onTreeExpand,\n treeIcon: treeIcon,\n treeMotion: treeMotion,\n showTreeIcon: showTreeIcon,\n switcherIcon: switcherIcon,\n treeLine: treeLine,\n treeNodeFilterProp: treeNodeFilterProp,\n keyEntities: keyEntities\n };\n }, [mergedCheckable, loadData, treeLoadedKeys, onTreeLoad, rawCheckedValues, rawHalfCheckedValues, treeDefaultExpandAll, treeExpandedKeys, treeDefaultExpandedKeys, onTreeExpand, treeIcon, treeMotion, showTreeIcon, switcherIcon, treeLine, treeNodeFilterProp, keyEntities]);\n\n // =========================== Render ===========================\n return /*#__PURE__*/React.createElement(TreeSelectContext.Provider, {\n value: treeSelectContext\n }, /*#__PURE__*/React.createElement(LegacyContext.Provider, {\n value: legacyContext\n }, /*#__PURE__*/React.createElement(BaseSelect, _extends({\n ref: ref\n }, restProps, {\n // >>> MISC\n id: mergedId,\n prefixCls: prefixCls,\n mode: mergedMultiple ? 'multiple' : undefined\n // >>> Display Value\n ,\n displayValues: cachedDisplayValues,\n onDisplayValuesChange: onDisplayValuesChange\n // >>> Search\n ,\n searchValue: mergedSearchValue,\n onSearch: onInternalSearch\n // >>> Options\n ,\n OptionList: OptionList,\n emptyOptions: !mergedTreeData.length,\n onDropdownVisibleChange: onInternalDropdownVisibleChange,\n dropdownMatchSelectWidth: dropdownMatchSelectWidth\n }))));\n});\n\n// Assign name for Debug\nif (process.env.NODE_ENV !== 'production') {\n TreeSelect.displayName = 'TreeSelect';\n}\nvar GenericTreeSelect = TreeSelect;\nGenericTreeSelect.TreeNode = TreeNode;\nGenericTreeSelect.SHOW_ALL = SHOW_ALL;\nGenericTreeSelect.SHOW_PARENT = SHOW_PARENT;\nGenericTreeSelect.SHOW_CHILD = SHOW_CHILD;\nexport default GenericTreeSelect;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nimport { convertChildrenToData } from \"../utils/legacyUtil\";\nfunction buildTreeStructure(nodes, config) {\n var id = config.id,\n pId = config.pId,\n rootPId = config.rootPId;\n var nodeMap = new Map();\n var rootNodes = [];\n nodes.forEach(function (node) {\n var nodeKey = node[id];\n var clonedNode = _objectSpread(_objectSpread({}, node), {}, {\n key: node.key || nodeKey\n });\n nodeMap.set(nodeKey, clonedNode);\n });\n nodeMap.forEach(function (node) {\n var parentKey = node[pId];\n var parent = nodeMap.get(parentKey);\n if (parent) {\n parent.children = parent.children || [];\n parent.children.push(node);\n } else if (parentKey === rootPId || rootPId === null) {\n rootNodes.push(node);\n }\n });\n return rootNodes;\n}\n\n/**\n * 将 `treeData` 或 `children` 转换为格式化的 `treeData`。\n * 如果 `treeData` 或 `children` 没有变化,则不会重新计算。\n */\nexport default function useTreeData(treeData, children, simpleMode) {\n return React.useMemo(function () {\n if (treeData) {\n if (simpleMode) {\n var config = _objectSpread({\n id: 'id',\n pId: 'pId',\n rootPId: null\n }, _typeof(simpleMode) === 'object' ? simpleMode : {});\n return buildTreeStructure(treeData, config);\n }\n return treeData;\n }\n return convertChildrenToData(children);\n }, [children, simpleMode, treeData]);\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nimport { convertDataToEntities } from \"rc-tree/es/utils/treeUtil\";\nimport warning from \"rc-util/es/warning\";\nimport { isNil } from \"../utils/valueUtil\";\nexport default (function (treeData, fieldNames) {\n return React.useMemo(function () {\n var collection = convertDataToEntities(treeData, {\n fieldNames: fieldNames,\n initWrapper: function initWrapper(wrapper) {\n return _objectSpread(_objectSpread({}, wrapper), {}, {\n valueEntities: new Map()\n });\n },\n processEntity: function processEntity(entity, wrapper) {\n var val = entity.node[fieldNames.value];\n\n // Check if exist same value\n if (process.env.NODE_ENV !== 'production') {\n var key = entity.node.key;\n warning(!isNil(val), 'TreeNode `value` is invalidate: undefined');\n warning(!wrapper.valueEntities.has(val), \"Same `value` exist in the tree: \".concat(val));\n warning(!key || String(key) === String(val), \"`key` or `value` with TreeNode must be the same or you can remove one of them. key: \".concat(key, \", value: \").concat(val, \".\"));\n }\n wrapper.valueEntities.set(val, entity);\n }\n });\n return collection;\n }, [treeData, fieldNames]);\n});","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport * as React from 'react';\nimport { conductCheck } from \"rc-tree/es/utils/conductUtil\";\nvar useCheckedKeys = function useCheckedKeys(rawLabeledValues, rawHalfCheckedValues, treeConduction, keyEntities) {\n return React.useMemo(function () {\n var extractValues = function extractValues(values) {\n return values.map(function (_ref) {\n var value = _ref.value;\n return value;\n });\n };\n var checkedKeys = extractValues(rawLabeledValues);\n var halfCheckedKeys = extractValues(rawHalfCheckedValues);\n var missingValues = checkedKeys.filter(function (key) {\n return !keyEntities[key];\n });\n var finalCheckedKeys = checkedKeys;\n var finalHalfCheckedKeys = halfCheckedKeys;\n if (treeConduction) {\n var conductResult = conductCheck(checkedKeys, true, keyEntities);\n finalCheckedKeys = conductResult.checkedKeys;\n finalHalfCheckedKeys = conductResult.halfCheckedKeys;\n }\n return [Array.from(new Set([].concat(_toConsumableArray(missingValues), _toConsumableArray(finalCheckedKeys)))), finalHalfCheckedKeys];\n }, [rawLabeledValues, rawHalfCheckedValues, treeConduction, keyEntities]);\n};\nexport default useCheckedKeys;","import { unit } from '@ant-design/cssinjs';\nimport { getStyle as getCheckboxStyle } from '../../checkbox/style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport { genTreeStyle, initComponentToken } from '../../tree/style';\n// =============================== Base ===============================\nconst genBaseStyle = token => {\n const {\n componentCls,\n treePrefixCls,\n colorBgElevated\n } = token;\n const treeCls = `.${treePrefixCls}`;\n return [\n // ======================================================\n // == Dropdown ==\n // ======================================================\n {\n [`${componentCls}-dropdown`]: [{\n padding: `${unit(token.paddingXS)} ${unit(token.calc(token.paddingXS).div(2).equal())}`\n },\n // ====================== Tree ======================\n genTreeStyle(treePrefixCls, mergeToken(token, {\n colorBgContainer: colorBgElevated\n }), false), {\n [treeCls]: {\n borderRadius: 0,\n [`${treeCls}-list-holder-inner`]: {\n alignItems: 'stretch',\n [`${treeCls}-treenode`]: {\n [`${treeCls}-node-content-wrapper`]: {\n flex: 'auto'\n }\n }\n }\n }\n },\n // ==================== Checkbox ====================\n getCheckboxStyle(`${treePrefixCls}-checkbox`, token),\n // ====================== RTL =======================\n {\n '&-rtl': {\n direction: 'rtl',\n [`${treeCls}-switcher${treeCls}-switcher_close`]: {\n [`${treeCls}-switcher-icon svg`]: {\n transform: 'rotate(90deg)'\n }\n }\n }\n }]\n }];\n};\nexport const prepareComponentToken = initComponentToken;\n// ============================== Export ==============================\nexport default function useTreeSelectStyle(prefixCls, treePrefixCls, rootCls) {\n return genStyleHooks('TreeSelect', token => {\n const treeSelectToken = mergeToken(token, {\n treePrefixCls\n });\n return [genBaseStyle(treeSelectToken)];\n }, initComponentToken)(prefixCls, rootCls);\n}","\"use client\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport cls from 'classnames';\nimport RcTreeSelect, { SHOW_ALL, SHOW_CHILD, SHOW_PARENT, TreeNode } from 'rc-tree-select';\nimport omit from \"rc-util/es/omit\";\nimport { useZIndex } from '../_util/hooks/useZIndex';\nimport { getTransitionName } from '../_util/motion';\nimport genPurePanel from '../_util/PurePanel';\nimport { getMergedStatus, getStatusClassNames } from '../_util/statusUtils';\nimport { devUseWarning } from '../_util/warning';\nimport { ConfigContext } from '../config-provider';\nimport DefaultRenderEmpty from '../config-provider/defaultRenderEmpty';\nimport DisabledContext from '../config-provider/DisabledContext';\nimport useCSSVarCls from '../config-provider/hooks/useCSSVarCls';\nimport useSize from '../config-provider/hooks/useSize';\nimport { FormItemInputContext } from '../form/context';\nimport useVariant from '../form/hooks/useVariants';\nimport mergedBuiltinPlacements from '../select/mergedBuiltinPlacements';\nimport useSelectStyle from '../select/style';\nimport useIcons from '../select/useIcons';\nimport useShowArrow from '../select/useShowArrow';\nimport { useCompactItemContext } from '../space/Compact';\nimport { useToken } from '../theme/internal';\nimport SwitcherIconCom from '../tree/utils/iconUtil';\nimport useStyle from './style';\nimport { useComponentConfig } from '../config-provider/context';\nconst InternalTreeSelect = (props, ref) => {\n var _a, _b, _c, _d, _e;\n const {\n prefixCls: customizePrefixCls,\n size: customizeSize,\n disabled: customDisabled,\n bordered = true,\n style,\n className,\n rootClassName,\n treeCheckable,\n multiple,\n listHeight = 256,\n listItemHeight: customListItemHeight,\n placement,\n notFoundContent,\n switcherIcon,\n treeLine,\n getPopupContainer,\n popupClassName,\n dropdownClassName,\n treeIcon = false,\n transitionName,\n choiceTransitionName = '',\n status: customStatus,\n treeExpandAction,\n builtinPlacements,\n dropdownMatchSelectWidth,\n popupMatchSelectWidth,\n allowClear,\n variant: customVariant,\n dropdownStyle,\n dropdownRender,\n popupRender,\n onDropdownVisibleChange,\n onOpenChange,\n tagRender,\n maxCount,\n showCheckedStrategy,\n treeCheckStrictly,\n styles,\n classNames\n } = props,\n restProps = __rest(props, [\"prefixCls\", \"size\", \"disabled\", \"bordered\", \"style\", \"className\", \"rootClassName\", \"treeCheckable\", \"multiple\", \"listHeight\", \"listItemHeight\", \"placement\", \"notFoundContent\", \"switcherIcon\", \"treeLine\", \"getPopupContainer\", \"popupClassName\", \"dropdownClassName\", \"treeIcon\", \"transitionName\", \"choiceTransitionName\", \"status\", \"treeExpandAction\", \"builtinPlacements\", \"dropdownMatchSelectWidth\", \"popupMatchSelectWidth\", \"allowClear\", \"variant\", \"dropdownStyle\", \"dropdownRender\", \"popupRender\", \"onDropdownVisibleChange\", \"onOpenChange\", \"tagRender\", \"maxCount\", \"showCheckedStrategy\", \"treeCheckStrictly\", \"styles\", \"classNames\"]);\n const {\n getPopupContainer: getContextPopupContainer,\n getPrefixCls,\n renderEmpty,\n direction,\n virtual,\n popupMatchSelectWidth: contextPopupMatchSelectWidth,\n popupOverflow\n } = React.useContext(ConfigContext);\n const {\n styles: contextStyles,\n classNames: contextClassNames\n } = useComponentConfig('treeSelect');\n const [, token] = useToken();\n const listItemHeight = customListItemHeight !== null && customListItemHeight !== void 0 ? customListItemHeight : (token === null || token === void 0 ? void 0 : token.controlHeightSM) + (token === null || token === void 0 ? void 0 : token.paddingXXS);\n if (process.env.NODE_ENV !== 'production') {\n const warning = devUseWarning('TreeSelect');\n const deprecatedProps = {\n dropdownMatchSelectWidth: 'popupMatchSelectWidth',\n dropdownStyle: 'styles.popup.root',\n dropdownClassName: 'classNames.popup.root',\n popupClassName: 'classNames.popup.root',\n dropdownRender: 'popupRender',\n onDropdownVisibleChange: 'onOpenChange',\n bordered: 'variant'\n };\n Object.entries(deprecatedProps).forEach(([oldProp, newProp]) => {\n warning.deprecated(!(oldProp in props), oldProp, newProp);\n });\n process.env.NODE_ENV !== \"production\" ? warning(multiple !== false || !treeCheckable, 'usage', '`multiple` will always be `true` when `treeCheckable` is true') : void 0;\n process.env.NODE_ENV !== \"production\" ? warning(!('showArrow' in props), 'deprecated', '`showArrow` is deprecated which will be removed in next major version. It will be a default behavior, you can hide it by setting `suffixIcon` to null.') : void 0;\n }\n const rootPrefixCls = getPrefixCls();\n const prefixCls = getPrefixCls('select', customizePrefixCls);\n const treePrefixCls = getPrefixCls('select-tree', customizePrefixCls);\n const treeSelectPrefixCls = getPrefixCls('tree-select', customizePrefixCls);\n const {\n compactSize,\n compactItemClassnames\n } = useCompactItemContext(prefixCls, direction);\n const rootCls = useCSSVarCls(prefixCls);\n const treeSelectRootCls = useCSSVarCls(treeSelectPrefixCls);\n const [wrapCSSVar, hashId, cssVarCls] = useSelectStyle(prefixCls, rootCls);\n const [treeSelectWrapCSSVar] = useStyle(treeSelectPrefixCls, treePrefixCls, treeSelectRootCls);\n const [variant, enableVariantCls] = useVariant('treeSelect', customVariant, bordered);\n const mergedPopupClassName = cls(((_a = classNames === null || classNames === void 0 ? void 0 : classNames.popup) === null || _a === void 0 ? void 0 : _a.root) || ((_b = contextClassNames === null || contextClassNames === void 0 ? void 0 : contextClassNames.popup) === null || _b === void 0 ? void 0 : _b.root) || popupClassName || dropdownClassName, `${treeSelectPrefixCls}-dropdown`, {\n [`${treeSelectPrefixCls}-dropdown-rtl`]: direction === 'rtl'\n }, rootClassName, contextClassNames.root, classNames === null || classNames === void 0 ? void 0 : classNames.root, cssVarCls, rootCls, treeSelectRootCls, hashId);\n const mergedPopupStyle = ((_c = styles === null || styles === void 0 ? void 0 : styles.popup) === null || _c === void 0 ? void 0 : _c.root) || ((_d = contextStyles === null || contextStyles === void 0 ? void 0 : contextStyles.popup) === null || _d === void 0 ? void 0 : _d.root) || dropdownStyle;\n const mergedPopupRender = popupRender || dropdownRender;\n const mergedOnOpenChange = onOpenChange || onDropdownVisibleChange;\n const isMultiple = !!(treeCheckable || multiple);\n const mergedMaxCount = React.useMemo(() => {\n if (maxCount && (showCheckedStrategy === 'SHOW_ALL' && !treeCheckStrictly || showCheckedStrategy === 'SHOW_PARENT')) {\n return undefined;\n }\n return maxCount;\n }, [maxCount, showCheckedStrategy, treeCheckStrictly]);\n const showSuffixIcon = useShowArrow(props.suffixIcon, props.showArrow);\n const mergedPopupMatchSelectWidth = (_e = popupMatchSelectWidth !== null && popupMatchSelectWidth !== void 0 ? popupMatchSelectWidth : dropdownMatchSelectWidth) !== null && _e !== void 0 ? _e : contextPopupMatchSelectWidth;\n // ===================== Form =====================\n const {\n status: contextStatus,\n hasFeedback,\n isFormItemInput,\n feedbackIcon\n } = React.useContext(FormItemInputContext);\n const mergedStatus = getMergedStatus(contextStatus, customStatus);\n // ===================== Icons =====================\n const {\n suffixIcon,\n removeIcon,\n clearIcon\n } = useIcons(Object.assign(Object.assign({}, restProps), {\n multiple: isMultiple,\n showSuffixIcon,\n hasFeedback,\n feedbackIcon,\n prefixCls,\n componentName: 'TreeSelect'\n }));\n const mergedAllowClear = allowClear === true ? {\n clearIcon\n } : allowClear;\n // ===================== Empty =====================\n let mergedNotFound;\n if (notFoundContent !== undefined) {\n mergedNotFound = notFoundContent;\n } else {\n mergedNotFound = (renderEmpty === null || renderEmpty === void 0 ? void 0 : renderEmpty('Select')) || /*#__PURE__*/React.createElement(DefaultRenderEmpty, {\n componentName: \"Select\"\n });\n }\n // ==================== Render =====================\n const selectProps = omit(restProps, ['suffixIcon', 'removeIcon', 'clearIcon', 'itemIcon', 'switcherIcon', 'style']);\n // ===================== Placement =====================\n const memoizedPlacement = React.useMemo(() => {\n if (placement !== undefined) {\n return placement;\n }\n return direction === 'rtl' ? 'bottomRight' : 'bottomLeft';\n }, [placement, direction]);\n const mergedSize = useSize(ctx => {\n var _a;\n return (_a = customizeSize !== null && customizeSize !== void 0 ? customizeSize : compactSize) !== null && _a !== void 0 ? _a : ctx;\n });\n // ===================== Disabled =====================\n const disabled = React.useContext(DisabledContext);\n const mergedDisabled = customDisabled !== null && customDisabled !== void 0 ? customDisabled : disabled;\n const mergedClassName = cls(!customizePrefixCls && treeSelectPrefixCls, {\n [`${prefixCls}-lg`]: mergedSize === 'large',\n [`${prefixCls}-sm`]: mergedSize === 'small',\n [`${prefixCls}-rtl`]: direction === 'rtl',\n [`${prefixCls}-${variant}`]: enableVariantCls,\n [`${prefixCls}-in-form-item`]: isFormItemInput\n }, getStatusClassNames(prefixCls, mergedStatus, hasFeedback), compactItemClassnames, className, rootClassName, contextClassNames.root, classNames === null || classNames === void 0 ? void 0 : classNames.root, cssVarCls, rootCls, treeSelectRootCls, hashId);\n const renderSwitcherIcon = nodeProps => (/*#__PURE__*/React.createElement(SwitcherIconCom, {\n prefixCls: treePrefixCls,\n switcherIcon: switcherIcon,\n treeNodeProps: nodeProps,\n showLine: treeLine\n }));\n // ============================ zIndex ============================\n const [zIndex] = useZIndex('SelectLike', mergedPopupStyle === null || mergedPopupStyle === void 0 ? void 0 : mergedPopupStyle.zIndex);\n const returnNode = /*#__PURE__*/React.createElement(RcTreeSelect, Object.assign({\n virtual: virtual,\n disabled: mergedDisabled\n }, selectProps, {\n dropdownMatchSelectWidth: mergedPopupMatchSelectWidth,\n builtinPlacements: mergedBuiltinPlacements(builtinPlacements, popupOverflow),\n ref: ref,\n prefixCls: prefixCls,\n className: mergedClassName,\n style: Object.assign(Object.assign({}, styles === null || styles === void 0 ? void 0 : styles.root), style),\n listHeight: listHeight,\n listItemHeight: listItemHeight,\n treeCheckable: treeCheckable ? /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-tree-checkbox-inner`\n }) : treeCheckable,\n treeLine: !!treeLine,\n suffixIcon: suffixIcon,\n multiple: isMultiple,\n placement: memoizedPlacement,\n removeIcon: removeIcon,\n allowClear: mergedAllowClear,\n switcherIcon: renderSwitcherIcon,\n showTreeIcon: treeIcon,\n notFoundContent: mergedNotFound,\n getPopupContainer: getPopupContainer || getContextPopupContainer,\n treeMotion: null,\n dropdownClassName: mergedPopupClassName,\n dropdownStyle: Object.assign(Object.assign({}, mergedPopupStyle), {\n zIndex\n }),\n dropdownRender: mergedPopupRender,\n onDropdownVisibleChange: mergedOnOpenChange,\n choiceTransitionName: getTransitionName(rootPrefixCls, '', choiceTransitionName),\n transitionName: getTransitionName(rootPrefixCls, 'slide-up', transitionName),\n treeExpandAction: treeExpandAction,\n tagRender: isMultiple ? tagRender : undefined,\n maxCount: mergedMaxCount,\n showCheckedStrategy: showCheckedStrategy,\n treeCheckStrictly: treeCheckStrictly\n }));\n return wrapCSSVar(treeSelectWrapCSSVar(returnNode));\n};\nconst TreeSelectRef = /*#__PURE__*/React.forwardRef(InternalTreeSelect);\nconst TreeSelect = TreeSelectRef;\n// We don't care debug panel\n/* istanbul ignore next */\nconst PurePanel = genPurePanel(TreeSelect, 'dropdownAlign', props => omit(props, ['visible']));\nTreeSelect.TreeNode = TreeNode;\nTreeSelect.SHOW_ALL = SHOW_ALL;\nTreeSelect.SHOW_PARENT = SHOW_PARENT;\nTreeSelect.SHOW_CHILD = SHOW_CHILD;\nTreeSelect._InternalPanelDoNotUseOrYouWillBeFired = PurePanel;\nif (process.env.NODE_ENV !== 'production') {\n TreeSelect.displayName = 'TreeSelect';\n}\nexport { TreeNode };\nexport default TreeSelect;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"radioType\", \"renderFormItem\", \"mode\", \"light\", \"label\", \"render\"],\n _excluded2 = [\"onSearch\", \"onClear\", \"onChange\", \"onBlur\", \"showSearch\", \"autoClearSearchValue\", \"treeData\", \"fetchDataOnSearch\", \"searchValue\"];\nimport { useIntl } from '@ant-design/pro-provider';\nimport { FieldLabel, objectToMap, proFieldParsingText } from '@ant-design/pro-utils';\nimport { ConfigProvider, Spin, TreeSelect } from 'antd';\nimport classNames from 'classnames';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport React, { useContext, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { useFieldFetchData } from \"../Select\";\n\n// 兼容代码-----------\nimport \"antd/es/spin/style\";\nimport \"antd/es/tree-select/style\";\n//----------------------\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Tree select\n * A function that returns a React component.\n * @param ref\n */\nvar FieldTreeSelect = function FieldTreeSelect(_ref, ref) {\n var radioType = _ref.radioType,\n renderFormItem = _ref.renderFormItem,\n mode = _ref.mode,\n light = _ref.light,\n label = _ref.label,\n render = _ref.render,\n rest = _objectWithoutProperties(_ref, _excluded);\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var layoutClassName = getPrefixCls('pro-field-tree-select');\n var treeSelectRef = useRef(null);\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n open = _useState2[0],\n setOpen = _useState2[1];\n var _ref2 = rest.fieldProps,\n onSearch = _ref2.onSearch,\n _onClear = _ref2.onClear,\n propsOnChange = _ref2.onChange,\n _onBlur = _ref2.onBlur,\n showSearch = _ref2.showSearch,\n autoClearSearchValue = _ref2.autoClearSearchValue,\n treeData = _ref2.treeData,\n fetchDataOnSearch = _ref2.fetchDataOnSearch,\n propsSearchValue = _ref2.searchValue,\n fieldProps = _objectWithoutProperties(_ref2, _excluded2);\n var intl = useIntl();\n var _useFieldFetchData = useFieldFetchData(_objectSpread(_objectSpread({}, rest), {}, {\n defaultKeyWords: propsSearchValue\n })),\n _useFieldFetchData2 = _slicedToArray(_useFieldFetchData, 3),\n loading = _useFieldFetchData2[0],\n options = _useFieldFetchData2[1],\n _fetchData = _useFieldFetchData2[2];\n var _useMergedState = useMergedState(undefined, {\n onChange: onSearch,\n value: propsSearchValue\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n searchValue = _useMergedState2[0],\n setSearchValue = _useMergedState2[1];\n useImperativeHandle(ref, function () {\n return _objectSpread(_objectSpread({}, treeSelectRef.current || {}), {}, {\n fetchData: function fetchData(keyWord) {\n return _fetchData(keyWord);\n }\n });\n });\n var optionsValueEnum = useMemo(function () {\n if (mode !== 'read') return;\n /**\n * Support TreeSelect fieldNames\n * @see https://ant.design/components/tree-select-cn\n */\n var _ref3 = (fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.fieldNames) || {},\n _ref3$value = _ref3.value,\n valuePropsName = _ref3$value === void 0 ? 'value' : _ref3$value,\n _ref3$label = _ref3.label,\n labelPropsName = _ref3$label === void 0 ? 'label' : _ref3$label,\n _ref3$children = _ref3.children,\n childrenPropsName = _ref3$children === void 0 ? 'children' : _ref3$children;\n var valuesMap = new Map();\n var traverseOptions = function traverseOptions(_options) {\n if (!(_options !== null && _options !== void 0 && _options.length)) {\n return valuesMap;\n }\n var length = _options.length;\n var i = 0;\n while (i < length) {\n var cur = _options[i++];\n valuesMap.set(cur[valuePropsName], cur[labelPropsName]);\n traverseOptions(cur[childrenPropsName]);\n }\n return valuesMap;\n };\n return traverseOptions(options);\n }, [fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.fieldNames, mode, options]);\n var onChange = function onChange(value, optionList, extra) {\n // 将搜索框置空 和 antd 行为保持一致\n if (showSearch && autoClearSearchValue) {\n _fetchData(undefined);\n setSearchValue(undefined);\n }\n propsOnChange === null || propsOnChange === void 0 || propsOnChange(value, optionList, extra);\n };\n if (mode === 'read') {\n var dom = /*#__PURE__*/_jsx(_Fragment, {\n children: proFieldParsingText(rest.text, objectToMap(rest.valueEnum || optionsValueEnum))\n });\n if (render) {\n var _render;\n return (_render = render(rest.text, _objectSpread(_objectSpread({\n mode: mode\n }, fieldProps), {}, {\n treeData: options\n }), dom)) !== null && _render !== void 0 ? _render : null;\n }\n return dom;\n }\n if (mode === 'edit') {\n var _fieldProps$value;\n var valuesLength = Array.isArray(fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.value) ? fieldProps === null || fieldProps === void 0 || (_fieldProps$value = fieldProps.value) === null || _fieldProps$value === void 0 ? void 0 : _fieldProps$value.length : 0;\n var _dom = /*#__PURE__*/_jsx(Spin, {\n spinning: loading,\n children: /*#__PURE__*/_jsx(TreeSelect, _objectSpread(_objectSpread({\n open: open,\n onDropdownVisibleChange: function onDropdownVisibleChange(isOpen) {\n var _fieldProps$onDropdow;\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onDropdow = fieldProps.onDropdownVisibleChange) === null || _fieldProps$onDropdow === void 0 || _fieldProps$onDropdow.call(fieldProps, isOpen);\n setOpen(isOpen);\n },\n ref: treeSelectRef,\n popupMatchSelectWidth: !light,\n placeholder: intl.getMessage('tableForm.selectPlaceholder', '请选择'),\n tagRender: light ? function (item) {\n var _fieldProps$value2;\n if (valuesLength < 2) return /*#__PURE__*/_jsx(_Fragment, {\n children: item.label\n });\n /**\n * 性能不好,等我给 antd 提个issue\n */\n var itemIndex = fieldProps === null || fieldProps === void 0 || (_fieldProps$value2 = fieldProps.value) === null || _fieldProps$value2 === void 0 ? void 0 : _fieldProps$value2.findIndex(function (v) {\n return v === item.value || v.value === item.value;\n });\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [item.label, \" \", itemIndex < valuesLength - 1 ? ',' : '']\n });\n } : undefined,\n bordered: !light\n }, fieldProps), {}, {\n treeData: options,\n showSearch: showSearch,\n style: _objectSpread({\n minWidth: 60\n }, fieldProps.style),\n allowClear: fieldProps.allowClear !== false,\n searchValue: searchValue,\n autoClearSearchValue: autoClearSearchValue,\n onClear: function onClear() {\n _onClear === null || _onClear === void 0 || _onClear();\n _fetchData(undefined);\n if (showSearch) {\n setSearchValue(undefined);\n }\n },\n onChange: onChange,\n onSearch: function onSearch(value) {\n // fix 不支持请求的情况下不刷新options\n if (fetchDataOnSearch && rest !== null && rest !== void 0 && rest.request) {\n _fetchData(value);\n }\n setSearchValue(value);\n },\n onBlur: function onBlur(event) {\n setSearchValue(undefined);\n _fetchData(undefined);\n _onBlur === null || _onBlur === void 0 || _onBlur(event);\n },\n className: classNames(fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.className, layoutClassName)\n }))\n });\n if (renderFormItem) {\n var _renderFormItem;\n _dom = (_renderFormItem = renderFormItem(rest.text, _objectSpread(_objectSpread({\n mode: mode\n }, fieldProps), {}, {\n options: options,\n loading: loading\n }), _dom)) !== null && _renderFormItem !== void 0 ? _renderFormItem : null;\n }\n if (light) {\n var _fieldProps$value3;\n var disabled = fieldProps.disabled,\n placeholder = fieldProps.placeholder;\n var notEmpty = !!fieldProps.value && ((_fieldProps$value3 = fieldProps.value) === null || _fieldProps$value3 === void 0 ? void 0 : _fieldProps$value3.length) !== 0;\n return /*#__PURE__*/_jsx(FieldLabel, {\n label: label,\n disabled: disabled,\n placeholder: placeholder,\n onClick: function onClick() {\n var _fieldProps$onDropdow2;\n setOpen(true);\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onDropdow2 = fieldProps.onDropdownVisibleChange) === null || _fieldProps$onDropdow2 === void 0 || _fieldProps$onDropdow2.call(fieldProps, true);\n },\n bordered: rest.bordered,\n value: notEmpty || open ? _dom : null,\n style: notEmpty ? {\n paddingInlineEnd: 0\n } : undefined,\n allowClear: false,\n downIcon: false\n });\n }\n return _dom;\n }\n return null;\n};\nexport default /*#__PURE__*/React.forwardRef(FieldTreeSelect);","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport React, { useCallback, useRef, useState } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nfunction FieldHOC(props) {\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n labelTrigger = _useState2[0],\n setLabelTrigger = _useState2[1];\n var lightLabel = useRef(null);\n\n // 是label且不是label里面的clear图标触发事件\n var isTriggeredByLabel = useCallback(function (e) {\n var _lightLabel$current, _lightLabel$current2;\n // 两条语句结果分别命名,可读性好点\n var isLabelMouseDown = (_lightLabel$current = lightLabel.current) === null || _lightLabel$current === void 0 || (_lightLabel$current = _lightLabel$current.labelRef) === null || _lightLabel$current === void 0 || (_lightLabel$current = _lightLabel$current.current) === null || _lightLabel$current === void 0 ? void 0 : _lightLabel$current.contains(e.target);\n var isClearMouseDown = (_lightLabel$current2 = lightLabel.current) === null || _lightLabel$current2 === void 0 || (_lightLabel$current2 = _lightLabel$current2.clearRef) === null || _lightLabel$current2 === void 0 || (_lightLabel$current2 = _lightLabel$current2.current) === null || _lightLabel$current2 === void 0 ? void 0 : _lightLabel$current2.contains(e.target);\n return isLabelMouseDown && !isClearMouseDown;\n }, [lightLabel]);\n var handleMouseDown = function handleMouseDown(e) {\n if (isTriggeredByLabel(e)) {\n setLabelTrigger(true);\n }\n };\n var handleMouseUp = function handleMouseUp() {\n setLabelTrigger(false);\n };\n if (props.isLight) {\n return /*#__PURE__*/_jsx(\"div\", {\n onMouseDown: handleMouseDown,\n onMouseUp: handleMouseUp,\n children: /*#__PURE__*/React.cloneElement(props.children, {\n labelTrigger: labelTrigger,\n lightLabel: lightLabel\n })\n });\n }\n return /*#__PURE__*/_jsx(_Fragment, {\n children: props.children\n });\n}\nexport default FieldHOC;","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar _excluded = [\"fieldProps\"],\n _excluded2 = [\"fieldProps\"],\n _excluded3 = [\"fieldProps\"],\n _excluded4 = [\"fieldProps\"],\n _excluded5 = [\"text\", \"valueType\", \"mode\", \"onChange\", \"renderFormItem\", \"value\", \"readonly\", \"fieldProps\"],\n _excluded6 = [\"placeholder\"];\nimport ProConfigContext from '@ant-design/pro-provider';\nimport { omitUndefined, pickProProps, useDeepCompareMemo, useRefFunction } from '@ant-design/pro-utils';\nimport { Avatar } from 'antd';\nimport React, { useContext } from 'react';\nimport FieldCascader from \"./components/Cascader\";\nimport FieldCheckbox from \"./components/Checkbox\";\nimport FieldCode from \"./components/Code\";\nimport FieldColorPicker from \"./components/ColorPicker\";\nimport FieldDatePicker from \"./components/DatePicker\";\nimport FieldDigit from \"./components/Digit\";\nimport FieldDigitRange from \"./components/DigitRange\";\nimport FieldFromNow from \"./components/FromNow\";\nimport FieldImage from \"./components/Image\";\nimport FieldIndexColumn from \"./components/IndexColumn\";\nimport FieldMoney from \"./components/Money\";\nimport FieldOptions from \"./components/Options\";\nimport FieldPassword from \"./components/Password\";\nimport FieldPercent from \"./components/Percent\";\nimport FieldProgress from \"./components/Progress\";\nimport FieldRadio from \"./components/Radio\";\nimport FieldRangePicker from \"./components/RangePicker\";\nimport FieldRate from \"./components/Rate\";\nimport FieldSecond from \"./components/Second\";\nimport FieldSegmented from \"./components/Segmented\";\nimport FieldSelect, { proFieldParsingValueEnumToArray } from \"./components/Select\";\nimport FieldSlider from \"./components/Slider\";\nimport FieldStatus from \"./components/Status\";\nimport FieldSwitch from \"./components/Switch\";\nimport FieldText from \"./components/Text\";\nimport FieldTextArea from \"./components/TextArea\";\nimport FieldTimePicker, { FieldTimeRangePicker } from \"./components/TimePicker\";\nimport FieldTreeSelect from \"./components/TreeSelect\";\nimport FieldHOC from \"./FieldHOC\";\nimport advancedFormat from 'dayjs/plugin/advancedFormat';\nimport isoWeek from 'dayjs/plugin/isoWeek';\nimport localeData from 'dayjs/plugin/localeData';\nimport localizedFormat from 'dayjs/plugin/localizedFormat';\nimport weekday from 'dayjs/plugin/weekday';\nimport weekOfYear from 'dayjs/plugin/weekOfYear';\nimport dayjs from 'dayjs';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\ndayjs.extend(localeData);\ndayjs.extend(advancedFormat);\ndayjs.extend(isoWeek);\ndayjs.extend(weekOfYear);\ndayjs.extend(weekday);\ndayjs.extend(localizedFormat);\n\n/** 默认的 Field 需要实现的功能 */\n// eslint-disable-next-line @typescript-eslint/ban-types\n\n/** 轻量筛选的field属性 */\n\n/** Value type by function */\n\n/**\n * Render valueType object\n *\n * @param text String | number\n * @param valueType ProColumnsValueObjectType\n */\nvar defaultRenderTextByObject = function defaultRenderTextByObject(text, valueType, props) {\n var pickFormItemProps = pickProProps(props.fieldProps);\n if (valueType.type === 'progress') {\n return /*#__PURE__*/_jsx(FieldProgress, _objectSpread(_objectSpread({}, props), {}, {\n text: text,\n fieldProps: _objectSpread({\n status: valueType.status ? valueType.status : undefined\n }, pickFormItemProps)\n }));\n }\n if (valueType.type === 'money') {\n return /*#__PURE__*/_jsx(FieldMoney, _objectSpread(_objectSpread({\n locale: valueType.locale\n }, props), {}, {\n fieldProps: pickFormItemProps,\n text: text,\n moneySymbol: valueType.moneySymbol\n }));\n }\n if (valueType.type === 'percent') {\n return /*#__PURE__*/_jsx(FieldPercent, _objectSpread(_objectSpread({}, props), {}, {\n text: text,\n showSymbol: valueType.showSymbol,\n precision: valueType.precision,\n fieldProps: pickFormItemProps,\n showColor: valueType.showColor\n }));\n }\n if (valueType.type === 'image') {\n return /*#__PURE__*/_jsx(FieldImage, _objectSpread(_objectSpread({}, props), {}, {\n text: text,\n width: valueType.width\n }));\n }\n return text;\n};\n\n/**\n * 根据不同的类型来转化数值\n *\n * @param dataValue\n * @param valueType\n */\nvar defaultRenderText = function defaultRenderText(dataValue, valueType, props, valueTypeMap) {\n var _props$mode = props.mode,\n mode = _props$mode === void 0 ? 'read' : _props$mode,\n _props$emptyText = props.emptyText,\n emptyText = _props$emptyText === void 0 ? '-' : _props$emptyText;\n if (emptyText !== false && mode === 'read' && valueType !== 'option' && valueType !== 'switch') {\n if (typeof dataValue !== 'boolean' && typeof dataValue !== 'number' && !dataValue) {\n var fieldProps = props.fieldProps,\n render = props.render;\n if (render) {\n return render(dataValue, _objectSpread({\n mode: mode\n }, fieldProps), /*#__PURE__*/_jsx(_Fragment, {\n children: emptyText\n }));\n }\n return /*#__PURE__*/_jsx(_Fragment, {\n children: emptyText\n });\n }\n }\n\n // eslint-disable-next-line no-param-reassign\n delete props.emptyText;\n if (_typeof(valueType) === 'object') {\n return defaultRenderTextByObject(dataValue, valueType, props);\n }\n var customValueTypeConfig = valueTypeMap && valueTypeMap[valueType];\n if (customValueTypeConfig) {\n // eslint-disable-next-line no-param-reassign\n delete props.ref;\n if (mode === 'read') {\n var _customValueTypeConfi;\n return (_customValueTypeConfi = customValueTypeConfig.render) === null || _customValueTypeConfi === void 0 ? void 0 : _customValueTypeConfi.call(customValueTypeConfig, dataValue, _objectSpread(_objectSpread({\n text: dataValue\n }, props), {}, {\n mode: mode || 'read'\n }), /*#__PURE__*/_jsx(_Fragment, {\n children: dataValue\n }));\n }\n if (mode === 'update' || mode === 'edit') {\n var _customValueTypeConfi2;\n return (_customValueTypeConfi2 = customValueTypeConfig.renderFormItem) === null || _customValueTypeConfi2 === void 0 ? void 0 : _customValueTypeConfi2.call(customValueTypeConfig, dataValue, _objectSpread({\n text: dataValue\n }, props), /*#__PURE__*/_jsx(_Fragment, {\n children: dataValue\n }));\n }\n }\n\n /** 如果是金额的值 */\n if (valueType === 'money') {\n return /*#__PURE__*/_jsx(FieldMoney, _objectSpread(_objectSpread({}, props), {}, {\n text: dataValue\n }));\n }\n\n /** 如果是日期的值 */\n if (valueType === 'date') {\n return /*#__PURE__*/_jsx(FieldHOC, {\n isLight: props.light,\n children: /*#__PURE__*/_jsx(FieldDatePicker, _objectSpread({\n text: dataValue,\n format: \"YYYY-MM-DD\"\n }, props))\n });\n }\n\n /** 如果是周的值 */\n if (valueType === 'dateWeek') {\n return /*#__PURE__*/_jsx(FieldHOC, {\n isLight: props.light,\n children: /*#__PURE__*/_jsx(FieldDatePicker, _objectSpread({\n text: dataValue,\n format: \"YYYY-wo\",\n picker: \"week\"\n }, props))\n });\n }\n\n /** 如果是周范围的值 */\n if (valueType === 'dateWeekRange') {\n var _fieldProps = props.fieldProps,\n otherProps = _objectWithoutProperties(props, _excluded);\n return /*#__PURE__*/_jsx(FieldHOC, {\n isLight: props.light,\n children: /*#__PURE__*/_jsx(FieldRangePicker, _objectSpread({\n text: dataValue,\n format: \"YYYY-W\",\n showTime: true,\n fieldProps: _objectSpread({\n picker: 'week'\n }, _fieldProps)\n }, otherProps))\n });\n }\n\n /** 如果是月范围的值 */\n if (valueType === 'dateMonthRange') {\n var _fieldProps2 = props.fieldProps,\n _otherProps = _objectWithoutProperties(props, _excluded2);\n return /*#__PURE__*/_jsx(FieldHOC, {\n isLight: props.light,\n children: /*#__PURE__*/_jsx(FieldRangePicker, _objectSpread({\n text: dataValue,\n format: \"YYYY-MM\",\n showTime: true,\n fieldProps: _objectSpread({\n picker: 'month'\n }, _fieldProps2)\n }, _otherProps))\n });\n }\n\n /** 如果是季范围的值 */\n if (valueType === 'dateQuarterRange') {\n var _fieldProps3 = props.fieldProps,\n _otherProps2 = _objectWithoutProperties(props, _excluded3);\n return /*#__PURE__*/_jsx(FieldHOC, {\n isLight: props.light,\n children: /*#__PURE__*/_jsx(FieldRangePicker, _objectSpread({\n text: dataValue,\n format: \"YYYY-Q\",\n showTime: true,\n fieldProps: _objectSpread({\n picker: 'quarter'\n }, _fieldProps3)\n }, _otherProps2))\n });\n }\n\n /** 如果是年范围的值 */\n if (valueType === 'dateYearRange') {\n var _fieldProps4 = props.fieldProps,\n _otherProps3 = _objectWithoutProperties(props, _excluded4);\n return /*#__PURE__*/_jsx(FieldHOC, {\n isLight: props.light,\n children: /*#__PURE__*/_jsx(FieldRangePicker, _objectSpread({\n text: dataValue,\n format: \"YYYY\",\n showTime: true,\n fieldProps: _objectSpread({\n picker: 'year'\n }, _fieldProps4)\n }, _otherProps3))\n });\n }\n\n /** 如果是月的值 */\n if (valueType === 'dateMonth') {\n return /*#__PURE__*/_jsx(FieldHOC, {\n isLight: props.light,\n children: /*#__PURE__*/_jsx(FieldDatePicker, _objectSpread({\n text: dataValue,\n format: \"YYYY-MM\",\n picker: \"month\"\n }, props))\n });\n }\n\n /** 如果是季度的值 */\n if (valueType === 'dateQuarter') {\n return /*#__PURE__*/_jsx(FieldHOC, {\n isLight: props.light,\n children: /*#__PURE__*/_jsx(FieldDatePicker, _objectSpread({\n text: dataValue,\n format: \"YYYY-[Q]Q\",\n picker: \"quarter\"\n }, props))\n });\n }\n\n /** 如果是年的值 */\n if (valueType === 'dateYear') {\n return /*#__PURE__*/_jsx(FieldHOC, {\n isLight: props.light,\n children: /*#__PURE__*/_jsx(FieldDatePicker, _objectSpread({\n text: dataValue,\n format: \"YYYY\",\n picker: \"year\"\n }, props))\n });\n }\n\n /** 如果是日期范围的值 */\n if (valueType === 'dateRange') {\n return /*#__PURE__*/_jsx(FieldRangePicker, _objectSpread({\n text: dataValue,\n format: \"YYYY-MM-DD\"\n }, props));\n }\n\n /** 如果是日期加时间类型的值 */\n if (valueType === 'dateTime') {\n return /*#__PURE__*/_jsx(FieldHOC, {\n isLight: props.light,\n children: /*#__PURE__*/_jsx(FieldDatePicker, _objectSpread({\n text: dataValue,\n format: \"YYYY-MM-DD HH:mm:ss\",\n showTime: true\n }, props))\n });\n }\n\n /** 如果是日期加时间类型的值的值 */\n if (valueType === 'dateTimeRange') {\n // 值不存在的时候显示 \"-\"\n return /*#__PURE__*/_jsx(FieldHOC, {\n isLight: props.light,\n children: /*#__PURE__*/_jsx(FieldRangePicker, _objectSpread({\n text: dataValue,\n format: \"YYYY-MM-DD HH:mm:ss\",\n showTime: true\n }, props))\n });\n }\n\n /** 如果是时间类型的值 */\n if (valueType === 'time') {\n return /*#__PURE__*/_jsx(FieldHOC, {\n isLight: props.light,\n children: /*#__PURE__*/_jsx(FieldTimePicker, _objectSpread({\n text: dataValue,\n format: \"HH:mm:ss\"\n }, props))\n });\n }\n\n /** 如果是时间类型的值 */\n if (valueType === 'timeRange') {\n return /*#__PURE__*/_jsx(FieldHOC, {\n isLight: props.light,\n children: /*#__PURE__*/_jsx(FieldTimeRangePicker, _objectSpread({\n text: dataValue,\n format: \"HH:mm:ss\"\n }, props))\n });\n }\n if (valueType === 'fromNow') {\n return /*#__PURE__*/_jsx(FieldFromNow, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'index') {\n return /*#__PURE__*/_jsx(FieldIndexColumn, {\n children: dataValue + 1\n });\n }\n if (valueType === 'indexBorder') {\n return /*#__PURE__*/_jsx(FieldIndexColumn, {\n border: true,\n children: dataValue + 1\n });\n }\n if (valueType === 'progress') {\n return /*#__PURE__*/_jsx(FieldProgress, _objectSpread(_objectSpread({}, props), {}, {\n text: dataValue\n }));\n }\n /** 百分比, 默认展示符号, 不展示小数位 */\n if (valueType === 'percent') {\n return /*#__PURE__*/_jsx(FieldPercent, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'avatar' && typeof dataValue === 'string' && props.mode === 'read') {\n return /*#__PURE__*/_jsx(Avatar, {\n src: dataValue,\n size: 22,\n shape: \"circle\"\n });\n }\n if (valueType === 'code') {\n return /*#__PURE__*/_jsx(FieldCode, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'jsonCode') {\n return /*#__PURE__*/_jsx(FieldCode, _objectSpread({\n text: dataValue,\n language: \"json\"\n }, props));\n }\n if (valueType === 'textarea') {\n return /*#__PURE__*/_jsx(FieldTextArea, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'digit') {\n return /*#__PURE__*/_jsx(FieldDigit, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'digitRange') {\n return /*#__PURE__*/_jsx(FieldDigitRange, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'second') {\n return /*#__PURE__*/_jsx(FieldSecond, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'select' || valueType === 'text' && (props.valueEnum || props.request)) {\n return /*#__PURE__*/_jsx(FieldHOC, {\n isLight: props.light,\n children: /*#__PURE__*/_jsx(FieldSelect, _objectSpread({\n text: dataValue\n }, props))\n });\n }\n if (valueType === 'checkbox') {\n return /*#__PURE__*/_jsx(FieldCheckbox, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'radio') {\n return /*#__PURE__*/_jsx(FieldRadio, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'radioButton') {\n return /*#__PURE__*/_jsx(FieldRadio, _objectSpread({\n radioType: \"button\",\n text: dataValue\n }, props));\n }\n if (valueType === 'rate') {\n return /*#__PURE__*/_jsx(FieldRate, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'slider') {\n return /*#__PURE__*/_jsx(FieldSlider, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'switch') {\n return /*#__PURE__*/_jsx(FieldSwitch, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'option') {\n return /*#__PURE__*/_jsx(FieldOptions, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'password') {\n return /*#__PURE__*/_jsx(FieldPassword, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'image') {\n return /*#__PURE__*/_jsx(FieldImage, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'cascader') {\n return /*#__PURE__*/_jsx(FieldCascader, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'treeSelect') {\n return /*#__PURE__*/_jsx(FieldTreeSelect, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'color') {\n return /*#__PURE__*/_jsx(FieldColorPicker, _objectSpread({\n text: dataValue\n }, props));\n }\n if (valueType === 'segmented') {\n return /*#__PURE__*/_jsx(FieldSegmented, _objectSpread({\n text: dataValue\n }, props));\n }\n return /*#__PURE__*/_jsx(FieldText, _objectSpread({\n text: dataValue\n }, props));\n};\nexport { defaultRenderText, FieldCode, FieldDatePicker, FieldIndexColumn, FieldMoney, FieldPercent, FieldProgress, FieldRangePicker, FieldSelect, FieldStatus, FieldText, FieldTimePicker, proFieldParsingValueEnumToArray };\n\n/** ProField 的类型 */\n\nvar ProFieldComponent = function ProFieldComponent(_ref, ref) {\n var _ref2, _fieldProps$value, _ref3, _rest$placeholder, _rest$placeholder2;\n var text = _ref.text,\n _ref$valueType = _ref.valueType,\n valueType = _ref$valueType === void 0 ? 'text' : _ref$valueType,\n _ref$mode = _ref.mode,\n mode = _ref$mode === void 0 ? 'read' : _ref$mode,\n onChange = _ref.onChange,\n renderFormItem = _ref.renderFormItem,\n value = _ref.value,\n readonly = _ref.readonly,\n restFieldProps = _ref.fieldProps,\n rest = _objectWithoutProperties(_ref, _excluded5);\n var context = useContext(ProConfigContext);\n var onChangeCallBack = useRefFunction(function () {\n var _restFieldProps$onCha;\n for (var _len = arguments.length, restParams = new Array(_len), _key = 0; _key < _len; _key++) {\n restParams[_key] = arguments[_key];\n }\n restFieldProps === null || restFieldProps === void 0 || (_restFieldProps$onCha = restFieldProps.onChange) === null || _restFieldProps$onCha === void 0 || _restFieldProps$onCha.call.apply(_restFieldProps$onCha, [restFieldProps].concat(restParams));\n onChange === null || onChange === void 0 || onChange.apply(void 0, restParams);\n });\n var fieldProps = useDeepCompareMemo(function () {\n return (value !== undefined || restFieldProps) && _objectSpread(_objectSpread({\n value: value\n }, omitUndefined(restFieldProps)), {}, {\n onChange: onChangeCallBack\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, restFieldProps, onChangeCallBack]);\n var renderedDom = defaultRenderText(mode === 'edit' ? (_ref2 = (_fieldProps$value = fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.value) !== null && _fieldProps$value !== void 0 ? _fieldProps$value : text) !== null && _ref2 !== void 0 ? _ref2 : '' : (_ref3 = text !== null && text !== void 0 ? text : fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.value) !== null && _ref3 !== void 0 ? _ref3 : '', valueType || 'text', omitUndefined(_objectSpread(_objectSpread({\n ref: ref\n }, rest), {}, {\n mode: readonly ? 'read' : mode,\n renderFormItem: renderFormItem ? function (curText, props, dom) {\n var _placeholder = props.placeholder,\n restProps = _objectWithoutProperties(props, _excluded6);\n var newDom = renderFormItem(curText, restProps, dom);\n // renderFormItem 之后的dom可能没有props,这里会帮忙注入一下\n if ( /*#__PURE__*/React.isValidElement(newDom)) return /*#__PURE__*/React.cloneElement(newDom, _objectSpread(_objectSpread({}, fieldProps), newDom.props || {}));\n return newDom;\n } : undefined,\n placeholder: renderFormItem ? undefined : (_rest$placeholder = rest === null || rest === void 0 ? void 0 : rest.placeholder) !== null && _rest$placeholder !== void 0 ? _rest$placeholder : fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.placeholder,\n fieldProps: pickProProps(omitUndefined(_objectSpread(_objectSpread({}, fieldProps), {}, {\n placeholder: renderFormItem ? undefined : (_rest$placeholder2 = rest === null || rest === void 0 ? void 0 : rest.placeholder) !== null && _rest$placeholder2 !== void 0 ? _rest$placeholder2 : fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.placeholder\n })))\n })), context.valueTypeMap || {});\n return /*#__PURE__*/_jsx(React.Fragment, {\n children: renderedDom\n });\n};\nexport var ProField = /*#__PURE__*/React.forwardRef(ProFieldComponent);\nexport default ProField;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"icon\", \"type\"],\n _excluded2 = [\"onClear\"];\nimport * as React from 'react';\nimport PickerContext from \"../context\";\nexport default function Icon(props) {\n var icon = props.icon,\n type = props.type,\n restProps = _objectWithoutProperties(props, _excluded);\n var _React$useContext = React.useContext(PickerContext),\n prefixCls = _React$useContext.prefixCls;\n return icon ? /*#__PURE__*/React.createElement(\"span\", _extends({\n className: \"\".concat(prefixCls, \"-\").concat(type)\n }, restProps), icon) : null;\n}\nexport function ClearIcon(_ref) {\n var onClear = _ref.onClear,\n restProps = _objectWithoutProperties(_ref, _excluded2);\n return /*#__PURE__*/React.createElement(Icon, _extends({}, restProps, {\n type: \"clear\",\n role: \"button\",\n onMouseDown: function onMouseDown(e) {\n e.preventDefault();\n },\n onClick: function onClick(e) {\n e.stopPropagation();\n onClear();\n }\n }));\n}","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ReactCSS = exports.loop = exports.handleActive = exports.handleHover = exports.hover = undefined;\n\nvar _flattenNames = require('./flattenNames');\n\nvar _flattenNames2 = _interopRequireDefault(_flattenNames);\n\nvar _mergeClasses = require('./mergeClasses');\n\nvar _mergeClasses2 = _interopRequireDefault(_mergeClasses);\n\nvar _autoprefix = require('./autoprefix');\n\nvar _autoprefix2 = _interopRequireDefault(_autoprefix);\n\nvar _hover2 = require('./components/hover');\n\nvar _hover3 = _interopRequireDefault(_hover2);\n\nvar _active = require('./components/active');\n\nvar _active2 = _interopRequireDefault(_active);\n\nvar _loop2 = require('./loop');\n\nvar _loop3 = _interopRequireDefault(_loop2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.hover = _hover3.default;\nexports.handleHover = _hover3.default;\nexports.handleActive = _active2.default;\nexports.loop = _loop3.default;\nvar ReactCSS = exports.ReactCSS = function ReactCSS(classes) {\n for (var _len = arguments.length, activations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n activations[_key - 1] = arguments[_key];\n }\n\n var activeNames = (0, _flattenNames2.default)(activations);\n var merged = (0, _mergeClasses2.default)(classes, activeNames);\n return (0, _autoprefix2.default)(merged);\n};\n\nexports.default = ReactCSS;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport merge from 'lodash-es/merge';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport { noteOnce } from \"rc-util/es/warning\";\nimport { createContext, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { genColumnKey } from \"../utils\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction useContainer() {\n var _props$columnsState6, _props$columnsState7, _props$columnsState10, _props$columnsState11, _props$columnsState15, _props$columnsState16;\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var actionRef = useRef();\n var rootDomRef = useRef(null);\n /** 父 form item 的 name */\n var prefixNameRef = useRef();\n\n /** 自己 props 的引用 */\n var propsRef = useRef();\n\n // 共享状态比较难,就放到这里了\n var _useState = useState(''),\n _useState2 = _slicedToArray(_useState, 2),\n keyWords = _useState2[0],\n _setKeyWords = _useState2[1];\n // 用于排序的数组\n var sortKeyColumns = useRef([]);\n var _useMergedState = useMergedState(function () {\n return props.size || props.defaultSize || 'middle';\n }, {\n value: props.size,\n onChange: props.onSizeChange\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n tableSize = _useMergedState2[0],\n setTableSize = _useMergedState2[1];\n\n /** 默认全选中 */\n var defaultColumnKeyMap = useMemo(function () {\n var _props$columnsState, _props$columns;\n if (props !== null && props !== void 0 && (_props$columnsState = props.columnsState) !== null && _props$columnsState !== void 0 && _props$columnsState.defaultValue) return props.columnsState.defaultValue;\n var columnKeyMap = {};\n (_props$columns = props.columns) === null || _props$columns === void 0 || _props$columns.forEach(function (_ref, index) {\n var key = _ref.key,\n dataIndex = _ref.dataIndex,\n fixed = _ref.fixed,\n disable = _ref.disable;\n var columnKey = genColumnKey(key !== null && key !== void 0 ? key : dataIndex, index);\n if (columnKey) {\n columnKeyMap[columnKey] = {\n show: true,\n fixed: fixed,\n disable: disable\n };\n }\n });\n return columnKeyMap;\n }, [props.columns]);\n var _useMergedState3 = useMergedState(function () {\n var _props$columnsState4, _props$columnsState5;\n var _ref2 = props.columnsState || {},\n persistenceType = _ref2.persistenceType,\n persistenceKey = _ref2.persistenceKey;\n if (persistenceKey && persistenceType && typeof window !== 'undefined') {\n /** 从持久化中读取数据 */\n var storage = window[persistenceType];\n try {\n var storageValue = storage === null || storage === void 0 ? void 0 : storage.getItem(persistenceKey);\n if (storageValue) {\n var _props$columnsState2;\n if (props !== null && props !== void 0 && (_props$columnsState2 = props.columnsState) !== null && _props$columnsState2 !== void 0 && _props$columnsState2.defaultValue) {\n var _props$columnsState3;\n // 实际生产中,defaultValue往往作为系统方默认配置,则优先级不应高于用户配置的storageValue\n return merge({}, props === null || props === void 0 || (_props$columnsState3 = props.columnsState) === null || _props$columnsState3 === void 0 ? void 0 : _props$columnsState3.defaultValue, JSON.parse(storageValue));\n }\n return JSON.parse(storageValue);\n }\n } catch (error) {\n console.warn(error);\n }\n }\n return props.columnsStateMap || ((_props$columnsState4 = props.columnsState) === null || _props$columnsState4 === void 0 ? void 0 : _props$columnsState4.value) || ((_props$columnsState5 = props.columnsState) === null || _props$columnsState5 === void 0 ? void 0 : _props$columnsState5.defaultValue) || defaultColumnKeyMap;\n }, {\n value: ((_props$columnsState6 = props.columnsState) === null || _props$columnsState6 === void 0 ? void 0 : _props$columnsState6.value) || props.columnsStateMap,\n onChange: ((_props$columnsState7 = props.columnsState) === null || _props$columnsState7 === void 0 ? void 0 : _props$columnsState7.onChange) || props.onColumnsStateChange\n }),\n _useMergedState4 = _slicedToArray(_useMergedState3, 2),\n columnsMap = _useMergedState4[0],\n setColumnsMap = _useMergedState4[1];\n\n /** 配置或列更改时对columnsMap重新赋值 */\n useEffect(function () {\n var _ref3 = props.columnsState || {},\n persistenceType = _ref3.persistenceType,\n persistenceKey = _ref3.persistenceKey;\n if (persistenceKey && persistenceType && typeof window !== 'undefined') {\n /** 从持久化中读取数据 */\n var storage = window[persistenceType];\n try {\n var storageValue = storage === null || storage === void 0 ? void 0 : storage.getItem(persistenceKey);\n if (storageValue) {\n var _props$columnsState8;\n if (props !== null && props !== void 0 && (_props$columnsState8 = props.columnsState) !== null && _props$columnsState8 !== void 0 && _props$columnsState8.defaultValue) {\n var _props$columnsState9;\n setColumnsMap(merge({}, props === null || props === void 0 || (_props$columnsState9 = props.columnsState) === null || _props$columnsState9 === void 0 ? void 0 : _props$columnsState9.defaultValue, JSON.parse(storageValue)));\n } else {\n setColumnsMap(JSON.parse(storageValue));\n }\n } else {\n setColumnsMap(defaultColumnKeyMap);\n }\n } catch (error) {\n console.warn(error);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [(_props$columnsState10 = props.columnsState) === null || _props$columnsState10 === void 0 ? void 0 : _props$columnsState10.persistenceKey, (_props$columnsState11 = props.columnsState) === null || _props$columnsState11 === void 0 ? void 0 : _props$columnsState11.persistenceType, defaultColumnKeyMap]);\n noteOnce(!props.columnsStateMap, 'columnsStateMap已经废弃,请使用 columnsState.value 替换');\n noteOnce(!props.columnsStateMap, 'columnsStateMap has been discarded, please use columnsState.value replacement');\n\n /** 清空一下当前的 key */\n var clearPersistenceStorage = useCallback(function () {\n var _ref4 = props.columnsState || {},\n persistenceType = _ref4.persistenceType,\n persistenceKey = _ref4.persistenceKey;\n if (!persistenceKey || !persistenceType || typeof window === 'undefined') return;\n\n /** 给持久化中设置数据 */\n var storage = window[persistenceType];\n try {\n storage === null || storage === void 0 || storage.removeItem(persistenceKey);\n } catch (error) {\n console.warn(error);\n }\n }, [props.columnsState]);\n useEffect(function () {\n var _props$columnsState12, _props$columnsState13;\n if (!((_props$columnsState12 = props.columnsState) !== null && _props$columnsState12 !== void 0 && _props$columnsState12.persistenceKey) || !((_props$columnsState13 = props.columnsState) !== null && _props$columnsState13 !== void 0 && _props$columnsState13.persistenceType)) {\n return;\n }\n if (typeof window === 'undefined') return;\n /** 给持久化中设置数据 */\n var _props$columnsState14 = props.columnsState,\n persistenceType = _props$columnsState14.persistenceType,\n persistenceKey = _props$columnsState14.persistenceKey;\n var storage = window[persistenceType];\n try {\n storage === null || storage === void 0 || storage.setItem(persistenceKey, JSON.stringify(columnsMap));\n } catch (error) {\n console.warn(error);\n clearPersistenceStorage();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [(_props$columnsState15 = props.columnsState) === null || _props$columnsState15 === void 0 ? void 0 : _props$columnsState15.persistenceKey, columnsMap, (_props$columnsState16 = props.columnsState) === null || _props$columnsState16 === void 0 ? void 0 : _props$columnsState16.persistenceType]);\n var renderValue = {\n action: actionRef.current,\n setAction: function setAction(newAction) {\n actionRef.current = newAction;\n },\n sortKeyColumns: sortKeyColumns.current,\n setSortKeyColumns: function setSortKeyColumns(keys) {\n sortKeyColumns.current = keys;\n },\n propsRef: propsRef,\n columnsMap: columnsMap,\n keyWords: keyWords,\n setKeyWords: function setKeyWords(k) {\n return _setKeyWords(k);\n },\n setTableSize: setTableSize,\n tableSize: tableSize,\n prefixName: prefixNameRef.current,\n setPrefixName: function setPrefixName(name) {\n prefixNameRef.current = name;\n },\n setColumnsMap: setColumnsMap,\n columns: props.columns,\n rootDomRef: rootDomRef,\n clearPersistenceStorage: clearPersistenceStorage,\n defaultColumnKeyMap: defaultColumnKeyMap\n };\n Object.defineProperty(renderValue, 'prefixName', {\n get: function get() {\n return prefixNameRef.current;\n }\n });\n Object.defineProperty(renderValue, 'sortKeyColumns', {\n get: function get() {\n return sortKeyColumns.current;\n }\n });\n Object.defineProperty(renderValue, 'action', {\n get: function get() {\n return actionRef.current;\n }\n });\n return renderValue;\n}\nvar TableContext = /*#__PURE__*/createContext({});\nvar Container = function Container(props) {\n var value = useContainer(props.initValue);\n return /*#__PURE__*/_jsx(TableContext.Provider, {\n value: value,\n children: props.children\n });\n};\nexport { Container, TableContext };","import { mat4, vec3 } from 'gl-matrix';\n// 该文件专门记录地球模式的数值\n\n// 地球网格半径\nexport const EARTH_RADIUS = 100;\nexport const EARTH_SEGMENTS = 36;\nexport const EARTH_RADIUS_OUTER = 40;\n\n/**\n * 角度转弧度\n * @param deg\n * @returns\n */\nfunction torad(deg) {\n return deg / 180 * Math.acos(-1);\n}\n/**\n * 经纬度转xyz\n * @param longitude 经度\n * @param latitude 纬度\n * @param radius 半径\n */\nexport function lglt2xyz(lnglat) {\n // TODO: + Math.PI/2 是为了对齐坐标\n const lng = torad(lnglat[0]) + Math.PI / 2;\n const lat = torad(lnglat[1]);\n\n // TODO: 手动增加一些偏移,减轻面的冲突\n const radius = EARTH_RADIUS + Math.random() * 0.4;\n const z = radius * Math.cos(lat) * Math.cos(lng);\n const x = radius * Math.cos(lat) * Math.sin(lng);\n const y = radius * Math.sin(lat);\n return [x, y, z];\n}\n\n/**\n * 构建地球球体网格\n * @param radius\n * @param opt\n * @returns\n */\nexport function primitiveSphere(radius, opt) {\n const matRotY = mat4.create();\n const matRotZ = mat4.create();\n const up = vec3.fromValues(0, 1, 0);\n const tmpVec3 = vec3.fromValues(0, 0, 0);\n opt = opt || {};\n radius = typeof radius !== 'undefined' ? radius : 1;\n const segments = typeof opt.segments !== 'undefined' ? opt.segments : 32;\n const totalZRotationSteps = 2 + segments;\n const totalYRotationSteps = 2 * totalZRotationSteps;\n const indices = [];\n const indicesArr = [];\n const positions = [];\n const positionsArr = [];\n const normalArr = [];\n const uvs = [];\n for (let zRotationStep = 0; zRotationStep <= totalZRotationSteps; zRotationStep++) {\n const normalizedZ = zRotationStep / totalZRotationSteps;\n const angleZ = normalizedZ * Math.PI;\n for (let yRotationStep = 0; yRotationStep <= totalYRotationSteps; yRotationStep++) {\n const normalizedY = yRotationStep / totalYRotationSteps;\n const angleY = normalizedY * Math.PI * 2;\n mat4.identity(matRotZ);\n mat4.rotateZ(matRotZ, matRotZ, -angleZ);\n mat4.identity(matRotY);\n mat4.rotateY(matRotY, matRotY, angleY);\n vec3.transformMat4(tmpVec3, up, matRotZ);\n vec3.transformMat4(tmpVec3, tmpVec3, matRotY);\n vec3.scale(tmpVec3, tmpVec3, -radius);\n positions.push(tmpVec3.slice());\n positionsArr.push(...tmpVec3.slice());\n vec3.normalize(tmpVec3, tmpVec3);\n normalArr.push(...tmpVec3.slice());\n uvs.push([normalizedY, 1 - normalizedZ]);\n\n // position 和 uv 一起存储\n positionsArr.push(normalizedY, 1 - normalizedZ);\n }\n if (zRotationStep > 0) {\n const verticesCount = positions.length;\n let firstIndex = verticesCount - 2 * (totalYRotationSteps + 1);\n for (; firstIndex + totalYRotationSteps + 2 < verticesCount; firstIndex++) {\n indices.push([firstIndex, firstIndex + 1, firstIndex + totalYRotationSteps + 1]);\n indicesArr.push(firstIndex, firstIndex + 1, firstIndex + totalYRotationSteps + 1);\n indices.push([firstIndex + totalYRotationSteps + 1, firstIndex + 1, firstIndex + totalYRotationSteps + 2]);\n indicesArr.push(firstIndex + totalYRotationSteps + 1, firstIndex + 1, firstIndex + totalYRotationSteps + 2);\n }\n }\n }\n return {\n cells: indices,\n positions,\n uvs,\n positionsArr,\n indicesArr,\n normalArr\n };\n}","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascendingDefined(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n if (compare === ascending) return ascendingDefined;\n if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nexport function ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","export default function permute(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n","// src/anchor.ts\nvar anchorType = /* @__PURE__ */ ((anchorType2) => {\n anchorType2[\"CENTER\"] = \"center\";\n anchorType2[\"TOP\"] = \"top\";\n anchorType2[\"TOP-LEFT\"] = \"top-left\";\n anchorType2[\"TOP-RIGHT\"] = \"top-right\";\n anchorType2[\"BOTTOM\"] = \"bottom\";\n anchorType2[\"BOTTOM-LEFT\"] = \"bottom-left\";\n anchorType2[\"BOTTOM-RIGHT\"] = \"bottom-right\";\n anchorType2[\"LEFT\"] = \"left\";\n anchorType2[\"RIGHT\"] = \"right\";\n return anchorType2;\n})(anchorType || {});\nvar anchorTranslate = {\n center: \"translate(-50%,-50%)\",\n top: \"translate(-50%,0)\",\n \"top-left\": \"translate(0,0)\",\n \"top-right\": \"translate(-100%,0)\",\n bottom: \"translate(-50%,-100%)\",\n \"bottom-left\": \"translate(0,-100%)\",\n \"bottom-right\": \"translate(-100%,-100%)\",\n left: \"translate(0,-50%)\",\n right: \"translate(-100%,-50%)\"\n};\nfunction applyAnchorClass(element, anchor, prefix) {\n const classList = element.classList;\n for (const key in anchorTranslate) {\n if (anchorTranslate.hasOwnProperty(key)) {\n classList.remove(`l7-${prefix}-anchor-${key}`);\n }\n }\n classList.add(`l7-${prefix}-anchor-${anchor}`);\n}\nexport {\n anchorTranslate,\n anchorType,\n applyAnchorClass\n};\n","// src/color.ts\nimport * as d3 from \"d3-color\";\nfunction isColor(str) {\n if (typeof str === \"string\") {\n return !!d3.color(str);\n } else {\n return false;\n }\n}\nfunction rgb2arr(str) {\n const color2 = d3.color(str);\n const arr = [0, 0, 0, 0];\n if (color2 != null) {\n arr[0] = color2.r / 255;\n arr[1] = color2.g / 255;\n arr[2] = color2.b / 255;\n arr[3] = color2.opacity;\n }\n return arr;\n}\nfunction decodePickingColor(color2) {\n const i1 = color2 && color2[0];\n const i2 = color2 && color2[1];\n const i3 = color2 && color2[2];\n const index = i1 + i2 * 256 + i3 * 65536 - 1;\n return index;\n}\nfunction encodePickingColor(featureIdx) {\n return [\n featureIdx + 1 & 255,\n featureIdx + 1 >> 8 & 255,\n featureIdx + 1 >> 8 >> 8 & 255\n ];\n}\nfunction generateColorRamp(colorRamp) {\n let canvas = window.document.createElement(\"canvas\");\n let ctx = canvas.getContext(\"2d\");\n canvas.width = 256;\n canvas.height = 1;\n let data = null;\n const gradient = ctx.createLinearGradient(0, 0, 256, 1);\n const min = colorRamp.positions[0];\n const max = colorRamp.positions[colorRamp.positions.length - 1];\n for (let i = 0; i < colorRamp.colors.length; ++i) {\n const value = (colorRamp.positions[i] - min) / (max - min);\n gradient.addColorStop(value, colorRamp.colors[i]);\n }\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, 256, 1);\n data = new Uint8ClampedArray(ctx.getImageData(0, 0, 256, 1).data);\n canvas = null;\n ctx = null;\n return { data, width: 256, height: 1 };\n}\nfunction generateLinearRamp(colorRamp, domain) {\n let canvas = window.document.createElement(\"canvas\");\n let ctx = canvas.getContext(\"2d\");\n canvas.width = 256;\n canvas.height = 1;\n const gradient = ctx.createLinearGradient(0, 0, 256, 1);\n const step = domain[1] - domain[0];\n for (let i = 0; i < colorRamp.colors.length; ++i) {\n const value = Math.max((colorRamp.positions[i] - domain[0]) / step, 0);\n gradient.addColorStop(value, colorRamp.colors[i]);\n }\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, 256, 1);\n const data = ctx.getImageData(0, 0, 256, 1).data;\n const imageData = toIEIMageData(ctx, data);\n canvas = null;\n ctx = null;\n return imageData;\n}\nfunction generateCatRamp(colorRamp) {\n let canvas = window.document.createElement(\"canvas\");\n let ctx = canvas.getContext(\"2d\");\n canvas.width = 256;\n canvas.height = 1;\n const imageData = ctx.createImageData(256, 1);\n imageData.data.fill(0);\n colorRamp.positions.forEach((p, index) => {\n const colorArray = rgb2arr(colorRamp.colors[index]);\n imageData.data[p * 4 + 0] = colorArray[0] * 255;\n imageData.data[p * 4 + 1] = colorArray[1] * 255;\n imageData.data[p * 4 + 2] = colorArray[2] * 255;\n imageData.data[p * 4 + 3] = colorArray[3] * 255;\n });\n canvas = null;\n ctx = null;\n return imageData;\n}\nfunction generateQuantizeRamp(colorRamp) {\n let canvas = window.document.createElement(\"canvas\");\n let ctx = canvas.getContext(\"2d\");\n ctx.globalAlpha = 1;\n canvas.width = 256;\n canvas.height = 1;\n const step = 256 / colorRamp.colors.length;\n for (let i = 0; i < colorRamp.colors.length; i++) {\n ctx.beginPath();\n ctx.lineWidth = 2;\n ctx.strokeStyle = colorRamp.colors[i];\n ctx.moveTo(i * step, 0);\n ctx.lineTo((i + 1) * step, 0);\n ctx.stroke();\n }\n const data = ctx.getImageData(0, 0, 256, 1).data;\n const imageData = toIEIMageData(ctx, data);\n canvas = null;\n ctx = null;\n return imageData;\n}\nfunction generateCustomRamp(colorRamp, domain) {\n let canvas = window.document.createElement(\"canvas\");\n let ctx = canvas.getContext(\"2d\");\n ctx.globalAlpha = 1;\n canvas.width = 256;\n canvas.height = 1;\n const step = domain[1] - domain[0];\n if (colorRamp.positions.length - colorRamp.colors.length !== 1) {\n console.warn(\n \"positions 的数字个数应当比 colors 的样式多一个,poisitions 的首尾值一般为数据的最大最新值\"\n );\n }\n for (let i = 0; i < colorRamp.colors.length; i++) {\n ctx.beginPath();\n ctx.lineWidth = 2;\n ctx.strokeStyle = colorRamp.colors[i];\n ctx.moveTo((colorRamp.positions[i] - domain[0]) / step * 255, 0);\n ctx.lineTo((colorRamp.positions[i + 1] - domain[0]) / step * 255, 0);\n ctx.stroke();\n }\n const data = ctx.getImageData(0, 0, 256, 1).data;\n const imageData = toIEIMageData(ctx, data);\n canvas = null;\n ctx = null;\n return imageData;\n}\nfunction toIEIMageData(ctx, data) {\n const imageData = ctx.createImageData(256, 1);\n for (let i = 0; i < imageData.data.length; i += 4) {\n imageData.data[i + 0] = data[i + 0];\n imageData.data[i + 1] = data[i + 1];\n imageData.data[i + 2] = data[i + 2];\n imageData.data[i + 3] = data[i + 3];\n }\n return imageData;\n}\nfunction getDefaultDomain(rampColors) {\n switch (rampColors == null ? void 0 : rampColors.type) {\n case \"cat\":\n return [0, 255];\n default:\n return [0, 1];\n }\n}\nexport {\n decodePickingColor,\n encodePickingColor,\n generateCatRamp,\n generateColorRamp,\n generateCustomRamp,\n generateLinearRamp,\n generateQuantizeRamp,\n getDefaultDomain,\n isColor,\n rgb2arr\n};\n","// src/dom.ts\nimport { lodashUtil } from \"./lodash-adapter\";\nvar { pull } = lodashUtil;\nfunction getContainer(domId) {\n let $dom = domId;\n if (typeof domId === \"string\") {\n $dom = window.document.getElementById(domId);\n }\n return $dom;\n}\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, \"\");\n}\nfunction splitWords(str) {\n return trim(str).split(/\\s+/);\n}\nfunction testProp(props) {\n var _a;\n const docStyle = (_a = document == null ? void 0 : document.documentElement) == null ? void 0 : _a.style;\n if (!docStyle) {\n return props[0];\n }\n for (const i in props) {\n if (props[i] && props[i] in docStyle) {\n return props[i];\n }\n }\n return props[0];\n}\nfunction create(tagName, className, container) {\n const el = window.document.createElement(tagName);\n if (className) {\n el.className = className || \"\";\n }\n if (container) {\n container.appendChild(el);\n }\n return el;\n}\nfunction remove(el) {\n const parent = el.parentNode;\n if (parent) {\n parent.removeChild(el);\n }\n}\nfunction addClass(el, name) {\n if (el.classList !== void 0) {\n const classes = splitWords(name);\n for (let i = 0, len = classes.length; i < len; i++) {\n el.classList.add(classes[i]);\n }\n } else if (!hasClass(el, name)) {\n const className = getClass(el);\n setClass(el, (className ? className + \" \" : \"\") + name);\n }\n}\nfunction removeClass(el, name) {\n if (el.classList !== void 0) {\n const classes = splitWords(name);\n classes.forEach((className) => {\n el.classList.remove(className);\n });\n } else {\n setClass(el, trim((\" \" + getClass(el) + \" \").replace(\" \" + name + \" \", \" \")));\n }\n}\nfunction hasClass(el, name) {\n if (el.classList !== void 0) {\n return el.classList.contains(name);\n }\n const className = getClass(el);\n return className.length > 0 && new RegExp(\"(^|\\\\s)\" + name + \"(\\\\s|$)\").test(className);\n}\nfunction setClass(el, name) {\n if (el instanceof HTMLElement) {\n el.className = name;\n } else {\n el.className.baseVal = name;\n }\n}\nfunction toggleClass(el, className, force) {\n if (force === void 0) {\n if (hasClass(el, className)) {\n removeClass(el, className);\n } else {\n addClass(el, className);\n }\n } else if (force) {\n addClass(el, className);\n } else {\n removeClass(el, className);\n }\n}\nfunction getClass(el) {\n if (el instanceof SVGElement) {\n el = el.correspondingElement;\n }\n return el.className.baseVal === void 0 ? el.className : el.className.baseVal;\n}\nfunction empty(el) {\n while (el && el.firstChild) {\n el.removeChild(el.firstChild);\n }\n}\nvar transformProp = testProp([\"transform\", \"WebkitTransform\"]);\nfunction setTransform(el, value) {\n el.style[transformProp] = value;\n}\nfunction triggerResize() {\n if (typeof Event === \"function\") {\n window.dispatchEvent(new Event(\"resize\"));\n } else {\n const evt = window.document.createEvent(\"UIEvents\");\n evt.initUIEvent(\"resize\", true, false, window, 0);\n window.dispatchEvent(evt);\n }\n}\nfunction printCanvas(canvas) {\n const css = [\n \"padding: \" + (canvas.height / 2 - 8) + \"px \" + canvas.width / 2 + \"px;\",\n \"line-height: \" + canvas.height + \"px;\",\n \"background-image: url(\" + canvas.toDataURL() + \");\"\n ];\n console.log(\"%c\\n\", css.join(\"\"));\n}\nfunction getViewPortScale() {\n var _a;\n const meta = window.document.querySelector('meta[name=\"viewport\"]');\n if (!meta) {\n return 1;\n }\n const contentItems = (_a = meta.content) == null ? void 0 : _a.split(\",\");\n const scale = contentItems.find((item) => {\n const [key] = item.split(\"=\");\n return key === \"initial-scale\";\n });\n return scale ? scale.split(\"=\")[1] * 1 : 1;\n}\nvar DPR = getViewPortScale() < 1 ? 1 : window.devicePixelRatio;\nfunction addStyle(el, style) {\n el.setAttribute(\"style\", `${el.style.cssText}${style}`);\n}\nfunction getStyleList(style) {\n return style.split(\";\").map((item) => item.trim()).filter((item) => item);\n}\nfunction removeStyle(el, style) {\n var _a;\n const oldStyleList = getStyleList((_a = el.getAttribute(\"style\")) != null ? _a : \"\");\n const targetStyleList = getStyleList(style);\n const newStyleList = pull(oldStyleList, ...targetStyleList);\n el.setAttribute(\"style\", newStyleList.join(\";\"));\n}\nfunction css2Style(obj) {\n return Object.entries(obj).map(([key, value]) => `${key}: ${value}`).join(\";\");\n}\nfunction getDiffRect(dom1Rect, dom2Rect) {\n return {\n left: dom1Rect.left - dom2Rect.left,\n top: dom1Rect.top - dom2Rect.top,\n right: dom2Rect.left + dom2Rect.width - dom1Rect.left - dom1Rect.width,\n bottom: dom2Rect.top + dom2Rect.height - dom1Rect.top - dom1Rect.height\n };\n}\nfunction setChecked(el, value) {\n el.checked = value;\n if (value) {\n el.setAttribute(\"checked\", \"true\");\n } else {\n el.removeAttribute(\"checked\");\n }\n}\nfunction clearChildren(el) {\n el.innerHTML = \"\";\n}\nfunction setUnDraggable(el) {\n el.setAttribute(\"draggable\", \"false\");\n}\nfunction appendElementType(container, children) {\n if (typeof children === \"string\") {\n const div = document.createElement(\"div\");\n div.innerHTML = children;\n while (div.firstChild) {\n container.append(div.firstChild);\n }\n } else if (Array.isArray(children)) {\n container.append(...children);\n } else {\n container.append(children);\n }\n}\nfunction findParentElement(target, selector) {\n var _a;\n const selectors = Array.isArray(selector) ? selector : [selector];\n let current = target;\n while (current instanceof Element && current !== window.document.body) {\n if (selectors.find((item) => current == null ? void 0 : current.matches(item))) {\n return current;\n }\n current = (_a = current == null ? void 0 : current.parentElement) != null ? _a : null;\n }\n return void 0;\n}\nexport {\n DPR,\n addClass,\n addStyle,\n appendElementType,\n clearChildren,\n create,\n css2Style,\n empty,\n findParentElement,\n getClass,\n getContainer,\n getDiffRect,\n getStyleList,\n getViewPortScale,\n hasClass,\n printCanvas,\n remove,\n removeClass,\n removeStyle,\n setChecked,\n setClass,\n setTransform,\n setUnDraggable,\n splitWords,\n toggleClass,\n triggerResize,\n trim\n};\n","// src/env.ts\nfunction isImageBitmap(image) {\n return typeof ImageBitmap !== \"undefined\" && image instanceof ImageBitmap;\n}\nfunction isWorker() {\n return typeof importScripts === \"function\";\n}\nvar getReferrer = isWorker() ? () => self.worker && self.worker.referrer : () => (window.location.protocol === \"blob:\" ? window.parent : window).location.href;\nvar userAgent = navigator == null ? void 0 : navigator.userAgent;\nvar isiOS = !!userAgent.match(/\\(i[^;]+;( U;)? CPU.+Mac OS X/);\nvar isAndroid = userAgent.indexOf(\"Android\") > -1 || userAgent.indexOf(\"Adr\") > -1;\nfunction isPC() {\n const userAgentInfo = userAgent;\n const Agents = [\"Android\", \"iPhone\", \"SymbianOS\", \"Windows Phone\", \"iPad\", \"iPod\"];\n let flag = true;\n for (const v of Agents) {\n if (userAgentInfo.indexOf(v) > 0) {\n flag = false;\n break;\n }\n }\n return flag;\n}\nexport {\n getReferrer,\n isAndroid,\n isImageBitmap,\n isPC,\n isWorker,\n isiOS\n};\n","// src/event.ts\nfunction bindAll(fns, context) {\n fns.forEach((fn) => {\n if (!context[fn]) {\n return;\n }\n context[fn] = context[fn].bind(context);\n });\n}\nvar FrequencyController = class {\n constructor(duration = 16) {\n this.duration = 16;\n this.timestamp = (/* @__PURE__ */ new Date()).getTime();\n this.duration = duration;\n }\n run(callback) {\n const currentTime = (/* @__PURE__ */ new Date()).getTime();\n const timeCut = currentTime - this.timestamp;\n this.timestamp = currentTime;\n if (timeCut >= this.duration) {\n callback();\n }\n }\n};\nexport {\n FrequencyController,\n bindAll\n};\n","// src/hash.ts\nfunction BKDRHash(str) {\n const seed = 131;\n const seed2 = 137;\n let hash = 0;\n str += \"x\";\n const MAX_SAFE_INTEGER = Math.floor(9007199254740991 / seed2);\n for (let i = 0; i < str.length; i++) {\n if (hash > MAX_SAFE_INTEGER) {\n hash = Math.floor(hash / seed2);\n }\n hash = hash * seed + str.charCodeAt(i);\n }\n return hash;\n}\nfunction djb2hash(str) {\n str = str.toString();\n let hash = 5381;\n let i = str.length;\n while (i) {\n hash = hash * 33 ^ str.charCodeAt(--i);\n }\n return hash >>> 0;\n}\nfunction guid() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = Math.random() * 16 | 0;\n const v = c === \"x\" ? r : r & 3 | 8;\n return v.toString(16);\n });\n}\nexport {\n BKDRHash,\n djb2hash,\n guid\n};\n","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\n\n// src/lineAtOffset/index.ts\nimport { arcLineAtOffset } from \"./arc\";\nimport { greatCircleLineAtOffset } from \"./greatCircle\";\nimport { pathLineAtOffset } from \"./line\";\nfunction lineAtOffset(source, option) {\n const { featureId } = option;\n let features = source.data.dataArray;\n if (typeof featureId === \"number\") {\n features = features.filter(({ id }) => id === featureId);\n }\n return features.map((feature) => {\n const position = getLineOffsetPosition(feature, option);\n return __spreadValues(__spreadValues({}, feature), position);\n });\n}\nfunction lineAtOffsetAsyc(source, option) {\n return new Promise((resolve) => {\n if (source.inited) {\n resolve(lineAtOffset(source, option));\n } else {\n source.once(\"update\", () => {\n resolve(lineAtOffset(source, option));\n });\n }\n });\n}\nfunction getLineOffsetPosition(feature, option) {\n const { offset, shape, thetaOffset, segmentNumber = 30, autoFit = true } = option;\n const { coordinates } = feature;\n if (shape === \"line\") {\n return pathLineAtOffset(coordinates, offset);\n }\n const source = coordinates[0];\n const target = coordinates[1];\n const linetheatOffset = typeof thetaOffset === \"string\" ? feature[thetaOffset] || 0 : thetaOffset;\n let calFunc;\n switch (shape) {\n case \"arc\":\n calFunc = arcLineAtOffset;\n break;\n case \"greatcircle\":\n calFunc = greatCircleLineAtOffset;\n break;\n default:\n calFunc = arcLineAtOffset;\n }\n const [lng, lat, height] = calFunc(\n source,\n target,\n offset,\n linetheatOffset,\n segmentNumber,\n autoFit\n );\n return {\n lng,\n lat,\n height\n };\n}\nexport {\n lineAtOffset,\n lineAtOffsetAsyc\n};\n","// src/lru_cache.ts\nvar LRUCache = class {\n constructor(limit = 50, destroy) {\n this.limit = limit;\n this.destroy = destroy || this.defaultDestroy;\n this.order = [];\n this.clear();\n }\n clear() {\n this.order.forEach((key) => {\n this.delete(key);\n });\n this.cache = {};\n this.order = [];\n }\n get(key) {\n const value = this.cache[key];\n if (value) {\n this.deleteOrder(key);\n this.appendOrder(key);\n }\n return value;\n }\n set(key, value) {\n if (!this.cache[key]) {\n if (Object.keys(this.cache).length === this.limit) {\n this.delete(this.order[0]);\n }\n this.cache[key] = value;\n this.appendOrder(key);\n } else {\n this.delete(key);\n this.cache[key] = value;\n this.appendOrder(key);\n }\n }\n delete(key) {\n const value = this.cache[key];\n if (value) {\n this.deleteCache(key);\n this.deleteOrder(key);\n this.destroy(value, key);\n }\n }\n deleteCache(key) {\n delete this.cache[key];\n }\n deleteOrder(key) {\n const index = this.order.findIndex((o) => o === key);\n if (index >= 0) {\n this.order.splice(index, 1);\n }\n }\n appendOrder(key) {\n this.order.push(key);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n defaultDestroy(value, key) {\n return null;\n }\n};\nexport {\n LRUCache\n};\n","// src/statistics.ts\nfunction max(x) {\n if (x.length === 0) {\n throw new Error(\"max requires at least one data point\");\n }\n let value = x[0];\n for (let i = 1; i < x.length; i++) {\n if (x[i] > value) {\n value = x[i];\n }\n }\n return value * 1;\n}\nfunction min(x) {\n if (x.length === 0) {\n throw new Error(\"min requires at least one data point\");\n }\n let value = x[0];\n for (let i = 1; i < x.length; i++) {\n if (x[i] < value) {\n value = x[i];\n }\n }\n return value * 1;\n}\nfunction sum(x) {\n if (x.length === 0) {\n return 0;\n }\n let sumNum = x[0] * 1;\n for (let i = 1; i < x.length; i++) {\n sumNum += x[i] * 1;\n }\n return sumNum;\n}\nfunction mean(x) {\n if (x.length === 0) {\n throw new Error(\"mean requires at least one data point\");\n }\n return sum(x) / x.length;\n}\nfunction mode(x) {\n if (x.length === 0) {\n throw new Error(\"mean requires at least one data point\");\n }\n if (x.length < 3) {\n return x[0];\n }\n x.sort();\n let last = x[0];\n let value = NaN;\n let maxSeen = 0;\n let seenThis = 1;\n for (let i = 1; i < x.length + 1; i++) {\n if (x[i] !== last) {\n if (seenThis > maxSeen) {\n maxSeen = seenThis;\n value = last;\n }\n seenThis = 1;\n last = x[i];\n } else {\n seenThis++;\n }\n }\n return value * 1;\n}\nvar statMap = {\n min,\n max,\n mean,\n sum,\n mode\n};\nfunction getColumn(data, columnName) {\n return data.map((item) => {\n return item[columnName];\n });\n}\nfunction getSatByColumn(type, column) {\n return statMap[type](column);\n}\nexport {\n getColumn,\n getSatByColumn,\n max,\n mean,\n min,\n mode,\n statMap,\n sum\n};\n","// src/index.ts\nexport * from \"./ajax\";\nexport * from \"./anchor\";\nexport * from \"./color\";\nexport * from \"./config\";\nimport * as DOM from \"./dom\";\nexport * from \"./env\";\nexport * from \"./event\";\nexport * from \"./geo\";\nimport { BKDRHash, djb2hash, guid } from \"./hash\";\nexport * from \"./lineAtOffset\";\nexport * from \"./lodash-adapter\";\nexport * from \"./lru_cache\";\nexport * from \"./math\";\nimport * as Satistics from \"./statistics\";\nexport * from \"./tileset-manager\";\nfunction defaultValue(v1, v2) {\n if (v1 === void 0 || v1 === null) {\n return v2;\n }\n return v1;\n}\nexport {\n BKDRHash,\n DOM,\n Satistics,\n defaultValue,\n djb2hash,\n guid\n};\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","import { isNil, isNumber, clamp } from '@antv/util';\nimport { __read, __extends, __values, __assign, __awaiter, __generator, __spreadArray, __rest } from 'tslib';\nimport EventEmitter from 'eventemitter3';\n\n/**\n * ported from @luma.gl/constants\n *\n * Standard WebGL and WebGL2 constants\n * These constants are also defined on the WebGLRenderingContext interface.\n */\nvar GL;\n(function (GL) {\n // Clearing buffers\n // Constants passed to clear() to clear buffer masks.\n GL[GL[\"DEPTH_BUFFER_BIT\"] = 256] = \"DEPTH_BUFFER_BIT\";\n GL[GL[\"STENCIL_BUFFER_BIT\"] = 1024] = \"STENCIL_BUFFER_BIT\";\n GL[GL[\"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 GL[GL[\"POINTS\"] = 0] = \"POINTS\";\n GL[GL[\"LINES\"] = 1] = \"LINES\";\n GL[GL[\"LINE_LOOP\"] = 2] = \"LINE_LOOP\";\n GL[GL[\"LINE_STRIP\"] = 3] = \"LINE_STRIP\";\n GL[GL[\"TRIANGLES\"] = 4] = \"TRIANGLES\";\n GL[GL[\"TRIANGLE_STRIP\"] = 5] = \"TRIANGLE_STRIP\";\n GL[GL[\"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 GL[GL[\"ZERO\"] = 0] = \"ZERO\";\n GL[GL[\"ONE\"] = 1] = \"ONE\";\n GL[GL[\"SRC_COLOR\"] = 768] = \"SRC_COLOR\";\n GL[GL[\"ONE_MINUS_SRC_COLOR\"] = 769] = \"ONE_MINUS_SRC_COLOR\";\n GL[GL[\"SRC_ALPHA\"] = 770] = \"SRC_ALPHA\";\n GL[GL[\"ONE_MINUS_SRC_ALPHA\"] = 771] = \"ONE_MINUS_SRC_ALPHA\";\n GL[GL[\"DST_ALPHA\"] = 772] = \"DST_ALPHA\";\n GL[GL[\"ONE_MINUS_DST_ALPHA\"] = 773] = \"ONE_MINUS_DST_ALPHA\";\n GL[GL[\"DST_COLOR\"] = 774] = \"DST_COLOR\";\n GL[GL[\"ONE_MINUS_DST_COLOR\"] = 775] = \"ONE_MINUS_DST_COLOR\";\n GL[GL[\"SRC_ALPHA_SATURATE\"] = 776] = \"SRC_ALPHA_SATURATE\";\n GL[GL[\"CONSTANT_COLOR\"] = 32769] = \"CONSTANT_COLOR\";\n GL[GL[\"ONE_MINUS_CONSTANT_COLOR\"] = 32770] = \"ONE_MINUS_CONSTANT_COLOR\";\n GL[GL[\"CONSTANT_ALPHA\"] = 32771] = \"CONSTANT_ALPHA\";\n GL[GL[\"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 GL[GL[\"FUNC_ADD\"] = 32774] = \"FUNC_ADD\";\n GL[GL[\"FUNC_SUBTRACT\"] = 32778] = \"FUNC_SUBTRACT\";\n GL[GL[\"FUNC_REVERSE_SUBTRACT\"] = 32779] = \"FUNC_REVERSE_SUBTRACT\";\n // Getting GL parameter information\n // Constants passed to getParameter() to specify what information to return.\n GL[GL[\"BLEND_EQUATION\"] = 32777] = \"BLEND_EQUATION\";\n GL[GL[\"BLEND_EQUATION_RGB\"] = 32777] = \"BLEND_EQUATION_RGB\";\n GL[GL[\"BLEND_EQUATION_ALPHA\"] = 34877] = \"BLEND_EQUATION_ALPHA\";\n GL[GL[\"BLEND_DST_RGB\"] = 32968] = \"BLEND_DST_RGB\";\n GL[GL[\"BLEND_SRC_RGB\"] = 32969] = \"BLEND_SRC_RGB\";\n GL[GL[\"BLEND_DST_ALPHA\"] = 32970] = \"BLEND_DST_ALPHA\";\n GL[GL[\"BLEND_SRC_ALPHA\"] = 32971] = \"BLEND_SRC_ALPHA\";\n GL[GL[\"BLEND_COLOR\"] = 32773] = \"BLEND_COLOR\";\n GL[GL[\"ARRAY_BUFFER_BINDING\"] = 34964] = \"ARRAY_BUFFER_BINDING\";\n GL[GL[\"ELEMENT_ARRAY_BUFFER_BINDING\"] = 34965] = \"ELEMENT_ARRAY_BUFFER_BINDING\";\n GL[GL[\"LINE_WIDTH\"] = 2849] = \"LINE_WIDTH\";\n GL[GL[\"ALIASED_POINT_SIZE_RANGE\"] = 33901] = \"ALIASED_POINT_SIZE_RANGE\";\n GL[GL[\"ALIASED_LINE_WIDTH_RANGE\"] = 33902] = \"ALIASED_LINE_WIDTH_RANGE\";\n GL[GL[\"CULL_FACE_MODE\"] = 2885] = \"CULL_FACE_MODE\";\n GL[GL[\"FRONT_FACE\"] = 2886] = \"FRONT_FACE\";\n GL[GL[\"DEPTH_RANGE\"] = 2928] = \"DEPTH_RANGE\";\n GL[GL[\"DEPTH_WRITEMASK\"] = 2930] = \"DEPTH_WRITEMASK\";\n GL[GL[\"DEPTH_CLEAR_VALUE\"] = 2931] = \"DEPTH_CLEAR_VALUE\";\n GL[GL[\"DEPTH_FUNC\"] = 2932] = \"DEPTH_FUNC\";\n GL[GL[\"STENCIL_CLEAR_VALUE\"] = 2961] = \"STENCIL_CLEAR_VALUE\";\n GL[GL[\"STENCIL_FUNC\"] = 2962] = \"STENCIL_FUNC\";\n GL[GL[\"STENCIL_FAIL\"] = 2964] = \"STENCIL_FAIL\";\n GL[GL[\"STENCIL_PASS_DEPTH_FAIL\"] = 2965] = \"STENCIL_PASS_DEPTH_FAIL\";\n GL[GL[\"STENCIL_PASS_DEPTH_PASS\"] = 2966] = \"STENCIL_PASS_DEPTH_PASS\";\n GL[GL[\"STENCIL_REF\"] = 2967] = \"STENCIL_REF\";\n GL[GL[\"STENCIL_VALUE_MASK\"] = 2963] = \"STENCIL_VALUE_MASK\";\n GL[GL[\"STENCIL_WRITEMASK\"] = 2968] = \"STENCIL_WRITEMASK\";\n GL[GL[\"STENCIL_BACK_FUNC\"] = 34816] = \"STENCIL_BACK_FUNC\";\n GL[GL[\"STENCIL_BACK_FAIL\"] = 34817] = \"STENCIL_BACK_FAIL\";\n GL[GL[\"STENCIL_BACK_PASS_DEPTH_FAIL\"] = 34818] = \"STENCIL_BACK_PASS_DEPTH_FAIL\";\n GL[GL[\"STENCIL_BACK_PASS_DEPTH_PASS\"] = 34819] = \"STENCIL_BACK_PASS_DEPTH_PASS\";\n GL[GL[\"STENCIL_BACK_REF\"] = 36003] = \"STENCIL_BACK_REF\";\n GL[GL[\"STENCIL_BACK_VALUE_MASK\"] = 36004] = \"STENCIL_BACK_VALUE_MASK\";\n GL[GL[\"STENCIL_BACK_WRITEMASK\"] = 36005] = \"STENCIL_BACK_WRITEMASK\";\n GL[GL[\"VIEWPORT\"] = 2978] = \"VIEWPORT\";\n GL[GL[\"SCISSOR_BOX\"] = 3088] = \"SCISSOR_BOX\";\n GL[GL[\"COLOR_CLEAR_VALUE\"] = 3106] = \"COLOR_CLEAR_VALUE\";\n GL[GL[\"COLOR_WRITEMASK\"] = 3107] = \"COLOR_WRITEMASK\";\n GL[GL[\"UNPACK_ALIGNMENT\"] = 3317] = \"UNPACK_ALIGNMENT\";\n GL[GL[\"PACK_ALIGNMENT\"] = 3333] = \"PACK_ALIGNMENT\";\n GL[GL[\"MAX_TEXTURE_SIZE\"] = 3379] = \"MAX_TEXTURE_SIZE\";\n GL[GL[\"MAX_VIEWPORT_DIMS\"] = 3386] = \"MAX_VIEWPORT_DIMS\";\n GL[GL[\"SUBPIXEL_BITS\"] = 3408] = \"SUBPIXEL_BITS\";\n GL[GL[\"RED_BITS\"] = 3410] = \"RED_BITS\";\n GL[GL[\"GREEN_BITS\"] = 3411] = \"GREEN_BITS\";\n GL[GL[\"BLUE_BITS\"] = 3412] = \"BLUE_BITS\";\n GL[GL[\"ALPHA_BITS\"] = 3413] = \"ALPHA_BITS\";\n GL[GL[\"DEPTH_BITS\"] = 3414] = \"DEPTH_BITS\";\n GL[GL[\"STENCIL_BITS\"] = 3415] = \"STENCIL_BITS\";\n GL[GL[\"POLYGON_OFFSET_UNITS\"] = 10752] = \"POLYGON_OFFSET_UNITS\";\n GL[GL[\"POLYGON_OFFSET_FACTOR\"] = 32824] = \"POLYGON_OFFSET_FACTOR\";\n GL[GL[\"TEXTURE_BINDING_2D\"] = 32873] = \"TEXTURE_BINDING_2D\";\n GL[GL[\"SAMPLE_BUFFERS\"] = 32936] = \"SAMPLE_BUFFERS\";\n GL[GL[\"SAMPLES\"] = 32937] = \"SAMPLES\";\n GL[GL[\"SAMPLE_COVERAGE_VALUE\"] = 32938] = \"SAMPLE_COVERAGE_VALUE\";\n GL[GL[\"SAMPLE_COVERAGE_INVERT\"] = 32939] = \"SAMPLE_COVERAGE_INVERT\";\n GL[GL[\"COMPRESSED_TEXTURE_FORMATS\"] = 34467] = \"COMPRESSED_TEXTURE_FORMATS\";\n GL[GL[\"VENDOR\"] = 7936] = \"VENDOR\";\n GL[GL[\"RENDERER\"] = 7937] = \"RENDERER\";\n GL[GL[\"VERSION\"] = 7938] = \"VERSION\";\n GL[GL[\"IMPLEMENTATION_COLOR_READ_TYPE\"] = 35738] = \"IMPLEMENTATION_COLOR_READ_TYPE\";\n GL[GL[\"IMPLEMENTATION_COLOR_READ_FORMAT\"] = 35739] = \"IMPLEMENTATION_COLOR_READ_FORMAT\";\n GL[GL[\"BROWSER_DEFAULT_WEBGL\"] = 37444] = \"BROWSER_DEFAULT_WEBGL\";\n // Buffers\n // Constants passed to bufferData(), bufferSubData(), bindBuffer(), or\n // getBufferParameter().\n GL[GL[\"STATIC_DRAW\"] = 35044] = \"STATIC_DRAW\";\n GL[GL[\"STREAM_DRAW\"] = 35040] = \"STREAM_DRAW\";\n GL[GL[\"DYNAMIC_DRAW\"] = 35048] = \"DYNAMIC_DRAW\";\n GL[GL[\"ARRAY_BUFFER\"] = 34962] = \"ARRAY_BUFFER\";\n GL[GL[\"ELEMENT_ARRAY_BUFFER\"] = 34963] = \"ELEMENT_ARRAY_BUFFER\";\n GL[GL[\"BUFFER_SIZE\"] = 34660] = \"BUFFER_SIZE\";\n GL[GL[\"BUFFER_USAGE\"] = 34661] = \"BUFFER_USAGE\";\n // Vertex attributes\n // Constants passed to getVertexAttrib().\n GL[GL[\"CURRENT_VERTEX_ATTRIB\"] = 34342] = \"CURRENT_VERTEX_ATTRIB\";\n GL[GL[\"VERTEX_ATTRIB_ARRAY_ENABLED\"] = 34338] = \"VERTEX_ATTRIB_ARRAY_ENABLED\";\n GL[GL[\"VERTEX_ATTRIB_ARRAY_SIZE\"] = 34339] = \"VERTEX_ATTRIB_ARRAY_SIZE\";\n GL[GL[\"VERTEX_ATTRIB_ARRAY_STRIDE\"] = 34340] = \"VERTEX_ATTRIB_ARRAY_STRIDE\";\n GL[GL[\"VERTEX_ATTRIB_ARRAY_TYPE\"] = 34341] = \"VERTEX_ATTRIB_ARRAY_TYPE\";\n GL[GL[\"VERTEX_ATTRIB_ARRAY_NORMALIZED\"] = 34922] = \"VERTEX_ATTRIB_ARRAY_NORMALIZED\";\n GL[GL[\"VERTEX_ATTRIB_ARRAY_POINTER\"] = 34373] = \"VERTEX_ATTRIB_ARRAY_POINTER\";\n GL[GL[\"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\"] = 34975] = \"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\";\n // Culling\n // Constants passed to cullFace().\n GL[GL[\"CULL_FACE\"] = 2884] = \"CULL_FACE\";\n GL[GL[\"FRONT\"] = 1028] = \"FRONT\";\n GL[GL[\"BACK\"] = 1029] = \"BACK\";\n GL[GL[\"FRONT_AND_BACK\"] = 1032] = \"FRONT_AND_BACK\";\n // Enabling and disabling\n // Constants passed to enable() or disable().\n GL[GL[\"BLEND\"] = 3042] = \"BLEND\";\n GL[GL[\"DEPTH_TEST\"] = 2929] = \"DEPTH_TEST\";\n GL[GL[\"DITHER\"] = 3024] = \"DITHER\";\n GL[GL[\"POLYGON_OFFSET_FILL\"] = 32823] = \"POLYGON_OFFSET_FILL\";\n GL[GL[\"SAMPLE_ALPHA_TO_COVERAGE\"] = 32926] = \"SAMPLE_ALPHA_TO_COVERAGE\";\n GL[GL[\"SAMPLE_COVERAGE\"] = 32928] = \"SAMPLE_COVERAGE\";\n GL[GL[\"SCISSOR_TEST\"] = 3089] = \"SCISSOR_TEST\";\n GL[GL[\"STENCIL_TEST\"] = 2960] = \"STENCIL_TEST\";\n // Errors\n // Constants returned from getError().\n GL[GL[\"NO_ERROR\"] = 0] = \"NO_ERROR\";\n GL[GL[\"INVALID_ENUM\"] = 1280] = \"INVALID_ENUM\";\n GL[GL[\"INVALID_VALUE\"] = 1281] = \"INVALID_VALUE\";\n GL[GL[\"INVALID_OPERATION\"] = 1282] = \"INVALID_OPERATION\";\n GL[GL[\"OUT_OF_MEMORY\"] = 1285] = \"OUT_OF_MEMORY\";\n GL[GL[\"CONTEXT_LOST_WEBGL\"] = 37442] = \"CONTEXT_LOST_WEBGL\";\n // Front face directions\n // Constants passed to frontFace().\n GL[GL[\"CW\"] = 2304] = \"CW\";\n GL[GL[\"CCW\"] = 2305] = \"CCW\";\n // Hints\n // Constants passed to hint()\n GL[GL[\"DONT_CARE\"] = 4352] = \"DONT_CARE\";\n GL[GL[\"FASTEST\"] = 4353] = \"FASTEST\";\n GL[GL[\"NICEST\"] = 4354] = \"NICEST\";\n GL[GL[\"GENERATE_MIPMAP_HINT\"] = 33170] = \"GENERATE_MIPMAP_HINT\";\n // Data types\n GL[GL[\"BYTE\"] = 5120] = \"BYTE\";\n GL[GL[\"UNSIGNED_BYTE\"] = 5121] = \"UNSIGNED_BYTE\";\n GL[GL[\"SHORT\"] = 5122] = \"SHORT\";\n GL[GL[\"UNSIGNED_SHORT\"] = 5123] = \"UNSIGNED_SHORT\";\n GL[GL[\"INT\"] = 5124] = \"INT\";\n GL[GL[\"UNSIGNED_INT\"] = 5125] = \"UNSIGNED_INT\";\n GL[GL[\"FLOAT\"] = 5126] = \"FLOAT\";\n GL[GL[\"DOUBLE\"] = 5130] = \"DOUBLE\";\n // Pixel formats\n GL[GL[\"DEPTH_COMPONENT\"] = 6402] = \"DEPTH_COMPONENT\";\n GL[GL[\"ALPHA\"] = 6406] = \"ALPHA\";\n GL[GL[\"RGB\"] = 6407] = \"RGB\";\n GL[GL[\"RGBA\"] = 6408] = \"RGBA\";\n GL[GL[\"LUMINANCE\"] = 6409] = \"LUMINANCE\";\n GL[GL[\"LUMINANCE_ALPHA\"] = 6410] = \"LUMINANCE_ALPHA\";\n // Pixel types\n // UNSIGNED_BYTE = 0x1401,\n GL[GL[\"UNSIGNED_SHORT_4_4_4_4\"] = 32819] = \"UNSIGNED_SHORT_4_4_4_4\";\n GL[GL[\"UNSIGNED_SHORT_5_5_5_1\"] = 32820] = \"UNSIGNED_SHORT_5_5_5_1\";\n GL[GL[\"UNSIGNED_SHORT_5_6_5\"] = 33635] = \"UNSIGNED_SHORT_5_6_5\";\n // Shaders\n // Constants passed to createShader() or getShaderParameter()\n GL[GL[\"FRAGMENT_SHADER\"] = 35632] = \"FRAGMENT_SHADER\";\n GL[GL[\"VERTEX_SHADER\"] = 35633] = \"VERTEX_SHADER\";\n GL[GL[\"COMPILE_STATUS\"] = 35713] = \"COMPILE_STATUS\";\n GL[GL[\"DELETE_STATUS\"] = 35712] = \"DELETE_STATUS\";\n GL[GL[\"LINK_STATUS\"] = 35714] = \"LINK_STATUS\";\n GL[GL[\"VALIDATE_STATUS\"] = 35715] = \"VALIDATE_STATUS\";\n GL[GL[\"ATTACHED_SHADERS\"] = 35717] = \"ATTACHED_SHADERS\";\n GL[GL[\"ACTIVE_ATTRIBUTES\"] = 35721] = \"ACTIVE_ATTRIBUTES\";\n GL[GL[\"ACTIVE_UNIFORMS\"] = 35718] = \"ACTIVE_UNIFORMS\";\n GL[GL[\"MAX_VERTEX_ATTRIBS\"] = 34921] = \"MAX_VERTEX_ATTRIBS\";\n GL[GL[\"MAX_VERTEX_UNIFORM_VECTORS\"] = 36347] = \"MAX_VERTEX_UNIFORM_VECTORS\";\n GL[GL[\"MAX_VARYING_VECTORS\"] = 36348] = \"MAX_VARYING_VECTORS\";\n GL[GL[\"MAX_COMBINED_TEXTURE_IMAGE_UNITS\"] = 35661] = \"MAX_COMBINED_TEXTURE_IMAGE_UNITS\";\n GL[GL[\"MAX_VERTEX_TEXTURE_IMAGE_UNITS\"] = 35660] = \"MAX_VERTEX_TEXTURE_IMAGE_UNITS\";\n GL[GL[\"MAX_TEXTURE_IMAGE_UNITS\"] = 34930] = \"MAX_TEXTURE_IMAGE_UNITS\";\n GL[GL[\"MAX_FRAGMENT_UNIFORM_VECTORS\"] = 36349] = \"MAX_FRAGMENT_UNIFORM_VECTORS\";\n GL[GL[\"SHADER_TYPE\"] = 35663] = \"SHADER_TYPE\";\n GL[GL[\"SHADING_LANGUAGE_VERSION\"] = 35724] = \"SHADING_LANGUAGE_VERSION\";\n GL[GL[\"CURRENT_PROGRAM\"] = 35725] = \"CURRENT_PROGRAM\";\n // Depth or stencil tests\n // Constants passed to depthFunc() or stencilFunc().\n GL[GL[\"NEVER\"] = 512] = \"NEVER\";\n GL[GL[\"ALWAYS\"] = 519] = \"ALWAYS\";\n GL[GL[\"LESS\"] = 513] = \"LESS\";\n GL[GL[\"EQUAL\"] = 514] = \"EQUAL\";\n GL[GL[\"LEQUAL\"] = 515] = \"LEQUAL\";\n GL[GL[\"GREATER\"] = 516] = \"GREATER\";\n GL[GL[\"GEQUAL\"] = 518] = \"GEQUAL\";\n GL[GL[\"NOTEQUAL\"] = 517] = \"NOTEQUAL\";\n // Stencil actions\n // Constants passed to stencilOp().\n GL[GL[\"KEEP\"] = 7680] = \"KEEP\";\n GL[GL[\"REPLACE\"] = 7681] = \"REPLACE\";\n GL[GL[\"INCR\"] = 7682] = \"INCR\";\n GL[GL[\"DECR\"] = 7683] = \"DECR\";\n GL[GL[\"INVERT\"] = 5386] = \"INVERT\";\n GL[GL[\"INCR_WRAP\"] = 34055] = \"INCR_WRAP\";\n GL[GL[\"DECR_WRAP\"] = 34056] = \"DECR_WRAP\";\n // Textures\n // Constants passed to texParameteri(),\n // texParameterf(), bindTexture(), texImage2D(), and others.\n GL[GL[\"NEAREST\"] = 9728] = \"NEAREST\";\n GL[GL[\"LINEAR\"] = 9729] = \"LINEAR\";\n GL[GL[\"NEAREST_MIPMAP_NEAREST\"] = 9984] = \"NEAREST_MIPMAP_NEAREST\";\n GL[GL[\"LINEAR_MIPMAP_NEAREST\"] = 9985] = \"LINEAR_MIPMAP_NEAREST\";\n GL[GL[\"NEAREST_MIPMAP_LINEAR\"] = 9986] = \"NEAREST_MIPMAP_LINEAR\";\n GL[GL[\"LINEAR_MIPMAP_LINEAR\"] = 9987] = \"LINEAR_MIPMAP_LINEAR\";\n GL[GL[\"TEXTURE_MAG_FILTER\"] = 10240] = \"TEXTURE_MAG_FILTER\";\n GL[GL[\"TEXTURE_MIN_FILTER\"] = 10241] = \"TEXTURE_MIN_FILTER\";\n GL[GL[\"TEXTURE_WRAP_S\"] = 10242] = \"TEXTURE_WRAP_S\";\n GL[GL[\"TEXTURE_WRAP_T\"] = 10243] = \"TEXTURE_WRAP_T\";\n GL[GL[\"TEXTURE_2D\"] = 3553] = \"TEXTURE_2D\";\n GL[GL[\"TEXTURE\"] = 5890] = \"TEXTURE\";\n GL[GL[\"TEXTURE_CUBE_MAP\"] = 34067] = \"TEXTURE_CUBE_MAP\";\n GL[GL[\"TEXTURE_BINDING_CUBE_MAP\"] = 34068] = \"TEXTURE_BINDING_CUBE_MAP\";\n GL[GL[\"TEXTURE_CUBE_MAP_POSITIVE_X\"] = 34069] = \"TEXTURE_CUBE_MAP_POSITIVE_X\";\n GL[GL[\"TEXTURE_CUBE_MAP_NEGATIVE_X\"] = 34070] = \"TEXTURE_CUBE_MAP_NEGATIVE_X\";\n GL[GL[\"TEXTURE_CUBE_MAP_POSITIVE_Y\"] = 34071] = \"TEXTURE_CUBE_MAP_POSITIVE_Y\";\n GL[GL[\"TEXTURE_CUBE_MAP_NEGATIVE_Y\"] = 34072] = \"TEXTURE_CUBE_MAP_NEGATIVE_Y\";\n GL[GL[\"TEXTURE_CUBE_MAP_POSITIVE_Z\"] = 34073] = \"TEXTURE_CUBE_MAP_POSITIVE_Z\";\n GL[GL[\"TEXTURE_CUBE_MAP_NEGATIVE_Z\"] = 34074] = \"TEXTURE_CUBE_MAP_NEGATIVE_Z\";\n GL[GL[\"MAX_CUBE_MAP_TEXTURE_SIZE\"] = 34076] = \"MAX_CUBE_MAP_TEXTURE_SIZE\";\n // TEXTURE0 - 31 0x84C0 - 0x84DF A texture unit.\n GL[GL[\"TEXTURE0\"] = 33984] = \"TEXTURE0\";\n GL[GL[\"ACTIVE_TEXTURE\"] = 34016] = \"ACTIVE_TEXTURE\";\n GL[GL[\"REPEAT\"] = 10497] = \"REPEAT\";\n GL[GL[\"CLAMP_TO_EDGE\"] = 33071] = \"CLAMP_TO_EDGE\";\n GL[GL[\"MIRRORED_REPEAT\"] = 33648] = \"MIRRORED_REPEAT\";\n // Emulation\n GL[GL[\"TEXTURE_WIDTH\"] = 4096] = \"TEXTURE_WIDTH\";\n GL[GL[\"TEXTURE_HEIGHT\"] = 4097] = \"TEXTURE_HEIGHT\";\n // Uniform types\n GL[GL[\"FLOAT_VEC2\"] = 35664] = \"FLOAT_VEC2\";\n GL[GL[\"FLOAT_VEC3\"] = 35665] = \"FLOAT_VEC3\";\n GL[GL[\"FLOAT_VEC4\"] = 35666] = \"FLOAT_VEC4\";\n GL[GL[\"INT_VEC2\"] = 35667] = \"INT_VEC2\";\n GL[GL[\"INT_VEC3\"] = 35668] = \"INT_VEC3\";\n GL[GL[\"INT_VEC4\"] = 35669] = \"INT_VEC4\";\n GL[GL[\"BOOL\"] = 35670] = \"BOOL\";\n GL[GL[\"BOOL_VEC2\"] = 35671] = \"BOOL_VEC2\";\n GL[GL[\"BOOL_VEC3\"] = 35672] = \"BOOL_VEC3\";\n GL[GL[\"BOOL_VEC4\"] = 35673] = \"BOOL_VEC4\";\n GL[GL[\"FLOAT_MAT2\"] = 35674] = \"FLOAT_MAT2\";\n GL[GL[\"FLOAT_MAT3\"] = 35675] = \"FLOAT_MAT3\";\n GL[GL[\"FLOAT_MAT4\"] = 35676] = \"FLOAT_MAT4\";\n GL[GL[\"SAMPLER_2D\"] = 35678] = \"SAMPLER_2D\";\n GL[GL[\"SAMPLER_CUBE\"] = 35680] = \"SAMPLER_CUBE\";\n // Shader precision-specified types\n GL[GL[\"LOW_FLOAT\"] = 36336] = \"LOW_FLOAT\";\n GL[GL[\"MEDIUM_FLOAT\"] = 36337] = \"MEDIUM_FLOAT\";\n GL[GL[\"HIGH_FLOAT\"] = 36338] = \"HIGH_FLOAT\";\n GL[GL[\"LOW_INT\"] = 36339] = \"LOW_INT\";\n GL[GL[\"MEDIUM_INT\"] = 36340] = \"MEDIUM_INT\";\n GL[GL[\"HIGH_INT\"] = 36341] = \"HIGH_INT\";\n // Framebuffers and renderbuffers\n GL[GL[\"FRAMEBUFFER\"] = 36160] = \"FRAMEBUFFER\";\n GL[GL[\"RENDERBUFFER\"] = 36161] = \"RENDERBUFFER\";\n GL[GL[\"RGBA4\"] = 32854] = \"RGBA4\";\n GL[GL[\"RGB5_A1\"] = 32855] = \"RGB5_A1\";\n GL[GL[\"RGB565\"] = 36194] = \"RGB565\";\n GL[GL[\"DEPTH_COMPONENT16\"] = 33189] = \"DEPTH_COMPONENT16\";\n GL[GL[\"STENCIL_INDEX\"] = 6401] = \"STENCIL_INDEX\";\n GL[GL[\"STENCIL_INDEX8\"] = 36168] = \"STENCIL_INDEX8\";\n GL[GL[\"DEPTH_STENCIL\"] = 34041] = \"DEPTH_STENCIL\";\n GL[GL[\"RENDERBUFFER_WIDTH\"] = 36162] = \"RENDERBUFFER_WIDTH\";\n GL[GL[\"RENDERBUFFER_HEIGHT\"] = 36163] = \"RENDERBUFFER_HEIGHT\";\n GL[GL[\"RENDERBUFFER_INTERNAL_FORMAT\"] = 36164] = \"RENDERBUFFER_INTERNAL_FORMAT\";\n GL[GL[\"RENDERBUFFER_RED_SIZE\"] = 36176] = \"RENDERBUFFER_RED_SIZE\";\n GL[GL[\"RENDERBUFFER_GREEN_SIZE\"] = 36177] = \"RENDERBUFFER_GREEN_SIZE\";\n GL[GL[\"RENDERBUFFER_BLUE_SIZE\"] = 36178] = \"RENDERBUFFER_BLUE_SIZE\";\n GL[GL[\"RENDERBUFFER_ALPHA_SIZE\"] = 36179] = \"RENDERBUFFER_ALPHA_SIZE\";\n GL[GL[\"RENDERBUFFER_DEPTH_SIZE\"] = 36180] = \"RENDERBUFFER_DEPTH_SIZE\";\n GL[GL[\"RENDERBUFFER_STENCIL_SIZE\"] = 36181] = \"RENDERBUFFER_STENCIL_SIZE\";\n GL[GL[\"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\"] = 36048] = \"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\";\n GL[GL[\"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\"] = 36049] = \"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\";\n GL[GL[\"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\"] = 36050] = \"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\";\n GL[GL[\"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\"] = 36051] = \"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\";\n GL[GL[\"COLOR_ATTACHMENT0\"] = 36064] = \"COLOR_ATTACHMENT0\";\n GL[GL[\"DEPTH_ATTACHMENT\"] = 36096] = \"DEPTH_ATTACHMENT\";\n GL[GL[\"STENCIL_ATTACHMENT\"] = 36128] = \"STENCIL_ATTACHMENT\";\n GL[GL[\"DEPTH_STENCIL_ATTACHMENT\"] = 33306] = \"DEPTH_STENCIL_ATTACHMENT\";\n GL[GL[\"NONE\"] = 0] = \"NONE\";\n GL[GL[\"FRAMEBUFFER_COMPLETE\"] = 36053] = \"FRAMEBUFFER_COMPLETE\";\n GL[GL[\"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\"] = 36054] = \"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\";\n GL[GL[\"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\"] = 36055] = \"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\";\n GL[GL[\"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\"] = 36057] = \"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\";\n GL[GL[\"FRAMEBUFFER_UNSUPPORTED\"] = 36061] = \"FRAMEBUFFER_UNSUPPORTED\";\n GL[GL[\"FRAMEBUFFER_BINDING\"] = 36006] = \"FRAMEBUFFER_BINDING\";\n GL[GL[\"RENDERBUFFER_BINDING\"] = 36007] = \"RENDERBUFFER_BINDING\";\n GL[GL[\"READ_FRAMEBUFFER\"] = 36008] = \"READ_FRAMEBUFFER\";\n GL[GL[\"DRAW_FRAMEBUFFER\"] = 36009] = \"DRAW_FRAMEBUFFER\";\n GL[GL[\"MAX_RENDERBUFFER_SIZE\"] = 34024] = \"MAX_RENDERBUFFER_SIZE\";\n GL[GL[\"INVALID_FRAMEBUFFER_OPERATION\"] = 1286] = \"INVALID_FRAMEBUFFER_OPERATION\";\n // Pixel storage modes\n // Constants passed to pixelStorei().\n GL[GL[\"UNPACK_FLIP_Y_WEBGL\"] = 37440] = \"UNPACK_FLIP_Y_WEBGL\";\n GL[GL[\"UNPACK_PREMULTIPLY_ALPHA_WEBGL\"] = 37441] = \"UNPACK_PREMULTIPLY_ALPHA_WEBGL\";\n GL[GL[\"UNPACK_COLORSPACE_CONVERSION_WEBGL\"] = 37443] = \"UNPACK_COLORSPACE_CONVERSION_WEBGL\";\n // /////////////////////////////////////////////////////\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 // /////////////////////////////////////////////////////\n // Getting GL parameter information\n // Constants passed to getParameter()\n // to specify what information to return.\n GL[GL[\"READ_BUFFER\"] = 3074] = \"READ_BUFFER\";\n GL[GL[\"UNPACK_ROW_LENGTH\"] = 3314] = \"UNPACK_ROW_LENGTH\";\n GL[GL[\"UNPACK_SKIP_ROWS\"] = 3315] = \"UNPACK_SKIP_ROWS\";\n GL[GL[\"UNPACK_SKIP_PIXELS\"] = 3316] = \"UNPACK_SKIP_PIXELS\";\n GL[GL[\"PACK_ROW_LENGTH\"] = 3330] = \"PACK_ROW_LENGTH\";\n GL[GL[\"PACK_SKIP_ROWS\"] = 3331] = \"PACK_SKIP_ROWS\";\n GL[GL[\"PACK_SKIP_PIXELS\"] = 3332] = \"PACK_SKIP_PIXELS\";\n GL[GL[\"TEXTURE_BINDING_3D\"] = 32874] = \"TEXTURE_BINDING_3D\";\n GL[GL[\"UNPACK_SKIP_IMAGES\"] = 32877] = \"UNPACK_SKIP_IMAGES\";\n GL[GL[\"UNPACK_IMAGE_HEIGHT\"] = 32878] = \"UNPACK_IMAGE_HEIGHT\";\n GL[GL[\"MAX_3D_TEXTURE_SIZE\"] = 32883] = \"MAX_3D_TEXTURE_SIZE\";\n GL[GL[\"MAX_ELEMENTS_VERTICES\"] = 33000] = \"MAX_ELEMENTS_VERTICES\";\n GL[GL[\"MAX_ELEMENTS_INDICES\"] = 33001] = \"MAX_ELEMENTS_INDICES\";\n GL[GL[\"MAX_TEXTURE_LOD_BIAS\"] = 34045] = \"MAX_TEXTURE_LOD_BIAS\";\n GL[GL[\"MAX_FRAGMENT_UNIFORM_COMPONENTS\"] = 35657] = \"MAX_FRAGMENT_UNIFORM_COMPONENTS\";\n GL[GL[\"MAX_VERTEX_UNIFORM_COMPONENTS\"] = 35658] = \"MAX_VERTEX_UNIFORM_COMPONENTS\";\n GL[GL[\"MAX_ARRAY_TEXTURE_LAYERS\"] = 35071] = \"MAX_ARRAY_TEXTURE_LAYERS\";\n GL[GL[\"MIN_PROGRAM_TEXEL_OFFSET\"] = 35076] = \"MIN_PROGRAM_TEXEL_OFFSET\";\n GL[GL[\"MAX_PROGRAM_TEXEL_OFFSET\"] = 35077] = \"MAX_PROGRAM_TEXEL_OFFSET\";\n GL[GL[\"MAX_VARYING_COMPONENTS\"] = 35659] = \"MAX_VARYING_COMPONENTS\";\n GL[GL[\"FRAGMENT_SHADER_DERIVATIVE_HINT\"] = 35723] = \"FRAGMENT_SHADER_DERIVATIVE_HINT\";\n GL[GL[\"RASTERIZER_DISCARD\"] = 35977] = \"RASTERIZER_DISCARD\";\n GL[GL[\"VERTEX_ARRAY_BINDING\"] = 34229] = \"VERTEX_ARRAY_BINDING\";\n GL[GL[\"MAX_VERTEX_OUTPUT_COMPONENTS\"] = 37154] = \"MAX_VERTEX_OUTPUT_COMPONENTS\";\n GL[GL[\"MAX_FRAGMENT_INPUT_COMPONENTS\"] = 37157] = \"MAX_FRAGMENT_INPUT_COMPONENTS\";\n GL[GL[\"MAX_SERVER_WAIT_TIMEOUT\"] = 37137] = \"MAX_SERVER_WAIT_TIMEOUT\";\n GL[GL[\"MAX_ELEMENT_INDEX\"] = 36203] = \"MAX_ELEMENT_INDEX\";\n // Textures\n // Constants passed to texParameteri(),\n // texParameterf(), bindTexture(), texImage2D(), and others.\n GL[GL[\"RED\"] = 6403] = \"RED\";\n GL[GL[\"RGB8\"] = 32849] = \"RGB8\";\n GL[GL[\"RGBA8\"] = 32856] = \"RGBA8\";\n GL[GL[\"RGB10_A2\"] = 32857] = \"RGB10_A2\";\n GL[GL[\"TEXTURE_3D\"] = 32879] = \"TEXTURE_3D\";\n GL[GL[\"TEXTURE_WRAP_R\"] = 32882] = \"TEXTURE_WRAP_R\";\n GL[GL[\"TEXTURE_MIN_LOD\"] = 33082] = \"TEXTURE_MIN_LOD\";\n GL[GL[\"TEXTURE_MAX_LOD\"] = 33083] = \"TEXTURE_MAX_LOD\";\n GL[GL[\"TEXTURE_BASE_LEVEL\"] = 33084] = \"TEXTURE_BASE_LEVEL\";\n GL[GL[\"TEXTURE_MAX_LEVEL\"] = 33085] = \"TEXTURE_MAX_LEVEL\";\n GL[GL[\"TEXTURE_COMPARE_MODE\"] = 34892] = \"TEXTURE_COMPARE_MODE\";\n GL[GL[\"TEXTURE_COMPARE_FUNC\"] = 34893] = \"TEXTURE_COMPARE_FUNC\";\n GL[GL[\"SRGB\"] = 35904] = \"SRGB\";\n GL[GL[\"SRGB8\"] = 35905] = \"SRGB8\";\n GL[GL[\"SRGB8_ALPHA8\"] = 35907] = \"SRGB8_ALPHA8\";\n GL[GL[\"COMPARE_REF_TO_TEXTURE\"] = 34894] = \"COMPARE_REF_TO_TEXTURE\";\n GL[GL[\"RGBA32F\"] = 34836] = \"RGBA32F\";\n GL[GL[\"RGB32F\"] = 34837] = \"RGB32F\";\n GL[GL[\"RGBA16F\"] = 34842] = \"RGBA16F\";\n GL[GL[\"RGB16F\"] = 34843] = \"RGB16F\";\n GL[GL[\"TEXTURE_2D_ARRAY\"] = 35866] = \"TEXTURE_2D_ARRAY\";\n GL[GL[\"TEXTURE_BINDING_2D_ARRAY\"] = 35869] = \"TEXTURE_BINDING_2D_ARRAY\";\n GL[GL[\"R11F_G11F_B10F\"] = 35898] = \"R11F_G11F_B10F\";\n GL[GL[\"RGB9_E5\"] = 35901] = \"RGB9_E5\";\n GL[GL[\"RGBA32UI\"] = 36208] = \"RGBA32UI\";\n GL[GL[\"RGB32UI\"] = 36209] = \"RGB32UI\";\n GL[GL[\"RGBA16UI\"] = 36214] = \"RGBA16UI\";\n GL[GL[\"RGB16UI\"] = 36215] = \"RGB16UI\";\n GL[GL[\"RGBA8UI\"] = 36220] = \"RGBA8UI\";\n GL[GL[\"RGB8UI\"] = 36221] = \"RGB8UI\";\n GL[GL[\"RGBA32I\"] = 36226] = \"RGBA32I\";\n GL[GL[\"RGB32I\"] = 36227] = \"RGB32I\";\n GL[GL[\"RGBA16I\"] = 36232] = \"RGBA16I\";\n GL[GL[\"RGB16I\"] = 36233] = \"RGB16I\";\n GL[GL[\"RGBA8I\"] = 36238] = \"RGBA8I\";\n GL[GL[\"RGB8I\"] = 36239] = \"RGB8I\";\n GL[GL[\"RED_INTEGER\"] = 36244] = \"RED_INTEGER\";\n GL[GL[\"RGB_INTEGER\"] = 36248] = \"RGB_INTEGER\";\n GL[GL[\"RGBA_INTEGER\"] = 36249] = \"RGBA_INTEGER\";\n GL[GL[\"R8\"] = 33321] = \"R8\";\n GL[GL[\"RG8\"] = 33323] = \"RG8\";\n GL[GL[\"R16F\"] = 33325] = \"R16F\";\n GL[GL[\"R32F\"] = 33326] = \"R32F\";\n GL[GL[\"RG16F\"] = 33327] = \"RG16F\";\n GL[GL[\"RG32F\"] = 33328] = \"RG32F\";\n GL[GL[\"R8I\"] = 33329] = \"R8I\";\n GL[GL[\"R8UI\"] = 33330] = \"R8UI\";\n GL[GL[\"R16I\"] = 33331] = \"R16I\";\n GL[GL[\"R16UI\"] = 33332] = \"R16UI\";\n GL[GL[\"R32I\"] = 33333] = \"R32I\";\n GL[GL[\"R32UI\"] = 33334] = \"R32UI\";\n GL[GL[\"RG8I\"] = 33335] = \"RG8I\";\n GL[GL[\"RG8UI\"] = 33336] = \"RG8UI\";\n GL[GL[\"RG16I\"] = 33337] = \"RG16I\";\n GL[GL[\"RG16UI\"] = 33338] = \"RG16UI\";\n GL[GL[\"RG32I\"] = 33339] = \"RG32I\";\n GL[GL[\"RG32UI\"] = 33340] = \"RG32UI\";\n GL[GL[\"R8_SNORM\"] = 36756] = \"R8_SNORM\";\n GL[GL[\"RG8_SNORM\"] = 36757] = \"RG8_SNORM\";\n GL[GL[\"RGB8_SNORM\"] = 36758] = \"RGB8_SNORM\";\n GL[GL[\"RGBA8_SNORM\"] = 36759] = \"RGBA8_SNORM\";\n GL[GL[\"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 GL[GL[\"TEXTURE_IMMUTABLE_FORMAT\"] = 37167] = \"TEXTURE_IMMUTABLE_FORMAT\";\n GL[GL[\"TEXTURE_IMMUTABLE_LEVELS\"] = 33503] = \"TEXTURE_IMMUTABLE_LEVELS\";\n // Pixel types\n GL[GL[\"UNSIGNED_INT_2_10_10_10_REV\"] = 33640] = \"UNSIGNED_INT_2_10_10_10_REV\";\n GL[GL[\"UNSIGNED_INT_10F_11F_11F_REV\"] = 35899] = \"UNSIGNED_INT_10F_11F_11F_REV\";\n GL[GL[\"UNSIGNED_INT_5_9_9_9_REV\"] = 35902] = \"UNSIGNED_INT_5_9_9_9_REV\";\n GL[GL[\"FLOAT_32_UNSIGNED_INT_24_8_REV\"] = 36269] = \"FLOAT_32_UNSIGNED_INT_24_8_REV\";\n GL[GL[\"UNSIGNED_INT_24_8\"] = 34042] = \"UNSIGNED_INT_24_8\";\n GL[GL[\"HALF_FLOAT\"] = 5131] = \"HALF_FLOAT\";\n GL[GL[\"RG\"] = 33319] = \"RG\";\n GL[GL[\"RG_INTEGER\"] = 33320] = \"RG_INTEGER\";\n GL[GL[\"INT_2_10_10_10_REV\"] = 36255] = \"INT_2_10_10_10_REV\";\n // Queries\n GL[GL[\"CURRENT_QUERY\"] = 34917] = \"CURRENT_QUERY\";\n GL[GL[\"QUERY_RESULT\"] = 34918] = \"QUERY_RESULT\";\n GL[GL[\"QUERY_RESULT_AVAILABLE\"] = 34919] = \"QUERY_RESULT_AVAILABLE\";\n GL[GL[\"ANY_SAMPLES_PASSED\"] = 35887] = \"ANY_SAMPLES_PASSED\";\n GL[GL[\"ANY_SAMPLES_PASSED_CONSERVATIVE\"] = 36202] = \"ANY_SAMPLES_PASSED_CONSERVATIVE\";\n // Draw buffers\n GL[GL[\"MAX_DRAW_BUFFERS\"] = 34852] = \"MAX_DRAW_BUFFERS\";\n GL[GL[\"DRAW_BUFFER0\"] = 34853] = \"DRAW_BUFFER0\";\n GL[GL[\"DRAW_BUFFER1\"] = 34854] = \"DRAW_BUFFER1\";\n GL[GL[\"DRAW_BUFFER2\"] = 34855] = \"DRAW_BUFFER2\";\n GL[GL[\"DRAW_BUFFER3\"] = 34856] = \"DRAW_BUFFER3\";\n GL[GL[\"DRAW_BUFFER4\"] = 34857] = \"DRAW_BUFFER4\";\n GL[GL[\"DRAW_BUFFER5\"] = 34858] = \"DRAW_BUFFER5\";\n GL[GL[\"DRAW_BUFFER6\"] = 34859] = \"DRAW_BUFFER6\";\n GL[GL[\"DRAW_BUFFER7\"] = 34860] = \"DRAW_BUFFER7\";\n GL[GL[\"DRAW_BUFFER8\"] = 34861] = \"DRAW_BUFFER8\";\n GL[GL[\"DRAW_BUFFER9\"] = 34862] = \"DRAW_BUFFER9\";\n GL[GL[\"DRAW_BUFFER10\"] = 34863] = \"DRAW_BUFFER10\";\n GL[GL[\"DRAW_BUFFER11\"] = 34864] = \"DRAW_BUFFER11\";\n GL[GL[\"DRAW_BUFFER12\"] = 34865] = \"DRAW_BUFFER12\";\n GL[GL[\"DRAW_BUFFER13\"] = 34866] = \"DRAW_BUFFER13\";\n GL[GL[\"DRAW_BUFFER14\"] = 34867] = \"DRAW_BUFFER14\";\n GL[GL[\"DRAW_BUFFER15\"] = 34868] = \"DRAW_BUFFER15\";\n GL[GL[\"MAX_COLOR_ATTACHMENTS\"] = 36063] = \"MAX_COLOR_ATTACHMENTS\";\n GL[GL[\"COLOR_ATTACHMENT1\"] = 36065] = \"COLOR_ATTACHMENT1\";\n GL[GL[\"COLOR_ATTACHMENT2\"] = 36066] = \"COLOR_ATTACHMENT2\";\n GL[GL[\"COLOR_ATTACHMENT3\"] = 36067] = \"COLOR_ATTACHMENT3\";\n GL[GL[\"COLOR_ATTACHMENT4\"] = 36068] = \"COLOR_ATTACHMENT4\";\n GL[GL[\"COLOR_ATTACHMENT5\"] = 36069] = \"COLOR_ATTACHMENT5\";\n GL[GL[\"COLOR_ATTACHMENT6\"] = 36070] = \"COLOR_ATTACHMENT6\";\n GL[GL[\"COLOR_ATTACHMENT7\"] = 36071] = \"COLOR_ATTACHMENT7\";\n GL[GL[\"COLOR_ATTACHMENT8\"] = 36072] = \"COLOR_ATTACHMENT8\";\n GL[GL[\"COLOR_ATTACHMENT9\"] = 36073] = \"COLOR_ATTACHMENT9\";\n GL[GL[\"COLOR_ATTACHMENT10\"] = 36074] = \"COLOR_ATTACHMENT10\";\n GL[GL[\"COLOR_ATTACHMENT11\"] = 36075] = \"COLOR_ATTACHMENT11\";\n GL[GL[\"COLOR_ATTACHMENT12\"] = 36076] = \"COLOR_ATTACHMENT12\";\n GL[GL[\"COLOR_ATTACHMENT13\"] = 36077] = \"COLOR_ATTACHMENT13\";\n GL[GL[\"COLOR_ATTACHMENT14\"] = 36078] = \"COLOR_ATTACHMENT14\";\n GL[GL[\"COLOR_ATTACHMENT15\"] = 36079] = \"COLOR_ATTACHMENT15\";\n // Samplers\n GL[GL[\"SAMPLER_3D\"] = 35679] = \"SAMPLER_3D\";\n GL[GL[\"SAMPLER_2D_SHADOW\"] = 35682] = \"SAMPLER_2D_SHADOW\";\n GL[GL[\"SAMPLER_2D_ARRAY\"] = 36289] = \"SAMPLER_2D_ARRAY\";\n GL[GL[\"SAMPLER_2D_ARRAY_SHADOW\"] = 36292] = \"SAMPLER_2D_ARRAY_SHADOW\";\n GL[GL[\"SAMPLER_CUBE_SHADOW\"] = 36293] = \"SAMPLER_CUBE_SHADOW\";\n GL[GL[\"INT_SAMPLER_2D\"] = 36298] = \"INT_SAMPLER_2D\";\n GL[GL[\"INT_SAMPLER_3D\"] = 36299] = \"INT_SAMPLER_3D\";\n GL[GL[\"INT_SAMPLER_CUBE\"] = 36300] = \"INT_SAMPLER_CUBE\";\n GL[GL[\"INT_SAMPLER_2D_ARRAY\"] = 36303] = \"INT_SAMPLER_2D_ARRAY\";\n GL[GL[\"UNSIGNED_INT_SAMPLER_2D\"] = 36306] = \"UNSIGNED_INT_SAMPLER_2D\";\n GL[GL[\"UNSIGNED_INT_SAMPLER_3D\"] = 36307] = \"UNSIGNED_INT_SAMPLER_3D\";\n GL[GL[\"UNSIGNED_INT_SAMPLER_CUBE\"] = 36308] = \"UNSIGNED_INT_SAMPLER_CUBE\";\n GL[GL[\"UNSIGNED_INT_SAMPLER_2D_ARRAY\"] = 36311] = \"UNSIGNED_INT_SAMPLER_2D_ARRAY\";\n GL[GL[\"MAX_SAMPLES\"] = 36183] = \"MAX_SAMPLES\";\n GL[GL[\"SAMPLER_BINDING\"] = 35097] = \"SAMPLER_BINDING\";\n // Buffers\n GL[GL[\"PIXEL_PACK_BUFFER\"] = 35051] = \"PIXEL_PACK_BUFFER\";\n GL[GL[\"PIXEL_UNPACK_BUFFER\"] = 35052] = \"PIXEL_UNPACK_BUFFER\";\n GL[GL[\"PIXEL_PACK_BUFFER_BINDING\"] = 35053] = \"PIXEL_PACK_BUFFER_BINDING\";\n GL[GL[\"PIXEL_UNPACK_BUFFER_BINDING\"] = 35055] = \"PIXEL_UNPACK_BUFFER_BINDING\";\n GL[GL[\"COPY_READ_BUFFER\"] = 36662] = \"COPY_READ_BUFFER\";\n GL[GL[\"COPY_WRITE_BUFFER\"] = 36663] = \"COPY_WRITE_BUFFER\";\n GL[GL[\"COPY_READ_BUFFER_BINDING\"] = 36662] = \"COPY_READ_BUFFER_BINDING\";\n GL[GL[\"COPY_WRITE_BUFFER_BINDING\"] = 36663] = \"COPY_WRITE_BUFFER_BINDING\";\n // Data types\n GL[GL[\"FLOAT_MAT2x3\"] = 35685] = \"FLOAT_MAT2x3\";\n GL[GL[\"FLOAT_MAT2x4\"] = 35686] = \"FLOAT_MAT2x4\";\n GL[GL[\"FLOAT_MAT3x2\"] = 35687] = \"FLOAT_MAT3x2\";\n GL[GL[\"FLOAT_MAT3x4\"] = 35688] = \"FLOAT_MAT3x4\";\n GL[GL[\"FLOAT_MAT4x2\"] = 35689] = \"FLOAT_MAT4x2\";\n GL[GL[\"FLOAT_MAT4x3\"] = 35690] = \"FLOAT_MAT4x3\";\n GL[GL[\"UNSIGNED_INT_VEC2\"] = 36294] = \"UNSIGNED_INT_VEC2\";\n GL[GL[\"UNSIGNED_INT_VEC3\"] = 36295] = \"UNSIGNED_INT_VEC3\";\n GL[GL[\"UNSIGNED_INT_VEC4\"] = 36296] = \"UNSIGNED_INT_VEC4\";\n GL[GL[\"UNSIGNED_NORMALIZED\"] = 35863] = \"UNSIGNED_NORMALIZED\";\n GL[GL[\"SIGNED_NORMALIZED\"] = 36764] = \"SIGNED_NORMALIZED\";\n // Vertex attributes\n GL[GL[\"VERTEX_ATTRIB_ARRAY_INTEGER\"] = 35069] = \"VERTEX_ATTRIB_ARRAY_INTEGER\";\n GL[GL[\"VERTEX_ATTRIB_ARRAY_DIVISOR\"] = 35070] = \"VERTEX_ATTRIB_ARRAY_DIVISOR\";\n // Transform feedback\n GL[GL[\"TRANSFORM_FEEDBACK_BUFFER_MODE\"] = 35967] = \"TRANSFORM_FEEDBACK_BUFFER_MODE\";\n GL[GL[\"MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS\"] = 35968] = \"MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS\";\n GL[GL[\"TRANSFORM_FEEDBACK_VARYINGS\"] = 35971] = \"TRANSFORM_FEEDBACK_VARYINGS\";\n GL[GL[\"TRANSFORM_FEEDBACK_BUFFER_START\"] = 35972] = \"TRANSFORM_FEEDBACK_BUFFER_START\";\n GL[GL[\"TRANSFORM_FEEDBACK_BUFFER_SIZE\"] = 35973] = \"TRANSFORM_FEEDBACK_BUFFER_SIZE\";\n GL[GL[\"TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN\"] = 35976] = \"TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN\";\n GL[GL[\"MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS\"] = 35978] = \"MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS\";\n GL[GL[\"MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS\"] = 35979] = \"MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS\";\n GL[GL[\"INTERLEAVED_ATTRIBS\"] = 35980] = \"INTERLEAVED_ATTRIBS\";\n GL[GL[\"SEPARATE_ATTRIBS\"] = 35981] = \"SEPARATE_ATTRIBS\";\n GL[GL[\"TRANSFORM_FEEDBACK_BUFFER\"] = 35982] = \"TRANSFORM_FEEDBACK_BUFFER\";\n GL[GL[\"TRANSFORM_FEEDBACK_BUFFER_BINDING\"] = 35983] = \"TRANSFORM_FEEDBACK_BUFFER_BINDING\";\n GL[GL[\"TRANSFORM_FEEDBACK\"] = 36386] = \"TRANSFORM_FEEDBACK\";\n GL[GL[\"TRANSFORM_FEEDBACK_PAUSED\"] = 36387] = \"TRANSFORM_FEEDBACK_PAUSED\";\n GL[GL[\"TRANSFORM_FEEDBACK_ACTIVE\"] = 36388] = \"TRANSFORM_FEEDBACK_ACTIVE\";\n GL[GL[\"TRANSFORM_FEEDBACK_BINDING\"] = 36389] = \"TRANSFORM_FEEDBACK_BINDING\";\n // Framebuffers and renderbuffers\n GL[GL[\"FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING\"] = 33296] = \"FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING\";\n GL[GL[\"FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE\"] = 33297] = \"FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE\";\n GL[GL[\"FRAMEBUFFER_ATTACHMENT_RED_SIZE\"] = 33298] = \"FRAMEBUFFER_ATTACHMENT_RED_SIZE\";\n GL[GL[\"FRAMEBUFFER_ATTACHMENT_GREEN_SIZE\"] = 33299] = \"FRAMEBUFFER_ATTACHMENT_GREEN_SIZE\";\n GL[GL[\"FRAMEBUFFER_ATTACHMENT_BLUE_SIZE\"] = 33300] = \"FRAMEBUFFER_ATTACHMENT_BLUE_SIZE\";\n GL[GL[\"FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE\"] = 33301] = \"FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE\";\n GL[GL[\"FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE\"] = 33302] = \"FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE\";\n GL[GL[\"FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE\"] = 33303] = \"FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE\";\n GL[GL[\"FRAMEBUFFER_DEFAULT\"] = 33304] = \"FRAMEBUFFER_DEFAULT\";\n // DEPTH_STENCIL_ATTACHMENT = 0x821A,\n // DEPTH_STENCIL = 0x84F9,\n GL[GL[\"DEPTH24_STENCIL8\"] = 35056] = \"DEPTH24_STENCIL8\";\n GL[GL[\"DRAW_FRAMEBUFFER_BINDING\"] = 36006] = \"DRAW_FRAMEBUFFER_BINDING\";\n GL[GL[\"READ_FRAMEBUFFER_BINDING\"] = 36010] = \"READ_FRAMEBUFFER_BINDING\";\n GL[GL[\"RENDERBUFFER_SAMPLES\"] = 36011] = \"RENDERBUFFER_SAMPLES\";\n GL[GL[\"FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER\"] = 36052] = \"FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER\";\n GL[GL[\"FRAMEBUFFER_INCOMPLETE_MULTISAMPLE\"] = 36182] = \"FRAMEBUFFER_INCOMPLETE_MULTISAMPLE\";\n // Uniforms\n GL[GL[\"UNIFORM_BUFFER\"] = 35345] = \"UNIFORM_BUFFER\";\n GL[GL[\"UNIFORM_BUFFER_BINDING\"] = 35368] = \"UNIFORM_BUFFER_BINDING\";\n GL[GL[\"UNIFORM_BUFFER_START\"] = 35369] = \"UNIFORM_BUFFER_START\";\n GL[GL[\"UNIFORM_BUFFER_SIZE\"] = 35370] = \"UNIFORM_BUFFER_SIZE\";\n GL[GL[\"MAX_VERTEX_UNIFORM_BLOCKS\"] = 35371] = \"MAX_VERTEX_UNIFORM_BLOCKS\";\n GL[GL[\"MAX_FRAGMENT_UNIFORM_BLOCKS\"] = 35373] = \"MAX_FRAGMENT_UNIFORM_BLOCKS\";\n GL[GL[\"MAX_COMBINED_UNIFORM_BLOCKS\"] = 35374] = \"MAX_COMBINED_UNIFORM_BLOCKS\";\n GL[GL[\"MAX_UNIFORM_BUFFER_BINDINGS\"] = 35375] = \"MAX_UNIFORM_BUFFER_BINDINGS\";\n GL[GL[\"MAX_UNIFORM_BLOCK_SIZE\"] = 35376] = \"MAX_UNIFORM_BLOCK_SIZE\";\n GL[GL[\"MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS\"] = 35377] = \"MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS\";\n GL[GL[\"MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS\"] = 35379] = \"MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS\";\n GL[GL[\"UNIFORM_BUFFER_OFFSET_ALIGNMENT\"] = 35380] = \"UNIFORM_BUFFER_OFFSET_ALIGNMENT\";\n GL[GL[\"ACTIVE_UNIFORM_BLOCKS\"] = 35382] = \"ACTIVE_UNIFORM_BLOCKS\";\n GL[GL[\"UNIFORM_TYPE\"] = 35383] = \"UNIFORM_TYPE\";\n GL[GL[\"UNIFORM_SIZE\"] = 35384] = \"UNIFORM_SIZE\";\n GL[GL[\"UNIFORM_BLOCK_INDEX\"] = 35386] = \"UNIFORM_BLOCK_INDEX\";\n GL[GL[\"UNIFORM_OFFSET\"] = 35387] = \"UNIFORM_OFFSET\";\n GL[GL[\"UNIFORM_ARRAY_STRIDE\"] = 35388] = \"UNIFORM_ARRAY_STRIDE\";\n GL[GL[\"UNIFORM_MATRIX_STRIDE\"] = 35389] = \"UNIFORM_MATRIX_STRIDE\";\n GL[GL[\"UNIFORM_IS_ROW_MAJOR\"] = 35390] = \"UNIFORM_IS_ROW_MAJOR\";\n GL[GL[\"UNIFORM_BLOCK_BINDING\"] = 35391] = \"UNIFORM_BLOCK_BINDING\";\n GL[GL[\"UNIFORM_BLOCK_DATA_SIZE\"] = 35392] = \"UNIFORM_BLOCK_DATA_SIZE\";\n GL[GL[\"UNIFORM_BLOCK_ACTIVE_UNIFORMS\"] = 35394] = \"UNIFORM_BLOCK_ACTIVE_UNIFORMS\";\n GL[GL[\"UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES\"] = 35395] = \"UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES\";\n GL[GL[\"UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER\"] = 35396] = \"UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER\";\n GL[GL[\"UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER\"] = 35398] = \"UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER\";\n // Sync objects\n GL[GL[\"OBJECT_TYPE\"] = 37138] = \"OBJECT_TYPE\";\n GL[GL[\"SYNC_CONDITION\"] = 37139] = \"SYNC_CONDITION\";\n GL[GL[\"SYNC_STATUS\"] = 37140] = \"SYNC_STATUS\";\n GL[GL[\"SYNC_FLAGS\"] = 37141] = \"SYNC_FLAGS\";\n GL[GL[\"SYNC_FENCE\"] = 37142] = \"SYNC_FENCE\";\n GL[GL[\"SYNC_GPU_COMMANDS_COMPLETE\"] = 37143] = \"SYNC_GPU_COMMANDS_COMPLETE\";\n GL[GL[\"UNSIGNALED\"] = 37144] = \"UNSIGNALED\";\n GL[GL[\"SIGNALED\"] = 37145] = \"SIGNALED\";\n GL[GL[\"ALREADY_SIGNALED\"] = 37146] = \"ALREADY_SIGNALED\";\n GL[GL[\"TIMEOUT_EXPIRED\"] = 37147] = \"TIMEOUT_EXPIRED\";\n GL[GL[\"CONDITION_SATISFIED\"] = 37148] = \"CONDITION_SATISFIED\";\n GL[GL[\"WAIT_FAILED\"] = 37149] = \"WAIT_FAILED\";\n GL[GL[\"SYNC_FLUSH_COMMANDS_BIT\"] = 1] = \"SYNC_FLUSH_COMMANDS_BIT\";\n // Miscellaneous constants\n GL[GL[\"COLOR\"] = 6144] = \"COLOR\";\n GL[GL[\"DEPTH\"] = 6145] = \"DEPTH\";\n GL[GL[\"STENCIL\"] = 6146] = \"STENCIL\";\n GL[GL[\"MIN\"] = 32775] = \"MIN\";\n GL[GL[\"MAX\"] = 32776] = \"MAX\";\n GL[GL[\"DEPTH_COMPONENT24\"] = 33190] = \"DEPTH_COMPONENT24\";\n GL[GL[\"STREAM_READ\"] = 35041] = \"STREAM_READ\";\n GL[GL[\"STREAM_COPY\"] = 35042] = \"STREAM_COPY\";\n GL[GL[\"STATIC_READ\"] = 35045] = \"STATIC_READ\";\n GL[GL[\"STATIC_COPY\"] = 35046] = \"STATIC_COPY\";\n GL[GL[\"DYNAMIC_READ\"] = 35049] = \"DYNAMIC_READ\";\n GL[GL[\"DYNAMIC_COPY\"] = 35050] = \"DYNAMIC_COPY\";\n GL[GL[\"DEPTH_COMPONENT32F\"] = 36012] = \"DEPTH_COMPONENT32F\";\n GL[GL[\"DEPTH32F_STENCIL8\"] = 36013] = \"DEPTH32F_STENCIL8\";\n GL[GL[\"INVALID_INDEX\"] = 4294967295] = \"INVALID_INDEX\";\n GL[GL[\"TIMEOUT_IGNORED\"] = -1] = \"TIMEOUT_IGNORED\";\n GL[GL[\"MAX_CLIENT_WAIT_TIMEOUT_WEBGL\"] = 37447] = \"MAX_CLIENT_WAIT_TIMEOUT_WEBGL\";\n // Constants defined in WebGL extensions\n // ANGLE_instanced_arrays\n GL[GL[\"VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE\"] = 35070] = \"VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE\";\n // WEBGL_debug_renderer_info\n GL[GL[\"UNMASKED_VENDOR_WEBGL\"] = 37445] = \"UNMASKED_VENDOR_WEBGL\";\n GL[GL[\"UNMASKED_RENDERER_WEBGL\"] = 37446] = \"UNMASKED_RENDERER_WEBGL\";\n // EXT_texture_filter_anisotropic\n GL[GL[\"MAX_TEXTURE_MAX_ANISOTROPY_EXT\"] = 34047] = \"MAX_TEXTURE_MAX_ANISOTROPY_EXT\";\n GL[GL[\"TEXTURE_MAX_ANISOTROPY_EXT\"] = 34046] = \"TEXTURE_MAX_ANISOTROPY_EXT\";\n // WEBGL_compressed_texture_s3tc\n GL[GL[\"COMPRESSED_RGB_S3TC_DXT1_EXT\"] = 33776] = \"COMPRESSED_RGB_S3TC_DXT1_EXT\";\n GL[GL[\"COMPRESSED_RGBA_S3TC_DXT1_EXT\"] = 33777] = \"COMPRESSED_RGBA_S3TC_DXT1_EXT\";\n GL[GL[\"COMPRESSED_RGBA_S3TC_DXT3_EXT\"] = 33778] = \"COMPRESSED_RGBA_S3TC_DXT3_EXT\";\n GL[GL[\"COMPRESSED_RGBA_S3TC_DXT5_EXT\"] = 33779] = \"COMPRESSED_RGBA_S3TC_DXT5_EXT\";\n // WEBGL_compressed_texture_es3\n GL[GL[\"COMPRESSED_R11_EAC\"] = 37488] = \"COMPRESSED_R11_EAC\";\n GL[GL[\"COMPRESSED_SIGNED_R11_EAC\"] = 37489] = \"COMPRESSED_SIGNED_R11_EAC\";\n GL[GL[\"COMPRESSED_RG11_EAC\"] = 37490] = \"COMPRESSED_RG11_EAC\";\n GL[GL[\"COMPRESSED_SIGNED_RG11_EAC\"] = 37491] = \"COMPRESSED_SIGNED_RG11_EAC\";\n GL[GL[\"COMPRESSED_RGB8_ETC2\"] = 37492] = \"COMPRESSED_RGB8_ETC2\";\n GL[GL[\"COMPRESSED_RGBA8_ETC2_EAC\"] = 37493] = \"COMPRESSED_RGBA8_ETC2_EAC\";\n GL[GL[\"COMPRESSED_SRGB8_ETC2\"] = 37494] = \"COMPRESSED_SRGB8_ETC2\";\n GL[GL[\"COMPRESSED_SRGB8_ALPHA8_ETC2_EAC\"] = 37495] = \"COMPRESSED_SRGB8_ALPHA8_ETC2_EAC\";\n GL[GL[\"COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2\"] = 37496] = \"COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2\";\n GL[GL[\"COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2\"] = 37497] = \"COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2\";\n // WEBGL_compressed_texture_pvrtc\n GL[GL[\"COMPRESSED_RGB_PVRTC_4BPPV1_IMG\"] = 35840] = \"COMPRESSED_RGB_PVRTC_4BPPV1_IMG\";\n GL[GL[\"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\"] = 35842] = \"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\";\n GL[GL[\"COMPRESSED_RGB_PVRTC_2BPPV1_IMG\"] = 35841] = \"COMPRESSED_RGB_PVRTC_2BPPV1_IMG\";\n GL[GL[\"COMPRESSED_RGBA_PVRTC_2BPPV1_IMG\"] = 35843] = \"COMPRESSED_RGBA_PVRTC_2BPPV1_IMG\";\n // WEBGL_compressed_texture_etc1\n GL[GL[\"COMPRESSED_RGB_ETC1_WEBGL\"] = 36196] = \"COMPRESSED_RGB_ETC1_WEBGL\";\n // WEBGL_compressed_texture_atc\n GL[GL[\"COMPRESSED_RGB_ATC_WEBGL\"] = 35986] = \"COMPRESSED_RGB_ATC_WEBGL\";\n GL[GL[\"COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL\"] = 35986] = \"COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL\";\n GL[GL[\"COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\"] = 34798] = \"COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\";\n // WEBGL_depth_texture\n GL[GL[\"UNSIGNED_INT_24_8_WEBGL\"] = 34042] = \"UNSIGNED_INT_24_8_WEBGL\";\n // OES_texture_half_float\n GL[GL[\"HALF_FLOAT_OES\"] = 36193] = \"HALF_FLOAT_OES\";\n // WEBGL_color_buffer_float\n GL[GL[\"RGBA32F_EXT\"] = 34836] = \"RGBA32F_EXT\";\n GL[GL[\"RGB32F_EXT\"] = 34837] = \"RGB32F_EXT\";\n GL[GL[\"FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT\"] = 33297] = \"FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT\";\n GL[GL[\"UNSIGNED_NORMALIZED_EXT\"] = 35863] = \"UNSIGNED_NORMALIZED_EXT\";\n // EXT_blend_minmax\n GL[GL[\"MIN_EXT\"] = 32775] = \"MIN_EXT\";\n GL[GL[\"MAX_EXT\"] = 32776] = \"MAX_EXT\";\n // EXT_sRGB\n GL[GL[\"SRGB_EXT\"] = 35904] = \"SRGB_EXT\";\n GL[GL[\"SRGB_ALPHA_EXT\"] = 35906] = \"SRGB_ALPHA_EXT\";\n GL[GL[\"SRGB8_ALPHA8_EXT\"] = 35907] = \"SRGB8_ALPHA8_EXT\";\n GL[GL[\"FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT\"] = 33296] = \"FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT\";\n // OES_standard_derivatives\n GL[GL[\"FRAGMENT_SHADER_DERIVATIVE_HINT_OES\"] = 35723] = \"FRAGMENT_SHADER_DERIVATIVE_HINT_OES\";\n // WEBGL_draw_buffers\n GL[GL[\"COLOR_ATTACHMENT0_WEBGL\"] = 36064] = \"COLOR_ATTACHMENT0_WEBGL\";\n GL[GL[\"COLOR_ATTACHMENT1_WEBGL\"] = 36065] = \"COLOR_ATTACHMENT1_WEBGL\";\n GL[GL[\"COLOR_ATTACHMENT2_WEBGL\"] = 36066] = \"COLOR_ATTACHMENT2_WEBGL\";\n GL[GL[\"COLOR_ATTACHMENT3_WEBGL\"] = 36067] = \"COLOR_ATTACHMENT3_WEBGL\";\n GL[GL[\"COLOR_ATTACHMENT4_WEBGL\"] = 36068] = \"COLOR_ATTACHMENT4_WEBGL\";\n GL[GL[\"COLOR_ATTACHMENT5_WEBGL\"] = 36069] = \"COLOR_ATTACHMENT5_WEBGL\";\n GL[GL[\"COLOR_ATTACHMENT6_WEBGL\"] = 36070] = \"COLOR_ATTACHMENT6_WEBGL\";\n GL[GL[\"COLOR_ATTACHMENT7_WEBGL\"] = 36071] = \"COLOR_ATTACHMENT7_WEBGL\";\n GL[GL[\"COLOR_ATTACHMENT8_WEBGL\"] = 36072] = \"COLOR_ATTACHMENT8_WEBGL\";\n GL[GL[\"COLOR_ATTACHMENT9_WEBGL\"] = 36073] = \"COLOR_ATTACHMENT9_WEBGL\";\n GL[GL[\"COLOR_ATTACHMENT10_WEBGL\"] = 36074] = \"COLOR_ATTACHMENT10_WEBGL\";\n GL[GL[\"COLOR_ATTACHMENT11_WEBGL\"] = 36075] = \"COLOR_ATTACHMENT11_WEBGL\";\n GL[GL[\"COLOR_ATTACHMENT12_WEBGL\"] = 36076] = \"COLOR_ATTACHMENT12_WEBGL\";\n GL[GL[\"COLOR_ATTACHMENT13_WEBGL\"] = 36077] = \"COLOR_ATTACHMENT13_WEBGL\";\n GL[GL[\"COLOR_ATTACHMENT14_WEBGL\"] = 36078] = \"COLOR_ATTACHMENT14_WEBGL\";\n GL[GL[\"COLOR_ATTACHMENT15_WEBGL\"] = 36079] = \"COLOR_ATTACHMENT15_WEBGL\";\n GL[GL[\"DRAW_BUFFER0_WEBGL\"] = 34853] = \"DRAW_BUFFER0_WEBGL\";\n GL[GL[\"DRAW_BUFFER1_WEBGL\"] = 34854] = \"DRAW_BUFFER1_WEBGL\";\n GL[GL[\"DRAW_BUFFER2_WEBGL\"] = 34855] = \"DRAW_BUFFER2_WEBGL\";\n GL[GL[\"DRAW_BUFFER3_WEBGL\"] = 34856] = \"DRAW_BUFFER3_WEBGL\";\n GL[GL[\"DRAW_BUFFER4_WEBGL\"] = 34857] = \"DRAW_BUFFER4_WEBGL\";\n GL[GL[\"DRAW_BUFFER5_WEBGL\"] = 34858] = \"DRAW_BUFFER5_WEBGL\";\n GL[GL[\"DRAW_BUFFER6_WEBGL\"] = 34859] = \"DRAW_BUFFER6_WEBGL\";\n GL[GL[\"DRAW_BUFFER7_WEBGL\"] = 34860] = \"DRAW_BUFFER7_WEBGL\";\n GL[GL[\"DRAW_BUFFER8_WEBGL\"] = 34861] = \"DRAW_BUFFER8_WEBGL\";\n GL[GL[\"DRAW_BUFFER9_WEBGL\"] = 34862] = \"DRAW_BUFFER9_WEBGL\";\n GL[GL[\"DRAW_BUFFER10_WEBGL\"] = 34863] = \"DRAW_BUFFER10_WEBGL\";\n GL[GL[\"DRAW_BUFFER11_WEBGL\"] = 34864] = \"DRAW_BUFFER11_WEBGL\";\n GL[GL[\"DRAW_BUFFER12_WEBGL\"] = 34865] = \"DRAW_BUFFER12_WEBGL\";\n GL[GL[\"DRAW_BUFFER13_WEBGL\"] = 34866] = \"DRAW_BUFFER13_WEBGL\";\n GL[GL[\"DRAW_BUFFER14_WEBGL\"] = 34867] = \"DRAW_BUFFER14_WEBGL\";\n GL[GL[\"DRAW_BUFFER15_WEBGL\"] = 34868] = \"DRAW_BUFFER15_WEBGL\";\n GL[GL[\"MAX_COLOR_ATTACHMENTS_WEBGL\"] = 36063] = \"MAX_COLOR_ATTACHMENTS_WEBGL\";\n GL[GL[\"MAX_DRAW_BUFFERS_WEBGL\"] = 34852] = \"MAX_DRAW_BUFFERS_WEBGL\";\n // OES_vertex_array_object\n GL[GL[\"VERTEX_ARRAY_BINDING_OES\"] = 34229] = \"VERTEX_ARRAY_BINDING_OES\";\n // EXT_disjoint_timer_query\n GL[GL[\"QUERY_COUNTER_BITS_EXT\"] = 34916] = \"QUERY_COUNTER_BITS_EXT\";\n GL[GL[\"CURRENT_QUERY_EXT\"] = 34917] = \"CURRENT_QUERY_EXT\";\n GL[GL[\"QUERY_RESULT_EXT\"] = 34918] = \"QUERY_RESULT_EXT\";\n GL[GL[\"QUERY_RESULT_AVAILABLE_EXT\"] = 34919] = \"QUERY_RESULT_AVAILABLE_EXT\";\n GL[GL[\"TIME_ELAPSED_EXT\"] = 35007] = \"TIME_ELAPSED_EXT\";\n GL[GL[\"TIMESTAMP_EXT\"] = 36392] = \"TIMESTAMP_EXT\";\n GL[GL[\"GPU_DISJOINT_EXT\"] = 36795] = \"GPU_DISJOINT_EXT\";\n})(GL || (GL = {}));\n\nvar ResourceType;\n(function (ResourceType) {\n ResourceType[ResourceType[\"Buffer\"] = 0] = \"Buffer\";\n ResourceType[ResourceType[\"Texture\"] = 1] = \"Texture\";\n ResourceType[ResourceType[\"RenderTarget\"] = 2] = \"RenderTarget\";\n ResourceType[ResourceType[\"Sampler\"] = 3] = \"Sampler\";\n ResourceType[ResourceType[\"Program\"] = 4] = \"Program\";\n ResourceType[ResourceType[\"Bindings\"] = 5] = \"Bindings\";\n ResourceType[ResourceType[\"InputLayout\"] = 6] = \"InputLayout\";\n ResourceType[ResourceType[\"RenderPipeline\"] = 7] = \"RenderPipeline\";\n ResourceType[ResourceType[\"ComputePipeline\"] = 8] = \"ComputePipeline\";\n ResourceType[ResourceType[\"Readback\"] = 9] = \"Readback\";\n ResourceType[ResourceType[\"QueryPool\"] = 10] = \"QueryPool\";\n ResourceType[ResourceType[\"RenderBundle\"] = 11] = \"RenderBundle\";\n})(ResourceType || (ResourceType = {}));\nvar CompareFunction;\n(function (CompareFunction) {\n CompareFunction[CompareFunction[\"NEVER\"] = 512] = \"NEVER\";\n CompareFunction[CompareFunction[\"LESS\"] = 513] = \"LESS\";\n CompareFunction[CompareFunction[\"EQUAL\"] = 514] = \"EQUAL\";\n CompareFunction[CompareFunction[\"LEQUAL\"] = 515] = \"LEQUAL\";\n CompareFunction[CompareFunction[\"GREATER\"] = 516] = \"GREATER\";\n CompareFunction[CompareFunction[\"NOTEQUAL\"] = 517] = \"NOTEQUAL\";\n CompareFunction[CompareFunction[\"GEQUAL\"] = 518] = \"GEQUAL\";\n CompareFunction[CompareFunction[\"ALWAYS\"] = 519] = \"ALWAYS\";\n})(CompareFunction || (CompareFunction = {}));\nvar FrontFace;\n(function (FrontFace) {\n FrontFace[FrontFace[\"CCW\"] = 2305] = \"CCW\";\n FrontFace[FrontFace[\"CW\"] = 2304] = \"CW\";\n})(FrontFace || (FrontFace = {}));\nvar CullMode;\n(function (CullMode) {\n CullMode[CullMode[\"NONE\"] = 0] = \"NONE\";\n CullMode[CullMode[\"FRONT\"] = 1] = \"FRONT\";\n CullMode[CullMode[\"BACK\"] = 2] = \"BACK\";\n CullMode[CullMode[\"FRONT_AND_BACK\"] = 3] = \"FRONT_AND_BACK\";\n})(CullMode || (CullMode = {}));\n/**\n * Blend factor RGBA components.\n * @see https://www.w3.org/TR/webgpu/#enumdef-gpublendfactor\n */\nvar BlendFactor;\n(function (BlendFactor) {\n /**\n * (0, 0, 0, 0)\n */\n BlendFactor[BlendFactor[\"ZERO\"] = 0] = \"ZERO\";\n /**\n * (1, 1, 1, 1)\n */\n BlendFactor[BlendFactor[\"ONE\"] = 1] = \"ONE\";\n /**\n * (Rsrc, Gsrc, Bsrc, Asrc)\n */\n BlendFactor[BlendFactor[\"SRC\"] = 768] = \"SRC\";\n /**\n * (1 - Rsrc, 1 - Gsrc, 1 - Bsrc, 1 - Asrc)\n */\n BlendFactor[BlendFactor[\"ONE_MINUS_SRC\"] = 769] = \"ONE_MINUS_SRC\";\n /**\n * (Rdst, Gdst, Bdst, Adst)\n */\n BlendFactor[BlendFactor[\"DST\"] = 774] = \"DST\";\n /**\n * (1 - Rdst, 1 - Gdst, 1 - Bdst, 1 - Adst)\n */\n BlendFactor[BlendFactor[\"ONE_MINUS_DST\"] = 775] = \"ONE_MINUS_DST\";\n /**\n * (Asrc, Asrc, Asrc, Asrc)\n */\n BlendFactor[BlendFactor[\"SRC_ALPHA\"] = 770] = \"SRC_ALPHA\";\n /**\n * (1 - Asrc, 1 - Asrc, 1 - Asrc, 1 - Asrc)\n */\n BlendFactor[BlendFactor[\"ONE_MINUS_SRC_ALPHA\"] = 771] = \"ONE_MINUS_SRC_ALPHA\";\n /**\n * (Adst, Adst, Adst, Adst)\n */\n BlendFactor[BlendFactor[\"DST_ALPHA\"] = 772] = \"DST_ALPHA\";\n /**\n * (1 - Adst, 1 - Adst, 1 - Adst, 1 - Adst)\n */\n BlendFactor[BlendFactor[\"ONE_MINUS_DST_ALPHA\"] = 773] = \"ONE_MINUS_DST_ALPHA\";\n /**\n * (Rconst, Gconst, Bconst, Aconst)\n */\n BlendFactor[BlendFactor[\"CONST\"] = 32769] = \"CONST\";\n /**\n * (1 - Rconst, 1 - Gconst, 1 - Bconst, 1 - Aconst)\n */\n BlendFactor[BlendFactor[\"ONE_MINUS_CONSTANT\"] = 32770] = \"ONE_MINUS_CONSTANT\";\n /**\n * (min(Asrc, 1 - Adst), min(Asrc, 1 - Adst), min(Asrc, 1 - Adst), 1)\n */\n BlendFactor[BlendFactor[\"SRC_ALPHA_SATURATE\"] = 776] = \"SRC_ALPHA_SATURATE\";\n})(BlendFactor || (BlendFactor = {}));\n/**\n * Defines the algorithm used to combine source and destination blend factors.\n * @see https://www.w3.org/TR/webgpu/#enumdef-gpublendoperation\n */\nvar BlendMode;\n(function (BlendMode) {\n /**\n * RGBAsrc × RGBAsrcFactor + RGBAdst × RGBAdstFactor\n */\n BlendMode[BlendMode[\"ADD\"] = 32774] = \"ADD\";\n /**\n * RGBAsrc × RGBAsrcFactor - RGBAdst × RGBAdstFactor\n */\n BlendMode[BlendMode[\"SUBSTRACT\"] = 32778] = \"SUBSTRACT\";\n /**\n * RGBAdst × RGBAdstFactor - RGBAsrc × RGBAsrcFactor\n */\n BlendMode[BlendMode[\"REVERSE_SUBSTRACT\"] = 32779] = \"REVERSE_SUBSTRACT\";\n // TODO: WebGL 1 should use ext\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/blendEquation#parameters\n /**\n * min(RGBAsrc, RGBAdst)\n */\n BlendMode[BlendMode[\"MIN\"] = 32775] = \"MIN\";\n /**\n * max(RGBAsrc, RGBAdst)\n */\n BlendMode[BlendMode[\"MAX\"] = 32776] = \"MAX\";\n})(BlendMode || (BlendMode = {}));\nvar AddressMode;\n(function (AddressMode) {\n AddressMode[AddressMode[\"CLAMP_TO_EDGE\"] = 0] = \"CLAMP_TO_EDGE\";\n AddressMode[AddressMode[\"REPEAT\"] = 1] = \"REPEAT\";\n AddressMode[AddressMode[\"MIRRORED_REPEAT\"] = 2] = \"MIRRORED_REPEAT\";\n})(AddressMode || (AddressMode = {}));\nvar FilterMode;\n(function (FilterMode) {\n FilterMode[FilterMode[\"POINT\"] = 0] = \"POINT\";\n FilterMode[FilterMode[\"BILINEAR\"] = 1] = \"BILINEAR\";\n})(FilterMode || (FilterMode = {}));\nvar MipmapFilterMode;\n(function (MipmapFilterMode) {\n MipmapFilterMode[MipmapFilterMode[\"NO_MIP\"] = 0] = \"NO_MIP\";\n MipmapFilterMode[MipmapFilterMode[\"NEAREST\"] = 1] = \"NEAREST\";\n MipmapFilterMode[MipmapFilterMode[\"LINEAR\"] = 2] = \"LINEAR\";\n})(MipmapFilterMode || (MipmapFilterMode = {}));\nvar PrimitiveTopology;\n(function (PrimitiveTopology) {\n PrimitiveTopology[PrimitiveTopology[\"POINTS\"] = 0] = \"POINTS\";\n PrimitiveTopology[PrimitiveTopology[\"TRIANGLES\"] = 1] = \"TRIANGLES\";\n PrimitiveTopology[PrimitiveTopology[\"TRIANGLE_STRIP\"] = 2] = \"TRIANGLE_STRIP\";\n PrimitiveTopology[PrimitiveTopology[\"LINES\"] = 3] = \"LINES\";\n PrimitiveTopology[PrimitiveTopology[\"LINE_STRIP\"] = 4] = \"LINE_STRIP\";\n})(PrimitiveTopology || (PrimitiveTopology = {}));\n/**\n * @see https://www.w3.org/TR/webgpu/#buffer-usage\n */\nvar BufferUsage;\n(function (BufferUsage) {\n BufferUsage[BufferUsage[\"MAP_READ\"] = 1] = \"MAP_READ\";\n BufferUsage[BufferUsage[\"MAP_WRITE\"] = 2] = \"MAP_WRITE\";\n BufferUsage[BufferUsage[\"COPY_SRC\"] = 4] = \"COPY_SRC\";\n BufferUsage[BufferUsage[\"COPY_DST\"] = 8] = \"COPY_DST\";\n BufferUsage[BufferUsage[\"INDEX\"] = 16] = \"INDEX\";\n BufferUsage[BufferUsage[\"VERTEX\"] = 32] = \"VERTEX\";\n BufferUsage[BufferUsage[\"UNIFORM\"] = 64] = \"UNIFORM\";\n BufferUsage[BufferUsage[\"STORAGE\"] = 128] = \"STORAGE\";\n BufferUsage[BufferUsage[\"INDIRECT\"] = 256] = \"INDIRECT\";\n BufferUsage[BufferUsage[\"QUERY_RESOLVE\"] = 512] = \"QUERY_RESOLVE\";\n})(BufferUsage || (BufferUsage = {}));\nvar BufferFrequencyHint;\n(function (BufferFrequencyHint) {\n BufferFrequencyHint[BufferFrequencyHint[\"STATIC\"] = 1] = \"STATIC\";\n BufferFrequencyHint[BufferFrequencyHint[\"DYNAMIC\"] = 2] = \"DYNAMIC\";\n})(BufferFrequencyHint || (BufferFrequencyHint = {}));\n/**\n * @see https://www.w3.org/TR/webgpu/#enumdef-gpuvertexstepmode\n */\nvar VertexStepMode;\n(function (VertexStepMode) {\n VertexStepMode[VertexStepMode[\"VERTEX\"] = 1] = \"VERTEX\";\n VertexStepMode[VertexStepMode[\"INSTANCE\"] = 2] = \"INSTANCE\";\n})(VertexStepMode || (VertexStepMode = {}));\nvar TextureEvent;\n(function (TextureEvent) {\n TextureEvent[\"LOADED\"] = \"loaded\";\n})(TextureEvent || (TextureEvent = {}));\nvar TextureDimension;\n(function (TextureDimension) {\n TextureDimension[TextureDimension[\"TEXTURE_2D\"] = 0] = \"TEXTURE_2D\";\n TextureDimension[TextureDimension[\"TEXTURE_2D_ARRAY\"] = 1] = \"TEXTURE_2D_ARRAY\";\n TextureDimension[TextureDimension[\"TEXTURE_3D\"] = 2] = \"TEXTURE_3D\";\n TextureDimension[TextureDimension[\"TEXTURE_CUBE_MAP\"] = 3] = \"TEXTURE_CUBE_MAP\";\n})(TextureDimension || (TextureDimension = {}));\nvar TextureUsage;\n(function (TextureUsage) {\n TextureUsage[TextureUsage[\"SAMPLED\"] = 1] = \"SAMPLED\";\n TextureUsage[TextureUsage[\"RENDER_TARGET\"] = 2] = \"RENDER_TARGET\";\n TextureUsage[TextureUsage[\"STORAGE\"] = 4] = \"STORAGE\";\n})(TextureUsage || (TextureUsage = {}));\nvar ChannelWriteMask;\n(function (ChannelWriteMask) {\n ChannelWriteMask[ChannelWriteMask[\"NONE\"] = 0] = \"NONE\";\n ChannelWriteMask[ChannelWriteMask[\"RED\"] = 1] = \"RED\";\n ChannelWriteMask[ChannelWriteMask[\"GREEN\"] = 2] = \"GREEN\";\n ChannelWriteMask[ChannelWriteMask[\"BLUE\"] = 4] = \"BLUE\";\n ChannelWriteMask[ChannelWriteMask[\"ALPHA\"] = 8] = \"ALPHA\";\n ChannelWriteMask[ChannelWriteMask[\"RGB\"] = 7] = \"RGB\";\n ChannelWriteMask[ChannelWriteMask[\"ALL\"] = 15] = \"ALL\";\n})(ChannelWriteMask || (ChannelWriteMask = {}));\n/**\n * @see https://www.w3.org/TR/webgpu/#enumdef-gpustenciloperation\n */\nvar StencilOp;\n(function (StencilOp) {\n StencilOp[StencilOp[\"KEEP\"] = 7680] = \"KEEP\";\n StencilOp[StencilOp[\"ZERO\"] = 0] = \"ZERO\";\n StencilOp[StencilOp[\"REPLACE\"] = 7681] = \"REPLACE\";\n StencilOp[StencilOp[\"INVERT\"] = 5386] = \"INVERT\";\n StencilOp[StencilOp[\"INCREMENT_CLAMP\"] = 7682] = \"INCREMENT_CLAMP\";\n StencilOp[StencilOp[\"DECREMENT_CLAMP\"] = 7683] = \"DECREMENT_CLAMP\";\n StencilOp[StencilOp[\"INCREMENT_WRAP\"] = 34055] = \"INCREMENT_WRAP\";\n StencilOp[StencilOp[\"DECREMENT_WRAP\"] = 34056] = \"DECREMENT_WRAP\";\n})(StencilOp || (StencilOp = {}));\nfunction makeTextureDescriptor2D(format, width, height, mipLevelCount) {\n var dimension = TextureDimension.TEXTURE_2D;\n var depthOrArrayLayers = 1;\n var usage = TextureUsage.SAMPLED;\n return {\n dimension: dimension,\n format: format,\n width: width,\n height: height,\n depthOrArrayLayers: depthOrArrayLayers,\n mipLevelCount: mipLevelCount,\n usage: usage,\n };\n}\nvar SamplerFormatKind;\n(function (SamplerFormatKind) {\n SamplerFormatKind[SamplerFormatKind[\"Float\"] = 0] = \"Float\";\n SamplerFormatKind[SamplerFormatKind[\"UnfilterableFloat\"] = 1] = \"UnfilterableFloat\";\n SamplerFormatKind[SamplerFormatKind[\"Uint\"] = 2] = \"Uint\";\n SamplerFormatKind[SamplerFormatKind[\"Sint\"] = 3] = \"Sint\";\n SamplerFormatKind[SamplerFormatKind[\"Depth\"] = 4] = \"Depth\";\n})(SamplerFormatKind || (SamplerFormatKind = {}));\nvar ViewportOrigin;\n(function (ViewportOrigin) {\n ViewportOrigin[ViewportOrigin[\"LOWER_LEFT\"] = 0] = \"LOWER_LEFT\";\n ViewportOrigin[ViewportOrigin[\"UPPER_LEFT\"] = 1] = \"UPPER_LEFT\";\n})(ViewportOrigin || (ViewportOrigin = {}));\nvar ClipSpaceNearZ;\n(function (ClipSpaceNearZ) {\n ClipSpaceNearZ[ClipSpaceNearZ[\"NEGATIVE_ONE\"] = 0] = \"NEGATIVE_ONE\";\n ClipSpaceNearZ[ClipSpaceNearZ[\"ZERO\"] = 1] = \"ZERO\";\n})(ClipSpaceNearZ || (ClipSpaceNearZ = {}));\nvar QueryPoolType;\n(function (QueryPoolType) {\n QueryPoolType[QueryPoolType[\"OcclusionConservative\"] = 0] = \"OcclusionConservative\";\n})(QueryPoolType || (QueryPoolType = {}));\n\nvar FormatTypeFlags;\n(function (FormatTypeFlags) {\n FormatTypeFlags[FormatTypeFlags[\"U8\"] = 1] = \"U8\";\n FormatTypeFlags[FormatTypeFlags[\"U16\"] = 2] = \"U16\";\n FormatTypeFlags[FormatTypeFlags[\"U32\"] = 3] = \"U32\";\n FormatTypeFlags[FormatTypeFlags[\"S8\"] = 4] = \"S8\";\n FormatTypeFlags[FormatTypeFlags[\"S16\"] = 5] = \"S16\";\n FormatTypeFlags[FormatTypeFlags[\"S32\"] = 6] = \"S32\";\n FormatTypeFlags[FormatTypeFlags[\"F16\"] = 7] = \"F16\";\n FormatTypeFlags[FormatTypeFlags[\"F32\"] = 8] = \"F32\";\n // Compressed texture formats.\n FormatTypeFlags[FormatTypeFlags[\"BC1\"] = 65] = \"BC1\";\n FormatTypeFlags[FormatTypeFlags[\"BC2\"] = 66] = \"BC2\";\n FormatTypeFlags[FormatTypeFlags[\"BC3\"] = 67] = \"BC3\";\n FormatTypeFlags[FormatTypeFlags[\"BC4_UNORM\"] = 68] = \"BC4_UNORM\";\n FormatTypeFlags[FormatTypeFlags[\"BC4_SNORM\"] = 69] = \"BC4_SNORM\";\n FormatTypeFlags[FormatTypeFlags[\"BC5_UNORM\"] = 70] = \"BC5_UNORM\";\n FormatTypeFlags[FormatTypeFlags[\"BC5_SNORM\"] = 71] = \"BC5_SNORM\";\n // Special-case packed texture formats.\n FormatTypeFlags[FormatTypeFlags[\"U16_PACKED_5551\"] = 97] = \"U16_PACKED_5551\";\n FormatTypeFlags[FormatTypeFlags[\"U16_PACKED_565\"] = 98] = \"U16_PACKED_565\";\n // Depth/stencil texture formats.\n FormatTypeFlags[FormatTypeFlags[\"D24\"] = 129] = \"D24\";\n FormatTypeFlags[FormatTypeFlags[\"D32F\"] = 130] = \"D32F\";\n FormatTypeFlags[FormatTypeFlags[\"D24S8\"] = 131] = \"D24S8\";\n FormatTypeFlags[FormatTypeFlags[\"D32FS8\"] = 132] = \"D32FS8\";\n})(FormatTypeFlags || (FormatTypeFlags = {}));\nvar FormatCompFlags;\n(function (FormatCompFlags) {\n FormatCompFlags[FormatCompFlags[\"R\"] = 1] = \"R\";\n FormatCompFlags[FormatCompFlags[\"RG\"] = 2] = \"RG\";\n FormatCompFlags[FormatCompFlags[\"RGB\"] = 3] = \"RGB\";\n FormatCompFlags[FormatCompFlags[\"RGBA\"] = 4] = \"RGBA\";\n FormatCompFlags[FormatCompFlags[\"A\"] = 5] = \"A\";\n})(FormatCompFlags || (FormatCompFlags = {}));\nfunction getFormatCompFlagsComponentCount(n) {\n // The number of components is the flag value. Easy.\n return n;\n}\nvar FormatFlags;\n(function (FormatFlags) {\n FormatFlags[FormatFlags[\"None\"] = 0] = \"None\";\n FormatFlags[FormatFlags[\"Normalized\"] = 1] = \"Normalized\";\n FormatFlags[FormatFlags[\"sRGB\"] = 2] = \"sRGB\";\n FormatFlags[FormatFlags[\"Depth\"] = 4] = \"Depth\";\n FormatFlags[FormatFlags[\"Stencil\"] = 8] = \"Stencil\";\n FormatFlags[FormatFlags[\"RenderTarget\"] = 16] = \"RenderTarget\";\n FormatFlags[FormatFlags[\"Luminance\"] = 32] = \"Luminance\";\n})(FormatFlags || (FormatFlags = {}));\nfunction makeFormat(type, comp, flags) {\n return (type << 16) | (comp << 8) | flags;\n}\nvar Format;\n(function (Format) {\n Format[Format[\"ALPHA\"] = makeFormat(FormatTypeFlags.U8, FormatCompFlags.A, FormatFlags.None)] = \"ALPHA\";\n Format[Format[\"U8_LUMINANCE\"] = makeFormat(FormatTypeFlags.U8, FormatCompFlags.A, FormatFlags.Luminance)] = \"U8_LUMINANCE\";\n Format[Format[\"F16_LUMINANCE\"] = makeFormat(FormatTypeFlags.F16, FormatCompFlags.A, FormatFlags.Luminance)] = \"F16_LUMINANCE\";\n Format[Format[\"F32_LUMINANCE\"] = makeFormat(FormatTypeFlags.F32, FormatCompFlags.A, FormatFlags.Luminance)] = \"F32_LUMINANCE\";\n Format[Format[\"F16_R\"] = makeFormat(FormatTypeFlags.F16, FormatCompFlags.R, FormatFlags.None)] = \"F16_R\";\n Format[Format[\"F16_RG\"] = makeFormat(FormatTypeFlags.F16, FormatCompFlags.RG, FormatFlags.None)] = \"F16_RG\";\n Format[Format[\"F16_RGB\"] = makeFormat(FormatTypeFlags.F16, FormatCompFlags.RGB, FormatFlags.None)] = \"F16_RGB\";\n Format[Format[\"F16_RGBA\"] = makeFormat(FormatTypeFlags.F16, FormatCompFlags.RGBA, FormatFlags.None)] = \"F16_RGBA\";\n Format[Format[\"F32_R\"] = makeFormat(FormatTypeFlags.F32, FormatCompFlags.R, FormatFlags.None)] = \"F32_R\";\n Format[Format[\"F32_RG\"] = makeFormat(FormatTypeFlags.F32, FormatCompFlags.RG, FormatFlags.None)] = \"F32_RG\";\n Format[Format[\"F32_RGB\"] = makeFormat(FormatTypeFlags.F32, FormatCompFlags.RGB, FormatFlags.None)] = \"F32_RGB\";\n Format[Format[\"F32_RGBA\"] = makeFormat(FormatTypeFlags.F32, FormatCompFlags.RGBA, FormatFlags.None)] = \"F32_RGBA\";\n Format[Format[\"U8_R\"] = makeFormat(FormatTypeFlags.U8, FormatCompFlags.R, FormatFlags.None)] = \"U8_R\";\n Format[Format[\"U8_R_NORM\"] = makeFormat(FormatTypeFlags.U8, FormatCompFlags.R, FormatFlags.Normalized)] = \"U8_R_NORM\";\n Format[Format[\"U8_RG\"] = makeFormat(FormatTypeFlags.U8, FormatCompFlags.RG, FormatFlags.None)] = \"U8_RG\";\n Format[Format[\"U8_RG_NORM\"] = makeFormat(FormatTypeFlags.U8, FormatCompFlags.RG, FormatFlags.Normalized)] = \"U8_RG_NORM\";\n Format[Format[\"U8_RGB\"] = makeFormat(FormatTypeFlags.U8, FormatCompFlags.RGB, FormatFlags.None)] = \"U8_RGB\";\n Format[Format[\"U8_RGB_NORM\"] = makeFormat(FormatTypeFlags.U8, FormatCompFlags.RGB, FormatFlags.Normalized)] = \"U8_RGB_NORM\";\n Format[Format[\"U8_RGB_SRGB\"] = makeFormat(FormatTypeFlags.U8, FormatCompFlags.RGB, FormatFlags.sRGB | FormatFlags.Normalized)] = \"U8_RGB_SRGB\";\n Format[Format[\"U8_RGBA\"] = makeFormat(FormatTypeFlags.U8, FormatCompFlags.RGBA, FormatFlags.None)] = \"U8_RGBA\";\n Format[Format[\"U8_RGBA_NORM\"] = makeFormat(FormatTypeFlags.U8, FormatCompFlags.RGBA, FormatFlags.Normalized)] = \"U8_RGBA_NORM\";\n Format[Format[\"U8_RGBA_SRGB\"] = makeFormat(FormatTypeFlags.U8, FormatCompFlags.RGBA, FormatFlags.sRGB | FormatFlags.Normalized)] = \"U8_RGBA_SRGB\";\n Format[Format[\"U16_R\"] = makeFormat(FormatTypeFlags.U16, FormatCompFlags.R, FormatFlags.None)] = \"U16_R\";\n Format[Format[\"U16_R_NORM\"] = makeFormat(FormatTypeFlags.U16, FormatCompFlags.R, FormatFlags.Normalized)] = \"U16_R_NORM\";\n Format[Format[\"U16_RG_NORM\"] = makeFormat(FormatTypeFlags.U16, FormatCompFlags.RG, FormatFlags.Normalized)] = \"U16_RG_NORM\";\n Format[Format[\"U16_RGBA_NORM\"] = makeFormat(FormatTypeFlags.U16, FormatCompFlags.RGBA, FormatFlags.Normalized)] = \"U16_RGBA_NORM\";\n Format[Format[\"U16_RGBA\"] = makeFormat(FormatTypeFlags.U16, FormatCompFlags.RGBA, FormatFlags.None)] = \"U16_RGBA\";\n Format[Format[\"U16_RGB\"] = makeFormat(FormatTypeFlags.U16, FormatCompFlags.RGB, FormatFlags.None)] = \"U16_RGB\";\n Format[Format[\"U16_RG\"] = makeFormat(FormatTypeFlags.U16, FormatCompFlags.RG, FormatFlags.None)] = \"U16_RG\";\n Format[Format[\"U32_R\"] = makeFormat(FormatTypeFlags.U32, FormatCompFlags.R, FormatFlags.None)] = \"U32_R\";\n Format[Format[\"U32_RG\"] = makeFormat(FormatTypeFlags.U32, FormatCompFlags.RG, FormatFlags.None)] = \"U32_RG\";\n Format[Format[\"U32_RGB\"] = makeFormat(FormatTypeFlags.U32, FormatCompFlags.RGB, FormatFlags.None)] = \"U32_RGB\";\n Format[Format[\"U32_RGBA\"] = makeFormat(FormatTypeFlags.U32, FormatCompFlags.RGBA, FormatFlags.None)] = \"U32_RGBA\";\n Format[Format[\"S8_R\"] = makeFormat(FormatTypeFlags.S8, FormatCompFlags.R, FormatFlags.None)] = \"S8_R\";\n Format[Format[\"S8_R_NORM\"] = makeFormat(FormatTypeFlags.S8, FormatCompFlags.R, FormatFlags.Normalized)] = \"S8_R_NORM\";\n Format[Format[\"S8_RG_NORM\"] = makeFormat(FormatTypeFlags.S8, FormatCompFlags.RG, FormatFlags.Normalized)] = \"S8_RG_NORM\";\n Format[Format[\"S8_RGB_NORM\"] = makeFormat(FormatTypeFlags.S8, FormatCompFlags.RGB, FormatFlags.Normalized)] = \"S8_RGB_NORM\";\n Format[Format[\"S8_RGBA_NORM\"] = makeFormat(FormatTypeFlags.S8, FormatCompFlags.RGBA, FormatFlags.Normalized)] = \"S8_RGBA_NORM\";\n Format[Format[\"S16_R\"] = makeFormat(FormatTypeFlags.S16, FormatCompFlags.R, FormatFlags.None)] = \"S16_R\";\n Format[Format[\"S16_RG\"] = makeFormat(FormatTypeFlags.S16, FormatCompFlags.RG, FormatFlags.None)] = \"S16_RG\";\n Format[Format[\"S16_RG_NORM\"] = makeFormat(FormatTypeFlags.S16, FormatCompFlags.RG, FormatFlags.Normalized)] = \"S16_RG_NORM\";\n Format[Format[\"S16_RGB_NORM\"] = makeFormat(FormatTypeFlags.S16, FormatCompFlags.RGB, FormatFlags.Normalized)] = \"S16_RGB_NORM\";\n Format[Format[\"S16_RGBA\"] = makeFormat(FormatTypeFlags.S16, FormatCompFlags.RGBA, FormatFlags.None)] = \"S16_RGBA\";\n Format[Format[\"S16_RGBA_NORM\"] = makeFormat(FormatTypeFlags.S16, FormatCompFlags.RGBA, FormatFlags.Normalized)] = \"S16_RGBA_NORM\";\n Format[Format[\"S32_R\"] = makeFormat(FormatTypeFlags.S32, FormatCompFlags.R, FormatFlags.None)] = \"S32_R\";\n Format[Format[\"S32_RG\"] = makeFormat(FormatTypeFlags.S32, FormatCompFlags.RG, FormatFlags.None)] = \"S32_RG\";\n Format[Format[\"S32_RGB\"] = makeFormat(FormatTypeFlags.S32, FormatCompFlags.RGB, FormatFlags.None)] = \"S32_RGB\";\n Format[Format[\"S32_RGBA\"] = makeFormat(FormatTypeFlags.S32, FormatCompFlags.RGBA, FormatFlags.None)] = \"S32_RGBA\";\n // Packed texture formats.\n Format[Format[\"U16_RGBA_5551\"] = makeFormat(FormatTypeFlags.U16_PACKED_5551, FormatCompFlags.RGBA, FormatFlags.Normalized)] = \"U16_RGBA_5551\";\n Format[Format[\"U16_RGB_565\"] = makeFormat(FormatTypeFlags.U16_PACKED_565, FormatCompFlags.RGB, FormatFlags.Normalized)] = \"U16_RGB_565\";\n // Compressed\n Format[Format[\"BC1\"] = makeFormat(FormatTypeFlags.BC1, FormatCompFlags.RGBA, FormatFlags.Normalized)] = \"BC1\";\n Format[Format[\"BC1_SRGB\"] = makeFormat(FormatTypeFlags.BC1, FormatCompFlags.RGBA, FormatFlags.Normalized | FormatFlags.sRGB)] = \"BC1_SRGB\";\n Format[Format[\"BC2\"] = makeFormat(FormatTypeFlags.BC2, FormatCompFlags.RGBA, FormatFlags.Normalized)] = \"BC2\";\n Format[Format[\"BC2_SRGB\"] = makeFormat(FormatTypeFlags.BC2, FormatCompFlags.RGBA, FormatFlags.Normalized | FormatFlags.sRGB)] = \"BC2_SRGB\";\n Format[Format[\"BC3\"] = makeFormat(FormatTypeFlags.BC3, FormatCompFlags.RGBA, FormatFlags.Normalized)] = \"BC3\";\n Format[Format[\"BC3_SRGB\"] = makeFormat(FormatTypeFlags.BC3, FormatCompFlags.RGBA, FormatFlags.Normalized | FormatFlags.sRGB)] = \"BC3_SRGB\";\n Format[Format[\"BC4_UNORM\"] = makeFormat(FormatTypeFlags.BC4_UNORM, FormatCompFlags.R, FormatFlags.Normalized)] = \"BC4_UNORM\";\n Format[Format[\"BC4_SNORM\"] = makeFormat(FormatTypeFlags.BC4_SNORM, FormatCompFlags.R, FormatFlags.Normalized)] = \"BC4_SNORM\";\n Format[Format[\"BC5_UNORM\"] = makeFormat(FormatTypeFlags.BC5_UNORM, FormatCompFlags.RG, FormatFlags.Normalized)] = \"BC5_UNORM\";\n Format[Format[\"BC5_SNORM\"] = makeFormat(FormatTypeFlags.BC5_SNORM, FormatCompFlags.RG, FormatFlags.Normalized)] = \"BC5_SNORM\";\n // Depth/Stencil\n Format[Format[\"D24\"] = makeFormat(FormatTypeFlags.D24, FormatCompFlags.R, FormatFlags.Depth)] = \"D24\";\n Format[Format[\"D24_S8\"] = makeFormat(FormatTypeFlags.D24S8, FormatCompFlags.RG, FormatFlags.Depth | FormatFlags.Stencil)] = \"D24_S8\";\n Format[Format[\"D32F\"] = makeFormat(FormatTypeFlags.D32F, FormatCompFlags.R, FormatFlags.Depth)] = \"D32F\";\n Format[Format[\"D32F_S8\"] = makeFormat(FormatTypeFlags.D32FS8, FormatCompFlags.RG, FormatFlags.Depth | FormatFlags.Stencil)] = \"D32F_S8\";\n // Special RT formats for preferred backend support.\n Format[Format[\"U8_RGB_RT\"] = makeFormat(FormatTypeFlags.U8, FormatCompFlags.RGB, FormatFlags.RenderTarget | FormatFlags.Normalized)] = \"U8_RGB_RT\";\n Format[Format[\"U8_RGBA_RT\"] = makeFormat(FormatTypeFlags.U8, FormatCompFlags.RGBA, FormatFlags.RenderTarget | FormatFlags.Normalized)] = \"U8_RGBA_RT\";\n Format[Format[\"U8_RGBA_RT_SRGB\"] = makeFormat(FormatTypeFlags.U8, FormatCompFlags.RGBA, FormatFlags.RenderTarget | FormatFlags.Normalized | FormatFlags.sRGB)] = \"U8_RGBA_RT_SRGB\";\n})(Format || (Format = {}));\nfunction getFormatCompFlags(fmt) {\n return (fmt >>> 8) & 0xff;\n}\nfunction getFormatTypeFlags(fmt) {\n return (fmt >>> 16) & 0xff;\n}\nfunction getFormatFlags(fmt) {\n return fmt & 0xff;\n}\nfunction getFormatTypeFlagsByteSize(typeFlags) {\n switch (typeFlags) {\n case FormatTypeFlags.F32:\n case FormatTypeFlags.U32:\n case FormatTypeFlags.S32:\n return 4;\n case FormatTypeFlags.U16:\n case FormatTypeFlags.S16:\n case FormatTypeFlags.F16:\n return 2;\n case FormatTypeFlags.U8:\n case FormatTypeFlags.S8:\n return 1;\n default:\n throw new Error('whoops');\n }\n}\n/**\n * Gets the byte size for an individual component.\n * e.g. for F32_RGB, this will return \"4\", since F32 has 4 bytes.\n */\nfunction getFormatCompByteSize(fmt) {\n return getFormatTypeFlagsByteSize(getFormatTypeFlags(fmt));\n}\nfunction getFormatComponentCount(fmt) {\n return getFormatCompFlagsComponentCount(getFormatCompFlags(fmt));\n}\nfunction getFormatByteSize(fmt) {\n var typeByteSize = getFormatTypeFlagsByteSize(getFormatTypeFlags(fmt));\n var componentCount = getFormatCompFlagsComponentCount(getFormatCompFlags(fmt));\n return typeByteSize * componentCount;\n}\nfunction setFormatFlags(fmt, flags) {\n return (fmt & 0xffffff00) | flags;\n}\nfunction setFormatComponentCount(fmt, compFlags) {\n return (fmt & 0xffff00ff) | (compFlags << 8);\n}\nfunction getFormatSamplerKind(fmt) {\n var flags = getFormatFlags(fmt);\n if (flags & FormatFlags.Depth) {\n return SamplerFormatKind.Depth;\n }\n if (flags & FormatFlags.Normalized) {\n return SamplerFormatKind.Float;\n }\n var typeFlags = getFormatTypeFlags(fmt);\n if (typeFlags === FormatTypeFlags.F16 || typeFlags === FormatTypeFlags.F32) {\n return SamplerFormatKind.Float;\n }\n else if (typeFlags === FormatTypeFlags.U8 ||\n typeFlags === FormatTypeFlags.U16 ||\n typeFlags === FormatTypeFlags.U32) {\n return SamplerFormatKind.Uint;\n }\n else if (typeFlags === FormatTypeFlags.S8 ||\n typeFlags === FormatTypeFlags.S16 ||\n typeFlags === FormatTypeFlags.S32) {\n return SamplerFormatKind.Sint;\n }\n else {\n throw new Error('whoops');\n }\n}\n\nfunction assert(b, message) {\n if (message === void 0) { message = ''; }\n if (!b) {\n // console.error(new Error().stack);\n throw new Error(\"Assert fail: \".concat(message));\n }\n}\nfunction assertExists(v) {\n if (v !== undefined && v !== null)\n return v;\n else\n throw new Error('Missing object');\n}\n\nfunction colorEqual(c0, c1) {\n return c0.r === c1.r && c0.g === c1.g && c0.b === c1.b && c0.a === c1.a;\n}\nfunction colorCopy(dst, src) {\n dst.r = src.r;\n dst.g = src.g;\n dst.b = src.b;\n dst.a = src.a;\n}\nfunction colorNewCopy(src) {\n var r = src.r, g = src.g, b = src.b, a = src.a;\n return { r: r, g: g, b: b, a: a };\n}\nfunction colorNewFromRGBA(r, g, b, a) {\n if (a === void 0) { a = 1.0; }\n return { r: r, g: g, b: b, a: a };\n}\nvar TransparentBlack = colorNewFromRGBA(0, 0, 0, 0);\nvar OpaqueBlack = colorNewFromRGBA(0, 0, 0, 1);\nvar TransparentWhite = colorNewFromRGBA(1, 1, 1, 0);\nvar OpaqueWhite = colorNewFromRGBA(1, 1, 1, 1);\n\n/**\n * @see https://forum.babylonjs.com/t/reverse-depth-buffer-z-buffer/6905/2\n */\nvar IsDepthReversed = true;\nfunction reverseDepthForPerspectiveProjectionMatrix(m, isDepthReversed) {\n if (isDepthReversed === void 0) { isDepthReversed = IsDepthReversed; }\n if (isDepthReversed) {\n m[10] = -m[10];\n m[14] = -m[14];\n }\n}\nfunction reverseDepthForOrthographicProjectionMatrix(m, isDepthReversed) {\n if (isDepthReversed === void 0) { isDepthReversed = IsDepthReversed; }\n if (isDepthReversed) {\n m[10] = -m[10];\n m[14] = -m[14] + 1;\n }\n}\nfunction reverseDepthForCompareFunction(compareFunction, isDepthReversed) {\n if (isDepthReversed === void 0) { isDepthReversed = IsDepthReversed; }\n if (isDepthReversed) {\n switch (compareFunction) {\n case CompareFunction.LESS:\n return CompareFunction.GREATER;\n case CompareFunction.LEQUAL:\n return CompareFunction.GEQUAL;\n case CompareFunction.GEQUAL:\n return CompareFunction.LEQUAL;\n case CompareFunction.GREATER:\n return CompareFunction.LESS;\n default:\n return compareFunction;\n }\n }\n else {\n return compareFunction;\n }\n}\nfunction reverseDepthForClearValue(n, isDepthReversed) {\n if (isDepthReversed === void 0) { isDepthReversed = IsDepthReversed; }\n if (isDepthReversed) {\n return 1.0 - n;\n }\n else {\n return n;\n }\n}\nfunction reverseDepthForDepthOffset(n, isDepthReversed) {\n if (isDepthReversed === void 0) { isDepthReversed = IsDepthReversed; }\n if (isDepthReversed) {\n return -n;\n }\n else {\n return n;\n }\n}\nfunction compareDepthValues(a, b, op, isDepthReversed) {\n if (isDepthReversed === void 0) { isDepthReversed = IsDepthReversed; }\n op = reverseDepthForCompareFunction(op, isDepthReversed);\n if (op === CompareFunction.LESS)\n return a < b;\n else if (op === CompareFunction.LEQUAL)\n return a <= b;\n else if (op === CompareFunction.GREATER)\n return a > b;\n else if (op === CompareFunction.GEQUAL)\n return a >= b;\n else\n throw new Error('whoops');\n}\n\n// import { reverseDepthForCompareFunction } from './depth';\nfunction isPowerOfTwo(n) {\n return !!(n && (n & (n - 1)) === 0);\n}\nfunction fallbackUndefined(v, fallback) {\n return v !== null && v !== undefined ? v : fallback;\n}\nfunction nullify(v) {\n return v === undefined ? null : v;\n}\nfunction fillArray(L, n, v) {\n L.length = n;\n L.fill(v);\n}\nfunction align(n, multiple) {\n var mask = multiple - 1;\n return (n + mask) & ~mask;\n}\nfunction alignNonPowerOfTwo(n, multiple) {\n return (((n + multiple - 1) / multiple) | 0) * multiple;\n}\n// @see https://github.com/d3/d3-array#bisectRight\nfunction bisectRight(L, e, compare) {\n var lo = 0, hi = L.length;\n while (lo < hi) {\n var mid = lo + ((hi - lo) >>> 1);\n var cmp = compare(e, L[mid]);\n if (cmp < 0)\n hi = mid;\n else\n lo = mid + 1;\n }\n return lo;\n}\nfunction spliceBisectRight(L, e, compare) {\n var idx = bisectRight(L, e, compare);\n L.splice(idx, 0, e);\n}\nfunction setBitFlagEnabled(v, mask, enabled) {\n if (enabled)\n v |= mask;\n else\n v &= ~mask;\n return v;\n}\nfunction nArray(n, c) {\n var d = new Array(n);\n for (var i = 0; i < n; i++)\n d[i] = c();\n return d;\n}\nfunction prependLineNo(str, lineStart) {\n if (lineStart === void 0) { lineStart = 1; }\n var lines = str.split('\\n');\n return lines\n .map(function (s, i) { return \"\".concat(leftPad('' + (lineStart + i), 4, ' '), \" \").concat(s); })\n .join('\\n');\n}\nfunction leftPad(S, spaces, ch) {\n if (ch === void 0) { ch = '0'; }\n while (S.length < spaces)\n S = \"\".concat(ch).concat(S);\n return S;\n}\nfunction range(start, count) {\n var L = [];\n for (var i = start; i < start + count; i++)\n L.push(i);\n return L;\n}\nfunction copyChannelBlendState(dst, src) {\n dst.blendDstFactor = src.blendDstFactor;\n dst.blendSrcFactor = src.blendSrcFactor;\n dst.blendMode = src.blendMode;\n}\nfunction copyStencilFaceState(dst, src) {\n if (dst === undefined) {\n dst = {};\n }\n dst.compare = src.compare;\n dst.depthFailOp = src.depthFailOp;\n dst.passOp = src.passOp;\n dst.failOp = src.failOp;\n dst.mask = src.mask;\n return dst;\n}\nfunction copyAttachmentState(dst, src) {\n if (dst === undefined) {\n dst = {\n rgbBlendState: {},\n alphaBlendState: {},\n channelWriteMask: 0,\n };\n }\n copyChannelBlendState(dst.rgbBlendState, src.rgbBlendState);\n copyChannelBlendState(dst.alphaBlendState, src.alphaBlendState);\n dst.channelWriteMask = src.channelWriteMask;\n return dst;\n}\nfunction copyAttachmentsState(dst, src) {\n if (dst.length !== src.length)\n dst.length = src.length;\n for (var i = 0; i < src.length; i++)\n dst[i] = copyAttachmentState(dst[i], src[i]);\n}\nfunction setMegaStateFlags(dst, src) {\n if (src.attachmentsState !== undefined) {\n copyAttachmentsState(dst.attachmentsState, src.attachmentsState);\n }\n if (dst.blendConstant && src.blendConstant) {\n colorCopy(dst.blendConstant, src.blendConstant);\n }\n dst.depthCompare = fallbackUndefined(src.depthCompare, dst.depthCompare);\n dst.depthWrite = fallbackUndefined(src.depthWrite, dst.depthWrite);\n dst.stencilWrite = fallbackUndefined(src.stencilWrite, dst.stencilWrite);\n if (dst.stencilFront && src.stencilFront) {\n copyStencilFaceState(dst.stencilFront, src.stencilFront);\n }\n if (dst.stencilBack && src.stencilBack) {\n copyStencilFaceState(dst.stencilBack, src.stencilBack);\n }\n dst.cullMode = fallbackUndefined(src.cullMode, dst.cullMode);\n dst.frontFace = fallbackUndefined(src.frontFace, dst.frontFace);\n dst.polygonOffset = fallbackUndefined(src.polygonOffset, dst.polygonOffset);\n dst.polygonOffsetFactor = fallbackUndefined(src.polygonOffsetFactor, dst.polygonOffsetFactor);\n dst.polygonOffsetUnits = fallbackUndefined(src.polygonOffsetUnits, dst.polygonOffsetUnits);\n}\nfunction copyMegaState(src) {\n var dst = Object.assign({}, src);\n // Copy fields that need copying.\n dst.attachmentsState = [];\n copyAttachmentsState(dst.attachmentsState, src.attachmentsState);\n dst.blendConstant = dst.blendConstant && colorNewCopy(dst.blendConstant);\n dst.stencilFront = copyStencilFaceState(undefined, src.stencilFront);\n dst.stencilBack = copyStencilFaceState(undefined, src.stencilBack);\n return dst;\n}\nfunction copyAttachmentStateFromSimple(dst, src) {\n if (src.channelWriteMask !== undefined) {\n dst.channelWriteMask = src.channelWriteMask;\n }\n if (src.rgbBlendMode !== undefined) {\n dst.rgbBlendState.blendMode = src.rgbBlendMode;\n }\n if (src.alphaBlendMode !== undefined) {\n dst.alphaBlendState.blendMode = src.alphaBlendMode;\n }\n if (src.rgbBlendSrcFactor !== undefined) {\n dst.rgbBlendState.blendSrcFactor = src.rgbBlendSrcFactor;\n }\n if (src.alphaBlendSrcFactor !== undefined) {\n dst.alphaBlendState.blendSrcFactor = src.alphaBlendSrcFactor;\n }\n if (src.rgbBlendDstFactor !== undefined) {\n dst.rgbBlendState.blendDstFactor = src.rgbBlendDstFactor;\n }\n if (src.alphaBlendDstFactor !== undefined) {\n dst.alphaBlendState.blendDstFactor = src.alphaBlendDstFactor;\n }\n}\nvar defaultBlendState = {\n blendMode: BlendMode.ADD,\n blendSrcFactor: BlendFactor.ONE,\n blendDstFactor: BlendFactor.ZERO,\n};\nvar defaultMegaState = {\n attachmentsState: [\n {\n channelWriteMask: ChannelWriteMask.ALL,\n rgbBlendState: defaultBlendState,\n alphaBlendState: defaultBlendState,\n },\n ],\n blendConstant: colorNewCopy(TransparentBlack),\n depthWrite: true,\n depthCompare: CompareFunction.LEQUAL,\n stencilWrite: false,\n stencilFront: {\n compare: CompareFunction.ALWAYS,\n passOp: StencilOp.KEEP,\n depthFailOp: StencilOp.KEEP,\n failOp: StencilOp.KEEP,\n },\n stencilBack: {\n compare: CompareFunction.ALWAYS,\n passOp: StencilOp.KEEP,\n depthFailOp: StencilOp.KEEP,\n failOp: StencilOp.KEEP,\n },\n cullMode: CullMode.NONE,\n frontFace: FrontFace.CCW,\n polygonOffset: false,\n polygonOffsetFactor: 0,\n polygonOffsetUnits: 0,\n};\nfunction makeMegaState(other, src) {\n if (other === void 0) { other = null; }\n if (src === void 0) { src = defaultMegaState; }\n var dst = copyMegaState(src);\n if (other !== null)\n setMegaStateFlags(dst, other);\n return dst;\n}\nvar fullscreenMegaState = makeMegaState({ depthCompare: CompareFunction.ALWAYS, depthWrite: false }, defaultMegaState);\nfunction setAttachmentStateSimple(dst, simple) {\n if (dst.attachmentsState === undefined) {\n dst.attachmentsState = [];\n copyAttachmentsState(dst.attachmentsState, defaultMegaState.attachmentsState);\n }\n copyAttachmentStateFromSimple(dst.attachmentsState[0], simple);\n return dst;\n}\nvar defaultBindingLayoutSamplerDescriptor = {\n texture: null,\n sampler: null,\n formatKind: SamplerFormatKind.Float,\n dimension: TextureDimension.TEXTURE_2D,\n};\n\nfunction arrayEqual(a, b, e) {\n if (a.length !== b.length)\n return false;\n for (var i = 0; i < a.length; i++)\n if (!e(a[i], b[i]))\n return false;\n return true;\n}\nfunction arrayCopy(a, copyFunc) {\n var b = Array(a.length);\n for (var i = 0; i < a.length; i++)\n b[i] = copyFunc(a[i]);\n return b;\n}\nfunction textureBindingEquals(a, b) {\n return a.texture === b.texture && a.binding === b.binding;\n}\nfunction bufferBindingEquals(a, b) {\n return (a.buffer === b.buffer &&\n a.size === b.size &&\n a.binding === b.binding &&\n a.offset === b.offset);\n}\nfunction samplerBindingEquals(a, b) {\n if (a === null)\n return b === null;\n if (b === null)\n return false;\n return (a.sampler === b.sampler &&\n a.texture === b.texture &&\n a.dimension === b.dimension &&\n a.formatKind === b.formatKind &&\n a.comparison === b.comparison);\n}\nfunction bindingsDescriptorEquals(a, b) {\n a.samplerBindings = a.samplerBindings || [];\n a.uniformBufferBindings = a.uniformBufferBindings || [];\n a.storageBufferBindings = a.storageBufferBindings || [];\n a.storageTextureBindings = a.storageTextureBindings || [];\n b.samplerBindings = b.samplerBindings || [];\n b.uniformBufferBindings = b.uniformBufferBindings || [];\n b.storageBufferBindings = b.storageBufferBindings || [];\n b.storageTextureBindings = b.storageTextureBindings || [];\n if (a.samplerBindings.length !== b.samplerBindings.length)\n return false;\n if (!arrayEqual(a.samplerBindings, b.samplerBindings, samplerBindingEquals))\n return false;\n if (!arrayEqual(a.uniformBufferBindings, b.uniformBufferBindings, bufferBindingEquals))\n return false;\n if (!arrayEqual(a.storageBufferBindings, b.storageBufferBindings, bufferBindingEquals))\n return false;\n if (!arrayEqual(a.storageTextureBindings, b.storageTextureBindings, textureBindingEquals))\n return false;\n return true;\n}\nfunction channelBlendStateEquals(a, b) {\n return (a.blendMode == b.blendMode &&\n a.blendSrcFactor === b.blendSrcFactor &&\n a.blendDstFactor === b.blendDstFactor);\n}\nfunction attachmentStateEquals(a, b) {\n if (!channelBlendStateEquals(a.rgbBlendState, b.rgbBlendState))\n return false;\n if (!channelBlendStateEquals(a.alphaBlendState, b.alphaBlendState))\n return false;\n if (a.channelWriteMask !== b.channelWriteMask)\n return false;\n return true;\n}\nfunction stencilFaceStateEquals(a, b) {\n return (a.compare == b.compare &&\n a.depthFailOp === b.depthFailOp &&\n a.failOp === b.failOp &&\n a.passOp === b.passOp &&\n a.mask === b.mask);\n}\nfunction megaStateDescriptorEquals(a, b) {\n if (!arrayEqual(a.attachmentsState, b.attachmentsState, attachmentStateEquals))\n return false;\n if (a.blendConstant &&\n b.blendConstant &&\n !colorEqual(a.blendConstant, b.blendConstant))\n return false;\n if (a.stencilFront &&\n b.stencilFront &&\n !stencilFaceStateEquals(a.stencilFront, b.stencilFront))\n return false;\n if (a.stencilBack &&\n b.stencilBack &&\n !stencilFaceStateEquals(a.stencilBack, b.stencilBack))\n return false;\n return (a.depthCompare === b.depthCompare &&\n a.depthWrite === b.depthWrite &&\n a.stencilWrite === b.stencilWrite &&\n a.cullMode === b.cullMode &&\n a.frontFace === b.frontFace &&\n a.polygonOffset === b.polygonOffset &&\n a.polygonOffsetFactor === b.polygonOffsetFactor &&\n a.polygonOffsetUnits === b.polygonOffsetUnits);\n}\nfunction programEquals(a, b) {\n return a.id === b.id;\n}\nfunction formatEquals(a, b) {\n return a === b;\n}\nfunction renderPipelineDescriptorEquals(a, b) {\n if (a.topology !== b.topology)\n return false;\n if (a.inputLayout !== b.inputLayout)\n return false;\n if (a.sampleCount !== b.sampleCount)\n return false;\n if (a.megaStateDescriptor &&\n b.megaStateDescriptor &&\n !megaStateDescriptorEquals(a.megaStateDescriptor, b.megaStateDescriptor))\n return false;\n if (!programEquals(a.program, b.program))\n return false;\n if (!arrayEqual(a.colorAttachmentFormats, b.colorAttachmentFormats, formatEquals))\n return false;\n if (a.depthStencilAttachmentFormat !== b.depthStencilAttachmentFormat)\n return false;\n return true;\n}\nfunction vertexAttributeDescriptorEquals(a, b) {\n return (a.offset === b.offset &&\n a.shaderLocation === b.shaderLocation &&\n a.format === b.format &&\n a.divisor === b.divisor);\n}\nfunction inputLayoutBufferDescriptorEquals(a, b) {\n if (isNil(a))\n return isNil(b);\n if (isNil(b))\n return false;\n return (a.arrayStride === b.arrayStride &&\n a.stepMode === b.stepMode &&\n arrayEqual(a.attributes, b.attributes, vertexAttributeDescriptorEquals));\n}\nfunction inputLayoutDescriptorEquals(a, b) {\n if (a.indexBufferFormat !== b.indexBufferFormat)\n return false;\n if (!arrayEqual(a.vertexBufferDescriptors, b.vertexBufferDescriptors, inputLayoutBufferDescriptorEquals))\n return false;\n if (!programEquals(a.program, b.program))\n return false;\n return true;\n}\nfunction samplerDescriptorEquals(a, b) {\n return (a.addressModeU === b.addressModeU &&\n a.addressModeV === b.addressModeV &&\n a.minFilter === b.minFilter &&\n a.magFilter === b.magFilter &&\n a.mipmapFilter === b.mipmapFilter &&\n a.lodMinClamp === b.lodMinClamp &&\n a.lodMaxClamp === b.lodMaxClamp &&\n a.maxAnisotropy === b.maxAnisotropy &&\n a.compareFunction === b.compareFunction);\n}\nfunction samplerBindingCopy(a) {\n var sampler = a.sampler;\n var texture = a.texture;\n var dimension = a.dimension;\n var formatKind = a.formatKind;\n var comparison = a.comparison;\n return { sampler: sampler, texture: texture, dimension: dimension, formatKind: formatKind, comparison: comparison };\n}\nfunction bufferBindingCopy(a) {\n var buffer = a.buffer;\n var size = a.size;\n var binding = a.binding;\n var offset = a.offset;\n return { binding: binding, buffer: buffer, offset: offset, size: size };\n}\nfunction textureBindingCopy(a) {\n var binding = a.binding;\n var texture = a.texture;\n return { binding: binding, texture: texture };\n}\nfunction bindingsDescriptorCopy(a) {\n var samplerBindings = a.samplerBindings && arrayCopy(a.samplerBindings, samplerBindingCopy);\n var uniformBufferBindings = a.uniformBufferBindings &&\n arrayCopy(a.uniformBufferBindings, bufferBindingCopy);\n var storageBufferBindings = a.storageBufferBindings &&\n arrayCopy(a.storageBufferBindings, bufferBindingCopy);\n var storageTextureBindings = a.storageTextureBindings &&\n arrayCopy(a.storageTextureBindings, textureBindingCopy);\n return {\n samplerBindings: samplerBindings,\n uniformBufferBindings: uniformBufferBindings,\n storageBufferBindings: storageBufferBindings,\n storageTextureBindings: storageTextureBindings,\n pipeline: a.pipeline,\n };\n}\nfunction renderPipelineDescriptorCopy(a) {\n var inputLayout = a.inputLayout;\n var program = a.program;\n var topology = a.topology;\n var megaStateDescriptor = a.megaStateDescriptor && copyMegaState(a.megaStateDescriptor);\n var colorAttachmentFormats = a.colorAttachmentFormats.slice();\n var depthStencilAttachmentFormat = a.depthStencilAttachmentFormat;\n var sampleCount = a.sampleCount;\n return {\n inputLayout: inputLayout,\n megaStateDescriptor: megaStateDescriptor,\n program: program,\n topology: topology,\n colorAttachmentFormats: colorAttachmentFormats,\n depthStencilAttachmentFormat: depthStencilAttachmentFormat,\n sampleCount: sampleCount,\n };\n}\nfunction vertexAttributeDescriptorCopy(a) {\n var shaderLocation = a.shaderLocation;\n var format = a.format;\n var offset = a.offset;\n var divisor = a.divisor;\n return {\n shaderLocation: shaderLocation,\n format: format,\n offset: offset,\n divisor: divisor,\n };\n}\nfunction inputLayoutBufferDescriptorCopy(a) {\n if (!isNil(a)) {\n var arrayStride = a.arrayStride;\n var stepMode = a.stepMode;\n var attributes = arrayCopy(a.attributes, vertexAttributeDescriptorCopy);\n return { arrayStride: arrayStride, stepMode: stepMode, attributes: attributes };\n }\n else {\n return a;\n }\n}\nfunction inputLayoutDescriptorCopy(a) {\n var vertexBufferDescriptors = arrayCopy(a.vertexBufferDescriptors, inputLayoutBufferDescriptorCopy);\n var indexBufferFormat = a.indexBufferFormat;\n var program = a.program;\n return {\n vertexBufferDescriptors: vertexBufferDescriptors,\n indexBufferFormat: indexBufferFormat,\n program: program,\n };\n}\n\nvar _a;\n// if array name then clean the array brackets\nvar UNIFORM_NAME_REGEXP = /([^[]*)(\\[[0-9]+\\])?/;\nfunction parseUniformName(name) {\n // Shortcut to avoid redundant or bad matches\n if (name[name.length - 1] !== ']') {\n return {\n name: name,\n length: 1,\n isArray: false,\n };\n }\n var matches = name.match(UNIFORM_NAME_REGEXP);\n if (!matches || matches.length < 2) {\n throw new Error(\"Failed to parse GLSL uniform name \".concat(name));\n }\n return {\n name: matches[1],\n length: Number(matches[2]) || 1,\n isArray: Boolean(matches[2]),\n };\n}\nfunction getSamplerSetter() {\n var cache = null;\n return function (gl, location, \n // eslint-disable-next-line\n value) {\n var update = cache !== value;\n if (update) {\n gl.uniform1i(location, value);\n cache = value;\n }\n return update;\n };\n}\nfunction getArraySetter(functionName, toArray, size, uniformSetter) {\n var cache = null;\n var cacheLength = null;\n // eslint-disable-next-line\n return function (gl, location, value) {\n var arrayValue = toArray(value, size);\n var length = arrayValue.length;\n var update = false;\n if (cache === null) {\n cache = new Float32Array(length);\n cacheLength = length;\n update = true;\n }\n else {\n assert(cacheLength === length, 'Uniform length cannot change.');\n for (var i = 0; i < length; ++i) {\n if (arrayValue[i] !== cache[i]) {\n update = true;\n break;\n }\n }\n }\n if (update) {\n uniformSetter(gl, functionName, location, arrayValue);\n cache.set(arrayValue);\n }\n return update;\n };\n}\nfunction setVectorUniform(gl, functionName, location, \n// eslint-disable-next-line\nvalue) {\n gl[functionName](location, value);\n}\nfunction setMatrixUniform(gl, functionName, location, \n// eslint-disable-next-line\nvalue) {\n gl[functionName](location, false, value);\n}\nvar FLOAT_ARRAY = {};\nvar INT_ARRAY = {};\nvar UINT_ARRAY = {};\nvar array1 = [0];\nfunction toTypedArray(value, uniformLength, Type, \n// eslint-disable-next-line\ncache) {\n // convert boolean uniforms to Number\n if (uniformLength === 1 && typeof value === 'boolean') {\n value = value ? 1 : 0;\n }\n if (Number.isFinite(value)) {\n array1[0] = value;\n value = array1;\n }\n var length = value.length;\n if (value instanceof Type) {\n return value;\n }\n var result = cache[length];\n if (!result) {\n result = new Type(length);\n cache[length] = result;\n }\n for (var i = 0; i < length; i++) {\n result[i] = value[i];\n }\n return result;\n}\nfunction toFloatArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Float32Array, FLOAT_ARRAY);\n}\nfunction toIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Int32Array, INT_ARRAY);\n}\nfunction toUIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Uint32Array, UINT_ARRAY);\n}\nvar UNIFORM_SETTERS = (_a = {},\n // WEBGL1\n _a[GL.FLOAT] = getArraySetter.bind(null, 'uniform1fv', toFloatArray, 1, setVectorUniform),\n _a[GL.FLOAT_VEC2] = getArraySetter.bind(null, 'uniform2fv', toFloatArray, 2, setVectorUniform),\n _a[GL.FLOAT_VEC3] = getArraySetter.bind(null, 'uniform3fv', toFloatArray, 3, setVectorUniform),\n _a[GL.FLOAT_VEC4] = getArraySetter.bind(null, 'uniform4fv', toFloatArray, 4, setVectorUniform),\n _a[GL.INT] = getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n _a[GL.INT_VEC2] = getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n _a[GL.INT_VEC3] = getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n _a[GL.INT_VEC4] = getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n _a[GL.BOOL] = getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n _a[GL.BOOL_VEC2] = getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n _a[GL.BOOL_VEC3] = getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n _a[GL.BOOL_VEC4] = getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n // uniformMatrix(false): don't transpose the matrix\n _a[GL.FLOAT_MAT2] = getArraySetter.bind(null, 'uniformMatrix2fv', toFloatArray, 4, setMatrixUniform),\n _a[GL.FLOAT_MAT3] = getArraySetter.bind(null, 'uniformMatrix3fv', toFloatArray, 9, setMatrixUniform),\n _a[GL.FLOAT_MAT4] = getArraySetter.bind(null, 'uniformMatrix4fv', toFloatArray, 16, setMatrixUniform),\n // WEBGL2 - unsigned integers, irregular matrices, additional texture samplers\n _a[GL.UNSIGNED_INT] = getArraySetter.bind(null, 'uniform1uiv', toUIntArray, 1, setVectorUniform),\n _a[GL.UNSIGNED_INT_VEC2] = getArraySetter.bind(null, 'uniform2uiv', toUIntArray, 2, setVectorUniform),\n _a[GL.UNSIGNED_INT_VEC3] = getArraySetter.bind(null, 'uniform3uiv', toUIntArray, 3, setVectorUniform),\n _a[GL.UNSIGNED_INT_VEC4] = getArraySetter.bind(null, 'uniform4uiv', toUIntArray, 4, setVectorUniform),\n // uniformMatrix(false): don't transpose the matrix\n _a[GL.FLOAT_MAT2x3] = getArraySetter.bind(null, 'uniformMatrix2x3fv', toFloatArray, 6, setMatrixUniform),\n _a[GL.FLOAT_MAT2x4] = getArraySetter.bind(null, 'uniformMatrix2x4fv', toFloatArray, 8, setMatrixUniform),\n _a[GL.FLOAT_MAT3x2] = getArraySetter.bind(null, 'uniformMatrix3x2fv', toFloatArray, 6, setMatrixUniform),\n _a[GL.FLOAT_MAT3x4] = getArraySetter.bind(null, 'uniformMatrix3x4fv', toFloatArray, 12, setMatrixUniform),\n _a[GL.FLOAT_MAT4x2] = getArraySetter.bind(null, 'uniformMatrix4x2fv', toFloatArray, 8, setMatrixUniform),\n _a[GL.FLOAT_MAT4x3] = getArraySetter.bind(null, 'uniformMatrix4x3fv', toFloatArray, 12, setMatrixUniform),\n _a[GL.SAMPLER_2D] = getSamplerSetter,\n _a[GL.SAMPLER_CUBE] = getSamplerSetter,\n _a[GL.SAMPLER_3D] = getSamplerSetter,\n _a[GL.SAMPLER_2D_SHADOW] = getSamplerSetter,\n _a[GL.SAMPLER_2D_ARRAY] = getSamplerSetter,\n _a[GL.SAMPLER_2D_ARRAY_SHADOW] = getSamplerSetter,\n _a[GL.SAMPLER_CUBE_SHADOW] = getSamplerSetter,\n _a[GL.INT_SAMPLER_2D] = getSamplerSetter,\n _a[GL.INT_SAMPLER_3D] = getSamplerSetter,\n _a[GL.INT_SAMPLER_CUBE] = getSamplerSetter,\n _a[GL.INT_SAMPLER_2D_ARRAY] = getSamplerSetter,\n _a[GL.UNSIGNED_INT_SAMPLER_2D] = getSamplerSetter,\n _a[GL.UNSIGNED_INT_SAMPLER_3D] = getSamplerSetter,\n _a[GL.UNSIGNED_INT_SAMPLER_CUBE] = getSamplerSetter,\n _a[GL.UNSIGNED_INT_SAMPLER_2D_ARRAY] = getSamplerSetter,\n _a);\nfunction getUniformSetter(gl, location, info) {\n var setter = UNIFORM_SETTERS[info.type];\n if (!setter) {\n throw new Error(\"Unknown GLSL uniform type \".concat(info.type));\n }\n return setter().bind(null, gl, location);\n}\n\nvar dtypes = {\n '[object Int8Array]': 5120,\n '[object Int16Array]': 5122,\n '[object Int32Array]': 5124,\n '[object Uint8Array]': 5121,\n '[object Uint8ClampedArray]': 5121,\n '[object Uint16Array]': 5123,\n '[object Uint32Array]': 5125,\n '[object Float32Array]': 5126,\n '[object Float64Array]': 5121,\n '[object ArrayBuffer]': 5121,\n};\n// eslint-disable-next-line\nfunction isTypedArray(x) {\n return Object.prototype.toString.call(x) in dtypes;\n}\n\n// const ES100_REPLACEMENTS: [RegExp, string][] = [\n// // In GLSL 1.00 ES these functions are provided by an extension\n// [/\\btexture(2D|2DProj|Cube)Lod\\(/g, 'texture$1LodEXT('],\n// // Overloads in GLSL 3.00 map to individual functions. Note that we cannot\n// // differentiate 2D,2DProj,Cube without type analysis so we choose the most common variant.\n// [/\\btexture\\(/g, 'texture2D('],\n// [/\\btextureLod\\(/g, 'texture2DLodEXT('],\n// ];\nfunction defineStr(k, v) {\n return \"#define \".concat(k, \" \").concat(v);\n}\nfunction getDefines(shader) {\n var defines = {};\n shader.replace(/^\\s*#define\\s*(\\S*)\\s*(\\S*)\\s*$/gm, function (_, name, value) {\n var v = Number(value);\n defines[name] = isNaN(v) ? value : v;\n return '';\n });\n return defines;\n}\nfunction getAttributeLocations(vert, defines) {\n var locations = [];\n vert.replace(/^\\s*layout\\(location\\s*=\\s*(\\S*)\\)\\s*in\\s+\\S+\\s*(.*);$/gm, function (_, location, name) {\n var l = Number(location);\n locations.push({ location: isNaN(l) ? defines[location] : l, name: name });\n return '';\n });\n return locations;\n}\nfunction getUniforms(vert) {\n var uniformNames = [];\n var structs = [];\n vert.replace(/\\s*struct\\s*(.*)\\s*{((?:\\s*.*\\s*)*?)};/g, function (_, type, uniformStr) {\n var uniforms = [];\n uniformStr\n .trim()\n .replace('\\r\\n', '\\n')\n .split('\\n')\n .forEach(function (line) {\n var _a = __read(line.trim().split(/\\s+/), 2), type = _a[0], name = _a[1];\n uniforms.push({\n type: type.trim(),\n name: name.replace(';', '').trim(),\n });\n });\n structs.push({\n type: type.trim(),\n uniforms: uniforms,\n });\n return '';\n });\n vert.replace(/\\s*uniform(?:\\s+)(?:\\w+)(?:\\s?){([^]*?)};?/g, function (_, uniforms) {\n uniforms\n .trim()\n .replace('\\r\\n', '\\n')\n .split('\\n')\n .forEach(function (line) {\n var result = line.trim().split(' ');\n var type = result[0] || '';\n var name = result[1] || '';\n // DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n var isArray = name.indexOf('[') > -1;\n name = name.replace(';', '').replace('[', '').trim();\n // ignore conditional comments\n if (type.startsWith('#')) {\n return;\n }\n // account for structs\n if (type) {\n var struct = structs.find(function (struct) { return type === struct.type; });\n if (struct) {\n if (isArray) {\n var _loop_1 = function (i) {\n struct.uniforms.forEach(function (uniform) {\n uniformNames.push(\"\".concat(name, \"[\").concat(i, \"].\").concat(uniform.name));\n });\n };\n for (var i = 0; i < 5; i++) {\n _loop_1(i);\n }\n }\n else {\n struct.uniforms.forEach(function (uniform) {\n uniformNames.push(\"\".concat(name, \".\").concat(uniform.name));\n });\n }\n }\n }\n if (name) {\n uniformNames.push(name);\n }\n });\n return '';\n });\n return uniformNames;\n}\nfunction parseBinding(layout) {\n if (layout === undefined)\n return null;\n var g = /binding\\s*=\\s*(\\d+)/.exec(layout);\n if (g !== null) {\n var bindingNum = parseInt(g[1], 10);\n if (!Number.isNaN(bindingNum))\n return bindingNum;\n }\n return null;\n}\nfunction getSeparateSamplerTypes(combinedSamplerType) {\n var samplerType = '';\n var textureType = combinedSamplerType;\n // if (combinedSamplerType.endsWith(`Shadow`)) {\n // textureType = textureType.slice(0, -6);\n // samplerType = `Shadow`;\n // }\n return [textureType, samplerType];\n}\nfunction preprocessShader_GLSL(vendorInfo, type, source, defines, usePrecision) {\n var _a;\n if (defines === void 0) { defines = null; }\n if (usePrecision === void 0) { usePrecision = true; }\n var isGLSL100 = vendorInfo.glslVersion === '#version 100';\n var useMRT = type === 'frag' &&\n ((_a = source.match(/^\\s*layout\\(location\\s*=\\s*\\d*\\)\\s*out\\s+vec4\\s*(.*);$/gm)) === null || _a === void 0 ? void 0 : _a.length) > 1;\n var lines = source\n .replace('\\r\\n', '\\n')\n .split('\\n')\n .map(function (n) {\n // Remove comments.\n return n.replace(/[/][/].*$/, '');\n })\n .filter(function (n) {\n // Filter whitespace.\n var isEmpty = !n || /^\\s+$/.test(n);\n return !isEmpty;\n });\n // #define KEY VAR\n var definesString = '';\n if (defines !== null)\n definesString = Object.keys(defines)\n .map(function (key) { return defineStr(key, defines[key]); })\n .join('\\n');\n var precision = lines.find(function (line) { return line.startsWith('precision'); }) ||\n 'precision mediump float;';\n var rest = usePrecision\n ? lines.filter(function (line) { return !line.startsWith('precision'); }).join('\\n')\n : lines.join('\\n');\n var extraDefines = '';\n if (vendorInfo.viewportOrigin === ViewportOrigin.UPPER_LEFT) {\n extraDefines += \"\".concat(defineStr(\"VIEWPORT_ORIGIN_TL\", \"1\"), \"\\n\");\n }\n if (vendorInfo.clipSpaceNearZ === ClipSpaceNearZ.ZERO) {\n extraDefines += \"\".concat(defineStr(\"CLIPSPACE_NEAR_ZERO\", \"1\"), \"\\n\");\n }\n if (vendorInfo.explicitBindingLocations) {\n var set_1 = 0, implicitBinding_1 = 0, location_1 = 0;\n rest = rest.replace(/^\\s*(layout\\((.*)\\))?\\s*uniform(.+{)$/gm, function (substr, cap, layout, rest) {\n var layout2 = layout ? \"\".concat(layout, \", \") : \"\";\n return \"layout(\".concat(layout2, \"set = \").concat(set_1, \", binding = \").concat(implicitBinding_1++, \") uniform \").concat(rest);\n });\n // XXX(jstpierre): WebGPU now binds UBOs and textures in different sets as a porting hack, hrm...\n set_1++;\n implicitBinding_1 = 0;\n assert(vendorInfo.separateSamplerTextures);\n rest = rest.replace(/^\\s*(layout\\((.*)\\))?\\s*uniform sampler(\\w+) (.*);/gm, function (substr, cap, layout, combinedSamplerType, samplerName) {\n var binding = parseBinding(layout);\n if (binding === null)\n binding = implicitBinding_1++;\n var _a = __read(getSeparateSamplerTypes(combinedSamplerType), 2), textureType = _a[0], samplerType = _a[1];\n return type === 'frag'\n ? \"\\nlayout(set = \".concat(set_1, \", binding = \").concat(binding * 2 + 0, \") uniform texture\").concat(textureType, \" T_\").concat(samplerName, \";\\nlayout(set = \").concat(set_1, \", binding = \").concat(binding * 2 + 1, \") uniform sampler\").concat(samplerType, \" S_\").concat(samplerName, \";\").trim()\n : '';\n });\n rest = rest.replace(type === 'frag' ? /^\\s*\\b(varying|in)\\b/gm : /^\\s*\\b(varying|out)\\b/gm, function (substr, tok) {\n return \"layout(location = \".concat(location_1++, \") \").concat(tok);\n });\n /**\n * @see https://github.com/gfx-rs/naga/issues/1994\n */\n extraDefines += \"\".concat(defineStr(\"gl_VertexID\", \"gl_VertexIndex\"), \"\\n\");\n extraDefines += \"\".concat(defineStr(\"gl_InstanceID\", \"gl_InstanceIndex\"), \"\\n\");\n // Workaround for Naga\n // https://github.com/gfx-rs/naga/issues/1353\n precision = precision.replace(/^precision (.*) sampler(.*);$/gm, '');\n }\n else {\n var implicitBinding_2 = 0;\n rest = rest.replace(/^\\s*(layout\\((.*)\\))?\\s*uniform sampler(\\w+) (.*);/gm, function (substr, cap, layout, combinedSamplerType, samplerName) {\n var binding = parseBinding(layout);\n if (binding === null)\n binding = implicitBinding_2++;\n return \"uniform sampler\".concat(combinedSamplerType, \" \").concat(samplerName, \"; // BINDING=\").concat(binding);\n });\n }\n rest = rest.replace(/\\bPU_SAMPLER_(\\w+)\\((.*?)\\)/g, function (substr, combinedSamplerType, samplerName) {\n return \"SAMPLER_\".concat(combinedSamplerType, \"(P_\").concat(samplerName, \")\");\n });\n rest = rest.replace(/\\bPF_SAMPLER_(\\w+)\\((.*?)\\)/g, function (substr, combinedSamplerType, samplerName) {\n return \"PP_SAMPLER_\".concat(combinedSamplerType, \"(P_\").concat(samplerName, \")\");\n });\n rest = rest.replace(/\\bPU_TEXTURE\\((.*?)\\)/g, function (substr, samplerName) {\n return \"TEXTURE(P_\".concat(samplerName, \")\");\n });\n if (vendorInfo.separateSamplerTextures) {\n rest = rest.replace(/\\bPD_SAMPLER_(\\w+)\\((.*?)\\)/g, function (substr, combinedSamplerType, samplerName) {\n var _a = __read(getSeparateSamplerTypes(combinedSamplerType), 2), textureType = _a[0], samplerType = _a[1];\n return \"texture\".concat(textureType, \" T_P_\").concat(samplerName, \", sampler\").concat(samplerType, \" S_P_\").concat(samplerName);\n });\n rest = rest.replace(/\\bPP_SAMPLER_(\\w+)\\((.*?)\\)/g, function (substr, combinedSamplerType, samplerName) {\n return \"T_\".concat(samplerName, \", S_\").concat(samplerName);\n });\n rest = rest.replace(/\\bSAMPLER_(\\w+)\\((.*?)\\)/g, function (substr, combinedSamplerType, samplerName) {\n return \"sampler\".concat(combinedSamplerType, \"(T_\").concat(samplerName, \", S_\").concat(samplerName, \")\");\n });\n rest = rest.replace(/\\bTEXTURE\\((.*?)\\)/g, function (substr, samplerName) {\n return \"T_\".concat(samplerName);\n });\n }\n else {\n var samplerNames_1 = [];\n rest = rest.replace(/\\bPD_SAMPLER_(\\w+)\\((.*?)\\)/g, function (substr, combinedSamplerType, samplerName) {\n return \"sampler\".concat(combinedSamplerType, \" P_\").concat(samplerName);\n });\n rest = rest.replace(/\\bPP_SAMPLER_(\\w+)\\((.*?)\\)/g, function (substr, combinedSamplerType, samplerName) {\n return samplerName;\n });\n rest = rest.replace(/\\bSAMPLER_(\\w+)\\((.*?)\\)/g, function (substr, combinedSamplerType, samplerName) {\n samplerNames_1.push([samplerName, combinedSamplerType]);\n return samplerName;\n });\n if (isGLSL100) {\n samplerNames_1.forEach(function (_a) {\n var _b = __read(_a, 2), samplerName = _b[0], combinedSamplerType = _b[1];\n // texture(u_T) -> texture2D(u_T) or textureCube(u_T)\n rest = rest.replace(new RegExp(\"texture\\\\(\".concat(samplerName), 'g'), function () {\n return \"texture\".concat(combinedSamplerType, \"(\").concat(samplerName);\n });\n });\n }\n rest = rest.replace(/\\bTEXTURE\\((.*?)\\)/g, function (substr, samplerName) {\n return samplerName;\n });\n }\n // using #define means we can't use `const in/out` in params\n // ${isGLSL100 && type === 'vert' ? '#define in attribute\\n#define out varying' : ''}\n // ${isGLSL100 && type === 'frag' ? '#define in varying' : ''}\n // headless-gl will throw the following error if we prepend `#version 100`:\n // #version directive must occur before anything else, except for comments and white space\n var concat = \"\".concat(isGLSL100 ? '' : vendorInfo.glslVersion, \"\\n\").concat(isGLSL100 && useMRT ? '#extension GL_EXT_draw_buffers : require\\n' : '', \"\\n\").concat(isGLSL100 && type === 'frag'\n ? '#extension GL_OES_standard_derivatives : enable\\n'\n : '').concat(usePrecision ? precision : '', \"\\n\").concat(extraDefines ? extraDefines : '').concat(definesString ? definesString + '\\n' : '', \"\\n\").concat(rest, \"\\n\").trim();\n // out vec4 outputColor; -> layout(location = 0) out vec4 outputColor;\n if (vendorInfo.explicitBindingLocations && type === 'frag') {\n concat = concat.replace(/^\\b(out)\\b/g, function (substr, tok) {\n return \"layout(location = 0) \".concat(tok);\n });\n }\n // GLSL 300 -> 100\n // @see https://webgl2fundamentals.org/webgl/lessons/webgl1-to-webgl2.html\n if (isGLSL100) {\n // in -> varying\n if (type === 'frag') {\n concat = concat.replace(/^\\s*in\\s+(\\S+)\\s*(.*);$/gm, function (_, dataType, name) {\n return \"varying \".concat(dataType, \" \").concat(name, \";\\n\");\n });\n }\n if (type === 'vert') {\n // out -> varying\n concat = concat.replace(/^\\s*out\\s+(\\S+)\\s*(.*);$/gm, function (_, dataType, name) {\n return \"varying \".concat(dataType, \" \").concat(name, \";\\n\");\n });\n // in -> attribute\n concat = concat.replace(\n // /^\\s*layout\\(location\\s*=\\s*\\d*\\)\\s*in\\s*(.*)\\s*(.*);$/gm,\n /^\\s*layout\\(location\\s*=\\s*\\S*\\)\\s*in\\s+(\\S+)\\s*(.*);$/gm, function (_, dataType, name) {\n return \"attribute \".concat(dataType, \" \").concat(name, \";\\n\");\n });\n }\n // interface blocks supported in GLSL ES 3.00 and above only\n concat = concat.replace(/\\s*uniform\\s*.*\\s*{((?:\\s*.*\\s*)*?)};/g, function (substr, uniforms) {\n return uniforms.trim().replace(/^.*$/gm, function (uniform) {\n // eg. #ifdef\n var trimmed = uniform.trim();\n if (trimmed.startsWith('#')) {\n return trimmed;\n }\n return uniform ? \"uniform \".concat(trimmed) : '';\n });\n });\n if (type === 'frag') {\n if (useMRT) {\n var gBuffers_1 = [];\n concat = concat.replace(/^\\s*layout\\(location\\s*=\\s*\\d*\\)\\s*out\\s+vec4\\s*(.*);$/gm, function (_, buffer) {\n gBuffers_1.push(buffer);\n return \"vec4 \".concat(buffer, \";\\n\");\n });\n var lastIndexOfMain = concat.lastIndexOf('}');\n concat =\n concat.substring(0, lastIndexOfMain) +\n \"\\n \".concat(gBuffers_1\n .map(function (gBuffer, i) { return \"gl_FragData[\".concat(i, \"] = \").concat(gBuffer, \";\\n \"); })\n .join('\\n')) +\n concat.substring(lastIndexOfMain);\n }\n else {\n var glFragColor_1;\n concat = concat.replace(/^\\s*out\\s+(\\S+)\\s*(.*);$/gm, function (_, dataType, name) {\n glFragColor_1 = name;\n return \"\".concat(dataType, \" \").concat(name, \";\\n\");\n });\n if (glFragColor_1) {\n var lastIndexOfMain = concat.lastIndexOf('}');\n concat =\n concat.substring(0, lastIndexOfMain) +\n \"\\n gl_FragColor = vec4(\".concat(glFragColor_1, \");\\n\") +\n concat.substring(lastIndexOfMain);\n }\n }\n }\n // remove layout(location = 0)\n concat = concat.replace(/^\\s*layout\\((.*)\\)/gm, '');\n // replace texture with texture2D\n // for (const [pattern, replacement] of ES100_REPLACEMENTS) {\n // concat = concat.replace(pattern, replacement);\n // }\n }\n return concat;\n}\nfunction preprocessProgram_GLSL(vendorInfo, vert, frag, defines) {\n if (defines === void 0) { defines = null; }\n var preprocessedVert = preprocessShader_GLSL(vendorInfo, 'vert', vert, defines);\n var preprocessedFrag = preprocessShader_GLSL(vendorInfo, 'frag', frag, defines);\n return { vert: vert, frag: frag, preprocessedVert: preprocessedVert, preprocessedFrag: preprocessedFrag };\n}\n\nvar ResourceBase_GL = /** @class */ (function (_super) {\n __extends(ResourceBase_GL, _super);\n function ResourceBase_GL(_a) {\n var id = _a.id, device = _a.device;\n var _this = _super.call(this) || this;\n _this.id = id;\n _this.device = device;\n if (_this.device['resourceCreationTracker'] !== null) {\n _this.device['resourceCreationTracker'].trackResourceCreated(_this);\n }\n return _this;\n }\n ResourceBase_GL.prototype.destroy = function () {\n if (this.device['resourceCreationTracker'] !== null) {\n this.device['resourceCreationTracker'].trackResourceDestroyed(this);\n }\n };\n return ResourceBase_GL;\n}(EventEmitter));\n\nvar Bindings_GL = /** @class */ (function (_super) {\n __extends(Bindings_GL, _super);\n function Bindings_GL(_a) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.Bindings;\n var uniformBufferBindings = descriptor.uniformBufferBindings, samplerBindings = descriptor.samplerBindings;\n _this.uniformBufferBindings = uniformBufferBindings || [];\n _this.samplerBindings = samplerBindings || [];\n _this.bindingLayouts = _this.createBindingLayouts();\n return _this;\n }\n Bindings_GL.prototype.createBindingLayouts = function () {\n var firstUniformBuffer = 0;\n var firstSampler = 0;\n var bindingLayoutTables = [];\n // Support only 1 bindGroup for now.\n var numUniformBuffers = this.uniformBufferBindings.length;\n var numSamplers = this.samplerBindings.length;\n bindingLayoutTables.push({\n firstUniformBuffer: firstUniformBuffer,\n numUniformBuffers: numUniformBuffers,\n firstSampler: firstSampler,\n numSamplers: numSamplers,\n });\n firstUniformBuffer += numUniformBuffers;\n firstSampler += numSamplers;\n return {\n numUniformBuffers: firstUniformBuffer,\n numSamplers: firstSampler,\n bindingLayoutTables: bindingLayoutTables,\n };\n };\n return Bindings_GL;\n}(ResourceBase_GL));\n\n// @see https://github.com/visgl/luma.gl/blob/30a1039573576d73641de7c1ba222e8992eb526e/modules/gltools/src/utils/webgl-checks.ts#L22\nvar isWebGL2Flag;\nfunction isWebGL2(gl) {\n if (isWebGL2Flag !== undefined) {\n return isWebGL2Flag;\n }\n if (typeof WebGL2RenderingContext !== 'undefined' &&\n gl instanceof WebGL2RenderingContext) {\n isWebGL2Flag = true;\n return true;\n }\n // Look for debug contexts, headless gl etc\n // @ts-ignore\n isWebGL2Flag = Boolean(gl && gl._version === 2);\n return isWebGL2Flag;\n}\nfunction isTextureFormatCompressed(fmt) {\n var typeFlags = getFormatTypeFlags(fmt);\n switch (typeFlags) {\n case FormatTypeFlags.BC1:\n case FormatTypeFlags.BC2:\n case FormatTypeFlags.BC3:\n case FormatTypeFlags.BC4_UNORM:\n case FormatTypeFlags.BC4_SNORM:\n case FormatTypeFlags.BC5_UNORM:\n case FormatTypeFlags.BC5_SNORM:\n return true;\n default:\n return false;\n }\n}\nfunction isFormatSizedInteger(fmt) {\n var flags = getFormatFlags(fmt);\n if (flags & FormatFlags.Normalized)\n return false;\n var typeFlags = getFormatTypeFlags(fmt);\n // Check for integer types.\n if (typeFlags === FormatTypeFlags.S8 ||\n typeFlags === FormatTypeFlags.S16 ||\n typeFlags === FormatTypeFlags.S32)\n return true;\n if (typeFlags === FormatTypeFlags.U8 ||\n typeFlags === FormatTypeFlags.U16 ||\n typeFlags === FormatTypeFlags.U32)\n return true;\n return false;\n}\nfunction translateBufferHint(hint) {\n switch (hint) {\n case BufferFrequencyHint.STATIC:\n return GL.STATIC_DRAW;\n case BufferFrequencyHint.DYNAMIC:\n return GL.DYNAMIC_DRAW;\n }\n}\nfunction translateBufferUsageToTarget(usage) {\n if (usage & BufferUsage.INDEX) {\n return GL.ELEMENT_ARRAY_BUFFER;\n }\n else if (usage & BufferUsage.VERTEX) {\n return GL.ARRAY_BUFFER;\n }\n else if (usage & BufferUsage.UNIFORM) {\n return GL.UNIFORM_BUFFER;\n }\n}\nfunction translatePrimitiveTopology(topology) {\n switch (topology) {\n case PrimitiveTopology.TRIANGLES:\n return GL.TRIANGLES;\n case PrimitiveTopology.POINTS:\n return GL.POINTS;\n case PrimitiveTopology.TRIANGLE_STRIP:\n return GL.TRIANGLE_STRIP;\n case PrimitiveTopology.LINES:\n return GL.LINES;\n case PrimitiveTopology.LINE_STRIP:\n return GL.LINE_STRIP;\n default:\n throw new Error('Unknown primitive topology mode');\n }\n}\nfunction translateType(flags) {\n switch (flags) {\n case FormatTypeFlags.U8:\n return GL.UNSIGNED_BYTE;\n case FormatTypeFlags.U16:\n return GL.UNSIGNED_SHORT;\n case FormatTypeFlags.U32:\n return GL.UNSIGNED_INT;\n case FormatTypeFlags.S8:\n return GL.BYTE;\n case FormatTypeFlags.S16:\n return GL.SHORT;\n case FormatTypeFlags.S32:\n return GL.INT;\n case FormatTypeFlags.F16:\n return GL.HALF_FLOAT;\n case FormatTypeFlags.F32:\n return GL.FLOAT;\n default:\n throw new Error('whoops');\n }\n}\nfunction translateSize(flags) {\n switch (flags) {\n case FormatCompFlags.R:\n return 1;\n case FormatCompFlags.RG:\n return 2;\n case FormatCompFlags.RGB:\n return 3;\n case FormatCompFlags.RGBA:\n return 4;\n default:\n return 1;\n }\n}\nfunction translateVertexFormat$1(fmt) {\n var typeFlags = getFormatTypeFlags(fmt);\n var compFlags = getFormatCompFlags(fmt);\n var flags = getFormatFlags(fmt);\n var type = translateType(typeFlags);\n var size = translateSize(compFlags);\n var normalized = !!(flags & FormatFlags.Normalized);\n return { size: size, type: type, normalized: normalized };\n}\nfunction translateIndexFormat$1(format) {\n switch (format) {\n case Format.U8_R:\n return GL.UNSIGNED_BYTE;\n case Format.U16_R:\n return GL.UNSIGNED_SHORT;\n case Format.U32_R:\n return GL.UNSIGNED_INT;\n default:\n throw new Error('whoops');\n }\n}\nfunction translateAddressMode$1(wrapMode) {\n switch (wrapMode) {\n case AddressMode.CLAMP_TO_EDGE:\n return GL.CLAMP_TO_EDGE;\n case AddressMode.REPEAT:\n return GL.REPEAT;\n case AddressMode.MIRRORED_REPEAT:\n return GL.MIRRORED_REPEAT;\n default:\n throw new Error('whoops');\n }\n}\nfunction translateFilterMode(filter, mipmapFilter) {\n if (mipmapFilter === MipmapFilterMode.LINEAR &&\n filter === FilterMode.BILINEAR) {\n return GL.LINEAR_MIPMAP_LINEAR;\n }\n if (mipmapFilter === MipmapFilterMode.LINEAR && filter === FilterMode.POINT) {\n return GL.NEAREST_MIPMAP_LINEAR;\n }\n if (mipmapFilter === MipmapFilterMode.NEAREST &&\n filter === FilterMode.BILINEAR) {\n return GL.LINEAR_MIPMAP_NEAREST;\n }\n if (mipmapFilter === MipmapFilterMode.NEAREST &&\n filter === FilterMode.POINT) {\n return GL.NEAREST_MIPMAP_NEAREST;\n }\n if (mipmapFilter === MipmapFilterMode.NO_MIP &&\n filter === FilterMode.BILINEAR) {\n return GL.LINEAR;\n }\n if (mipmapFilter === MipmapFilterMode.NO_MIP && filter === FilterMode.POINT) {\n return GL.NEAREST;\n }\n throw new Error('Unknown texture filter mode');\n}\nfunction getPlatformBuffer$1(buffer_, byteOffset) {\n if (byteOffset === void 0) { byteOffset = 0; }\n var buffer = buffer_;\n return buffer.gl_buffer_pages[(byteOffset / buffer.pageByteSize) | 0];\n}\nfunction getPlatformTexture(texture_) {\n var texture = texture_;\n return texture.gl_texture;\n}\nfunction getPlatformSampler$1(sampler_) {\n var sampler = sampler_;\n return sampler.gl_sampler;\n}\n// eslint-disable-next-line\nfunction assignPlatformName(o, name) {\n o.name = name;\n o.__SPECTOR_Metadata = { name: name };\n}\nfunction findall(haystack, needle) {\n var results = [];\n while (true) {\n var result = needle.exec(haystack);\n if (!result)\n break;\n results.push(result);\n }\n return results;\n}\nfunction isBlendStateNone(blendState) {\n return (blendState.blendMode == BlendMode.ADD &&\n blendState.blendSrcFactor == BlendFactor.ONE &&\n blendState.blendDstFactor === BlendFactor.ZERO);\n}\nfunction translateQueryPoolType$1(type) {\n switch (type) {\n case QueryPoolType.OcclusionConservative:\n return GL.ANY_SAMPLES_PASSED_CONSERVATIVE;\n default:\n throw new Error('whoops');\n }\n}\nfunction translateTextureDimension$1(dimension) {\n if (dimension === TextureDimension.TEXTURE_2D)\n return GL.TEXTURE_2D;\n else if (dimension === TextureDimension.TEXTURE_2D_ARRAY)\n return GL.TEXTURE_2D_ARRAY;\n else if (dimension === TextureDimension.TEXTURE_CUBE_MAP)\n return GL.TEXTURE_CUBE_MAP;\n else if (dimension === TextureDimension.TEXTURE_3D)\n return GL.TEXTURE_3D;\n else\n throw new Error('whoops');\n}\nfunction isBlockCompressSized(w, h, bw, bh) {\n if (w % bw !== 0)\n return false;\n if (h % bh !== 0)\n return false;\n return true;\n}\n\nvar Buffer_GL = /** @class */ (function (_super) {\n __extends(Buffer_GL, _super);\n function Buffer_GL(_a) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.Buffer;\n var viewOrSize = descriptor.viewOrSize, usage = descriptor.usage, _b = descriptor.hint, hint = _b === void 0 ? BufferFrequencyHint.STATIC : _b;\n var uniformBufferMaxPageByteSize = device.uniformBufferMaxPageByteSize, gl = device.gl;\n var isUBO = usage & BufferUsage.UNIFORM;\n if (!isUBO) {\n if (isWebGL2(gl)) {\n // Temporarily unbind VAO when creating buffers to not stomp on the VAO configuration.\n gl.bindVertexArray(null);\n }\n else {\n device.OES_vertex_array_object.bindVertexArrayOES(null);\n }\n }\n // const byteSize = isNumber(viewOrSize)\n // ? viewOrSize * 4\n // : viewOrSize.byteLength * 4;\n var byteSize = isNumber(viewOrSize)\n ? align(viewOrSize, 4)\n : align(viewOrSize.byteLength, 4);\n _this.gl_buffer_pages = [];\n var pageByteSize;\n if (isUBO) {\n // assert(byteSize % uniformBufferMaxPageByteSize === 0);\n var byteSizeLeft = byteSize;\n while (byteSizeLeft > 0) {\n _this.gl_buffer_pages.push(_this.createBufferPage(Math.min(byteSizeLeft, uniformBufferMaxPageByteSize), usage, hint));\n byteSizeLeft -= uniformBufferMaxPageByteSize;\n }\n pageByteSize = uniformBufferMaxPageByteSize;\n // TODO: uniform in WebGL1\n }\n else {\n _this.gl_buffer_pages.push(_this.createBufferPage(byteSize, usage, hint));\n pageByteSize = byteSize;\n }\n _this.pageByteSize = pageByteSize;\n _this.byteSize = byteSize;\n _this.usage = usage;\n _this.gl_target = translateBufferUsageToTarget(usage);\n // init data\n if (!isNumber(viewOrSize)) {\n _this.setSubData(0, new Uint8Array(viewOrSize.buffer));\n }\n if (!isUBO) {\n if (isWebGL2(gl)) {\n gl.bindVertexArray(_this.device['currentBoundVAO']);\n }\n else {\n device.OES_vertex_array_object.bindVertexArrayOES(_this.device['currentBoundVAO']);\n }\n }\n return _this;\n }\n Buffer_GL.prototype.setSubData = function (dstByteOffset, data, srcByteOffset, byteSize) {\n if (srcByteOffset === void 0) { srcByteOffset = 0; }\n if (byteSize === void 0) { byteSize = data.byteLength - srcByteOffset; }\n var gl = this.device.gl;\n var \n // gl_target,\n // byteSize: dstByteSize,\n dstPageByteSize = this.pageByteSize;\n // Account for setSubData being called with a dstByteOffset that is beyond the end of the buffer.\n // if (isWebGL2(gl) && gl_target === gl.UNIFORM_BUFFER) {\n // // Manually check asserts for speed.\n // if (!(dstByteOffset % dstPageByteSize === 0))\n // throw new Error(\n // `Assert fail: (dstByteOffset [${dstByteOffset}] % dstPageByteSize [${dstPageByteSize}]) === 0`,\n // );\n // if (!(byteSize % dstPageByteSize === 0))\n // throw new Error(\n // `Assert fail: (byteSize [${byteSize}] % dstPageByteSize [${dstPageByteSize}]) === 0`,\n // );\n // }\n // if (!(dstByteOffset + byteSize <= dstByteSize)) {\n // throw new Error(\n // `Assert fail: (dstByteOffset [${dstByteOffset}] + byteSize [${byteSize}]) <= dstByteSize [${dstByteSize}], gl_target ${gl_target}`,\n // );\n // // exceed, need to recreate\n // }\n var virtBufferByteOffsetEnd = dstByteOffset + byteSize;\n var virtBufferByteOffset = dstByteOffset;\n var physBufferByteOffset = dstByteOffset % dstPageByteSize;\n while (virtBufferByteOffset < virtBufferByteOffsetEnd) {\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bindBuffer#parameters\n var target = isWebGL2(gl) ? gl.COPY_WRITE_BUFFER : this.gl_target;\n var buffer = getPlatformBuffer$1(this, virtBufferByteOffset);\n // @ts-ignore\n if (buffer.ubo) {\n return;\n }\n gl.bindBuffer(target, buffer);\n // only WebGL2 support srcOffset & length\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bufferSubData\n if (isWebGL2(gl)) {\n gl.bufferSubData(target, physBufferByteOffset, data, srcByteOffset, Math.min(virtBufferByteOffsetEnd - virtBufferByteOffset, dstPageByteSize));\n }\n else {\n gl.bufferSubData(target, physBufferByteOffset, data);\n }\n virtBufferByteOffset += dstPageByteSize;\n physBufferByteOffset = 0;\n srcByteOffset += dstPageByteSize;\n this.device['debugGroupStatisticsBufferUpload']();\n }\n };\n Buffer_GL.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n for (var i = 0; i < this.gl_buffer_pages.length; i++) {\n // no ubo in WebGL1\n // @ts-ignore\n if (!this.gl_buffer_pages[i].ubo) {\n this.device.gl.deleteBuffer(this.gl_buffer_pages[i]);\n }\n }\n this.gl_buffer_pages = [];\n };\n Buffer_GL.prototype.createBufferPage = function (byteSize, usage, hint) {\n var gl = this.device.gl;\n var isUBO = usage & BufferUsage.UNIFORM;\n if (!isWebGL2(gl) && isUBO) {\n return {\n ubo: true,\n };\n }\n else {\n var gl_buffer = this.device.ensureResourceExists(gl.createBuffer());\n var gl_target = translateBufferUsageToTarget(usage);\n var gl_hint = translateBufferHint(hint);\n gl.bindBuffer(gl_target, gl_buffer);\n gl.bufferData(gl_target, byteSize, gl_hint);\n return gl_buffer;\n }\n };\n return Buffer_GL;\n}(ResourceBase_GL));\n\nvar InputLayout_GL = /** @class */ (function (_super) {\n __extends(InputLayout_GL, _super);\n function InputLayout_GL(_a) {\n var e_1, _b, e_2, _c;\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _d;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.InputLayout;\n var vertexBufferDescriptors = descriptor.vertexBufferDescriptors, indexBufferFormat = descriptor.indexBufferFormat, program = descriptor.program;\n assert(indexBufferFormat === Format.U16_R ||\n indexBufferFormat === Format.U32_R ||\n indexBufferFormat === null);\n var indexBufferType = indexBufferFormat !== null\n ? translateIndexFormat$1(indexBufferFormat)\n : null;\n var indexBufferCompByteSize = indexBufferFormat !== null\n ? getFormatCompByteSize(indexBufferFormat)\n : null;\n var gl = _this.device.gl;\n var vao = _this.device.ensureResourceExists(isWebGL2(gl)\n ? gl.createVertexArray()\n : device.OES_vertex_array_object.createVertexArrayOES());\n if (isWebGL2(gl)) {\n gl.bindVertexArray(vao);\n }\n else {\n device.OES_vertex_array_object.bindVertexArrayOES(vao);\n }\n gl.bindBuffer(gl.ARRAY_BUFFER, getPlatformBuffer$1(_this.device['fallbackVertexBuffer']));\n try {\n // const vertexBufferFormats = [];\n for (var _e = __values(descriptor.vertexBufferDescriptors), _f = _e.next(); !_f.done; _f = _e.next()) {\n var vertexBufferDescriptor = _f.value;\n var stepMode = vertexBufferDescriptor.stepMode, attributes = vertexBufferDescriptor.attributes;\n try {\n for (var attributes_1 = (e_2 = void 0, __values(attributes)), attributes_1_1 = attributes_1.next(); !attributes_1_1.done; attributes_1_1 = attributes_1.next()) {\n var attribute = attributes_1_1.value;\n var shaderLocation = attribute.shaderLocation, format = attribute.format, _g = attribute.divisor, divisor = _g === void 0 ? 1 : _g;\n // find location by name in WebGL1\n var location_1 = isWebGL2(gl)\n ? shaderLocation\n : (_d = program.attributes[shaderLocation]) === null || _d === void 0 ? void 0 : _d.location;\n var vertexFormat = translateVertexFormat$1(format);\n // @ts-ignore\n attribute.vertexFormat = vertexFormat;\n if (!isNil(location_1)) {\n if (isFormatSizedInteger(format)) {\n // See https://groups.google.com/d/msg/angleproject/yQb5DaCzcWg/Ova0E3wcAQAJ for more info.\n // console.warn(\"Vertex format uses sized integer types; this will cause a shader recompile on ANGLE platforms\");\n // debugger;\n }\n var size = vertexFormat.size, type = vertexFormat.type, normalized = vertexFormat.normalized;\n gl.vertexAttribPointer(location_1, size, type, normalized, 0, 0);\n if (stepMode === VertexStepMode.INSTANCE) {\n if (isWebGL2(gl)) {\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/vertexAttribDivisor\n gl.vertexAttribDivisor(location_1, divisor);\n }\n else {\n device.ANGLE_instanced_arrays.vertexAttribDivisorANGLE(location_1, divisor);\n }\n }\n gl.enableVertexAttribArray(location_1);\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (attributes_1_1 && !attributes_1_1.done && (_c = attributes_1.return)) _c.call(attributes_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (isWebGL2(gl)) {\n gl.bindVertexArray(null);\n }\n else {\n device.OES_vertex_array_object.bindVertexArrayOES(null);\n }\n _this.vertexBufferDescriptors = vertexBufferDescriptors;\n _this.vao = vao;\n _this.indexBufferFormat = indexBufferFormat;\n _this.indexBufferType = indexBufferType;\n _this.indexBufferCompByteSize = indexBufferCompByteSize;\n _this.program = program;\n return _this;\n }\n InputLayout_GL.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.device['currentBoundVAO'] === this.vao) {\n if (isWebGL2(this.device.gl)) {\n this.device.gl.bindVertexArray(null);\n this.device.gl.deleteVertexArray(this.vao);\n }\n else {\n this.device.OES_vertex_array_object.bindVertexArrayOES(null);\n this.device.OES_vertex_array_object.deleteVertexArrayOES(this.vao);\n }\n this.device['currentBoundVAO'] = null;\n }\n };\n return InputLayout_GL;\n}(ResourceBase_GL));\n\nvar Texture_GL = /** @class */ (function (_super) {\n __extends(Texture_GL, _super);\n function Texture_GL(_a) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor, fake = _a.fake;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.Texture;\n // Default values.\n descriptor = __assign({ dimension: TextureDimension.TEXTURE_2D, depthOrArrayLayers: 1, mipLevelCount: 1 }, descriptor);\n var gl = _this.device.gl;\n var gl_target;\n var gl_texture;\n var mipLevelCount = _this.clampmipLevelCount(descriptor);\n _this.immutable = descriptor.usage === TextureUsage.RENDER_TARGET;\n _this.pixelStore = descriptor.pixelStore;\n _this.format = descriptor.format;\n _this.dimension = descriptor.dimension;\n _this.formatKind = getFormatSamplerKind(descriptor.format);\n _this.width = descriptor.width;\n _this.height = descriptor.height;\n _this.depthOrArrayLayers = descriptor.depthOrArrayLayers;\n _this.mipmaps = mipLevelCount >= 1;\n if (!fake) {\n gl_texture = _this.device.ensureResourceExists(gl.createTexture());\n var gl_type = _this.device.translateTextureType(descriptor.format);\n var internalformat = _this.device.translateTextureInternalFormat(descriptor.format);\n _this.device.setActiveTexture(gl.TEXTURE0);\n _this.device['currentTextures'][0] = null;\n _this.preprocessImage();\n if (descriptor.dimension === TextureDimension.TEXTURE_2D) {\n gl_target = GL.TEXTURE_2D;\n gl.bindTexture(gl_target, gl_texture);\n if (_this.immutable) {\n if (isWebGL2(gl)) {\n // texStorage2D will create an immutable texture(fixed size)\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/texStorage2D\n // @see https://github.com/visgl/luma.gl/issues/193\n // @see https://github.com/WebGLSamples/WebGL2Samples/blob/master/samples/texture_immutable.html\n gl.texStorage2D(gl_target, mipLevelCount, internalformat, descriptor.width, descriptor.height);\n }\n else {\n // texImage2D: level must be 0 for DEPTH_COMPONENT format\n // const level = internalformat === GL.DEPTH_COMPONENT || this.isNPOT() ? 0 : mipLevelCount;\n var level = internalformat === GL.DEPTH_COMPONENT || _this.isNPOT() ? 0 : 0;\n if ((_this.format === Format.D32F || _this.format === Format.D24_S8) &&\n !isWebGL2(gl) &&\n !device.WEBGL_depth_texture) ;\n else {\n // if (!isWebGL2(gl)) {\n // if (internalformat === GL.RGBA4) {\n // internalformat = GL.RGBA;\n // }\n // }\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texImage2D\n gl.texImage2D(gl_target, level, internalformat, descriptor.width, descriptor.height, 0, internalformat, gl_type, null);\n // @see https://stackoverflow.com/questions/21954036/dartweb-gl-render-warning-texture-bound-to-texture-unit-0-is-not-renderable\n // [.WebGL-0x106ad0400]RENDER WARNING: texture bound to texture unit 0 is not renderable. It might be non-power-of-2 or have incompatible texture filtering (maybe)?\n if (_this.mipmaps) {\n _this.mipmaps = false;\n gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.LINEAR);\n gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_WRAP_S, GL.CLAMP_TO_EDGE);\n gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_WRAP_T, GL.CLAMP_TO_EDGE);\n }\n }\n }\n }\n assert(descriptor.depthOrArrayLayers === 1);\n }\n else if (descriptor.dimension === TextureDimension.TEXTURE_2D_ARRAY) {\n gl_target = GL.TEXTURE_2D_ARRAY;\n gl.bindTexture(gl_target, gl_texture);\n if (_this.immutable) {\n if (isWebGL2(gl)) {\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/texStorage3D\n gl.texStorage3D(gl_target, mipLevelCount, internalformat, descriptor.width, descriptor.height, descriptor.depthOrArrayLayers);\n }\n }\n }\n else if (descriptor.dimension === TextureDimension.TEXTURE_3D) {\n gl_target = GL.TEXTURE_3D;\n gl.bindTexture(gl_target, gl_texture);\n if (_this.immutable) {\n if (isWebGL2(gl)) {\n gl.texStorage3D(gl_target, mipLevelCount, internalformat, descriptor.width, descriptor.height, descriptor.depthOrArrayLayers);\n }\n }\n }\n else if (descriptor.dimension === TextureDimension.TEXTURE_CUBE_MAP) {\n gl_target = GL.TEXTURE_CUBE_MAP;\n gl.bindTexture(gl_target, gl_texture);\n if (_this.immutable) {\n if (isWebGL2(gl)) {\n gl.texStorage2D(gl_target, mipLevelCount, internalformat, descriptor.width, descriptor.height);\n }\n }\n assert(descriptor.depthOrArrayLayers === 6);\n }\n else {\n throw new Error('whoops');\n }\n }\n _this.gl_texture = gl_texture;\n _this.gl_target = gl_target;\n _this.mipLevelCount = mipLevelCount;\n return _this;\n }\n Texture_GL.prototype.setImageData = function (levelDatas, lod) {\n if (lod === void 0) { lod = 0; }\n var gl = this.device.gl;\n isTextureFormatCompressed(this.format);\n // @see https://github.com/shrekshao/MoveWebGL1EngineToWebGL2/blob/master/Move-a-WebGL-1-Engine-To-WebGL-2-Blog-2.md#3d-texture\n var is3D = this.gl_target === GL.TEXTURE_3D ||\n this.gl_target === GL.TEXTURE_2D_ARRAY;\n var isCube = this.gl_target === GL.TEXTURE_CUBE_MAP;\n var isTA = isTypedArray(levelDatas[0]);\n this.device.setActiveTexture(gl.TEXTURE0);\n this.device['currentTextures'][0] = null;\n var data = levelDatas[0];\n var width;\n var height;\n if (isTA) {\n width = this.width;\n height = this.height;\n }\n else {\n // FIXME: Property 'width' does not exist on type 'TexImageSource'.\n // Property 'width' does not exist on type 'VideoFrame'.\n // @ts-ignore\n width = data.width;\n // @ts-ignore\n height = data.height;\n // update size\n this.width = width;\n this.height = height;\n }\n gl.bindTexture(this.gl_target, this.gl_texture);\n var gl_format = this.device.translateTextureFormat(this.format);\n // In WebGL 1, this must be the same as internalformat\n var gl_internal_format = isWebGL2(gl)\n ? this.device.translateInternalTextureFormat(this.format)\n : gl_format;\n var gl_type = this.device.translateTextureType(this.format);\n this.preprocessImage();\n for (var z = 0; z < this.depthOrArrayLayers; z++) {\n var levelData = levelDatas[z];\n var gl_target = this.gl_target;\n if (isCube) {\n gl_target = GL.TEXTURE_CUBE_MAP_POSITIVE_X + (z % 6);\n }\n if (this.immutable) {\n // must use texSubImage2D instead of texImage2D, since texture is immutable\n // @see https://stackoverflow.com/questions/56123201/unity-plugin-texture-is-immutable?rq=1\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texSubImage2D\n gl.texSubImage2D(gl_target, lod, 0, 0, width, height, gl_format, gl_type, levelData);\n }\n else {\n if (isWebGL2(gl)) {\n if (is3D) {\n gl.texImage3D(gl_target, lod, gl_internal_format, width, height, this.depthOrArrayLayers, 0, // border must be 0\n gl_format, // TODO: can be different with gl_format\n gl_type, levelData);\n }\n else {\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texImage2D\n gl.texImage2D(gl_target, lod, gl_internal_format, width, height, 0, // border must be 0\n gl_format, // TODO: can be different with gl_format\n gl_type, levelData);\n }\n }\n else {\n // WebGL1: upload Array & Image separately\n if (isTA) {\n gl.texImage2D(gl_target, lod, gl_format, width, height, 0, gl_format, gl_type, levelData);\n }\n else {\n gl.texImage2D(gl_target, lod, gl_format, gl_format, gl_type, levelData);\n }\n }\n }\n }\n if (this.mipmaps) {\n this.generateMipmap(is3D);\n }\n };\n Texture_GL.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.device.gl.deleteTexture(getPlatformTexture(this));\n };\n Texture_GL.prototype.clampmipLevelCount = function (descriptor) {\n if (descriptor.dimension === TextureDimension.TEXTURE_2D_ARRAY &&\n descriptor.depthOrArrayLayers > 1) {\n var typeFlags = getFormatTypeFlags(descriptor.format);\n if (typeFlags === FormatTypeFlags.BC1) {\n // Chrome/ANGLE seems to have issues with compressed miplevels of size 1/2, so clamp before they arrive...\n // https://bugs.chromium.org/p/angleproject/issues/detail?id=4056\n var w = descriptor.width, h = descriptor.height;\n for (var i = 0; i < descriptor.mipLevelCount; i++) {\n if (w <= 2 || h <= 2)\n return i - 1;\n w = Math.max((w / 2) | 0, 1);\n h = Math.max((h / 2) | 0, 1);\n }\n }\n }\n return descriptor.mipLevelCount;\n };\n Texture_GL.prototype.preprocessImage = function () {\n var gl = this.device.gl;\n if (this.pixelStore) {\n if (this.pixelStore.unpackFlipY) {\n gl.pixelStorei(GL.UNPACK_FLIP_Y_WEBGL, true);\n }\n if (this.pixelStore.packAlignment) {\n gl.pixelStorei(GL.PACK_ALIGNMENT, this.pixelStore.packAlignment);\n }\n if (this.pixelStore.unpackAlignment) {\n gl.pixelStorei(GL.UNPACK_ALIGNMENT, this.pixelStore.unpackAlignment);\n }\n }\n };\n Texture_GL.prototype.generateMipmap = function (is3D) {\n if (is3D === void 0) { is3D = false; }\n var gl = this.device.gl;\n if (!isWebGL2(gl) && this.isNPOT()) {\n return this;\n }\n if (this.gl_texture && this.gl_target) {\n gl.bindTexture(this.gl_target, this.gl_texture);\n if (is3D) {\n gl.texParameteri(this.gl_target, GL.TEXTURE_BASE_LEVEL, 0);\n gl.texParameteri(this.gl_target, GL.TEXTURE_MAX_LEVEL, Math.log2(this.width));\n gl.texParameteri(this.gl_target, GL.TEXTURE_MIN_FILTER, GL.LINEAR_MIPMAP_LINEAR);\n gl.texParameteri(this.gl_target, GL.TEXTURE_MAG_FILTER, GL.LINEAR);\n }\n else {\n gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.NEAREST_MIPMAP_LINEAR);\n }\n gl.generateMipmap(this.gl_target);\n gl.bindTexture(this.gl_target, null);\n }\n return this;\n };\n Texture_GL.prototype.isNPOT = function () {\n var gl = this.device.gl;\n if (isWebGL2(gl)) {\n // NPOT restriction is only for WebGL1\n return false;\n }\n return !isPowerOfTwo(this.width) || !isPowerOfTwo(this.height);\n };\n return Texture_GL;\n}(ResourceBase_GL));\n\nvar RenderTarget_GL = /** @class */ (function (_super) {\n __extends(RenderTarget_GL, _super);\n function RenderTarget_GL(_a) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.RenderTarget;\n _this.gl_renderbuffer = null;\n _this.texture = null;\n var gl = _this.device.gl;\n var format = descriptor.format, width = descriptor.width, height = descriptor.height, _b = descriptor.sampleCount, sampleCount = _b === void 0 ? 1 : _b, texture = descriptor.texture;\n var useRenderbuffer = false;\n // @see https://blog.tojicode.com/2012/07/using-webgldepthtexture.html\n if ((format === Format.D32F || format === Format.D24_S8) &&\n texture &&\n !isWebGL2(gl) &&\n !device.WEBGL_depth_texture) {\n texture.destroy();\n _this.texture = null;\n useRenderbuffer = true;\n }\n if (!useRenderbuffer && texture) {\n _this.texture = texture;\n }\n else {\n _this.gl_renderbuffer = _this.device.ensureResourceExists(gl.createRenderbuffer());\n gl.bindRenderbuffer(gl.RENDERBUFFER, _this.gl_renderbuffer);\n var gl_format = _this.device.translateTextureInternalFormat(format, true);\n if (isWebGL2(gl)) {\n if (sampleCount > 1) {\n // @see https://github.com/shrekshao/MoveWebGL1EngineToWebGL2/blob/master/Move-a-WebGL-1-Engine-To-WebGL-2-Blog-2.md#multisampled-renderbuffers\n gl.renderbufferStorageMultisample(GL.RENDERBUFFER, sampleCount, gl_format, width, height);\n }\n else {\n gl.renderbufferStorage(GL.RENDERBUFFER, gl_format, width, height);\n }\n }\n else {\n // WebGL1 can only use FXAA or other post-processing methods\n gl.renderbufferStorage(GL.RENDERBUFFER, gl_format, width, height);\n }\n }\n _this.format = format;\n _this.width = width;\n _this.height = height;\n _this.sampleCount = sampleCount;\n return _this;\n }\n RenderTarget_GL.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.gl_renderbuffer !== null) {\n this.device.gl.deleteRenderbuffer(this.gl_renderbuffer);\n }\n if (this.texture) {\n this.texture.destroy();\n }\n };\n return RenderTarget_GL;\n}(ResourceBase_GL));\n\n// const quadVert = `\n// layout(location = 0) in vec2 a_Position;\n// out vec2 v_TexCoord;\n// void main() {\n// v_TexCoord = 0.5 * (a_Position + 1.0);\n// gl_Position = vec4(a_Position, 0., 1.);\n// #ifdef VIEWPORT_ORIGIN_TL\n// v_TexCoord.y = 1.0 - v_TexCoord.y;\n// #endif\n// }\n// `;\nvar ProgramCompileState_GL;\n(function (ProgramCompileState_GL) {\n ProgramCompileState_GL[ProgramCompileState_GL[\"NeedsCompile\"] = 0] = \"NeedsCompile\";\n ProgramCompileState_GL[ProgramCompileState_GL[\"Compiling\"] = 1] = \"Compiling\";\n ProgramCompileState_GL[ProgramCompileState_GL[\"NeedsBind\"] = 2] = \"NeedsBind\";\n ProgramCompileState_GL[ProgramCompileState_GL[\"ReadyToUse\"] = 3] = \"ReadyToUse\";\n})(ProgramCompileState_GL || (ProgramCompileState_GL = {}));\nvar Program_GL = /** @class */ (function (_super) {\n __extends(Program_GL, _super);\n function Program_GL(_a, rawVertexGLSL) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.rawVertexGLSL = rawVertexGLSL;\n _this.type = ResourceType.Program;\n // eslint-disable-next-line\n _this.uniformSetters = {};\n _this.attributes = [];\n var gl = _this.device.gl;\n _this.descriptor = descriptor;\n _this.gl_program = _this.device.ensureResourceExists(gl.createProgram());\n _this.gl_shader_vert = null;\n _this.gl_shader_frag = null;\n _this.compileState = ProgramCompileState_GL.NeedsCompile;\n _this.tryCompileProgram();\n return _this;\n }\n Program_GL.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.device.gl.deleteProgram(this.gl_program);\n this.device.gl.deleteShader(this.gl_shader_vert);\n this.device.gl.deleteShader(this.gl_shader_frag);\n };\n Program_GL.prototype.tryCompileProgram = function () {\n assert(this.compileState === ProgramCompileState_GL.NeedsCompile);\n var _a = this.descriptor, vertex = _a.vertex, fragment = _a.fragment;\n var gl = this.device.gl;\n // if (this.gl_shader_vert !== null) gl.deleteShader(this.gl_shader_vert);\n // if (this.gl_shader_frag !== null) gl.deleteShader(this.gl_shader_frag);\n if ((vertex === null || vertex === void 0 ? void 0 : vertex.glsl) && (fragment === null || fragment === void 0 ? void 0 : fragment.glsl)) {\n this.gl_shader_vert = this.compileShader(vertex.postprocess ? vertex.postprocess(vertex.glsl) : vertex.glsl, gl.VERTEX_SHADER);\n this.gl_shader_frag = this.compileShader(fragment.postprocess\n ? fragment.postprocess(fragment.glsl)\n : fragment.glsl, gl.FRAGMENT_SHADER);\n gl.attachShader(this.gl_program, this.gl_shader_vert);\n gl.attachShader(this.gl_program, this.gl_shader_frag);\n gl.linkProgram(this.gl_program);\n this.compileState = ProgramCompileState_GL.Compiling;\n if (!isWebGL2(gl)) {\n // extract uniforms\n this.readUniformLocationsFromLinkedProgram();\n // extract attributes\n this.readAttributesFromLinkedProgram();\n }\n }\n };\n Program_GL.prototype.readAttributesFromLinkedProgram = function () {\n var _a;\n var gl = this.device.gl;\n var count = gl.getProgramParameter(this.gl_program, gl.ACTIVE_ATTRIBUTES);\n var defines = getDefines(this.descriptor.vertex.glsl);\n var locations = getAttributeLocations(\n // Use raw GLSL\n this.rawVertexGLSL, defines);\n var _loop_1 = function (index) {\n var _b = gl.getActiveAttrib(this_1.gl_program, index), name_1 = _b.name, type = _b.type, size = _b.size;\n var location_1 = gl.getAttribLocation(this_1.gl_program, name_1);\n var definedLocation = (_a = locations.find(function (l) { return l.name === name_1; })) === null || _a === void 0 ? void 0 : _a.location;\n // Add only user provided attributes, for built-in attributes like\n // `gl_InstanceID` locaiton will be < 0\n if (location_1 >= 0 && !isNil(definedLocation)) {\n this_1.attributes[definedLocation] = {\n name: name_1,\n location: location_1,\n type: type,\n size: size,\n };\n }\n };\n var this_1 = this;\n for (var index = 0; index < count; index++) {\n _loop_1(index);\n }\n };\n Program_GL.prototype.readUniformLocationsFromLinkedProgram = function () {\n var gl = this.device.gl;\n var numUniforms = gl.getProgramParameter(this.gl_program, gl.ACTIVE_UNIFORMS);\n for (var i = 0; i < numUniforms; i++) {\n var info = gl.getActiveUniform(this.gl_program, i);\n var name_2 = parseUniformName(info.name).name;\n var location_2 = gl.getUniformLocation(this.gl_program, name_2);\n this.uniformSetters[name_2] = getUniformSetter(gl, location_2, info);\n if (info && info.size > 1) {\n for (var l = 0; l < info.size; l++) {\n location_2 = gl.getUniformLocation(this.gl_program, \"\".concat(name_2, \"[\").concat(l, \"]\"));\n this.uniformSetters[\"\".concat(name_2, \"[\").concat(l, \"]\")] = getUniformSetter(gl, location_2, info);\n }\n }\n }\n };\n Program_GL.prototype.compileShader = function (contents, type) {\n var gl = this.device.gl;\n var shader = this.device.ensureResourceExists(gl.createShader(type));\n gl.shaderSource(shader, contents);\n gl.compileShader(shader);\n return shader;\n };\n // eslint-disable-next-line\n Program_GL.prototype.setUniformsLegacy = function (uniforms) {\n if (uniforms === void 0) { uniforms = {}; }\n var gl = this.device.gl;\n if (!isWebGL2(gl)) {\n var programUsed = false;\n for (var uniformName in uniforms) {\n if (!programUsed) {\n gl.useProgram(this.gl_program);\n programUsed = true;\n }\n var uniform = uniforms[uniformName];\n var uniformSetter = this.uniformSetters[uniformName];\n if (uniformSetter) {\n var value = uniform;\n if (value instanceof Texture_GL) {\n value = value.textureIndex;\n }\n uniformSetter(value);\n }\n }\n }\n return this;\n };\n return Program_GL;\n}(ResourceBase_GL));\n\nvar QueryPool_GL = /** @class */ (function (_super) {\n __extends(QueryPool_GL, _super);\n function QueryPool_GL(_a) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.QueryPool;\n var gl = _this.device.gl;\n if (isWebGL2(gl)) {\n var elemCount = descriptor.elemCount, type = descriptor.type;\n _this.gl_query = nArray(elemCount, function () {\n return _this.device.ensureResourceExists(gl.createQuery());\n });\n _this.gl_query_type = translateQueryPoolType$1(type);\n }\n return _this;\n }\n QueryPool_GL.prototype.queryResultOcclusion = function (dstOffs) {\n var gl = this.device.gl;\n if (isWebGL2(gl)) {\n var gl_query = this.gl_query[dstOffs];\n if (!gl.getQueryParameter(gl_query, gl.QUERY_RESULT_AVAILABLE)) {\n return null;\n }\n return !!gl.getQueryParameter(gl_query, gl.QUERY_RESULT);\n }\n return null;\n };\n QueryPool_GL.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n var gl = this.device.gl;\n if (isWebGL2(gl)) {\n for (var i = 0; i < this.gl_query.length; i++) {\n gl.deleteQuery(this.gl_query[i]);\n }\n }\n };\n return QueryPool_GL;\n}(ResourceBase_GL));\n\nvar Readback_GL = /** @class */ (function (_super) {\n __extends(Readback_GL, _super);\n function Readback_GL(_a) {\n var id = _a.id, device = _a.device;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.Readback;\n _this.gl_pbo = null;\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLSync\n _this.gl_sync = null;\n return _this;\n }\n Readback_GL.prototype.clientWaitAsync = function (sync, flags, interval_ms) {\n if (flags === void 0) { flags = 0; }\n if (interval_ms === void 0) { interval_ms = 10; }\n var gl = this.device.gl;\n return new Promise(function (resolve, reject) {\n function test() {\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/clientWaitSync\n var res = gl.clientWaitSync(sync, flags, 0);\n if (res == gl.WAIT_FAILED) {\n reject();\n return;\n }\n if (res == gl.TIMEOUT_EXPIRED) {\n setTimeout(test, clamp(interval_ms, 0, gl.MAX_CLIENT_WAIT_TIMEOUT_WEBGL));\n return;\n }\n resolve();\n }\n test();\n });\n };\n Readback_GL.prototype.getBufferSubDataAsync = function (target, buffer, srcByteOffset, dstBuffer, dstOffset, length) {\n return __awaiter(this, void 0, void 0, function () {\n var gl;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n gl = this.device.gl;\n if (!isWebGL2(gl)) return [3 /*break*/, 2];\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/fenceSync\n this.gl_sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0);\n gl.flush();\n return [4 /*yield*/, this.clientWaitAsync(this.gl_sync, 0, 10)];\n case 1:\n _a.sent();\n gl.bindBuffer(target, buffer);\n gl.getBufferSubData(target, srcByteOffset, dstBuffer, dstOffset, length);\n gl.bindBuffer(target, null);\n return [2 /*return*/, dstBuffer];\n case 2: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#use_non-blocking_async_data_readback\n */\n Readback_GL.prototype.readTexture = function (t, x, y, width, height, dstBuffer, dstOffset, length) {\n if (dstOffset === void 0) { dstOffset = 0; }\n if (length === void 0) { length = dstBuffer.byteLength || 0; }\n return __awaiter(this, void 0, void 0, function () {\n var gl, texture, gl_format, gl_type, formatByteSize;\n return __generator(this, function (_a) {\n gl = this.device.gl;\n texture = t;\n gl_format = this.device.translateTextureFormat(texture.format);\n gl_type = this.device.translateTextureType(texture.format);\n formatByteSize = getFormatByteSize(texture.format);\n if (isWebGL2(gl)) {\n this.gl_pbo = this.device.ensureResourceExists(gl.createBuffer());\n // PIXEL_PACK_BUFFER: Buffer used for pixel transfer operations\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bindBuffer\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, this.gl_pbo);\n // STREAM_READ: The contents are intended to be specified once by reading data from WebGL, and queried at most a few times by the application\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bufferData\n gl.bufferData(gl.PIXEL_PACK_BUFFER, length, gl.STREAM_READ);\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null);\n gl.bindFramebuffer(GL.READ_FRAMEBUFFER, this.device['readbackFramebuffer']);\n gl.framebufferTexture2D(GL.READ_FRAMEBUFFER, GL.COLOR_ATTACHMENT0, GL.TEXTURE_2D, texture.gl_texture, 0);\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, this.gl_pbo);\n gl.readPixels(x, y, width, height, gl_format, gl_type, dstOffset * formatByteSize);\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null);\n return [2 /*return*/, this.getBufferSubDataAsync(gl.PIXEL_PACK_BUFFER, this.gl_pbo, 0, dstBuffer, dstOffset, 0)];\n }\n else {\n return [2 /*return*/, this.readTextureSync(t, x, y, width, height, dstBuffer, dstOffset, length)];\n }\n });\n });\n };\n Readback_GL.prototype.readTextureSync = function (t, x, y, width, height, dstBuffer, dstOffset, length) {\n if (length === void 0) { length = dstBuffer.byteLength || 0; }\n var gl = this.device.gl;\n var texture = t;\n var gl_type = this.device.translateTextureType(texture.format);\n gl.bindFramebuffer(GL.FRAMEBUFFER, this.device['readbackFramebuffer']);\n gl.framebufferTexture2D(GL.FRAMEBUFFER, GL.COLOR_ATTACHMENT0, GL.TEXTURE_2D, texture.gl_texture, 0);\n // slow requires roundtrip to GPU\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/pixelStorei\n gl.pixelStorei(gl.PACK_ALIGNMENT, 4);\n gl.readPixels(x, y, width, height, gl.RGBA, gl_type, dstBuffer);\n return dstBuffer;\n };\n Readback_GL.prototype.readBuffer = function (b, srcByteOffset, dstBuffer, dstOffset, length) {\n return __awaiter(this, void 0, void 0, function () {\n var gl;\n return __generator(this, function (_a) {\n gl = this.device.gl;\n if (isWebGL2(gl)) {\n return [2 /*return*/, this.getBufferSubDataAsync(gl.ARRAY_BUFFER, getPlatformBuffer$1(b, srcByteOffset), srcByteOffset, dstBuffer, dstOffset, length)];\n }\n // TODO: WebGL1\n return [2 /*return*/, Promise.reject()];\n });\n });\n };\n Readback_GL.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (isWebGL2(this.device.gl)) {\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/deleteSync\n if (this.gl_sync !== null) {\n this.device.gl.deleteSync(this.gl_sync);\n }\n if (this.gl_pbo !== null) {\n this.device.gl.deleteBuffer(this.gl_pbo);\n }\n }\n };\n return Readback_GL;\n}(ResourceBase_GL));\n\nvar RenderPipeline_GL = /** @class */ (function (_super) {\n __extends(RenderPipeline_GL, _super);\n function RenderPipeline_GL(_a) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _b, _c;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.RenderPipeline;\n _this.drawMode = translatePrimitiveTopology((_b = descriptor.topology) !== null && _b !== void 0 ? _b : PrimitiveTopology.TRIANGLES);\n _this.program = descriptor.program;\n _this.inputLayout = descriptor.inputLayout;\n _this.megaState = __assign(__assign({}, copyMegaState(defaultMegaState)), descriptor.megaStateDescriptor);\n _this.colorAttachmentFormats = descriptor.colorAttachmentFormats.slice();\n _this.depthStencilAttachmentFormat = descriptor.depthStencilAttachmentFormat;\n _this.sampleCount = (_c = descriptor.sampleCount) !== null && _c !== void 0 ? _c : 1;\n return _this;\n }\n return RenderPipeline_GL;\n}(ResourceBase_GL));\n\nvar ComputePipeline_GL = /** @class */ (function (_super) {\n __extends(ComputePipeline_GL, _super);\n function ComputePipeline_GL(_a) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.ComputePipeline;\n _this.descriptor = descriptor;\n return _this;\n // const program = descriptor.program as Program_GL;\n }\n return ComputePipeline_GL;\n}(ResourceBase_GL));\n\nvar ResourceCreationTracker = /** @class */ (function () {\n function ResourceCreationTracker() {\n this.liveObjects = new Set();\n this.creationStacks = new Map();\n this.deletionStacks = new Map();\n }\n ResourceCreationTracker.prototype.trackResourceCreated = function (o) {\n this.creationStacks.set(o, new Error().stack);\n this.liveObjects.add(o);\n };\n ResourceCreationTracker.prototype.trackResourceDestroyed = function (o) {\n if (this.deletionStacks.has(o))\n console.warn(\"Object double freed:\", o, \"\\n\\nCreation stack: \", this.creationStacks.get(o), \"\\n\\nDeletion stack: \", this.deletionStacks.get(o), \"\\n\\nThis stack: \", new Error().stack);\n this.deletionStacks.set(o, new Error().stack);\n this.liveObjects.delete(o);\n };\n ResourceCreationTracker.prototype.checkForLeaks = function () {\n var e_1, _a;\n try {\n for (var _b = __values(this.liveObjects.values()), _c = _b.next(); !_c.done; _c = _b.next()) {\n var o = _c.value;\n console.warn('Object leaked:', o, 'Creation stack:', this.creationStacks.get(o));\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n ResourceCreationTracker.prototype.setResourceLeakCheck = function (o, v) {\n if (v) {\n this.liveObjects.add(o);\n }\n else {\n this.liveObjects.delete(o);\n }\n };\n return ResourceCreationTracker;\n}());\n\n/**\n * In WebGL 1 texture image data and sampling information are both stored in texture objects\n * @see https://github.com/shrekshao/MoveWebGL1EngineToWebGL2/blob/master/Move-a-WebGL-1-Engine-To-WebGL-2-Blog-2.md#sampler-objects\n */\nvar Sampler_GL = /** @class */ (function (_super) {\n __extends(Sampler_GL, _super);\n function Sampler_GL(_a) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _b, _c;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.Sampler;\n var gl = _this.device.gl;\n if (isWebGL2(gl)) {\n var gl_sampler = _this.device.ensureResourceExists(gl.createSampler());\n gl.samplerParameteri(gl_sampler, GL.TEXTURE_WRAP_S, translateAddressMode$1(descriptor.addressModeU));\n gl.samplerParameteri(gl_sampler, GL.TEXTURE_WRAP_T, translateAddressMode$1(descriptor.addressModeV));\n gl.samplerParameteri(gl_sampler, GL.TEXTURE_WRAP_R, translateAddressMode$1((_b = descriptor.addressModeW) !== null && _b !== void 0 ? _b : descriptor.addressModeU));\n gl.samplerParameteri(gl_sampler, GL.TEXTURE_MIN_FILTER, translateFilterMode(descriptor.minFilter, descriptor.mipmapFilter));\n gl.samplerParameteri(gl_sampler, GL.TEXTURE_MAG_FILTER, translateFilterMode(descriptor.magFilter, MipmapFilterMode.NO_MIP));\n if (descriptor.lodMinClamp !== undefined) {\n gl.samplerParameterf(gl_sampler, GL.TEXTURE_MIN_LOD, descriptor.lodMinClamp);\n }\n if (descriptor.lodMaxClamp !== undefined) {\n gl.samplerParameterf(gl_sampler, GL.TEXTURE_MAX_LOD, descriptor.lodMaxClamp);\n }\n if (descriptor.compareFunction !== undefined) {\n gl.samplerParameteri(gl_sampler, gl.TEXTURE_COMPARE_MODE, gl.COMPARE_REF_TO_TEXTURE);\n gl.samplerParameteri(gl_sampler, gl.TEXTURE_COMPARE_FUNC, descriptor.compareFunction);\n }\n var maxAnisotropy = (_c = descriptor.maxAnisotropy) !== null && _c !== void 0 ? _c : 1;\n if (maxAnisotropy > 1 &&\n _this.device.EXT_texture_filter_anisotropic !== null) {\n assert(descriptor.minFilter === FilterMode.BILINEAR &&\n descriptor.magFilter === FilterMode.BILINEAR &&\n descriptor.mipmapFilter === MipmapFilterMode.LINEAR);\n gl.samplerParameterf(gl_sampler, _this.device.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT, maxAnisotropy);\n }\n _this.gl_sampler = gl_sampler;\n }\n else {\n // use later in WebGL1\n _this.descriptor = descriptor;\n }\n return _this;\n }\n Sampler_GL.prototype.setTextureParameters = function (gl_target, width, height) {\n var _a;\n var gl = this.device.gl;\n var descriptor = this.descriptor;\n // @see https://developer.mozilla.org/zh-CN/docs/Web/API/WebGL_API/Tutorial/Using_textures_in_WebGL#%E9%9D%9E2%E7%9A%84%E5%B9%82%E7%BA%B9%E7%90%86\n if (this.isNPOT(width, height)) {\n gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.LINEAR);\n }\n else {\n gl.texParameteri(gl_target, GL.TEXTURE_MIN_FILTER, translateFilterMode(descriptor.minFilter, descriptor.mipmapFilter));\n }\n gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_WRAP_S, translateAddressMode$1(descriptor.addressModeU));\n gl.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_WRAP_T, translateAddressMode$1(descriptor.addressModeV));\n gl.texParameteri(gl_target, GL.TEXTURE_MAG_FILTER, translateFilterMode(descriptor.magFilter, MipmapFilterMode.NO_MIP));\n // if (descriptor.lodMinClamp !== undefined) {\n // gl.texParameterf(gl_target, GL.TEXTURE_MIN_LOD, descriptor.lodMinClamp);\n // }\n // if (descriptor.lodMaxClamp !== undefined) {\n // gl.texParameterf(gl_target, GL.TEXTURE_MAX_LOD, descriptor.lodMaxClamp);\n // }\n var maxAnisotropy = (_a = descriptor.maxAnisotropy) !== null && _a !== void 0 ? _a : 1;\n if (maxAnisotropy > 1 &&\n this.device.EXT_texture_filter_anisotropic !== null) {\n assert(descriptor.minFilter === FilterMode.BILINEAR &&\n descriptor.magFilter === FilterMode.BILINEAR &&\n descriptor.mipmapFilter === MipmapFilterMode.LINEAR);\n gl.texParameteri(gl_target, this.device.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT, maxAnisotropy);\n }\n };\n Sampler_GL.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (isWebGL2(this.device.gl)) {\n this.device.gl.deleteSampler(getPlatformSampler$1(this));\n }\n };\n Sampler_GL.prototype.isNPOT = function (width, height) {\n return !isPowerOfTwo(width) || !isPowerOfTwo(height);\n };\n return Sampler_GL;\n}(ResourceBase_GL));\n\n// import { assert, assertExists } from '../api';\n// import type { ComputePipeline_GL } from './ComputePipeline';\nvar ComputePass_GL = /** @class */ (function () {\n function ComputePass_GL() {\n }\n /**\n * @see https://www.w3.org/TR/webgpu/#dom-gpucomputepassencoder-dispatch\n */\n ComputePass_GL.prototype.dispatchWorkgroups = function (workgroupCountX, workgroupCountY, workgroupCountZ) { };\n ComputePass_GL.prototype.dispatchWorkgroupsIndirect = function (indirectBuffer, indirectOffset) { };\n ComputePass_GL.prototype.setPipeline = function (pipeline_) {\n // const pipeline = pipeline_ as ComputePipeline_WebGPU;\n // const gpuComputePipeline = assertExists(pipeline.gpuComputePipeline);\n // this.gpuComputePassEncoder.setPipeline(gpuComputePipeline);\n };\n ComputePass_GL.prototype.setBindings = function (bindings_) {\n // const bindings = bindings_ as Bindings_WebGPU;\n // this.gpuComputePassEncoder.setBindGroup(bindingLayoutIndex, bindings.gpuBindGroup[0]);\n };\n ComputePass_GL.prototype.pushDebugGroup = function (name) { };\n ComputePass_GL.prototype.popDebugGroup = function () { };\n ComputePass_GL.prototype.insertDebugMarker = function (markerLabel) { };\n return ComputePass_GL;\n}());\n\nvar RenderBundle_GL = /** @class */ (function (_super) {\n __extends(RenderBundle_GL, _super);\n function RenderBundle_GL() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = ResourceType.RenderBundle;\n _this.commands = [];\n return _this;\n }\n RenderBundle_GL.prototype.push = function (f) {\n this.commands.push(f);\n };\n RenderBundle_GL.prototype.replay = function () {\n this.commands.forEach(function (f) { return f(); });\n };\n return RenderBundle_GL;\n}(ResourceBase_GL));\n\n// This is a workaround for ANGLE not supporting UBOs greater than 64kb (the limit of D3D).\n// https://bugs.chromium.org/p/angleproject/issues/detail?id=3388\nvar UBO_PAGE_MAX_BYTE_SIZE = 0x10000;\n/**\n * Extract uniform blocks from shader source.\n *\n * @example\n * ```glsl\n * layout(std140) uniform CommonUniforms {\n float u_blur;\n };\n * ```\n */\nvar UNIFROM_BLOCK_REGEXP = /uniform(?:\\s+)(\\w+)(?:\\s?){([^]*?)}/g;\nvar Device_GL = /** @class */ (function () {\n function Device_GL(gl, configuration) {\n if (configuration === void 0) { configuration = {}; }\n // Configuration\n this.shaderDebug = false;\n // GL extensions\n // @see https://developer.mozilla.org/zh-CN/docs/Web/API/OES_vertex_array_object\n this.OES_vertex_array_object = null;\n // @see https://developer.mozilla.org/en-US/docs/Web/API/ANGLE_instanced_arrays\n this.ANGLE_instanced_arrays = null;\n // @see https://developer.mozilla.org/en-US/docs/Web/API/OES_texture_float\n this.OES_texture_float = null;\n // @see https://www.khronos.org/registry/webgl/extensions/OES_draw_buffers_indexed/\n this.OES_draw_buffers_indexed = null;\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_draw_buffers\n this.WEBGL_draw_buffers = null;\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_depth_texture\n this.WEBGL_depth_texture = null;\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_color_buffer_float\n this.WEBGL_color_buffer_float = null;\n this.EXT_color_buffer_half_float = null;\n this.WEBGL_compressed_texture_s3tc = null;\n this.WEBGL_compressed_texture_s3tc_srgb = null;\n this.EXT_texture_compression_rgtc = null;\n this.EXT_texture_filter_anisotropic = null;\n this.KHR_parallel_shader_compile = null;\n // @see https://developer.mozilla.org/en-US/docs/Web/API/EXT_texture_norm16\n this.EXT_texture_norm16 = null;\n // @see https://developer.mozilla.org/en-US/docs/Web/API/EXT_color_buffer_float\n this.EXT_color_buffer_float = null;\n this.OES_texture_float_linear = null;\n this.OES_texture_half_float_linear = null;\n // Swap Chain\n this.scTexture = null;\n this.scPlatformFramebuffer = null;\n // Device\n this.currentActiveTexture = null;\n this.currentBoundVAO = null;\n this.currentProgram = null;\n this.resourceCreationTracker = null;\n this.resourceUniqueId = 0;\n // Cached GL driver state\n this.currentColorAttachments = [];\n this.currentColorAttachmentLevels = [];\n this.currentColorResolveTos = [];\n this.currentColorResolveToLevels = [];\n this.currentSampleCount = -1;\n this.currentIndexBufferByteOffset = null;\n this.currentMegaState = copyMegaState(defaultMegaState);\n this.currentSamplers = [];\n this.currentTextures = [];\n this.currentUniformBuffers = [];\n this.currentUniformBufferByteOffsets = [];\n this.currentUniformBufferByteSizes = [];\n this.currentScissorEnabled = false;\n this.currentStencilRef = null;\n // Pass Execution\n this.currentRenderPassDescriptor = null;\n this.currentRenderPassDescriptorStack = [];\n this.debugGroupStack = [];\n this.resolveColorAttachmentsChanged = false;\n this.resolveDepthStencilAttachmentsChanged = false;\n this.explicitBindingLocations = false;\n this.separateSamplerTextures = false;\n this.viewportOrigin = ViewportOrigin.LOWER_LEFT;\n this.clipSpaceNearZ = ClipSpaceNearZ.NEGATIVE_ONE;\n this.supportMRT = false;\n this.inBlitRenderPass = false;\n this.supportedSampleCounts = [];\n this.occlusionQueriesRecommended = false;\n this.computeShadersSupported = false;\n this.gl = gl;\n this.contextAttributes = assertExists(gl.getContextAttributes());\n if (!isWebGL2(gl)) {\n this.OES_vertex_array_object = gl.getExtension('OES_vertex_array_object');\n // TODO: when ANGLE_instanced_arrays unavailable...\n this.ANGLE_instanced_arrays = gl.getExtension('ANGLE_instanced_arrays');\n this.OES_texture_float = gl.getExtension('OES_texture_float');\n this.WEBGL_draw_buffers = gl.getExtension('WEBGL_draw_buffers');\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_depth_texture\n this.WEBGL_depth_texture = gl.getExtension('WEBGL_depth_texture');\n this.WEBGL_color_buffer_float = gl.getExtension('WEBGL_color_buffer_float');\n this.EXT_color_buffer_half_float = gl.getExtension('EXT_color_buffer_half_float');\n // @see https://developer.mozilla.org/en-US/docs/Web/API/EXT_frag_depth\n gl.getExtension('EXT_frag_depth');\n // @see https://developer.mozilla.org/en-US/docs/Web/API/OES_element_index_uint\n gl.getExtension('OES_element_index_uint');\n // @see https://developer.mozilla.org/en-US/docs/Web/API/OES_standard_derivatives\n gl.getExtension('OES_standard_derivatives');\n }\n else {\n this.EXT_texture_norm16 = gl.getExtension('EXT_texture_norm16');\n this.EXT_color_buffer_float = gl.getExtension('EXT_color_buffer_float');\n }\n this.WEBGL_compressed_texture_s3tc = gl.getExtension('WEBGL_compressed_texture_s3tc');\n this.WEBGL_compressed_texture_s3tc_srgb = gl.getExtension('WEBGL_compressed_texture_s3tc_srgb');\n this.EXT_texture_compression_rgtc = gl.getExtension('EXT_texture_compression_rgtc');\n this.EXT_texture_filter_anisotropic = gl.getExtension('EXT_texture_filter_anisotropic');\n this.EXT_texture_norm16 = gl.getExtension('EXT_texture_norm16');\n this.OES_texture_float_linear = gl.getExtension('OES_texture_float_linear');\n this.OES_texture_half_float_linear = gl.getExtension('OES_texture_half_float_linear');\n this.KHR_parallel_shader_compile = gl.getExtension('KHR_parallel_shader_compile');\n // this.OES_draw_buffers_indexed = gl.getExtension('OES_draw_buffers_indexed');\n if (isWebGL2(gl)) {\n this.platformString = 'WebGL2';\n this.glslVersion = '#version 300 es';\n }\n else {\n this.platformString = 'WebGL1';\n this.glslVersion = '#version 100'; // 100 es not supported\n }\n // Create our fake swap-chain texture.\n this.scTexture = new Texture_GL({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: {\n width: 0,\n height: 0,\n depthOrArrayLayers: 1,\n dimension: TextureDimension.TEXTURE_2D,\n mipLevelCount: 1,\n usage: TextureUsage.RENDER_TARGET,\n format: this.contextAttributes.alpha === false\n ? Format.U8_RGB_RT\n : Format.U8_RGBA_RT,\n },\n fake: true,\n });\n this.scTexture.formatKind = SamplerFormatKind.Float;\n this.scTexture.gl_target = null;\n this.scTexture.gl_texture = null;\n this.resolveColorReadFramebuffer = this.ensureResourceExists(gl.createFramebuffer());\n this.resolveColorDrawFramebuffer = this.ensureResourceExists(gl.createFramebuffer());\n this.resolveDepthStencilReadFramebuffer = this.ensureResourceExists(gl.createFramebuffer());\n this.resolveDepthStencilDrawFramebuffer = this.ensureResourceExists(gl.createFramebuffer());\n this.renderPassDrawFramebuffer = this.ensureResourceExists(gl.createFramebuffer());\n this.readbackFramebuffer = this.ensureResourceExists(gl.createFramebuffer());\n this.fallbackTexture2D = this.createFallbackTexture(TextureDimension.TEXTURE_2D, SamplerFormatKind.Float);\n this.fallbackTexture2DDepth = this.createFallbackTexture(TextureDimension.TEXTURE_2D, SamplerFormatKind.Depth);\n this.fallbackVertexBuffer = this.createBuffer({\n viewOrSize: 1,\n usage: BufferUsage.VERTEX,\n hint: BufferFrequencyHint.STATIC,\n });\n if (isWebGL2(gl)) {\n this.fallbackTexture2DArray = this.createFallbackTexture(TextureDimension.TEXTURE_2D_ARRAY, SamplerFormatKind.Float);\n this.fallbackTexture3D = this.createFallbackTexture(TextureDimension.TEXTURE_3D, SamplerFormatKind.Float);\n this.fallbackTextureCube = this.createFallbackTexture(TextureDimension.TEXTURE_CUBE_MAP, SamplerFormatKind.Float);\n }\n // Adjust for GL defaults.\n this.currentMegaState.depthCompare = CompareFunction.LESS;\n this.currentMegaState.depthWrite = false;\n this.currentMegaState.attachmentsState[0].channelWriteMask =\n ChannelWriteMask.ALL;\n // always have depth test enabled.\n gl.enable(gl.DEPTH_TEST);\n gl.enable(gl.STENCIL_TEST);\n this.checkLimits();\n if (configuration.shaderDebug) {\n this.shaderDebug = true;\n }\n if (configuration.trackResources) {\n this.resourceCreationTracker = new ResourceCreationTracker();\n }\n }\n Device_GL.prototype.destroy = function () {\n if (this.blitBindings) {\n this.blitBindings.destroy();\n }\n if (this.blitInputLayout) {\n this.blitInputLayout.destroy();\n }\n if (this.blitRenderPipeline) {\n this.blitRenderPipeline.destroy();\n }\n if (this.blitVertexBuffer) {\n this.blitVertexBuffer.destroy();\n }\n if (this.blitProgram) {\n this.blitProgram.destroy();\n }\n };\n Device_GL.prototype.createFallbackTexture = function (dimension, formatKind) {\n var depthOrArrayLayers = dimension === TextureDimension.TEXTURE_CUBE_MAP ? 6 : 1;\n // const supportDepthTexture =\n // isWebGL2(this.gl) || (!isWebGL2(this.gl) && !!this.WEBGL_depth_texture);\n var format = formatKind === SamplerFormatKind.Depth\n ? Format.D32F\n : Format.U8_RGBA_NORM;\n var texture = this.createTexture({\n dimension: dimension,\n format: format,\n usage: TextureUsage.SAMPLED,\n width: 1,\n height: 1,\n depthOrArrayLayers: depthOrArrayLayers,\n mipLevelCount: 1,\n });\n if (formatKind === SamplerFormatKind.Float) {\n texture.setImageData([new Uint8Array(4 * depthOrArrayLayers)]);\n }\n return getPlatformTexture(texture);\n };\n Device_GL.prototype.getNextUniqueId = function () {\n return ++this.resourceUniqueId;\n };\n Device_GL.prototype.checkLimits = function () {\n var gl = this.gl;\n this.maxVertexAttribs = gl.getParameter(GL.MAX_VERTEX_ATTRIBS);\n if (isWebGL2(gl)) {\n this.uniformBufferMaxPageByteSize = Math.min(gl.getParameter(GL.MAX_UNIFORM_BLOCK_SIZE), UBO_PAGE_MAX_BYTE_SIZE);\n this.uniformBufferWordAlignment =\n gl.getParameter(gl.UNIFORM_BUFFER_OFFSET_ALIGNMENT) / 4;\n var supportedSampleCounts = gl.getInternalformatParameter(gl.RENDERBUFFER, gl.DEPTH32F_STENCIL8, gl.SAMPLES);\n this.supportedSampleCounts = supportedSampleCounts\n ? __spreadArray([], __read(supportedSampleCounts), false) : [];\n this.occlusionQueriesRecommended = true;\n }\n else {\n // mock ubo in WebGL1\n this.uniformBufferWordAlignment = 64;\n this.uniformBufferMaxPageByteSize = UBO_PAGE_MAX_BYTE_SIZE;\n }\n this.uniformBufferMaxPageWordSize = this.uniformBufferMaxPageByteSize / 4;\n if (!this.supportedSampleCounts.includes(1)) {\n this.supportedSampleCounts.push(1);\n }\n this.supportedSampleCounts.sort(function (a, b) { return a - b; });\n };\n //#region SwapChain\n Device_GL.prototype.configureSwapChain = function (width, height, platformFramebuffer) {\n var texture = this.scTexture;\n texture.width = width;\n texture.height = height;\n this.scPlatformFramebuffer = nullify(platformFramebuffer);\n };\n Device_GL.prototype.getDevice = function () {\n return this;\n };\n Device_GL.prototype.getCanvas = function () {\n return this.gl.canvas;\n };\n Device_GL.prototype.getOnscreenTexture = function () {\n return this.scTexture;\n };\n Device_GL.prototype.beginFrame = function () { };\n Device_GL.prototype.endFrame = function () { };\n //#endregion\n //#region Device\n // @see https://webgl2fundamentals.org/webgl/lessons/webgl-data-textures.html\n Device_GL.prototype.translateTextureInternalFormat = function (fmt, isRenderbufferStorage) {\n if (isRenderbufferStorage === void 0) { isRenderbufferStorage = false; }\n switch (fmt) {\n case Format.ALPHA:\n return GL.ALPHA;\n case Format.U8_LUMINANCE:\n case Format.F16_LUMINANCE:\n case Format.F32_LUMINANCE:\n return GL.LUMINANCE;\n // case Format.LUMINANCE_ALPHA:\n // return GL.LUMINANCE_ALPHA;\n case Format.F16_R:\n return GL.R16F;\n case Format.F16_RG:\n return GL.RG16F;\n case Format.F16_RGB:\n return GL.RGB16F;\n case Format.F16_RGBA:\n return GL.RGBA16F;\n case Format.F32_R:\n return GL.R32F;\n case Format.F32_RG:\n return GL.RG32F;\n case Format.F32_RGB:\n return GL.RGB32F;\n case Format.F32_RGBA:\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_color_buffer_float\n return isWebGL2(this.gl)\n ? GL.RGBA32F\n : isRenderbufferStorage\n ? this.WEBGL_color_buffer_float.RGBA32F_EXT\n : GL.RGBA;\n case Format.U8_R_NORM:\n return GL.R8;\n case Format.U8_RG_NORM:\n return GL.RG8;\n case Format.U8_RGB_NORM:\n case Format.U8_RGB_RT:\n return GL.RGB8;\n case Format.U8_RGB_SRGB:\n return GL.SRGB8;\n case Format.U8_RGBA_NORM:\n case Format.U8_RGBA_RT:\n // WebGL1 renderbuffer only support RGBA4 RGB565 RGB5_A1\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/renderbufferStorage#parameters\n // But texImage2D allows RGBA\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texImage2D\n return isWebGL2(this.gl)\n ? GL.RGBA8\n : isRenderbufferStorage\n ? GL.RGBA4\n : GL.RGBA;\n case Format.U8_RGBA:\n return GL.RGBA;\n case Format.U8_RGBA_SRGB:\n case Format.U8_RGBA_RT_SRGB:\n return GL.SRGB8_ALPHA8;\n case Format.U16_R:\n return GL.R16UI;\n case Format.U16_R_NORM:\n return this.EXT_texture_norm16.R16_EXT;\n case Format.U16_RG_NORM:\n return this.EXT_texture_norm16.RG16_EXT;\n case Format.U16_RGBA_NORM:\n return this.EXT_texture_norm16.RGBA16_EXT;\n case Format.U16_RGBA_5551:\n return GL.RGB5_A1;\n case Format.U16_RGB_565:\n return GL.RGB565;\n case Format.U32_R:\n return GL.R32UI;\n case Format.S8_RGBA_NORM:\n return GL.RGBA8_SNORM;\n case Format.S8_RG_NORM:\n return GL.RG8_SNORM;\n case Format.BC1:\n return this.WEBGL_compressed_texture_s3tc.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n case Format.BC1_SRGB:\n return this.WEBGL_compressed_texture_s3tc_srgb\n .COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;\n case Format.BC2:\n return this.WEBGL_compressed_texture_s3tc.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n case Format.BC2_SRGB:\n return this.WEBGL_compressed_texture_s3tc_srgb\n .COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;\n case Format.BC3:\n return this.WEBGL_compressed_texture_s3tc.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n case Format.BC3_SRGB:\n return this.WEBGL_compressed_texture_s3tc_srgb\n .COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;\n case Format.BC4_UNORM:\n return this.EXT_texture_compression_rgtc.COMPRESSED_RED_RGTC1_EXT;\n case Format.BC4_SNORM:\n return this.EXT_texture_compression_rgtc\n .COMPRESSED_SIGNED_RED_RGTC1_EXT;\n case Format.BC5_UNORM:\n return this.EXT_texture_compression_rgtc.COMPRESSED_RED_GREEN_RGTC2_EXT;\n case Format.BC5_SNORM:\n return this.EXT_texture_compression_rgtc\n .COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;\n case Format.D32F_S8:\n return isWebGL2(this.gl)\n ? GL.DEPTH32F_STENCIL8\n : this.WEBGL_depth_texture\n ? GL.DEPTH_STENCIL\n : GL.DEPTH_COMPONENT16;\n case Format.D24_S8:\n return isWebGL2(this.gl)\n ? GL.DEPTH24_STENCIL8\n : this.WEBGL_depth_texture\n ? GL.DEPTH_STENCIL\n : GL.DEPTH_COMPONENT16;\n case Format.D32F:\n return isWebGL2(this.gl)\n ? GL.DEPTH_COMPONENT32F\n : this.WEBGL_depth_texture\n ? GL.DEPTH_COMPONENT\n : GL.DEPTH_COMPONENT16;\n case Format.D24:\n return isWebGL2(this.gl)\n ? GL.DEPTH_COMPONENT24\n : this.WEBGL_depth_texture\n ? GL.DEPTH_COMPONENT\n : GL.DEPTH_COMPONENT16;\n default:\n throw new Error('whoops');\n }\n };\n Device_GL.prototype.translateTextureType = function (fmt) {\n var typeFlags = getFormatTypeFlags(fmt);\n switch (typeFlags) {\n case FormatTypeFlags.U8:\n return GL.UNSIGNED_BYTE;\n case FormatTypeFlags.U16:\n return GL.UNSIGNED_SHORT;\n case FormatTypeFlags.U32:\n return GL.UNSIGNED_INT;\n case FormatTypeFlags.S8:\n return GL.BYTE;\n case FormatTypeFlags.F16:\n return GL.HALF_FLOAT;\n case FormatTypeFlags.F32:\n return GL.FLOAT;\n case FormatTypeFlags.U16_PACKED_5551:\n return GL.UNSIGNED_SHORT_5_5_5_1;\n case FormatTypeFlags.D32F:\n return isWebGL2(this.gl)\n ? GL.FLOAT\n : this.WEBGL_depth_texture\n ? GL.UNSIGNED_INT\n : GL.UNSIGNED_BYTE;\n case FormatTypeFlags.D24:\n return isWebGL2(this.gl)\n ? GL.UNSIGNED_INT_24_8\n : this.WEBGL_depth_texture\n ? GL.UNSIGNED_SHORT\n : GL.UNSIGNED_BYTE;\n case FormatTypeFlags.D24S8:\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_depth_texture\n return isWebGL2(this.gl)\n ? GL.UNSIGNED_INT_24_8\n : this.WEBGL_depth_texture\n ? GL.UNSIGNED_INT_24_8_WEBGL\n : GL.UNSIGNED_BYTE;\n case FormatTypeFlags.D32FS8:\n return GL.FLOAT_32_UNSIGNED_INT_24_8_REV;\n default:\n throw new Error('whoops');\n }\n };\n /**\n * Only works in WebGL2\n * @see https://webgl2fundamentals.org/webgl/lessons/webgl-data-textures.html\n */\n Device_GL.prototype.translateInternalTextureFormat = function (fmt) {\n switch (fmt) {\n case Format.F32_R:\n return GL.R32F;\n case Format.F32_RG:\n return GL.RG32F;\n case Format.F32_RGB:\n return GL.RGB32F;\n case Format.F32_RGBA:\n return GL.RGBA32F;\n case Format.F16_R:\n return GL.R16F;\n case Format.F16_RG:\n return GL.RG16F;\n case Format.F16_RGB:\n return GL.RGB16F;\n case Format.F16_RGBA:\n return GL.RGBA16F;\n }\n return this.translateTextureFormat(fmt);\n };\n Device_GL.prototype.translateTextureFormat = function (fmt) {\n if (isTextureFormatCompressed(fmt) ||\n fmt === Format.F32_LUMINANCE ||\n fmt === Format.U8_LUMINANCE) {\n return this.translateTextureInternalFormat(fmt);\n }\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_depth_texture\n var supportDepthTexture = isWebGL2(this.gl) || (!isWebGL2(this.gl) && !!this.WEBGL_depth_texture);\n switch (fmt) {\n case Format.D24_S8:\n case Format.D32F_S8:\n return supportDepthTexture ? GL.DEPTH_STENCIL : GL.RGBA;\n case Format.D24:\n case Format.D32F:\n return supportDepthTexture ? GL.DEPTH_COMPONENT : GL.RGBA;\n }\n var isInteger = isFormatSizedInteger(fmt);\n var compFlags = getFormatCompFlags(fmt);\n switch (compFlags) {\n case FormatCompFlags.A:\n return GL.ALPHA;\n case FormatCompFlags.R:\n return isInteger ? GL.RED_INTEGER : GL.RED;\n case FormatCompFlags.RG:\n return isInteger ? GL.RG_INTEGER : GL.RG;\n case FormatCompFlags.RGB:\n return isInteger ? GL.RGB_INTEGER : GL.RGB;\n case FormatCompFlags.RGBA:\n // TODO: Chrome throw error when readPixels RGBA_INTEGER and UNSIGNED_BYTE\n // @see https://github.com/KhronosGroup/WebGL/issues/2747\n // return isInteger ? GL.RGBA_INTEGER : GL.RGBA;\n return GL.RGBA;\n }\n };\n Device_GL.prototype.setActiveTexture = function (texture) {\n if (this.currentActiveTexture !== texture) {\n this.gl.activeTexture(texture);\n this.currentActiveTexture = texture;\n }\n };\n Device_GL.prototype.bindVAO = function (vao) {\n if (this.currentBoundVAO !== vao) {\n if (isWebGL2(this.gl)) {\n this.gl.bindVertexArray(vao);\n }\n else {\n this.OES_vertex_array_object.bindVertexArrayOES(vao);\n }\n this.currentBoundVAO = vao;\n }\n };\n Device_GL.prototype.programCompiled = function (program) {\n assert(program.compileState !== ProgramCompileState_GL.NeedsCompile);\n if (program.compileState === ProgramCompileState_GL.Compiling) {\n program.compileState = ProgramCompileState_GL.NeedsBind;\n if (this.shaderDebug) {\n this.checkProgramCompilationForErrors(program);\n }\n }\n };\n Device_GL.prototype.useProgram = function (program) {\n if (this.currentProgram === program)\n return;\n this.programCompiled(program);\n this.gl.useProgram(program.gl_program);\n this.currentProgram = program;\n };\n Device_GL.prototype.ensureResourceExists = function (resource) {\n if (resource === null) {\n var error = this.gl.getError();\n throw new Error(\"Created resource is null; GL error encountered: \".concat(error));\n }\n else {\n return resource;\n }\n };\n Device_GL.prototype.createBuffer = function (descriptor) {\n return new Buffer_GL({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n });\n };\n Device_GL.prototype.createTexture = function (descriptor) {\n return new Texture_GL({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n });\n };\n Device_GL.prototype.createSampler = function (descriptor) {\n return new Sampler_GL({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n });\n };\n Device_GL.prototype.createRenderTarget = function (descriptor) {\n return new RenderTarget_GL({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n });\n };\n Device_GL.prototype.createRenderTargetFromTexture = function (texture) {\n var _a = texture, format = _a.format, width = _a.width, height = _a.height, mipLevelCount = _a.mipLevelCount;\n // Render targets cannot have a mip chain currently.\n assert(mipLevelCount === 1);\n return this.createRenderTarget({\n format: format,\n width: width,\n height: height,\n sampleCount: 1,\n texture: texture,\n });\n };\n Device_GL.prototype.createProgram = function (descriptor) {\n var _a, _b, _c;\n var rawVertexGLSL = (_a = descriptor.vertex) === null || _a === void 0 ? void 0 : _a.glsl;\n // preprocess GLSL first\n if ((_b = descriptor.vertex) === null || _b === void 0 ? void 0 : _b.glsl) {\n descriptor.vertex.glsl = preprocessShader_GLSL(this.queryVendorInfo(), 'vert', descriptor.vertex.glsl);\n }\n if ((_c = descriptor.fragment) === null || _c === void 0 ? void 0 : _c.glsl) {\n descriptor.fragment.glsl = preprocessShader_GLSL(this.queryVendorInfo(), 'frag', descriptor.fragment.glsl);\n }\n return this.createProgramSimple(descriptor, rawVertexGLSL);\n };\n Device_GL.prototype.createProgramSimple = function (descriptor, rawVertexGLSL) {\n var program = new Program_GL({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n }, rawVertexGLSL);\n return program;\n };\n Device_GL.prototype.createBindings = function (descriptor) {\n return new Bindings_GL({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n });\n };\n Device_GL.prototype.createInputLayout = function (descriptor) {\n return new InputLayout_GL({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n });\n };\n Device_GL.prototype.createRenderPipeline = function (descriptor) {\n return new RenderPipeline_GL({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n });\n };\n Device_GL.prototype.createComputePass = function () {\n return new ComputePass_GL();\n };\n Device_GL.prototype.createComputePipeline = function (descriptor) {\n return new ComputePipeline_GL({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n });\n };\n Device_GL.prototype.createReadback = function () {\n return new Readback_GL({\n id: this.getNextUniqueId(),\n device: this,\n });\n };\n Device_GL.prototype.createQueryPool = function (type, elemCount) {\n return new QueryPool_GL({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: {\n type: type,\n elemCount: elemCount,\n },\n });\n };\n Device_GL.prototype.formatRenderPassDescriptor = function (descriptor) {\n var _a, _b, _c, _d, _e, _f;\n var colorAttachment = descriptor.colorAttachment;\n descriptor.depthClearValue = (_a = descriptor.depthClearValue) !== null && _a !== void 0 ? _a : 'load';\n descriptor.stencilClearValue = (_b = descriptor.stencilClearValue) !== null && _b !== void 0 ? _b : 'load';\n for (var i = 0; i < colorAttachment.length; i++) {\n if (!descriptor.colorAttachmentLevel) {\n descriptor.colorAttachmentLevel = [];\n }\n descriptor.colorAttachmentLevel[i] =\n (_c = descriptor.colorAttachmentLevel[i]) !== null && _c !== void 0 ? _c : 0;\n if (!descriptor.colorResolveToLevel) {\n descriptor.colorResolveToLevel = [];\n }\n descriptor.colorResolveToLevel[i] =\n (_d = descriptor.colorResolveToLevel[i]) !== null && _d !== void 0 ? _d : 0;\n if (!descriptor.colorClearColor) {\n descriptor.colorClearColor = [];\n }\n descriptor.colorClearColor[i] = (_e = descriptor.colorClearColor[i]) !== null && _e !== void 0 ? _e : 'load';\n if (!descriptor.colorStore) {\n descriptor.colorStore = [];\n }\n descriptor.colorStore[i] = (_f = descriptor.colorStore[i]) !== null && _f !== void 0 ? _f : false;\n }\n };\n Device_GL.prototype.createRenderBundle = function () {\n return new RenderBundle_GL({\n id: this.getNextUniqueId(),\n device: this,\n });\n };\n Device_GL.prototype.beginBundle = function (bundle) {\n this.renderBundle = bundle;\n };\n Device_GL.prototype.endBundle = function () {\n this.renderBundle = undefined;\n };\n Device_GL.prototype.executeBundles = function (renderBundles) {\n renderBundles.forEach(function (renderBundle) {\n renderBundle.replay();\n });\n };\n Device_GL.prototype.createRenderPass = function (descriptor) {\n if (this.currentRenderPassDescriptor !== null) {\n // Save current renderpass descriptor.\n this.currentRenderPassDescriptorStack.push(this.currentRenderPassDescriptor);\n }\n this.currentRenderPassDescriptor = descriptor;\n // Format renderpass descriptor\n this.formatRenderPassDescriptor(descriptor);\n var colorAttachment = descriptor.colorAttachment, colorAttachmentLevel = descriptor.colorAttachmentLevel, colorClearColor = descriptor.colorClearColor, colorResolveTo = descriptor.colorResolveTo, colorResolveToLevel = descriptor.colorResolveToLevel, depthStencilAttachment = descriptor.depthStencilAttachment, depthClearValue = descriptor.depthClearValue, stencilClearValue = descriptor.stencilClearValue, depthStencilResolveTo = descriptor.depthStencilResolveTo;\n var skipBlit = colorResolveTo &&\n colorResolveTo.length === 1 &&\n colorResolveTo[0] === this.scTexture;\n this.setRenderPassParametersBegin(colorAttachment.length, skipBlit);\n for (var i = 0; i < colorAttachment.length; i++) {\n this.setRenderPassParametersColor(i, colorAttachment[i], colorAttachmentLevel[i], colorResolveTo[i], colorResolveToLevel[i], skipBlit);\n }\n this.setRenderPassParametersDepthStencil(depthStencilAttachment, depthStencilResolveTo, skipBlit);\n this.validateCurrentAttachments();\n for (var i = 0; i < colorAttachment.length; i++) {\n var clearColor = colorClearColor[i];\n if (clearColor === 'load')\n continue;\n this.setRenderPassParametersClearColor(i, clearColor.r, clearColor.g, clearColor.b, clearColor.a);\n }\n this.setRenderPassParametersClearDepthStencil(depthClearValue, stencilClearValue);\n return this;\n };\n Device_GL.prototype.submitPass = function (pass) {\n assert(this.currentRenderPassDescriptor !== null);\n this.endPass();\n if (this.currentRenderPassDescriptorStack.length) {\n // Restore previous renderpass descriptor.\n this.currentRenderPassDescriptor =\n this.currentRenderPassDescriptorStack.pop();\n }\n else {\n this.currentRenderPassDescriptor = null;\n }\n };\n Device_GL.prototype.copySubTexture2D = function (dst_, dstX, dstY, src_, srcX, srcY) {\n var gl = this.gl;\n var dst = dst_;\n var src = src_;\n assert(src.mipLevelCount === 1);\n assert(dst.mipLevelCount === 1);\n if (isWebGL2(gl)) {\n if (dst === this.scTexture) {\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, this.scPlatformFramebuffer);\n }\n else {\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, this.resolveColorDrawFramebuffer);\n this.bindFramebufferAttachment(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, dst, 0);\n }\n gl.bindFramebuffer(gl.READ_FRAMEBUFFER, this.resolveColorReadFramebuffer);\n this.bindFramebufferAttachment(gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, src, 0);\n gl.blitFramebuffer(srcX, srcY, srcX + src.width, srcY + src.height, dstX, dstY, dstX + src.width, dstY + src.height, gl.COLOR_BUFFER_BIT, gl.LINEAR);\n gl.bindFramebuffer(gl.READ_FRAMEBUFFER, null);\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null);\n }\n else {\n if (dst === this.scTexture) {\n var rt = this.createRenderTargetFromTexture(src_);\n this.submitBlitRenderPass(rt, dst);\n }\n }\n };\n Device_GL.prototype.queryLimits = function () {\n return this;\n };\n Device_GL.prototype.queryTextureFormatSupported = function (format, width, height) {\n switch (format) {\n case Format.BC1_SRGB:\n case Format.BC2_SRGB:\n case Format.BC3_SRGB:\n if (this.WEBGL_compressed_texture_s3tc_srgb !== null)\n return isBlockCompressSized(width, height, 4, 4);\n return false;\n case Format.BC1:\n case Format.BC2:\n case Format.BC3:\n if (this.WEBGL_compressed_texture_s3tc !== null)\n return isBlockCompressSized(width, height, 4, 4);\n return false;\n case Format.BC4_UNORM:\n case Format.BC4_SNORM:\n case Format.BC5_UNORM:\n case Format.BC5_SNORM:\n if (this.EXT_texture_compression_rgtc !== null)\n return isBlockCompressSized(width, height, 4, 4);\n return false;\n case Format.U16_R_NORM:\n case Format.U16_RG_NORM:\n case Format.U16_RGBA_NORM:\n return this.EXT_texture_norm16 !== null;\n case Format.F32_R:\n case Format.F32_RG:\n case Format.F32_RGB:\n case Format.F32_RGBA:\n return this.OES_texture_float_linear !== null;\n case Format.F16_R:\n case Format.F16_RG:\n case Format.F16_RGB:\n case Format.F16_RGBA:\n return this.OES_texture_half_float_linear !== null;\n default:\n return true;\n }\n };\n Device_GL.prototype.queryProgramReady = function (program) {\n var gl = this.gl;\n if (program.compileState === ProgramCompileState_GL.NeedsCompile) {\n // This should not happen.\n throw new Error('whoops');\n }\n if (program.compileState === ProgramCompileState_GL.Compiling) {\n var complete = void 0;\n if (this.KHR_parallel_shader_compile !== null) {\n complete = gl.getProgramParameter(program.gl_program, this.KHR_parallel_shader_compile.COMPLETION_STATUS_KHR);\n }\n else {\n // If we don't have async shader compilation, assume all compilation is done immediately :/\n complete = true;\n }\n if (complete) {\n this.programCompiled(program);\n }\n return complete;\n }\n return (program.compileState === ProgramCompileState_GL.NeedsBind ||\n program.compileState === ProgramCompileState_GL.ReadyToUse);\n };\n Device_GL.prototype.queryPlatformAvailable = function () {\n return this.gl.isContextLost();\n };\n Device_GL.prototype.queryVendorInfo = function () {\n return this;\n };\n Device_GL.prototype.queryRenderPass = function (o) {\n return this.currentRenderPassDescriptor;\n };\n Device_GL.prototype.queryRenderTarget = function (o) {\n var renderTarget = o;\n return renderTarget;\n };\n //#endregion\n //#region Debugging\n Device_GL.prototype.setResourceName = function (o, name) {\n o.name = name;\n if (o.type === ResourceType.Buffer) {\n var gl_buffer_pages = o.gl_buffer_pages;\n for (var i = 0; i < gl_buffer_pages.length; i++)\n assignPlatformName(gl_buffer_pages[i], \"\".concat(name, \" Page \").concat(i));\n }\n else if (o.type === ResourceType.Texture) {\n assignPlatformName(getPlatformTexture(o), name);\n }\n else if (o.type === ResourceType.Sampler) {\n assignPlatformName(getPlatformSampler$1(o), name);\n }\n else if (o.type === ResourceType.RenderTarget) {\n var gl_renderbuffer = o.gl_renderbuffer;\n if (gl_renderbuffer !== null)\n assignPlatformName(gl_renderbuffer, name);\n }\n else if (o.type === ResourceType.InputLayout) {\n assignPlatformName(o.vao, name);\n }\n };\n Device_GL.prototype.setResourceLeakCheck = function (o, v) {\n if (this.resourceCreationTracker !== null)\n this.resourceCreationTracker.setResourceLeakCheck(o, v);\n };\n Device_GL.prototype.checkForLeaks = function () {\n if (this.resourceCreationTracker !== null)\n this.resourceCreationTracker.checkForLeaks();\n };\n Device_GL.prototype.pushDebugGroup = function (name) { };\n Device_GL.prototype.popDebugGroup = function () { };\n Device_GL.prototype.insertDebugMarker = function (markerLabel) { };\n // pushDebugGroup(debugGroup: DebugGroup): void {\n // this.debugGroupStack.push(debugGroup);\n // }\n // popDebugGroup(): void {\n // this.debugGroupStack.pop();\n // }\n Device_GL.prototype.programPatched = function (o, descriptor) {\n assert(this.shaderDebug);\n // const program = o as Program_GL;\n // const gl = this.gl;\n // gl.deleteProgram(program.gl_program);\n // program.descriptor = descriptor;\n // program.gl_program = this.ensureResourceExists(gl.createProgram());\n // program.compileState = ProgramCompileState_GL.NeedsCompile;\n // this.tryCompileProgram(program);\n // this.checkProgramCompilationForErrors(program);\n };\n Device_GL.prototype.getBufferData = function (buffer, dstBuffer, wordOffset) {\n if (wordOffset === void 0) { wordOffset = 0; }\n var gl = this.gl;\n if (isWebGL2(gl)) {\n gl.bindBuffer(gl.COPY_READ_BUFFER, getPlatformBuffer$1(buffer, wordOffset * 4));\n gl.getBufferSubData(gl.COPY_READ_BUFFER, wordOffset * 4, dstBuffer);\n }\n };\n //#endregion\n Device_GL.prototype.debugGroupStatisticsDrawCall = function (count) {\n if (count === void 0) { count = 1; }\n for (var i = this.debugGroupStack.length - 1; i >= 0; i--)\n this.debugGroupStack[i].drawCallCount += count;\n };\n Device_GL.prototype.debugGroupStatisticsBufferUpload = function (count) {\n if (count === void 0) { count = 1; }\n for (var i = this.debugGroupStack.length - 1; i >= 0; i--)\n this.debugGroupStack[i].bufferUploadCount += count;\n };\n Device_GL.prototype.debugGroupStatisticsTextureBind = function (count) {\n if (count === void 0) { count = 1; }\n for (var i = this.debugGroupStack.length - 1; i >= 0; i--)\n this.debugGroupStack[i].textureBindCount += count;\n };\n Device_GL.prototype.debugGroupStatisticsTriangles = function (count) {\n for (var i = this.debugGroupStack.length - 1; i >= 0; i--)\n this.debugGroupStack[i].triangleCount += count;\n };\n Device_GL.prototype.reportShaderError = function (shader, str) {\n var gl = this.gl;\n var status = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n if (!status) {\n console.error(prependLineNo(str));\n var debug_shaders = gl.getExtension('WEBGL_debug_shaders');\n if (debug_shaders)\n console.error(debug_shaders.getTranslatedShaderSource(shader));\n console.error(gl.getShaderInfoLog(shader));\n }\n return status;\n };\n Device_GL.prototype.checkProgramCompilationForErrors = function (program) {\n var gl = this.gl;\n var prog = program.gl_program;\n if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) {\n var descriptor = program.descriptor;\n if (!this.reportShaderError(program.gl_shader_vert, descriptor.vertex.glsl))\n return;\n if (!this.reportShaderError(program.gl_shader_frag, descriptor.fragment.glsl))\n return;\n // Neither shader had an error, report the program info log.\n console.error(gl.getProgramInfoLog(program.gl_program));\n }\n };\n Device_GL.prototype.bindFramebufferAttachment = function (framebuffer, binding, attachment, level) {\n var gl = this.gl;\n if (isNil(attachment)) {\n gl.framebufferRenderbuffer(framebuffer, binding, gl.RENDERBUFFER, null);\n }\n else if (attachment.type === ResourceType.RenderTarget) {\n if (attachment.gl_renderbuffer !== null) {\n gl.framebufferRenderbuffer(framebuffer, binding, gl.RENDERBUFFER, attachment.gl_renderbuffer);\n }\n else if (attachment.texture !== null) {\n gl.framebufferTexture2D(framebuffer, binding, GL.TEXTURE_2D, getPlatformTexture(attachment.texture), level);\n }\n }\n else if (attachment.type === ResourceType.Texture) {\n var texture = getPlatformTexture(attachment);\n if (attachment.dimension === TextureDimension.TEXTURE_2D) {\n gl.framebufferTexture2D(framebuffer, binding, GL.TEXTURE_2D, texture, level);\n }\n else if (isWebGL2(gl) &&\n attachment.dimension === TextureDimension.TEXTURE_2D_ARRAY) ;\n }\n };\n Device_GL.prototype.bindFramebufferDepthStencilAttachment = function (framebuffer, attachment) {\n var gl = this.gl;\n var flags = !isNil(attachment)\n ? getFormatFlags(attachment.format)\n : FormatFlags.Depth | FormatFlags.Stencil;\n var depth = !!(flags & FormatFlags.Depth);\n var stencil = !!(flags & FormatFlags.Stencil);\n if (depth && stencil) {\n var supportDepthTexture = isWebGL2(this.gl) || (!isWebGL2(this.gl) && !!this.WEBGL_depth_texture);\n if (supportDepthTexture) {\n this.bindFramebufferAttachment(framebuffer, gl.DEPTH_STENCIL_ATTACHMENT, attachment, 0);\n }\n else {\n this.bindFramebufferAttachment(framebuffer, gl.DEPTH_ATTACHMENT, attachment, 0);\n }\n }\n else if (depth) {\n this.bindFramebufferAttachment(framebuffer, gl.DEPTH_ATTACHMENT, attachment, 0);\n this.bindFramebufferAttachment(framebuffer, gl.STENCIL_ATTACHMENT, null, 0);\n }\n else if (stencil) {\n this.bindFramebufferAttachment(framebuffer, gl.STENCIL_ATTACHMENT, attachment, 0);\n this.bindFramebufferAttachment(framebuffer, gl.DEPTH_ATTACHMENT, null, 0);\n }\n };\n Device_GL.prototype.validateCurrentAttachments = function () {\n var sampleCount = -1, width = -1, height = -1;\n for (var i = 0; i < this.currentColorAttachments.length; i++) {\n var attachment = this.currentColorAttachments[i];\n if (attachment === null)\n continue;\n if (sampleCount === -1) {\n sampleCount = attachment.sampleCount;\n width = attachment.width;\n height = attachment.height;\n }\n else {\n assert(sampleCount === attachment.sampleCount);\n assert(width === attachment.width);\n assert(height === attachment.height);\n }\n }\n if (this.currentDepthStencilAttachment) {\n if (sampleCount === -1) {\n sampleCount = this.currentDepthStencilAttachment.sampleCount;\n }\n else {\n assert(sampleCount === this.currentDepthStencilAttachment.sampleCount);\n assert(width === this.currentDepthStencilAttachment.width);\n assert(height === this.currentDepthStencilAttachment.height);\n }\n }\n this.currentSampleCount = sampleCount;\n };\n Device_GL.prototype.setRenderPassParametersBegin = function (numColorAttachments, toScreen) {\n if (toScreen === void 0) { toScreen = false; }\n var gl = this.gl;\n if (!toScreen) {\n if (isWebGL2(gl)) {\n gl.bindFramebuffer(GL.DRAW_FRAMEBUFFER, this.renderPassDrawFramebuffer);\n }\n else {\n if (!this.inBlitRenderPass) {\n gl.bindFramebuffer(GL.FRAMEBUFFER, this.renderPassDrawFramebuffer);\n }\n }\n if (isWebGL2(gl)) {\n gl.drawBuffers([\n GL.COLOR_ATTACHMENT0,\n GL.COLOR_ATTACHMENT1,\n GL.COLOR_ATTACHMENT2,\n GL.COLOR_ATTACHMENT3,\n ]);\n }\n else {\n if (!this.inBlitRenderPass && this.WEBGL_draw_buffers) {\n // MRT @see https://github.com/shrekshao/MoveWebGL1EngineToWebGL2/blob/master/Move-a-WebGL-1-Engine-To-WebGL-2-Blog-1.md#multiple-render-targets\n this.WEBGL_draw_buffers.drawBuffersWEBGL([\n GL.COLOR_ATTACHMENT0_WEBGL,\n GL.COLOR_ATTACHMENT1_WEBGL,\n GL.COLOR_ATTACHMENT2_WEBGL,\n GL.COLOR_ATTACHMENT3_WEBGL, // gl_FragData[3]\n ]);\n }\n }\n if (!this.inBlitRenderPass) {\n for (var i = numColorAttachments; i < this.currentColorAttachments.length; i++) {\n var target = isWebGL2(gl) ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER;\n var attachment = isWebGL2(gl)\n ? GL.COLOR_ATTACHMENT0\n : GL.COLOR_ATTACHMENT0_WEBGL;\n gl.framebufferRenderbuffer(target, attachment + i, GL.RENDERBUFFER, null);\n gl.framebufferTexture2D(target, attachment + i, GL.TEXTURE_2D, null, 0);\n }\n }\n }\n else {\n gl.bindFramebuffer(GL.FRAMEBUFFER, null);\n }\n this.currentColorAttachments.length = numColorAttachments;\n };\n Device_GL.prototype.setRenderPassParametersColor = function (i, colorAttachment, attachmentLevel, colorResolveTo, resolveToLevel, skipBlit) {\n if (skipBlit === void 0) { skipBlit = false; }\n var gl = this.gl;\n var gl2 = isWebGL2(gl);\n if (this.currentColorAttachments[i] !== colorAttachment ||\n this.currentColorAttachmentLevels[i] !== attachmentLevel) {\n this.currentColorAttachments[i] = colorAttachment;\n this.currentColorAttachmentLevels[i] = attachmentLevel;\n if (!skipBlit && (gl2 || (!gl2 && this.WEBGL_draw_buffers))) {\n this.bindFramebufferAttachment(gl2 ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER, (gl2 ? GL.COLOR_ATTACHMENT0 : GL.COLOR_ATTACHMENT0_WEBGL) + i, colorAttachment, attachmentLevel);\n }\n this.resolveColorAttachmentsChanged = true;\n }\n if (this.currentColorResolveTos[i] !== colorResolveTo ||\n this.currentColorResolveToLevels[i] !== resolveToLevel) {\n this.currentColorResolveTos[i] = colorResolveTo;\n this.currentColorResolveToLevels[i] = resolveToLevel;\n if (colorResolveTo !== null) {\n this.resolveColorAttachmentsChanged = true;\n }\n }\n };\n Device_GL.prototype.setRenderPassParametersDepthStencil = function (depthStencilAttachment, depthStencilResolveTo, skipBlit) {\n if (skipBlit === void 0) { skipBlit = false; }\n var gl = this.gl;\n if (this.currentDepthStencilAttachment !== depthStencilAttachment) {\n this.currentDepthStencilAttachment =\n depthStencilAttachment;\n if (!skipBlit && !this.inBlitRenderPass) {\n this.bindFramebufferDepthStencilAttachment(isWebGL2(gl) ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER, this.currentDepthStencilAttachment);\n }\n this.resolveDepthStencilAttachmentsChanged = true;\n }\n if (this.currentDepthStencilResolveTo !== depthStencilResolveTo) {\n this.currentDepthStencilResolveTo = depthStencilResolveTo;\n if (depthStencilResolveTo) {\n this.resolveDepthStencilAttachmentsChanged = true;\n }\n }\n };\n Device_GL.prototype.setRenderPassParametersClearColor = function (slot, r, g, b, a) {\n var gl = this.gl;\n if (this.OES_draw_buffers_indexed !== null) {\n var attachment = this.currentMegaState.attachmentsState[slot];\n if (attachment && attachment.channelWriteMask !== ChannelWriteMask.ALL) {\n this.OES_draw_buffers_indexed.colorMaskiOES(slot, true, true, true, true);\n attachment.channelWriteMask = ChannelWriteMask.ALL;\n }\n }\n else {\n var attachment = this.currentMegaState.attachmentsState[0];\n if (attachment && attachment.channelWriteMask !== ChannelWriteMask.ALL) {\n gl.colorMask(true, true, true, true);\n attachment.channelWriteMask = ChannelWriteMask.ALL;\n }\n }\n this.setScissorRectEnabled(false);\n if (isWebGL2(gl)) {\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/clearBuffer\n gl.clearBufferfv(gl.COLOR, slot, [r, g, b, a]);\n }\n else {\n gl.clearColor(r, g, b, a);\n gl.clear(gl.COLOR_BUFFER_BIT);\n }\n };\n Device_GL.prototype.setRenderPassParametersClearDepthStencil = function (depthClearValue, stencilClearValue) {\n if (depthClearValue === void 0) { depthClearValue = 'load'; }\n if (stencilClearValue === void 0) { stencilClearValue = 'load'; }\n var gl = this.gl;\n if (depthClearValue !== 'load') {\n assert(!!this.currentDepthStencilAttachment);\n // GL clears obey the masks... bad API or worst API?\n if (!this.currentMegaState.depthWrite) {\n gl.depthMask(true);\n this.currentMegaState.depthWrite = true;\n }\n if (isWebGL2(gl)) {\n gl.clearBufferfv(gl.DEPTH, 0, [depthClearValue]);\n }\n else {\n gl.clearDepth(depthClearValue);\n gl.clear(gl.DEPTH_BUFFER_BIT);\n }\n }\n if (stencilClearValue !== 'load') {\n assert(!!this.currentDepthStencilAttachment);\n if (!this.currentMegaState.stencilWrite) {\n gl.enable(gl.STENCIL_TEST);\n gl.stencilMask(0xff);\n this.currentMegaState.stencilWrite = true;\n }\n if (isWebGL2(gl)) {\n gl.clearBufferiv(gl.STENCIL, 0, [stencilClearValue]);\n }\n else {\n gl.clearStencil(stencilClearValue);\n gl.clear(gl.STENCIL_BUFFER_BIT);\n }\n }\n };\n Device_GL.prototype.setBindings = function (bindings_) {\n var _this = this;\n var _a;\n if (this.renderBundle) {\n this.renderBundle.push(function () { return _this.setBindings(bindings_); });\n return;\n }\n var gl = this.gl;\n var _b = bindings_, uniformBufferBindings = _b.uniformBufferBindings, samplerBindings = _b.samplerBindings, bindingLayouts = _b.bindingLayouts;\n assert(0 < bindingLayouts.bindingLayoutTables.length);\n var bindingLayoutTable = bindingLayouts.bindingLayoutTables[0];\n // Ignore extra bindings.\n assert(uniformBufferBindings.length >= bindingLayoutTable.numUniformBuffers);\n assert(samplerBindings.length >= bindingLayoutTable.numSamplers);\n for (var i = 0; i < uniformBufferBindings.length; i++) {\n var binding = uniformBufferBindings[i];\n if (binding.size === 0)\n continue;\n var index = bindingLayoutTable.firstUniformBuffer + i;\n var buffer = binding.buffer;\n var byteOffset = binding.offset || 0;\n var byteSize = binding.size || buffer.byteSize;\n if (buffer !== this.currentUniformBuffers[index] ||\n byteOffset !== this.currentUniformBufferByteOffsets[index] ||\n byteSize !== this.currentUniformBufferByteSizes[index]) {\n var platformBufferByteOffset = byteOffset % buffer.pageByteSize;\n var platformBuffer = buffer.gl_buffer_pages[(byteOffset / buffer.pageByteSize) | 0];\n assert(platformBufferByteOffset + byteSize <= buffer.pageByteSize);\n if (isWebGL2(gl)) {\n gl.bindBufferRange(gl.UNIFORM_BUFFER, index, platformBuffer, platformBufferByteOffset, byteSize);\n }\n this.currentUniformBuffers[index] = buffer;\n this.currentUniformBufferByteOffsets[index] = byteOffset;\n this.currentUniformBufferByteSizes[index] = byteSize;\n }\n }\n for (var i = 0; i < bindingLayoutTable.numSamplers; i++) {\n var binding = samplerBindings[i];\n var samplerIndex = bindingLayoutTable.firstSampler + i;\n var gl_sampler = binding !== null && binding.sampler !== null\n ? getPlatformSampler$1(binding.sampler)\n : null;\n var gl_texture = binding !== null && binding.texture !== null\n ? getPlatformTexture(binding.texture)\n : null;\n if (this.currentSamplers[samplerIndex] !== gl_sampler) {\n if (isWebGL2(gl)) {\n gl.bindSampler(samplerIndex, gl_sampler);\n }\n this.currentSamplers[samplerIndex] = gl_sampler;\n }\n if (this.currentTextures[samplerIndex] !== gl_texture) {\n this.setActiveTexture(gl.TEXTURE0 + samplerIndex);\n if (gl_texture !== null) {\n var _c = assertExists(binding)\n .texture, gl_target = _c.gl_target, width = _c.width, height = _c.height;\n // update index\n binding.texture.textureIndex = samplerIndex;\n gl.bindTexture(gl_target, gl_texture);\n // In WebGL1 set tex's parameters @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texParameter\n if (!isWebGL2(gl)) {\n (_a = binding.sampler) === null || _a === void 0 ? void 0 : _a.setTextureParameters(gl_target, width, height);\n }\n this.debugGroupStatisticsTextureBind();\n }\n else {\n var samplerEntry = __assign(__assign({}, binding), defaultBindingLayoutSamplerDescriptor);\n var dimension = samplerEntry.dimension, formatKind = samplerEntry.formatKind;\n var gl_target = translateTextureDimension$1(dimension);\n gl.bindTexture(gl_target, this.getFallbackTexture(__assign({ gl_target: gl_target, formatKind: formatKind }, samplerEntry)));\n }\n this.currentTextures[samplerIndex] = gl_texture;\n }\n }\n };\n Device_GL.prototype.setViewport = function (x, y, w, h) {\n var gl = this.gl;\n gl.viewport(x, y, w, h);\n };\n Device_GL.prototype.setScissorRect = function (x, y, w, h) {\n var gl = this.gl;\n this.setScissorRectEnabled(true);\n gl.scissor(x, y, w, h);\n };\n Device_GL.prototype.applyAttachmentStateIndexed = function (i, currentAttachmentState, newAttachmentState) {\n var gl = this.gl;\n var dbi = this.OES_draw_buffers_indexed;\n if (currentAttachmentState.channelWriteMask !==\n newAttachmentState.channelWriteMask) {\n dbi.colorMaskiOES(i, !!(newAttachmentState.channelWriteMask & ChannelWriteMask.RED), !!(newAttachmentState.channelWriteMask & ChannelWriteMask.GREEN), !!(newAttachmentState.channelWriteMask & ChannelWriteMask.BLUE), !!(newAttachmentState.channelWriteMask & ChannelWriteMask.ALPHA));\n currentAttachmentState.channelWriteMask =\n newAttachmentState.channelWriteMask;\n }\n var blendModeChanged = currentAttachmentState.rgbBlendState.blendMode !==\n newAttachmentState.rgbBlendState.blendMode ||\n currentAttachmentState.alphaBlendState.blendMode !==\n newAttachmentState.alphaBlendState.blendMode;\n var blendFuncChanged = currentAttachmentState.rgbBlendState.blendSrcFactor !==\n newAttachmentState.rgbBlendState.blendSrcFactor ||\n currentAttachmentState.alphaBlendState.blendSrcFactor !==\n newAttachmentState.alphaBlendState.blendSrcFactor ||\n currentAttachmentState.rgbBlendState.blendDstFactor !==\n newAttachmentState.rgbBlendState.blendDstFactor ||\n currentAttachmentState.alphaBlendState.blendDstFactor !==\n newAttachmentState.alphaBlendState.blendDstFactor;\n if (blendFuncChanged || blendModeChanged) {\n if (isBlendStateNone(currentAttachmentState.rgbBlendState) &&\n isBlendStateNone(currentAttachmentState.alphaBlendState))\n dbi.enableiOES(i, gl.BLEND);\n else if (isBlendStateNone(newAttachmentState.rgbBlendState) &&\n isBlendStateNone(newAttachmentState.alphaBlendState))\n dbi.disableiOES(i, gl.BLEND);\n }\n if (blendModeChanged) {\n dbi.blendEquationSeparateiOES(i, newAttachmentState.rgbBlendState.blendMode, newAttachmentState.alphaBlendState.blendMode);\n currentAttachmentState.rgbBlendState.blendMode =\n newAttachmentState.rgbBlendState.blendMode;\n currentAttachmentState.alphaBlendState.blendMode =\n newAttachmentState.alphaBlendState.blendMode;\n }\n if (blendFuncChanged) {\n dbi.blendFuncSeparateiOES(i, newAttachmentState.rgbBlendState.blendSrcFactor, newAttachmentState.rgbBlendState.blendDstFactor, newAttachmentState.alphaBlendState.blendSrcFactor, newAttachmentState.alphaBlendState.blendDstFactor);\n currentAttachmentState.rgbBlendState.blendSrcFactor =\n newAttachmentState.rgbBlendState.blendSrcFactor;\n currentAttachmentState.alphaBlendState.blendSrcFactor =\n newAttachmentState.alphaBlendState.blendSrcFactor;\n currentAttachmentState.rgbBlendState.blendDstFactor =\n newAttachmentState.rgbBlendState.blendDstFactor;\n currentAttachmentState.alphaBlendState.blendDstFactor =\n newAttachmentState.alphaBlendState.blendDstFactor;\n }\n };\n Device_GL.prototype.applyAttachmentState = function (currentAttachmentState, newAttachmentState) {\n var gl = this.gl;\n if (currentAttachmentState.channelWriteMask !==\n newAttachmentState.channelWriteMask) {\n gl.colorMask(!!(newAttachmentState.channelWriteMask & ChannelWriteMask.RED), !!(newAttachmentState.channelWriteMask & ChannelWriteMask.GREEN), !!(newAttachmentState.channelWriteMask & ChannelWriteMask.BLUE), !!(newAttachmentState.channelWriteMask & ChannelWriteMask.ALPHA));\n currentAttachmentState.channelWriteMask =\n newAttachmentState.channelWriteMask;\n }\n var blendModeChanged = currentAttachmentState.rgbBlendState.blendMode !==\n newAttachmentState.rgbBlendState.blendMode ||\n currentAttachmentState.alphaBlendState.blendMode !==\n newAttachmentState.alphaBlendState.blendMode;\n var blendFuncChanged = currentAttachmentState.rgbBlendState.blendSrcFactor !==\n newAttachmentState.rgbBlendState.blendSrcFactor ||\n currentAttachmentState.alphaBlendState.blendSrcFactor !==\n newAttachmentState.alphaBlendState.blendSrcFactor ||\n currentAttachmentState.rgbBlendState.blendDstFactor !==\n newAttachmentState.rgbBlendState.blendDstFactor ||\n currentAttachmentState.alphaBlendState.blendDstFactor !==\n newAttachmentState.alphaBlendState.blendDstFactor;\n if (blendFuncChanged || blendModeChanged) {\n if (isBlendStateNone(currentAttachmentState.rgbBlendState) &&\n isBlendStateNone(currentAttachmentState.alphaBlendState)) {\n gl.enable(gl.BLEND);\n }\n else if (isBlendStateNone(newAttachmentState.rgbBlendState) &&\n isBlendStateNone(newAttachmentState.alphaBlendState)) {\n gl.disable(gl.BLEND);\n }\n }\n if (blendModeChanged) {\n gl.blendEquationSeparate(newAttachmentState.rgbBlendState.blendMode, newAttachmentState.alphaBlendState.blendMode);\n currentAttachmentState.rgbBlendState.blendMode =\n newAttachmentState.rgbBlendState.blendMode;\n currentAttachmentState.alphaBlendState.blendMode =\n newAttachmentState.alphaBlendState.blendMode;\n }\n if (blendFuncChanged) {\n gl.blendFuncSeparate(newAttachmentState.rgbBlendState.blendSrcFactor, newAttachmentState.rgbBlendState.blendDstFactor, newAttachmentState.alphaBlendState.blendSrcFactor, newAttachmentState.alphaBlendState.blendDstFactor);\n currentAttachmentState.rgbBlendState.blendSrcFactor =\n newAttachmentState.rgbBlendState.blendSrcFactor;\n currentAttachmentState.alphaBlendState.blendSrcFactor =\n newAttachmentState.alphaBlendState.blendSrcFactor;\n currentAttachmentState.rgbBlendState.blendDstFactor =\n newAttachmentState.rgbBlendState.blendDstFactor;\n currentAttachmentState.alphaBlendState.blendDstFactor =\n newAttachmentState.alphaBlendState.blendDstFactor;\n }\n };\n Device_GL.prototype.setMegaState = function (newMegaState) {\n var gl = this.gl;\n var currentMegaState = this.currentMegaState;\n if (this.OES_draw_buffers_indexed !== null) {\n for (var i = 0; i < newMegaState.attachmentsState.length; i++)\n this.applyAttachmentStateIndexed(i, currentMegaState.attachmentsState[0], newMegaState.attachmentsState[0]);\n }\n else {\n assert(newMegaState.attachmentsState.length === 1);\n this.applyAttachmentState(currentMegaState.attachmentsState[0], newMegaState.attachmentsState[0]);\n }\n if (!colorEqual(currentMegaState.blendConstant, newMegaState.blendConstant)) {\n gl.blendColor(newMegaState.blendConstant.r, newMegaState.blendConstant.g, newMegaState.blendConstant.b, newMegaState.blendConstant.a);\n colorCopy(currentMegaState.blendConstant, newMegaState.blendConstant);\n }\n if (currentMegaState.depthCompare !== newMegaState.depthCompare) {\n gl.depthFunc(newMegaState.depthCompare);\n currentMegaState.depthCompare = newMegaState.depthCompare;\n }\n if (!!currentMegaState.depthWrite !== !!newMegaState.depthWrite) {\n gl.depthMask(newMegaState.depthWrite);\n currentMegaState.depthWrite = newMegaState.depthWrite;\n }\n if (!!currentMegaState.stencilWrite !== !!newMegaState.stencilWrite) {\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/stencilMask\n gl.stencilMask(newMegaState.stencilWrite ? 0xff : 0x00);\n currentMegaState.stencilWrite = newMegaState.stencilWrite;\n }\n var shouldApplyStencil = false;\n if (!stencilFaceStateEquals(currentMegaState.stencilFront, newMegaState.stencilFront)) {\n shouldApplyStencil = true;\n var _a = newMegaState.stencilFront, passOp = _a.passOp, failOp = _a.failOp, depthFailOp = _a.depthFailOp, compare = _a.compare;\n if (currentMegaState.stencilFront.passOp !== passOp ||\n currentMegaState.stencilFront.failOp !== failOp ||\n currentMegaState.stencilFront.depthFailOp !== depthFailOp) {\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/stencilOpSeparate\n gl.stencilOpSeparate(gl.FRONT, failOp, depthFailOp, passOp);\n currentMegaState.stencilFront.passOp = passOp;\n currentMegaState.stencilFront.failOp = failOp;\n currentMegaState.stencilFront.depthFailOp = depthFailOp;\n }\n if (currentMegaState.stencilFront.compare !== compare) {\n this.setStencilReference(0);\n currentMegaState.stencilFront.compare = compare;\n }\n }\n if (!stencilFaceStateEquals(currentMegaState.stencilBack, newMegaState.stencilBack)) {\n shouldApplyStencil = true;\n var _b = newMegaState.stencilBack, passOp = _b.passOp, failOp = _b.failOp, depthFailOp = _b.depthFailOp, compare = _b.compare;\n if (currentMegaState.stencilBack.passOp !== passOp ||\n currentMegaState.stencilBack.failOp !== failOp ||\n currentMegaState.stencilBack.depthFailOp !== depthFailOp) {\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/stencilOpSeparate\n gl.stencilOpSeparate(gl.BACK, failOp, depthFailOp, passOp);\n currentMegaState.stencilBack.passOp = passOp;\n currentMegaState.stencilBack.failOp = failOp;\n currentMegaState.stencilBack.depthFailOp = depthFailOp;\n }\n if (currentMegaState.stencilBack.compare !== compare) {\n this.setStencilReference(0);\n currentMegaState.stencilBack.compare = compare;\n }\n }\n if (currentMegaState.stencilFront.mask !== newMegaState.stencilFront.mask ||\n currentMegaState.stencilBack.mask !== newMegaState.stencilBack.mask) {\n shouldApplyStencil = true;\n currentMegaState.stencilFront.mask = newMegaState.stencilFront.mask;\n currentMegaState.stencilBack.mask = newMegaState.stencilBack.mask;\n }\n if (shouldApplyStencil) {\n this.applyStencil();\n }\n if (currentMegaState.cullMode !== newMegaState.cullMode) {\n if (currentMegaState.cullMode === CullMode.NONE) {\n gl.enable(gl.CULL_FACE);\n }\n else if (newMegaState.cullMode === CullMode.NONE) {\n gl.disable(gl.CULL_FACE);\n }\n if (newMegaState.cullMode === CullMode.BACK) {\n gl.cullFace(gl.BACK);\n }\n else if (newMegaState.cullMode === CullMode.FRONT) {\n gl.cullFace(gl.FRONT);\n }\n else if (newMegaState.cullMode === CullMode.FRONT_AND_BACK) {\n gl.cullFace(gl.FRONT_AND_BACK);\n }\n currentMegaState.cullMode = newMegaState.cullMode;\n }\n if (currentMegaState.frontFace !== newMegaState.frontFace) {\n gl.frontFace(newMegaState.frontFace);\n currentMegaState.frontFace = newMegaState.frontFace;\n }\n if (currentMegaState.polygonOffset !== newMegaState.polygonOffset) {\n if (newMegaState.polygonOffset) {\n gl.enable(gl.POLYGON_OFFSET_FILL);\n }\n else {\n gl.disable(gl.POLYGON_OFFSET_FILL);\n }\n currentMegaState.polygonOffset = newMegaState.polygonOffset;\n }\n if (currentMegaState.polygonOffsetFactor !==\n newMegaState.polygonOffsetFactor ||\n currentMegaState.polygonOffsetUnits !== newMegaState.polygonOffsetUnits) {\n gl.polygonOffset(newMegaState.polygonOffsetFactor, newMegaState.polygonOffsetUnits);\n currentMegaState.polygonOffsetFactor = newMegaState.polygonOffsetFactor;\n currentMegaState.polygonOffsetUnits = newMegaState.polygonOffsetUnits;\n }\n };\n Device_GL.prototype.validatePipelineFormats = function (pipeline) {\n for (var i = 0; i < this.currentColorAttachments.length; i++) {\n var attachment = this.currentColorAttachments[i];\n if (attachment === null)\n continue;\n // assert(attachment.format === pipeline.colorAttachmentFormats[i]);\n }\n if (this.currentDepthStencilAttachment) {\n assert(this.currentDepthStencilAttachment.format ===\n pipeline.depthStencilAttachmentFormat);\n }\n if (this.currentSampleCount !== -1) {\n assert(this.currentSampleCount === pipeline.sampleCount);\n }\n };\n Device_GL.prototype.setPipeline = function (o) {\n var _this = this;\n if (this.renderBundle) {\n this.renderBundle.push(function () { return _this.setPipeline(o); });\n return;\n }\n this.currentPipeline = o;\n this.validatePipelineFormats(this.currentPipeline);\n // We allow users to use \"non-ready\" pipelines for emergencies. In this case, there can be a bit of stuttering.\n // assert(this.queryPipelineReady(this.currentPipeline));\n this.setMegaState(this.currentPipeline.megaState);\n var program = this.currentPipeline.program;\n this.useProgram(program);\n if (program.compileState === ProgramCompileState_GL.NeedsBind) {\n var gl = this.gl;\n var prog = program.gl_program;\n var deviceProgram = program.descriptor;\n var uniformBlocks = findall(deviceProgram.vertex.glsl, UNIFROM_BLOCK_REGEXP);\n if (isWebGL2(gl)) {\n for (var i = 0; i < uniformBlocks.length; i++) {\n var _a = __read(uniformBlocks[i], 2), blockName = _a[1];\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/getUniformBlockIndex\n var blockIdx = gl.getUniformBlockIndex(prog, blockName);\n if (blockIdx !== -1 && blockIdx !== 0xffffffff) {\n // @see https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/uniformBlockBinding\n gl.uniformBlockBinding(prog, blockIdx, i);\n }\n }\n }\n var samplers = findall(deviceProgram.fragment.glsl, /^uniform .*sampler\\S+ (\\w+);\\s* \\/\\/ BINDING=(\\d+)$/gm);\n for (var i = 0; i < samplers.length; i++) {\n var _b = __read(samplers[i], 3), name_1 = _b[1], location_1 = _b[2];\n var samplerUniformLocation = gl.getUniformLocation(prog, name_1);\n gl.uniform1i(samplerUniformLocation, parseInt(location_1));\n }\n program.compileState = ProgramCompileState_GL.ReadyToUse;\n }\n };\n Device_GL.prototype.setVertexInput = function (inputLayout_, vertexBuffers, indexBuffer) {\n var e_1, _a;\n var _this = this;\n var _b;\n if (this.renderBundle) {\n this.renderBundle.push(function () {\n return _this.setVertexInput(inputLayout_, vertexBuffers, indexBuffer);\n });\n return;\n }\n if (inputLayout_ !== null) {\n assert(this.currentPipeline.inputLayout === inputLayout_);\n var inputLayout = inputLayout_;\n this.bindVAO(inputLayout.vao);\n var gl = this.gl;\n for (var i = 0; i < inputLayout.vertexBufferDescriptors.length; i++) {\n var vertexBufferDescriptor = inputLayout.vertexBufferDescriptors[i];\n var arrayStride = vertexBufferDescriptor.arrayStride, attributes = vertexBufferDescriptor.attributes;\n try {\n for (var attributes_1 = (e_1 = void 0, __values(attributes)), attributes_1_1 = attributes_1.next(); !attributes_1_1.done; attributes_1_1 = attributes_1.next()) {\n var attribute = attributes_1_1.value;\n var shaderLocation = attribute.shaderLocation, offset = attribute.offset;\n // find location by name in WebGL1\n var location_2 = isWebGL2(gl)\n ? shaderLocation\n : (_b = inputLayout.program.attributes[shaderLocation]) === null || _b === void 0 ? void 0 : _b.location;\n if (!isNil(location_2)) {\n var vertexBuffer = vertexBuffers[i];\n if (vertexBuffer === null)\n continue;\n // @ts-ignore\n var format = attribute.vertexFormat;\n gl.bindBuffer(gl.ARRAY_BUFFER, getPlatformBuffer$1(vertexBuffer.buffer));\n var bufferOffset = (vertexBuffer.offset || 0) + offset;\n gl.vertexAttribPointer(location_2, format.size, format.type, format.normalized, arrayStride, bufferOffset);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (attributes_1_1 && !attributes_1_1.done && (_a = attributes_1.return)) _a.call(attributes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n assert((indexBuffer !== null) === (inputLayout.indexBufferFormat !== null));\n if (indexBuffer !== null) {\n var buffer = indexBuffer.buffer;\n assert(buffer.usage === BufferUsage.INDEX);\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, getPlatformBuffer$1(buffer));\n this.currentIndexBufferByteOffset = indexBuffer.offset || 0;\n }\n else {\n this.currentIndexBufferByteOffset = null;\n }\n }\n else {\n assert(this.currentPipeline.inputLayout === null);\n assert(indexBuffer === null);\n this.bindVAO(null);\n this.currentIndexBufferByteOffset = 0;\n }\n };\n Device_GL.prototype.setStencilReference = function (value) {\n if (this.currentStencilRef === value) {\n return;\n }\n this.currentStencilRef = value;\n this.applyStencil();\n };\n /**\n * @see https://www.w3.org/TR/webgpu/#dom-gpurendercommandsmixin-draw\n */\n Device_GL.prototype.draw = function (vertexCount, instanceCount, firstVertex, firstInstance) {\n var _a;\n var _this = this;\n if (this.renderBundle) {\n this.renderBundle.push(function () {\n return _this.draw(vertexCount, instanceCount, firstVertex, firstInstance);\n });\n return;\n }\n var gl = this.gl;\n var pipeline = this.currentPipeline;\n if (instanceCount) {\n var params = [\n pipeline.drawMode,\n firstVertex || 0,\n vertexCount,\n instanceCount,\n ];\n if (isWebGL2(gl)) {\n gl.drawArraysInstanced.apply(gl, __spreadArray([], __read(params), false));\n }\n else {\n (_a = this.ANGLE_instanced_arrays).drawArraysInstancedANGLE.apply(_a, __spreadArray([], __read(params), false));\n }\n }\n else {\n gl.drawArrays(pipeline.drawMode, firstVertex, vertexCount);\n }\n this.debugGroupStatisticsDrawCall();\n this.debugGroupStatisticsTriangles((vertexCount / 3) * Math.max(instanceCount, 1));\n };\n /**\n * @see https://www.w3.org/TR/webgpu/#dom-gpurendercommandsmixin-drawindexed\n */\n Device_GL.prototype.drawIndexed = function (indexCount, instanceCount, firstIndex, baseVertex, firstInstance) {\n var _a;\n var _this = this;\n if (this.renderBundle) {\n this.renderBundle.push(function () {\n return _this.drawIndexed(indexCount, instanceCount, firstIndex, baseVertex, firstInstance);\n });\n return;\n }\n var gl = this.gl;\n var pipeline = this.currentPipeline, inputLayout = assertExists(pipeline.inputLayout);\n var byteOffset = assertExists(this.currentIndexBufferByteOffset) +\n firstIndex * inputLayout.indexBufferCompByteSize;\n if (instanceCount) {\n var params = [\n pipeline.drawMode,\n indexCount,\n inputLayout.indexBufferType,\n byteOffset,\n instanceCount,\n ];\n if (isWebGL2(gl)) {\n gl.drawElementsInstanced.apply(gl, __spreadArray([], __read(params), false));\n }\n else {\n (_a = this.ANGLE_instanced_arrays).drawElementsInstancedANGLE.apply(_a, __spreadArray([], __read(params), false));\n }\n }\n else {\n gl.drawElements(pipeline.drawMode, indexCount, inputLayout.indexBufferType, byteOffset);\n }\n this.debugGroupStatisticsDrawCall();\n this.debugGroupStatisticsTriangles((indexCount / 3) * Math.max(instanceCount, 1));\n };\n /**\n * @see https://www.w3.org/TR/webgpu/#dom-gpurendercommandsmixin-drawindirect\n */\n Device_GL.prototype.drawIndirect = function (indirectBuffer, indirectOffset) { };\n Device_GL.prototype.drawIndexedIndirect = function (indirectBuffer, indirectOffset) { };\n Device_GL.prototype.beginOcclusionQuery = function (queryIndex) {\n var gl = this.gl;\n if (isWebGL2(gl)) {\n var queryPool = this.currentRenderPassDescriptor\n .occlusionQueryPool;\n gl.beginQuery(queryPool.gl_query_type, queryPool.gl_query[queryIndex]);\n }\n };\n Device_GL.prototype.endOcclusionQuery = function () {\n var gl = this.gl;\n if (isWebGL2(gl)) {\n var queryPool = this.currentRenderPassDescriptor\n .occlusionQueryPool;\n gl.endQuery(queryPool.gl_query_type);\n }\n };\n Device_GL.prototype.pipelineQueryReady = function (o) {\n var pipeline = o;\n return this.queryProgramReady(pipeline.program);\n };\n Device_GL.prototype.pipelineForceReady = function (o) {\n // No need to do anything; it will be forced to compile when used naturally.\n };\n Device_GL.prototype.endPass = function () {\n var gl = this.gl;\n var gl2 = isWebGL2(gl);\n var skipBlit = this.currentColorResolveTos.length === 1 &&\n this.currentColorResolveTos[0] === this.scTexture;\n var didUnbindDraw = false;\n for (var i = 0; i < this.currentColorAttachments.length; i++) {\n var colorResolveFrom = this.currentColorAttachments[i];\n if (colorResolveFrom !== null) {\n var colorResolveTo = this.currentColorResolveTos[i];\n var didBindRead = false;\n if (colorResolveTo !== null) {\n assert(colorResolveFrom.width === colorResolveTo.width &&\n colorResolveFrom.height === colorResolveTo.height);\n // assert(colorResolveFrom.format === colorResolveTo.format);\n this.setScissorRectEnabled(false);\n if (!skipBlit) {\n if (gl2) {\n gl.bindFramebuffer(gl.READ_FRAMEBUFFER, this.resolveColorReadFramebuffer);\n }\n if (this.resolveColorAttachmentsChanged) {\n if (gl2) {\n this.bindFramebufferAttachment(gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, colorResolveFrom, this.currentColorAttachmentLevels[i]);\n }\n }\n }\n didBindRead = true;\n if (!skipBlit) {\n // Special case: Blitting to the on-screen.\n if (colorResolveTo === this.scTexture) {\n gl.bindFramebuffer(gl2 ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER, this.scPlatformFramebuffer);\n }\n else {\n gl.bindFramebuffer(gl2 ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER, this.resolveColorDrawFramebuffer);\n if (this.resolveColorAttachmentsChanged)\n gl.framebufferTexture2D(gl2 ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, colorResolveTo.gl_texture, this.currentColorResolveToLevels[i]);\n }\n }\n if (!skipBlit) {\n if (gl2) {\n gl.blitFramebuffer(0, 0, colorResolveFrom.width, colorResolveFrom.height, 0, 0, colorResolveTo.width, colorResolveTo.height, gl.COLOR_BUFFER_BIT, gl.LINEAR);\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null);\n }\n else {\n // need an extra render pass in WebGL1\n this.submitBlitRenderPass(colorResolveFrom, colorResolveTo);\n }\n }\n didUnbindDraw = true;\n }\n if (!this.currentRenderPassDescriptor.colorStore[i]) {\n if (!skipBlit && !didBindRead) {\n gl.bindFramebuffer(gl2 ? GL.READ_FRAMEBUFFER : GL.FRAMEBUFFER, this.resolveColorReadFramebuffer);\n if (this.resolveColorAttachmentsChanged)\n this.bindFramebufferAttachment(gl2 ? GL.READ_FRAMEBUFFER : GL.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, colorResolveFrom, this.currentColorAttachmentLevels[i]);\n }\n // if (gl2) {\n // gl.invalidateFramebuffer(gl.READ_FRAMEBUFFER, [\n // gl.COLOR_ATTACHMENT0,\n // ]);\n // }\n }\n if (!skipBlit) {\n gl.bindFramebuffer(gl2 ? GL.READ_FRAMEBUFFER : GL.FRAMEBUFFER, null);\n }\n }\n }\n this.resolveColorAttachmentsChanged = false;\n var depthStencilResolveFrom = this.currentDepthStencilAttachment;\n if (depthStencilResolveFrom) {\n var depthStencilResolveTo = this.currentDepthStencilResolveTo;\n var didBindRead = false;\n if (depthStencilResolveTo) {\n assert(depthStencilResolveFrom.width === depthStencilResolveTo.width &&\n depthStencilResolveFrom.height === depthStencilResolveTo.height);\n this.setScissorRectEnabled(false);\n if (!skipBlit) {\n gl.bindFramebuffer(gl2 ? GL.READ_FRAMEBUFFER : GL.FRAMEBUFFER, this.resolveDepthStencilReadFramebuffer);\n gl.bindFramebuffer(gl2 ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER, this.resolveDepthStencilDrawFramebuffer);\n if (this.resolveDepthStencilAttachmentsChanged) {\n this.bindFramebufferDepthStencilAttachment(gl2 ? GL.READ_FRAMEBUFFER : GL.FRAMEBUFFER, depthStencilResolveFrom);\n this.bindFramebufferDepthStencilAttachment(gl2 ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER, depthStencilResolveTo);\n }\n }\n didBindRead = true;\n if (!skipBlit) {\n if (gl2) {\n gl.blitFramebuffer(0, 0, depthStencilResolveFrom.width, depthStencilResolveFrom.height, 0, 0, depthStencilResolveTo.width, depthStencilResolveTo.height, gl.DEPTH_BUFFER_BIT, gl.NEAREST);\n }\n gl.bindFramebuffer(gl2 ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER, null);\n }\n didUnbindDraw = true;\n }\n if (!skipBlit && !this.currentRenderPassDescriptor.depthStencilStore) {\n if (!didBindRead) {\n gl.bindFramebuffer(gl2 ? GL.READ_FRAMEBUFFER : GL.FRAMEBUFFER, this.resolveDepthStencilReadFramebuffer);\n if (this.resolveDepthStencilAttachmentsChanged)\n this.bindFramebufferDepthStencilAttachment(gl2 ? GL.READ_FRAMEBUFFER : GL.FRAMEBUFFER, depthStencilResolveFrom);\n didBindRead = true;\n }\n if (gl2) {\n gl.invalidateFramebuffer(gl.READ_FRAMEBUFFER, [\n gl.DEPTH_STENCIL_ATTACHMENT,\n ]);\n }\n }\n if (!skipBlit && didBindRead)\n gl.bindFramebuffer(gl2 ? GL.READ_FRAMEBUFFER : GL.FRAMEBUFFER, null);\n this.resolveDepthStencilAttachmentsChanged = false;\n }\n if (!skipBlit && !didUnbindDraw) {\n // If we did not unbind from a resolve, then we need to unbind our render pass draw FBO here.\n gl.bindFramebuffer(gl2 ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER, null);\n }\n };\n Device_GL.prototype.setScissorRectEnabled = function (v) {\n if (this.currentScissorEnabled === v) {\n return;\n }\n var gl = this.gl;\n if (v) {\n gl.enable(gl.SCISSOR_TEST);\n }\n else {\n gl.disable(gl.SCISSOR_TEST);\n }\n this.currentScissorEnabled = v;\n };\n Device_GL.prototype.applyStencil = function () {\n if (isNil(this.currentStencilRef)) {\n return;\n }\n this.gl.stencilFuncSeparate(GL.FRONT, this.currentMegaState.stencilFront.compare, this.currentStencilRef, this.currentMegaState.stencilFront.mask || 0xff);\n this.gl.stencilFuncSeparate(GL.BACK, this.currentMegaState.stencilBack.compare, this.currentStencilRef, this.currentMegaState.stencilBack.mask || 0xff);\n };\n Device_GL.prototype.getFallbackTexture = function (samplerEntry) {\n var gl_target = samplerEntry.gl_target, formatKind = samplerEntry.formatKind;\n if (gl_target === GL.TEXTURE_2D)\n return formatKind === SamplerFormatKind.Depth\n ? this.fallbackTexture2DDepth\n : this.fallbackTexture2D;\n else if (gl_target === GL.TEXTURE_2D_ARRAY)\n return this.fallbackTexture2DArray;\n else if (gl_target === GL.TEXTURE_3D)\n return this.fallbackTexture3D;\n else if (gl_target === GL.TEXTURE_CUBE_MAP)\n return this.fallbackTextureCube;\n else\n throw new Error('whoops');\n };\n Device_GL.prototype.submitBlitRenderPass = function (resolveFrom, resolveTo) {\n if (!this.blitRenderPipeline) {\n this.blitProgram = this.createProgram({\n vertex: {\n glsl: \"layout(location = 0) in vec2 a_Position;\\nout vec2 v_TexCoord;\\nvoid main() {\\n v_TexCoord = 0.5 * (a_Position + 1.0);\\n gl_Position = vec4(a_Position, 0., 1.);\\n\\n #ifdef VIEWPORT_ORIGIN_TL\\n v_TexCoord.y = 1.0 - v_TexCoord.y;\\n #endif\\n}\",\n },\n fragment: {\n glsl: \"uniform sampler2D u_Texture;\\nin vec2 v_TexCoord;\\nout vec4 outputColor;\\nvoid main() {\\n outputColor = texture(SAMPLER_2D(u_Texture), v_TexCoord);\\n}\",\n },\n });\n this.blitVertexBuffer = this.createBuffer({\n usage: BufferUsage.VERTEX | BufferUsage.COPY_DST,\n viewOrSize: new Float32Array([-4, -4, 4, -4, 0, 4]),\n });\n this.blitInputLayout = this.createInputLayout({\n vertexBufferDescriptors: [\n {\n arrayStride: 4 * 2,\n stepMode: VertexStepMode.VERTEX,\n attributes: [\n {\n format: Format.F32_RG,\n offset: 4 * 0,\n shaderLocation: 0,\n },\n ],\n },\n ],\n indexBufferFormat: null,\n program: this.blitProgram,\n });\n this.blitRenderPipeline = this.createRenderPipeline({\n topology: PrimitiveTopology.TRIANGLES,\n sampleCount: 1,\n program: this.blitProgram,\n colorAttachmentFormats: [Format.U8_RGBA_RT],\n depthStencilAttachmentFormat: null,\n inputLayout: this.blitInputLayout,\n megaStateDescriptor: copyMegaState(defaultMegaState),\n });\n this.blitBindings = this.createBindings({\n samplerBindings: [\n {\n sampler: null,\n texture: resolveFrom.texture,\n },\n ],\n uniformBufferBindings: [],\n });\n this.blitProgram.setUniformsLegacy({\n u_Texture: resolveFrom,\n });\n }\n // save currentRenderPassDescriptor since we're already in a render pass\n var currentRenderPassDescriptor = this.currentRenderPassDescriptor;\n this.currentRenderPassDescriptor = null;\n this.inBlitRenderPass = true;\n var blitRenderPass = this.createRenderPass({\n colorAttachment: [resolveFrom],\n colorResolveTo: [resolveTo],\n colorClearColor: [TransparentWhite],\n });\n var _a = this.getCanvas(), width = _a.width, height = _a.height;\n blitRenderPass.setPipeline(this.blitRenderPipeline);\n blitRenderPass.setBindings(this.blitBindings);\n blitRenderPass.setVertexInput(this.blitInputLayout, [{ buffer: this.blitVertexBuffer }], null);\n blitRenderPass.setViewport(0, 0, width, height);\n // disable blending for blit\n this.gl.disable(this.gl.BLEND);\n blitRenderPass.draw(3, 0);\n this.gl.enable(this.gl.BLEND);\n // restore\n this.currentRenderPassDescriptor = currentRenderPassDescriptor;\n this.inBlitRenderPass = false;\n };\n return Device_GL;\n}());\n\nvar WebGLDeviceContribution = /** @class */ (function () {\n function WebGLDeviceContribution(pluginOptions) {\n this.pluginOptions = pluginOptions;\n }\n WebGLDeviceContribution.prototype.createSwapChain = function ($canvas) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, targets, xrCompatible, _b, antialias, _c, preserveDrawingBuffer, _d, premultipliedAlpha, shaderDebug, trackResources, options, gl;\n return __generator(this, function (_e) {\n _a = this.pluginOptions, targets = _a.targets, xrCompatible = _a.xrCompatible, _b = _a.antialias, antialias = _b === void 0 ? false : _b, _c = _a.preserveDrawingBuffer, preserveDrawingBuffer = _c === void 0 ? false : _c, _d = _a.premultipliedAlpha, premultipliedAlpha = _d === void 0 ? true : _d, shaderDebug = _a.shaderDebug, trackResources = _a.trackResources;\n options = {\n // alpha: true,\n antialias: antialias,\n // @see https://stackoverflow.com/questions/27746091/preservedrawingbuffer-false-is-it-worth-the-effort\n preserveDrawingBuffer: preserveDrawingBuffer,\n // @see https://webglfundamentals.org/webgl/lessons/webgl-qna-how-to-use-the-stencil-buffer.html\n stencil: true,\n // @see https://webglfundamentals.org/webgl/lessons/webgl-and-alpha.html\n premultipliedAlpha: premultipliedAlpha,\n xrCompatible: xrCompatible,\n };\n this.handleContextEvents($canvas);\n if (targets.includes('webgl2')) {\n gl =\n $canvas.getContext('webgl2', options) ||\n $canvas.getContext('experimental-webgl2', options);\n }\n if (!gl && targets.includes('webgl1')) {\n gl =\n $canvas.getContext('webgl', options) ||\n $canvas.getContext('experimental-webgl', options);\n }\n return [2 /*return*/, new Device_GL(gl, {\n shaderDebug: shaderDebug,\n trackResources: trackResources,\n })];\n });\n });\n };\n WebGLDeviceContribution.prototype.handleContextEvents = function ($canvas) {\n var _a = this.pluginOptions, onContextLost = _a.onContextLost, onContextRestored = _a.onContextRestored, onContextCreationError = _a.onContextCreationError;\n // bind context event listeners\n if (onContextCreationError) {\n // @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/webglcontextcreationerror_event\n $canvas.addEventListener('webglcontextcreationerror', onContextCreationError, false);\n }\n if (onContextLost) {\n $canvas.addEventListener('webglcontextlost', onContextLost, false);\n }\n if (onContextRestored) {\n $canvas.addEventListener('webglcontextrestored', onContextRestored, false);\n }\n };\n return WebGLDeviceContribution;\n}());\n\nlet wasm;\n\nconst cachedTextDecoder =\n typeof TextDecoder !== 'undefined'\n ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true })\n : {\n decode: () => {\n throw Error('TextDecoder not available');\n },\n };\n\nif (typeof TextDecoder !== 'undefined') {\n cachedTextDecoder.decode();\n}\n\nlet cachedUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) {\n cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nconst heap = new Array(128).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nlet heap_next = heap.length;\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction getObject(idx) {\n return heap[idx];\n}\n\nfunction dropObject(idx) {\n if (idx < 132) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst cachedTextEncoder =\n typeof TextEncoder !== 'undefined'\n ? new TextEncoder('utf-8')\n : {\n encode: () => {\n throw Error('TextEncoder not available');\n },\n };\n\nconst encodeString =\n typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n }\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length,\n };\n };\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8Memory0()\n .subarray(ptr, ptr + buf.length)\n .set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7f) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, (len = offset + arg.length * 3), 1) >>> 0;\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachedInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) {\n cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachedInt32Memory0;\n}\n/**\n * @param {string} source\n * @param {string} stage\n * @param {boolean} validation_enabled\n * @returns {string}\n */\nfunction glsl_compile(source, stage, validation_enabled) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(\n source,\n wasm.__wbindgen_malloc,\n wasm.__wbindgen_realloc,\n );\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(\n stage,\n wasm.__wbindgen_malloc,\n wasm.__wbindgen_realloc,\n );\n const len1 = WASM_VECTOR_LEN;\n wasm.glsl_compile(retptr, ptr0, len0, ptr1, len1, validation_enabled);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n deferred3_0 = r0;\n deferred3_1 = r1;\n return getStringFromWasm0(r0, r1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n}\n\n/**\n */\nclass WGSLComposer {\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(WGSLComposer.prototype);\n obj.__wbg_ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_wgslcomposer_free(ptr);\n }\n /**\n */\n constructor() {\n const ret = wasm.wgslcomposer_new();\n return WGSLComposer.__wrap(ret);\n }\n /**\n * @param {string} source\n */\n load_composable(source) {\n const ptr0 = passStringToWasm0(\n source,\n wasm.__wbindgen_malloc,\n wasm.__wbindgen_realloc,\n );\n const len0 = WASM_VECTOR_LEN;\n wasm.wgslcomposer_load_composable(this.__wbg_ptr, ptr0, len0);\n }\n /**\n * @param {string} source\n * @returns {string}\n */\n wgsl_compile(source) {\n let deferred2_0;\n let deferred2_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(\n source,\n wasm.__wbindgen_malloc,\n wasm.__wbindgen_realloc,\n );\n const len0 = WASM_VECTOR_LEN;\n wasm.wgslcomposer_wgsl_compile(retptr, this.__wbg_ptr, ptr0, len0);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n deferred2_0 = r0;\n deferred2_1 = r1;\n return getStringFromWasm0(r0, r1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n if (module.headers.get('Content-Type') != 'application/wasm') {\n console.warn(\n '`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n',\n e,\n );\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n}\n\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbindgen_string_new = function (arg0, arg1) {\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_object_drop_ref = function (arg0) {\n takeObject(arg0);\n };\n imports.wbg.__wbg_log_1d3ae0273d8f4f8a = function (arg0) {\n console.log(getObject(arg0));\n };\n imports.wbg.__wbg_log_576ca876af0d4a77 = function (arg0, arg1) {\n console.log(getObject(arg0), getObject(arg1));\n };\n imports.wbg.__wbindgen_throw = function (arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n\n return imports;\n}\n\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedInt32Memory0 = null;\n cachedUint8Memory0 = null;\n\n return wasm;\n}\n\nasync function __wbg_init(input) {\n if (wasm !== undefined) return wasm;\n const imports = __wbg_get_imports();\n\n if (\n typeof input === 'string' ||\n (typeof Request === 'function' && input instanceof Request) ||\n (typeof URL === 'function' && input instanceof URL)\n ) {\n input = fetch(input);\n }\n\n const { instance, module } = await __wbg_load(await input, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\n/**\n * @see https://github.com/gpuweb/cts/blob/main/src/webgpu/constants.ts\n */\nvar GPUTextureUsage$1;\n(function (GPUTextureUsage) {\n GPUTextureUsage[GPUTextureUsage[\"COPY_SRC\"] = 1] = \"COPY_SRC\";\n GPUTextureUsage[GPUTextureUsage[\"COPY_DST\"] = 2] = \"COPY_DST\";\n GPUTextureUsage[GPUTextureUsage[\"TEXTURE_BINDING\"] = 4] = \"TEXTURE_BINDING\";\n // SAMPLED= 0x04,\n GPUTextureUsage[GPUTextureUsage[\"STORAGE_BINDING\"] = 8] = \"STORAGE_BINDING\";\n GPUTextureUsage[GPUTextureUsage[\"STORAGE\"] = 8] = \"STORAGE\";\n GPUTextureUsage[GPUTextureUsage[\"RENDER_ATTACHMENT\"] = 16] = \"RENDER_ATTACHMENT\";\n})(GPUTextureUsage$1 || (GPUTextureUsage$1 = {}));\n// @see https://www.w3.org/TR/webgpu/#typedefdef-gpumapmodeflags\nvar GPUMapMode;\n(function (GPUMapMode) {\n GPUMapMode[GPUMapMode[\"READ\"] = 1] = \"READ\";\n GPUMapMode[GPUMapMode[\"WRITE\"] = 2] = \"WRITE\";\n})(GPUMapMode || (GPUMapMode = {}));\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/GPUTexture/usage#value\n */\nfunction translateTextureUsage(usage) {\n var gpuUsage = 0;\n if (usage & TextureUsage.SAMPLED)\n gpuUsage |=\n GPUTextureUsage$1.TEXTURE_BINDING |\n GPUTextureUsage$1.COPY_DST |\n GPUTextureUsage$1.COPY_SRC;\n if (usage & TextureUsage.STORAGE)\n gpuUsage |=\n GPUTextureUsage$1.TEXTURE_BINDING |\n GPUTextureUsage$1.STORAGE_BINDING |\n GPUTextureUsage$1.COPY_SRC |\n GPUTextureUsage$1.COPY_DST;\n if (usage & TextureUsage.RENDER_TARGET)\n gpuUsage |=\n GPUTextureUsage$1.RENDER_ATTACHMENT |\n GPUTextureUsage$1.TEXTURE_BINDING |\n GPUTextureUsage$1.COPY_SRC |\n GPUTextureUsage$1.COPY_DST;\n return gpuUsage;\n}\n/**\n * @see https://www.w3.org/TR/webgpu/#enumdef-gputextureformat\n */\nfunction translateTextureFormat(format) {\n // 8-bit formats\n if (format === Format.U8_R_NORM)\n return 'r8unorm';\n else if (format === Format.S8_R_NORM)\n return 'r8snorm';\n // 16-bit formats\n else if (format === Format.U8_RG_NORM)\n return 'rg8unorm';\n else if (format === Format.S8_RG_NORM)\n return 'rg8snorm';\n // 32-bit formats\n else if (format === Format.U32_R)\n return 'r32uint';\n else if (format === Format.S32_R)\n return 'r32sint';\n else if (format === Format.F32_R)\n return 'r32float';\n else if (format === Format.U16_RG)\n return 'rg16uint';\n else if (format === Format.S16_RG)\n return 'rg16sint';\n else if (format === Format.F16_RG)\n return 'rg16float';\n else if (format === Format.U8_RGBA_RT)\n return 'bgra8unorm';\n else if (format === Format.U8_RGBA_RT_SRGB)\n return 'bgra8unorm-srgb';\n else if (format === Format.U8_RGBA_NORM)\n return 'rgba8unorm';\n else if (format === Format.U8_RGBA_SRGB)\n return 'rgba8unorm-srgb';\n else if (format === Format.S8_RGBA_NORM)\n return 'rgba8snorm';\n // 64-bit formats\n else if (format === Format.U32_RG)\n return 'rg32uint';\n else if (format === Format.S32_RG)\n return 'rg32sint';\n else if (format === Format.F32_RG)\n return 'rg32float';\n else if (format === Format.U16_RGBA)\n return 'rgba16uint';\n else if (format === Format.S16_RGBA)\n return 'rgba16sint';\n else if (format === Format.F16_RGBA)\n return 'rgba16float';\n // 128-bit formats\n else if (format === Format.F32_RGBA)\n return 'rgba32float';\n else if (format === Format.U32_RGBA)\n return 'rgba32uint';\n else if (format === Format.S32_RGBA)\n return 'rgba32sint';\n // depth stencil formats\n else if (format === Format.D24)\n return 'depth24plus';\n else if (format === Format.D24_S8)\n return 'depth24plus-stencil8';\n else if (format === Format.D32F)\n return 'depth32float';\n else if (format === Format.D32F_S8)\n return 'depth32float-stencil8';\n // bc\n else if (format === Format.BC1)\n return 'bc1-rgba-unorm';\n else if (format === Format.BC1_SRGB)\n return 'bc1-rgba-unorm-srgb';\n else if (format === Format.BC2)\n return 'bc2-rgba-unorm';\n else if (format === Format.BC2_SRGB)\n return 'bc2-rgba-unorm-srgb';\n else if (format === Format.BC3)\n return 'bc3-rgba-unorm';\n else if (format === Format.BC3_SRGB)\n return 'bc3-rgba-unorm-srgb';\n else if (format === Format.BC4_SNORM)\n return 'bc4-r-snorm';\n else if (format === Format.BC4_UNORM)\n return 'bc4-r-unorm';\n else if (format === Format.BC5_SNORM)\n return 'bc5-rg-snorm';\n else if (format === Format.BC5_UNORM)\n return 'bc5-rg-unorm';\n else\n throw 'whoops';\n}\nfunction translateTextureDimension(dimension) {\n if (dimension === TextureDimension.TEXTURE_2D)\n return '2d';\n else if (dimension === TextureDimension.TEXTURE_CUBE_MAP)\n return '2d';\n else if (dimension === TextureDimension.TEXTURE_2D_ARRAY)\n return '2d';\n else if (dimension === TextureDimension.TEXTURE_3D)\n return '3d';\n else\n throw new Error('whoops');\n}\n/**\n * @see https://www.w3.org/TR/webgpu/#enumdef-gputextureviewdimension\n */\nfunction translateTextureViewDimension(dimension) {\n if (dimension === TextureDimension.TEXTURE_2D)\n return '2d';\n else if (dimension === TextureDimension.TEXTURE_CUBE_MAP)\n return 'cube';\n else if (dimension === TextureDimension.TEXTURE_2D_ARRAY)\n return '2d-array';\n else if (dimension === TextureDimension.TEXTURE_3D)\n return '3d';\n else\n throw new Error('whoops');\n}\nfunction translateBufferUsage(usage_) {\n var usage = 0;\n if (usage_ & BufferUsage.INDEX)\n usage |= GPUBufferUsage.INDEX;\n if (usage_ & BufferUsage.VERTEX)\n usage |= GPUBufferUsage.VERTEX;\n if (usage_ & BufferUsage.UNIFORM)\n usage |= GPUBufferUsage.UNIFORM;\n if (usage_ & BufferUsage.STORAGE)\n usage |= GPUBufferUsage.STORAGE;\n if (usage_ & BufferUsage.COPY_SRC)\n usage |= GPUBufferUsage.COPY_SRC;\n if (usage_ & BufferUsage.INDIRECT)\n usage |= GPUBufferUsage.INDIRECT;\n usage |= GPUBufferUsage.COPY_DST;\n return usage;\n}\nfunction translateAddressMode(wrapMode) {\n if (wrapMode === AddressMode.CLAMP_TO_EDGE)\n return 'clamp-to-edge';\n else if (wrapMode === AddressMode.REPEAT)\n return 'repeat';\n else if (wrapMode === AddressMode.MIRRORED_REPEAT)\n return 'mirror-repeat';\n else\n throw new Error('whoops');\n}\nfunction translateMinMagFilter(texFilter) {\n if (texFilter === FilterMode.BILINEAR)\n return 'linear';\n else if (texFilter === FilterMode.POINT)\n return 'nearest';\n else\n throw new Error('whoops');\n}\n// @see https://www.w3.org/TR/webgpu/#enumdef-gpumipmapfiltermode\nfunction translateMipFilter(mipmapFilter) {\n if (mipmapFilter === MipmapFilterMode.LINEAR)\n return 'linear';\n else if (mipmapFilter === MipmapFilterMode.NEAREST)\n return 'nearest';\n else if (mipmapFilter === MipmapFilterMode.NO_MIP)\n return 'nearest';\n else\n throw new Error('whoops');\n}\nfunction getPlatformBuffer(buffer_) {\n var buffer = buffer_;\n return buffer.gpuBuffer;\n}\nfunction getPlatformSampler(sampler_) {\n var sampler = sampler_;\n return sampler.gpuSampler;\n}\nfunction getPlatformQuerySet(queryPool_) {\n var queryPool = queryPool_;\n return queryPool.querySet;\n}\nfunction translateQueryPoolType(type) {\n if (type === QueryPoolType.OcclusionConservative)\n return 'occlusion';\n else\n throw new Error('whoops');\n}\n/**\n * @see https://www.w3.org/TR/webgpu/#primitive-state\n */\nfunction translateTopology(topology) {\n switch (topology) {\n case PrimitiveTopology.TRIANGLES:\n return 'triangle-list';\n case PrimitiveTopology.POINTS:\n return 'point-list';\n case PrimitiveTopology.TRIANGLE_STRIP:\n return 'triangle-strip';\n case PrimitiveTopology.LINES:\n return 'line-list';\n case PrimitiveTopology.LINE_STRIP:\n return 'line-strip';\n default:\n throw new Error('Unknown primitive topology mode');\n }\n}\n/**\n * @see https://www.w3.org/TR/webgpu/#enumdef-gpucullmode\n */\nfunction translateCullMode(cullMode) {\n if (cullMode === CullMode.NONE)\n return 'none';\n else if (cullMode === CullMode.FRONT)\n return 'front';\n else if (cullMode === CullMode.BACK)\n return 'back';\n else\n throw new Error('whoops');\n}\n/**\n * @see https://www.w3.org/TR/webgpu/#enumdef-gpufrontface\n */\nfunction translateFrontFace(frontFaceMode) {\n if (frontFaceMode === FrontFace.CCW)\n return 'ccw';\n else if (frontFaceMode === FrontFace.CW)\n return 'cw';\n else\n throw new Error('whoops');\n}\nfunction translatePrimitiveState(topology, megaStateDescriptor) {\n return {\n topology: translateTopology(topology),\n cullMode: translateCullMode(megaStateDescriptor.cullMode),\n frontFace: translateFrontFace(megaStateDescriptor.frontFace),\n };\n}\n/**\n * @see https://www.w3.org/TR/webgpu/#enumdef-gpublendfactor\n */\nfunction translateBlendFactor(factor) {\n if (factor === BlendFactor.ZERO)\n return 'zero';\n else if (factor === BlendFactor.ONE)\n return 'one';\n else if (factor === BlendFactor.SRC)\n return 'src';\n else if (factor === BlendFactor.ONE_MINUS_SRC)\n return 'one-minus-src';\n else if (factor === BlendFactor.DST)\n return 'dst';\n else if (factor === BlendFactor.ONE_MINUS_DST)\n return 'one-minus-dst';\n else if (factor === BlendFactor.SRC_ALPHA)\n return 'src-alpha';\n else if (factor === BlendFactor.ONE_MINUS_SRC_ALPHA)\n return 'one-minus-src-alpha';\n else if (factor === BlendFactor.DST_ALPHA)\n return 'dst-alpha';\n else if (factor === BlendFactor.ONE_MINUS_DST_ALPHA)\n return 'one-minus-dst-alpha';\n else if (factor === BlendFactor.CONST)\n return 'constant';\n else if (factor === BlendFactor.ONE_MINUS_CONSTANT)\n return 'one-minus-constant';\n else if (factor === BlendFactor.SRC_ALPHA_SATURATE)\n return 'src-alpha-saturated';\n else\n throw new Error('whoops');\n}\n/**\n * @see https://www.w3.org/TR/webgpu/#enumdef-gpublendoperation\n */\nfunction translateBlendMode(mode) {\n if (mode === BlendMode.ADD)\n return 'add';\n else if (mode === BlendMode.SUBSTRACT)\n return 'subtract';\n else if (mode === BlendMode.REVERSE_SUBSTRACT)\n return 'reverse-subtract';\n else if (mode === BlendMode.MIN)\n return 'min';\n else if (mode === BlendMode.MAX)\n return 'max';\n else\n throw new Error('whoops');\n}\nfunction translateBlendComponent(ch) {\n return {\n operation: translateBlendMode(ch.blendMode),\n srcFactor: translateBlendFactor(ch.blendSrcFactor),\n dstFactor: translateBlendFactor(ch.blendDstFactor),\n };\n}\nfunction blendComponentIsNil(ch) {\n return (ch.blendMode === BlendMode.ADD &&\n ch.blendSrcFactor === BlendFactor.ONE &&\n ch.blendDstFactor === BlendFactor.ZERO);\n}\nfunction translateBlendState(attachmentState) {\n if (blendComponentIsNil(attachmentState.rgbBlendState) &&\n blendComponentIsNil(attachmentState.alphaBlendState)) {\n return undefined;\n }\n else {\n return {\n color: translateBlendComponent(attachmentState.rgbBlendState),\n alpha: translateBlendComponent(attachmentState.alphaBlendState),\n };\n }\n}\nfunction translateColorState(attachmentState, format) {\n return {\n format: translateTextureFormat(format),\n blend: translateBlendState(attachmentState),\n writeMask: attachmentState.channelWriteMask,\n };\n}\nfunction translateTargets(colorAttachmentFormats, megaStateDescriptor) {\n return megaStateDescriptor.attachmentsState.map(function (attachmentState, i) {\n return translateColorState(attachmentState, colorAttachmentFormats[i]);\n });\n}\n// @see https://www.w3.org/TR/webgpu/#enumdef-gpucomparefunction\nfunction translateCompareFunction(compareFunction) {\n if (compareFunction === CompareFunction.NEVER)\n return 'never';\n else if (compareFunction === CompareFunction.LESS)\n return 'less';\n else if (compareFunction === CompareFunction.EQUAL)\n return 'equal';\n else if (compareFunction === CompareFunction.LEQUAL)\n return 'less-equal';\n else if (compareFunction === CompareFunction.GREATER)\n return 'greater';\n else if (compareFunction === CompareFunction.NOTEQUAL)\n return 'not-equal';\n else if (compareFunction === CompareFunction.GEQUAL)\n return 'greater-equal';\n else if (compareFunction === CompareFunction.ALWAYS)\n return 'always';\n else\n throw new Error('whoops');\n}\nfunction translateStencilOperation(stencilOp) {\n if (stencilOp === StencilOp.KEEP)\n return 'keep';\n else if (stencilOp === StencilOp.REPLACE)\n return 'replace';\n else if (stencilOp === StencilOp.ZERO)\n return 'zero';\n else if (stencilOp === StencilOp.DECREMENT_CLAMP)\n return 'decrement-clamp';\n else if (stencilOp === StencilOp.DECREMENT_WRAP)\n return 'decrement-wrap';\n else if (stencilOp === StencilOp.INCREMENT_CLAMP)\n return 'increment-clamp';\n else if (stencilOp === StencilOp.INCREMENT_WRAP)\n return 'increment-wrap';\n else if (stencilOp === StencilOp.INVERT)\n return 'invert';\n else\n throw new Error('whoops');\n}\n/**\n * @see https://www.w3.org/TR/webgpu/#dictdef-gpudepthstencilstate\n */\nfunction translateDepthStencilState(format, megaStateDescriptor) {\n if (isNil(format))\n return undefined;\n return {\n /**\n * @see https://www.w3.org/TR/webgpu/#dom-gpudepthstencilstate-format\n */\n format: translateTextureFormat(format),\n depthWriteEnabled: !!megaStateDescriptor.depthWrite,\n depthCompare: translateCompareFunction(megaStateDescriptor.depthCompare),\n depthBias: megaStateDescriptor.polygonOffset\n ? megaStateDescriptor.polygonOffsetUnits\n : 0,\n depthBiasSlopeScale: megaStateDescriptor.polygonOffset\n ? megaStateDescriptor.polygonOffsetFactor\n : 0,\n stencilFront: {\n compare: translateCompareFunction(megaStateDescriptor.stencilFront.compare),\n passOp: translateStencilOperation(megaStateDescriptor.stencilFront.passOp),\n failOp: translateStencilOperation(megaStateDescriptor.stencilFront.failOp),\n depthFailOp: translateStencilOperation(megaStateDescriptor.stencilFront.depthFailOp),\n },\n stencilBack: {\n compare: translateCompareFunction(megaStateDescriptor.stencilBack.compare),\n passOp: translateStencilOperation(megaStateDescriptor.stencilBack.passOp),\n failOp: translateStencilOperation(megaStateDescriptor.stencilBack.failOp),\n depthFailOp: translateStencilOperation(megaStateDescriptor.stencilBack.depthFailOp),\n },\n stencilReadMask: 0xffffffff,\n stencilWriteMask: 0xffffffff,\n // stencilReadMask: 0xffffffff,\n // stencilWriteMask: megaStateDescriptor.stencilWrite ? 0xff : 0x00,\n };\n}\nfunction translateIndexFormat(format) {\n if (format === null)\n return undefined;\n else if (format === Format.U16_R)\n return 'uint16';\n else if (format === Format.U32_R)\n return 'uint32';\n else\n throw new Error('whoops');\n}\nfunction translateVertexStepMode(stepMode) {\n if (stepMode === VertexStepMode.VERTEX)\n return 'vertex';\n else if (stepMode === VertexStepMode.INSTANCE)\n return 'instance';\n else\n throw new Error('whoops');\n}\nfunction translateVertexFormat(format) {\n if (format === Format.U8_R)\n return 'uint8x2';\n else if (format === Format.U8_RG)\n return 'uint8x2';\n else if (format === Format.U8_RGB)\n return 'uint8x4';\n else if (format === Format.U8_RGBA)\n return 'uint8x4';\n else if (format === Format.U8_RG_NORM)\n return 'unorm8x2';\n else if (format === Format.U8_RGBA_NORM)\n return 'unorm8x4';\n else if (format === Format.S8_RGB_NORM)\n return 'snorm8x4';\n else if (format === Format.S8_RGBA_NORM)\n return 'snorm8x4';\n else if (format === Format.U16_RG_NORM)\n return 'unorm16x2';\n else if (format === Format.U16_RGBA_NORM)\n return 'unorm16x4';\n else if (format === Format.S16_RG_NORM)\n return 'snorm16x2';\n else if (format === Format.S16_RGBA_NORM)\n return 'snorm16x4';\n else if (format === Format.S16_RG)\n return 'uint16x2';\n else if (format === Format.F16_RG)\n return 'float16x2';\n else if (format === Format.F16_RGBA)\n return 'float16x4';\n else if (format === Format.F32_R)\n return 'float32';\n else if (format === Format.F32_RG)\n return 'float32x2';\n else if (format === Format.F32_RGB)\n return 'float32x3';\n else if (format === Format.F32_RGBA)\n return 'float32x4';\n else\n throw 'whoops';\n}\nfunction isFormatTextureCompressionBC(format) {\n var formatTypeFlags = getFormatTypeFlags(format);\n switch (formatTypeFlags) {\n case FormatTypeFlags.BC1:\n case FormatTypeFlags.BC2:\n case FormatTypeFlags.BC3:\n case FormatTypeFlags.BC4_SNORM:\n case FormatTypeFlags.BC4_UNORM:\n case FormatTypeFlags.BC5_SNORM:\n case FormatTypeFlags.BC5_UNORM:\n return true;\n default:\n return false;\n }\n}\nfunction getFormatBlockSize(format) {\n var formatTypeFlags = getFormatTypeFlags(format);\n switch (formatTypeFlags) {\n case FormatTypeFlags.BC1:\n case FormatTypeFlags.BC2:\n case FormatTypeFlags.BC3:\n case FormatTypeFlags.BC4_SNORM:\n case FormatTypeFlags.BC4_UNORM:\n case FormatTypeFlags.BC5_SNORM:\n case FormatTypeFlags.BC5_UNORM:\n return 4;\n default:\n return 1;\n }\n}\nfunction allocateAndCopyTypedBuffer(type, sizeOrDstBuffer, sizeInBytes, copyBuffer) {\n if (sizeInBytes === void 0) { sizeInBytes = false; }\n switch (type) {\n case Format.S8_R:\n case Format.S8_R_NORM:\n case Format.S8_RG_NORM:\n case Format.S8_RGB_NORM:\n case Format.S8_RGBA_NORM: {\n var buffer_1 = sizeOrDstBuffer instanceof ArrayBuffer\n ? new Int8Array(sizeOrDstBuffer)\n : new Int8Array(sizeOrDstBuffer);\n if (copyBuffer) {\n buffer_1.set(new Int8Array(copyBuffer));\n }\n return buffer_1;\n }\n case Format.U8_R:\n case Format.U8_R_NORM:\n case Format.U8_RG:\n case Format.U8_RG_NORM:\n case Format.U8_RGB:\n case Format.U8_RGB_NORM:\n case Format.U8_RGB_SRGB:\n case Format.U8_RGBA:\n case Format.U8_RGBA_NORM:\n case Format.U8_RGBA_SRGB: {\n var buffer_2 = sizeOrDstBuffer instanceof ArrayBuffer\n ? new Uint8Array(sizeOrDstBuffer)\n : new Uint8Array(sizeOrDstBuffer);\n if (copyBuffer) {\n buffer_2.set(new Uint8Array(copyBuffer));\n }\n return buffer_2;\n }\n case Format.S16_R:\n case Format.S16_RG:\n case Format.S16_RG_NORM:\n case Format.S16_RGB_NORM:\n case Format.S16_RGBA:\n case Format.S16_RGBA_NORM: {\n var buffer_3 = sizeOrDstBuffer instanceof ArrayBuffer\n ? new Int16Array(sizeOrDstBuffer)\n : new Int16Array(sizeInBytes ? sizeOrDstBuffer / 2 : sizeOrDstBuffer);\n if (copyBuffer) {\n buffer_3.set(new Int16Array(copyBuffer));\n }\n return buffer_3;\n }\n case Format.U16_R:\n case Format.U16_RGB:\n case Format.U16_RGBA_5551:\n case Format.U16_RGBA_NORM:\n case Format.U16_RG_NORM:\n case Format.U16_R_NORM: {\n var buffer_4 = sizeOrDstBuffer instanceof ArrayBuffer\n ? new Uint16Array(sizeOrDstBuffer)\n : new Uint16Array(sizeInBytes ? sizeOrDstBuffer / 2 : sizeOrDstBuffer);\n if (copyBuffer) {\n buffer_4.set(new Uint16Array(copyBuffer));\n }\n return buffer_4;\n }\n case Format.S32_R: {\n var buffer_5 = sizeOrDstBuffer instanceof ArrayBuffer\n ? new Int32Array(sizeOrDstBuffer)\n : new Int32Array(sizeInBytes ? sizeOrDstBuffer / 4 : sizeOrDstBuffer);\n if (copyBuffer) {\n buffer_5.set(new Int32Array(copyBuffer));\n }\n return buffer_5;\n }\n case Format.U32_R:\n case Format.U32_RG: {\n var buffer_6 = sizeOrDstBuffer instanceof ArrayBuffer\n ? new Uint32Array(sizeOrDstBuffer)\n : new Uint32Array(sizeInBytes ? sizeOrDstBuffer / 4 : sizeOrDstBuffer);\n if (copyBuffer) {\n buffer_6.set(new Uint32Array(copyBuffer));\n }\n return buffer_6;\n }\n case Format.F32_R:\n case Format.F32_RG:\n case Format.F32_RGB:\n case Format.F32_RGBA: {\n var buffer_7 = sizeOrDstBuffer instanceof ArrayBuffer\n ? new Float32Array(sizeOrDstBuffer)\n : new Float32Array(sizeInBytes ? sizeOrDstBuffer / 4 : sizeOrDstBuffer);\n if (copyBuffer) {\n buffer_7.set(new Float32Array(copyBuffer));\n }\n return buffer_7;\n }\n }\n var buffer = sizeOrDstBuffer instanceof ArrayBuffer\n ? new Uint8Array(sizeOrDstBuffer)\n : new Uint8Array(sizeOrDstBuffer);\n if (copyBuffer) {\n buffer.set(new Uint8Array(copyBuffer));\n }\n return buffer;\n}\n/**\n * Converts a half float to a number\n * @param value half float to convert\n * @returns converted half float\n */\nfunction halfFloat2Number(value) {\n var s = (value & 0x8000) >> 15;\n var e = (value & 0x7c00) >> 10;\n var f = value & 0x03ff;\n if (e === 0) {\n return (s ? -1 : 1) * Math.pow(2, -14) * (f / Math.pow(2, 10));\n }\n else if (e == 0x1f) {\n return f ? NaN : (s ? -1 : 1) * Infinity;\n }\n return (s ? -1 : 1) * Math.pow(2, e - 15) * (1 + f / Math.pow(2, 10));\n}\nfunction getBlockInformationFromFormat(format) {\n switch (format) {\n // 8 bits formats\n case 'r8unorm':\n case 'r8snorm':\n case 'r8uint':\n case 'r8sint':\n return { width: 1, height: 1, length: 1 };\n // 16 bits formats\n case 'r16uint':\n case 'r16sint':\n case 'r16float':\n case 'rg8unorm':\n case 'rg8snorm':\n case 'rg8uint':\n case 'rg8sint':\n return { width: 1, height: 1, length: 2 };\n // 32 bits formats\n case 'r32uint':\n case 'r32sint':\n case 'r32float':\n case 'rg16uint':\n case 'rg16sint':\n case 'rg16float':\n case 'rgba8unorm':\n case 'rgba8unorm-srgb':\n case 'rgba8snorm':\n case 'rgba8uint':\n case 'rgba8sint':\n case 'bgra8unorm':\n case 'bgra8unorm-srgb':\n case 'rgb9e5ufloat':\n case 'rgb10a2unorm':\n case 'rg11b10ufloat':\n return { width: 1, height: 1, length: 4 };\n // 64 bits formats\n case 'rg32uint':\n case 'rg32sint':\n case 'rg32float':\n case 'rgba16uint':\n case 'rgba16sint':\n case 'rgba16float':\n return { width: 1, height: 1, length: 8 };\n // 128 bits formats\n case 'rgba32uint':\n case 'rgba32sint':\n case 'rgba32float':\n return { width: 1, height: 1, length: 16 };\n // Depth and stencil formats\n case 'stencil8':\n throw new Error('No fixed size for Stencil8 format!');\n case 'depth16unorm':\n return { width: 1, height: 1, length: 2 };\n case 'depth24plus':\n throw new Error('No fixed size for Depth24Plus format!');\n case 'depth24plus-stencil8':\n throw new Error('No fixed size for Depth24PlusStencil8 format!');\n case 'depth32float':\n return { width: 1, height: 1, length: 4 };\n // case 'depth24unorm-stencil8':\n // return { width: 1, height: 1, length: 4 };\n case 'depth32float-stencil8':\n return { width: 1, height: 1, length: 5 };\n // BC compressed formats usable if \"texture-compression-bc\" is both\n // supported by the device/user agent and enabled in requestDevice.\n case 'bc7-rgba-unorm':\n case 'bc7-rgba-unorm-srgb':\n case 'bc6h-rgb-ufloat':\n case 'bc6h-rgb-float':\n case 'bc2-rgba-unorm':\n case 'bc2-rgba-unorm-srgb':\n case 'bc3-rgba-unorm':\n case 'bc3-rgba-unorm-srgb':\n case 'bc5-rg-unorm':\n case 'bc5-rg-snorm':\n return { width: 4, height: 4, length: 16 };\n case 'bc4-r-unorm':\n case 'bc4-r-snorm':\n case 'bc1-rgba-unorm':\n case 'bc1-rgba-unorm-srgb':\n return { width: 4, height: 4, length: 8 };\n default:\n return { width: 1, height: 1, length: 4 };\n }\n}\n\nvar ResourceBase_WebGPU = /** @class */ (function (_super) {\n __extends(ResourceBase_WebGPU, _super);\n function ResourceBase_WebGPU(_a) {\n var id = _a.id, device = _a.device;\n var _this = _super.call(this) || this;\n _this.id = id;\n _this.device = device;\n return _this;\n }\n ResourceBase_WebGPU.prototype.destroy = function () { };\n return ResourceBase_WebGPU;\n}(EventEmitter));\n\nvar Bindings_WebGPU = /** @class */ (function (_super) {\n __extends(Bindings_WebGPU, _super);\n function Bindings_WebGPU(_a) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _b, _c;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.Bindings;\n var pipeline = descriptor.pipeline;\n assert(!!pipeline);\n var uniformBufferBindings = descriptor.uniformBufferBindings, storageBufferBindings = descriptor.storageBufferBindings, samplerBindings = descriptor.samplerBindings, storageTextureBindings = descriptor.storageTextureBindings;\n _this.numUniformBuffers = (uniformBufferBindings === null || uniformBufferBindings === void 0 ? void 0 : uniformBufferBindings.length) || 0;\n // entries orders: Uniform Sampler StorageBuffer StorageTexture\n var gpuBindGroupEntries = [[], [], [], []];\n var numBindings = 0;\n if (uniformBufferBindings && uniformBufferBindings.length) {\n for (var i = 0; i < uniformBufferBindings.length; i++) {\n var _d = descriptor.uniformBufferBindings[i], binding = _d.binding, size = _d.size, offset = _d.offset, buffer = _d.buffer;\n var gpuBufferBinding = {\n buffer: getPlatformBuffer(buffer),\n offset: offset !== null && offset !== void 0 ? offset : 0,\n size: size,\n };\n gpuBindGroupEntries[0].push({\n binding: binding !== null && binding !== void 0 ? binding : numBindings++,\n resource: gpuBufferBinding,\n });\n }\n }\n if (samplerBindings && samplerBindings.length) {\n numBindings = 0;\n for (var i = 0; i < samplerBindings.length; i++) {\n var samplerEntry = __assign(__assign({}, samplerBindings[i]), defaultBindingLayoutSamplerDescriptor);\n var binding = descriptor.samplerBindings[i];\n var texture = binding.texture !== null\n ? binding.texture\n : _this.device['getFallbackTexture'](samplerEntry);\n samplerEntry.dimension = texture.dimension;\n samplerEntry.formatKind = getFormatSamplerKind(texture.format);\n var gpuTextureView = texture.gpuTextureView;\n gpuBindGroupEntries[1].push({\n binding: (_b = binding.textureBinding) !== null && _b !== void 0 ? _b : numBindings++,\n resource: gpuTextureView,\n });\n if (binding.samplerBinding !== -1) {\n var sampler = binding.sampler !== null\n ? binding.sampler\n : _this.device['getFallbackSampler'](samplerEntry);\n var gpuSampler = getPlatformSampler(sampler);\n gpuBindGroupEntries[1].push({\n binding: (_c = binding.samplerBinding) !== null && _c !== void 0 ? _c : numBindings++,\n resource: gpuSampler,\n });\n }\n }\n }\n if (storageBufferBindings && storageBufferBindings.length) {\n numBindings = 0;\n for (var i = 0; i < storageBufferBindings.length; i++) {\n var _e = descriptor.storageBufferBindings[i], binding = _e.binding, size = _e.size, offset = _e.offset, buffer = _e.buffer;\n var gpuBufferBinding = {\n buffer: getPlatformBuffer(buffer),\n offset: offset !== null && offset !== void 0 ? offset : 0,\n size: size,\n };\n gpuBindGroupEntries[2].push({\n binding: binding !== null && binding !== void 0 ? binding : numBindings++,\n resource: gpuBufferBinding,\n });\n }\n }\n if (storageTextureBindings && storageTextureBindings.length) {\n numBindings = 0;\n for (var i = 0; i < storageTextureBindings.length; i++) {\n var _f = descriptor.storageTextureBindings[i], binding = _f.binding, texture = _f.texture;\n var gpuTextureView = texture.gpuTextureView;\n gpuBindGroupEntries[3].push({\n binding: binding !== null && binding !== void 0 ? binding : numBindings++,\n resource: gpuTextureView,\n });\n }\n }\n var lastGroupIndex = gpuBindGroupEntries.findLastIndex(function (group) { return !!group.length; });\n _this.gpuBindGroup = gpuBindGroupEntries.map(function (gpuBindGroupEntries, i) {\n return (i <= lastGroupIndex &&\n _this.device.device.createBindGroup({\n layout: pipeline.getBindGroupLayout(i),\n entries: gpuBindGroupEntries,\n }));\n });\n return _this;\n }\n return Bindings_WebGPU;\n}(ResourceBase_WebGPU));\n\nvar Buffer_WebGPU = /** @class */ (function (_super) {\n __extends(Buffer_WebGPU, _super);\n function Buffer_WebGPU(_a) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.Buffer;\n var usage = descriptor.usage, viewOrSize = descriptor.viewOrSize;\n var useMapRead = !!(usage & BufferUsage.MAP_READ);\n _this.usage = translateBufferUsage(usage);\n // Buffer usages (BufferUsage::(MapRead|CopyDst|Storage)) is invalid. If a buffer usage contains BufferUsage::MapRead the only other allowed usage is BufferUsage::CopyDst.\n // @see https://www.w3.org/TR/webgpu/#dom-gpubufferusage-copy_dst\n if (useMapRead) {\n _this.usage = BufferUsage.MAP_READ | BufferUsage.COPY_DST;\n }\n var mapBuffer = !isNumber(viewOrSize);\n // this.size = isView(viewOrSize) ? viewOrSize.byteLength : viewOrSize * 4;\n _this.view = !isNumber(viewOrSize) ? viewOrSize : null;\n // 4 bytes alignments (because of the upload which requires this)\n _this.size = isNumber(viewOrSize)\n ? align(viewOrSize, 4)\n : align(viewOrSize.byteLength, 4);\n if (!isNumber(viewOrSize)) {\n _this.gpuBuffer = _this.device.device.createBuffer({\n usage: _this.usage,\n size: _this.size,\n mappedAtCreation: true,\n });\n var ctor = (viewOrSize && viewOrSize.constructor) || Float32Array;\n // @ts-ignore\n new ctor(_this.gpuBuffer.getMappedRange()).set(viewOrSize);\n _this.gpuBuffer.unmap();\n }\n else {\n _this.gpuBuffer = _this.device.device.createBuffer({\n usage: _this.usage,\n size: _this.size,\n mappedAtCreation: useMapRead ? mapBuffer : false,\n });\n }\n return _this;\n }\n Buffer_WebGPU.prototype.setSubData = function (dstByteOffset, src, srcByteOffset, byteLength) {\n if (srcByteOffset === void 0) { srcByteOffset = 0; }\n if (byteLength === void 0) { byteLength = 0; }\n var buffer = this.gpuBuffer;\n byteLength = byteLength || src.byteLength;\n byteLength = Math.min(byteLength, this.size - dstByteOffset);\n // After Migration to Canary\n var chunkStart = src.byteOffset + srcByteOffset;\n var chunkEnd = chunkStart + byteLength;\n // 4 bytes alignments for upload\n var alignedLength = (byteLength + 3) & ~3;\n if (alignedLength !== byteLength) {\n var tempView = new Uint8Array(src.buffer.slice(chunkStart, chunkEnd));\n src = new Uint8Array(alignedLength);\n src.set(tempView);\n srcByteOffset = 0;\n chunkStart = 0;\n chunkEnd = alignedLength;\n byteLength = alignedLength;\n }\n // Chunk\n var maxChunk = 1024 * 1024 * 15;\n var offset = 0;\n while (chunkEnd - (chunkStart + offset) > maxChunk) {\n this.device.device.queue.writeBuffer(buffer, dstByteOffset + offset, src.buffer, chunkStart + offset, maxChunk);\n offset += maxChunk;\n }\n this.device.device.queue.writeBuffer(buffer, dstByteOffset + offset, src.buffer, chunkStart + offset, byteLength - offset);\n };\n Buffer_WebGPU.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n // @see https://www.w3.org/TR/webgpu/#dom-gpubuffer-destroy\n this.gpuBuffer.destroy();\n };\n return Buffer_WebGPU;\n}(ResourceBase_WebGPU));\n\nvar ComputePass_WebGPU = /** @class */ (function () {\n function ComputePass_WebGPU() {\n this.gpuComputePassEncoder = null;\n }\n /**\n * @see https://www.w3.org/TR/webgpu/#dom-gpucomputepassencoder-dispatchworkgroups\n */\n ComputePass_WebGPU.prototype.dispatchWorkgroups = function (workgroupCountX, workgroupCountY, workgroupCountZ) {\n this.gpuComputePassEncoder.dispatchWorkgroups(workgroupCountX, workgroupCountY, workgroupCountZ);\n };\n /**\n * @see https://www.w3.org/TR/webgpu/#dom-gpucomputepassencoder-dispatchworkgroupsindirect\n */\n ComputePass_WebGPU.prototype.dispatchWorkgroupsIndirect = function (indirectBuffer, indirectOffset) {\n this.gpuComputePassEncoder.dispatchWorkgroupsIndirect(indirectBuffer.gpuBuffer, indirectOffset);\n };\n ComputePass_WebGPU.prototype.finish = function () {\n this.gpuComputePassEncoder.end();\n this.gpuComputePassEncoder = null;\n this.frameCommandEncoder = null;\n };\n /**\n * @see https://www.w3.org/TR/webgpu/#dom-gpucommandencoder-begincomputepass\n */\n ComputePass_WebGPU.prototype.beginComputePass = function (commandEncoder) {\n assert(this.gpuComputePassEncoder === null);\n this.frameCommandEncoder = commandEncoder;\n this.gpuComputePassEncoder = this.frameCommandEncoder.beginComputePass(this.gpuComputePassDescriptor);\n };\n ComputePass_WebGPU.prototype.setPipeline = function (pipeline_) {\n var pipeline = pipeline_;\n var gpuComputePipeline = assertExists(pipeline.gpuComputePipeline);\n this.gpuComputePassEncoder.setPipeline(gpuComputePipeline);\n };\n ComputePass_WebGPU.prototype.setBindings = function (bindings_) {\n var _this = this;\n var bindings = bindings_;\n bindings.gpuBindGroup.forEach(function (gpuBindGroup, i) {\n if (gpuBindGroup) {\n _this.gpuComputePassEncoder.setBindGroup(i, bindings.gpuBindGroup[i]);\n }\n });\n };\n ComputePass_WebGPU.prototype.pushDebugGroup = function (name) {\n this.gpuComputePassEncoder.pushDebugGroup(name);\n };\n ComputePass_WebGPU.prototype.popDebugGroup = function () {\n this.gpuComputePassEncoder.popDebugGroup();\n };\n ComputePass_WebGPU.prototype.insertDebugMarker = function (markerLabel) {\n this.gpuComputePassEncoder.insertDebugMarker(markerLabel);\n };\n return ComputePass_WebGPU;\n}());\n\nvar ComputePipeline_WebGPU = /** @class */ (function (_super) {\n __extends(ComputePipeline_WebGPU, _super);\n function ComputePipeline_WebGPU(_a) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.ComputePipeline;\n _this.gpuComputePipeline = null;\n _this.descriptor = descriptor;\n var program = descriptor.program;\n var computeStage = program.computeStage;\n if (computeStage === null)\n return _this;\n var gpuComputePipeline = {\n layout: 'auto',\n compute: __assign({}, computeStage),\n };\n // @see https://www.w3.org/TR/webgpu/#dom-gpudevice-createrenderpipeline\n _this.gpuComputePipeline =\n _this.device.device.createComputePipeline(gpuComputePipeline);\n if (_this.name !== undefined) {\n _this.gpuComputePipeline.label = _this.name;\n }\n return _this;\n }\n ComputePipeline_WebGPU.prototype.getBindGroupLayout = function (index) {\n return this.gpuComputePipeline.getBindGroupLayout(index);\n };\n return ComputePipeline_WebGPU;\n}(ResourceBase_WebGPU));\n\nvar InputLayout_WebGPU = /** @class */ (function (_super) {\n __extends(InputLayout_WebGPU, _super);\n function InputLayout_WebGPU(_a) {\n var e_1, _b, e_2, _c;\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.InputLayout;\n var buffers = [];\n try {\n for (var _d = __values(descriptor.vertexBufferDescriptors), _e = _d.next(); !_e.done; _e = _d.next()) {\n var vertexBufferDescriptor = _e.value;\n var arrayStride = vertexBufferDescriptor.arrayStride, stepMode = vertexBufferDescriptor.stepMode, attributes = vertexBufferDescriptor.attributes;\n buffers.push({\n arrayStride: arrayStride,\n stepMode: translateVertexStepMode(stepMode),\n attributes: [],\n });\n try {\n for (var attributes_1 = (e_2 = void 0, __values(attributes)), attributes_1_1 = attributes_1.next(); !attributes_1_1.done; attributes_1_1 = attributes_1.next()) {\n var attribute = attributes_1_1.value;\n // TODO: divisor\n var shaderLocation = attribute.shaderLocation, format = attribute.format, offset = attribute.offset;\n buffers[buffers.length - 1].attributes.push({\n shaderLocation: shaderLocation,\n format: translateVertexFormat(format),\n offset: offset,\n });\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (attributes_1_1 && !attributes_1_1.done && (_c = attributes_1.return)) _c.call(attributes_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_b = _d.return)) _b.call(_d);\n }\n finally { if (e_1) throw e_1.error; }\n }\n _this.indexFormat = translateIndexFormat(descriptor.indexBufferFormat);\n _this.buffers = buffers;\n return _this;\n }\n return InputLayout_WebGPU;\n}(ResourceBase_WebGPU));\n\nvar Program_WebGPU = /** @class */ (function (_super) {\n __extends(Program_WebGPU, _super);\n function Program_WebGPU(_a) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.Program;\n _this.vertexStage = null;\n _this.fragmentStage = null;\n _this.computeStage = null;\n _this.descriptor = descriptor;\n if (descriptor.vertex) {\n _this.vertexStage = _this.createShaderStage(descriptor.vertex, 'vertex');\n }\n if (descriptor.fragment) {\n _this.fragmentStage = _this.createShaderStage(descriptor.fragment, 'fragment');\n }\n if (descriptor.compute) {\n // Only support WGSL now\n _this.computeStage = _this.createShaderStage(descriptor.compute, 'compute');\n }\n return _this;\n }\n // eslint-disable-next-line\n Program_WebGPU.prototype.setUniformsLegacy = function (uniforms) {\n };\n Program_WebGPU.prototype.createShaderStage = function (_a, shaderStage) {\n var e_1, _b;\n var glsl = _a.glsl, wgsl = _a.wgsl, entryPoint = _a.entryPoint, postprocess = _a.postprocess;\n var validationEnabled = false;\n // Use user-defined WGSL first.\n var code = wgsl;\n if (!code) {\n try {\n code = this.device['glsl_compile'](glsl, shaderStage, validationEnabled);\n }\n catch (e) {\n console.error(e, glsl);\n throw new Error('whoops');\n }\n }\n var _loop_1 = function (depthTextureName) {\n if (!code.includes(depthTextureName))\n return \"continue\";\n code = code.replace(\"var T_\".concat(depthTextureName, \": texture_2d;\"), \"var T_\".concat(depthTextureName, \": texture_depth_2d;\"));\n code = code.replace(new RegExp(\"textureSample\\\\(T_\".concat(depthTextureName, \"(.*)\\\\);$\"), 'gm'), function (sub, cap) {\n return \"vec4(textureSample(T_\".concat(depthTextureName).concat(cap, \"), 0.0, 0.0, 0.0);\");\n });\n };\n try {\n // Workaround for https://github.com/gfx-rs/naga/issues/1355\n for (var _c = __values(['u_TextureFramebufferDepth']), _d = _c.next(); !_d.done; _d = _c.next()) {\n var depthTextureName = _d.value;\n _loop_1(depthTextureName);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_b = _c.return)) _b.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (postprocess) {\n code = postprocess(code);\n }\n // @see https://www.w3.org/TR/webgpu/#dom-gpudevice-createshadermodule\n var shaderModule = this.device.device.createShaderModule({ code: code });\n return { module: shaderModule, entryPoint: entryPoint || 'main' };\n };\n return Program_WebGPU;\n}(ResourceBase_WebGPU));\n\nvar QueryPool_WebGPU = /** @class */ (function (_super) {\n __extends(QueryPool_WebGPU, _super);\n function QueryPool_WebGPU(_a) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.QueryPool;\n var elemCount = descriptor.elemCount, type = descriptor.type;\n _this.querySet = _this.device.device.createQuerySet({\n type: translateQueryPoolType(type),\n count: elemCount,\n });\n _this.resolveBuffer = _this.device.device.createBuffer({\n size: elemCount * 8,\n usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC,\n });\n _this.cpuBuffer = _this.device.device.createBuffer({\n size: elemCount * 8,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n });\n _this.results = null;\n return _this;\n }\n QueryPool_WebGPU.prototype.queryResultOcclusion = function (dstOffs) {\n if (this.results === null)\n return null;\n return this.results[dstOffs] !== BigInt(0);\n };\n QueryPool_WebGPU.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.querySet.destroy();\n this.resolveBuffer.destroy();\n this.cpuBuffer.destroy();\n };\n return QueryPool_WebGPU;\n}(ResourceBase_WebGPU));\n\nvar Readback_WebGPU = /** @class */ (function (_super) {\n __extends(Readback_WebGPU, _super);\n function Readback_WebGPU(_a) {\n var id = _a.id, device = _a.device;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.Readback;\n return _this;\n }\n Readback_WebGPU.prototype.readTexture = function (t, x, y, width, height, dst, dstOffset, length) {\n if (dstOffset === void 0) { dstOffset = 0; }\n return __awaiter(this, void 0, void 0, function () {\n var texture, faceIndex, blockInformation, bytesPerRow, bytesPerRowAligned, size, buffer, commandEncoder;\n return __generator(this, function (_a) {\n texture = t;\n faceIndex = 0;\n blockInformation = getBlockInformationFromFormat(texture.gpuTextureformat);\n bytesPerRow = Math.ceil(width / blockInformation.width) * blockInformation.length;\n bytesPerRowAligned = Math.ceil(bytesPerRow / 256) * 256;\n size = bytesPerRowAligned * height;\n buffer = this.device.createBuffer({\n usage: BufferUsage.STORAGE | BufferUsage.MAP_READ | BufferUsage.COPY_DST,\n hint: BufferFrequencyHint.STATIC,\n viewOrSize: size,\n });\n commandEncoder = this.device.device.createCommandEncoder();\n // @see https://www.w3.org/TR/webgpu/#dom-gpucommandencoder-copytexturetobuffer\n commandEncoder.copyTextureToBuffer({\n texture: texture.gpuTexture,\n mipLevel: 0,\n origin: {\n x: x,\n y: y,\n z: Math.max(faceIndex, 0),\n },\n }, {\n buffer: buffer.gpuBuffer,\n offset: 0,\n bytesPerRow: bytesPerRowAligned,\n }, {\n width: width,\n height: height,\n depthOrArrayLayers: 1,\n });\n this.device.device.queue.submit([commandEncoder.finish()]);\n return [2 /*return*/, this.readBuffer(buffer, 0, dst.byteLength === size ? dst : null, dstOffset, size, texture.format, true, false, bytesPerRow, bytesPerRowAligned, height)];\n });\n });\n };\n Readback_WebGPU.prototype.readTextureSync = function (t, x, y, width, height, dst, dstOffset, length) {\n throw new Error('ERROR_MSG_METHOD_NOT_IMPLEMENTED');\n };\n Readback_WebGPU.prototype.readBuffer = function (b, srcByteOffset, dstArrayBufferView, dstOffset, _size, type, noDataConversion, destroy, bytesPerRow, bytesPerRowAligned, height) {\n var _this = this;\n if (srcByteOffset === void 0) { srcByteOffset = 0; }\n if (dstArrayBufferView === void 0) { dstArrayBufferView = null; }\n if (_size === void 0) { _size = 0; }\n if (type === void 0) { type = Format.U8_RGB; }\n if (noDataConversion === void 0) { noDataConversion = false; }\n if (bytesPerRow === void 0) { bytesPerRow = 0; }\n if (bytesPerRowAligned === void 0) { bytesPerRowAligned = 0; }\n if (height === void 0) { height = 0; }\n var buffer = b;\n var size = _size || buffer.size;\n var dst = dstArrayBufferView || buffer.view;\n var floatFormat = \n // @ts-ignore\n (dst && dst.constructor && dst.constructor.BYTES_PER_ELEMENT) ||\n getFormatCompByteSize(type);\n var gpuReadBuffer = buffer;\n // can read buffer directly?\n if (!(buffer.usage & BufferUsage.MAP_READ &&\n buffer.usage & BufferUsage.COPY_DST)) {\n var commandEncoder = this.device.device.createCommandEncoder();\n gpuReadBuffer = this.device.createBuffer({\n usage: BufferUsage.STORAGE | BufferUsage.MAP_READ | BufferUsage.COPY_DST,\n hint: BufferFrequencyHint.STATIC,\n viewOrSize: size,\n });\n // Encode commands for copying buffer to buffer.\n commandEncoder.copyBufferToBuffer(buffer.gpuBuffer /* source buffer */, srcByteOffset /* source offset */, gpuReadBuffer.gpuBuffer /* destination buffer */, 0 /* destination offset */, size /* size */);\n this.device.device.queue.submit([commandEncoder.finish()]);\n }\n return new Promise(function (resolve, reject) {\n gpuReadBuffer.gpuBuffer\n .mapAsync(GPUMapMode.READ, srcByteOffset, size)\n .then(function () {\n var copyArrayBuffer = gpuReadBuffer.gpuBuffer.getMappedRange(srcByteOffset, size);\n var data = dst;\n if (noDataConversion) {\n if (data === null) {\n data = allocateAndCopyTypedBuffer(type, size, true, copyArrayBuffer);\n }\n else {\n // @ts-ignore\n data = allocateAndCopyTypedBuffer(type, data.buffer, undefined, copyArrayBuffer);\n }\n }\n else {\n if (data === null) {\n switch (floatFormat) {\n case 1: // byte format\n data = new Uint8Array(size);\n data.set(new Uint8Array(copyArrayBuffer));\n break;\n case 2: // half float\n // TODO WEBGPU use computer shaders (or render pass) to make the conversion?\n data = _this.getHalfFloatAsFloatRGBAArrayBuffer(size / 2, copyArrayBuffer);\n break;\n case 4: // float\n data = new Float32Array(size / 4);\n data.set(new Float32Array(copyArrayBuffer));\n break;\n }\n }\n else {\n switch (floatFormat) {\n case 1: // byte format\n data = new Uint8Array(data.buffer);\n data.set(new Uint8Array(copyArrayBuffer));\n break;\n case 2: // half float\n // TODO WEBGPU use computer shaders (or render pass) to make the conversion?\n data = _this.getHalfFloatAsFloatRGBAArrayBuffer(size / 2, copyArrayBuffer, dst);\n break;\n case 4: // float\n var ctor = (dst && dst.constructor) || Float32Array;\n // @ts-ignore\n data = new ctor(data.buffer);\n // @ts-ignore\n data.set(new ctor(copyArrayBuffer));\n break;\n }\n }\n }\n if (bytesPerRow !== bytesPerRowAligned) {\n // TODO WEBGPU use computer shaders (or render pass) to build the final buffer data?\n if (floatFormat === 1 && !noDataConversion) {\n // half float have been converted to float above\n bytesPerRow *= 2;\n bytesPerRowAligned *= 2;\n }\n var data2 = new Uint8Array(data.buffer);\n var offset = bytesPerRow, offset2 = 0;\n for (var y = 1; y < height; ++y) {\n offset2 = y * bytesPerRowAligned;\n for (var x = 0; x < bytesPerRow; ++x) {\n data2[offset++] = data2[offset2++];\n }\n }\n if (floatFormat !== 0 && !noDataConversion) {\n data = new Float32Array(data2.buffer, 0, offset / 4);\n }\n else {\n data = new Uint8Array(data2.buffer, 0, offset);\n }\n }\n gpuReadBuffer.gpuBuffer.unmap();\n resolve(data);\n }, function (reason) { return reject(reason); });\n });\n };\n Readback_WebGPU.prototype.getHalfFloatAsFloatRGBAArrayBuffer = function (dataLength, arrayBuffer, destArray) {\n if (!destArray) {\n destArray = new Float32Array(dataLength);\n }\n var srcData = new Uint16Array(arrayBuffer);\n while (dataLength--) {\n destArray[dataLength] = halfFloat2Number(srcData[dataLength]);\n }\n return destArray;\n };\n return Readback_WebGPU;\n}(ResourceBase_WebGPU));\n\nvar RenderPass_WebGPU = /** @class */ (function () {\n function RenderPass_WebGPU(device) {\n this.device = device;\n this.gpuRenderPassEncoder = null;\n this.gfxColorAttachment = [];\n this.gfxColorAttachmentLevel = [];\n this.gfxColorResolveTo = [];\n this.gfxColorResolveToLevel = [];\n this.gfxDepthStencilAttachment = null;\n this.gfxDepthStencilResolveTo = null;\n this.gpuColorAttachments = [];\n this.gpuDepthStencilAttachment = {\n view: null,\n depthLoadOp: 'load',\n depthStoreOp: 'store',\n stencilLoadOp: 'load',\n stencilStoreOp: 'store',\n };\n this.gpuRenderPassDescriptor = {\n colorAttachments: this.gpuColorAttachments,\n depthStencilAttachment: this.gpuDepthStencilAttachment,\n };\n }\n RenderPass_WebGPU.prototype.getEncoder = function () {\n var _a;\n return (((_a = this.renderBundle) === null || _a === void 0 ? void 0 : _a['renderBundleEncoder']) || this.gpuRenderPassEncoder);\n };\n RenderPass_WebGPU.prototype.getTextureView = function (target, level) {\n assert(level < target.mipLevelCount);\n if (target.mipLevelCount === 1)\n return target.gpuTextureView;\n else\n return target.gpuTexture.createView({\n baseMipLevel: level,\n mipLevelCount: 1,\n });\n };\n RenderPass_WebGPU.prototype.setRenderPassDescriptor = function (descriptor) {\n var _a, _b, _c, _d, _e, _f;\n this.descriptor = descriptor;\n this.gpuRenderPassDescriptor.colorAttachments = this.gpuColorAttachments;\n var numColorAttachments = descriptor.colorAttachment.length;\n this.gfxColorAttachment.length = numColorAttachments;\n this.gfxColorResolveTo.length = numColorAttachments;\n for (var i = 0; i < descriptor.colorAttachment.length; i++) {\n var colorAttachment = descriptor\n .colorAttachment[i];\n var colorResolveTo = descriptor\n .colorResolveTo[i];\n // Do some dumb juggling...\n if (colorAttachment === null && colorResolveTo !== null) {\n colorAttachment = colorResolveTo;\n colorResolveTo = null;\n }\n this.gfxColorAttachment[i] = colorAttachment;\n this.gfxColorResolveTo[i] = colorResolveTo;\n this.gfxColorAttachmentLevel[i] =\n ((_a = descriptor.colorAttachmentLevel) === null || _a === void 0 ? void 0 : _a[i]) || 0;\n this.gfxColorResolveToLevel[i] = ((_b = descriptor.colorResolveToLevel) === null || _b === void 0 ? void 0 : _b[i]) || 0;\n if (colorAttachment !== null) {\n if (this.gpuColorAttachments[i] === undefined) {\n this.gpuColorAttachments[i] = {};\n }\n var dstAttachment = this.gpuColorAttachments[i];\n dstAttachment.view = this.getTextureView(colorAttachment, ((_c = this.gfxColorAttachmentLevel) === null || _c === void 0 ? void 0 : _c[i]) || 0);\n var clearColor = (_e = (_d = descriptor.colorClearColor) === null || _d === void 0 ? void 0 : _d[i]) !== null && _e !== void 0 ? _e : 'load';\n if (clearColor === 'load') {\n dstAttachment.loadOp = 'load';\n }\n else {\n dstAttachment.loadOp = 'clear';\n dstAttachment.clearValue = clearColor;\n }\n dstAttachment.storeOp = ((_f = descriptor.colorStore) === null || _f === void 0 ? void 0 : _f[i])\n ? 'store'\n : 'discard';\n dstAttachment.resolveTarget = undefined;\n if (colorResolveTo !== null) {\n if (colorAttachment.sampleCount > 1) {\n dstAttachment.resolveTarget = this.getTextureView(colorResolveTo, this.gfxColorResolveToLevel[i]);\n }\n else {\n dstAttachment.storeOp = 'store';\n }\n }\n }\n else {\n // https://github.com/gpuweb/gpuweb/issues/1250\n this.gpuColorAttachments.length = i;\n this.gfxColorAttachment.length = i;\n this.gfxColorResolveTo.length = i;\n break;\n }\n }\n this.gfxDepthStencilAttachment =\n descriptor.depthStencilAttachment;\n this.gfxDepthStencilResolveTo =\n descriptor.depthStencilResolveTo;\n if (descriptor.depthStencilAttachment) {\n var dsAttachment = descriptor.depthStencilAttachment;\n var dstAttachment = this.gpuDepthStencilAttachment;\n dstAttachment.view = dsAttachment.gpuTextureView;\n var hasDepth = !!(getFormatFlags(dsAttachment.format) & FormatFlags.Depth);\n if (hasDepth) {\n if (descriptor.depthClearValue === 'load') {\n dstAttachment.depthLoadOp = 'load';\n }\n else {\n dstAttachment.depthLoadOp = 'clear';\n dstAttachment.depthClearValue = descriptor.depthClearValue;\n }\n if (descriptor.depthStencilStore ||\n this.gfxDepthStencilResolveTo !== null)\n dstAttachment.depthStoreOp = 'store';\n else\n dstAttachment.depthStoreOp = 'discard';\n }\n else {\n dstAttachment.depthLoadOp = undefined;\n dstAttachment.depthStoreOp = undefined;\n }\n var hasStencil = !!(getFormatFlags(dsAttachment.format) & FormatFlags.Stencil);\n if (hasStencil) {\n if (descriptor.stencilClearValue === 'load') {\n dstAttachment.stencilLoadOp = 'load';\n }\n else {\n dstAttachment.stencilLoadOp = 'clear';\n dstAttachment.stencilClearValue = descriptor.stencilClearValue;\n }\n if (descriptor.depthStencilStore ||\n this.gfxDepthStencilResolveTo !== null)\n dstAttachment.stencilStoreOp = 'store';\n else\n dstAttachment.stencilStoreOp = 'discard';\n }\n else {\n dstAttachment.stencilLoadOp = undefined;\n dstAttachment.stencilStoreOp = undefined;\n }\n this.gpuRenderPassDescriptor.depthStencilAttachment =\n this.gpuDepthStencilAttachment;\n }\n else {\n this.gpuRenderPassDescriptor.depthStencilAttachment = undefined;\n }\n this.gpuRenderPassDescriptor.occlusionQuerySet = !isNil(descriptor.occlusionQueryPool)\n ? getPlatformQuerySet(descriptor.occlusionQueryPool)\n : undefined;\n };\n RenderPass_WebGPU.prototype.beginRenderPass = function (commandEncoder, renderPassDescriptor) {\n assert(this.gpuRenderPassEncoder === null);\n this.setRenderPassDescriptor(renderPassDescriptor);\n this.frameCommandEncoder = commandEncoder;\n this.gpuRenderPassEncoder = this.frameCommandEncoder.beginRenderPass(this.gpuRenderPassDescriptor);\n };\n RenderPass_WebGPU.prototype.flipY = function (y, h) {\n var height = this.device['swapChainHeight'];\n return height - y - h;\n };\n RenderPass_WebGPU.prototype.setViewport = function (x, y, w, h, minDepth, maxDepth) {\n if (minDepth === void 0) { minDepth = 0; }\n if (maxDepth === void 0) { maxDepth = 1; }\n this.gpuRenderPassEncoder.setViewport(x, this.flipY(y, h), w, h, minDepth, maxDepth);\n };\n RenderPass_WebGPU.prototype.setScissorRect = function (x, y, w, h) {\n this.gpuRenderPassEncoder.setScissorRect(x, this.flipY(y, h), w, h);\n };\n RenderPass_WebGPU.prototype.setPipeline = function (pipeline_) {\n var pipeline = pipeline_;\n var gpuRenderPipeline = assertExists(pipeline.gpuRenderPipeline);\n this.getEncoder().setPipeline(gpuRenderPipeline);\n };\n RenderPass_WebGPU.prototype.setVertexInput = function (inputLayout_, vertexBuffers, indexBuffer) {\n if (inputLayout_ === null)\n return;\n var encoder = this.getEncoder();\n var inputLayout = inputLayout_;\n if (indexBuffer !== null)\n encoder.setIndexBuffer(getPlatformBuffer(indexBuffer.buffer), assertExists(inputLayout.indexFormat), indexBuffer.offset);\n for (var i = 0; i < vertexBuffers.length; i++) {\n var b = vertexBuffers[i];\n if (b === null)\n continue;\n encoder.setVertexBuffer(i, getPlatformBuffer(b.buffer), b.offset);\n }\n };\n RenderPass_WebGPU.prototype.setBindings = function (bindings_) {\n var bindings = bindings_;\n var encoder = this.getEncoder();\n bindings.gpuBindGroup.forEach(function (gpuBindGroup, i) {\n if (gpuBindGroup) {\n encoder.setBindGroup(i, bindings.gpuBindGroup[i]);\n }\n });\n };\n RenderPass_WebGPU.prototype.setStencilReference = function (ref) {\n this.gpuRenderPassEncoder.setStencilReference(ref);\n };\n /**\n * @see https://www.w3.org/TR/webgpu/#dom-gpurendercommandsmixin-draw\n */\n RenderPass_WebGPU.prototype.draw = function (vertexCount, instanceCount, firstVertex, firstInstance) {\n this.getEncoder().draw(vertexCount, instanceCount, firstVertex, firstInstance);\n };\n /**\n * @see https://www.w3.org/TR/webgpu/#dom-gpurendercommandsmixin-drawindexed\n */\n RenderPass_WebGPU.prototype.drawIndexed = function (indexCount, instanceCount, firstIndex, baseVertex, firstInstance) {\n this.getEncoder().drawIndexed(indexCount, instanceCount, firstIndex, baseVertex, firstInstance);\n };\n /**\n * @see https://www.w3.org/TR/webgpu/#dom-gpurendercommandsmixin-drawindirect\n */\n RenderPass_WebGPU.prototype.drawIndirect = function (indirectBuffer, indirectOffset) {\n this.getEncoder().drawIndirect(getPlatformBuffer(indirectBuffer), indirectOffset);\n };\n RenderPass_WebGPU.prototype.drawIndexedIndirect = function (indirectBuffer, indirectOffset) {\n this.getEncoder().drawIndexedIndirect(getPlatformBuffer(indirectBuffer), indirectOffset);\n };\n RenderPass_WebGPU.prototype.beginOcclusionQuery = function (queryIndex) {\n this.gpuRenderPassEncoder.beginOcclusionQuery(queryIndex);\n };\n RenderPass_WebGPU.prototype.endOcclusionQuery = function () {\n this.gpuRenderPassEncoder.endOcclusionQuery();\n };\n RenderPass_WebGPU.prototype.pushDebugGroup = function (name) {\n this.gpuRenderPassEncoder.pushDebugGroup(name);\n };\n RenderPass_WebGPU.prototype.popDebugGroup = function () {\n this.gpuRenderPassEncoder.popDebugGroup();\n };\n RenderPass_WebGPU.prototype.insertDebugMarker = function (markerLabel) {\n this.gpuRenderPassEncoder.insertDebugMarker(markerLabel);\n };\n RenderPass_WebGPU.prototype.beginBundle = function (renderBundle) {\n this.renderBundle = renderBundle;\n };\n RenderPass_WebGPU.prototype.endBundle = function () {\n this.renderBundle.finish();\n };\n RenderPass_WebGPU.prototype.executeBundles = function (renderBundles) {\n this.gpuRenderPassEncoder.executeBundles(renderBundles.map(function (bundle) { return bundle.renderBundle; }));\n };\n RenderPass_WebGPU.prototype.finish = function () {\n var _a;\n (_a = this.gpuRenderPassEncoder) === null || _a === void 0 ? void 0 : _a.end();\n this.gpuRenderPassEncoder = null;\n // Fake a resolve with a copy for non-MSAA.\n for (var i = 0; i < this.gfxColorAttachment.length; i++) {\n var colorAttachment = this.gfxColorAttachment[i];\n var colorResolveTo = this.gfxColorResolveTo[i];\n if (colorAttachment !== null &&\n colorResolveTo !== null &&\n colorAttachment.sampleCount === 1) {\n this.copyAttachment(colorResolveTo, this.gfxColorAttachmentLevel[i], colorAttachment, this.gfxColorResolveToLevel[i]);\n }\n }\n if (this.gfxDepthStencilAttachment && this.gfxDepthStencilResolveTo) {\n if (this.gfxDepthStencilAttachment.sampleCount > 1) ;\n else {\n this.copyAttachment(this.gfxDepthStencilResolveTo, 0, this.gfxDepthStencilAttachment, 0);\n }\n }\n this.frameCommandEncoder = null;\n };\n RenderPass_WebGPU.prototype.copyAttachment = function (dst, dstLevel, src, srcLevel) {\n assert(src.sampleCount === 1);\n var srcCopy = {\n texture: src.gpuTexture,\n mipLevel: srcLevel,\n };\n var dstCopy = {\n texture: dst.gpuTexture,\n mipLevel: dstLevel,\n };\n assert(src.width >>> srcLevel === dst.width >>> dstLevel);\n assert(src.height >>> srcLevel === dst.height >>> dstLevel);\n assert(!!(src.usage & GPUTextureUsage$1.COPY_SRC));\n assert(!!(dst.usage & GPUTextureUsage$1.COPY_DST));\n this.frameCommandEncoder.copyTextureToTexture(srcCopy, dstCopy, [\n dst.width,\n dst.height,\n 1,\n ]);\n };\n return RenderPass_WebGPU;\n}());\n\nvar RenderPipeline_WebGPU = /** @class */ (function (_super) {\n __extends(RenderPipeline_WebGPU, _super);\n function RenderPipeline_WebGPU(_a) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.RenderPipeline;\n _this.isCreatingAsync = false;\n _this.gpuRenderPipeline = null;\n _this.descriptor = descriptor;\n _this.device['createRenderPipelineInternal'](_this, false);\n return _this;\n }\n RenderPipeline_WebGPU.prototype.getBindGroupLayout = function (index) {\n return this.gpuRenderPipeline.getBindGroupLayout(index);\n };\n return RenderPipeline_WebGPU;\n}(ResourceBase_WebGPU));\n\nvar Sampler_WebGPU = /** @class */ (function (_super) {\n __extends(Sampler_WebGPU, _super);\n function Sampler_WebGPU(_a) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor;\n var _b, _c;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.Sampler;\n var lodMinClamp = descriptor.lodMinClamp;\n var lodMaxClamp = descriptor.mipmapFilter === MipmapFilterMode.NO_MIP\n ? descriptor.lodMinClamp\n : descriptor.lodMaxClamp;\n var maxAnisotropy = (_b = descriptor.maxAnisotropy) !== null && _b !== void 0 ? _b : 1;\n if (maxAnisotropy > 1)\n assert(descriptor.minFilter === FilterMode.BILINEAR &&\n descriptor.magFilter === FilterMode.BILINEAR &&\n descriptor.mipmapFilter === MipmapFilterMode.LINEAR);\n _this.gpuSampler = _this.device.device.createSampler({\n addressModeU: translateAddressMode(descriptor.addressModeU),\n addressModeV: translateAddressMode(descriptor.addressModeV),\n addressModeW: translateAddressMode((_c = descriptor.addressModeW) !== null && _c !== void 0 ? _c : descriptor.addressModeU),\n lodMinClamp: lodMinClamp,\n lodMaxClamp: lodMaxClamp,\n minFilter: translateMinMagFilter(descriptor.minFilter),\n magFilter: translateMinMagFilter(descriptor.magFilter),\n mipmapFilter: translateMipFilter(descriptor.mipmapFilter),\n compare: descriptor.compareFunction !== undefined\n ? translateCompareFunction(descriptor.compareFunction)\n : undefined,\n maxAnisotropy: maxAnisotropy,\n });\n return _this;\n }\n return Sampler_WebGPU;\n}(ResourceBase_WebGPU));\n\nvar Texture_WebGPU = /** @class */ (function (_super) {\n __extends(Texture_WebGPU, _super);\n function Texture_WebGPU(_a) {\n var id = _a.id, device = _a.device, descriptor = _a.descriptor, skipCreate = _a.skipCreate, sampleCount = _a.sampleCount;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.Texture;\n _this.flipY = false;\n var format = descriptor.format, dimension = descriptor.dimension, width = descriptor.width, height = descriptor.height, depthOrArrayLayers = descriptor.depthOrArrayLayers, mipLevelCount = descriptor.mipLevelCount, usage = descriptor.usage, pixelStore = descriptor.pixelStore;\n _this.flipY = !!(pixelStore === null || pixelStore === void 0 ? void 0 : pixelStore.unpackFlipY);\n _this.device.createTextureShared({\n format: format,\n dimension: dimension !== null && dimension !== void 0 ? dimension : TextureDimension.TEXTURE_2D,\n width: width,\n height: height,\n depthOrArrayLayers: depthOrArrayLayers !== null && depthOrArrayLayers !== void 0 ? depthOrArrayLayers : 1,\n mipLevelCount: mipLevelCount !== null && mipLevelCount !== void 0 ? mipLevelCount : 1,\n usage: usage,\n sampleCount: sampleCount !== null && sampleCount !== void 0 ? sampleCount : 1,\n }, _this, skipCreate);\n return _this;\n }\n Texture_WebGPU.prototype.textureFromImageBitmapOrCanvas = function (device, sources, depthOrArrayLayers) {\n var width = sources[0].width;\n var height = sources[0].height;\n var textureDescriptor = {\n // Unlike in WebGL, the size of our texture must be set at texture creation time.\n // This means we have to wait until the image is loaded to create the texture, since we won't\n // know the size until then.\n size: { width: width, height: height, depthOrArrayLayers: depthOrArrayLayers },\n format: 'rgba8unorm',\n usage: GPUTextureUsage.TEXTURE_BINDING |\n GPUTextureUsage.COPY_DST |\n GPUTextureUsage.RENDER_ATTACHMENT,\n };\n var texture = device.createTexture(textureDescriptor);\n for (var i = 0; i < sources.length; i++) {\n device.queue.copyExternalImageToTexture({ source: sources[i], flipY: this.flipY }, { texture: texture, origin: [0, 0, i] }, [width, height]);\n }\n return [texture, width, height];\n };\n Texture_WebGPU.prototype.isImageBitmapOrCanvases = function (datas) {\n var data = datas[0];\n return (data instanceof ImageBitmap ||\n data instanceof HTMLCanvasElement ||\n data instanceof OffscreenCanvas);\n };\n Texture_WebGPU.prototype.isVideo = function (datas) {\n var data = datas[0];\n return data instanceof HTMLVideoElement;\n };\n /**\n * @see https://toji.dev/webgpu-best-practices/img-textures\n */\n Texture_WebGPU.prototype.setImageData = function (datas, lod) {\n var _a;\n var _this = this;\n var device = this.device.device;\n var texture;\n var width;\n var height;\n if (this.isImageBitmapOrCanvases(datas)) {\n _a = __read(this.textureFromImageBitmapOrCanvas(device, datas, this.depthOrArrayLayers), 3), texture = _a[0], width = _a[1], height = _a[2];\n }\n else if (this.isVideo(datas)) {\n // @see https://toji.dev/webgpu-best-practices/img-textures#creating-a-texture-from-an-htmlvideoelement-video-tag\n texture = device.importExternalTexture({\n source: datas[0],\n });\n }\n else {\n var blockInformation = getBlockInformationFromFormat(this.gpuTextureformat);\n var bytesPerRow_1 = Math.ceil(this.width / blockInformation.width) *\n blockInformation.length;\n // TODO: support ArrayBufferView[]\n datas.forEach(function (data) {\n device.queue.writeTexture({ texture: _this.gpuTexture }, data, {\n bytesPerRow: bytesPerRow_1,\n }, {\n width: _this.width,\n height: _this.height,\n });\n });\n }\n this.width = width;\n this.height = height;\n if (texture) {\n this.gpuTexture = texture;\n }\n this.gpuTextureView = this.gpuTexture.createView({\n dimension: translateTextureViewDimension(this.dimension),\n });\n };\n Texture_WebGPU.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n // @see https://www.w3.org/TR/webgpu/#dom-gputexture-destroy\n this.gpuTexture.destroy();\n };\n return Texture_WebGPU;\n}(ResourceBase_WebGPU));\n\n/**\n * It works by recording the draw calls during one frame and by replaying this recording for all subsequent frames.\n * So, the scene should be mostly static for this mode to work as expected.\n * @see https://doc.babylonjs.com/setup/support/webGPU/webGPUOptimization/webGPUSnapshotRendering\n */\nvar RenderBundle_WebGPU = /** @class */ (function (_super) {\n __extends(RenderBundle_WebGPU, _super);\n function RenderBundle_WebGPU(_a) {\n var id = _a.id, device = _a.device;\n var _this = _super.call(this, { id: id, device: device }) || this;\n _this.type = ResourceType.RenderBundle;\n _this.renderBundleEncoder = _this.device.device.createRenderBundleEncoder({\n colorFormats: [_this.device['swapChainFormat']],\n });\n return _this;\n }\n RenderBundle_WebGPU.prototype.finish = function () {\n this.renderBundle = this.renderBundleEncoder.finish();\n };\n return RenderBundle_WebGPU;\n}(ResourceBase_WebGPU));\n\nvar Device_WebGPU = /** @class */ (function () {\n function Device_WebGPU(adapter, device, canvas, canvasContext, glsl_compile, wGSLComposer) {\n this.swapChainWidth = 0;\n this.swapChainHeight = 0;\n this.swapChainTextureUsage = GPUTextureUsage$1.RENDER_ATTACHMENT | GPUTextureUsage$1.COPY_DST;\n this._resourceUniqueId = 0;\n this.renderPassPool = [];\n this.computePassPool = [];\n this.frameCommandEncoderPool = [];\n this.featureTextureCompressionBC = false;\n // VendorInfo\n this.platformString = 'WebGPU';\n this.glslVersion = \"#version 440\";\n this.explicitBindingLocations = true;\n this.separateSamplerTextures = true;\n this.viewportOrigin = ViewportOrigin.UPPER_LEFT;\n this.clipSpaceNearZ = ClipSpaceNearZ.ZERO;\n this.supportsSyncPipelineCompilation = false;\n this.supportMRT = true;\n this.device = device;\n this.canvas = canvas;\n this.canvasContext = canvasContext;\n this.glsl_compile = glsl_compile;\n this.WGSLComposer = wGSLComposer;\n this.fallbackTexture2D = this.createFallbackTexture(TextureDimension.TEXTURE_2D, SamplerFormatKind.Float);\n this.setResourceName(this.fallbackTexture2D, 'Fallback Texture2D');\n this.fallbackTexture2DDepth = this.createFallbackTexture(TextureDimension.TEXTURE_2D, SamplerFormatKind.Depth);\n this.setResourceName(this.fallbackTexture2DDepth, 'Fallback Depth Texture2D');\n this.fallbackTexture2DArray = this.createFallbackTexture(TextureDimension.TEXTURE_2D_ARRAY, SamplerFormatKind.Float);\n this.setResourceName(this.fallbackTexture2DArray, 'Fallback Texture2DArray');\n this.fallbackTexture3D = this.createFallbackTexture(TextureDimension.TEXTURE_3D, SamplerFormatKind.Float);\n this.setResourceName(this.fallbackTexture3D, 'Fallback Texture3D');\n this.fallbackTextureCube = this.createFallbackTexture(TextureDimension.TEXTURE_CUBE_MAP, SamplerFormatKind.Float);\n this.setResourceName(this.fallbackTextureCube, 'Fallback TextureCube');\n this.fallbackSamplerFiltering = this.createSampler({\n addressModeU: AddressMode.REPEAT,\n addressModeV: AddressMode.REPEAT,\n minFilter: FilterMode.POINT,\n magFilter: FilterMode.POINT,\n mipmapFilter: MipmapFilterMode.NEAREST,\n });\n this.setResourceName(this.fallbackSamplerFiltering, 'Fallback Sampler Filtering');\n this.fallbackSamplerComparison = this.createSampler({\n addressModeU: AddressMode.REPEAT,\n addressModeV: AddressMode.REPEAT,\n minFilter: FilterMode.POINT,\n magFilter: FilterMode.POINT,\n mipmapFilter: MipmapFilterMode.NEAREST,\n compareFunction: CompareFunction.ALWAYS,\n });\n this.setResourceName(this.fallbackSamplerComparison, 'Fallback Sampler Comparison Filtering');\n // Firefox doesn't support GPUDevice.features yet...\n if (this.device.features) {\n this.featureTextureCompressionBC = this.device.features.has('texture-compression-bc');\n }\n this.device.onuncapturederror = function (event) {\n console.error(event.error);\n };\n this.swapChainFormat = navigator.gpu.getPreferredCanvasFormat();\n // @see https://www.w3.org/TR/webgpu/#canvas-configuration\n this.canvasContext.configure({\n device: this.device,\n format: this.swapChainFormat,\n usage: this.swapChainTextureUsage,\n // @see https://www.w3.org/TR/webgpu/#gpucanvasalphamode\n // alphaMode: 'opaque',\n alphaMode: 'premultiplied',\n });\n }\n Device_WebGPU.prototype.destroy = function () { };\n // SwapChain\n Device_WebGPU.prototype.configureSwapChain = function (width, height) {\n if (this.swapChainWidth === width && this.swapChainHeight === height)\n return;\n this.swapChainWidth = width;\n this.swapChainHeight = height;\n };\n Device_WebGPU.prototype.getOnscreenTexture = function () {\n // @see https://www.w3.org/TR/webgpu/#dom-gpucanvascontext-getcurrenttexture\n var gpuTexture = this.canvasContext.getCurrentTexture();\n var gpuTextureView = gpuTexture.createView();\n var texture = new Texture_WebGPU({\n id: 0,\n device: this,\n descriptor: {\n format: Format.U8_RGBA_RT,\n width: this.swapChainWidth,\n height: this.swapChainHeight,\n depthOrArrayLayers: 0,\n dimension: TextureDimension.TEXTURE_2D,\n mipLevelCount: 1,\n usage: this.swapChainTextureUsage,\n },\n skipCreate: true,\n });\n texture.depthOrArrayLayers = 1;\n texture.sampleCount = 1;\n texture.gpuTexture = gpuTexture;\n texture.gpuTextureView = gpuTextureView;\n texture.name = 'Onscreen';\n this.setResourceName(texture, 'Onscreen Texture');\n return texture;\n };\n Device_WebGPU.prototype.getDevice = function () {\n return this;\n };\n Device_WebGPU.prototype.getCanvas = function () {\n return this.canvas;\n };\n Device_WebGPU.prototype.beginFrame = function () {\n assert(this.frameCommandEncoderPool.length === 0);\n };\n Device_WebGPU.prototype.endFrame = function () {\n assert(this.frameCommandEncoderPool.every(function (frameCommandEncoder) { return frameCommandEncoder !== null; }));\n this.device.queue.submit(this.frameCommandEncoderPool.map(function (frameCommandEncoder) {\n return frameCommandEncoder.finish();\n }));\n this.frameCommandEncoderPool = [];\n // for (let i = 0; i < this.queryPoolsSubmitted.length; i++) {\n // const queryPool = this.queryPoolsSubmitted[i];\n // queryPool.cpuBuffer.mapAsync(GPUMapMode.READ).then(() => {\n // queryPool.results = new BigUint64Array(\n // queryPool.cpuBuffer.getMappedRange(),\n // );\n // });\n // }\n // this.queryPoolsSubmitted.length = 0;\n };\n Device_WebGPU.prototype.getNextUniqueId = function () {\n return ++this._resourceUniqueId;\n };\n Device_WebGPU.prototype.createBuffer = function (descriptor) {\n return new Buffer_WebGPU({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n });\n };\n Device_WebGPU.prototype.createTexture = function (descriptor) {\n return new Texture_WebGPU({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n });\n };\n /**\n * @see https://www.w3.org/TR/webgpu/#dom-gpudevice-createsampler\n * @see https://www.w3.org/TR/webgpu/#GPUSamplerDescriptor\n */\n Device_WebGPU.prototype.createSampler = function (descriptor) {\n return new Sampler_WebGPU({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n });\n };\n Device_WebGPU.prototype.createRenderTarget = function (descriptor) {\n var texture = new Texture_WebGPU({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: __assign(__assign({}, descriptor), { dimension: TextureDimension.TEXTURE_2D, mipLevelCount: 1, depthOrArrayLayers: 1, usage: TextureUsage.RENDER_TARGET }),\n sampleCount: descriptor.sampleCount,\n });\n texture.depthOrArrayLayers = 1;\n // @ts-ignore\n texture.type = ResourceType.RenderTarget;\n return texture;\n };\n Device_WebGPU.prototype.createRenderTargetFromTexture = function (texture) {\n var _a = texture, format = _a.format, width = _a.width, height = _a.height, depthOrArrayLayers = _a.depthOrArrayLayers, sampleCount = _a.sampleCount, mipLevelCount = _a.mipLevelCount, gpuTexture = _a.gpuTexture, gpuTextureView = _a.gpuTextureView, usage = _a.usage;\n assert(!!(usage & GPUTextureUsage$1.RENDER_ATTACHMENT));\n var attachment = new Texture_WebGPU({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: {\n format: format,\n width: width,\n height: height,\n depthOrArrayLayers: depthOrArrayLayers,\n dimension: TextureDimension.TEXTURE_2D,\n mipLevelCount: mipLevelCount,\n usage: usage,\n },\n skipCreate: true,\n });\n attachment.depthOrArrayLayers = depthOrArrayLayers;\n attachment.sampleCount = sampleCount;\n attachment.gpuTexture = gpuTexture;\n attachment.gpuTextureView = gpuTextureView;\n return attachment;\n };\n Device_WebGPU.prototype.createProgram = function (descriptor) {\n var _a, _b;\n // preprocess GLSL first\n if ((_a = descriptor.vertex) === null || _a === void 0 ? void 0 : _a.glsl) {\n descriptor.vertex.glsl = preprocessShader_GLSL(this.queryVendorInfo(), 'vert', descriptor.vertex.glsl);\n }\n if ((_b = descriptor.fragment) === null || _b === void 0 ? void 0 : _b.glsl) {\n descriptor.fragment.glsl = preprocessShader_GLSL(this.queryVendorInfo(), 'frag', descriptor.fragment.glsl);\n }\n return new Program_WebGPU({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n });\n };\n Device_WebGPU.prototype.createProgramSimple = function (descriptor) {\n return new Program_WebGPU({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n });\n };\n Device_WebGPU.prototype.createTextureShared = function (descriptor, texture, skipCreate) {\n var size = {\n width: descriptor.width,\n height: descriptor.height,\n depthOrArrayLayers: descriptor.depthOrArrayLayers,\n };\n var mipLevelCount = descriptor.mipLevelCount;\n var format = translateTextureFormat(descriptor.format);\n var dimension = translateTextureDimension(descriptor.dimension);\n var usage = translateTextureUsage(descriptor.usage);\n texture.gpuTextureformat = format;\n texture.dimension = descriptor.dimension;\n texture.format = descriptor.format;\n texture.width = descriptor.width;\n texture.height = descriptor.height;\n texture.depthOrArrayLayers = descriptor.depthOrArrayLayers;\n texture.mipLevelCount = mipLevelCount;\n texture.usage = usage;\n texture.sampleCount = descriptor.sampleCount;\n if (!skipCreate) {\n var gpuTexture = this.device.createTexture({\n size: size,\n mipLevelCount: mipLevelCount,\n format: format,\n dimension: dimension,\n sampleCount: descriptor.sampleCount,\n usage: usage,\n });\n var gpuTextureView = gpuTexture.createView();\n texture.gpuTexture = gpuTexture;\n texture.gpuTextureView = gpuTextureView;\n }\n };\n Device_WebGPU.prototype.getFallbackSampler = function (samplerEntry) {\n var formatKind = samplerEntry.formatKind;\n if (formatKind === SamplerFormatKind.Depth && samplerEntry.comparison) {\n return this.fallbackSamplerComparison;\n }\n else {\n return this.fallbackSamplerFiltering;\n }\n };\n Device_WebGPU.prototype.getFallbackTexture = function (samplerEntry) {\n var dimension = samplerEntry.dimension, formatKind = samplerEntry.formatKind;\n if (dimension === TextureDimension.TEXTURE_2D)\n return formatKind === SamplerFormatKind.Depth\n ? this.fallbackTexture2DDepth\n : this.fallbackTexture2D;\n else if (dimension === TextureDimension.TEXTURE_2D_ARRAY)\n return this.fallbackTexture2DArray;\n else if (dimension === TextureDimension.TEXTURE_3D)\n return this.fallbackTexture3D;\n else if (dimension === TextureDimension.TEXTURE_CUBE_MAP)\n return this.fallbackTextureCube;\n else\n throw new Error('whoops');\n };\n Device_WebGPU.prototype.createFallbackTexture = function (dimension, formatKind) {\n var depthOrArrayLayers = dimension === TextureDimension.TEXTURE_CUBE_MAP ? 6 : 1;\n var format = formatKind === SamplerFormatKind.Float ? Format.U8_RGBA_NORM : Format.D24;\n return this.createTexture({\n dimension: dimension,\n format: format,\n usage: TextureUsage.SAMPLED,\n width: 1,\n height: 1,\n depthOrArrayLayers: depthOrArrayLayers,\n mipLevelCount: 1,\n });\n };\n Device_WebGPU.prototype.createBindings = function (descriptor) {\n return new Bindings_WebGPU({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n });\n };\n Device_WebGPU.prototype.createInputLayout = function (descriptor) {\n return new InputLayout_WebGPU({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n });\n };\n Device_WebGPU.prototype.createComputePipeline = function (descriptor) {\n return new ComputePipeline_WebGPU({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: descriptor,\n });\n };\n Device_WebGPU.prototype.createRenderPipeline = function (descriptor) {\n return new RenderPipeline_WebGPU({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: __assign({}, descriptor),\n });\n };\n Device_WebGPU.prototype.createQueryPool = function (type, elemCount) {\n return new QueryPool_WebGPU({\n id: this.getNextUniqueId(),\n device: this,\n descriptor: {\n type: type,\n elemCount: elemCount,\n },\n });\n };\n Device_WebGPU.prototype.createRenderPipelineInternal = function (renderPipeline, async) {\n // if (this.device.createRenderPipelineAsync === undefined) {\n // async = false;\n // }\n var _a;\n // // If we're already in the process of creating a the pipeline async, no need to kick the process off again...\n // if (async && renderPipeline.isCreatingAsync) {\n // return;\n // }\n if (renderPipeline.gpuRenderPipeline !== null) {\n return;\n }\n var descriptor = renderPipeline.descriptor;\n var program = descriptor.program;\n var vertexStage = program.vertexStage, fragmentStage = program.fragmentStage;\n if (vertexStage === null || fragmentStage === null)\n return;\n var _b = descriptor.megaStateDescriptor || {}, stencilBack = _b.stencilBack, stencilFront = _b.stencilFront, rest = __rest(_b, [\"stencilBack\", \"stencilFront\"]);\n var copied = copyMegaState(defaultMegaState);\n descriptor.megaStateDescriptor = __assign(__assign(__assign({}, copied), { stencilBack: __assign(__assign({}, copied.stencilBack), stencilBack), stencilFront: __assign(__assign({}, copied.stencilFront), stencilFront) }), rest);\n var defaultAttachmentState = descriptor.megaStateDescriptor.attachmentsState[0];\n descriptor.colorAttachmentFormats.forEach(function (format, i) {\n if (!descriptor.megaStateDescriptor.attachmentsState[i]) {\n descriptor.megaStateDescriptor.attachmentsState[i] =\n copyAttachmentState(undefined, defaultAttachmentState);\n }\n });\n var primitive = translatePrimitiveState((_a = descriptor.topology) !== null && _a !== void 0 ? _a : PrimitiveTopology.TRIANGLES, descriptor.megaStateDescriptor);\n var targets = translateTargets(descriptor.colorAttachmentFormats, descriptor.megaStateDescriptor);\n var depthStencil = translateDepthStencilState(descriptor.depthStencilAttachmentFormat, descriptor.megaStateDescriptor);\n var buffers = undefined;\n if (descriptor.inputLayout !== null)\n buffers = descriptor.inputLayout.buffers;\n var sampleCount = descriptor.sampleCount;\n // renderPipeline.isCreatingAsync = true;\n var gpuRenderPipelineDescriptor = {\n // layout,\n layout: 'auto',\n vertex: __assign(__assign({}, vertexStage), { buffers: buffers }),\n primitive: primitive,\n depthStencil: depthStencil,\n multisample: {\n count: sampleCount,\n },\n fragment: __assign(__assign({}, fragmentStage), { targets: targets }),\n };\n // TODO: async creation\n // @see https://www.w3.org/TR/webgpu/#dom-gpudevice-createrenderpipeline\n // renderPipeline.gpuRenderPipeline =\n // this.device.createRenderPipeline(gpuRenderPipeline);\n // if (renderPipeline.name !== undefined)\n // renderPipeline.gpuRenderPipeline.label = renderPipeline.name;\n // if (async) {\n // const gpuRenderPipeline = await this.device.createRenderPipelineAsync(\n // gpuRenderPipelineDescriptor,\n // );\n // // We might have created a sync pipeline while we were async building; no way to cancel the async\n // // pipeline build at this point, so just chuck it out :/\n // if (renderPipeline.gpuRenderPipeline === null)\n // renderPipeline.gpuRenderPipeline = gpuRenderPipeline;\n // } else {\n renderPipeline.gpuRenderPipeline = this.device.createRenderPipeline(gpuRenderPipelineDescriptor);\n // }\n // // if (renderPipeline.ResourceName !== undefined)\n // // renderPipeline.gpuRenderPipeline.label = renderPipeline.ResourceName;\n // renderPipeline.isCreatingAsync = false;\n };\n Device_WebGPU.prototype.createReadback = function () {\n return new Readback_WebGPU({\n id: this.getNextUniqueId(),\n device: this,\n });\n };\n Device_WebGPU.prototype.createRenderBundle = function () {\n return new RenderBundle_WebGPU({\n id: this.getNextUniqueId(),\n device: this,\n });\n };\n Device_WebGPU.prototype.createRenderPass = function (renderPassDescriptor) {\n var pass = this.renderPassPool.pop();\n if (pass === undefined) {\n pass = new RenderPass_WebGPU(this);\n }\n var frameCommandEncoder = this.frameCommandEncoderPool.pop();\n if (frameCommandEncoder === undefined) {\n frameCommandEncoder = this.device.createCommandEncoder();\n }\n pass.beginRenderPass(frameCommandEncoder, renderPassDescriptor);\n return pass;\n };\n Device_WebGPU.prototype.createComputePass = function () {\n var pass = this.computePassPool.pop();\n if (pass === undefined)\n pass = new ComputePass_WebGPU();\n var frameCommandEncoder = this.frameCommandEncoderPool.pop();\n if (frameCommandEncoder === undefined) {\n frameCommandEncoder = this.device.createCommandEncoder();\n }\n pass.beginComputePass(frameCommandEncoder);\n return pass;\n };\n Device_WebGPU.prototype.submitPass = function (_pass) {\n var pass = _pass;\n if (pass instanceof RenderPass_WebGPU) {\n // release encoder\n this.frameCommandEncoderPool.push(pass.frameCommandEncoder);\n pass.finish();\n this.renderPassPool.push(pass);\n // if (pass.occlusionQueryPool !== null) {\n // this.queryPoolsSubmitted.push(pass.occlusionQueryPool);\n // }\n }\n else if (pass instanceof ComputePass_WebGPU) {\n this.frameCommandEncoderPool.push(pass.frameCommandEncoder);\n pass.finish();\n this.computePassPool.push(pass);\n }\n };\n Device_WebGPU.prototype.copySubTexture2D = function (dst_, dstX, dstY, src_, srcX, srcY, depthOrArrayLayers) {\n var cmd = this.device.createCommandEncoder();\n var dst = dst_;\n var src = src_;\n var srcCopy = {\n texture: src.gpuTexture,\n origin: [srcX, srcY, 0],\n mipLevel: 0,\n aspect: 'all',\n };\n var dstCopy = {\n texture: dst.gpuTexture,\n origin: [dstX, dstY, 0],\n mipLevel: 0,\n aspect: 'all',\n };\n assert(!!(src.usage & GPUTextureUsage$1.COPY_SRC));\n assert(!!(dst.usage & GPUTextureUsage$1.COPY_DST));\n cmd.copyTextureToTexture(srcCopy, dstCopy, [\n src.width,\n src.height,\n depthOrArrayLayers || 1,\n ]);\n this.device.queue.submit([cmd.finish()]);\n };\n Device_WebGPU.prototype.queryLimits = function () {\n // GPUAdapter.limits\n // @see https://www.w3.org/TR/webgpu/#gpu-supportedlimits\n return {\n uniformBufferMaxPageWordSize: this.device.limits.maxUniformBufferBindingSize >>> 2,\n uniformBufferWordAlignment: this.device.limits.minUniformBufferOffsetAlignment >>> 2,\n supportedSampleCounts: [1],\n occlusionQueriesRecommended: true,\n computeShadersSupported: true,\n };\n };\n Device_WebGPU.prototype.queryTextureFormatSupported = function (format, width, height) {\n if (isFormatTextureCompressionBC(format)) {\n if (!this.featureTextureCompressionBC)\n return false;\n var bb = getFormatBlockSize(format);\n if (width % bb !== 0 || height % bb !== 0)\n return false;\n return this.featureTextureCompressionBC;\n }\n switch (format) {\n case Format.U16_RGBA_NORM:\n return false;\n case Format.F32_RGBA:\n return false; // unfilterable\n }\n return true;\n };\n Device_WebGPU.prototype.queryPlatformAvailable = function () {\n // TODO: should listen to lost event\n return true;\n };\n Device_WebGPU.prototype.queryVendorInfo = function () {\n return this;\n };\n Device_WebGPU.prototype.queryRenderPass = function (o) {\n var pass = o;\n return pass.descriptor;\n };\n Device_WebGPU.prototype.queryRenderTarget = function (o) {\n var attachment = o;\n return attachment;\n };\n Device_WebGPU.prototype.setResourceName = function (o, s) {\n o.name = s;\n if (o.type === ResourceType.Buffer) {\n var r = o;\n r.gpuBuffer.label = s;\n }\n else if (o.type === ResourceType.Texture) {\n var r = o;\n r.gpuTexture.label = s;\n r.gpuTextureView.label = s;\n }\n else if (o.type === ResourceType.RenderTarget) {\n var r = o;\n r.gpuTexture.label = s;\n r.gpuTextureView.label = s;\n }\n else if (o.type === ResourceType.Sampler) {\n var r = o;\n r.gpuSampler.label = s;\n }\n else if (o.type === ResourceType.RenderPipeline) {\n var r = o;\n if (r.gpuRenderPipeline !== null)\n r.gpuRenderPipeline.label = s;\n }\n };\n Device_WebGPU.prototype.setResourceLeakCheck = function (o, v) { };\n Device_WebGPU.prototype.checkForLeaks = function () { };\n Device_WebGPU.prototype.programPatched = function (o) { };\n Device_WebGPU.prototype.pipelineQueryReady = function (o) {\n var renderPipeline = o;\n return renderPipeline.gpuRenderPipeline !== null;\n };\n Device_WebGPU.prototype.pipelineForceReady = function (o) {\n var renderPipeline = o;\n this.createRenderPipelineInternal(renderPipeline, false);\n };\n return Device_WebGPU;\n}());\n\nvar WebGPUDeviceContribution = /** @class */ (function () {\n function WebGPUDeviceContribution(pluginOptions) {\n this.pluginOptions = pluginOptions;\n }\n WebGPUDeviceContribution.prototype.createSwapChain = function ($canvas) {\n return __awaiter(this, void 0, void 0, function () {\n var adapter, xrCompatible, e_1, optionalFeatures, requiredFeatures, device, onContextLost_1, context;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // eslint-disable-next-line\n if (globalThis.navigator.gpu === undefined)\n return [2 /*return*/, null];\n adapter = null;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n xrCompatible = this.pluginOptions.xrCompatible;\n return [4 /*yield*/, globalThis.navigator.gpu.requestAdapter({\n xrCompatible: xrCompatible,\n })];\n case 2:\n // eslint-disable-next-line\n adapter = _a.sent();\n return [3 /*break*/, 4];\n case 3:\n e_1 = _a.sent();\n console.log(e_1);\n return [3 /*break*/, 4];\n case 4:\n if (adapter === null)\n return [2 /*return*/, null];\n optionalFeatures = [\n // 'depth24unorm-stencil8',\n 'depth32float-stencil8',\n 'texture-compression-bc',\n 'float32-filterable',\n ];\n requiredFeatures = optionalFeatures.filter(function (feature) {\n return adapter.features.has(feature);\n });\n return [4 /*yield*/, adapter.requestDevice({ requiredFeatures: requiredFeatures })];\n case 5:\n device = _a.sent();\n if (device) {\n onContextLost_1 = this.pluginOptions.onContextLost;\n device.lost.then(function () {\n if (onContextLost_1) {\n onContextLost_1();\n }\n });\n }\n if (device === null)\n return [2 /*return*/, null];\n context = $canvas.getContext('webgpu');\n if (!context)\n return [2 /*return*/, null];\n _a.label = 6;\n case 6:\n _a.trys.push([6, 8, , 9]);\n return [4 /*yield*/, __wbg_init(this.pluginOptions.shaderCompilerPath)];\n case 7:\n _a.sent();\n return [3 /*break*/, 9];\n case 8:\n _a.sent();\n return [3 /*break*/, 9];\n case 9: return [2 /*return*/, new Device_WebGPU(adapter, device, $canvas, context, glsl_compile, WGSLComposer && new WGSLComposer())];\n }\n });\n });\n };\n return WebGPUDeviceContribution;\n}());\n\nexport { AddressMode, BlendFactor, BlendMode, BufferFrequencyHint, BufferUsage, ChannelWriteMask, ClipSpaceNearZ, CompareFunction, CullMode, FilterMode, Format, FormatCompFlags, FormatFlags, FormatTypeFlags, FrontFace, GL, IsDepthReversed, MipmapFilterMode, OpaqueBlack, OpaqueWhite, PrimitiveTopology, QueryPoolType, ResourceType, SamplerFormatKind, StencilOp, TextureDimension, TextureEvent, TextureUsage, TransparentBlack, TransparentWhite, UNIFORM_SETTERS, VertexStepMode, ViewportOrigin, WebGLDeviceContribution, WebGPUDeviceContribution, align, alignNonPowerOfTwo, arrayCopy, arrayEqual, assert, assertExists, bindingsDescriptorCopy, bindingsDescriptorEquals, bisectRight, bufferBindingCopy, colorCopy, colorEqual, colorNewCopy, colorNewFromRGBA, compareDepthValues, copyAttachmentState, copyAttachmentStateFromSimple, copyMegaState, copyStencilFaceState, defaultBindingLayoutSamplerDescriptor, defaultMegaState, fallbackUndefined, fillArray, fullscreenMegaState, getAttributeLocations, getDefines, getFormatByteSize, getFormatCompByteSize, getFormatCompFlags, getFormatCompFlagsComponentCount, getFormatComponentCount, getFormatFlags, getFormatSamplerKind, getFormatTypeFlags, getFormatTypeFlagsByteSize, getUniformSetter, getUniforms, inputLayoutBufferDescriptorCopy, inputLayoutBufferDescriptorEquals, inputLayoutDescriptorCopy, inputLayoutDescriptorEquals, isPowerOfTwo, isTypedArray, leftPad, makeFormat, makeMegaState, makeTextureDescriptor2D, nArray, nullify, parseUniformName, prependLineNo, preprocessProgram_GLSL, preprocessShader_GLSL, range, renderPipelineDescriptorCopy, renderPipelineDescriptorEquals, reverseDepthForClearValue, reverseDepthForCompareFunction, reverseDepthForDepthOffset, reverseDepthForOrthographicProjectionMatrix, reverseDepthForPerspectiveProjectionMatrix, samplerBindingCopy, samplerDescriptorEquals, setAttachmentStateSimple, setBitFlagEnabled, setFormatComponentCount, setFormatFlags, setMegaStateFlags, spliceBisectRight, stencilFaceStateEquals, textureBindingCopy, vertexAttributeDescriptorCopy, vertexAttributeDescriptorEquals };\n//# sourceMappingURL=index.js.map\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","// This icon file is generated automatically.\nvar FilterOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M880.1 154H143.9c-24.5 0-39.8 26.7-27.5 48L349 597.4V838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3 31.8-32V597.4L907.7 202c12.2-21.3-3.1-48-27.6-48zM603.4 798H420.6V642h182.9v156zm9.6-236.6l-9.5 16.6h-183l-9.5-16.6L212.7 226h598.6L613 561.4z\" } }] }, \"name\": \"filter\", \"theme\": \"outlined\" };\nexport default FilterOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport FilterOutlinedSvg from \"@ant-design/icons-svg/es/asn/FilterOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar FilterOutlined = function FilterOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: FilterOutlinedSvg\n }));\n};\n\n/**![filter](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg4MC4xIDE1NEgxNDMuOWMtMjQuNSAwLTM5LjggMjYuNy0yNy41IDQ4TDM0OSA1OTcuNFY4MzhjMCAxNy43IDE0LjIgMzIgMzEuOCAzMmgyNjIuNGMxNy42IDAgMzEuOC0xNC4zIDMxLjgtMzJWNTk3LjRMOTA3LjcgMjAyYzEyLjItMjEuMy0zLjEtNDgtMjcuNi00OHpNNjAzLjQgNzk4SDQyMC42VjY0MmgxODIuOXYxNTZ6bTkuNi0yMzYuNmwtOS41IDE2LjZoLTE4M2wtOS41LTE2LjZMMjEyLjcgMjI2aDU5OC42TDYxMyA1NjEuNHoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(FilterOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'FilterOutlined';\n}\nexport default RefIcon;","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nvar _excluded = [\"size\", \"collapse\", \"collapseLabel\", \"initialValues\", \"onValuesChange\", \"form\", \"placement\", \"formRef\", \"bordered\", \"ignoreRules\", \"footerRender\"];\nimport { FilterOutlined } from '@ant-design/icons';\nimport { useIntl } from '@ant-design/pro-provider';\nimport { FieldLabel, FilterDropdown } from '@ant-design/pro-utils';\nimport { ConfigProvider } from 'antd';\nimport classNames from 'classnames';\nimport omit from \"rc-util/es/omit\";\nimport React, { useContext, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { BaseForm } from \"../../BaseForm\";\nimport { useStyle } from \"./style\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * 单行的查询表单,一般用于配合 table 或者 list使用 有时也会用于 card 的额外区域\n *\n * @param props\n */\nvar LightFilterContainer = function LightFilterContainer(props) {\n var items = props.items,\n prefixCls = props.prefixCls,\n _props$size = props.size,\n size = _props$size === void 0 ? 'middle' : _props$size,\n collapse = props.collapse,\n collapseLabel = props.collapseLabel,\n onValuesChange = props.onValuesChange,\n bordered = props.bordered,\n values = props.values,\n footerRender = props.footerRender,\n placement = props.placement;\n var intl = useIntl();\n var lightFilterClassName = \"\".concat(prefixCls, \"-light-filter\");\n var _useStyle = useStyle(lightFilterClassName),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n open = _useState2[0],\n setOpen = _useState2[1];\n var _useState3 = useState(function () {\n return _objectSpread({}, values);\n }),\n _useState4 = _slicedToArray(_useState3, 2),\n moreValues = _useState4[0],\n setMoreValues = _useState4[1];\n useEffect(function () {\n setMoreValues(_objectSpread({}, values));\n }, [values]);\n var _useMemo = useMemo(function () {\n var collapseItemsArr = [];\n var outsideItemsArr = [];\n items.forEach(function (item) {\n var _ref = item.props || {},\n secondary = _ref.secondary;\n if (secondary || collapse) {\n collapseItemsArr.push(item);\n } else {\n outsideItemsArr.push(item);\n }\n });\n return {\n collapseItems: collapseItemsArr,\n outsideItems: outsideItemsArr\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.items]),\n collapseItems = _useMemo.collapseItems,\n outsideItems = _useMemo.outsideItems;\n var renderCollapseLabelRender = function renderCollapseLabelRender() {\n if (collapseLabel) {\n return collapseLabel;\n }\n if (collapse) {\n return /*#__PURE__*/_jsx(FilterOutlined, {\n className: \"\".concat(lightFilterClassName, \"-collapse-icon \").concat(hashId).trim()\n });\n }\n return /*#__PURE__*/_jsx(FieldLabel, {\n size: size,\n label: intl.getMessage('form.lightFilter.more', '更多筛选')\n });\n };\n return wrapSSR( /*#__PURE__*/_jsx(\"div\", {\n className: classNames(lightFilterClassName, hashId, \"\".concat(lightFilterClassName, \"-\").concat(size), _defineProperty({}, \"\".concat(lightFilterClassName, \"-effective\"), Object.keys(values).some(function (key) {\n return Array.isArray(values[key]) ? values[key].length > 0 : values[key];\n }))),\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"\".concat(lightFilterClassName, \"-container \").concat(hashId).trim(),\n children: [outsideItems.map(function (child, index) {\n if (!(child !== null && child !== void 0 && child.props)) {\n return child;\n }\n var key = child.key;\n var _ref2 = (child === null || child === void 0 ? void 0 : child.props) || {},\n fieldProps = _ref2.fieldProps;\n var newPlacement = fieldProps !== null && fieldProps !== void 0 && fieldProps.placement ? fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.placement : placement;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(lightFilterClassName, \"-item \").concat(hashId).trim(),\n children: /*#__PURE__*/React.cloneElement(child, {\n fieldProps: _objectSpread(_objectSpread({}, child.props.fieldProps), {}, {\n placement: newPlacement\n }),\n // proFieldProps 会直接作为 ProField 的 props 传递过去\n proFieldProps: _objectSpread(_objectSpread({}, child.props.proFieldProps), {}, {\n light: true,\n label: child.props.label,\n bordered: bordered\n }),\n bordered: bordered\n })\n }, key || index);\n }), collapseItems.length ? /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(lightFilterClassName, \"-item \").concat(hashId).trim(),\n children: /*#__PURE__*/_jsx(FilterDropdown, {\n padding: 24,\n open: open,\n onOpenChange: function onOpenChange(changeOpen) {\n setOpen(changeOpen);\n },\n placement: placement,\n label: renderCollapseLabelRender(),\n footerRender: footerRender,\n footer: {\n onConfirm: function onConfirm() {\n onValuesChange(_objectSpread({}, moreValues));\n setOpen(false);\n },\n onClear: function onClear() {\n var clearValues = {};\n collapseItems.forEach(function (child) {\n var name = child.props.name;\n clearValues[name] = undefined;\n });\n onValuesChange(clearValues);\n }\n },\n children: collapseItems.map(function (child) {\n var key = child.key;\n var _child$props = child.props,\n name = _child$props.name,\n fieldProps = _child$props.fieldProps;\n var newFieldProps = _objectSpread(_objectSpread({}, fieldProps), {}, {\n onChange: function onChange(e) {\n setMoreValues(_objectSpread(_objectSpread({}, moreValues), {}, _defineProperty({}, name, e !== null && e !== void 0 && e.target ? e.target.value : e)));\n return false;\n }\n });\n if (moreValues.hasOwnProperty(name)) {\n newFieldProps[child.props.valuePropName || 'value'] = moreValues[name];\n }\n var newPlacement = fieldProps !== null && fieldProps !== void 0 && fieldProps.placement ? fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.placement : placement;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(lightFilterClassName, \"-line \").concat(hashId).trim(),\n children: /*#__PURE__*/React.cloneElement(child, {\n fieldProps: _objectSpread(_objectSpread({}, newFieldProps), {}, {\n placement: newPlacement\n })\n })\n }, key);\n })\n })\n }, \"more\") : null]\n })\n }));\n};\nfunction LightFilter(props) {\n var size = props.size,\n collapse = props.collapse,\n collapseLabel = props.collapseLabel,\n initialValues = props.initialValues,\n _onValuesChange = props.onValuesChange,\n userForm = props.form,\n placement = props.placement,\n userFormRef = props.formRef,\n bordered = props.bordered,\n ignoreRules = props.ignoreRules,\n footerRender = props.footerRender,\n reset = _objectWithoutProperties(props, _excluded);\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var prefixCls = getPrefixCls('pro-form');\n var _useState5 = useState(function () {\n return _objectSpread({}, initialValues);\n }),\n _useState6 = _slicedToArray(_useState5, 2),\n values = _useState6[0],\n setValues = _useState6[1];\n var formRef = useRef();\n useImperativeHandle(userFormRef, function () {\n return formRef.current;\n }, [formRef.current]);\n return /*#__PURE__*/_jsx(BaseForm, _objectSpread(_objectSpread({\n size: size,\n initialValues: initialValues,\n form: userForm,\n contentRender: function contentRender(items) {\n return /*#__PURE__*/_jsx(LightFilterContainer, {\n prefixCls: prefixCls,\n items: items === null || items === void 0 ? void 0 : items.flatMap(function (item) {\n var _item$type;\n if (!item || !(item !== null && item !== void 0 && item.type)) return item;\n /** 如果是 ProFormGroup,直接拼接dom */\n if ((item === null || item === void 0 || (_item$type = item.type) === null || _item$type === void 0 ? void 0 : _item$type.displayName) === 'ProForm-Group') return item.props.children;\n return item;\n }),\n size: size,\n bordered: bordered,\n collapse: collapse,\n collapseLabel: collapseLabel,\n placement: placement,\n values: values || {},\n footerRender: footerRender,\n onValuesChange: function onValuesChange(newValues) {\n var _formRef$current, _formRef$current2;\n var newAllValues = _objectSpread(_objectSpread({}, values), newValues);\n setValues(newAllValues);\n (_formRef$current = formRef.current) === null || _formRef$current === void 0 || _formRef$current.setFieldsValue(newAllValues);\n (_formRef$current2 = formRef.current) === null || _formRef$current2 === void 0 || _formRef$current2.submit();\n if (_onValuesChange) {\n _onValuesChange(newValues, newAllValues);\n }\n }\n });\n },\n formRef: formRef,\n formItemProps: {\n colon: false,\n labelAlign: 'left'\n },\n fieldProps: {\n style: {\n width: undefined\n }\n }\n }, omit(reset, ['labelWidth'])), {}, {\n onValuesChange: function onValuesChange(_, allValues) {\n var _formRef$current3;\n setValues(allValues);\n _onValuesChange === null || _onValuesChange === void 0 || _onValuesChange(_, allValues);\n (_formRef$current3 = formRef.current) === null || _formRef$current3 === void 0 || _formRef$current3.submit();\n }\n }));\n}\nexport { LightFilter };","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { useStyle as useAntdStyle } from '@ant-design/pro-provider';\nvar genLightFilterStyle = function genLightFilterStyle(token) {\n return _defineProperty({}, token.componentCls, {\n lineHeight: '30px',\n // @see https://yuque.antfin-inc.com/tech-ui/topics/523\n '&::before': {\n display: 'block',\n height: 0,\n visibility: 'hidden',\n content: \"'.'\"\n },\n '&-small': {\n lineHeight: token.lineHeight\n },\n '&-container': {\n display: 'flex',\n flexWrap: 'wrap',\n gap: token.marginXS\n },\n '&-item': _defineProperty({\n whiteSpace: 'nowrap'\n }, \"\".concat(token.antCls, \"-form-item\"), {\n marginBlock: 0\n }),\n '&-line': {\n minWidth: '198px'\n },\n '&-line:not(:first-child)': {\n marginBlockStart: '16px',\n marginBlockEnd: 8\n },\n '&-collapse-icon': {\n width: token.controlHeight,\n height: token.controlHeight,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n '&-effective': _defineProperty({}, \"\".concat(token.componentCls, \"-collapse-icon\"), {\n backgroundColor: token.colorBgTextHover\n })\n });\n};\nexport function useStyle(prefixCls) {\n return useAntdStyle('LightFilter', function (token) {\n var proCardToken = _objectSpread(_objectSpread({}, token), {}, {\n componentCls: \".\".concat(prefixCls)\n });\n return [genLightFilterStyle(proCardToken)];\n });\n}","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport { calculateCentroid, fp64LowPart, rgb2arr } from '@antv/l7-utils';\nimport BaseModel from \"../../core/BaseModel\";\nimport { PointExtrudeTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/extrude/extrude_frag.glsl' */\nconst pointExtrudeFrag = \"\\nin vec4 v_color;\\nin float v_lightWeight;\\nout vec4 outputColor;\\n\\nlayout(std140) uniform commonUniforms {\\n float u_pickLight;\\n float u_heightfixed;\\n float u_r;\\n float u_linearColor;\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n float u_opacitylinear;\\n float u_opacitylinear_dir;\\n float u_lightEnable;\\n};\\n\\n#pragma include \\\"scene_uniforms\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n\\n outputColor = v_color;\\n // \\u5F00\\u542F\\u900F\\u660E\\u5EA6\\u6E10\\u53D8\\n // picking\\n if(u_pickLight > 0.0) {\\n outputColor = filterColorAlpha(outputColor, v_lightWeight);\\n } else {\\n outputColor = filterColor(outputColor);\\n }\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/extrude/extrude_vert.glsl' */\nconst pointExtrudeVert = \"#define pi (3.1415926535)\\n\\nlayout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in vec3 a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_EXTRUDE) in vec4 a_Extrude;\\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\\n\\nlayout(std140) uniform commonUniforms {\\n float u_pickLight;\\n float u_heightfixed;\\n float u_r;\\n float u_linearColor;\\n vec4 u_sourceColor;\\n vec4 u_targetColor;\\n float u_opacitylinear;\\n float u_opacitylinear_dir;\\n float u_lightEnable;\\n};\\nout vec4 v_color;\\nout float v_lightWeight;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"light\\\"\\n#pragma include \\\"picking\\\"\\n\\nfloat getYRadian(float x, float z) {\\n if (x > 0.0 && z > 0.0) {\\n return atan(x / z);\\n } else if (x > 0.0 && z <= 0.0) {\\n return atan(-z / x) + pi / 2.0;\\n } else if (x <= 0.0 && z <= 0.0) {\\n return pi + atan(x / z); //atan(x/z) +\\n } else {\\n return atan(z / -x) + pi * 3.0 / 2.0;\\n }\\n}\\n\\nfloat getXRadian(float y, float r) {\\n return atan(y / r);\\n}\\n\\nvoid main() {\\n vec3 size = a_Size * a_Position;\\n\\n vec3 offset = size; // \\u63A7\\u5236\\u5706\\u67F1\\u4F53\\u7684\\u5927\\u5C0F - \\u4ECE\\u6807\\u51C6\\u5355\\u4F4D\\u5706\\u67F1\\u4F53\\u8FDB\\u884C\\u504F\\u79FB\\n\\n if (u_heightfixed < 1.0) {\\n // \\u5706\\u67F1\\u4F53\\u4E0D\\u56FA\\u5B9A\\u9AD8\\u5EA6\\n } else {\\n // \\u5706\\u67F1\\u4F53\\u56FA\\u5B9A\\u9AD8\\u5EA6 \\uFF08 \\u5904\\u7406 mapbox \\uFF09\\n if (\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\\n u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET\\n ) {\\n offset *= 4.0 / pow(2.0, 21.0 - u_Zoom);\\n }\\n }\\n\\n vec2 positions = a_Extrude.xy;\\n vec2 positions64Low = a_Extrude.zw;\\n vec4 project_pos = project_position(vec4(positions, 0.0, 1.0), positions64Low);\\n\\n // u_r \\u63A7\\u5236\\u5706\\u67F1\\u7684\\u751F\\u957F\\n vec4 pos = vec4(project_pos.xy + offset.xy, offset.z * u_r, 1.0);\\n\\n // // \\u5706\\u67F1\\u5149\\u7167\\u6548\\u679C\\n float lightWeight = 1.0;\\n\\n if (u_lightEnable > 0.0) {\\n // \\u53D6\\u6D88\\u4E09\\u5143\\u8868\\u8FBE\\u5F0F\\uFF0C\\u589E\\u5F3A\\u5065\\u58EE\\u6027\\n lightWeight = calc_lighting(pos);\\n }\\n\\n v_lightWeight = lightWeight;\\n\\n v_color = a_Color;\\n\\n // \\u8BBE\\u7F6E\\u5706\\u67F1\\u7684\\u5E95\\u8272\\n if (u_linearColor == 1.0) {\\n // \\u4F7F\\u7528\\u6E10\\u53D8\\u989C\\u8272\\n v_color = mix(u_sourceColor, u_targetColor, a_Position.z);\\n v_color.a = v_color.a * opacity;\\n } else {\\n v_color = vec4(a_Color.rgb * lightWeight, a_Color.w * opacity);\\n }\\n\\n if (u_opacitylinear > 0.0) {\\n v_color.a *= u_opacitylinear_dir > 0.0 ? 1.0 - a_Position.z : a_Position.z;\\n }\\n\\n gl_Position = project_common_position_to_clipspace(pos);\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nexport default class ExtrudeModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"raiseCount\", 0);\n _defineProperty(this, \"raiseRepeat\", 0);\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n EXTRUDE: 10,\n NORMAL: 11\n });\n }\n getCommonUniformsInfo() {\n const {\n animateOption = {\n enable: false,\n speed: 0.01,\n repeat: false\n },\n sourceColor,\n targetColor,\n pickLight = false,\n heightfixed = false,\n opacityLinear = {\n enable: false,\n dir: 'up'\n },\n lightEnable = true\n } = this.layer.getLayerConfig();\n\n // 转化渐变色\n let useLinearColor = 0; // 默认不生效\n let sourceColorArr = [0, 0, 0, 0];\n let targetColorArr = [0, 0, 0, 0];\n if (sourceColor && targetColor) {\n sourceColorArr = rgb2arr(sourceColor);\n targetColorArr = rgb2arr(targetColor);\n useLinearColor = 1;\n }\n if (this.raiseCount < 1 && this.raiseRepeat > 0) {\n if (animateOption.enable) {\n const {\n speed = 0.01\n } = animateOption;\n this.raiseCount += speed;\n if (this.raiseCount >= 1) {\n if (this.raiseRepeat > 1) {\n this.raiseCount = 0;\n this.raiseRepeat--;\n } else {\n this.raiseCount = 1;\n }\n }\n }\n }\n const commonOptions = {\n // 圆柱体的拾取高亮是否要计算光照\n u_pickLight: Number(pickLight),\n // 圆柱体是否固定高度\n u_heightfixed: Number(heightfixed),\n u_r: animateOption.enable && this.raiseRepeat > 0 ? this.raiseCount : 1.0,\n // 渐变色支持参数\n u_linearColor: useLinearColor,\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\n // 透明度渐变\n u_opacitylinear: Number(opacityLinear.enable),\n u_opacitylinear_dir: opacityLinear.dir === 'up' ? 1.0 : 0.0,\n // 光照计算开关\n u_lightEnable: Number(lightEnable)\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n const {\n depth = true,\n animateOption: {\n repeat = 1\n }\n } = _this2.layer.getLayerConfig();\n _this2.raiseRepeat = repeat;\n _this2.initUniformsBuffer();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'pointExtrude',\n vertexShader: pointExtrudeVert,\n fragmentShader: pointExtrudeFrag,\n triangulation: PointExtrudeTriangulation,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n cull: {\n enable: true,\n face: gl.FRONT\n },\n depth: {\n enable: depth\n }\n });\n return [model];\n })();\n }\n registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: feature => {\n const {\n size\n } = feature;\n if (size) {\n let buffersize = [];\n if (Array.isArray(size)) {\n buffersize = size.length === 2 ? [size[0], size[0], size[1]] : size;\n }\n if (!Array.isArray(size)) {\n buffersize = [size, size, size];\n }\n return buffersize;\n } else {\n return [2, 2, 2];\n }\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'normal',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Normal',\n shaderLocation: this.attributeLocation.NORMAL,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: (feature, featureIdx, vertex, attributeIdx, normal) => {\n return normal;\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\n shaderLocation: this.attributeLocation.EXTRUDE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 4,\n update: feature => {\n const coordinates = calculateCentroid(feature.coordinates);\n // [lng, lat, lowLng, lowLat]\n // low part for enabled double precision\n return [coordinates[0], coordinates[1], fp64LowPart(coordinates[0]), fp64LowPart(coordinates[1])];\n }\n }\n });\n }\n}","import * as React from 'react';\nvar SummaryContext = /*#__PURE__*/React.createContext({});\nexport default SummaryContext;","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\"];\nimport * as React from 'react';\nexport default function FooterRow(_ref) {\n var children = _ref.children,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"tr\", props, children);\n}","import Cell from \"./Cell\";\nimport Row from \"./Row\";\n/**\n * Syntactic sugar. Do not support HOC.\n */\nfunction Summary(_ref) {\n var children = _ref.children;\n return children;\n}\nSummary.Row = Row;\nSummary.Cell = Cell;\nexport default Summary;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport Cell from \"../Cell\";\nimport TableContext from \"../context/TableContext\";\nimport { useContext } from '@rc-component/context';\nimport { getCellFixedInfo } from \"../utils/fixUtil\";\nimport SummaryContext from \"./SummaryContext\";\nexport default function SummaryCell(_ref) {\n var className = _ref.className,\n index = _ref.index,\n children = _ref.children,\n _ref$colSpan = _ref.colSpan,\n colSpan = _ref$colSpan === void 0 ? 1 : _ref$colSpan,\n rowSpan = _ref.rowSpan,\n align = _ref.align;\n var _useContext = useContext(TableContext, ['prefixCls', 'direction']),\n prefixCls = _useContext.prefixCls,\n direction = _useContext.direction;\n var _React$useContext = React.useContext(SummaryContext),\n scrollColumnIndex = _React$useContext.scrollColumnIndex,\n stickyOffsets = _React$useContext.stickyOffsets,\n flattenColumns = _React$useContext.flattenColumns;\n var lastIndex = index + colSpan - 1;\n var mergedColSpan = lastIndex + 1 === scrollColumnIndex ? colSpan + 1 : colSpan;\n var fixedInfo = getCellFixedInfo(index, index + mergedColSpan - 1, flattenColumns, stickyOffsets, direction);\n return /*#__PURE__*/React.createElement(Cell, _extends({\n className: className,\n index: index,\n component: \"td\",\n prefixCls: prefixCls,\n record: null,\n dataIndex: null,\n align: align,\n colSpan: mergedColSpan,\n rowSpan: rowSpan,\n render: function render() {\n return children;\n }\n }, fixedInfo));\n}","import { useContext } from '@rc-component/context';\nimport * as React from 'react';\nimport TableContext, { responseImmutable } from \"../context/TableContext\";\nimport devRenderTimes from \"../hooks/useRenderTimes\";\nimport Summary from \"./Summary\";\nimport SummaryContext from \"./SummaryContext\";\nfunction Footer(props) {\n if (process.env.NODE_ENV !== 'production') {\n devRenderTimes(props);\n }\n var children = props.children,\n stickyOffsets = props.stickyOffsets,\n flattenColumns = props.flattenColumns;\n var prefixCls = useContext(TableContext, 'prefixCls');\n var lastColumnIndex = flattenColumns.length - 1;\n var scrollColumn = flattenColumns[lastColumnIndex];\n var summaryContext = React.useMemo(function () {\n return {\n stickyOffsets: stickyOffsets,\n flattenColumns: flattenColumns,\n scrollColumnIndex: scrollColumn !== null && scrollColumn !== void 0 && scrollColumn.scrollbar ? lastColumnIndex : null\n };\n }, [scrollColumn, flattenColumns, lastColumnIndex, stickyOffsets]);\n return /*#__PURE__*/React.createElement(SummaryContext.Provider, {\n value: summaryContext\n }, /*#__PURE__*/React.createElement(\"tfoot\", {\n className: \"\".concat(prefixCls, \"-summary\")\n }, children));\n}\nexport default responseImmutable(Footer);\nexport var FooterComponents = Summary;","import * as React from 'react';\nimport ResizeObserver from 'rc-resize-observer';\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nexport default function MeasureCell(_ref) {\n var columnKey = _ref.columnKey,\n onColumnResize = _ref.onColumnResize;\n var cellRef = React.useRef();\n useLayoutEffect(function () {\n if (cellRef.current) {\n onColumnResize(columnKey, cellRef.current.offsetWidth);\n }\n }, []);\n return /*#__PURE__*/React.createElement(ResizeObserver, {\n data: columnKey\n }, /*#__PURE__*/React.createElement(\"td\", {\n ref: cellRef,\n style: {\n padding: 0,\n border: 0,\n height: 0\n }\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n height: 0,\n overflow: 'hidden'\n }\n }, \"\\xA0\")));\n}","import * as React from 'react';\nimport ResizeObserver from 'rc-resize-observer';\nimport MeasureCell from \"./MeasureCell\";\nimport isVisible from \"rc-util/es/Dom/isVisible\";\nexport default function MeasureRow(_ref) {\n var prefixCls = _ref.prefixCls,\n columnsKey = _ref.columnsKey,\n onColumnResize = _ref.onColumnResize;\n var ref = React.useRef(null);\n return /*#__PURE__*/React.createElement(\"tr\", {\n \"aria-hidden\": \"true\",\n className: \"\".concat(prefixCls, \"-measure-row\"),\n style: {\n height: 0,\n fontSize: 0\n },\n ref: ref\n }, /*#__PURE__*/React.createElement(ResizeObserver.Collection, {\n onBatchResize: function onBatchResize(infoList) {\n if (isVisible(ref.current)) {\n infoList.forEach(function (_ref2) {\n var columnKey = _ref2.data,\n size = _ref2.size;\n onColumnResize(columnKey, size.offsetWidth);\n });\n }\n }\n }, columnsKey.map(function (columnKey) {\n return /*#__PURE__*/React.createElement(MeasureCell, {\n key: columnKey,\n columnKey: columnKey,\n onColumnResize: onColumnResize\n });\n })));\n}","import { useContext } from '@rc-component/context';\nimport * as React from 'react';\nimport PerfContext from \"../context/PerfContext\";\nimport TableContext, { responseImmutable } from \"../context/TableContext\";\nimport useFlattenRecords from \"../hooks/useFlattenRecords\";\nimport devRenderTimes from \"../hooks/useRenderTimes\";\nimport { getColumnsKey } from \"../utils/valueUtil\";\nimport BodyRow from \"./BodyRow\";\nimport ExpandedRow from \"./ExpandedRow\";\nimport MeasureRow from \"./MeasureRow\";\nfunction Body(props) {\n if (process.env.NODE_ENV !== 'production') {\n devRenderTimes(props);\n }\n var data = props.data,\n measureColumnWidth = props.measureColumnWidth;\n var _useContext = useContext(TableContext, ['prefixCls', 'getComponent', 'onColumnResize', 'flattenColumns', 'getRowKey', 'expandedKeys', 'childrenColumnName', 'emptyNode', 'expandedRowOffset', 'fixedInfoList', 'colWidths']),\n prefixCls = _useContext.prefixCls,\n getComponent = _useContext.getComponent,\n onColumnResize = _useContext.onColumnResize,\n flattenColumns = _useContext.flattenColumns,\n getRowKey = _useContext.getRowKey,\n expandedKeys = _useContext.expandedKeys,\n childrenColumnName = _useContext.childrenColumnName,\n emptyNode = _useContext.emptyNode,\n _useContext$expandedR = _useContext.expandedRowOffset,\n expandedRowOffset = _useContext$expandedR === void 0 ? 0 : _useContext$expandedR,\n colWidths = _useContext.colWidths;\n var flattenData = useFlattenRecords(data, childrenColumnName, expandedKeys, getRowKey);\n var rowKeys = React.useMemo(function () {\n return flattenData.map(function (item) {\n return item.rowKey;\n });\n }, [flattenData]);\n\n // =================== Performance ====================\n var perfRef = React.useRef({\n renderWithProps: false\n });\n\n // ===================== Expanded =====================\n // `expandedRowOffset` data is same for all the rows.\n // Let's calc on Body side to save performance.\n var expandedRowInfo = React.useMemo(function () {\n var expandedColSpan = flattenColumns.length - expandedRowOffset;\n var expandedStickyStart = 0;\n for (var i = 0; i < expandedRowOffset; i += 1) {\n expandedStickyStart += colWidths[i] || 0;\n }\n return {\n offset: expandedRowOffset,\n colSpan: expandedColSpan,\n sticky: expandedStickyStart\n };\n }, [flattenColumns.length, expandedRowOffset, colWidths]);\n\n // ====================== Render ======================\n var WrapperComponent = getComponent(['body', 'wrapper'], 'tbody');\n var trComponent = getComponent(['body', 'row'], 'tr');\n var tdComponent = getComponent(['body', 'cell'], 'td');\n var thComponent = getComponent(['body', 'cell'], 'th');\n var rows;\n if (data.length) {\n rows = flattenData.map(function (item, idx) {\n var record = item.record,\n indent = item.indent,\n renderIndex = item.index,\n rowKey = item.rowKey;\n return /*#__PURE__*/React.createElement(BodyRow, {\n key: rowKey,\n rowKey: rowKey,\n rowKeys: rowKeys,\n record: record,\n index: idx,\n renderIndex: renderIndex,\n rowComponent: trComponent,\n cellComponent: tdComponent,\n scopeCellComponent: thComponent,\n indent: indent\n // Expanded row info\n ,\n expandedRowInfo: expandedRowInfo\n });\n });\n } else {\n rows = /*#__PURE__*/React.createElement(ExpandedRow, {\n expanded: true,\n className: \"\".concat(prefixCls, \"-placeholder\"),\n prefixCls: prefixCls,\n component: trComponent,\n cellComponent: tdComponent,\n colSpan: flattenColumns.length,\n isEmpty: true\n }, emptyNode);\n }\n var columnsKey = getColumnsKey(flattenColumns);\n return /*#__PURE__*/React.createElement(PerfContext.Provider, {\n value: perfRef.current\n }, /*#__PURE__*/React.createElement(WrapperComponent, {\n className: \"\".concat(prefixCls, \"-tbody\")\n }, measureColumnWidth && /*#__PURE__*/React.createElement(MeasureRow, {\n prefixCls: prefixCls,\n columnsKey: columnsKey,\n onColumnResize: onColumnResize\n }), rows));\n}\nif (process.env.NODE_ENV !== 'production') {\n Body.displayName = 'Body';\n}\nexport default responseImmutable(Body);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"columnType\"];\nimport * as React from 'react';\nimport { INTERNAL_COL_DEFINE } from \"./utils/legacyUtil\";\nimport { useContext } from '@rc-component/context';\nimport TableContext from \"./context/TableContext\";\nfunction ColGroup(_ref) {\n var colWidths = _ref.colWidths,\n columns = _ref.columns,\n columCount = _ref.columCount;\n var _useContext = useContext(TableContext, ['tableLayout']),\n tableLayout = _useContext.tableLayout;\n var cols = [];\n var len = columCount || columns.length;\n\n // Only insert col with width & additional props\n // Skip if rest col do not have any useful info\n var mustInsert = false;\n for (var i = len - 1; i >= 0; i -= 1) {\n var width = colWidths[i];\n var column = columns && columns[i];\n var additionalProps = void 0;\n var minWidth = void 0;\n if (column) {\n additionalProps = column[INTERNAL_COL_DEFINE];\n\n // fixed will cause layout problems\n if (tableLayout === 'auto') {\n minWidth = column.minWidth;\n }\n }\n if (width || minWidth || additionalProps || mustInsert) {\n var _ref2 = additionalProps || {},\n columnType = _ref2.columnType,\n restAdditionalProps = _objectWithoutProperties(_ref2, _excluded);\n cols.unshift( /*#__PURE__*/React.createElement(\"col\", _extends({\n key: i,\n style: {\n width: width,\n minWidth: minWidth\n }\n }, restAdditionalProps)));\n mustInsert = true;\n }\n }\n return /*#__PURE__*/React.createElement(\"colgroup\", null, cols);\n}\nexport default ColGroup;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"className\", \"noData\", \"columns\", \"flattenColumns\", \"colWidths\", \"columCount\", \"stickyOffsets\", \"direction\", \"fixHeader\", \"stickyTopOffset\", \"stickyBottomOffset\", \"stickyClassName\", \"onScroll\", \"maxContentScroll\", \"children\"];\nimport { useContext } from '@rc-component/context';\nimport classNames from 'classnames';\nimport { fillRef } from \"rc-util/es/ref\";\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport ColGroup from \"../ColGroup\";\nimport TableContext from \"../context/TableContext\";\nimport devRenderTimes from \"../hooks/useRenderTimes\";\nfunction useColumnWidth(colWidths, columCount) {\n return useMemo(function () {\n var cloneColumns = [];\n for (var i = 0; i < columCount; i += 1) {\n var val = colWidths[i];\n if (val !== undefined) {\n cloneColumns[i] = val;\n } else {\n return null;\n }\n }\n return cloneColumns;\n }, [colWidths.join('_'), columCount]);\n}\nvar FixedHolder = /*#__PURE__*/React.forwardRef(function (props, ref) {\n if (process.env.NODE_ENV !== 'production') {\n devRenderTimes(props);\n }\n var className = props.className,\n noData = props.noData,\n columns = props.columns,\n flattenColumns = props.flattenColumns,\n colWidths = props.colWidths,\n columCount = props.columCount,\n stickyOffsets = props.stickyOffsets,\n direction = props.direction,\n fixHeader = props.fixHeader,\n stickyTopOffset = props.stickyTopOffset,\n stickyBottomOffset = props.stickyBottomOffset,\n stickyClassName = props.stickyClassName,\n onScroll = props.onScroll,\n maxContentScroll = props.maxContentScroll,\n children = props.children,\n restProps = _objectWithoutProperties(props, _excluded);\n var _useContext = useContext(TableContext, ['prefixCls', 'scrollbarSize', 'isSticky', 'getComponent']),\n prefixCls = _useContext.prefixCls,\n scrollbarSize = _useContext.scrollbarSize,\n isSticky = _useContext.isSticky,\n getComponent = _useContext.getComponent;\n var TableComponent = getComponent(['header', 'table'], 'table');\n var combinationScrollBarSize = isSticky && !fixHeader ? 0 : scrollbarSize;\n\n // Pass wheel to scroll event\n var scrollRef = React.useRef(null);\n var setScrollRef = React.useCallback(function (element) {\n fillRef(ref, element);\n fillRef(scrollRef, element);\n }, []);\n React.useEffect(function () {\n function onWheel(e) {\n var _ref = e,\n currentTarget = _ref.currentTarget,\n deltaX = _ref.deltaX;\n if (deltaX) {\n onScroll({\n currentTarget: currentTarget,\n scrollLeft: currentTarget.scrollLeft + deltaX\n });\n e.preventDefault();\n }\n }\n var scrollEle = scrollRef.current;\n scrollEle === null || scrollEle === void 0 || scrollEle.addEventListener('wheel', onWheel, {\n passive: false\n });\n return function () {\n scrollEle === null || scrollEle === void 0 || scrollEle.removeEventListener('wheel', onWheel);\n };\n }, []);\n\n // Check if all flattenColumns has width\n var allFlattenColumnsWithWidth = React.useMemo(function () {\n return flattenColumns.every(function (column) {\n return column.width;\n });\n }, [flattenColumns]);\n\n // Add scrollbar column\n var lastColumn = flattenColumns[flattenColumns.length - 1];\n var ScrollBarColumn = {\n fixed: lastColumn ? lastColumn.fixed : null,\n scrollbar: true,\n onHeaderCell: function onHeaderCell() {\n return {\n className: \"\".concat(prefixCls, \"-cell-scrollbar\")\n };\n }\n };\n var columnsWithScrollbar = useMemo(function () {\n return combinationScrollBarSize ? [].concat(_toConsumableArray(columns), [ScrollBarColumn]) : columns;\n }, [combinationScrollBarSize, columns]);\n var flattenColumnsWithScrollbar = useMemo(function () {\n return combinationScrollBarSize ? [].concat(_toConsumableArray(flattenColumns), [ScrollBarColumn]) : flattenColumns;\n }, [combinationScrollBarSize, flattenColumns]);\n\n // Calculate the sticky offsets\n var headerStickyOffsets = useMemo(function () {\n var right = stickyOffsets.right,\n left = stickyOffsets.left;\n return _objectSpread(_objectSpread({}, stickyOffsets), {}, {\n left: direction === 'rtl' ? [].concat(_toConsumableArray(left.map(function (width) {\n return width + combinationScrollBarSize;\n })), [0]) : left,\n right: direction === 'rtl' ? right : [].concat(_toConsumableArray(right.map(function (width) {\n return width + combinationScrollBarSize;\n })), [0]),\n isSticky: isSticky\n });\n }, [combinationScrollBarSize, stickyOffsets, isSticky]);\n var mergedColumnWidth = useColumnWidth(colWidths, columCount);\n return /*#__PURE__*/React.createElement(\"div\", {\n style: _objectSpread({\n overflow: 'hidden'\n }, isSticky ? {\n top: stickyTopOffset,\n bottom: stickyBottomOffset\n } : {}),\n ref: setScrollRef,\n className: classNames(className, _defineProperty({}, stickyClassName, !!stickyClassName))\n }, /*#__PURE__*/React.createElement(TableComponent, {\n style: {\n tableLayout: 'fixed',\n visibility: noData || mergedColumnWidth ? null : 'hidden'\n }\n }, (!noData || !maxContentScroll || allFlattenColumnsWithWidth) && /*#__PURE__*/React.createElement(ColGroup, {\n colWidths: mergedColumnWidth ? [].concat(_toConsumableArray(mergedColumnWidth), [combinationScrollBarSize]) : [],\n columCount: columCount + 1,\n columns: flattenColumnsWithScrollbar\n }), children(_objectSpread(_objectSpread({}, restProps), {}, {\n stickyOffsets: headerStickyOffsets,\n columns: columnsWithScrollbar,\n flattenColumns: flattenColumnsWithScrollbar\n }))));\n});\nif (process.env.NODE_ENV !== 'production') {\n FixedHolder.displayName = 'FixedHolder';\n}\n\n/** Return a table in div as fixed element which contains sticky info */\n// export default responseImmutable(FixedHolder);\nexport default /*#__PURE__*/React.memo(FixedHolder);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport Cell from \"../Cell\";\nimport TableContext from \"../context/TableContext\";\nimport { useContext } from '@rc-component/context';\nimport { getCellFixedInfo } from \"../utils/fixUtil\";\nimport { getColumnsKey } from \"../utils/valueUtil\";\nvar HeaderRow = function HeaderRow(props) {\n var cells = props.cells,\n stickyOffsets = props.stickyOffsets,\n flattenColumns = props.flattenColumns,\n RowComponent = props.rowComponent,\n CellComponent = props.cellComponent,\n onHeaderRow = props.onHeaderRow,\n index = props.index;\n var _useContext = useContext(TableContext, ['prefixCls', 'direction']),\n prefixCls = _useContext.prefixCls,\n direction = _useContext.direction;\n var rowProps;\n if (onHeaderRow) {\n rowProps = onHeaderRow(cells.map(function (cell) {\n return cell.column;\n }), index);\n }\n var columnsKey = getColumnsKey(cells.map(function (cell) {\n return cell.column;\n }));\n return /*#__PURE__*/React.createElement(RowComponent, rowProps, cells.map(function (cell, cellIndex) {\n var column = cell.column;\n var fixedInfo = getCellFixedInfo(cell.colStart, cell.colEnd, flattenColumns, stickyOffsets, direction);\n var additionalProps;\n if (column && column.onHeaderCell) {\n additionalProps = cell.column.onHeaderCell(column);\n }\n return /*#__PURE__*/React.createElement(Cell, _extends({}, cell, {\n scope: column.title ? cell.colSpan > 1 ? 'colgroup' : 'col' : null,\n ellipsis: column.ellipsis,\n align: column.align,\n component: CellComponent,\n prefixCls: prefixCls,\n key: columnsKey[cellIndex]\n }, fixedInfo, {\n additionalProps: additionalProps,\n rowType: \"header\"\n }));\n }));\n};\nif (process.env.NODE_ENV !== 'production') {\n HeaderRow.displayName = 'HeaderRow';\n}\nexport default HeaderRow;","import { useContext } from '@rc-component/context';\nimport * as React from 'react';\nimport TableContext, { responseImmutable } from \"../context/TableContext\";\nimport devRenderTimes from \"../hooks/useRenderTimes\";\nimport HeaderRow from \"./HeaderRow\";\nfunction parseHeaderRows(rootColumns) {\n var rows = [];\n function fillRowCells(columns, colIndex) {\n var rowIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n // Init rows\n rows[rowIndex] = rows[rowIndex] || [];\n var currentColIndex = colIndex;\n var colSpans = columns.filter(Boolean).map(function (column) {\n var cell = {\n key: column.key,\n className: column.className || '',\n children: column.title,\n column: column,\n colStart: currentColIndex\n };\n var colSpan = 1;\n var subColumns = column.children;\n if (subColumns && subColumns.length > 0) {\n colSpan = fillRowCells(subColumns, currentColIndex, rowIndex + 1).reduce(function (total, count) {\n return total + count;\n }, 0);\n cell.hasSubColumns = true;\n }\n if ('colSpan' in column) {\n colSpan = column.colSpan;\n }\n if ('rowSpan' in column) {\n cell.rowSpan = column.rowSpan;\n }\n cell.colSpan = colSpan;\n cell.colEnd = cell.colStart + colSpan - 1;\n rows[rowIndex].push(cell);\n currentColIndex += colSpan;\n return colSpan;\n });\n return colSpans;\n }\n\n // Generate `rows` cell data\n fillRowCells(rootColumns, 0);\n\n // Handle `rowSpan`\n var rowCount = rows.length;\n var _loop = function _loop(rowIndex) {\n rows[rowIndex].forEach(function (cell) {\n if (!('rowSpan' in cell) && !cell.hasSubColumns) {\n // eslint-disable-next-line no-param-reassign\n cell.rowSpan = rowCount - rowIndex;\n }\n });\n };\n for (var rowIndex = 0; rowIndex < rowCount; rowIndex += 1) {\n _loop(rowIndex);\n }\n return rows;\n}\nvar Header = function Header(props) {\n if (process.env.NODE_ENV !== 'production') {\n devRenderTimes(props);\n }\n var stickyOffsets = props.stickyOffsets,\n columns = props.columns,\n flattenColumns = props.flattenColumns,\n onHeaderRow = props.onHeaderRow;\n var _useContext = useContext(TableContext, ['prefixCls', 'getComponent']),\n prefixCls = _useContext.prefixCls,\n getComponent = _useContext.getComponent;\n var rows = React.useMemo(function () {\n return parseHeaderRows(columns);\n }, [columns]);\n var WrapperComponent = getComponent(['header', 'wrapper'], 'thead');\n var trComponent = getComponent(['header', 'row'], 'tr');\n var thComponent = getComponent(['header', 'cell'], 'th');\n return /*#__PURE__*/React.createElement(WrapperComponent, {\n className: \"\".concat(prefixCls, \"-thead\")\n }, rows.map(function (row, rowIndex) {\n var rowNode = /*#__PURE__*/React.createElement(HeaderRow, {\n key: rowIndex,\n flattenColumns: flattenColumns,\n cells: row,\n stickyOffsets: stickyOffsets,\n rowComponent: trComponent,\n cellComponent: thComponent,\n onHeaderRow: onHeaderRow,\n index: rowIndex\n });\n return rowNode;\n }));\n};\nexport default responseImmutable(Header);","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport * as React from 'react';\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\n// fix ssr render\nvar defaultContainer = canUseDom() ? window : null;\n\n/** Sticky header hooks */\nexport default function useSticky(sticky, prefixCls) {\n var _ref = _typeof(sticky) === 'object' ? sticky : {},\n _ref$offsetHeader = _ref.offsetHeader,\n offsetHeader = _ref$offsetHeader === void 0 ? 0 : _ref$offsetHeader,\n _ref$offsetSummary = _ref.offsetSummary,\n offsetSummary = _ref$offsetSummary === void 0 ? 0 : _ref$offsetSummary,\n _ref$offsetScroll = _ref.offsetScroll,\n offsetScroll = _ref$offsetScroll === void 0 ? 0 : _ref$offsetScroll,\n _ref$getContainer = _ref.getContainer,\n getContainer = _ref$getContainer === void 0 ? function () {\n return defaultContainer;\n } : _ref$getContainer;\n var container = getContainer() || defaultContainer;\n var isSticky = !!sticky;\n return React.useMemo(function () {\n return {\n isSticky: isSticky,\n stickyClassName: isSticky ? \"\".concat(prefixCls, \"-sticky-holder\") : '',\n offsetHeader: offsetHeader,\n offsetSummary: offsetSummary,\n offsetScroll: offsetScroll,\n container: container\n };\n }, [isSticky, offsetScroll, offsetHeader, offsetSummary, prefixCls, container]);\n}","import * as React from 'react';\nfunction Panel(_ref) {\n var className = _ref.className,\n children = _ref.children;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: className\n }, children);\n}\nexport default Panel;","import { getDOM } from \"rc-util/es/Dom/findDOMNode\";\n\n// Copy from `rc-util/Dom/css.js`\nexport function getOffset(node) {\n var element = getDOM(node);\n var box = element.getBoundingClientRect();\n var docElem = document.documentElement;\n\n // < ie8 not support win.pageXOffset, use docElem.scrollLeft instead\n return {\n left: box.left + (window.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || document.body.clientLeft || 0),\n top: box.top + (window.pageYOffset || docElem.scrollTop) - (docElem.clientTop || document.body.clientTop || 0)\n };\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useContext } from '@rc-component/context';\nimport classNames from 'classnames';\nimport addEventListener from \"rc-util/es/Dom/addEventListener\";\nimport getScrollBarSize from \"rc-util/es/getScrollBarSize\";\nimport * as React from 'react';\nimport TableContext from \"./context/TableContext\";\nimport { useLayoutState } from \"./hooks/useFrame\";\nimport raf from \"rc-util/es/raf\";\nimport { getOffset } from \"./utils/offsetUtil\";\nimport { getDOM } from \"rc-util/es/Dom/findDOMNode\";\nvar StickyScrollBar = function StickyScrollBar(_ref, ref) {\n var _scrollBodyRef$curren, _scrollBodyRef$curren2;\n var scrollBodyRef = _ref.scrollBodyRef,\n onScroll = _ref.onScroll,\n offsetScroll = _ref.offsetScroll,\n container = _ref.container,\n direction = _ref.direction;\n var prefixCls = useContext(TableContext, 'prefixCls');\n var bodyScrollWidth = ((_scrollBodyRef$curren = scrollBodyRef.current) === null || _scrollBodyRef$curren === void 0 ? void 0 : _scrollBodyRef$curren.scrollWidth) || 0;\n var bodyWidth = ((_scrollBodyRef$curren2 = scrollBodyRef.current) === null || _scrollBodyRef$curren2 === void 0 ? void 0 : _scrollBodyRef$curren2.clientWidth) || 0;\n var scrollBarWidth = bodyScrollWidth && bodyWidth * (bodyWidth / bodyScrollWidth);\n var scrollBarRef = React.useRef();\n var _useLayoutState = useLayoutState({\n scrollLeft: 0,\n isHiddenScrollBar: true\n }),\n _useLayoutState2 = _slicedToArray(_useLayoutState, 2),\n scrollState = _useLayoutState2[0],\n setScrollState = _useLayoutState2[1];\n var refState = React.useRef({\n delta: 0,\n x: 0\n });\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n isActive = _React$useState2[0],\n setActive = _React$useState2[1];\n var rafRef = React.useRef(null);\n React.useEffect(function () {\n return function () {\n raf.cancel(rafRef.current);\n };\n }, []);\n var onMouseUp = function onMouseUp() {\n setActive(false);\n };\n var onMouseDown = function onMouseDown(event) {\n event.persist();\n refState.current.delta = event.pageX - scrollState.scrollLeft;\n refState.current.x = 0;\n setActive(true);\n event.preventDefault();\n };\n var onMouseMove = function onMouseMove(event) {\n var _window;\n // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\n var _ref2 = event || ((_window = window) === null || _window === void 0 ? void 0 : _window.event),\n buttons = _ref2.buttons;\n if (!isActive || buttons === 0) {\n // If out body mouse up, we can set isActive false when mouse move\n if (isActive) {\n setActive(false);\n }\n return;\n }\n var left = refState.current.x + event.pageX - refState.current.x - refState.current.delta;\n var isRTL = direction === 'rtl';\n // Limit scroll range\n left = Math.max(isRTL ? scrollBarWidth - bodyWidth : 0, Math.min(isRTL ? 0 : bodyWidth - scrollBarWidth, left));\n // Calculate the scroll position and update\n var shouldScroll = !isRTL || Math.abs(left) + Math.abs(scrollBarWidth) < bodyWidth;\n if (shouldScroll) {\n onScroll({\n scrollLeft: left / bodyWidth * (bodyScrollWidth + 2)\n });\n refState.current.x = event.pageX;\n }\n };\n var checkScrollBarVisible = function checkScrollBarVisible() {\n raf.cancel(rafRef.current);\n rafRef.current = raf(function () {\n if (!scrollBodyRef.current) {\n return;\n }\n var tableOffsetTop = getOffset(scrollBodyRef.current).top;\n var tableBottomOffset = tableOffsetTop + scrollBodyRef.current.offsetHeight;\n var currentClientOffset = container === window ? document.documentElement.scrollTop + window.innerHeight : getOffset(container).top + container.clientHeight;\n if (tableBottomOffset - getScrollBarSize() <= currentClientOffset || tableOffsetTop >= currentClientOffset - offsetScroll) {\n setScrollState(function (state) {\n return _objectSpread(_objectSpread({}, state), {}, {\n isHiddenScrollBar: true\n });\n });\n } else {\n setScrollState(function (state) {\n return _objectSpread(_objectSpread({}, state), {}, {\n isHiddenScrollBar: false\n });\n });\n }\n });\n };\n var setScrollLeft = function setScrollLeft(left) {\n setScrollState(function (state) {\n return _objectSpread(_objectSpread({}, state), {}, {\n scrollLeft: left / bodyScrollWidth * bodyWidth || 0\n });\n });\n };\n React.useImperativeHandle(ref, function () {\n return {\n setScrollLeft: setScrollLeft,\n checkScrollBarVisible: checkScrollBarVisible\n };\n });\n React.useEffect(function () {\n var onMouseUpListener = addEventListener(document.body, 'mouseup', onMouseUp, false);\n var onMouseMoveListener = addEventListener(document.body, 'mousemove', onMouseMove, false);\n checkScrollBarVisible();\n return function () {\n onMouseUpListener.remove();\n onMouseMoveListener.remove();\n };\n }, [scrollBarWidth, isActive]);\n\n // Loop for scroll event check\n React.useEffect(function () {\n if (!scrollBodyRef.current) return;\n var scrollParents = [];\n var parent = getDOM(scrollBodyRef.current);\n while (parent) {\n scrollParents.push(parent);\n parent = parent.parentElement;\n }\n scrollParents.forEach(function (p) {\n return p.addEventListener('scroll', checkScrollBarVisible, false);\n });\n window.addEventListener('resize', checkScrollBarVisible, false);\n window.addEventListener('scroll', checkScrollBarVisible, false);\n container.addEventListener('scroll', checkScrollBarVisible, false);\n return function () {\n scrollParents.forEach(function (p) {\n return p.removeEventListener('scroll', checkScrollBarVisible);\n });\n window.removeEventListener('resize', checkScrollBarVisible);\n window.removeEventListener('scroll', checkScrollBarVisible);\n container.removeEventListener('scroll', checkScrollBarVisible);\n };\n }, [container]);\n React.useEffect(function () {\n if (!scrollState.isHiddenScrollBar) {\n setScrollState(function (state) {\n var bodyNode = scrollBodyRef.current;\n if (!bodyNode) {\n return state;\n }\n return _objectSpread(_objectSpread({}, state), {}, {\n scrollLeft: bodyNode.scrollLeft / bodyNode.scrollWidth * bodyNode.clientWidth\n });\n });\n }\n }, [scrollState.isHiddenScrollBar]);\n if (bodyScrollWidth <= bodyWidth || !scrollBarWidth || scrollState.isHiddenScrollBar) {\n return null;\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n style: {\n height: getScrollBarSize(),\n width: bodyWidth,\n bottom: offsetScroll\n },\n className: \"\".concat(prefixCls, \"-sticky-scroll\")\n }, /*#__PURE__*/React.createElement(\"div\", {\n onMouseDown: onMouseDown,\n ref: scrollBarRef,\n className: classNames(\"\".concat(prefixCls, \"-sticky-scroll-bar\"), _defineProperty({}, \"\".concat(prefixCls, \"-sticky-scroll-bar-active\"), isActive)),\n style: {\n width: \"\".concat(scrollBarWidth, \"px\"),\n transform: \"translate3d(\".concat(scrollState.scrollLeft, \"px, 0, 0)\")\n }\n }));\n};\nexport default /*#__PURE__*/React.forwardRef(StickyScrollBar);","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useRef, useState, useEffect } from 'react';\n/**\n * Execute code before next frame but async\n */\nexport function useLayoutState(defaultState) {\n var stateRef = useRef(defaultState);\n var _useState = useState({}),\n _useState2 = _slicedToArray(_useState, 2),\n forceUpdate = _useState2[1];\n var lastPromiseRef = useRef(null);\n var updateBatchRef = useRef([]);\n function setFrameState(updater) {\n updateBatchRef.current.push(updater);\n var promise = Promise.resolve();\n lastPromiseRef.current = promise;\n promise.then(function () {\n if (lastPromiseRef.current === promise) {\n var prevBatch = updateBatchRef.current;\n var prevState = stateRef.current;\n updateBatchRef.current = [];\n prevBatch.forEach(function (batchUpdater) {\n stateRef.current = batchUpdater(stateRef.current);\n });\n lastPromiseRef.current = null;\n if (prevState !== stateRef.current) {\n forceUpdate({});\n }\n }\n });\n }\n useEffect(function () {\n return function () {\n lastPromiseRef.current = null;\n };\n }, []);\n return [stateRef.current, setFrameState];\n}\n\n/** Lock frame, when frame pass reset the lock. */\nexport function useTimeoutLock(defaultState) {\n var frameRef = useRef(defaultState || null);\n var timeoutRef = useRef();\n function cleanUp() {\n window.clearTimeout(timeoutRef.current);\n }\n function setState(newState) {\n frameRef.current = newState;\n cleanUp();\n timeoutRef.current = window.setTimeout(function () {\n frameRef.current = null;\n timeoutRef.current = undefined;\n }, 100);\n }\n function getState() {\n return frameRef.current;\n }\n useEffect(function () {\n return cleanUp;\n }, []);\n return [setState, getState];\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n/**\n * Feature:\n * - fixed not need to set width\n * - support `rowExpandable` to config row expand logic\n * - add `summary` to support `() => ReactNode`\n *\n * Update:\n * - `dataIndex` is `array[]` now\n * - `expandable` wrap all the expand related props\n *\n * Removed:\n * - expandIconAsCell\n * - useFixedHeader\n * - rowRef\n * - columns[number].onCellClick\n * - onRowClick\n * - onRowDoubleClick\n * - onRowMouseEnter\n * - onRowMouseLeave\n * - getBodyWrapper\n * - bodyStyle\n *\n * Deprecated:\n * - All expanded props, move into expandable\n */\n\nimport classNames from 'classnames';\nimport ResizeObserver from 'rc-resize-observer';\nimport { isStyleSupport } from \"rc-util/es/Dom/styleChecker\";\nimport { getTargetScrollBarSize } from \"rc-util/es/getScrollBarSize\";\nimport useEvent from \"rc-util/es/hooks/useEvent\";\nimport pickAttrs from \"rc-util/es/pickAttrs\";\nimport getValue from \"rc-util/es/utils/get\";\nimport warning from \"rc-util/es/warning\";\nimport * as React from 'react';\nimport Body from \"./Body\";\nimport ColGroup from \"./ColGroup\";\nimport { EXPAND_COLUMN, INTERNAL_HOOKS } from \"./constant\";\nimport TableContext, { makeImmutable } from \"./context/TableContext\";\nimport FixedHolder from \"./FixedHolder\";\nimport Footer, { FooterComponents } from \"./Footer\";\nimport Summary from \"./Footer/Summary\";\nimport Header from \"./Header/Header\";\nimport useColumns from \"./hooks/useColumns\";\nimport useExpand from \"./hooks/useExpand\";\nimport useFixedInfo from \"./hooks/useFixedInfo\";\nimport { useTimeoutLock } from \"./hooks/useFrame\";\nimport useHover from \"./hooks/useHover\";\nimport useSticky from \"./hooks/useSticky\";\nimport useStickyOffsets from \"./hooks/useStickyOffsets\";\nimport Panel from \"./Panel\";\nimport StickyScrollBar from \"./stickyScrollBar\";\nimport Column from \"./sugar/Column\";\nimport ColumnGroup from \"./sugar/ColumnGroup\";\nimport { getColumnsKey, validateValue, validNumberValue } from \"./utils/valueUtil\";\nimport { getDOM } from \"rc-util/es/Dom/findDOMNode\";\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nexport var DEFAULT_PREFIX = 'rc-table';\n\n// Used for conditions cache\nvar EMPTY_DATA = [];\n\n// Used for customize scroll\nvar EMPTY_SCROLL_TARGET = {};\nfunction defaultEmpty() {\n return 'No Data';\n}\nfunction Table(tableProps, ref) {\n var props = _objectSpread({\n rowKey: 'key',\n prefixCls: DEFAULT_PREFIX,\n emptyText: defaultEmpty\n }, tableProps);\n var prefixCls = props.prefixCls,\n className = props.className,\n rowClassName = props.rowClassName,\n style = props.style,\n data = props.data,\n rowKey = props.rowKey,\n scroll = props.scroll,\n tableLayout = props.tableLayout,\n direction = props.direction,\n title = props.title,\n footer = props.footer,\n summary = props.summary,\n caption = props.caption,\n id = props.id,\n showHeader = props.showHeader,\n components = props.components,\n emptyText = props.emptyText,\n onRow = props.onRow,\n onHeaderRow = props.onHeaderRow,\n onScroll = props.onScroll,\n internalHooks = props.internalHooks,\n transformColumns = props.transformColumns,\n internalRefs = props.internalRefs,\n tailor = props.tailor,\n getContainerWidth = props.getContainerWidth,\n sticky = props.sticky,\n _props$rowHoverable = props.rowHoverable,\n rowHoverable = _props$rowHoverable === void 0 ? true : _props$rowHoverable;\n var mergedData = data || EMPTY_DATA;\n var hasData = !!mergedData.length;\n var useInternalHooks = internalHooks === INTERNAL_HOOKS;\n\n // ===================== Warning ======================\n if (process.env.NODE_ENV !== 'production') {\n ['onRowClick', 'onRowDoubleClick', 'onRowContextMenu', 'onRowMouseEnter', 'onRowMouseLeave'].forEach(function (name) {\n warning(props[name] === undefined, \"`\".concat(name, \"` is removed, please use `onRow` instead.\"));\n });\n warning(!('getBodyWrapper' in props), '`getBodyWrapper` is deprecated, please use custom `components` instead.');\n }\n\n // ==================== Customize =====================\n var getComponent = React.useCallback(function (path, defaultComponent) {\n return getValue(components, path) || defaultComponent;\n }, [components]);\n var getRowKey = React.useMemo(function () {\n if (typeof rowKey === 'function') {\n return rowKey;\n }\n return function (record) {\n var key = record && record[rowKey];\n if (process.env.NODE_ENV !== 'production') {\n warning(key !== undefined, 'Each record in table should have a unique `key` prop, or set `rowKey` to an unique primary key.');\n }\n return key;\n };\n }, [rowKey]);\n var customizeScrollBody = getComponent(['body']);\n\n // ====================== Hover =======================\n var _useHover = useHover(),\n _useHover2 = _slicedToArray(_useHover, 3),\n startRow = _useHover2[0],\n endRow = _useHover2[1],\n onHover = _useHover2[2];\n\n // ====================== Expand ======================\n var _useExpand = useExpand(props, mergedData, getRowKey),\n _useExpand2 = _slicedToArray(_useExpand, 6),\n expandableConfig = _useExpand2[0],\n expandableType = _useExpand2[1],\n mergedExpandedKeys = _useExpand2[2],\n mergedExpandIcon = _useExpand2[3],\n mergedChildrenColumnName = _useExpand2[4],\n onTriggerExpand = _useExpand2[5];\n\n // ====================== Column ======================\n var scrollX = scroll === null || scroll === void 0 ? void 0 : scroll.x;\n var _React$useState = React.useState(0),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n componentWidth = _React$useState2[0],\n setComponentWidth = _React$useState2[1];\n var _useColumns = useColumns(_objectSpread(_objectSpread(_objectSpread({}, props), expandableConfig), {}, {\n expandable: !!expandableConfig.expandedRowRender,\n columnTitle: expandableConfig.columnTitle,\n expandedKeys: mergedExpandedKeys,\n getRowKey: getRowKey,\n // https://github.com/ant-design/ant-design/issues/23894\n onTriggerExpand: onTriggerExpand,\n expandIcon: mergedExpandIcon,\n expandIconColumnIndex: expandableConfig.expandIconColumnIndex,\n direction: direction,\n scrollWidth: useInternalHooks && tailor && typeof scrollX === 'number' ? scrollX : null,\n clientWidth: componentWidth\n }), useInternalHooks ? transformColumns : null),\n _useColumns2 = _slicedToArray(_useColumns, 4),\n columns = _useColumns2[0],\n flattenColumns = _useColumns2[1],\n flattenScrollX = _useColumns2[2],\n hasGapFixed = _useColumns2[3];\n var mergedScrollX = flattenScrollX !== null && flattenScrollX !== void 0 ? flattenScrollX : scrollX;\n var columnContext = React.useMemo(function () {\n return {\n columns: columns,\n flattenColumns: flattenColumns\n };\n }, [columns, flattenColumns]);\n\n // ======================= Refs =======================\n var fullTableRef = React.useRef();\n var scrollHeaderRef = React.useRef();\n var scrollBodyRef = React.useRef();\n var scrollBodyContainerRef = React.useRef();\n React.useImperativeHandle(ref, function () {\n return {\n nativeElement: fullTableRef.current,\n scrollTo: function scrollTo(config) {\n var _scrollBodyRef$curren3;\n if (scrollBodyRef.current instanceof HTMLElement) {\n // Native scroll\n var index = config.index,\n top = config.top,\n key = config.key;\n if (validNumberValue(top)) {\n var _scrollBodyRef$curren;\n (_scrollBodyRef$curren = scrollBodyRef.current) === null || _scrollBodyRef$curren === void 0 || _scrollBodyRef$curren.scrollTo({\n top: top\n });\n } else {\n var _scrollBodyRef$curren2;\n var mergedKey = key !== null && key !== void 0 ? key : getRowKey(mergedData[index]);\n (_scrollBodyRef$curren2 = scrollBodyRef.current.querySelector(\"[data-row-key=\\\"\".concat(mergedKey, \"\\\"]\"))) === null || _scrollBodyRef$curren2 === void 0 || _scrollBodyRef$curren2.scrollIntoView();\n }\n } else if ((_scrollBodyRef$curren3 = scrollBodyRef.current) !== null && _scrollBodyRef$curren3 !== void 0 && _scrollBodyRef$curren3.scrollTo) {\n // Pass to proxy\n scrollBodyRef.current.scrollTo(config);\n }\n }\n };\n });\n\n // ====================== Scroll ======================\n var scrollSummaryRef = React.useRef();\n var _React$useState3 = React.useState(false),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n pingedLeft = _React$useState4[0],\n setPingedLeft = _React$useState4[1];\n var _React$useState5 = React.useState(false),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n pingedRight = _React$useState6[0],\n setPingedRight = _React$useState6[1];\n var _React$useState7 = React.useState(new Map()),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n colsWidths = _React$useState8[0],\n updateColsWidths = _React$useState8[1];\n\n // Convert map to number width\n var colsKeys = getColumnsKey(flattenColumns);\n var pureColWidths = colsKeys.map(function (columnKey) {\n return colsWidths.get(columnKey);\n });\n var colWidths = React.useMemo(function () {\n return pureColWidths;\n }, [pureColWidths.join('_')]);\n var stickyOffsets = useStickyOffsets(colWidths, flattenColumns, direction);\n var fixHeader = scroll && validateValue(scroll.y);\n var horizonScroll = scroll && validateValue(mergedScrollX) || Boolean(expandableConfig.fixed);\n var fixColumn = horizonScroll && flattenColumns.some(function (_ref) {\n var fixed = _ref.fixed;\n return fixed;\n });\n\n // Sticky\n var stickyRef = React.useRef();\n var _useSticky = useSticky(sticky, prefixCls),\n isSticky = _useSticky.isSticky,\n offsetHeader = _useSticky.offsetHeader,\n offsetSummary = _useSticky.offsetSummary,\n offsetScroll = _useSticky.offsetScroll,\n stickyClassName = _useSticky.stickyClassName,\n container = _useSticky.container;\n\n // Footer (Fix footer must fixed header)\n var summaryNode = React.useMemo(function () {\n return summary === null || summary === void 0 ? void 0 : summary(mergedData);\n }, [summary, mergedData]);\n var fixFooter = (fixHeader || isSticky) && /*#__PURE__*/React.isValidElement(summaryNode) && summaryNode.type === Summary && summaryNode.props.fixed;\n\n // Scroll\n var scrollXStyle;\n var scrollYStyle;\n var scrollTableStyle;\n if (fixHeader) {\n scrollYStyle = {\n overflowY: hasData ? 'scroll' : 'auto',\n maxHeight: scroll.y\n };\n }\n if (horizonScroll) {\n scrollXStyle = {\n overflowX: 'auto'\n };\n // When no vertical scrollbar, should hide it\n // https://github.com/ant-design/ant-design/pull/20705\n // https://github.com/ant-design/ant-design/issues/21879\n if (!fixHeader) {\n scrollYStyle = {\n overflowY: 'hidden'\n };\n }\n scrollTableStyle = {\n width: mergedScrollX === true ? 'auto' : mergedScrollX,\n minWidth: '100%'\n };\n }\n var onColumnResize = React.useCallback(function (columnKey, width) {\n updateColsWidths(function (widths) {\n if (widths.get(columnKey) !== width) {\n var newWidths = new Map(widths);\n newWidths.set(columnKey, width);\n return newWidths;\n }\n return widths;\n });\n }, []);\n var _useTimeoutLock = useTimeoutLock(null),\n _useTimeoutLock2 = _slicedToArray(_useTimeoutLock, 2),\n setScrollTarget = _useTimeoutLock2[0],\n getScrollTarget = _useTimeoutLock2[1];\n function forceScroll(scrollLeft, target) {\n if (!target) {\n return;\n }\n if (typeof target === 'function') {\n target(scrollLeft);\n } else if (target.scrollLeft !== scrollLeft) {\n target.scrollLeft = scrollLeft;\n\n // Delay to force scroll position if not sync\n // ref: https://github.com/ant-design/ant-design/issues/37179\n if (target.scrollLeft !== scrollLeft) {\n setTimeout(function () {\n target.scrollLeft = scrollLeft;\n }, 0);\n }\n }\n }\n var onInternalScroll = useEvent(function (_ref2) {\n var currentTarget = _ref2.currentTarget,\n scrollLeft = _ref2.scrollLeft;\n var isRTL = direction === 'rtl';\n var mergedScrollLeft = typeof scrollLeft === 'number' ? scrollLeft : currentTarget.scrollLeft;\n var compareTarget = currentTarget || EMPTY_SCROLL_TARGET;\n if (!getScrollTarget() || getScrollTarget() === compareTarget) {\n var _stickyRef$current;\n setScrollTarget(compareTarget);\n forceScroll(mergedScrollLeft, scrollHeaderRef.current);\n forceScroll(mergedScrollLeft, scrollBodyRef.current);\n forceScroll(mergedScrollLeft, scrollSummaryRef.current);\n forceScroll(mergedScrollLeft, (_stickyRef$current = stickyRef.current) === null || _stickyRef$current === void 0 ? void 0 : _stickyRef$current.setScrollLeft);\n }\n var measureTarget = currentTarget || scrollHeaderRef.current;\n if (measureTarget) {\n var scrollWidth =\n // Should use mergedScrollX in virtual table(useInternalHooks && tailor === true)\n useInternalHooks && tailor && typeof mergedScrollX === 'number' ? mergedScrollX : measureTarget.scrollWidth;\n var clientWidth = measureTarget.clientWidth;\n // There is no space to scroll\n if (scrollWidth === clientWidth) {\n setPingedLeft(false);\n setPingedRight(false);\n return;\n }\n if (isRTL) {\n setPingedLeft(-mergedScrollLeft < scrollWidth - clientWidth);\n setPingedRight(-mergedScrollLeft > 0);\n } else {\n setPingedLeft(mergedScrollLeft > 0);\n setPingedRight(mergedScrollLeft < scrollWidth - clientWidth);\n }\n }\n });\n var onBodyScroll = useEvent(function (e) {\n onInternalScroll(e);\n onScroll === null || onScroll === void 0 || onScroll(e);\n });\n var triggerOnScroll = function triggerOnScroll() {\n if (horizonScroll && scrollBodyRef.current) {\n var _scrollBodyRef$curren4;\n onInternalScroll({\n currentTarget: getDOM(scrollBodyRef.current),\n scrollLeft: (_scrollBodyRef$curren4 = scrollBodyRef.current) === null || _scrollBodyRef$curren4 === void 0 ? void 0 : _scrollBodyRef$curren4.scrollLeft\n });\n } else {\n setPingedLeft(false);\n setPingedRight(false);\n }\n };\n var onFullTableResize = function onFullTableResize(_ref3) {\n var _stickyRef$current2;\n var width = _ref3.width;\n (_stickyRef$current2 = stickyRef.current) === null || _stickyRef$current2 === void 0 || _stickyRef$current2.checkScrollBarVisible();\n var mergedWidth = fullTableRef.current ? fullTableRef.current.offsetWidth : width;\n if (useInternalHooks && getContainerWidth && fullTableRef.current) {\n mergedWidth = getContainerWidth(fullTableRef.current, mergedWidth) || mergedWidth;\n }\n if (mergedWidth !== componentWidth) {\n triggerOnScroll();\n setComponentWidth(mergedWidth);\n }\n };\n\n // Sync scroll bar when init or `horizonScroll`, `data` and `columns.length` changed\n var mounted = React.useRef(false);\n React.useEffect(function () {\n // onFullTableResize will be trigger once when ResizeObserver is mounted\n // This will reduce one duplicated triggerOnScroll time\n if (mounted.current) {\n triggerOnScroll();\n }\n }, [horizonScroll, data, columns.length]);\n React.useEffect(function () {\n mounted.current = true;\n }, []);\n\n // ===================== Effects ======================\n var _React$useState9 = React.useState(0),\n _React$useState10 = _slicedToArray(_React$useState9, 2),\n scrollbarSize = _React$useState10[0],\n setScrollbarSize = _React$useState10[1];\n var _React$useState11 = React.useState(true),\n _React$useState12 = _slicedToArray(_React$useState11, 2),\n supportSticky = _React$useState12[0],\n setSupportSticky = _React$useState12[1]; // Only IE not support, we mark as support first\n\n useLayoutEffect(function () {\n if (!tailor || !useInternalHooks) {\n if (scrollBodyRef.current instanceof Element) {\n setScrollbarSize(getTargetScrollBarSize(scrollBodyRef.current).width);\n } else {\n setScrollbarSize(getTargetScrollBarSize(scrollBodyContainerRef.current).width);\n }\n }\n setSupportSticky(isStyleSupport('position', 'sticky'));\n }, []);\n\n // ================== INTERNAL HOOKS ==================\n React.useEffect(function () {\n if (useInternalHooks && internalRefs) {\n internalRefs.body.current = scrollBodyRef.current;\n }\n });\n\n // ========================================================================\n // == Render ==\n // ========================================================================\n // =================== Render: Func ===================\n var renderFixedHeaderTable = React.useCallback(function (fixedHolderPassProps) {\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Header, fixedHolderPassProps), fixFooter === 'top' && /*#__PURE__*/React.createElement(Footer, fixedHolderPassProps, summaryNode));\n }, [fixFooter, summaryNode]);\n var renderFixedFooterTable = React.useCallback(function (fixedHolderPassProps) {\n return /*#__PURE__*/React.createElement(Footer, fixedHolderPassProps, summaryNode);\n }, [summaryNode]);\n\n // =================== Render: Node ===================\n var TableComponent = getComponent(['table'], 'table');\n\n // Table layout\n var mergedTableLayout = React.useMemo(function () {\n if (tableLayout) {\n return tableLayout;\n }\n // https://github.com/ant-design/ant-design/issues/25227\n // When scroll.x is max-content, no need to fix table layout\n // it's width should stretch out to fit content\n if (fixColumn) {\n return mergedScrollX === 'max-content' ? 'auto' : 'fixed';\n }\n if (fixHeader || isSticky || flattenColumns.some(function (_ref4) {\n var ellipsis = _ref4.ellipsis;\n return ellipsis;\n })) {\n return 'fixed';\n }\n return 'auto';\n }, [fixHeader, fixColumn, flattenColumns, tableLayout, isSticky]);\n var groupTableNode;\n\n // Header props\n var headerProps = {\n colWidths: colWidths,\n columCount: flattenColumns.length,\n stickyOffsets: stickyOffsets,\n onHeaderRow: onHeaderRow,\n fixHeader: fixHeader,\n scroll: scroll\n };\n\n // Empty\n var emptyNode = React.useMemo(function () {\n if (hasData) {\n return null;\n }\n if (typeof emptyText === 'function') {\n return emptyText();\n }\n return emptyText;\n }, [hasData, emptyText]);\n\n // Body\n var bodyTable = /*#__PURE__*/React.createElement(Body, {\n data: mergedData,\n measureColumnWidth: fixHeader || horizonScroll || isSticky\n });\n var bodyColGroup = /*#__PURE__*/React.createElement(ColGroup, {\n colWidths: flattenColumns.map(function (_ref5) {\n var width = _ref5.width;\n return width;\n }),\n columns: flattenColumns\n });\n var captionElement = caption !== null && caption !== undefined ? /*#__PURE__*/React.createElement(\"caption\", {\n className: \"\".concat(prefixCls, \"-caption\")\n }, caption) : undefined;\n var dataProps = pickAttrs(props, {\n data: true\n });\n var ariaProps = pickAttrs(props, {\n aria: true\n });\n if (fixHeader || isSticky) {\n // >>>>>> Fixed Header\n var bodyContent;\n if (typeof customizeScrollBody === 'function') {\n bodyContent = customizeScrollBody(mergedData, {\n scrollbarSize: scrollbarSize,\n ref: scrollBodyRef,\n onScroll: onInternalScroll\n });\n headerProps.colWidths = flattenColumns.map(function (_ref6, index) {\n var width = _ref6.width;\n var colWidth = index === flattenColumns.length - 1 ? width - scrollbarSize : width;\n if (typeof colWidth === 'number' && !Number.isNaN(colWidth)) {\n return colWidth;\n }\n if (process.env.NODE_ENV !== 'production') {\n warning(props.columns.length === 0, 'When use `components.body` with render props. Each column should have a fixed `width` value.');\n }\n return 0;\n });\n } else {\n bodyContent = /*#__PURE__*/React.createElement(\"div\", {\n style: _objectSpread(_objectSpread({}, scrollXStyle), scrollYStyle),\n onScroll: onBodyScroll,\n ref: scrollBodyRef,\n className: classNames(\"\".concat(prefixCls, \"-body\"))\n }, /*#__PURE__*/React.createElement(TableComponent, _extends({\n style: _objectSpread(_objectSpread({}, scrollTableStyle), {}, {\n tableLayout: mergedTableLayout\n })\n }, ariaProps), captionElement, bodyColGroup, bodyTable, !fixFooter && summaryNode && /*#__PURE__*/React.createElement(Footer, {\n stickyOffsets: stickyOffsets,\n flattenColumns: flattenColumns\n }, summaryNode)));\n }\n\n // Fixed holder share the props\n var fixedHolderProps = _objectSpread(_objectSpread(_objectSpread({\n noData: !mergedData.length,\n maxContentScroll: horizonScroll && mergedScrollX === 'max-content'\n }, headerProps), columnContext), {}, {\n direction: direction,\n stickyClassName: stickyClassName,\n onScroll: onInternalScroll\n });\n groupTableNode = /*#__PURE__*/React.createElement(React.Fragment, null, showHeader !== false && /*#__PURE__*/React.createElement(FixedHolder, _extends({}, fixedHolderProps, {\n stickyTopOffset: offsetHeader,\n className: \"\".concat(prefixCls, \"-header\"),\n ref: scrollHeaderRef\n }), renderFixedHeaderTable), bodyContent, fixFooter && fixFooter !== 'top' && /*#__PURE__*/React.createElement(FixedHolder, _extends({}, fixedHolderProps, {\n stickyBottomOffset: offsetSummary,\n className: \"\".concat(prefixCls, \"-summary\"),\n ref: scrollSummaryRef\n }), renderFixedFooterTable), isSticky && scrollBodyRef.current && scrollBodyRef.current instanceof Element && /*#__PURE__*/React.createElement(StickyScrollBar, {\n ref: stickyRef,\n offsetScroll: offsetScroll,\n scrollBodyRef: scrollBodyRef,\n onScroll: onInternalScroll,\n container: container,\n direction: direction\n }));\n } else {\n // >>>>>> Unique table\n groupTableNode = /*#__PURE__*/React.createElement(\"div\", {\n style: _objectSpread(_objectSpread({}, scrollXStyle), scrollYStyle),\n className: classNames(\"\".concat(prefixCls, \"-content\")),\n onScroll: onInternalScroll,\n ref: scrollBodyRef\n }, /*#__PURE__*/React.createElement(TableComponent, _extends({\n style: _objectSpread(_objectSpread({}, scrollTableStyle), {}, {\n tableLayout: mergedTableLayout\n })\n }, ariaProps), captionElement, bodyColGroup, showHeader !== false && /*#__PURE__*/React.createElement(Header, _extends({}, headerProps, columnContext)), bodyTable, summaryNode && /*#__PURE__*/React.createElement(Footer, {\n stickyOffsets: stickyOffsets,\n flattenColumns: flattenColumns\n }, summaryNode)));\n }\n var fullTable = /*#__PURE__*/React.createElement(\"div\", _extends({\n className: classNames(prefixCls, className, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-rtl\"), direction === 'rtl'), \"\".concat(prefixCls, \"-ping-left\"), pingedLeft), \"\".concat(prefixCls, \"-ping-right\"), pingedRight), \"\".concat(prefixCls, \"-layout-fixed\"), tableLayout === 'fixed'), \"\".concat(prefixCls, \"-fixed-header\"), fixHeader), \"\".concat(prefixCls, \"-fixed-column\"), fixColumn), \"\".concat(prefixCls, \"-fixed-column-gapped\"), fixColumn && hasGapFixed), \"\".concat(prefixCls, \"-scroll-horizontal\"), horizonScroll), \"\".concat(prefixCls, \"-has-fix-left\"), flattenColumns[0] && flattenColumns[0].fixed), \"\".concat(prefixCls, \"-has-fix-right\"), flattenColumns[flattenColumns.length - 1] && flattenColumns[flattenColumns.length - 1].fixed === 'right')),\n style: style,\n id: id,\n ref: fullTableRef\n }, dataProps), title && /*#__PURE__*/React.createElement(Panel, {\n className: \"\".concat(prefixCls, \"-title\")\n }, title(mergedData)), /*#__PURE__*/React.createElement(\"div\", {\n ref: scrollBodyContainerRef,\n className: \"\".concat(prefixCls, \"-container\")\n }, groupTableNode), footer && /*#__PURE__*/React.createElement(Panel, {\n className: \"\".concat(prefixCls, \"-footer\")\n }, footer(mergedData)));\n if (horizonScroll) {\n fullTable = /*#__PURE__*/React.createElement(ResizeObserver, {\n onResize: onFullTableResize\n }, fullTable);\n }\n var fixedInfoList = useFixedInfo(flattenColumns, stickyOffsets, direction);\n var TableContextValue = React.useMemo(function () {\n return {\n // Scroll\n scrollX: mergedScrollX,\n // Table\n prefixCls: prefixCls,\n getComponent: getComponent,\n scrollbarSize: scrollbarSize,\n direction: direction,\n fixedInfoList: fixedInfoList,\n isSticky: isSticky,\n supportSticky: supportSticky,\n componentWidth: componentWidth,\n fixHeader: fixHeader,\n fixColumn: fixColumn,\n horizonScroll: horizonScroll,\n // Body\n tableLayout: mergedTableLayout,\n rowClassName: rowClassName,\n expandedRowClassName: expandableConfig.expandedRowClassName,\n expandIcon: mergedExpandIcon,\n expandableType: expandableType,\n expandRowByClick: expandableConfig.expandRowByClick,\n expandedRowRender: expandableConfig.expandedRowRender,\n expandedRowOffset: expandableConfig.expandedRowOffset,\n onTriggerExpand: onTriggerExpand,\n expandIconColumnIndex: expandableConfig.expandIconColumnIndex,\n indentSize: expandableConfig.indentSize,\n allColumnsFixedLeft: flattenColumns.every(function (col) {\n return col.fixed === 'left';\n }),\n emptyNode: emptyNode,\n // Column\n columns: columns,\n flattenColumns: flattenColumns,\n onColumnResize: onColumnResize,\n colWidths: colWidths,\n // Row\n hoverStartRow: startRow,\n hoverEndRow: endRow,\n onHover: onHover,\n rowExpandable: expandableConfig.rowExpandable,\n onRow: onRow,\n getRowKey: getRowKey,\n expandedKeys: mergedExpandedKeys,\n childrenColumnName: mergedChildrenColumnName,\n rowHoverable: rowHoverable\n };\n }, [\n // Scroll\n mergedScrollX,\n // Table\n prefixCls, getComponent, scrollbarSize, direction, fixedInfoList, isSticky, supportSticky, componentWidth, fixHeader, fixColumn, horizonScroll,\n // Body\n mergedTableLayout, rowClassName, expandableConfig.expandedRowClassName, mergedExpandIcon, expandableType, expandableConfig.expandRowByClick, expandableConfig.expandedRowRender, expandableConfig.expandedRowOffset, onTriggerExpand, expandableConfig.expandIconColumnIndex, expandableConfig.indentSize, emptyNode,\n // Column\n columns, flattenColumns, onColumnResize, colWidths,\n // Row\n startRow, endRow, onHover, expandableConfig.rowExpandable, onRow, getRowKey, mergedExpandedKeys, mergedChildrenColumnName, rowHoverable]);\n return /*#__PURE__*/React.createElement(TableContext.Provider, {\n value: TableContextValue\n }, fullTable);\n}\nvar RefTable = /*#__PURE__*/React.forwardRef(Table);\nif (process.env.NODE_ENV !== 'production') {\n RefTable.displayName = 'Table';\n}\nexport function genTable(shouldTriggerRender) {\n return makeImmutable(RefTable, shouldTriggerRender);\n}\nvar ImmutableTable = genTable();\nImmutableTable.EXPAND_COLUMN = EXPAND_COLUMN;\nImmutableTable.INTERNAL_HOOKS = INTERNAL_HOOKS;\nImmutableTable.Column = Column;\nImmutableTable.ColumnGroup = ColumnGroup;\nImmutableTable.Summary = FooterComponents;\nexport default ImmutableTable;","import useMemo from \"rc-util/es/hooks/useMemo\";\nimport isEqual from \"rc-util/es/isEqual\";\nimport { getCellFixedInfo } from \"../utils/fixUtil\";\nexport default function useFixedInfo(flattenColumns, stickyOffsets, direction) {\n var fixedInfoList = flattenColumns.map(function (_, colIndex) {\n return getCellFixedInfo(colIndex, colIndex, flattenColumns, stickyOffsets, direction);\n });\n return useMemo(function () {\n return fixedInfoList;\n }, [fixedInfoList], function (prev, next) {\n return !isEqual(prev, next);\n });\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nexport default function useHover() {\n var _React$useState = React.useState(-1),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n startRow = _React$useState2[0],\n setStartRow = _React$useState2[1];\n var _React$useState3 = React.useState(-1),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n endRow = _React$useState4[0],\n setEndRow = _React$useState4[1];\n var onHover = React.useCallback(function (start, end) {\n setStartRow(start);\n setEndRow(end);\n }, []);\n return [startRow, endRow, onHover];\n}","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport warning from \"rc-util/es/warning\";\nimport * as React from 'react';\nimport { INTERNAL_HOOKS } from \"../constant\";\nimport { findAllChildrenKeys, renderExpandIcon } from \"../utils/expandUtil\";\nimport { getExpandableProps } from \"../utils/legacyUtil\";\nexport default function useExpand(props, mergedData, getRowKey) {\n var expandableConfig = getExpandableProps(props);\n var expandIcon = expandableConfig.expandIcon,\n expandedRowKeys = expandableConfig.expandedRowKeys,\n defaultExpandedRowKeys = expandableConfig.defaultExpandedRowKeys,\n defaultExpandAllRows = expandableConfig.defaultExpandAllRows,\n expandedRowRender = expandableConfig.expandedRowRender,\n onExpand = expandableConfig.onExpand,\n onExpandedRowsChange = expandableConfig.onExpandedRowsChange,\n childrenColumnName = expandableConfig.childrenColumnName;\n var mergedExpandIcon = expandIcon || renderExpandIcon;\n var mergedChildrenColumnName = childrenColumnName || 'children';\n var expandableType = React.useMemo(function () {\n if (expandedRowRender) {\n return 'row';\n }\n /* eslint-disable no-underscore-dangle */\n /**\n * Fix https://github.com/ant-design/ant-design/issues/21154\n * This is a workaround to not to break current behavior.\n * We can remove follow code after final release.\n *\n * To other developer:\n * Do not use `__PARENT_RENDER_ICON__` in prod since we will remove this when refactor\n */\n if (props.expandable && props.internalHooks === INTERNAL_HOOKS && props.expandable.__PARENT_RENDER_ICON__ || mergedData.some(function (record) {\n return record && _typeof(record) === 'object' && record[mergedChildrenColumnName];\n })) {\n return 'nest';\n }\n /* eslint-enable */\n return false;\n }, [!!expandedRowRender, mergedData]);\n var _React$useState = React.useState(function () {\n if (defaultExpandedRowKeys) {\n return defaultExpandedRowKeys;\n }\n if (defaultExpandAllRows) {\n return findAllChildrenKeys(mergedData, getRowKey, mergedChildrenColumnName);\n }\n return [];\n }),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n innerExpandedKeys = _React$useState2[0],\n setInnerExpandedKeys = _React$useState2[1];\n var mergedExpandedKeys = React.useMemo(function () {\n return new Set(expandedRowKeys || innerExpandedKeys || []);\n }, [expandedRowKeys, innerExpandedKeys]);\n var onTriggerExpand = React.useCallback(function (record) {\n var key = getRowKey(record, mergedData.indexOf(record));\n var newExpandedKeys;\n var hasKey = mergedExpandedKeys.has(key);\n if (hasKey) {\n mergedExpandedKeys.delete(key);\n newExpandedKeys = _toConsumableArray(mergedExpandedKeys);\n } else {\n newExpandedKeys = [].concat(_toConsumableArray(mergedExpandedKeys), [key]);\n }\n setInnerExpandedKeys(newExpandedKeys);\n if (onExpand) {\n onExpand(!hasKey, record);\n }\n if (onExpandedRowsChange) {\n onExpandedRowsChange(newExpandedKeys);\n }\n }, [getRowKey, mergedExpandedKeys, mergedData, onExpand, onExpandedRowsChange]);\n\n // Warning if use `expandedRowRender` and nest children in the same time\n if (process.env.NODE_ENV !== 'production' && expandedRowRender && mergedData.some(function (record) {\n return Array.isArray(record === null || record === void 0 ? void 0 : record[mergedChildrenColumnName]);\n })) {\n warning(false, '`expandedRowRender` should not use with nested Table');\n }\n return [expandableConfig, expandableType, mergedExpandedKeys, mergedExpandIcon, mergedChildrenColumnName, onTriggerExpand];\n}","import { useMemo } from 'react';\n/**\n * Get sticky column offset width\n */\nfunction useStickyOffsets(colWidths, flattenColumns, direction) {\n var stickyOffsets = useMemo(function () {\n var columnCount = flattenColumns.length;\n var getOffsets = function getOffsets(startIndex, endIndex, offset) {\n var offsets = [];\n var total = 0;\n for (var i = startIndex; i !== endIndex; i += offset) {\n offsets.push(total);\n if (flattenColumns[i].fixed) {\n total += colWidths[i] || 0;\n }\n }\n return offsets;\n };\n var startOffsets = getOffsets(0, columnCount, 1);\n var endOffsets = getOffsets(columnCount - 1, -1, -1).reverse();\n return direction === 'rtl' ? {\n left: endOffsets,\n right: startOffsets\n } : {\n left: startOffsets,\n right: endOffsets\n };\n }, [colWidths, flattenColumns, direction]);\n return stickyOffsets;\n}\nexport default useStickyOffsets;","/* istanbul ignore next */\n/**\n * This is a syntactic sugar for `columns` prop.\n * So HOC will not work on this.\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction Column(_) {\n return null;\n}\nexport default Column;","/* istanbul ignore next */\n/**\n * This is a syntactic sugar for `columns` prop.\n * So HOC will not work on this.\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction ColumnGroup(_) {\n return null;\n}\nexport default ColumnGroup;","import { createContext } from '@rc-component/context';\nexport var StaticContext = createContext(null);\nexport var GridContext = createContext(null);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { useContext } from '@rc-component/context';\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { getCellProps } from \"../Body/BodyRow\";\nimport Cell from \"../Cell\";\nimport { GridContext } from \"./context\";\n/**\n * Return the width of the column by `colSpan`.\n * When `colSpan` is `0` will be trade as `1`.\n */\nexport function getColumnWidth(colIndex, colSpan, columnsOffset) {\n var mergedColSpan = colSpan || 1;\n return columnsOffset[colIndex + mergedColSpan] - (columnsOffset[colIndex] || 0);\n}\nfunction VirtualCell(props) {\n var rowInfo = props.rowInfo,\n column = props.column,\n colIndex = props.colIndex,\n indent = props.indent,\n index = props.index,\n component = props.component,\n renderIndex = props.renderIndex,\n record = props.record,\n style = props.style,\n className = props.className,\n inverse = props.inverse,\n getHeight = props.getHeight;\n var render = column.render,\n dataIndex = column.dataIndex,\n columnClassName = column.className,\n colWidth = column.width;\n var _useContext = useContext(GridContext, ['columnsOffset']),\n columnsOffset = _useContext.columnsOffset;\n\n // TODO: support `expandableRowOffset`\n var _getCellProps = getCellProps(rowInfo, column, colIndex, indent, index),\n key = _getCellProps.key,\n fixedInfo = _getCellProps.fixedInfo,\n appendCellNode = _getCellProps.appendCellNode,\n additionalCellProps = _getCellProps.additionalCellProps;\n var cellStyle = additionalCellProps.style,\n _additionalCellProps$ = additionalCellProps.colSpan,\n colSpan = _additionalCellProps$ === void 0 ? 1 : _additionalCellProps$,\n _additionalCellProps$2 = additionalCellProps.rowSpan,\n rowSpan = _additionalCellProps$2 === void 0 ? 1 : _additionalCellProps$2;\n\n // ========================= ColWidth =========================\n // column width\n var startColIndex = colIndex - 1;\n var concatColWidth = getColumnWidth(startColIndex, colSpan, columnsOffset);\n\n // margin offset\n var marginOffset = colSpan > 1 ? colWidth - concatColWidth : 0;\n\n // ========================== Style ===========================\n var mergedStyle = _objectSpread(_objectSpread(_objectSpread({}, cellStyle), style), {}, {\n flex: \"0 0 \".concat(concatColWidth, \"px\"),\n width: \"\".concat(concatColWidth, \"px\"),\n marginRight: marginOffset,\n pointerEvents: 'auto'\n });\n\n // When `colSpan` or `rowSpan` is `0`, should skip render.\n var needHide = React.useMemo(function () {\n if (inverse) {\n return rowSpan <= 1;\n } else {\n return colSpan === 0 || rowSpan === 0 || rowSpan > 1;\n }\n }, [rowSpan, colSpan, inverse]);\n\n // 0 rowSpan or colSpan should not render\n if (needHide) {\n mergedStyle.visibility = 'hidden';\n } else if (inverse) {\n mergedStyle.height = getHeight === null || getHeight === void 0 ? void 0 : getHeight(rowSpan);\n }\n var mergedRender = needHide ? function () {\n return null;\n } : render;\n\n // ========================== Render ==========================\n var cellSpan = {};\n\n // Virtual should reset `colSpan` & `rowSpan`\n if (rowSpan === 0 || colSpan === 0) {\n cellSpan.rowSpan = 1;\n cellSpan.colSpan = 1;\n }\n return /*#__PURE__*/React.createElement(Cell, _extends({\n className: classNames(columnClassName, className),\n ellipsis: column.ellipsis,\n align: column.align,\n scope: column.rowScope,\n component: component,\n prefixCls: rowInfo.prefixCls,\n key: key,\n record: record,\n index: index,\n renderIndex: renderIndex,\n dataIndex: dataIndex,\n render: mergedRender,\n shouldCellUpdate: column.shouldCellUpdate\n }, fixedInfo, {\n appendNode: appendCellNode,\n additionalProps: _objectSpread(_objectSpread({}, additionalCellProps), {}, {\n style: mergedStyle\n }, cellSpan)\n }));\n}\nexport default VirtualCell;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"data\", \"index\", \"className\", \"rowKey\", \"style\", \"extra\", \"getHeight\"];\nimport { useContext } from '@rc-component/context';\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport Cell from \"../Cell\";\nimport TableContext, { responseImmutable } from \"../context/TableContext\";\nimport useRowInfo from \"../hooks/useRowInfo\";\nimport VirtualCell from \"./VirtualCell\";\nimport { StaticContext } from \"./context\";\nimport { computedExpandedClassName } from \"../utils/expandUtil\";\nvar BodyLine = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var data = props.data,\n index = props.index,\n className = props.className,\n rowKey = props.rowKey,\n style = props.style,\n extra = props.extra,\n getHeight = props.getHeight,\n restProps = _objectWithoutProperties(props, _excluded);\n var record = data.record,\n indent = data.indent,\n renderIndex = data.index;\n var _useContext = useContext(TableContext, ['prefixCls', 'flattenColumns', 'fixColumn', 'componentWidth', 'scrollX']),\n scrollX = _useContext.scrollX,\n flattenColumns = _useContext.flattenColumns,\n prefixCls = _useContext.prefixCls,\n fixColumn = _useContext.fixColumn,\n componentWidth = _useContext.componentWidth;\n var _useContext2 = useContext(StaticContext, ['getComponent']),\n getComponent = _useContext2.getComponent;\n var rowInfo = useRowInfo(record, rowKey, index, indent);\n var RowComponent = getComponent(['body', 'row'], 'div');\n var cellComponent = getComponent(['body', 'cell'], 'div');\n\n // ========================== Expand ==========================\n var rowSupportExpand = rowInfo.rowSupportExpand,\n expanded = rowInfo.expanded,\n rowProps = rowInfo.rowProps,\n expandedRowRender = rowInfo.expandedRowRender,\n expandedRowClassName = rowInfo.expandedRowClassName;\n var expandRowNode;\n if (rowSupportExpand && expanded) {\n var expandContent = expandedRowRender(record, index, indent + 1, expanded);\n var expandedClsName = computedExpandedClassName(expandedRowClassName, record, index, indent);\n var additionalProps = {};\n if (fixColumn) {\n additionalProps = {\n style: _defineProperty({}, '--virtual-width', \"\".concat(componentWidth, \"px\"))\n };\n }\n var rowCellCls = \"\".concat(prefixCls, \"-expanded-row-cell\");\n expandRowNode = /*#__PURE__*/React.createElement(RowComponent, {\n className: classNames(\"\".concat(prefixCls, \"-expanded-row\"), \"\".concat(prefixCls, \"-expanded-row-level-\").concat(indent + 1), expandedClsName)\n }, /*#__PURE__*/React.createElement(Cell, {\n component: cellComponent,\n prefixCls: prefixCls,\n className: classNames(rowCellCls, _defineProperty({}, \"\".concat(rowCellCls, \"-fixed\"), fixColumn)),\n additionalProps: additionalProps\n }, expandContent));\n }\n\n // ========================== Render ==========================\n var rowStyle = _objectSpread(_objectSpread({}, style), {}, {\n width: scrollX\n });\n if (extra) {\n rowStyle.position = 'absolute';\n rowStyle.pointerEvents = 'none';\n }\n var rowNode = /*#__PURE__*/React.createElement(RowComponent, _extends({}, rowProps, restProps, {\n \"data-row-key\": rowKey,\n ref: rowSupportExpand ? null : ref,\n className: classNames(className, \"\".concat(prefixCls, \"-row\"), rowProps === null || rowProps === void 0 ? void 0 : rowProps.className, _defineProperty({}, \"\".concat(prefixCls, \"-row-extra\"), extra)),\n style: _objectSpread(_objectSpread({}, rowStyle), rowProps === null || rowProps === void 0 ? void 0 : rowProps.style)\n }), flattenColumns.map(function (column, colIndex) {\n return /*#__PURE__*/React.createElement(VirtualCell, {\n key: colIndex,\n component: cellComponent,\n rowInfo: rowInfo,\n column: column,\n colIndex: colIndex,\n indent: indent,\n index: index,\n renderIndex: renderIndex,\n record: record,\n inverse: extra,\n getHeight: getHeight\n });\n }));\n if (rowSupportExpand) {\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: ref\n }, rowNode, expandRowNode);\n }\n return rowNode;\n});\nvar ResponseBodyLine = responseImmutable(BodyLine);\nif (process.env.NODE_ENV !== 'production') {\n ResponseBodyLine.displayName = 'BodyLine';\n}\nexport default ResponseBodyLine;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useContext } from '@rc-component/context';\nimport VirtualList from 'rc-virtual-list';\nimport * as React from 'react';\nimport TableContext, { responseImmutable } from \"../context/TableContext\";\nimport useFlattenRecords from \"../hooks/useFlattenRecords\";\nimport BodyLine from \"./BodyLine\";\nimport { GridContext, StaticContext } from \"./context\";\nvar Grid = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var data = props.data,\n onScroll = props.onScroll;\n var _useContext = useContext(TableContext, ['flattenColumns', 'onColumnResize', 'getRowKey', 'prefixCls', 'expandedKeys', 'childrenColumnName', 'scrollX', 'direction']),\n flattenColumns = _useContext.flattenColumns,\n onColumnResize = _useContext.onColumnResize,\n getRowKey = _useContext.getRowKey,\n expandedKeys = _useContext.expandedKeys,\n prefixCls = _useContext.prefixCls,\n childrenColumnName = _useContext.childrenColumnName,\n scrollX = _useContext.scrollX,\n direction = _useContext.direction;\n var _useContext2 = useContext(StaticContext),\n sticky = _useContext2.sticky,\n scrollY = _useContext2.scrollY,\n listItemHeight = _useContext2.listItemHeight,\n getComponent = _useContext2.getComponent,\n onTablePropScroll = _useContext2.onScroll;\n\n // =========================== Ref ============================\n var listRef = React.useRef();\n\n // =========================== Data ===========================\n var flattenData = useFlattenRecords(data, childrenColumnName, expandedKeys, getRowKey);\n\n // ========================== Column ==========================\n var columnsWidth = React.useMemo(function () {\n var total = 0;\n return flattenColumns.map(function (_ref) {\n var width = _ref.width,\n key = _ref.key;\n total += width;\n return [key, width, total];\n });\n }, [flattenColumns]);\n var columnsOffset = React.useMemo(function () {\n return columnsWidth.map(function (colWidth) {\n return colWidth[2];\n });\n }, [columnsWidth]);\n React.useEffect(function () {\n columnsWidth.forEach(function (_ref2) {\n var _ref3 = _slicedToArray(_ref2, 2),\n key = _ref3[0],\n width = _ref3[1];\n onColumnResize(key, width);\n });\n }, [columnsWidth]);\n\n // =========================== Ref ============================\n React.useImperativeHandle(ref, function () {\n var _listRef$current2;\n var obj = {\n scrollTo: function scrollTo(config) {\n var _listRef$current;\n (_listRef$current = listRef.current) === null || _listRef$current === void 0 || _listRef$current.scrollTo(config);\n },\n nativeElement: (_listRef$current2 = listRef.current) === null || _listRef$current2 === void 0 ? void 0 : _listRef$current2.nativeElement\n };\n Object.defineProperty(obj, 'scrollLeft', {\n get: function get() {\n var _listRef$current3;\n return ((_listRef$current3 = listRef.current) === null || _listRef$current3 === void 0 ? void 0 : _listRef$current3.getScrollInfo().x) || 0;\n },\n set: function set(value) {\n var _listRef$current4;\n (_listRef$current4 = listRef.current) === null || _listRef$current4 === void 0 || _listRef$current4.scrollTo({\n left: value\n });\n }\n });\n return obj;\n });\n\n // ======================= Col/Row Span =======================\n var getRowSpan = function getRowSpan(column, index) {\n var _flattenData$index;\n var record = (_flattenData$index = flattenData[index]) === null || _flattenData$index === void 0 ? void 0 : _flattenData$index.record;\n var onCell = column.onCell;\n if (onCell) {\n var _cellProps$rowSpan;\n var cellProps = onCell(record, index);\n return (_cellProps$rowSpan = cellProps === null || cellProps === void 0 ? void 0 : cellProps.rowSpan) !== null && _cellProps$rowSpan !== void 0 ? _cellProps$rowSpan : 1;\n }\n return 1;\n };\n var extraRender = function extraRender(info) {\n var start = info.start,\n end = info.end,\n getSize = info.getSize,\n offsetY = info.offsetY;\n\n // Do nothing if no data\n if (end < 0) {\n return null;\n }\n\n // Find first rowSpan column\n var firstRowSpanColumns = flattenColumns.filter(\n // rowSpan is 0\n function (column) {\n return getRowSpan(column, start) === 0;\n });\n var startIndex = start;\n var _loop = function _loop(i) {\n firstRowSpanColumns = firstRowSpanColumns.filter(function (column) {\n return getRowSpan(column, i) === 0;\n });\n if (!firstRowSpanColumns.length) {\n startIndex = i;\n return 1; // break\n }\n };\n for (var i = start; i >= 0; i -= 1) {\n if (_loop(i)) break;\n }\n\n // Find last rowSpan column\n var lastRowSpanColumns = flattenColumns.filter(\n // rowSpan is not 1\n function (column) {\n return getRowSpan(column, end) !== 1;\n });\n var endIndex = end;\n var _loop2 = function _loop2(_i) {\n lastRowSpanColumns = lastRowSpanColumns.filter(function (column) {\n return getRowSpan(column, _i) !== 1;\n });\n if (!lastRowSpanColumns.length) {\n endIndex = Math.max(_i - 1, end);\n return 1; // break\n }\n };\n for (var _i = end; _i < flattenData.length; _i += 1) {\n if (_loop2(_i)) break;\n }\n\n // Collect the line who has rowSpan\n var spanLines = [];\n var _loop3 = function _loop3(_i2) {\n var item = flattenData[_i2];\n\n // This code will never reach, just incase\n if (!item) {\n return 1; // continue\n }\n if (flattenColumns.some(function (column) {\n return getRowSpan(column, _i2) > 1;\n })) {\n spanLines.push(_i2);\n }\n };\n for (var _i2 = startIndex; _i2 <= endIndex; _i2 += 1) {\n if (_loop3(_i2)) continue;\n }\n\n // Patch extra line on the page\n var nodes = spanLines.map(function (index) {\n var item = flattenData[index];\n var rowKey = getRowKey(item.record, index);\n var getHeight = function getHeight(rowSpan) {\n var endItemIndex = index + rowSpan - 1;\n var endItemKey = getRowKey(flattenData[endItemIndex].record, endItemIndex);\n var sizeInfo = getSize(rowKey, endItemKey);\n return sizeInfo.bottom - sizeInfo.top;\n };\n var sizeInfo = getSize(rowKey);\n return /*#__PURE__*/React.createElement(BodyLine, {\n key: index,\n data: item,\n rowKey: rowKey,\n index: index,\n style: {\n top: -offsetY + sizeInfo.top\n },\n extra: true,\n getHeight: getHeight\n });\n });\n return nodes;\n };\n\n // ========================= Context ==========================\n var gridContext = React.useMemo(function () {\n return {\n columnsOffset: columnsOffset\n };\n }, [columnsOffset]);\n\n // ========================== Render ==========================\n var tblPrefixCls = \"\".concat(prefixCls, \"-tbody\");\n\n // default 'div' in rc-virtual-list\n var wrapperComponent = getComponent(['body', 'wrapper']);\n\n // ========================== Sticky Scroll Bar ==========================\n var horizontalScrollBarStyle = {};\n if (sticky) {\n horizontalScrollBarStyle.position = 'sticky';\n horizontalScrollBarStyle.bottom = 0;\n if (_typeof(sticky) === 'object' && sticky.offsetScroll) {\n horizontalScrollBarStyle.bottom = sticky.offsetScroll;\n }\n }\n return /*#__PURE__*/React.createElement(GridContext.Provider, {\n value: gridContext\n }, /*#__PURE__*/React.createElement(VirtualList, {\n fullHeight: false,\n ref: listRef,\n prefixCls: \"\".concat(tblPrefixCls, \"-virtual\"),\n styles: {\n horizontalScrollBar: horizontalScrollBarStyle\n },\n className: tblPrefixCls,\n height: scrollY,\n itemHeight: listItemHeight || 24,\n data: flattenData,\n itemKey: function itemKey(item) {\n return getRowKey(item.record);\n },\n component: wrapperComponent,\n scrollWidth: scrollX,\n direction: direction,\n onVirtualScroll: function onVirtualScroll(_ref4) {\n var _listRef$current5;\n var x = _ref4.x;\n onScroll({\n currentTarget: (_listRef$current5 = listRef.current) === null || _listRef$current5 === void 0 ? void 0 : _listRef$current5.nativeElement,\n scrollLeft: x\n });\n },\n onScroll: onTablePropScroll,\n extraRender: extraRender\n }, function (item, index, itemProps) {\n var rowKey = getRowKey(item.record, index);\n return /*#__PURE__*/React.createElement(BodyLine, {\n data: item,\n rowKey: rowKey,\n index: index,\n style: itemProps.style\n });\n }));\n});\nvar ResponseGrid = responseImmutable(Grid);\nif (process.env.NODE_ENV !== 'production') {\n ResponseGrid.displayName = 'ResponseGrid';\n}\nexport default ResponseGrid;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport classNames from 'classnames';\nimport { useEvent, warning } from 'rc-util';\nimport * as React from 'react';\nimport { INTERNAL_HOOKS } from \"../constant\";\nimport { makeImmutable } from \"../context/TableContext\";\nimport Table, { DEFAULT_PREFIX } from \"../Table\";\nimport Grid from \"./BodyGrid\";\nimport { StaticContext } from \"./context\";\nimport getValue from \"rc-util/es/utils/get\";\nvar renderBody = function renderBody(rawData, props) {\n var ref = props.ref,\n onScroll = props.onScroll;\n return /*#__PURE__*/React.createElement(Grid, {\n ref: ref,\n data: rawData,\n onScroll: onScroll\n });\n};\nfunction VirtualTable(props, ref) {\n var data = props.data,\n columns = props.columns,\n scroll = props.scroll,\n sticky = props.sticky,\n _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? DEFAULT_PREFIX : _props$prefixCls,\n className = props.className,\n listItemHeight = props.listItemHeight,\n components = props.components,\n onScroll = props.onScroll;\n var _ref = scroll || {},\n scrollX = _ref.x,\n scrollY = _ref.y;\n\n // Fill scrollX\n if (typeof scrollX !== 'number') {\n if (process.env.NODE_ENV !== 'production') {\n warning(!scrollX, '`scroll.x` in virtual table must be number.');\n }\n scrollX = 1;\n }\n\n // Fill scrollY\n if (typeof scrollY !== 'number') {\n scrollY = 500;\n if (process.env.NODE_ENV !== 'production') {\n warning(false, '`scroll.y` in virtual table must be number.');\n }\n }\n var getComponent = useEvent(function (path, defaultComponent) {\n return getValue(components, path) || defaultComponent;\n });\n\n // Memo this\n var onInternalScroll = useEvent(onScroll);\n\n // ========================= Context ==========================\n var context = React.useMemo(function () {\n return {\n sticky: sticky,\n scrollY: scrollY,\n listItemHeight: listItemHeight,\n getComponent: getComponent,\n onScroll: onInternalScroll\n };\n }, [sticky, scrollY, listItemHeight, getComponent, onInternalScroll]);\n\n // ========================== Render ==========================\n return /*#__PURE__*/React.createElement(StaticContext.Provider, {\n value: context\n }, /*#__PURE__*/React.createElement(Table, _extends({}, props, {\n className: classNames(className, \"\".concat(prefixCls, \"-virtual\")),\n scroll: _objectSpread(_objectSpread({}, scroll), {}, {\n x: scrollX\n }),\n components: _objectSpread(_objectSpread({}, components), {}, {\n // fix https://github.com/ant-design/ant-design/issues/48991\n body: data !== null && data !== void 0 && data.length ? renderBody : undefined\n }),\n columns: columns,\n internalHooks: INTERNAL_HOOKS,\n tailor: true,\n ref: ref\n })));\n}\nvar RefVirtualTable = /*#__PURE__*/React.forwardRef(VirtualTable);\nif (process.env.NODE_ENV !== 'production') {\n RefVirtualTable.displayName = 'VirtualTable';\n}\nexport function genVirtualTable(shouldTriggerRender) {\n return makeImmutable(RefVirtualTable, shouldTriggerRender);\n}\nexport default genVirtualTable();","import {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\nimport lcg from \"../lcg.js\";\nimport {packSiblingsRandom} from \"./siblings.js\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n const random = lcg();\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildrenRandom(padding, 0.5, random))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildrenRandom(constantZero, 1, random))\n .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildrenRandom(padding, k, random) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packSiblingsRandom(children, random);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","/* Mapbox GL JS is licensed under the 3-Clause BSD License. Full text of license: https://github.com/mapbox/mapbox-gl-js/blob/v1.13.3/LICENSE.txt */\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\ntypeof define === 'function' && define.amd ? define(factory) :\n(global = global || self, global.mapboxgl = factory());\n}(this, (function () { 'use strict';\n\n/* eslint-disable */\n\nvar shared, worker, mapboxgl;\n// define gets called three times: one for each chunk. we rely on the order\n// they're imported to know which is which\nfunction define(_, chunk) {\nif (!shared) {\n shared = chunk;\n} else if (!worker) {\n worker = chunk;\n} else {\n var workerBundleString = 'var sharedChunk = {}; (' + shared + ')(sharedChunk); (' + worker + ')(sharedChunk);'\n\n var sharedChunk = {};\n shared(sharedChunk);\n mapboxgl = chunk(sharedChunk);\n if (typeof window !== 'undefined') {\n mapboxgl.workerUrl = window.URL.createObjectURL(new Blob([workerBundleString], { type: 'text/javascript' }));\n }\n}\n}\n\n\ndefine([\"exports\"],(function(t){\"use strict\";function e(t,e){return t(e={exports:{}},e.exports),e.exports}var r=n;function n(t,e,r,n){this.cx=3*t,this.bx=3*(r-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(n-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=n,this.p2x=r,this.p2y=n;}n.prototype.sampleCurveX=function(t){return ((this.ax*t+this.bx)*t+this.cx)*t},n.prototype.sampleCurveY=function(t){return ((this.ay*t+this.by)*t+this.cy)*t},n.prototype.sampleCurveDerivativeX=function(t){return (3*this.ax*t+2*this.bx)*t+this.cx},n.prototype.solveCurveX=function(t,e){var r,n,i,a,o;for(void 0===e&&(e=1e-6),i=t,o=0;o<8;o++){if(a=this.sampleCurveX(i)-t,Math.abs(a)(n=1))return n;for(;ra?r=i:n=i,i=.5*(n-r)+r;}return i},n.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var i=a;function a(t,e){this.x=t,this.y=e;}a.prototype={clone:function(){return new a(this.x,this.y)},add:function(t){return this.clone()._add(t)},sub:function(t){return this.clone()._sub(t)},multByPoint:function(t){return this.clone()._multByPoint(t)},divByPoint:function(t){return this.clone()._divByPoint(t)},mult:function(t){return this.clone()._mult(t)},div:function(t){return this.clone()._div(t)},rotate:function(t){return this.clone()._rotate(t)},rotateAround:function(t,e){return this.clone()._rotateAround(t,e)},matMult:function(t){return this.clone()._matMult(t)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(t){return this.x===t.x&&this.y===t.y},dist:function(t){return Math.sqrt(this.distSqr(t))},distSqr:function(t){var e=t.x-this.x,r=t.y-this.y;return e*e+r*r},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(t){return Math.atan2(this.y-t.y,this.x-t.x)},angleWith:function(t){return this.angleWithSep(t.x,t.y)},angleWithSep:function(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e)},_matMult:function(t){var e=t[2]*this.x+t[3]*this.y;return this.x=t[0]*this.x+t[1]*this.y,this.y=e,this},_add:function(t){return this.x+=t.x,this.y+=t.y,this},_sub:function(t){return this.x-=t.x,this.y-=t.y,this},_mult:function(t){return this.x*=t,this.y*=t,this},_div:function(t){return this.x/=t,this.y/=t,this},_multByPoint:function(t){return this.x*=t.x,this.y*=t.y,this},_divByPoint:function(t){return this.x/=t.x,this.y/=t.y,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var t=this.y;return this.y=this.x,this.x=-t,this},_rotate:function(t){var e=Math.cos(t),r=Math.sin(t),n=r*this.x+e*this.y;return this.x=e*this.x-r*this.y,this.y=n,this},_rotateAround:function(t,e){var r=Math.cos(t),n=Math.sin(t),i=e.y+n*(this.x-e.x)+r*(this.y-e.y);return this.x=e.x+r*(this.x-e.x)-n*(this.y-e.y),this.y=i,this},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},a.convert=function(t){return t instanceof a?t:Array.isArray(t)?new a(t[0],t[1]):t};var o=\"undefined\"!=typeof self?self:{},s=Math.pow(2,53)-1;function u(t,e,n,i){var a=new r(t,e,n,i);return function(t){return a.solve(t)}}var l=u(.25,.1,.25,1);function p(t,e,r){return Math.min(r,Math.max(e,t))}function c(t,e,r){var n=r-e,i=((t-e)%n+n)%n+e;return i===e?r:i}function h(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,i=e;n>e/4).toString(16):([1e7]+-[1e3]+-4e3+-8e3+-1e11).replace(/[018]/g,t)}()}function m(t){return !!t&&/^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)}function v(t,e){t.forEach((function(t){e[t]&&(e[t]=e[t].bind(e));}));}function g(t,e){return -1!==t.indexOf(e,t.length-e.length)}function x(t,e,r){var n={};for(var i in t)n[i]=e.call(r||this,t[i],i,t);return n}function b(t,e,r){var n={};for(var i in t)e.call(r||this,t[i],i,t)&&(n[i]=t[i]);return n}function w(t){return Array.isArray(t)?t.map(w):\"object\"==typeof t&&t?x(t,w):t}var _={};function A(t){_[t]||(\"undefined\"!=typeof console&&console.warn(t),_[t]=!0);}function S(t,e,r){return (r.y-t.y)*(e.x-t.x)>(e.y-t.y)*(r.x-t.x)}function k(t){for(var e=0,r=0,n=t.length,i=n-1,a=void 0,o=void 0;r@\\,;\\:\\\\\"\\/\\[\\]\\?\\=\\{\\}\\x7F]+)(?:\\=(?:([^\\x00-\\x20\\(\\)<>@\\,;\\:\\\\\"\\/\\[\\]\\?\\=\\{\\}\\x7F]+)|(?:\\\"((?:[^\"\\\\]|\\\\.)*)\\\")))?/g,(function(t,r,n,i){var a=n||i;return e[r]=!a||a.toLowerCase(),\"\"})),e[\"max-age\"]){var r=parseInt(e[\"max-age\"],10);isNaN(r)?delete e[\"max-age\"]:e[\"max-age\"]=r;}return e}var C=null;function E(t){if(null==C){var e=t.navigator?t.navigator.userAgent:null;C=!!t.safari||!(!e||!(/\\b(iPad|iPhone|iPod)\\b/.test(e)||e.match(\"Safari\")&&!e.match(\"Chrome\")));}return C}function P(t){try{var e=o[t];return e.setItem(\"_mapbox_test_\",1),e.removeItem(\"_mapbox_test_\"),!0}catch(t){return !1}}var M,B,T,V,F=o.performance&&o.performance.now?o.performance.now.bind(o.performance):Date.now.bind(Date),D=o.requestAnimationFrame||o.mozRequestAnimationFrame||o.webkitRequestAnimationFrame||o.msRequestAnimationFrame,L=o.cancelAnimationFrame||o.mozCancelAnimationFrame||o.webkitCancelAnimationFrame||o.msCancelAnimationFrame,O={now:F,frame:function(t){var e=D(t);return {cancel:function(){return L(e)}}},getImageData:function(t,e){void 0===e&&(e=0);var r=o.document.createElement(\"canvas\"),n=r.getContext(\"2d\");if(!n)throw new Error(\"failed to create canvas 2d context\");return r.width=t.width,r.height=t.height,n.drawImage(t,0,0,t.width,t.height),n.getImageData(-e,-e,t.width+2*e,t.height+2*e)},resolveURL:function(t){return M||(M=o.document.createElement(\"a\")),M.href=t,M.href},hardwareConcurrency:o.navigator&&o.navigator.hardwareConcurrency||4,get devicePixelRatio(){return o.devicePixelRatio},get prefersReducedMotion(){return !!o.matchMedia&&(null==B&&(B=o.matchMedia(\"(prefers-reduced-motion: reduce)\")),B.matches)}},R={API_URL:\"https://api.mapbox.com\",get EVENTS_URL(){return this.API_URL?0===this.API_URL.indexOf(\"https://api.mapbox.cn\")?\"https://events.mapbox.cn/events/v2\":0===this.API_URL.indexOf(\"https://api.mapbox.com\")?\"https://events.mapbox.com/events/v2\":null:null},FEEDBACK_URL:\"https://apps.mapbox.com/feedback\",REQUIRE_ACCESS_TOKEN:!0,ACCESS_TOKEN:null,MAX_PARALLEL_IMAGE_REQUESTS:16},U={supported:!1,testSupport:function(t){!j&&V&&(q?N(t):T=t);}},j=!1,q=!1;function N(t){var e=t.createTexture();t.bindTexture(t.TEXTURE_2D,e);try{if(t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,V),t.isContextLost())return;U.supported=!0;}catch(t){}t.deleteTexture(e),j=!0;}o.document&&((V=o.document.createElement(\"img\")).onload=function(){T&&N(T),T=null,q=!0;},V.onerror=function(){j=!0,T=null;},V.src=\"data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA=\");var K=\"01\",G=function(t,e){this._transformRequestFn=t,this._customAccessToken=e,this._createSkuToken();};function Z(t){return 0===t.indexOf(\"mapbox:\")}G.prototype._createSkuToken=function(){var t=function(){for(var t=\"\",e=0;e<10;e++)t+=\"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"[Math.floor(62*Math.random())];return {token:[\"1\",K,t].join(\"\"),tokenExpiresAt:Date.now()+432e5}}();this._skuToken=t.token,this._skuTokenExpiresAt=t.tokenExpiresAt;},G.prototype._isSkuTokenExpired=function(){return Date.now()>this._skuTokenExpiresAt},G.prototype.transformRequest=function(t,e){return this._transformRequestFn&&this._transformRequestFn(t,e)||{url:t}},G.prototype.normalizeStyleURL=function(t,e){if(!Z(t))return t;var r=Y(t);return r.path=\"/styles/v1\"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},G.prototype.normalizeGlyphsURL=function(t,e){if(!Z(t))return t;var r=Y(t);return r.path=\"/fonts/v1\"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},G.prototype.normalizeSourceURL=function(t,e){if(!Z(t))return t;var r=Y(t);return r.path=\"/v4/\"+r.authority+\".json\",r.params.push(\"secure\"),this._makeAPIURL(r,this._customAccessToken||e)},G.prototype.normalizeSpriteURL=function(t,e,r,n){var i=Y(t);return Z(t)?(i.path=\"/styles/v1\"+i.path+\"/sprite\"+e+r,this._makeAPIURL(i,this._customAccessToken||n)):(i.path+=\"\"+e+r,$(i))},G.prototype.normalizeTileURL=function(t,e){if(this._isSkuTokenExpired()&&this._createSkuToken(),t&&!Z(t))return t;var r=Y(t);r.path=r.path.replace(/(\\.(png|jpg)\\d*)(?=$)/,(O.devicePixelRatio>=2||512===e?\"@2x\":\"\")+(U.supported?\".webp\":\"$1\")),r.path=r.path.replace(/^.+\\/v4\\//,\"/\"),r.path=\"/v4\"+r.path;var n=this._customAccessToken||function(t){for(var e=0,r=t;e=0&&t.params.splice(i,1);}if(\"/\"!==n.path&&(t.path=\"\"+n.path+t.path),!R.REQUIRE_ACCESS_TOKEN)return $(t);if(!(e=e||R.ACCESS_TOKEN))throw new Error(\"An API access token is required to use Mapbox GL. \"+r);if(\"s\"===e[0])throw new Error(\"Use a public access token (pk.*) with Mapbox GL, not a secret access token (sk.*). \"+r);return t.params=t.params.filter((function(t){return -1===t.indexOf(\"access_token\")})),t.params.push(\"access_token=\"+e),$(t)};var X=/^((https?:)?\\/\\/)?([^\\/]+\\.)?mapbox\\.c(n|om)(\\/|\\?|$)/i;function J(t){return X.test(t)}var H=/^(\\w+):\\/\\/([^/?]*)(\\/[^?]+)?\\??(.+)?/;function Y(t){var e=t.match(H);if(!e)throw new Error(\"Unable to parse URL object\");return {protocol:e[1],authority:e[2],path:e[3]||\"/\",params:e[4]?e[4].split(\"&\"):[]}}function $(t){var e=t.params.length?\"?\"+t.params.join(\"&\"):\"\";return t.protocol+\"://\"+t.authority+t.path+e}function W(t){if(!t)return null;var e=t.split(\".\");if(!e||3!==e.length)return null;try{return JSON.parse(decodeURIComponent(o.atob(e[1]).split(\"\").map((function(t){return \"%\"+(\"00\"+t.charCodeAt(0).toString(16)).slice(-2)})).join(\"\")))}catch(t){return null}}var Q=function(t){this.type=t,this.anonId=null,this.eventData={},this.queue=[],this.pendingRequest=null;};Q.prototype.getStorageKey=function(t){var e,r=W(R.ACCESS_TOKEN);return e=r&&r.u?o.btoa(encodeURIComponent(r.u).replace(/%([0-9A-F]{2})/g,(function(t,e){return String.fromCharCode(Number(\"0x\"+e))}))):R.ACCESS_TOKEN||\"\",t?\"mapbox.eventData.\"+t+\":\"+e:\"mapbox.eventData:\"+e},Q.prototype.fetchEventData=function(){var t=P(\"localStorage\"),e=this.getStorageKey(),r=this.getStorageKey(\"uuid\");if(t)try{var n=o.localStorage.getItem(e);n&&(this.eventData=JSON.parse(n));var i=o.localStorage.getItem(r);i&&(this.anonId=i);}catch(t){A(\"Unable to read from LocalStorage\");}},Q.prototype.saveEventData=function(){var t=P(\"localStorage\"),e=this.getStorageKey(),r=this.getStorageKey(\"uuid\");if(t)try{o.localStorage.setItem(r,this.anonId),Object.keys(this.eventData).length>=1&&o.localStorage.setItem(e,JSON.stringify(this.eventData));}catch(t){A(\"Unable to write to LocalStorage\");}},Q.prototype.processRequests=function(t){},Q.prototype.postEvent=function(t,e,r,n){var i=this;if(R.EVENTS_URL){var a=Y(R.EVENTS_URL);a.params.push(\"access_token=\"+(n||R.ACCESS_TOKEN||\"\"));var o={event:this.type,created:new Date(t).toISOString(),sdkIdentifier:\"mapbox-gl-js\",sdkVersion:\"1.13.3\",skuId:K,userId:this.anonId},s=e?h(o,e):o,u={url:$(a),headers:{\"Content-Type\":\"text/plain\"},body:JSON.stringify([s])};this.pendingRequest=wt(u,(function(t){i.pendingRequest=null,r(t),i.saveEventData(),i.processRequests(n);}));}},Q.prototype.queueRequest=function(t,e){this.queue.push(t),this.processRequests(e);};var tt,et,rt=function(t){function e(){t.call(this,\"map.load\"),this.success={},this.skuToken=\"\";}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.postMapLoadEvent=function(t,e,r,n){this.skuToken=r;var i=!(!n&&!R.ACCESS_TOKEN),a=Array.isArray(t)&&t.some((function(t){return Z(t)||J(t)}));R.EVENTS_URL&&i&&a&&this.queueRequest({id:e,timestamp:Date.now()},n);},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){var r=this.queue.shift(),n=r.id,i=r.timestamp;n&&this.success[n]||(this.anonId||this.fetchEventData(),m(this.anonId)||(this.anonId=d()),this.postEvent(i,{skuToken:this.skuToken},(function(t){t||n&&(e.success[n]=!0);}),t));}},e}(Q),nt=new(function(t){function e(e){t.call(this,\"appUserTurnstile\"),this._customAccessToken=e;}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.postTurnstileEvent=function(t,e){R.EVENTS_URL&&R.ACCESS_TOKEN&&Array.isArray(t)&&t.some((function(t){return Z(t)||J(t)}))&&this.queueRequest(Date.now(),e);},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){this.anonId&&this.eventData.lastSuccess&&this.eventData.tokenU||this.fetchEventData();var r=W(R.ACCESS_TOKEN),n=r?r.u:R.ACCESS_TOKEN,i=n!==this.eventData.tokenU;m(this.anonId)||(this.anonId=d(),i=!0);var a=this.queue.shift();if(this.eventData.lastSuccess){var o=new Date(this.eventData.lastSuccess),s=new Date(a),u=(a-this.eventData.lastSuccess)/864e5;i=i||u>=1||u<-1||o.getDate()!==s.getDate();}else i=!0;if(!i)return this.processRequests();this.postEvent(a,{\"enabled.telemetry\":!1},(function(t){t||(e.eventData.lastSuccess=a,e.eventData.tokenU=n);}),t);}},e}(Q)),it=nt.postTurnstileEvent.bind(nt),at=new rt,ot=at.postMapLoadEvent.bind(at),st=500,ut=50;function lt(){o.caches&&!tt&&(tt=o.caches.open(\"mapbox-tiles\"));}function pt(t){var e=t.indexOf(\"?\");return e<0?t:t.slice(0,e)}var ct,ht=1/0;function ft(){return null==ct&&(ct=o.OffscreenCanvas&&new o.OffscreenCanvas(1,1).getContext(\"2d\")&&\"function\"==typeof o.createImageBitmap),ct}var yt={Unknown:\"Unknown\",Style:\"Style\",Source:\"Source\",Tile:\"Tile\",Glyphs:\"Glyphs\",SpriteImage:\"SpriteImage\",SpriteJSON:\"SpriteJSON\",Image:\"Image\"};\"function\"==typeof Object.freeze&&Object.freeze(yt);var dt=function(t){function e(e,r,n){401===r&&J(n)&&(e+=\": you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes\"),t.call(this,e),this.status=r,this.url=n,this.name=this.constructor.name,this.message=e;}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.toString=function(){return this.name+\": \"+this.message+\" (\"+this.status+\"): \"+this.url},e}(Error),mt=I()?function(){return self.worker&&self.worker.referrer}:function(){return (\"blob:\"===o.location.protocol?o.parent:o).location.href};var vt,gt,xt=function(t,e){if(!(/^file:/.test(r=t.url)||/^file:/.test(mt())&&!/^\\w+:/.test(r))){if(o.fetch&&o.Request&&o.AbortController&&o.Request.prototype.hasOwnProperty(\"signal\"))return function(t,e){var r,n=new o.AbortController,i=new o.Request(t.url,{method:t.method||\"GET\",body:t.body,credentials:t.credentials,headers:t.headers,referrer:mt(),signal:n.signal}),a=!1,s=!1,u=(r=i.url).indexOf(\"sku=\")>0&&J(r);\"json\"===t.type&&i.headers.set(\"Accept\",\"application/json\");var l=function(r,n,a){if(!s){if(r&&\"SecurityError\"!==r.message&&A(r),n&&a)return p(n);var l=Date.now();o.fetch(i).then((function(r){if(r.ok){var n=u?r.clone():null;return p(r,n,l)}return e(new dt(r.statusText,r.status,t.url))})).catch((function(t){20!==t.code&&e(new Error(t.message));}));}},p=function(r,n,u){(\"arrayBuffer\"===t.type?r.arrayBuffer():\"json\"===t.type?r.json():r.text()).then((function(t){s||(n&&u&&function(t,e,r){if(lt(),tt){var n={status:e.status,statusText:e.statusText,headers:new o.Headers};e.headers.forEach((function(t,e){return n.headers.set(e,t)}));var i=z(e.headers.get(\"Cache-Control\")||\"\");i[\"no-store\"]||(i[\"max-age\"]&&n.headers.set(\"Expires\",new Date(r+1e3*i[\"max-age\"]).toUTCString()),new Date(n.headers.get(\"Expires\")).getTime()-r<42e4||function(t,e){if(void 0===et)try{new Response(new ReadableStream),et=!0;}catch(t){et=!1;}et?e(t.body):t.blob().then(e);}(e,(function(e){var r=new o.Response(e,n);lt(),tt&&tt.then((function(e){return e.put(pt(t.url),r)})).catch((function(t){return A(t.message)}));})));}}(i,n,u),a=!0,e(null,t,r.headers.get(\"Cache-Control\"),r.headers.get(\"Expires\")));})).catch((function(t){s||e(new Error(t.message));}));};return u?function(t,e){if(lt(),!tt)return e(null);var r=pt(t.url);tt.then((function(t){t.match(r).then((function(n){var i=function(t){if(!t)return !1;var e=new Date(t.headers.get(\"Expires\")||0),r=z(t.headers.get(\"Cache-Control\")||\"\");return e>Date.now()&&!r[\"no-cache\"]}(n);t.delete(r),i&&t.put(r,n.clone()),e(null,n,i);})).catch(e);})).catch(e);}(i,l):l(null,null),{cancel:function(){s=!0,a||n.abort();}}}(t,e);if(I()&&self.worker&&self.worker.actor)return self.worker.actor.send(\"getResource\",t,e,void 0,!0)}var r;return function(t,e){var r=new o.XMLHttpRequest;for(var n in r.open(t.method||\"GET\",t.url,!0),\"arrayBuffer\"===t.type&&(r.responseType=\"arraybuffer\"),t.headers)r.setRequestHeader(n,t.headers[n]);return \"json\"===t.type&&(r.responseType=\"text\",r.setRequestHeader(\"Accept\",\"application/json\")),r.withCredentials=\"include\"===t.credentials,r.onerror=function(){e(new Error(r.statusText));},r.onload=function(){if((r.status>=200&&r.status<300||0===r.status)&&null!==r.response){var n=r.response;if(\"json\"===t.type)try{n=JSON.parse(r.response);}catch(t){return e(t)}e(null,n,r.getResponseHeader(\"Cache-Control\"),r.getResponseHeader(\"Expires\"));}else e(new dt(r.statusText,r.status,t.url));},r.send(t.body),{cancel:function(){return r.abort()}}}(t,e)},bt=function(t,e){return xt(h(t,{type:\"arrayBuffer\"}),e)},wt=function(t,e){return xt(h(t,{method:\"POST\"}),e)},_t=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=\";vt=[],gt=0;var At=function(t,e){if(U.supported&&(t.headers||(t.headers={}),t.headers.accept=\"image/webp,*/*\"),gt>=R.MAX_PARALLEL_IMAGE_REQUESTS){var r={requestParameters:t,callback:e,cancelled:!1,cancel:function(){this.cancelled=!0;}};return vt.push(r),r}gt++;var n=!1,i=function(){if(!n)for(n=!0,gt--;vt.length&>0||this._oneTimeListeners&&this._oneTimeListeners[t]&&this._oneTimeListeners[t].length>0||this._eventedParent&&this._eventedParent.listens(t)},Ct.prototype.setEventedParent=function(t,e){return this._eventedParent=t,this._eventedParentData=e,this};var Et={$version:8,$root:{version:{required:!0,type:\"enum\",values:[8]},name:{type:\"string\"},metadata:{type:\"*\"},center:{type:\"array\",value:\"number\"},zoom:{type:\"number\"},bearing:{type:\"number\",default:0,period:360,units:\"degrees\"},pitch:{type:\"number\",default:0,units:\"degrees\"},light:{type:\"light\"},sources:{required:!0,type:\"sources\"},sprite:{type:\"string\"},glyphs:{type:\"string\"},transition:{type:\"transition\"},layers:{required:!0,type:\"array\",value:\"layer\"}},sources:{\"*\":{type:\"source\"}},source:[\"source_vector\",\"source_raster\",\"source_raster_dem\",\"source_geojson\",\"source_video\",\"source_image\"],source_vector:{type:{required:!0,type:\"enum\",values:{vector:{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:\"enum\",values:{xyz:{},tms:{}},default:\"xyz\"},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},attribution:{type:\"string\"},promoteId:{type:\"promoteId\"},volatile:{type:\"boolean\",default:!1},\"*\":{type:\"*\"}},source_raster:{type:{required:!0,type:\"enum\",values:{raster:{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},tileSize:{type:\"number\",default:512,units:\"pixels\"},scheme:{type:\"enum\",values:{xyz:{},tms:{}},default:\"xyz\"},attribution:{type:\"string\"},volatile:{type:\"boolean\",default:!1},\"*\":{type:\"*\"}},source_raster_dem:{type:{required:!0,type:\"enum\",values:{\"raster-dem\":{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},tileSize:{type:\"number\",default:512,units:\"pixels\"},attribution:{type:\"string\"},encoding:{type:\"enum\",values:{terrarium:{},mapbox:{}},default:\"mapbox\"},volatile:{type:\"boolean\",default:!1},\"*\":{type:\"*\"}},source_geojson:{type:{required:!0,type:\"enum\",values:{geojson:{}}},data:{type:\"*\"},maxzoom:{type:\"number\",default:18},attribution:{type:\"string\"},buffer:{type:\"number\",default:128,maximum:512,minimum:0},filter:{type:\"*\"},tolerance:{type:\"number\",default:.375},cluster:{type:\"boolean\",default:!1},clusterRadius:{type:\"number\",default:50,minimum:0},clusterMaxZoom:{type:\"number\"},clusterMinPoints:{type:\"number\"},clusterProperties:{type:\"*\"},lineMetrics:{type:\"boolean\",default:!1},generateId:{type:\"boolean\",default:!1},promoteId:{type:\"promoteId\"}},source_video:{type:{required:!0,type:\"enum\",values:{video:{}}},urls:{required:!0,type:\"array\",value:\"string\"},coordinates:{required:!0,type:\"array\",length:4,value:{type:\"array\",length:2,value:\"number\"}}},source_image:{type:{required:!0,type:\"enum\",values:{image:{}}},url:{required:!0,type:\"string\"},coordinates:{required:!0,type:\"array\",length:4,value:{type:\"array\",length:2,value:\"number\"}}},layer:{id:{type:\"string\",required:!0},type:{type:\"enum\",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},\"fill-extrusion\":{},raster:{},hillshade:{},background:{}},required:!0},metadata:{type:\"*\"},source:{type:\"string\"},\"source-layer\":{type:\"string\"},minzoom:{type:\"number\",minimum:0,maximum:24},maxzoom:{type:\"number\",minimum:0,maximum:24},filter:{type:\"filter\"},layout:{type:\"layout\"},paint:{type:\"paint\"}},layout:[\"layout_fill\",\"layout_line\",\"layout_circle\",\"layout_heatmap\",\"layout_fill-extrusion\",\"layout_symbol\",\"layout_raster\",\"layout_hillshade\",\"layout_background\"],layout_background:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_fill:{\"fill-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_circle:{\"circle-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_heatmap:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},\"layout_fill-extrusion\":{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_line:{\"line-cap\":{type:\"enum\",values:{butt:{},round:{},square:{}},default:\"butt\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-join\":{type:\"enum\",values:{bevel:{},round:{},miter:{}},default:\"miter\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-miter-limit\":{type:\"number\",default:2,requires:[{\"line-join\":\"miter\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-round-limit\":{type:\"number\",default:1.05,requires:[{\"line-join\":\"round\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_symbol:{\"symbol-placement\":{type:\"enum\",values:{point:{},line:{},\"line-center\":{}},default:\"point\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-spacing\":{type:\"number\",default:250,minimum:1,units:\"pixels\",requires:[{\"symbol-placement\":\"line\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-avoid-edges\":{type:\"boolean\",default:!1,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"symbol-z-order\":{type:\"enum\",values:{auto:{},\"viewport-y\":{},source:{}},default:\"auto\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-allow-overlap\":{type:\"boolean\",default:!1,requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-ignore-placement\":{type:\"boolean\",default:!1,requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-optional\":{type:\"boolean\",default:!1,requires:[\"icon-image\",\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-rotation-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-size\":{type:\"number\",default:1,minimum:0,units:\"factor of the original icon size\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-text-fit\":{type:\"enum\",values:{none:{},width:{},height:{},both:{}},default:\"none\",requires:[\"icon-image\",\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-text-fit-padding\":{type:\"array\",value:\"number\",length:4,default:[0,0,0,0],units:\"pixels\",requires:[\"icon-image\",\"text-field\",{\"icon-text-fit\":[\"both\",\"width\",\"height\"]}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-image\":{type:\"resolvedImage\",tokens:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-rotate\":{type:\"number\",default:0,period:360,units:\"degrees\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-padding\":{type:\"number\",default:2,minimum:0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-keep-upright\":{type:\"boolean\",default:!1,requires:[\"icon-image\",{\"icon-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-offset\":{type:\"array\",value:\"number\",length:2,default:[0,0],requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-anchor\":{type:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},default:\"center\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotation-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-field\":{type:\"formatted\",default:\"\",tokens:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-font\":{type:\"array\",value:\"string\",default:[\"Open Sans Regular\",\"Arial Unicode MS Regular\"],requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-size\":{type:\"number\",default:16,minimum:0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-width\":{type:\"number\",default:10,minimum:0,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-line-height\":{type:\"number\",default:1.2,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-letter-spacing\":{type:\"number\",default:0,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-justify\":{type:\"enum\",values:{auto:{},left:{},center:{},right:{}},default:\"center\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-radial-offset\":{type:\"number\",units:\"ems\",default:0,requires:[\"text-field\"],\"property-type\":\"data-driven\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]}},\"text-variable-anchor\":{type:\"array\",value:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},requires:[\"text-field\",{\"symbol-placement\":[\"point\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-anchor\":{type:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},default:\"center\",requires:[\"text-field\",{\"!\":\"text-variable-anchor\"}],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-angle\":{type:\"number\",default:45,units:\"degrees\",requires:[\"text-field\",{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-writing-mode\":{type:\"array\",value:\"enum\",values:{horizontal:{},vertical:{}},requires:[\"text-field\",{\"symbol-placement\":[\"point\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotate\":{type:\"number\",default:0,period:360,units:\"degrees\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-padding\":{type:\"number\",default:2,minimum:0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-keep-upright\":{type:\"boolean\",default:!0,requires:[\"text-field\",{\"text-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-transform\":{type:\"enum\",values:{none:{},uppercase:{},lowercase:{}},default:\"none\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-offset\":{type:\"array\",value:\"number\",units:\"ems\",length:2,default:[0,0],requires:[\"text-field\",{\"!\":\"text-radial-offset\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-allow-overlap\":{type:\"boolean\",default:!1,requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-ignore-placement\":{type:\"boolean\",default:!1,requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-optional\":{type:\"boolean\",default:!1,requires:[\"text-field\",\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_raster:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_hillshade:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},filter:{type:\"array\",value:\"*\"},filter_operator:{type:\"enum\",values:{\"==\":{},\"!=\":{},\">\":{},\">=\":{},\"<\":{},\"<=\":{},in:{},\"!in\":{},all:{},any:{},none:{},has:{},\"!has\":{},within:{}}},geometry_type:{type:\"enum\",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:\"expression\"},stops:{type:\"array\",value:\"function_stop\"},base:{type:\"number\",default:1,minimum:0},property:{type:\"string\",default:\"$zoom\"},type:{type:\"enum\",values:{identity:{},exponential:{},interval:{},categorical:{}},default:\"exponential\"},colorSpace:{type:\"enum\",values:{rgb:{},lab:{},hcl:{}},default:\"rgb\"},default:{type:\"*\",required:!1}},function_stop:{type:\"array\",minimum:0,maximum:24,value:[\"number\",\"color\"],length:2},expression:{type:\"array\",value:\"*\",minimum:1},light:{anchor:{type:\"enum\",default:\"viewport\",values:{map:{},viewport:{}},\"property-type\":\"data-constant\",transition:!1,expression:{interpolated:!1,parameters:[\"zoom\"]}},position:{type:\"array\",default:[1.15,210,30],length:3,value:\"number\",\"property-type\":\"data-constant\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]}},color:{type:\"color\",\"property-type\":\"data-constant\",default:\"#ffffff\",expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0},intensity:{type:\"number\",\"property-type\":\"data-constant\",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0}},paint:[\"paint_fill\",\"paint_line\",\"paint_circle\",\"paint_heatmap\",\"paint_fill-extrusion\",\"paint_symbol\",\"paint_raster\",\"paint_hillshade\",\"paint_background\"],paint_fill:{\"fill-antialias\":{type:\"boolean\",default:!0,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"fill-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-outline-color\":{type:\"color\",transition:!0,requires:[{\"!\":\"fill-pattern\"},{\"fill-antialias\":!0}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"fill-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"}},\"paint_fill-extrusion\":{\"fill-extrusion-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"fill-extrusion-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"fill-extrusion-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"},\"fill-extrusion-height\":{type:\"number\",default:0,minimum:0,units:\"meters\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-base\":{type:\"number\",default:0,minimum:0,units:\"meters\",transition:!0,requires:[\"fill-extrusion-height\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-vertical-gradient\":{type:\"boolean\",default:!0,transition:!1,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_line:{\"line-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"line-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"line-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-width\":{type:\"number\",default:1,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-gap-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-offset\":{type:\"number\",default:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-dasharray\":{type:\"array\",value:\"number\",minimum:0,transition:!0,units:\"line widths\",requires:[{\"!\":\"line-pattern\"}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"cross-faded\"},\"line-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"},\"line-gradient\":{type:\"color\",transition:!1,requires:[{\"!\":\"line-dasharray\"},{\"!\":\"line-pattern\"},{source:\"geojson\",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:[\"line-progress\"]},\"property-type\":\"color-ramp\"}},paint_circle:{\"circle-radius\":{type:\"number\",default:5,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-blur\":{type:\"number\",default:0,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"circle-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-scale\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{}},default:\"viewport\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-stroke-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"}},paint_heatmap:{\"heatmap-radius\":{type:\"number\",default:30,minimum:1,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-weight\":{type:\"number\",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-intensity\":{type:\"number\",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"heatmap-color\":{type:\"color\",default:[\"interpolate\",[\"linear\"],[\"heatmap-density\"],0,\"rgba(0, 0, 255, 0)\",.1,\"royalblue\",.3,\"cyan\",.5,\"lime\",.7,\"yellow\",1,\"red\"],transition:!1,expression:{interpolated:!0,parameters:[\"heatmap-density\"]},\"property-type\":\"color-ramp\"},\"heatmap-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_symbol:{\"icon-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-color\":{type:\"color\",default:\"rgba(0, 0, 0, 0)\",transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"icon-image\",\"icon-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-color\":{type:\"color\",default:\"#000000\",transition:!0,overridable:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-color\":{type:\"color\",default:\"rgba(0, 0, 0, 0)\",transition:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"text-field\",\"text-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_raster:{\"raster-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-hue-rotate\":{type:\"number\",default:0,period:360,transition:!0,units:\"degrees\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-min\":{type:\"number\",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-max\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-saturation\":{type:\"number\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-contrast\":{type:\"number\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-resampling\":{type:\"enum\",values:{linear:{},nearest:{}},default:\"linear\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-fade-duration\":{type:\"number\",default:300,minimum:0,transition:!1,units:\"milliseconds\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_hillshade:{\"hillshade-illumination-direction\":{type:\"number\",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-illumination-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"viewport\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-exaggeration\":{type:\"number\",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-shadow-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-highlight-color\":{type:\"color\",default:\"#FFFFFF\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-accent-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_background:{\"background-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"background-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"background-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"cross-faded\"},\"background-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},transition:{duration:{type:\"number\",default:300,minimum:0,units:\"milliseconds\"},delay:{type:\"number\",default:0,minimum:0,units:\"milliseconds\"}},\"property-type\":{\"data-driven\":{type:\"property-type\"},\"cross-faded\":{type:\"property-type\"},\"cross-faded-data-driven\":{type:\"property-type\"},\"color-ramp\":{type:\"property-type\"},\"data-constant\":{type:\"property-type\"},constant:{type:\"property-type\"}},promoteId:{\"*\":{type:\"string\"}}},Pt=function(t,e,r,n){this.message=(t?t+\": \":\"\")+r,n&&(this.identifier=n),null!=e&&e.__line__&&(this.line=e.__line__);};function Mt(t){var e=t.value;return e?[new Pt(t.key,e,\"constants have been deprecated as of v8\")]:[]}function Bt(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,i=e;n\":\"value\"===t.itemType.kind?\"array\":\"array<\"+e+\">\"}return t.kind}var Ht=[Lt,Ot,Rt,Ut,jt,Gt,qt,Xt(Nt),Zt];function Yt(t,e){if(\"error\"===e.kind)return null;if(\"array\"===t.kind){if(\"array\"===e.kind&&(0===e.N&&\"value\"===e.itemType.kind||!Yt(t.itemType,e.itemType))&&(\"number\"!=typeof t.N||t.N===e.N))return null}else {if(t.kind===e.kind)return null;if(\"value\"===t.kind)for(var r=0,n=Ht;r255?255:t}function i(t){return n(\"%\"===t[t.length-1]?parseFloat(t)/100*255:parseInt(t))}function a(t){return (e=\"%\"===t[t.length-1]?parseFloat(t)/100:parseFloat(t))<0?0:e>1?1:e;var e;}function o(t,e,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?t+(e-t)*r*6:2*r<1?e:3*r<2?t+(e-t)*(2/3-r)*6:t}try{e.parseCSSColor=function(t){var e,s=t.replace(/ /g,\"\").toLowerCase();if(s in r)return r[s].slice();if(\"#\"===s[0])return 4===s.length?(e=parseInt(s.substr(1),16))>=0&&e<=4095?[(3840&e)>>4|(3840&e)>>8,240&e|(240&e)>>4,15&e|(15&e)<<4,1]:null:7===s.length&&(e=parseInt(s.substr(1),16))>=0&&e<=16777215?[(16711680&e)>>16,(65280&e)>>8,255&e,1]:null;var u=s.indexOf(\"(\"),l=s.indexOf(\")\");if(-1!==u&&l+1===s.length){var p=s.substr(0,u),c=s.substr(u+1,l-(u+1)).split(\",\"),h=1;switch(p){case\"rgba\":if(4!==c.length)return null;h=a(c.pop());case\"rgb\":return 3!==c.length?null:[i(c[0]),i(c[1]),i(c[2]),h];case\"hsla\":if(4!==c.length)return null;h=a(c.pop());case\"hsl\":if(3!==c.length)return null;var f=(parseFloat(c[0])%360+360)%360/360,y=a(c[1]),d=a(c[2]),m=d<=.5?d*(y+1):d+y-d*y,v=2*d-m;return [n(255*o(v,m,f+1/3)),n(255*o(v,m,f)),n(255*o(v,m,f-1/3)),h];default:return null}}return null};}catch(t){}})).parseCSSColor,te=function(t,e,r,n){void 0===n&&(n=1),this.r=t,this.g=e,this.b=r,this.a=n;};te.parse=function(t){if(t){if(t instanceof te)return t;if(\"string\"==typeof t){var e=Qt(t);if(e)return new te(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3])}}},te.prototype.toString=function(){var t=this.toArray(),e=t[1],r=t[2],n=t[3];return \"rgba(\"+Math.round(t[0])+\",\"+Math.round(e)+\",\"+Math.round(r)+\",\"+n+\")\"},te.prototype.toArray=function(){var t=this.a;return 0===t?[0,0,0,0]:[255*this.r/t,255*this.g/t,255*this.b/t,t]},te.black=new te(0,0,0,1),te.white=new te(1,1,1,1),te.transparent=new te(0,0,0,0),te.red=new te(1,0,0,1);var ee=function(t,e,r){this.sensitivity=t?e?\"variant\":\"case\":e?\"accent\":\"base\",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:\"search\"});};ee.prototype.compare=function(t,e){return this.collator.compare(t,e)},ee.prototype.resolvedLocale=function(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale};var re=function(t,e,r,n,i){this.text=t,this.image=e,this.scale=r,this.fontStack=n,this.textColor=i;},ne=function(t){this.sections=t;};ne.fromString=function(t){return new ne([new re(t,null,null,null,null)])},ne.prototype.isEmpty=function(){return 0===this.sections.length||!this.sections.some((function(t){return 0!==t.text.length||t.image&&0!==t.image.name.length}))},ne.factory=function(t){return t instanceof ne?t:ne.fromString(t)},ne.prototype.toString=function(){return 0===this.sections.length?\"\":this.sections.map((function(t){return t.text})).join(\"\")},ne.prototype.serialize=function(){for(var t=[\"format\"],e=0,r=this.sections;e=0&&t<=255&&\"number\"==typeof e&&e>=0&&e<=255&&\"number\"==typeof r&&r>=0&&r<=255?void 0===n||\"number\"==typeof n&&n>=0&&n<=1?null:\"Invalid rgba value [\"+[t,e,r,n].join(\", \")+\"]: 'a' must be between 0 and 1.\":\"Invalid rgba value [\"+(\"number\"==typeof n?[t,e,r,n]:[t,e,r]).join(\", \")+\"]: 'r', 'g', and 'b' must be between 0 and 255.\"}function oe(t){if(null===t)return !0;if(\"string\"==typeof t)return !0;if(\"boolean\"==typeof t)return !0;if(\"number\"==typeof t)return !0;if(t instanceof te)return !0;if(t instanceof ee)return !0;if(t instanceof ne)return !0;if(t instanceof ie)return !0;if(Array.isArray(t)){for(var e=0,r=t;e2){var s=t[1];if(\"string\"!=typeof s||!(s in ce)||\"object\"===s)return e.error('The item type argument of \"array\" must be one of string, number, boolean',1);a=ce[s],n++;}else a=Nt;if(t.length>3){if(null!==t[2]&&(\"number\"!=typeof t[2]||t[2]<0||t[2]!==Math.floor(t[2])))return e.error('The length argument to \"array\" must be a positive integer literal',2);o=t[2],n++;}r=Xt(a,o);}else r=ce[i];for(var u=[];n1)&&e.push(n);}}return e.concat(this.args.map((function(t){return t.serialize()})))};var fe=function(t){this.type=Gt,this.sections=t;};fe.parse=function(t,e){if(t.length<2)return e.error(\"Expected at least one argument.\");var r=t[1];if(!Array.isArray(r)&&\"object\"==typeof r)return e.error(\"First argument must be an image or text section.\");for(var n=[],i=!1,a=1;a<=t.length-1;++a){var o=t[a];if(i&&\"object\"==typeof o&&!Array.isArray(o)){i=!1;var s=null;if(o[\"font-scale\"]&&!(s=e.parse(o[\"font-scale\"],1,Ot)))return null;var u=null;if(o[\"text-font\"]&&!(u=e.parse(o[\"text-font\"],1,Xt(Rt))))return null;var l=null;if(o[\"text-color\"]&&!(l=e.parse(o[\"text-color\"],1,jt)))return null;var p=n[n.length-1];p.scale=s,p.font=u,p.textColor=l;}else {var c=e.parse(t[a],1,Nt);if(!c)return null;var h=c.type.kind;if(\"string\"!==h&&\"value\"!==h&&\"null\"!==h&&\"resolvedImage\"!==h)return e.error(\"Formatted text type must be 'string', 'value', 'image' or 'null'.\");i=!0,n.push({content:c,scale:null,font:null,textColor:null});}}return new fe(n)},fe.prototype.evaluate=function(t){return new ne(this.sections.map((function(e){var r=e.content.evaluate(t);return se(r)===Zt?new re(\"\",r,null,null,null):new re(ue(r),null,e.scale?e.scale.evaluate(t):null,e.font?e.font.evaluate(t).join(\",\"):null,e.textColor?e.textColor.evaluate(t):null)})))},fe.prototype.eachChild=function(t){for(var e=0,r=this.sections;e-1),r},ye.prototype.eachChild=function(t){t(this.input);},ye.prototype.outputDefined=function(){return !1},ye.prototype.serialize=function(){return [\"image\",this.input.serialize()]};var de={\"to-boolean\":Ut,\"to-color\":jt,\"to-number\":Ot,\"to-string\":Rt},me=function(t,e){this.type=t,this.args=e;};me.parse=function(t,e){if(t.length<2)return e.error(\"Expected at least one argument.\");var r=t[0];if((\"to-boolean\"===r||\"to-string\"===r)&&2!==t.length)return e.error(\"Expected one argument.\");for(var n=de[r],i=[],a=1;a4?\"Invalid rbga value \"+JSON.stringify(e)+\": expected an array containing either three or four numeric values.\":ae(e[0],e[1],e[2],e[3])))return new te(e[0]/255,e[1]/255,e[2]/255,e[3])}throw new pe(r||\"Could not parse color from value '\"+(\"string\"==typeof e?e:String(JSON.stringify(e)))+\"'\")}if(\"number\"===this.type.kind){for(var o=null,s=0,u=this.args;s=e[2]||t[1]<=e[1]||t[3]>=e[3])}function Ae(t,e){var r=(180+t[0])/360,n=(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t[1]*Math.PI/360)))/360,i=Math.pow(2,e.z);return [Math.round(r*i*8192),Math.round(n*i*8192)]}function Se(t,e,r){return e[1]>t[1]!=r[1]>t[1]&&t[0]<(r[0]-e[0])*(t[1]-e[1])/(r[1]-e[1])+e[0]}function ke(t,e){for(var r,n,i,a,o,s,u,l=!1,p=0,c=e.length;p0&&s<0||o<0&&s>0}function Ce(t,e,r){for(var n=0,i=r;nr[2]){var i=.5*n,a=t[0]-r[0]>i?-n:r[0]-t[0]>i?n:0;0===a&&(a=t[0]-r[2]>i?-n:r[2]-t[0]>i?n:0),t[0]+=a;}we(e,t);}function Ve(t,e,r,n){for(var i=8192*Math.pow(2,n.z),a=[8192*n.x,8192*n.y],o=[],s=0,u=t;s=0)return !1;var r=!0;return t.eachChild((function(t){r&&!Re(t,e)&&(r=!1);})),r}De.parse=function(t,e){if(2!==t.length)return e.error(\"'within' expression requires exactly one argument, but found \"+(t.length-1)+\" instead.\");if(oe(t[1])){var r=t[1];if(\"FeatureCollection\"===r.type)for(var n=0;ne))throw new pe(\"Input is not a number.\");a=o-1;}return 0}je.prototype.parse=function(t,e,r,n,i){return void 0===i&&(i={}),e?this.concat(e,r,n)._parse(t,i):this._parse(t,i)},je.prototype._parse=function(t,e){function r(t,e,r){return \"assert\"===r?new he(e,[t]):\"coerce\"===r?new me(e,[t]):t}if(null!==t&&\"string\"!=typeof t&&\"boolean\"!=typeof t&&\"number\"!=typeof t||(t=[\"literal\",t]),Array.isArray(t)){if(0===t.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].');var n=t[0];if(\"string\"!=typeof n)return this.error(\"Expression name must be a string, but found \"+typeof n+' instead. If you wanted a literal array, use [\"literal\", [...]].',0),null;var i=this.registry[n];if(i){var a=i.parse(t,this);if(!a)return null;if(this.expectedType){var o=this.expectedType,s=a.type;if(\"string\"!==o.kind&&\"number\"!==o.kind&&\"boolean\"!==o.kind&&\"object\"!==o.kind&&\"array\"!==o.kind||\"value\"!==s.kind)if(\"color\"!==o.kind&&\"formatted\"!==o.kind&&\"resolvedImage\"!==o.kind||\"value\"!==s.kind&&\"string\"!==s.kind){if(this.checkSubtype(o,s))return null}else a=r(a,o,e.typeAnnotation||\"coerce\");else a=r(a,o,e.typeAnnotation||\"assert\");}if(!(a instanceof le)&&\"resolvedImage\"!==a.type.kind&&function t(e){if(e instanceof Ue)return t(e.boundExpression);if(e instanceof xe&&\"error\"===e.name)return !1;if(e instanceof be)return !1;if(e instanceof De)return !1;var r=e instanceof me||e instanceof he,n=!0;return e.eachChild((function(e){n=r?n&&t(e):n&&e instanceof le;})),!!n&&Le(e)&&Re(e,[\"zoom\",\"heatmap-density\",\"line-progress\",\"accumulated\",\"is-supported-script\"])}(a)){var u=new ge;try{a=new le(a.type,a.evaluate(u));}catch(t){return this.error(t.message),null}}return a}return this.error('Unknown expression \"'+n+'\". If you wanted a literal array, use [\"literal\", [...]].',0)}return this.error(void 0===t?\"'undefined' value invalid. Use null instead.\":\"object\"==typeof t?'Bare objects invalid. Use [\"literal\", {...}] instead.':\"Expected an array, but found \"+typeof t+\" instead.\")},je.prototype.concat=function(t,e,r){var n=\"number\"==typeof t?this.path.concat(t):this.path,i=r?this.scope.concat(r):this.scope;return new je(this.registry,n,e||null,i,this.errors)},je.prototype.error=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];var n=\"\"+this.key+e.map((function(t){return \"[\"+t+\"]\"})).join(\"\");this.errors.push(new Ft(n,t));},je.prototype.checkSubtype=function(t,e){var r=Yt(t,e);return r&&this.error(r),r};var Ne=function(t,e,r){this.type=t,this.input=e,this.labels=[],this.outputs=[];for(var n=0,i=r;n=o)return e.error('Input/output pairs for \"step\" expressions must be arranged with input values in strictly ascending order.',u);var p=e.parse(s,l,i);if(!p)return null;i=i||p.type,n.push([o,p]);}return new Ne(i,r,n)},Ne.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var i=e.length;return n>=e[i-1]?r[i-1].evaluate(t):r[qe(e,n)].evaluate(t)},Ne.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e0&&t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t};var Ge=Object.freeze({__proto__:null,number:Ke,color:function(t,e,r){return new te(Ke(t.r,e.r,r),Ke(t.g,e.g,r),Ke(t.b,e.b,r),Ke(t.a,e.a,r))},array:function(t,e,r){return t.map((function(t,n){return Ke(t,e[n],r)}))}}),Ze=6/29*3*(6/29),Xe=Math.PI/180,Je=180/Math.PI;function He(t){return t>.008856451679035631?Math.pow(t,1/3):t/Ze+4/29}function Ye(t){return t>6/29?t*t*t:Ze*(t-4/29)}function $e(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function We(t){return (t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Qe(t){var e=We(t.r),r=We(t.g),n=We(t.b),i=He((.4124564*e+.3575761*r+.1804375*n)/.95047),a=He((.2126729*e+.7151522*r+.072175*n)/1);return {l:116*a-16,a:500*(i-a),b:200*(a-He((.0193339*e+.119192*r+.9503041*n)/1.08883)),alpha:t.a}}function tr(t){var e=(t.l+16)/116,r=isNaN(t.a)?e:e+t.a/500,n=isNaN(t.b)?e:e-t.b/200;return e=1*Ye(e),r=.95047*Ye(r),n=1.08883*Ye(n),new te($e(3.2404542*r-1.5371385*e-.4985314*n),$e(-.969266*r+1.8760108*e+.041556*n),$e(.0556434*r-.2040259*e+1.0572252*n),t.alpha)}function er(t,e,r){var n=e-t;return t+r*(n>180||n<-180?n-360*Math.round(n/360):n)}var rr={forward:Qe,reverse:tr,interpolate:function(t,e,r){return {l:Ke(t.l,e.l,r),a:Ke(t.a,e.a,r),b:Ke(t.b,e.b,r),alpha:Ke(t.alpha,e.alpha,r)}}},nr={forward:function(t){var e=Qe(t),r=e.l,n=e.a,i=e.b,a=Math.atan2(i,n)*Je;return {h:a<0?a+360:a,c:Math.sqrt(n*n+i*i),l:r,alpha:t.a}},reverse:function(t){var e=t.h*Xe,r=t.c;return tr({l:t.l,a:Math.cos(e)*r,b:Math.sin(e)*r,alpha:t.alpha})},interpolate:function(t,e,r){return {h:er(t.h,e.h,r),c:Ke(t.c,e.c,r),l:Ke(t.l,e.l,r),alpha:Ke(t.alpha,e.alpha,r)}}},ir=Object.freeze({__proto__:null,lab:rr,hcl:nr}),ar=function(t,e,r,n,i){this.type=t,this.operator=e,this.interpolation=r,this.input=n,this.labels=[],this.outputs=[];for(var a=0,o=i;a1})))return e.error(\"Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.\",1);n={name:\"cubic-bezier\",controlPoints:s};}if(t.length-1<4)return e.error(\"Expected at least 4 arguments, but found only \"+(t.length-1)+\".\");if((t.length-1)%2!=0)return e.error(\"Expected an even number of arguments.\");if(!(i=e.parse(i,2,Ot)))return null;var u=[],l=null;\"interpolate-hcl\"===r||\"interpolate-lab\"===r?l=jt:e.expectedType&&\"value\"!==e.expectedType.kind&&(l=e.expectedType);for(var p=0;p=c)return e.error('Input/output pairs for \"interpolate\" expressions must be arranged with input values in strictly ascending order.',f);var d=e.parse(h,y,l);if(!d)return null;l=l||d.type,u.push([c,d]);}return \"number\"===l.kind||\"color\"===l.kind||\"array\"===l.kind&&\"number\"===l.itemType.kind&&\"number\"==typeof l.N?new ar(l,r,n,i,u):e.error(\"Type \"+Jt(l)+\" is not interpolatable.\")},ar.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var i=e.length;if(n>=e[i-1])return r[i-1].evaluate(t);var a=qe(e,n),o=ar.interpolationFactor(this.interpolation,n,e[a],e[a+1]),s=r[a].evaluate(t),u=r[a+1].evaluate(t);return \"interpolate\"===this.operator?Ge[this.type.kind.toLowerCase()](s,u,o):\"interpolate-hcl\"===this.operator?nr.reverse(nr.interpolate(nr.forward(s),nr.forward(u),o)):rr.reverse(rr.interpolate(rr.forward(s),rr.forward(u),o))},ar.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e=r.length)throw new pe(\"Array index out of bounds: \"+e+\" > \"+(r.length-1)+\".\");if(e!==Math.floor(e))throw new pe(\"Array index must be an integer, but found \"+e+\" instead.\");return r[e]},lr.prototype.eachChild=function(t){t(this.index),t(this.input);},lr.prototype.outputDefined=function(){return !1},lr.prototype.serialize=function(){return [\"at\",this.index.serialize(),this.input.serialize()]};var pr=function(t,e){this.type=Ut,this.needle=t,this.haystack=e;};pr.parse=function(t,e){if(3!==t.length)return e.error(\"Expected 2 arguments, but found \"+(t.length-1)+\" instead.\");var r=e.parse(t[1],1,Nt),n=e.parse(t[2],2,Nt);return r&&n?$t(r.type,[Ut,Rt,Ot,Lt,Nt])?new pr(r,n):e.error(\"Expected first argument to be of type boolean, string, number or null, but found \"+Jt(r.type)+\" instead\"):null},pr.prototype.evaluate=function(t){var e=this.needle.evaluate(t),r=this.haystack.evaluate(t);if(!r)return !1;if(!Wt(e,[\"boolean\",\"string\",\"number\",\"null\"]))throw new pe(\"Expected first argument to be of type boolean, string, number or null, but found \"+Jt(se(e))+\" instead.\");if(!Wt(r,[\"string\",\"array\"]))throw new pe(\"Expected second argument to be of type array or string, but found \"+Jt(se(r))+\" instead.\");return r.indexOf(e)>=0},pr.prototype.eachChild=function(t){t(this.needle),t(this.haystack);},pr.prototype.outputDefined=function(){return !0},pr.prototype.serialize=function(){return [\"in\",this.needle.serialize(),this.haystack.serialize()]};var cr=function(t,e,r){this.type=Ot,this.needle=t,this.haystack=e,this.fromIndex=r;};cr.parse=function(t,e){if(t.length<=2||t.length>=5)return e.error(\"Expected 3 or 4 arguments, but found \"+(t.length-1)+\" instead.\");var r=e.parse(t[1],1,Nt),n=e.parse(t[2],2,Nt);if(!r||!n)return null;if(!$t(r.type,[Ut,Rt,Ot,Lt,Nt]))return e.error(\"Expected first argument to be of type boolean, string, number or null, but found \"+Jt(r.type)+\" instead\");if(4===t.length){var i=e.parse(t[3],3,Ot);return i?new cr(r,n,i):null}return new cr(r,n)},cr.prototype.evaluate=function(t){var e=this.needle.evaluate(t),r=this.haystack.evaluate(t);if(!Wt(e,[\"boolean\",\"string\",\"number\",\"null\"]))throw new pe(\"Expected first argument to be of type boolean, string, number or null, but found \"+Jt(se(e))+\" instead.\");if(!Wt(r,[\"string\",\"array\"]))throw new pe(\"Expected second argument to be of type array or string, but found \"+Jt(se(r))+\" instead.\");if(this.fromIndex){var n=this.fromIndex.evaluate(t);return r.indexOf(e,n)}return r.indexOf(e)},cr.prototype.eachChild=function(t){t(this.needle),t(this.haystack),this.fromIndex&&t(this.fromIndex);},cr.prototype.outputDefined=function(){return !1},cr.prototype.serialize=function(){if(null!=this.fromIndex&&void 0!==this.fromIndex){var t=this.fromIndex.serialize();return [\"index-of\",this.needle.serialize(),this.haystack.serialize(),t]}return [\"index-of\",this.needle.serialize(),this.haystack.serialize()]};var hr=function(t,e,r,n,i,a){this.inputType=t,this.type=e,this.input=r,this.cases=n,this.outputs=i,this.otherwise=a;};hr.parse=function(t,e){if(t.length<5)return e.error(\"Expected at least 4 arguments, but found only \"+(t.length-1)+\".\");if(t.length%2!=1)return e.error(\"Expected an even number of arguments.\");var r,n;e.expectedType&&\"value\"!==e.expectedType.kind&&(n=e.expectedType);for(var i={},a=[],o=2;oNumber.MAX_SAFE_INTEGER)return l.error(\"Branch labels must be integers no larger than \"+Number.MAX_SAFE_INTEGER+\".\");if(\"number\"==typeof h&&Math.floor(h)!==h)return l.error(\"Numeric branch labels must be integer values.\");if(r){if(l.checkSubtype(r,se(h)))return null}else r=se(h);if(void 0!==i[String(h)])return l.error(\"Branch labels must be unique.\");i[String(h)]=a.length;}var f=e.parse(u,o,n);if(!f)return null;n=n||f.type,a.push(f);}var y=e.parse(t[1],1,Nt);if(!y)return null;var d=e.parse(t[t.length-1],t.length-1,n);return d?\"value\"!==y.type.kind&&e.concat(1).checkSubtype(r,y.type)?null:new hr(r,n,y,i,a,d):null},hr.prototype.evaluate=function(t){var e=this.input.evaluate(t);return (se(e)===this.inputType&&this.outputs[this.cases[e]]||this.otherwise).evaluate(t)},hr.prototype.eachChild=function(t){t(this.input),this.outputs.forEach(t),t(this.otherwise);},hr.prototype.outputDefined=function(){return this.outputs.every((function(t){return t.outputDefined()}))&&this.otherwise.outputDefined()},hr.prototype.serialize=function(){for(var t=this,e=[\"match\",this.input.serialize()],r=[],n={},i=0,a=Object.keys(this.cases).sort();i=5)return e.error(\"Expected 3 or 4 arguments, but found \"+(t.length-1)+\" instead.\");var r=e.parse(t[1],1,Nt),n=e.parse(t[2],2,Ot);if(!r||!n)return null;if(!$t(r.type,[Xt(Nt),Rt,Nt]))return e.error(\"Expected first argument to be of type array or string, but found \"+Jt(r.type)+\" instead\");if(4===t.length){var i=e.parse(t[3],3,Ot);return i?new yr(r.type,r,n,i):null}return new yr(r.type,r,n)},yr.prototype.evaluate=function(t){var e=this.input.evaluate(t),r=this.beginIndex.evaluate(t);if(!Wt(e,[\"string\",\"array\"]))throw new pe(\"Expected first argument to be of type array or string, but found \"+Jt(se(e))+\" instead.\");if(this.endIndex){var n=this.endIndex.evaluate(t);return e.slice(r,n)}return e.slice(r)},yr.prototype.eachChild=function(t){t(this.input),t(this.beginIndex),this.endIndex&&t(this.endIndex);},yr.prototype.outputDefined=function(){return !1},yr.prototype.serialize=function(){if(null!=this.endIndex&&void 0!==this.endIndex){var t=this.endIndex.serialize();return [\"slice\",this.input.serialize(),this.beginIndex.serialize(),t]}return [\"slice\",this.input.serialize(),this.beginIndex.serialize()]};var gr=vr(\"==\",(function(t,e,r){return e===r}),mr),xr=vr(\"!=\",(function(t,e,r){return e!==r}),(function(t,e,r,n){return !mr(0,e,r,n)})),br=vr(\"<\",(function(t,e,r){return e\",(function(t,e,r){return e>r}),(function(t,e,r,n){return n.compare(e,r)>0})),_r=vr(\"<=\",(function(t,e,r){return e<=r}),(function(t,e,r,n){return n.compare(e,r)<=0})),Ar=vr(\">=\",(function(t,e,r){return e>=r}),(function(t,e,r,n){return n.compare(e,r)>=0})),Sr=function(t,e,r,n,i){this.type=Rt,this.number=t,this.locale=e,this.currency=r,this.minFractionDigits=n,this.maxFractionDigits=i;};Sr.parse=function(t,e){if(3!==t.length)return e.error(\"Expected two arguments.\");var r=e.parse(t[1],1,Ot);if(!r)return null;var n=t[2];if(\"object\"!=typeof n||Array.isArray(n))return e.error(\"NumberFormat options argument must be an object.\");var i=null;if(n.locale&&!(i=e.parse(n.locale,1,Rt)))return null;var a=null;if(n.currency&&!(a=e.parse(n.currency,1,Rt)))return null;var o=null;if(n[\"min-fraction-digits\"]&&!(o=e.parse(n[\"min-fraction-digits\"],1,Ot)))return null;var s=null;return n[\"max-fraction-digits\"]&&!(s=e.parse(n[\"max-fraction-digits\"],1,Ot))?null:new Sr(r,i,a,o,s)},Sr.prototype.evaluate=function(t){return new Intl.NumberFormat(this.locale?this.locale.evaluate(t):[],{style:this.currency?\"currency\":\"decimal\",currency:this.currency?this.currency.evaluate(t):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(t):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(t):void 0}).format(this.number.evaluate(t))},Sr.prototype.eachChild=function(t){t(this.number),this.locale&&t(this.locale),this.currency&&t(this.currency),this.minFractionDigits&&t(this.minFractionDigits),this.maxFractionDigits&&t(this.maxFractionDigits);},Sr.prototype.outputDefined=function(){return !1},Sr.prototype.serialize=function(){var t={};return this.locale&&(t.locale=this.locale.serialize()),this.currency&&(t.currency=this.currency.serialize()),this.minFractionDigits&&(t[\"min-fraction-digits\"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(t[\"max-fraction-digits\"]=this.maxFractionDigits.serialize()),[\"number-format\",this.number.serialize(),t]};var kr=function(t){this.type=Ot,this.input=t;};kr.parse=function(t,e){if(2!==t.length)return e.error(\"Expected 1 argument, but found \"+(t.length-1)+\" instead.\");var r=e.parse(t[1],1);return r?\"array\"!==r.type.kind&&\"string\"!==r.type.kind&&\"value\"!==r.type.kind?e.error(\"Expected argument of type string or array, but found \"+Jt(r.type)+\" instead.\"):new kr(r):null},kr.prototype.evaluate=function(t){var e=this.input.evaluate(t);if(\"string\"==typeof e)return e.length;if(Array.isArray(e))return e.length;throw new pe(\"Expected value to be of type string or array, but found \"+Jt(se(e))+\" instead.\")},kr.prototype.eachChild=function(t){t(this.input);},kr.prototype.outputDefined=function(){return !1},kr.prototype.serialize=function(){var t=[\"length\"];return this.eachChild((function(e){t.push(e.serialize());})),t};var Ir={\"==\":gr,\"!=\":xr,\">\":wr,\"<\":br,\">=\":Ar,\"<=\":_r,array:he,at:lr,boolean:he,case:fr,coalesce:sr,collator:be,format:fe,image:ye,in:pr,\"index-of\":cr,interpolate:ar,\"interpolate-hcl\":ar,\"interpolate-lab\":ar,length:kr,let:ur,literal:le,match:hr,number:he,\"number-format\":Sr,object:he,slice:yr,step:Ne,string:he,\"to-boolean\":me,\"to-color\":me,\"to-number\":me,\"to-string\":me,var:Ue,within:De};function zr(t,e){var r=e[0],n=e[1],i=e[2],a=e[3];r=r.evaluate(t),n=n.evaluate(t),i=i.evaluate(t);var o=a?a.evaluate(t):1,s=ae(r,n,i,o);if(s)throw new pe(s);return new te(r/255*o,n/255*o,i/255*o,o)}function Cr(t,e){return t in e}function Er(t,e){var r=e[t];return void 0===r?null:r}function Pr(t){return {type:t}}function Mr(t){return {result:\"success\",value:t}}function Br(t){return {result:\"error\",value:t}}function Tr(t){return \"data-driven\"===t[\"property-type\"]||\"cross-faded-data-driven\"===t[\"property-type\"]}function Vr(t){return !!t.expression&&t.expression.parameters.indexOf(\"zoom\")>-1}function Fr(t){return !!t.expression&&t.expression.interpolated}function Dr(t){return t instanceof Number?\"number\":t instanceof String?\"string\":t instanceof Boolean?\"boolean\":Array.isArray(t)?\"array\":null===t?\"null\":typeof t}function Lr(t){return \"object\"==typeof t&&null!==t&&!Array.isArray(t)}function Or(t){return t}function Rr(t,e,r){return void 0!==t?t:void 0!==e?e:void 0!==r?r:void 0}function Ur(t,e,r,n,i){return Rr(typeof r===i?n[r]:void 0,t.default,e.default)}function jr(t,e,r){if(\"number\"!==Dr(r))return Rr(t.default,e.default);var n=t.stops.length;if(1===n)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[n-1][0])return t.stops[n-1][1];var i=qe(t.stops.map((function(t){return t[0]})),r);return t.stops[i][1]}function qr(t,e,r){var n=void 0!==t.base?t.base:1;if(\"number\"!==Dr(r))return Rr(t.default,e.default);var i=t.stops.length;if(1===i)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[i-1][0])return t.stops[i-1][1];var a=qe(t.stops.map((function(t){return t[0]})),r),o=function(t,e,r,n){var i=n-r,a=t-r;return 0===i?0:1===e?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}(r,n,t.stops[a][0],t.stops[a+1][0]),s=t.stops[a][1],u=t.stops[a+1][1],l=Ge[e.type]||Or;if(t.colorSpace&&\"rgb\"!==t.colorSpace){var p=ir[t.colorSpace];l=function(t,e){return p.reverse(p.interpolate(p.forward(t),p.forward(e),o))};}return \"function\"==typeof s.evaluate?{evaluate:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var r=s.evaluate.apply(void 0,t),n=u.evaluate.apply(void 0,t);if(void 0!==r&&void 0!==n)return l(r,n,o)}}:l(s,u,o)}function Nr(t,e,r){return \"color\"===e.type?r=te.parse(r):\"formatted\"===e.type?r=ne.fromString(r.toString()):\"resolvedImage\"===e.type?r=ie.fromString(r.toString()):Dr(r)===e.type||\"enum\"===e.type&&e.values[r]||(r=void 0),Rr(r,t.default,e.default)}xe.register(Ir,{error:[{kind:\"error\"},[Rt],function(t,e){throw new pe(e[0].evaluate(t))}],typeof:[Rt,[Nt],function(t,e){return Jt(se(e[0].evaluate(t)))}],\"to-rgba\":[Xt(Ot,4),[jt],function(t,e){return e[0].evaluate(t).toArray()}],rgb:[jt,[Ot,Ot,Ot],zr],rgba:[jt,[Ot,Ot,Ot,Ot],zr],has:{type:Ut,overloads:[[[Rt],function(t,e){return Cr(e[0].evaluate(t),t.properties())}],[[Rt,qt],function(t,e){var r=e[1];return Cr(e[0].evaluate(t),r.evaluate(t))}]]},get:{type:Nt,overloads:[[[Rt],function(t,e){return Er(e[0].evaluate(t),t.properties())}],[[Rt,qt],function(t,e){var r=e[1];return Er(e[0].evaluate(t),r.evaluate(t))}]]},\"feature-state\":[Nt,[Rt],function(t,e){return Er(e[0].evaluate(t),t.featureState||{})}],properties:[qt,[],function(t){return t.properties()}],\"geometry-type\":[Rt,[],function(t){return t.geometryType()}],id:[Nt,[],function(t){return t.id()}],zoom:[Ot,[],function(t){return t.globals.zoom}],\"heatmap-density\":[Ot,[],function(t){return t.globals.heatmapDensity||0}],\"line-progress\":[Ot,[],function(t){return t.globals.lineProgress||0}],accumulated:[Nt,[],function(t){return void 0===t.globals.accumulated?null:t.globals.accumulated}],\"+\":[Ot,Pr(Ot),function(t,e){for(var r=0,n=0,i=e;n\":[Ut,[Rt,Nt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i>a}],\"filter-id->\":[Ut,[Nt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n>i}],\"filter-<=\":[Ut,[Rt,Nt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i<=a}],\"filter-id-<=\":[Ut,[Nt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n<=i}],\"filter->=\":[Ut,[Rt,Nt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i>=a}],\"filter-id->=\":[Ut,[Nt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n>=i}],\"filter-has\":[Ut,[Nt],function(t,e){return e[0].value in t.properties()}],\"filter-has-id\":[Ut,[],function(t){return null!==t.id()&&void 0!==t.id()}],\"filter-type-in\":[Ut,[Xt(Rt)],function(t,e){return e[0].value.indexOf(t.geometryType())>=0}],\"filter-id-in\":[Ut,[Xt(Nt)],function(t,e){return e[0].value.indexOf(t.id())>=0}],\"filter-in-small\":[Ut,[Rt,Xt(Nt)],function(t,e){var r=e[0];return e[1].value.indexOf(t.properties()[r.value])>=0}],\"filter-in-large\":[Ut,[Rt,Xt(Nt)],function(t,e){var r=e[0],n=e[1];return function(t,e,r,n){for(;r<=n;){var i=r+n>>1;if(e[i]===t)return !0;e[i]>t?n=i-1:r=i+1;}return !1}(t.properties()[r.value],n.value,0,n.value.length-1)}],all:{type:Ut,overloads:[[[Ut,Ut],function(t,e){var r=e[1];return e[0].evaluate(t)&&r.evaluate(t)}],[Pr(Ut),function(t,e){for(var r=0,n=e;r0&&\"string\"==typeof t[0]&&t[0]in Ir}function Zr(t,e){var r=new je(Ir,[],e?function(t){var e={color:jt,string:Rt,number:Ot,enum:Rt,boolean:Ut,formatted:Gt,resolvedImage:Zt};return \"array\"===t.type?Xt(e[t.value]||Nt,t.length):e[t.type]}(e):void 0),n=r.parse(t,void 0,void 0,void 0,e&&\"string\"===e.type?{typeAnnotation:\"coerce\"}:void 0);return n?Mr(new Kr(n,e)):Br(r.errors)}Kr.prototype.evaluateWithoutErrorHandling=function(t,e,r,n,i,a){return this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=r,this._evaluator.canonical=n,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=a,this.expression.evaluate(this._evaluator)},Kr.prototype.evaluate=function(t,e,r,n,i,a){this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=r||null,this._evaluator.canonical=n,this._evaluator.availableImages=i||null,this._evaluator.formattedSection=a||null;try{var o=this.expression.evaluate(this._evaluator);if(null==o||\"number\"==typeof o&&o!=o)return this._defaultValue;if(this._enumValues&&!(o in this._enumValues))throw new pe(\"Expected value to be one of \"+Object.keys(this._enumValues).map((function(t){return JSON.stringify(t)})).join(\", \")+\", but found \"+JSON.stringify(o)+\" instead.\");return o}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]=!0,\"undefined\"!=typeof console&&console.warn(t.message)),this._defaultValue}};var Xr=function(t,e){this.kind=t,this._styleExpression=e,this.isStateDependent=\"constant\"!==t&&!Oe(e.expression);};Xr.prototype.evaluateWithoutErrorHandling=function(t,e,r,n,i,a){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n,i,a)},Xr.prototype.evaluate=function(t,e,r,n,i,a){return this._styleExpression.evaluate(t,e,r,n,i,a)};var Jr=function(t,e,r,n){this.kind=t,this.zoomStops=r,this._styleExpression=e,this.isStateDependent=\"camera\"!==t&&!Oe(e.expression),this.interpolationType=n;};function Hr(t,e){if(\"error\"===(t=Zr(t,e)).result)return t;var r=t.value.expression,n=Le(r);if(!n&&!Tr(e))return Br([new Ft(\"\",\"data expressions not supported\")]);var i=Re(r,[\"zoom\"]);if(!i&&!Vr(e))return Br([new Ft(\"\",\"zoom expressions not supported\")]);var a=function t(e){var r=null;if(e instanceof ur)r=t(e.result);else if(e instanceof sr)for(var n=0,i=e.args;nn.maximum?[new Pt(e,r,r+\" is greater than the maximum value \"+n.maximum)]:[]}function tn(t){var e,r,n,i=t.valueSpec,a=Tt(t.value.type),o={},s=\"categorical\"!==a&&void 0===t.value.property,u=!s,l=\"array\"===Dr(t.value.stops)&&\"array\"===Dr(t.value.stops[0])&&\"object\"===Dr(t.value.stops[0][0]),p=$r({key:t.key,value:t.value,valueSpec:t.styleSpec.function,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:function(t){if(\"identity\"===a)return [new Pt(t.key,t.value,'identity function may not have a \"stops\" property')];var e=[],r=t.value;return e=e.concat(Wr({key:t.key,value:r,valueSpec:t.valueSpec,style:t.style,styleSpec:t.styleSpec,arrayElementValidator:c})),\"array\"===Dr(r)&&0===r.length&&e.push(new Pt(t.key,r,\"array must have at least one stop\")),e},default:function(t){return An({key:t.key,value:t.value,valueSpec:i,style:t.style,styleSpec:t.styleSpec})}}});return \"identity\"===a&&s&&p.push(new Pt(t.key,t.value,'missing required property \"property\"')),\"identity\"===a||t.value.stops||p.push(new Pt(t.key,t.value,'missing required property \"stops\"')),\"exponential\"===a&&t.valueSpec.expression&&!Fr(t.valueSpec)&&p.push(new Pt(t.key,t.value,\"exponential functions not supported\")),t.styleSpec.$version>=8&&(u&&!Tr(t.valueSpec)?p.push(new Pt(t.key,t.value,\"property functions not supported\")):s&&!Vr(t.valueSpec)&&p.push(new Pt(t.key,t.value,\"zoom functions not supported\"))),\"categorical\"!==a&&!l||void 0!==t.value.property||p.push(new Pt(t.key,t.value,'\"property\" property is required')),p;function c(t){var e=[],a=t.value,s=t.key;if(\"array\"!==Dr(a))return [new Pt(s,a,\"array expected, \"+Dr(a)+\" found\")];if(2!==a.length)return [new Pt(s,a,\"array length 2 expected, length \"+a.length+\" found\")];if(l){if(\"object\"!==Dr(a[0]))return [new Pt(s,a,\"object expected, \"+Dr(a[0])+\" found\")];if(void 0===a[0].zoom)return [new Pt(s,a,\"object stop key must have zoom\")];if(void 0===a[0].value)return [new Pt(s,a,\"object stop key must have value\")];if(n&&n>Tt(a[0].zoom))return [new Pt(s,a[0].zoom,\"stop zoom values must appear in ascending order\")];Tt(a[0].zoom)!==n&&(n=Tt(a[0].zoom),r=void 0,o={}),e=e.concat($r({key:s+\"[0]\",value:a[0],valueSpec:{zoom:{}},style:t.style,styleSpec:t.styleSpec,objectElementValidators:{zoom:Qr,value:h}}));}else e=e.concat(h({key:s+\"[0]\",value:a[0],valueSpec:{},style:t.style,styleSpec:t.styleSpec},a));return Gr(Vt(a[1]))?e.concat([new Pt(s+\"[1]\",a[1],\"expressions are not allowed in function stops.\")]):e.concat(An({key:s+\"[1]\",value:a[1],valueSpec:i,style:t.style,styleSpec:t.styleSpec}))}function h(t,n){var s=Dr(t.value),u=Tt(t.value),l=null!==t.value?t.value:n;if(e){if(s!==e)return [new Pt(t.key,l,s+\" stop domain type must match previous stop domain type \"+e)]}else e=s;if(\"number\"!==s&&\"string\"!==s&&\"boolean\"!==s)return [new Pt(t.key,l,\"stop domain value must be a number, string, or boolean\")];if(\"number\"!==s&&\"categorical\"!==a){var p=\"number expected, \"+s+\" found\";return Tr(i)&&void 0===a&&(p+='\\nIf you intended to use a categorical function, specify `\"type\": \"categorical\"`.'),[new Pt(t.key,l,p)]}return \"categorical\"!==a||\"number\"!==s||isFinite(u)&&Math.floor(u)===u?\"categorical\"!==a&&\"number\"===s&&void 0!==r&&u=2&&\"$id\"!==t[1]&&\"$type\"!==t[1];case\"in\":return t.length>=3&&(\"string\"!=typeof t[1]||Array.isArray(t[2]));case\"!in\":case\"!has\":case\"none\":return !1;case\"==\":case\"!=\":case\">\":case\">=\":case\"<\":case\"<=\":return 3!==t.length||Array.isArray(t[1])||Array.isArray(t[2]);case\"any\":case\"all\":for(var e=0,r=t.slice(1);ee?1:0}function un(t){if(!t)return !0;var e,r=t[0];return t.length<=1?\"any\"!==r:\"==\"===r?ln(t[1],t[2],\"==\"):\"!=\"===r?hn(ln(t[1],t[2],\"==\")):\"<\"===r||\">\"===r||\"<=\"===r||\">=\"===r?ln(t[1],t[2],r):\"any\"===r?(e=t.slice(1),[\"any\"].concat(e.map(un))):\"all\"===r?[\"all\"].concat(t.slice(1).map(un)):\"none\"===r?[\"all\"].concat(t.slice(1).map(un).map(hn)):\"in\"===r?pn(t[1],t.slice(2)):\"!in\"===r?hn(pn(t[1],t.slice(2))):\"has\"===r?cn(t[1]):\"!has\"===r?hn(cn(t[1])):\"within\"!==r||t}function ln(t,e,r){switch(t){case\"$type\":return [\"filter-type-\"+r,e];case\"$id\":return [\"filter-id-\"+r,e];default:return [\"filter-\"+r,t,e]}}function pn(t,e){if(0===e.length)return !1;switch(t){case\"$type\":return [\"filter-type-in\",[\"literal\",e]];case\"$id\":return [\"filter-id-in\",[\"literal\",e]];default:return e.length>200&&!e.some((function(t){return typeof t!=typeof e[0]}))?[\"filter-in-large\",t,[\"literal\",e.sort(sn)]]:[\"filter-in-small\",t,[\"literal\",e]]}}function cn(t){switch(t){case\"$type\":return !0;case\"$id\":return [\"filter-has-id\"];default:return [\"filter-has\",t]}}function hn(t){return [\"!\",t]}function fn(t){return nn(Vt(t.value))?en(Bt({},t,{expressionContext:\"filter\",valueSpec:{value:\"boolean\"}})):function t(e){var r=e.value,n=e.key;if(\"array\"!==Dr(r))return [new Pt(n,r,\"array expected, \"+Dr(r)+\" found\")];var i,a=e.styleSpec,o=[];if(r.length<1)return [new Pt(n,r,\"filter array must have at least 1 element\")];switch(o=o.concat(rn({key:n+\"[0]\",value:r[0],valueSpec:a.filter_operator,style:e.style,styleSpec:e.styleSpec})),Tt(r[0])){case\"<\":case\"<=\":case\">\":case\">=\":r.length>=2&&\"$type\"===Tt(r[1])&&o.push(new Pt(n,r,'\"$type\" cannot be use with operator \"'+r[0]+'\"'));case\"==\":case\"!=\":3!==r.length&&o.push(new Pt(n,r,'filter array for operator \"'+r[0]+'\" must have 3 elements'));case\"in\":case\"!in\":r.length>=2&&\"string\"!==(i=Dr(r[1]))&&o.push(new Pt(n+\"[1]\",r[1],\"string expected, \"+i+\" found\"));for(var s=2;s=p[f+0]&&n>=p[f+1])?(o[h]=!0,a.push(l[h])):o[h]=!1;}}},Vn.prototype._forEachCell=function(t,e,r,n,i,a,o,s){for(var u=this._convertToCellCoord(t),l=this._convertToCellCoord(e),p=this._convertToCellCoord(r),c=this._convertToCellCoord(n),h=u;h<=p;h++)for(var f=l;f<=c;f++){var y=this.d*f+h;if((!s||s(this._convertFromCellCoord(h),this._convertFromCellCoord(f),this._convertFromCellCoord(h+1),this._convertFromCellCoord(f+1)))&&i.call(this,t,e,r,n,y,a,o,s))return}},Vn.prototype._convertFromCellCoord=function(t){return (t-this.padding)/this.scale},Vn.prototype._convertToCellCoord=function(t){return Math.max(0,Math.min(this.d-1,Math.floor(t*this.scale)+this.padding))},Vn.prototype.toArrayBuffer=function(){if(this.arrayBuffer)return this.arrayBuffer;for(var t=this.cells,e=3+this.cells.length+1+1,r=0,n=0;n=0)){var p=t[l];u[l]=Ln[s].shallow.indexOf(l)>=0?p:qn(p,e);}t instanceof Error&&(u.message=t.message);}if(u.$name)throw new Error(\"$name property is reserved for worker serialization logic.\");return \"Object\"!==s&&(u.$name=s),u}throw new Error(\"can't serialize object of type \"+typeof t)}function Nn(t){if(null==t||\"boolean\"==typeof t||\"number\"==typeof t||\"string\"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp||Un(t)||jn(t)||ArrayBuffer.isView(t)||t instanceof Fn)return t;if(Array.isArray(t))return t.map(Nn);if(\"object\"==typeof t){var e=t.$name||\"Object\",r=Ln[e].klass;if(!r)throw new Error(\"can't deserialize unregistered class \"+e);if(r.deserialize)return r.deserialize(t);for(var n=Object.create(r.prototype),i=0,a=Object.keys(t);i=0?s:Nn(s);}}return n}throw new Error(\"can't deserialize object of type \"+typeof t)}var Kn=function(){this.first=!0;};Kn.prototype.update=function(t,e){var r=Math.floor(t);return this.first?(this.first=!1,this.lastIntegerZoom=r,this.lastIntegerZoomTime=0,this.lastZoom=t,this.lastFloorZoom=r,!0):(this.lastFloorZoom>r?(this.lastIntegerZoom=r+1,this.lastIntegerZoomTime=e):this.lastFloorZoom=128&&t<=255},Arabic:function(t){return t>=1536&&t<=1791},\"Arabic Supplement\":function(t){return t>=1872&&t<=1919},\"Arabic Extended-A\":function(t){return t>=2208&&t<=2303},\"Hangul Jamo\":function(t){return t>=4352&&t<=4607},\"Unified Canadian Aboriginal Syllabics\":function(t){return t>=5120&&t<=5759},Khmer:function(t){return t>=6016&&t<=6143},\"Unified Canadian Aboriginal Syllabics Extended\":function(t){return t>=6320&&t<=6399},\"General Punctuation\":function(t){return t>=8192&&t<=8303},\"Letterlike Symbols\":function(t){return t>=8448&&t<=8527},\"Number Forms\":function(t){return t>=8528&&t<=8591},\"Miscellaneous Technical\":function(t){return t>=8960&&t<=9215},\"Control Pictures\":function(t){return t>=9216&&t<=9279},\"Optical Character Recognition\":function(t){return t>=9280&&t<=9311},\"Enclosed Alphanumerics\":function(t){return t>=9312&&t<=9471},\"Geometric Shapes\":function(t){return t>=9632&&t<=9727},\"Miscellaneous Symbols\":function(t){return t>=9728&&t<=9983},\"Miscellaneous Symbols and Arrows\":function(t){return t>=11008&&t<=11263},\"CJK Radicals Supplement\":function(t){return t>=11904&&t<=12031},\"Kangxi Radicals\":function(t){return t>=12032&&t<=12255},\"Ideographic Description Characters\":function(t){return t>=12272&&t<=12287},\"CJK Symbols and Punctuation\":function(t){return t>=12288&&t<=12351},Hiragana:function(t){return t>=12352&&t<=12447},Katakana:function(t){return t>=12448&&t<=12543},Bopomofo:function(t){return t>=12544&&t<=12591},\"Hangul Compatibility Jamo\":function(t){return t>=12592&&t<=12687},Kanbun:function(t){return t>=12688&&t<=12703},\"Bopomofo Extended\":function(t){return t>=12704&&t<=12735},\"CJK Strokes\":function(t){return t>=12736&&t<=12783},\"Katakana Phonetic Extensions\":function(t){return t>=12784&&t<=12799},\"Enclosed CJK Letters and Months\":function(t){return t>=12800&&t<=13055},\"CJK Compatibility\":function(t){return t>=13056&&t<=13311},\"CJK Unified Ideographs Extension A\":function(t){return t>=13312&&t<=19903},\"Yijing Hexagram Symbols\":function(t){return t>=19904&&t<=19967},\"CJK Unified Ideographs\":function(t){return t>=19968&&t<=40959},\"Yi Syllables\":function(t){return t>=40960&&t<=42127},\"Yi Radicals\":function(t){return t>=42128&&t<=42191},\"Hangul Jamo Extended-A\":function(t){return t>=43360&&t<=43391},\"Hangul Syllables\":function(t){return t>=44032&&t<=55215},\"Hangul Jamo Extended-B\":function(t){return t>=55216&&t<=55295},\"Private Use Area\":function(t){return t>=57344&&t<=63743},\"CJK Compatibility Ideographs\":function(t){return t>=63744&&t<=64255},\"Arabic Presentation Forms-A\":function(t){return t>=64336&&t<=65023},\"Vertical Forms\":function(t){return t>=65040&&t<=65055},\"CJK Compatibility Forms\":function(t){return t>=65072&&t<=65103},\"Small Form Variants\":function(t){return t>=65104&&t<=65135},\"Arabic Presentation Forms-B\":function(t){return t>=65136&&t<=65279},\"Halfwidth and Fullwidth Forms\":function(t){return t>=65280&&t<=65519}};function Zn(t){for(var e=0,r=t;e=65097&&t<=65103)||Gn[\"CJK Compatibility Ideographs\"](t)||Gn[\"CJK Compatibility\"](t)||Gn[\"CJK Radicals Supplement\"](t)||Gn[\"CJK Strokes\"](t)||!(!Gn[\"CJK Symbols and Punctuation\"](t)||t>=12296&&t<=12305||t>=12308&&t<=12319||12336===t)||Gn[\"CJK Unified Ideographs Extension A\"](t)||Gn[\"CJK Unified Ideographs\"](t)||Gn[\"Enclosed CJK Letters and Months\"](t)||Gn[\"Hangul Compatibility Jamo\"](t)||Gn[\"Hangul Jamo Extended-A\"](t)||Gn[\"Hangul Jamo Extended-B\"](t)||Gn[\"Hangul Jamo\"](t)||Gn[\"Hangul Syllables\"](t)||Gn.Hiragana(t)||Gn[\"Ideographic Description Characters\"](t)||Gn.Kanbun(t)||Gn[\"Kangxi Radicals\"](t)||Gn[\"Katakana Phonetic Extensions\"](t)||Gn.Katakana(t)&&12540!==t||!(!Gn[\"Halfwidth and Fullwidth Forms\"](t)||65288===t||65289===t||65293===t||t>=65306&&t<=65310||65339===t||65341===t||65343===t||t>=65371&&t<=65503||65507===t||t>=65512&&t<=65519)||!(!Gn[\"Small Form Variants\"](t)||t>=65112&&t<=65118||t>=65123&&t<=65126)||Gn[\"Unified Canadian Aboriginal Syllabics\"](t)||Gn[\"Unified Canadian Aboriginal Syllabics Extended\"](t)||Gn[\"Vertical Forms\"](t)||Gn[\"Yijing Hexagram Symbols\"](t)||Gn[\"Yi Syllables\"](t)||Gn[\"Yi Radicals\"](t))))}function Jn(t){return !(Xn(t)||function(t){return !!(Gn[\"Latin-1 Supplement\"](t)&&(167===t||169===t||174===t||177===t||188===t||189===t||190===t||215===t||247===t)||Gn[\"General Punctuation\"](t)&&(8214===t||8224===t||8225===t||8240===t||8241===t||8251===t||8252===t||8258===t||8263===t||8264===t||8265===t||8273===t)||Gn[\"Letterlike Symbols\"](t)||Gn[\"Number Forms\"](t)||Gn[\"Miscellaneous Technical\"](t)&&(t>=8960&&t<=8967||t>=8972&&t<=8991||t>=8996&&t<=9e3||9003===t||t>=9085&&t<=9114||t>=9150&&t<=9165||9167===t||t>=9169&&t<=9179||t>=9186&&t<=9215)||Gn[\"Control Pictures\"](t)&&9251!==t||Gn[\"Optical Character Recognition\"](t)||Gn[\"Enclosed Alphanumerics\"](t)||Gn[\"Geometric Shapes\"](t)||Gn[\"Miscellaneous Symbols\"](t)&&!(t>=9754&&t<=9759)||Gn[\"Miscellaneous Symbols and Arrows\"](t)&&(t>=11026&&t<=11055||t>=11088&&t<=11097||t>=11192&&t<=11243)||Gn[\"CJK Symbols and Punctuation\"](t)||Gn.Katakana(t)||Gn[\"Private Use Area\"](t)||Gn[\"CJK Compatibility Forms\"](t)||Gn[\"Small Form Variants\"](t)||Gn[\"Halfwidth and Fullwidth Forms\"](t)||8734===t||8756===t||8757===t||t>=9984&&t<=10087||t>=10102&&t<=10131||65532===t||65533===t)}(t))}function Hn(t){return t>=1424&&t<=2303||Gn[\"Arabic Presentation Forms-A\"](t)||Gn[\"Arabic Presentation Forms-B\"](t)}function Yn(t,e){return !(!e&&Hn(t)||t>=2304&&t<=3583||t>=3840&&t<=4255||Gn.Khmer(t))}function $n(t){for(var e=0,r=t;e-1&&(Qn=\"error\"),Wn&&Wn(t);};function ri(){ni.fire(new It(\"pluginStateChange\",{pluginStatus:Qn,pluginURL:ti}));}var ni=new Ct,ii=function(){return Qn},ai=function(){if(\"deferred\"!==Qn||!ti)throw new Error(\"rtl-text-plugin cannot be downloaded unless a pluginURL is specified\");Qn=\"loading\",ri(),ti&&bt({url:ti},(function(t){t?ei(t):(Qn=\"loaded\",ri());}));},oi={applyArabicShaping:null,processBidirectionalText:null,processStyledBidirectionalText:null,isLoaded:function(){return \"loaded\"===Qn||null!=oi.applyArabicShaping},isLoading:function(){return \"loading\"===Qn},setState:function(t){Qn=t.pluginStatus,ti=t.pluginURL;},isParsed:function(){return null!=oi.applyArabicShaping&&null!=oi.processBidirectionalText&&null!=oi.processStyledBidirectionalText},getPluginURL:function(){return ti}},si=function(t,e){this.zoom=t,e?(this.now=e.now,this.fadeDuration=e.fadeDuration,this.zoomHistory=e.zoomHistory,this.transition=e.transition):(this.now=0,this.fadeDuration=0,this.zoomHistory=new Kn,this.transition={});};si.prototype.isSupportedScript=function(t){return function(t,e){for(var r=0,n=t;rthis.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:e+(1-e)*r}:{fromScale:.5,toScale:1,t:1-(1-r)*e}};var ui=function(t,e){this.property=t,this.value=e,this.expression=function(t,e){if(Lr(t))return new Yr(t,e);if(Gr(t)){var r=Hr(t,e);if(\"error\"===r.result)throw new Error(r.value.map((function(t){return t.key+\": \"+t.message})).join(\", \"));return r.value}var n=t;return \"string\"==typeof t&&\"color\"===e.type&&(n=te.parse(t)),{kind:\"constant\",evaluate:function(){return n}}}(void 0===e?t.specification.default:e,t.specification);};ui.prototype.isDataDriven=function(){return \"source\"===this.expression.kind||\"composite\"===this.expression.kind},ui.prototype.possiblyEvaluate=function(t,e,r){return this.property.possiblyEvaluate(this,t,e,r)};var li=function(t){this.property=t,this.value=new ui(t,void 0);};li.prototype.transitioned=function(t,e){return new ci(this.property,this.value,e,h({},t.transition,this.transition),t.now)},li.prototype.untransitioned=function(){return new ci(this.property,this.value,null,{},0)};var pi=function(t){this._properties=t,this._values=Object.create(t.defaultTransitionablePropertyValues);};pi.prototype.getValue=function(t){return w(this._values[t].value.value)},pi.prototype.setValue=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new li(this._values[t].property)),this._values[t].value=new ui(this._values[t].property,null===e?void 0:w(e));},pi.prototype.getTransition=function(t){return w(this._values[t].transition)},pi.prototype.setTransition=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new li(this._values[t].property)),this._values[t].transition=w(e)||void 0;},pi.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);ethis.end)return this.prior=null,i;if(this.value.isDataDriven())return this.prior=null,i;if(n=1)return 1;var e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75)}(o))}return i};var hi=function(t){this._properties=t,this._values=Object.create(t.defaultTransitioningPropertyValues);};hi.prototype.possiblyEvaluate=function(t,e,r){for(var n=new di(this._properties),i=0,a=Object.keys(this._values);in.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},e.prototype.interpolate=function(t){return t},e}(vi),xi=function(t){this.specification=t;};xi.prototype.possiblyEvaluate=function(t,e,r,n){if(void 0!==t.value){if(\"constant\"===t.expression.kind){var i=t.expression.evaluate(e,null,{},r,n);return this._calculate(i,i,i,e)}return this._calculate(t.expression.evaluate(new si(Math.floor(e.zoom-1),e)),t.expression.evaluate(new si(Math.floor(e.zoom),e)),t.expression.evaluate(new si(Math.floor(e.zoom+1),e)),e)}},xi.prototype._calculate=function(t,e,r,n){return n.zoom>n.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},xi.prototype.interpolate=function(t){return t};var bi=function(t){this.specification=t;};bi.prototype.possiblyEvaluate=function(t,e,r,n){return !!t.expression.evaluate(e,null,{},r,n)},bi.prototype.interpolate=function(){return !1};var wi=function(t){for(var e in this.properties=t,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},this.overridableProperties=[],t){var r=t[e];r.specification.overridable&&this.overridableProperties.push(e);var n=this.defaultPropertyValues[e]=new ui(r,void 0),i=this.defaultTransitionablePropertyValues[e]=new li(r);this.defaultTransitioningPropertyValues[e]=i.untransitioned(),this.defaultPossiblyEvaluatedValues[e]=n.possiblyEvaluate({});}};On(\"DataDrivenProperty\",vi),On(\"DataConstantProperty\",mi),On(\"CrossFadedDataDrivenProperty\",gi),On(\"CrossFadedProperty\",xi),On(\"ColorRampProperty\",bi);var _i=function(t){function e(e,r){if(t.call(this),this.id=e.id,this.type=e.type,this._featureFilter={filter:function(){return !0},needGeometry:!1},\"custom\"!==e.type&&(this.metadata=(e=e).metadata,this.minzoom=e.minzoom,this.maxzoom=e.maxzoom,\"background\"!==e.type&&(this.source=e.source,this.sourceLayer=e[\"source-layer\"],this.filter=e.filter),r.layout&&(this._unevaluatedLayout=new fi(r.layout)),r.paint)){for(var n in this._transitionablePaint=new pi(r.paint),e.paint)this.setPaintProperty(n,e.paint[n],{validate:!1});for(var i in e.layout)this.setLayoutProperty(i,e.layout[i],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned(),this.paint=new di(r.paint);}}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getCrossfadeParameters=function(){return this._crossfadeParameters},e.prototype.getLayoutProperty=function(t){return \"visibility\"===t?this.visibility:this._unevaluatedLayout.getValue(t)},e.prototype.setLayoutProperty=function(t,e,r){void 0===r&&(r={}),null!=e&&this._validate(Mn,\"layers.\"+this.id+\".layout.\"+t,t,e,r)||(\"visibility\"!==t?this._unevaluatedLayout.setValue(t,e):this.visibility=e);},e.prototype.getPaintProperty=function(t){return g(t,\"-transition\")?this._transitionablePaint.getTransition(t.slice(0,-\"-transition\".length)):this._transitionablePaint.getValue(t)},e.prototype.setPaintProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e&&this._validate(Pn,\"layers.\"+this.id+\".paint.\"+t,t,e,r))return !1;if(g(t,\"-transition\"))return this._transitionablePaint.setTransition(t.slice(0,-\"-transition\".length),e||void 0),!1;var n=this._transitionablePaint._values[t],i=\"cross-faded-data-driven\"===n.property.specification[\"property-type\"],a=n.value.isDataDriven(),o=n.value;this._transitionablePaint.setValue(t,e),this._handleSpecialPaintPropertyUpdate(t);var s=this._transitionablePaint._values[t].value;return s.isDataDriven()||a||i||this._handleOverridablePaintPropertyUpdate(t,o,s)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){},e.prototype._handleOverridablePaintPropertyUpdate=function(t,e,r){return !1},e.prototype.isHidden=function(t){return !!(this.minzoom&&t=this.maxzoom)||\"none\"===this.visibility},e.prototype.updateTransitions=function(t){this._transitioningPaint=this._transitionablePaint.transitioned(t,this._transitioningPaint);},e.prototype.hasTransition=function(){return this._transitioningPaint.hasTransition()},e.prototype.recalculate=function(t,e){t.getCrossfadeParameters&&(this._crossfadeParameters=t.getCrossfadeParameters()),this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(t,void 0,e)),this.paint=this._transitioningPaint.possiblyEvaluate(t,void 0,e);},e.prototype.serialize=function(){var t={id:this.id,type:this.type,source:this.source,\"source-layer\":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:this._unevaluatedLayout&&this._unevaluatedLayout.serialize(),paint:this._transitionablePaint&&this._transitionablePaint.serialize()};return this.visibility&&(t.layout=t.layout||{},t.layout.visibility=this.visibility),b(t,(function(t,e){return !(void 0===t||\"layout\"===e&&!Object.keys(t).length||\"paint\"===e&&!Object.keys(t).length)}))},e.prototype._validate=function(t,e,r,n,i){return void 0===i&&(i={}),(!i||!1!==i.validate)&&Bn(this,t.call(Cn,{key:e,layerType:this.type,objectKey:r,value:n,styleSpec:Et,style:{glyphs:!0,sprite:!0}}))},e.prototype.is3D=function(){return !1},e.prototype.isTileClipped=function(){return !1},e.prototype.hasOffscreenPass=function(){return !1},e.prototype.resize=function(){},e.prototype.isStateDependent=function(){for(var t in this.paint._values){var e=this.paint.get(t);if(e instanceof yi&&Tr(e.property.specification)&&(\"source\"===e.value.kind||\"composite\"===e.value.kind)&&e.value.isStateDependent)return !0}return !1},e}(Ct),Ai={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},Si=function(t,e){this._structArray=t,this._pos1=e*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8;},ki=function(){this.isTransferred=!1,this.capacity=-1,this.resize(0);};function Ii(t,e){void 0===e&&(e=1);var r=0,n=0;return {members:t.map((function(t){var i=Ai[t.type].BYTES_PER_ELEMENT,a=r=zi(r,Math.max(e,i)),o=t.components||1;return n=Math.max(n,i),r+=i*o,{name:t.name,type:t.type,components:o,offset:a}})),size:zi(r,Math.max(n,e)),alignment:e}}function zi(t,e){return Math.ceil(t/e)*e}ki.serialize=function(t,e){return t._trim(),e&&(t.isTransferred=!0,e.push(t.arrayBuffer)),{length:t.length,arrayBuffer:t.arrayBuffer}},ki.deserialize=function(t){var e=Object.create(this.prototype);return e.arrayBuffer=t.arrayBuffer,e.length=t.length,e.capacity=t.arrayBuffer.byteLength/e.bytesPerElement,e._refreshViews(),e},ki.prototype._trim=function(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews());},ki.prototype.clear=function(){this.length=0;},ki.prototype.resize=function(t){this.reserve(t),this.length=t;},ki.prototype.reserve=function(t){if(t>this.capacity){this.capacity=Math.max(t,Math.floor(5*this.capacity),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);var e=this.uint8;this._refreshViews(),e&&this.uint8.set(e);}},ki.prototype._refreshViews=function(){throw new Error(\"_refreshViews() must be implemented by each concrete StructArray layout\")};var Ci=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.int16[n+0]=e,this.int16[n+1]=r,t},e}(ki);Ci.prototype.bytesPerElement=4,On(\"StructArrayLayout2i4\",Ci);var Ei=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=4*t;return this.int16[a+0]=e,this.int16[a+1]=r,this.int16[a+2]=n,this.int16[a+3]=i,t},e}(ki);Ei.prototype.bytesPerElement=8,On(\"StructArrayLayout4i8\",Ei);var Pi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,t},e}(ki);Pi.prototype.bytesPerElement=12,On(\"StructArrayLayout2i4i12\",Pi);var Mi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=4*t,u=8*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.uint8[u+4]=n,this.uint8[u+5]=i,this.uint8[u+6]=a,this.uint8[u+7]=o,t},e}(ki);Mi.prototype.bytesPerElement=8,On(\"StructArrayLayout2i4ub8\",Mi);var Bi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.float32[n+0]=e,this.float32[n+1]=r,t},e}(ki);Bi.prototype.bytesPerElement=8,On(\"StructArrayLayout2f8\",Bi);var Ti=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,u,l){var p=this.length;return this.resize(p+1),this.emplace(p,t,e,r,n,i,a,o,s,u,l)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,u,l,p){var c=10*t;return this.uint16[c+0]=e,this.uint16[c+1]=r,this.uint16[c+2]=n,this.uint16[c+3]=i,this.uint16[c+4]=a,this.uint16[c+5]=o,this.uint16[c+6]=s,this.uint16[c+7]=u,this.uint16[c+8]=l,this.uint16[c+9]=p,t},e}(ki);Ti.prototype.bytesPerElement=20,On(\"StructArrayLayout10ui20\",Ti);var Vi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,u,l,p,c){var h=this.length;return this.resize(h+1),this.emplace(h,t,e,r,n,i,a,o,s,u,l,p,c)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,u,l,p,c,h){var f=12*t;return this.int16[f+0]=e,this.int16[f+1]=r,this.int16[f+2]=n,this.int16[f+3]=i,this.uint16[f+4]=a,this.uint16[f+5]=o,this.uint16[f+6]=s,this.uint16[f+7]=u,this.int16[f+8]=l,this.int16[f+9]=p,this.int16[f+10]=c,this.int16[f+11]=h,t},e}(ki);Vi.prototype.bytesPerElement=24,On(\"StructArrayLayout4i4ui4i24\",Vi);var Fi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.float32[i+0]=e,this.float32[i+1]=r,this.float32[i+2]=n,t},e}(ki);Fi.prototype.bytesPerElement=12,On(\"StructArrayLayout3f12\",Fi);var Di=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){return this.uint32[1*t+0]=e,t},e}(ki);Di.prototype.bytesPerElement=4,On(\"StructArrayLayout1ul4\",Di);var Li=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,u){var l=this.length;return this.resize(l+1),this.emplace(l,t,e,r,n,i,a,o,s,u)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,u,l){var p=10*t,c=5*t;return this.int16[p+0]=e,this.int16[p+1]=r,this.int16[p+2]=n,this.int16[p+3]=i,this.int16[p+4]=a,this.int16[p+5]=o,this.uint32[c+3]=s,this.uint16[p+8]=u,this.uint16[p+9]=l,t},e}(ki);Li.prototype.bytesPerElement=20,On(\"StructArrayLayout6i1ul2ui20\",Li);var Oi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,t},e}(ki);Oi.prototype.bytesPerElement=12,On(\"StructArrayLayout2i2i2i12\",Oi);var Ri=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,r,n,i)},e.prototype.emplace=function(t,e,r,n,i,a){var o=4*t,s=8*t;return this.float32[o+0]=e,this.float32[o+1]=r,this.float32[o+2]=n,this.int16[s+6]=i,this.int16[s+7]=a,t},e}(ki);Ri.prototype.bytesPerElement=16,On(\"StructArrayLayout2f1f2i16\",Ri);var Ui=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=12*t,o=3*t;return this.uint8[a+0]=e,this.uint8[a+1]=r,this.float32[o+1]=n,this.float32[o+2]=i,t},e}(ki);Ui.prototype.bytesPerElement=12,On(\"StructArrayLayout2ub2f12\",Ui);var ji=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.uint16[i+0]=e,this.uint16[i+1]=r,this.uint16[i+2]=n,t},e}(ki);ji.prototype.bytesPerElement=6,On(\"StructArrayLayout3ui6\",ji);var qi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m){var v=this.length;return this.resize(v+1),this.emplace(v,t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m,v){var g=24*t,x=12*t,b=48*t;return this.int16[g+0]=e,this.int16[g+1]=r,this.uint16[g+2]=n,this.uint16[g+3]=i,this.uint32[x+2]=a,this.uint32[x+3]=o,this.uint32[x+4]=s,this.uint16[g+10]=u,this.uint16[g+11]=l,this.uint16[g+12]=p,this.float32[x+7]=c,this.float32[x+8]=h,this.uint8[b+36]=f,this.uint8[b+37]=y,this.uint8[b+38]=d,this.uint32[x+10]=m,this.int16[g+22]=v,t},e}(ki);qi.prototype.bytesPerElement=48,On(\"StructArrayLayout2i2ui3ul3ui2f3ub1ul1i48\",qi);var Ni=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m,v,g,x,b,w,_,A,S,k,I,z){var C=this.length;return this.resize(C+1),this.emplace(C,t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m,v,g,x,b,w,_,A,S,k,I,z)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m,v,g,x,b,w,_,A,S,k,I,z,C){var E=34*t,P=17*t;return this.int16[E+0]=e,this.int16[E+1]=r,this.int16[E+2]=n,this.int16[E+3]=i,this.int16[E+4]=a,this.int16[E+5]=o,this.int16[E+6]=s,this.int16[E+7]=u,this.uint16[E+8]=l,this.uint16[E+9]=p,this.uint16[E+10]=c,this.uint16[E+11]=h,this.uint16[E+12]=f,this.uint16[E+13]=y,this.uint16[E+14]=d,this.uint16[E+15]=m,this.uint16[E+16]=v,this.uint16[E+17]=g,this.uint16[E+18]=x,this.uint16[E+19]=b,this.uint16[E+20]=w,this.uint16[E+21]=_,this.uint16[E+22]=A,this.uint32[P+12]=S,this.float32[P+13]=k,this.float32[P+14]=I,this.float32[P+15]=z,this.float32[P+16]=C,t},e}(ki);Ni.prototype.bytesPerElement=68,On(\"StructArrayLayout8i15ui1ul4f68\",Ni);var Ki=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){return this.float32[1*t+0]=e,t},e}(ki);Ki.prototype.bytesPerElement=4,On(\"StructArrayLayout1f4\",Ki);var Gi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.int16[i+0]=e,this.int16[i+1]=r,this.int16[i+2]=n,t},e}(ki);Gi.prototype.bytesPerElement=6,On(\"StructArrayLayout3i6\",Gi);var Zi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=4*t;return this.uint32[2*t+0]=e,this.uint16[i+2]=r,this.uint16[i+3]=n,t},e}(ki);Zi.prototype.bytesPerElement=8,On(\"StructArrayLayout1ul2ui8\",Zi);var Xi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.uint16[n+0]=e,this.uint16[n+1]=r,t},e}(ki);Xi.prototype.bytesPerElement=4,On(\"StructArrayLayout2ui4\",Xi);var Ji=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){return this.uint16[1*t+0]=e,t},e}(ki);Ji.prototype.bytesPerElement=2,On(\"StructArrayLayout1ui2\",Ji);var Hi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer);},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=4*t;return this.float32[a+0]=e,this.float32[a+1]=r,this.float32[a+2]=n,this.float32[a+3]=i,t},e}(ki);Hi.prototype.bytesPerElement=16,On(\"StructArrayLayout4f16\",Hi);var Yi=function(t){function e(){t.apply(this,arguments);}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var r={anchorPointX:{configurable:!0},anchorPointY:{configurable:!0},x1:{configurable:!0},y1:{configurable:!0},x2:{configurable:!0},y2:{configurable:!0},featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0},anchorPoint:{configurable:!0}};return r.anchorPointX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorPointY.get=function(){return this._structArray.int16[this._pos2+1]},r.x1.get=function(){return this._structArray.int16[this._pos2+2]},r.y1.get=function(){return this._structArray.int16[this._pos2+3]},r.x2.get=function(){return this._structArray.int16[this._pos2+4]},r.y2.get=function(){return this._structArray.int16[this._pos2+5]},r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+8]},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.anchorPoint.get=function(){return new i(this.anchorPointX,this.anchorPointY)},Object.defineProperties(e.prototype,r),e}(Si);Yi.prototype.size=20;var $i=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.get=function(t){return new Yi(this,t)},e}(Li);On(\"CollisionBoxArray\",$i);var Wi=function(t){function e(){t.apply(this,arguments);}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},glyphStartIndex:{configurable:!0},numGlyphs:{configurable:!0},vertexStartIndex:{configurable:!0},lineStartIndex:{configurable:!0},lineLength:{configurable:!0},segment:{configurable:!0},lowerSize:{configurable:!0},upperSize:{configurable:!0},lineOffsetX:{configurable:!0},lineOffsetY:{configurable:!0},writingMode:{configurable:!0},placedOrientation:{configurable:!0},hidden:{configurable:!0},crossTileID:{configurable:!0},associatedIconIndex:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.glyphStartIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.numGlyphs.get=function(){return this._structArray.uint16[this._pos2+3]},r.vertexStartIndex.get=function(){return this._structArray.uint32[this._pos4+2]},r.lineStartIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.lineLength.get=function(){return this._structArray.uint32[this._pos4+4]},r.segment.get=function(){return this._structArray.uint16[this._pos2+10]},r.lowerSize.get=function(){return this._structArray.uint16[this._pos2+11]},r.upperSize.get=function(){return this._structArray.uint16[this._pos2+12]},r.lineOffsetX.get=function(){return this._structArray.float32[this._pos4+7]},r.lineOffsetY.get=function(){return this._structArray.float32[this._pos4+8]},r.writingMode.get=function(){return this._structArray.uint8[this._pos1+36]},r.placedOrientation.get=function(){return this._structArray.uint8[this._pos1+37]},r.placedOrientation.set=function(t){this._structArray.uint8[this._pos1+37]=t;},r.hidden.get=function(){return this._structArray.uint8[this._pos1+38]},r.hidden.set=function(t){this._structArray.uint8[this._pos1+38]=t;},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+10]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+10]=t;},r.associatedIconIndex.get=function(){return this._structArray.int16[this._pos2+22]},Object.defineProperties(e.prototype,r),e}(Si);Wi.prototype.size=48;var Qi=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.get=function(t){return new Wi(this,t)},e}(qi);On(\"PlacedSymbolArray\",Qi);var ta=function(t){function e(){t.apply(this,arguments);}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},rightJustifiedTextSymbolIndex:{configurable:!0},centerJustifiedTextSymbolIndex:{configurable:!0},leftJustifiedTextSymbolIndex:{configurable:!0},verticalPlacedTextSymbolIndex:{configurable:!0},placedIconSymbolIndex:{configurable:!0},verticalPlacedIconSymbolIndex:{configurable:!0},key:{configurable:!0},textBoxStartIndex:{configurable:!0},textBoxEndIndex:{configurable:!0},verticalTextBoxStartIndex:{configurable:!0},verticalTextBoxEndIndex:{configurable:!0},iconBoxStartIndex:{configurable:!0},iconBoxEndIndex:{configurable:!0},verticalIconBoxStartIndex:{configurable:!0},verticalIconBoxEndIndex:{configurable:!0},featureIndex:{configurable:!0},numHorizontalGlyphVertices:{configurable:!0},numVerticalGlyphVertices:{configurable:!0},numIconVertices:{configurable:!0},numVerticalIconVertices:{configurable:!0},useRuntimeCollisionCircles:{configurable:!0},crossTileID:{configurable:!0},textBoxScale:{configurable:!0},textOffset0:{configurable:!0},textOffset1:{configurable:!0},collisionCircleDiameter:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.rightJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+2]},r.centerJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+3]},r.leftJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+4]},r.verticalPlacedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+5]},r.placedIconSymbolIndex.get=function(){return this._structArray.int16[this._pos2+6]},r.verticalPlacedIconSymbolIndex.get=function(){return this._structArray.int16[this._pos2+7]},r.key.get=function(){return this._structArray.uint16[this._pos2+8]},r.textBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.textBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+10]},r.verticalTextBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+11]},r.verticalTextBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+12]},r.iconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+13]},r.iconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+14]},r.verticalIconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+15]},r.verticalIconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+16]},r.featureIndex.get=function(){return this._structArray.uint16[this._pos2+17]},r.numHorizontalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+18]},r.numVerticalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+19]},r.numIconVertices.get=function(){return this._structArray.uint16[this._pos2+20]},r.numVerticalIconVertices.get=function(){return this._structArray.uint16[this._pos2+21]},r.useRuntimeCollisionCircles.get=function(){return this._structArray.uint16[this._pos2+22]},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+12]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+12]=t;},r.textBoxScale.get=function(){return this._structArray.float32[this._pos4+13]},r.textOffset0.get=function(){return this._structArray.float32[this._pos4+14]},r.textOffset1.get=function(){return this._structArray.float32[this._pos4+15]},r.collisionCircleDiameter.get=function(){return this._structArray.float32[this._pos4+16]},Object.defineProperties(e.prototype,r),e}(Si);ta.prototype.size=68;var ea=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.get=function(t){return new ta(this,t)},e}(Ni);On(\"SymbolInstanceArray\",ea);var ra=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getoffsetX=function(t){return this.float32[1*t+0]},e}(Ki);On(\"GlyphOffsetArray\",ra);var na=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.getx=function(t){return this.int16[3*t+0]},e.prototype.gety=function(t){return this.int16[3*t+1]},e.prototype.gettileUnitDistanceFromAnchor=function(t){return this.int16[3*t+2]},e}(Gi);On(\"SymbolLineVertexArray\",na);var ia=function(t){function e(){t.apply(this,arguments);}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var r={featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0}};return r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+0]},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+3]},Object.defineProperties(e.prototype,r),e}(Si);ia.prototype.size=8;var aa=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.get=function(t){return new ia(this,t)},e}(Zi);On(\"FeatureIndexArray\",aa);var oa=Ii([{name:\"a_pos\",components:2,type:\"Int16\"}],4).members,sa=function(t){void 0===t&&(t=[]),this.segments=t;};function ua(t,e){return 256*(t=p(Math.floor(t),0,255))+p(Math.floor(e),0,255)}sa.prototype.prepareSegment=function(t,e,r,n){var i=this.segments[this.segments.length-1];return t>sa.MAX_VERTEX_ARRAY_LENGTH&&A(\"Max vertices per segment is \"+sa.MAX_VERTEX_ARRAY_LENGTH+\": bucket requested \"+t),(!i||i.vertexLength+t>sa.MAX_VERTEX_ARRAY_LENGTH||i.sortKey!==n)&&(i={vertexOffset:e.length,primitiveOffset:r.length,vertexLength:0,primitiveLength:0},void 0!==n&&(i.sortKey=n),this.segments.push(i)),i},sa.prototype.get=function(){return this.segments},sa.prototype.destroy=function(){for(var t=0,e=this.segments;t>>16)*o&65535)<<16)&4294967295)<<15|u>>>17))*s+(((u>>>16)*s&65535)<<16)&4294967295)<<13|i>>>19))+((5*(i>>>16)&65535)<<16)&4294967295))+((58964+(a>>>16)&65535)<<16);switch(u=0,r){case 3:u^=(255&t.charCodeAt(l+2))<<16;case 2:u^=(255&t.charCodeAt(l+1))<<8;case 1:i^=u=(65535&(u=(u=(65535&(u^=255&t.charCodeAt(l)))*o+(((u>>>16)*o&65535)<<16)&4294967295)<<15|u>>>17))*s+(((u>>>16)*s&65535)<<16)&4294967295;}return i^=t.length,i=2246822507*(65535&(i^=i>>>16))+((2246822507*(i>>>16)&65535)<<16)&4294967295,i=3266489909*(65535&(i^=i>>>13))+((3266489909*(i>>>16)&65535)<<16)&4294967295,(i^=i>>>16)>>>0};})),ca=e((function(t){t.exports=function(t,e){for(var r,n=t.length,i=e^n,a=0;n>=4;)r=1540483477*(65535&(r=255&t.charCodeAt(a)|(255&t.charCodeAt(++a))<<8|(255&t.charCodeAt(++a))<<16|(255&t.charCodeAt(++a))<<24))+((1540483477*(r>>>16)&65535)<<16),i=1540483477*(65535&i)+((1540483477*(i>>>16)&65535)<<16)^(r=1540483477*(65535&(r^=r>>>24))+((1540483477*(r>>>16)&65535)<<16)),n-=4,++a;switch(n){case 3:i^=(255&t.charCodeAt(a+2))<<16;case 2:i^=(255&t.charCodeAt(a+1))<<8;case 1:i=1540483477*(65535&(i^=255&t.charCodeAt(a)))+((1540483477*(i>>>16)&65535)<<16);}return i=1540483477*(65535&(i^=i>>>13))+((1540483477*(i>>>16)&65535)<<16),(i^=i>>>15)>>>0};})),ha=pa,fa=ca;ha.murmur3=pa,ha.murmur2=fa;var ya=function(){this.ids=[],this.positions=[],this.indexed=!1;};ya.prototype.add=function(t,e,r,n){this.ids.push(ma(t)),this.positions.push(e,r,n);},ya.prototype.getPositions=function(t){for(var e=ma(t),r=0,n=this.ids.length-1;r>1;this.ids[i]>=e?n=i:r=i+1;}for(var a=[];this.ids[r]===e;)a.push({index:this.positions[3*r],start:this.positions[3*r+1],end:this.positions[3*r+2]}),r++;return a},ya.serialize=function(t,e){var r=new Float64Array(t.ids),n=new Uint32Array(t.positions);return function t(e,r,n,i){for(;n>1],o=n-1,s=i+1;;){do{o++;}while(e[o]a);if(o>=s)break;va(e,o,s),va(r,3*o,3*s),va(r,3*o+1,3*s+1),va(r,3*o+2,3*s+2);}s-no.x+1||uo.y+1)&&A(\"Geometry exceeds allowed extent, reduce your vector tile buffer size\");}return r}function Ua(t,e){return {type:t.type,id:t.id,properties:t.properties,geometry:e?Ra(t):[]}}function ja(t,e,r,n,i){t.emplaceBack(2*e+(n+1)/2,2*r+(i+1)/2);}var qa=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new Ci,this.indexArray=new ji,this.segments=new sa,this.programConfigurations=new Va(t.layers,t.zoom),this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}));};function Na(t,e){for(var r=0;r1){if(Xa(t,e))return !0;for(var n=0;n1?r:r.sub(e)._mult(i)._add(e))}function $a(t,e){for(var r,n,i,a=!1,o=0;oe.y!=(i=r[u]).y>e.y&&e.x<(i.x-n.x)*(e.y-n.y)/(i.y-n.y)+n.x&&(a=!a);return a}function Wa(t,e){for(var r=!1,n=0,i=t.length-1;ne.y!=o.y>e.y&&e.x<(o.x-a.x)*(e.y-a.y)/(o.y-a.y)+a.x&&(r=!r);}return r}function Qa(t,e,r){var n=r[0],i=r[2];if(t.xi.x&&e.x>i.x||t.yi.y&&e.y>i.y)return !1;var a=S(t,e,r[0]);return a!==S(t,e,r[1])||a!==S(t,e,r[2])||a!==S(t,e,r[3])}function to(t,e,r){var n=e.paint.get(t).value;return \"constant\"===n.kind?n.value:r.programConfigurations.get(e.id).getMaxValue(t)}function eo(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function ro(t,e,r,n,a){if(!e[0]&&!e[1])return t;var o=i.convert(e)._mult(a);\"viewport\"===r&&o._rotate(-n);for(var s=[],u=0;u=8192||p<0||p>=8192)){var c=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray,t.sortKey),h=c.vertexLength;ja(this.layoutVertexArray,l,p,-1,-1),ja(this.layoutVertexArray,l,p,1,-1),ja(this.layoutVertexArray,l,p,1,1),ja(this.layoutVertexArray,l,p,-1,1),this.indexArray.emplaceBack(h,h+1,h+2),this.indexArray.emplaceBack(h,h+3,h+2),c.vertexLength+=4,c.primitiveLength+=2;}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{},n);},On(\"CircleBucket\",qa,{omit:[\"layers\"]});var no=new wi({\"circle-sort-key\":new vi(Et.layout_circle[\"circle-sort-key\"])}),io={paint:new wi({\"circle-radius\":new vi(Et.paint_circle[\"circle-radius\"]),\"circle-color\":new vi(Et.paint_circle[\"circle-color\"]),\"circle-blur\":new vi(Et.paint_circle[\"circle-blur\"]),\"circle-opacity\":new vi(Et.paint_circle[\"circle-opacity\"]),\"circle-translate\":new mi(Et.paint_circle[\"circle-translate\"]),\"circle-translate-anchor\":new mi(Et.paint_circle[\"circle-translate-anchor\"]),\"circle-pitch-scale\":new mi(Et.paint_circle[\"circle-pitch-scale\"]),\"circle-pitch-alignment\":new mi(Et.paint_circle[\"circle-pitch-alignment\"]),\"circle-stroke-width\":new vi(Et.paint_circle[\"circle-stroke-width\"]),\"circle-stroke-color\":new vi(Et.paint_circle[\"circle-stroke-color\"]),\"circle-stroke-opacity\":new vi(Et.paint_circle[\"circle-stroke-opacity\"])}),layout:no},ao=\"undefined\"!=typeof Float32Array?Float32Array:Array;function oo(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function so(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],u=e[5],l=e[6],p=e[7],c=e[8],h=e[9],f=e[10],y=e[11],d=e[12],m=e[13],v=e[14],g=e[15],x=r[0],b=r[1],w=r[2],_=r[3];return t[0]=x*n+b*s+w*c+_*d,t[1]=x*i+b*u+w*h+_*m,t[2]=x*a+b*l+w*f+_*v,t[3]=x*o+b*p+w*y+_*g,t[4]=(x=r[4])*n+(b=r[5])*s+(w=r[6])*c+(_=r[7])*d,t[5]=x*i+b*u+w*h+_*m,t[6]=x*a+b*l+w*f+_*v,t[7]=x*o+b*p+w*y+_*g,t[8]=(x=r[8])*n+(b=r[9])*s+(w=r[10])*c+(_=r[11])*d,t[9]=x*i+b*u+w*h+_*m,t[10]=x*a+b*l+w*f+_*v,t[11]=x*o+b*p+w*y+_*g,t[12]=(x=r[12])*n+(b=r[13])*s+(w=r[14])*c+(_=r[15])*d,t[13]=x*i+b*u+w*h+_*m,t[14]=x*a+b*l+w*f+_*v,t[15]=x*o+b*p+w*y+_*g,t}Math.hypot||(Math.hypot=function(){for(var t=arguments,e=0,r=arguments.length;r--;)e+=t[r]*t[r];return Math.sqrt(e)});var uo,lo=so;function po(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t}uo=new ao(3),ao!=Float32Array&&(uo[0]=0,uo[1]=0,uo[2]=0),function(){var t=new ao(4);ao!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0);}();var co=(function(){var t=new ao(2);ao!=Float32Array&&(t[0]=0,t[1]=0);}(),function(t){function e(e){t.call(this,e,io);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.createBucket=function(t){return new qa(t)},e.prototype.queryRadius=function(t){var e=t;return to(\"circle-radius\",this,e)+to(\"circle-stroke-width\",this,e)+eo(this.paint.get(\"circle-translate\"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,a,o,s){for(var u=ro(t,this.paint.get(\"circle-translate\"),this.paint.get(\"circle-translate-anchor\"),a.angle,o),l=this.paint.get(\"circle-radius\").evaluate(e,r)+this.paint.get(\"circle-stroke-width\").evaluate(e,r),p=\"map\"===this.paint.get(\"circle-pitch-alignment\"),c=p?u:function(t,e){return t.map((function(t){return ho(t,e)}))}(u,s),h=p?l*o:l,f=0,y=n;ft.width||i.height>t.height||r.x>t.width-i.width||r.y>t.height-i.height)throw new RangeError(\"out of range source coordinates for image copy\");if(i.width>e.width||i.height>e.height||n.x>e.width-i.width||n.y>e.height-i.height)throw new RangeError(\"out of range destination coordinates for image copy\");for(var o=t.data,s=e.data,u=0;u80*r){n=a=t[0],i=o=t[1];for(var y=r;ya&&(a=s),u>o&&(o=u);l=0!==(l=Math.max(a-n,o-i))?1/l:0;}return Mo(h,f,r,n,i,l),f}function Eo(t,e,r,n,i){var a,o;if(i===Qo(t,e,r,n)>0)for(a=e;a=e;a-=n)o=Yo(a,t[a],t[a+1],o);return o&&Ko(o,o.next)&&($o(o),o=o.next),o}function Po(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!Ko(n,n.next)&&0!==No(n.prev,n,n.next))n=n.next;else {if($o(n),(n=e=n.prev)===n.next)break;r=!0;}}while(r||n!==e);return e}function Mo(t,e,r,n,i,a,o){if(t){!o&&a&&function(t,e,r,n){var i=t;do{null===i.z&&(i.z=Ro(i.x,i.y,e,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next;}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,r,n,i,a,o,s,u,l=1;do{for(r=t,t=null,a=null,o=0;r;){for(o++,n=r,s=0,e=0;e0||u>0&&n;)0!==s&&(0===u||!n||r.z<=n.z)?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,u--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;r=n;}a.nextZ=null,l*=2;}while(o>1)}(i);}(t,n,i,a);for(var s,u,l=t;t.prev!==t.next;)if(s=t.prev,u=t.next,a?To(t,n,i,a):Bo(t))e.push(s.i/r),e.push(t.i/r),e.push(u.i/r),$o(t),t=u.next,l=u.next;else if((t=u)===l){o?1===o?Mo(t=Vo(Po(t),e,r),e,r,n,i,a,2):2===o&&Fo(t,e,r,n,i,a):Mo(Po(t),e,r,n,i,a,1);break}}}function Bo(t){var e=t.prev,r=t,n=t.next;if(No(e,r,n)>=0)return !1;for(var i=t.next.next;i!==t.prev;){if(jo(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)&&No(i.prev,i,i.next)>=0)return !1;i=i.next;}return !0}function To(t,e,r,n){var i=t.prev,a=t,o=t.next;if(No(i,a,o)>=0)return !1;for(var s=i.x>a.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,u=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,l=Ro(i.x=l&&h&&h.z<=p;){if(c!==t.prev&&c!==t.next&&jo(i.x,i.y,a.x,a.y,o.x,o.y,c.x,c.y)&&No(c.prev,c,c.next)>=0)return !1;if(c=c.prevZ,h!==t.prev&&h!==t.next&&jo(i.x,i.y,a.x,a.y,o.x,o.y,h.x,h.y)&&No(h.prev,h,h.next)>=0)return !1;h=h.nextZ;}for(;c&&c.z>=l;){if(c!==t.prev&&c!==t.next&&jo(i.x,i.y,a.x,a.y,o.x,o.y,c.x,c.y)&&No(c.prev,c,c.next)>=0)return !1;c=c.prevZ;}for(;h&&h.z<=p;){if(h!==t.prev&&h!==t.next&&jo(i.x,i.y,a.x,a.y,o.x,o.y,h.x,h.y)&&No(h.prev,h,h.next)>=0)return !1;h=h.nextZ;}return !0}function Vo(t,e,r){var n=t;do{var i=n.prev,a=n.next.next;!Ko(i,a)&&Go(i,n,n.next,a)&&Jo(i,a)&&Jo(a,i)&&(e.push(i.i/r),e.push(n.i/r),e.push(a.i/r),$o(n),$o(n.next),n=t=a),n=n.next;}while(n!==t);return Po(n)}function Fo(t,e,r,n,i,a){var o=t;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&qo(o,s)){var u=Ho(o,s);return o=Po(o,o.next),u=Po(u,u.next),Mo(o,e,r,n,i,a),void Mo(u,e,r,n,i,a)}s=s.next;}o=o.next;}while(o!==t)}function Do(t,e){return t.x-e.x}function Lo(t,e){if(e=function(t,e){var r,n=e,i=t.x,a=t.y,o=-1/0;do{if(a<=n.y&&a>=n.next.y&&n.next.y!==n.y){var s=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>o){if(o=s,s===i){if(a===n.y)return n;if(a===n.next.y)return n.next}r=n.x=n.x&&n.x>=p&&i!==n.x&&jo(ar.x||n.x===r.x&&Oo(r,n)))&&(r=n,h=u)),n=n.next;}while(n!==l);return r}(t,e)){var r=Ho(e,t);Po(e,e.next),Po(r,r.next);}}function Oo(t,e){return No(t.prev,t,e.prev)<0&&No(e.next,t,t.next)<0}function Ro(t,e,r,n,i){return (t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Uo(t){var e=t,r=t;do{(e.x=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(a-s)-(i-o)*(n-s)>=0}function qo(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&Go(r,r.next,t,e))return !0;r=r.next;}while(r!==t);return !1}(t,e)&&(Jo(t,e)&&Jo(e,t)&&function(t,e){var r=t,n=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{r.y>a!=r.next.y>a&&r.next.y!==r.y&&i<(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next;}while(r!==t);return n}(t,e)&&(No(t.prev,t,e.prev)||No(t,e.prev,e))||Ko(t,e)&&No(t.prev,t,t.next)>0&&No(e.prev,e,e.next)>0)}function No(t,e,r){return (e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function Ko(t,e){return t.x===e.x&&t.y===e.y}function Go(t,e,r,n){var i=Xo(No(t,e,r)),a=Xo(No(t,e,n)),o=Xo(No(r,n,t)),s=Xo(No(r,n,e));return i!==a&&o!==s||!(0!==i||!Zo(t,r,e))||!(0!==a||!Zo(t,n,e))||!(0!==o||!Zo(r,t,n))||!(0!==s||!Zo(r,e,n))}function Zo(t,e,r){return e.x<=Math.max(t.x,r.x)&&e.x>=Math.min(t.x,r.x)&&e.y<=Math.max(t.y,r.y)&&e.y>=Math.min(t.y,r.y)}function Xo(t){return t>0?1:t<0?-1:0}function Jo(t,e){return No(t.prev,t,t.next)<0?No(t,e,t.next)>=0&&No(t,t.prev,e)>=0:No(t,e,t.prev)<0||No(t,t.next,e)<0}function Ho(t,e){var r=new Wo(t.i,t.x,t.y),n=new Wo(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,r.next=i,i.prev=r,n.next=r,r.prev=n,a.next=n,n.prev=a,n}function Yo(t,e,r,n){var i=new Wo(t,e,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function $o(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ);}function Wo(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1;}function Qo(t,e,r,n){for(var i=0,a=e,o=r-n;an;){if(i-n>600){var o=i-n+1,s=r-n+1,u=Math.log(o),l=.5*Math.exp(2*u/3),p=.5*Math.sqrt(u*l*(o-l)/o)*(s-o/2<0?-1:1);t(e,r,Math.max(n,Math.floor(r-s*l/o+p)),Math.min(i,Math.floor(r+(o-s)*l/o+p)),a);}var c=e[r],h=n,f=i;for(es(e,n,r),a(e[i],c)>0&&es(e,n,i);h0;)f--;}0===a(e[n],c)?es(e,n,f):es(e,++f,i),f<=r&&(n=f+1),r<=f&&(i=f-1);}}(t,e,r||0,n||t.length-1,i||rs);}function es(t,e,r){var n=t[e];t[e]=t[r],t[r]=n;}function rs(t,e){return te?1:0}function ns(t,e){var r=t.length;if(r<=1)return [t];for(var n,i,a=[],o=0;o1)for(var u=0;u0&&r.holes.push(n+=t[i-1].length);}return r},Io.default=zo;var ss=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.layoutVertexArray=new Ci,this.indexArray=new ji,this.indexArray2=new Xi,this.programConfigurations=new Va(t.layers,t.zoom),this.segments=new sa,this.segments2=new sa,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}));};ss.prototype.populate=function(t,e,r){this.hasPattern=as(\"fill\",this.layers,e);for(var n=this.layers[0].layout.get(\"fill-sort-key\"),i=[],a=0,o=t;a>3;}if(a--,1===n||2===n)o+=t.readSVarint(),s+=t.readSVarint(),1===n&&(e&&u.push(e),e=[]),e.push(new i(o,s));else {if(7!==n)throw new Error(\"unknown command \"+n);e&&e.push(e[0].clone());}}return e&&u.push(e),u},fs.prototype.bbox=function(){var t=this._pbf;t.pos=this._geometry;for(var e=t.readVarint()+t.pos,r=1,n=0,i=0,a=0,o=1/0,s=-1/0,u=1/0,l=-1/0;t.pos>3;}if(n--,1===r||2===r)(i+=t.readSVarint())s&&(s=i),(a+=t.readSVarint())l&&(l=a);else if(7!==r)throw new Error(\"unknown command \"+r)}return [o,u,s,l]},fs.prototype.toGeoJSON=function(t,e,r){var n,i,a=this.extent*Math.pow(2,r),o=this.extent*t,s=this.extent*e,u=this.loadGeometry(),l=fs.types[this.type];function p(t){for(var e=0;e>3;e=1===n?t.readString():2===n?t.readFloat():3===n?t.readDouble():4===n?t.readVarint64():5===n?t.readVarint():6===n?t.readSVarint():7===n?t.readBoolean():null;}return e}(r));}function xs(t,e,r){if(3===t){var n=new ms(r,r.readVarint()+r.pos);n.length&&(e[n.name]=n);}}vs.prototype.feature=function(t){if(t<0||t>=this._features.length)throw new Error(\"feature index out of bounds\");this._pbf.pos=this._features[t];var e=this._pbf.readVarint()+this._pbf.pos;return new hs(this._pbf,e,this.extent,this._keys,this._values)};var bs={VectorTile:function(t,e){this.layers=t.readFields(xs,{},e);},VectorTileFeature:hs,VectorTileLayer:ms},ws=bs.VectorTileFeature.types,_s=Math.pow(2,13);function As(t,e,r,n,i,a,o,s){t.emplaceBack(e,r,2*Math.floor(n*_s)+o,i*_s*2,a*_s*2,Math.round(s));}var Ss=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map((function(t){return t.id})),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new Pi,this.indexArray=new ji,this.programConfigurations=new Va(t.layers,t.zoom),this.segments=new sa,this.stateDependentLayerIds=this.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}));};function ks(t,e){return t.x===e.x&&(t.x<0||t.x>8192)||t.y===e.y&&(t.y<0||t.y>8192)}Ss.prototype.populate=function(t,e,r){this.features=[],this.hasPattern=as(\"fill-extrusion\",this.layers,e);for(var n=0,i=t;n8192}))||B.every((function(t){return t.y<0}))||B.every((function(t){return t.y>8192}))))for(var d=0,m=0;m=1){var g=y[m-1];if(!ks(v,g)){c.vertexLength+4>sa.MAX_VERTEX_ARRAY_LENGTH&&(c=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));var x=v.sub(g)._perp()._unit(),b=g.dist(v);d+b>32768&&(d=0),As(this.layoutVertexArray,v.x,v.y,x.x,x.y,0,0,d),As(this.layoutVertexArray,v.x,v.y,x.x,x.y,0,1,d),As(this.layoutVertexArray,g.x,g.y,x.x,x.y,0,0,d+=b),As(this.layoutVertexArray,g.x,g.y,x.x,x.y,0,1,d);var w=c.vertexLength;this.indexArray.emplaceBack(w,w+2,w+1),this.indexArray.emplaceBack(w+1,w+2,w+3),c.vertexLength+=4,c.primitiveLength+=2;}}}}if(c.vertexLength+u>sa.MAX_VERTEX_ARRAY_LENGTH&&(c=this.segments.prepareSegment(u,this.layoutVertexArray,this.indexArray)),\"Polygon\"===ws[t.type]){for(var _=[],A=[],S=c.vertexLength,k=0,I=s;k=2&&t[u-1].equals(t[u-2]);)u--;for(var l=0;l0;if(A&&v>l){var k=p.dist(f);if(k>2*c){var I=p.sub(p.sub(f)._mult(c/k)._round());this.updateDistance(f,I),this.addCurrentVertex(I,d,0,0,h),f=I;}}var z=f&&y,C=z?r:s?\"butt\":n;if(z&&\"round\"===C&&(wi&&(C=\"bevel\"),\"bevel\"===C&&(w>2&&(C=\"flipbevel\"),w100)g=m.mult(-1);else {var E=w*d.add(m).mag()/d.sub(m).mag();g._perp()._mult(E*(S?-1:1));}this.addCurrentVertex(p,g,0,0,h),this.addCurrentVertex(p,g.mult(-1),0,0,h);}else if(\"bevel\"===C||\"fakeround\"===C){var P=-Math.sqrt(w*w-1),M=S?P:0,B=S?0:P;if(f&&this.addCurrentVertex(p,d,M,B,h),\"fakeround\"===C)for(var T=Math.round(180*_/Math.PI/20),V=1;V2*c){var U=p.add(y.sub(p)._mult(c/R)._round());this.updateDistance(p,U),this.addCurrentVertex(U,m,0,0,h),p=U;}}}}},Fs.prototype.addCurrentVertex=function(t,e,r,n,i,a){void 0===a&&(a=!1);var o=e.y*n-e.x,s=-e.y-e.x*n;this.addHalfVertex(t,e.x+e.y*r,e.y-e.x*r,a,!1,r,i),this.addHalfVertex(t,o,s,a,!0,-n,i),this.distance>Vs/2&&0===this.totalDistance&&(this.distance=0,this.addCurrentVertex(t,e,r,n,i,a));},Fs.prototype.addHalfVertex=function(t,e,r,n,i,a,o){var s=.5*(this.lineClips?this.scaledDistance*(Vs-1):this.scaledDistance);this.layoutVertexArray.emplaceBack((t.x<<1)+(n?1:0),(t.y<<1)+(i?1:0),Math.round(63*e)+128,Math.round(63*r)+128,1+(0===a?0:a<0?-1:1)|(63&s)<<2,s>>6),this.lineClips&&this.layoutVertexArray2.emplaceBack((this.scaledDistance-this.lineClips.start)/(this.lineClips.end-this.lineClips.start),this.lineClipsArray.length);var u=o.vertexLength++;this.e1>=0&&this.e2>=0&&(this.indexArray.emplaceBack(this.e1,this.e2,u),o.primitiveLength++),i?this.e2=u:this.e1=u;},Fs.prototype.updateScaledDistance=function(){this.scaledDistance=this.lineClips?this.lineClips.start+(this.lineClips.end-this.lineClips.start)*this.distance/this.totalDistance:this.distance;},Fs.prototype.updateDistance=function(t,e){this.distance+=t.dist(e),this.updateScaledDistance();},On(\"LineBucket\",Fs,{omit:[\"layers\",\"patternFeatures\"]});var Ds=new wi({\"line-cap\":new mi(Et.layout_line[\"line-cap\"]),\"line-join\":new vi(Et.layout_line[\"line-join\"]),\"line-miter-limit\":new mi(Et.layout_line[\"line-miter-limit\"]),\"line-round-limit\":new mi(Et.layout_line[\"line-round-limit\"]),\"line-sort-key\":new vi(Et.layout_line[\"line-sort-key\"])}),Ls={paint:new wi({\"line-opacity\":new vi(Et.paint_line[\"line-opacity\"]),\"line-color\":new vi(Et.paint_line[\"line-color\"]),\"line-translate\":new mi(Et.paint_line[\"line-translate\"]),\"line-translate-anchor\":new mi(Et.paint_line[\"line-translate-anchor\"]),\"line-width\":new vi(Et.paint_line[\"line-width\"]),\"line-gap-width\":new vi(Et.paint_line[\"line-gap-width\"]),\"line-offset\":new vi(Et.paint_line[\"line-offset\"]),\"line-blur\":new vi(Et.paint_line[\"line-blur\"]),\"line-dasharray\":new xi(Et.paint_line[\"line-dasharray\"]),\"line-pattern\":new gi(Et.paint_line[\"line-pattern\"]),\"line-gradient\":new bi(Et.paint_line[\"line-gradient\"])}),layout:Ds},Os=new(function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.possiblyEvaluate=function(e,r){return r=new si(Math.floor(r.zoom),{now:r.now,fadeDuration:r.fadeDuration,zoomHistory:r.zoomHistory,transition:r.transition}),t.prototype.possiblyEvaluate.call(this,e,r)},e.prototype.evaluate=function(e,r,n,i){return r=h({},r,{zoom:Math.floor(r.zoom)}),t.prototype.evaluate.call(this,e,r,n,i)},e}(vi))(Ls.paint.properties[\"line-width\"].specification);Os.useIntegerZoom=!0;var Rs=function(t){function e(e){t.call(this,e,Ls),this.gradientVersion=0;}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype._handleSpecialPaintPropertyUpdate=function(t){\"line-gradient\"===t&&(this.stepInterpolant=this._transitionablePaint._values[\"line-gradient\"].value.expression._styleExpression.expression instanceof Ne,this.gradientVersion=(this.gradientVersion+1)%s);},e.prototype.gradientExpression=function(){return this._transitionablePaint._values[\"line-gradient\"].value.expression},e.prototype.recalculate=function(e,r){t.prototype.recalculate.call(this,e,r),this.paint._values[\"line-floorwidth\"]=Os.possiblyEvaluate(this._transitioningPaint._values[\"line-width\"].value,e);},e.prototype.createBucket=function(t){return new Fs(t)},e.prototype.queryRadius=function(t){var e=t,r=Us(to(\"line-width\",this,e),to(\"line-gap-width\",this,e)),n=to(\"line-offset\",this,e);return r/2+Math.abs(n)+eo(this.paint.get(\"line-translate\"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,a,o,s){var u=ro(t,this.paint.get(\"line-translate\"),this.paint.get(\"line-translate-anchor\"),o.angle,s),l=s/2*Us(this.paint.get(\"line-width\").evaluate(e,r),this.paint.get(\"line-gap-width\").evaluate(e,r)),p=this.paint.get(\"line-offset\").evaluate(e,r);return p&&(n=function(t,e){for(var r=[],n=new i(0,0),a=0;a=3)for(var a=0;a0?e+2*t:t}var js=Ii([{name:\"a_pos_offset\",components:4,type:\"Int16\"},{name:\"a_data\",components:4,type:\"Uint16\"},{name:\"a_pixeloffset\",components:4,type:\"Int16\"}],4),qs=Ii([{name:\"a_projected_pos\",components:3,type:\"Float32\"}],4),Ns=(Ii([{name:\"a_fade_opacity\",components:1,type:\"Uint32\"}],4),Ii([{name:\"a_placed\",components:2,type:\"Uint8\"},{name:\"a_shift\",components:2,type:\"Float32\"}])),Ks=(Ii([{type:\"Int16\",name:\"anchorPointX\"},{type:\"Int16\",name:\"anchorPointY\"},{type:\"Int16\",name:\"x1\"},{type:\"Int16\",name:\"y1\"},{type:\"Int16\",name:\"x2\"},{type:\"Int16\",name:\"y2\"},{type:\"Uint32\",name:\"featureIndex\"},{type:\"Uint16\",name:\"sourceLayerIndex\"},{type:\"Uint16\",name:\"bucketIndex\"}]),Ii([{name:\"a_pos\",components:2,type:\"Int16\"},{name:\"a_anchor_pos\",components:2,type:\"Int16\"},{name:\"a_extrude\",components:2,type:\"Int16\"}],4)),Gs=Ii([{name:\"a_pos\",components:2,type:\"Float32\"},{name:\"a_radius\",components:1,type:\"Float32\"},{name:\"a_flags\",components:2,type:\"Int16\"}],4);function Zs(t,e,r){return t.sections.forEach((function(t){t.text=function(t,e,r){var n=e.layout.get(\"text-transform\").evaluate(r,{});return \"uppercase\"===n?t=t.toLocaleUpperCase():\"lowercase\"===n&&(t=t.toLocaleLowerCase()),oi.applyArabicShaping&&(t=oi.applyArabicShaping(t)),t}(t.text,e,r);})),t}Ii([{name:\"triangle\",components:3,type:\"Uint16\"}]),Ii([{type:\"Int16\",name:\"anchorX\"},{type:\"Int16\",name:\"anchorY\"},{type:\"Uint16\",name:\"glyphStartIndex\"},{type:\"Uint16\",name:\"numGlyphs\"},{type:\"Uint32\",name:\"vertexStartIndex\"},{type:\"Uint32\",name:\"lineStartIndex\"},{type:\"Uint32\",name:\"lineLength\"},{type:\"Uint16\",name:\"segment\"},{type:\"Uint16\",name:\"lowerSize\"},{type:\"Uint16\",name:\"upperSize\"},{type:\"Float32\",name:\"lineOffsetX\"},{type:\"Float32\",name:\"lineOffsetY\"},{type:\"Uint8\",name:\"writingMode\"},{type:\"Uint8\",name:\"placedOrientation\"},{type:\"Uint8\",name:\"hidden\"},{type:\"Uint32\",name:\"crossTileID\"},{type:\"Int16\",name:\"associatedIconIndex\"}]),Ii([{type:\"Int16\",name:\"anchorX\"},{type:\"Int16\",name:\"anchorY\"},{type:\"Int16\",name:\"rightJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"centerJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"leftJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"verticalPlacedTextSymbolIndex\"},{type:\"Int16\",name:\"placedIconSymbolIndex\"},{type:\"Int16\",name:\"verticalPlacedIconSymbolIndex\"},{type:\"Uint16\",name:\"key\"},{type:\"Uint16\",name:\"textBoxStartIndex\"},{type:\"Uint16\",name:\"textBoxEndIndex\"},{type:\"Uint16\",name:\"verticalTextBoxStartIndex\"},{type:\"Uint16\",name:\"verticalTextBoxEndIndex\"},{type:\"Uint16\",name:\"iconBoxStartIndex\"},{type:\"Uint16\",name:\"iconBoxEndIndex\"},{type:\"Uint16\",name:\"verticalIconBoxStartIndex\"},{type:\"Uint16\",name:\"verticalIconBoxEndIndex\"},{type:\"Uint16\",name:\"featureIndex\"},{type:\"Uint16\",name:\"numHorizontalGlyphVertices\"},{type:\"Uint16\",name:\"numVerticalGlyphVertices\"},{type:\"Uint16\",name:\"numIconVertices\"},{type:\"Uint16\",name:\"numVerticalIconVertices\"},{type:\"Uint16\",name:\"useRuntimeCollisionCircles\"},{type:\"Uint32\",name:\"crossTileID\"},{type:\"Float32\",name:\"textBoxScale\"},{type:\"Float32\",components:2,name:\"textOffset\"},{type:\"Float32\",name:\"collisionCircleDiameter\"}]),Ii([{type:\"Float32\",name:\"offsetX\"}]),Ii([{type:\"Int16\",name:\"x\"},{type:\"Int16\",name:\"y\"},{type:\"Int16\",name:\"tileUnitDistanceFromAnchor\"}]);var Xs={\"!\":\"︕\",\"#\":\"#\",$:\"$\",\"%\":\"%\",\"&\":\"&\",\"(\":\"︵\",\")\":\"︶\",\"*\":\"*\",\"+\":\"+\",\",\":\"︐\",\"-\":\"︲\",\".\":\"・\",\"/\":\"/\",\":\":\"︓\",\";\":\"︔\",\"<\":\"︿\",\"=\":\"=\",\">\":\"﹀\",\"?\":\"︖\",\"@\":\"@\",\"[\":\"﹇\",\"\\\\\":\"\\",\"]\":\"﹈\",\"^\":\"^\",_:\"︳\",\"`\":\"`\",\"{\":\"︷\",\"|\":\"―\",\"}\":\"︸\",\"~\":\"~\",\"¢\":\"¢\",\"£\":\"£\",\"¥\":\"¥\",\"¦\":\"¦\",\"¬\":\"¬\",\"¯\":\" ̄\",\"–\":\"︲\",\"—\":\"︱\",\"‘\":\"﹃\",\"’\":\"﹄\",\"“\":\"﹁\",\"”\":\"﹂\",\"…\":\"︙\",\"‧\":\"・\",\"₩\":\"₩\",\"、\":\"︑\",\"。\":\"︒\",\"〈\":\"︿\",\"〉\":\"﹀\",\"《\":\"︽\",\"》\":\"︾\",\"「\":\"﹁\",\"」\":\"﹂\",\"『\":\"﹃\",\"』\":\"﹄\",\"【\":\"︻\",\"】\":\"︼\",\"〔\":\"︹\",\"〕\":\"︺\",\"〖\":\"︗\",\"〗\":\"︘\",\"!\":\"︕\",\"(\":\"︵\",\")\":\"︶\",\",\":\"︐\",\"-\":\"︲\",\".\":\"・\",\":\":\"︓\",\";\":\"︔\",\"<\":\"︿\",\">\":\"﹀\",\"?\":\"︖\",\"[\":\"﹇\",\"]\":\"﹈\",\"_\":\"︳\",\"{\":\"︷\",\"|\":\"―\",\"}\":\"︸\",\"⦅\":\"︵\",\"⦆\":\"︶\",\"。\":\"︒\",\"「\":\"﹁\",\"」\":\"﹂\"},Js=function(t,e,r,n,i){var a,o,s=8*i-n-1,u=(1<>1,p=-7,c=r?i-1:0,h=r?-1:1,f=t[e+c];for(c+=h,a=f&(1<<-p)-1,f>>=-p,p+=s;p>0;a=256*a+t[e+c],c+=h,p-=8);for(o=a&(1<<-p)-1,a>>=-p,p+=n;p>0;o=256*o+t[e+c],c+=h,p-=8);if(0===a)a=1-l;else {if(a===u)return o?NaN:1/0*(f?-1:1);o+=Math.pow(2,n),a-=l;}return (f?-1:1)*o*Math.pow(2,a-n)},Hs=function(t,e,r,n,i,a){var o,s,u,l=8*a-i-1,p=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=n?0:a-1,y=n?1:-1,d=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=p):(o=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-o))<1&&(o--,u*=2),(e+=o+c>=1?h/u:h*Math.pow(2,1-c))*u>=2&&(o++,u/=2),o+c>=p?(s=0,o=p):o+c>=1?(s=(e*u-1)*Math.pow(2,i),o+=c):(s=e*Math.pow(2,c-1)*Math.pow(2,i),o=0));i>=8;t[r+f]=255&s,f+=y,s/=256,i-=8);for(o=o<0;t[r+f]=255&o,f+=y,o/=256,l-=8);t[r+f-y]|=128*d;},Ys=$s;function $s(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length;}$s.Varint=0,$s.Fixed64=1,$s.Bytes=2,$s.Fixed32=5;var Ws=\"undefined\"==typeof TextDecoder?null:new TextDecoder(\"utf8\");function Qs(t){return t.type===$s.Bytes?t.readVarint()+t.pos:t.pos+1}function tu(t,e,r){return r?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function eu(t,e,r){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));r.realloc(n);for(var i=r.pos-1;i>=t;i--)r.buf[i+n]=r.buf[i];}function ru(t,e){for(var r=0;r>>8,t[r+2]=e>>>16,t[r+3]=e>>>24;}function fu(t,e){return (t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}function yu(t,e,r){1===t&&r.readMessage(du,e);}function du(t,e,r){if(3===t){var n=r.readMessage(mu,{}),i=n.width,a=n.height,o=n.left,s=n.top,u=n.advance;e.push({id:n.id,bitmap:new go({width:i+6,height:a+6},n.bitmap),metrics:{width:i,height:a,left:o,top:s,advance:u}});}}function mu(t,e,r){1===t?e.id=r.readVarint():2===t?e.bitmap=r.readBytes():3===t?e.width=r.readVarint():4===t?e.height=r.readVarint():5===t?e.left=r.readSVarint():6===t?e.top=r.readSVarint():7===t&&(e.advance=r.readVarint());}function vu(t){for(var e=0,r=0,n=0,i=t;n=0;h--){var f=o[h];if(!(c.w>f.w||c.h>f.h)){if(c.x=f.x,c.y=f.y,u=Math.max(u,c.y+c.h),s=Math.max(s,c.x+c.w),c.w===f.w&&c.h===f.h){var y=o.pop();h>3,a=this.pos;this.type=7&n,t(i,e,this),this.pos===a&&this.skip(n);}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=cu(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=fu(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=cu(this.buf,this.pos)+4294967296*cu(this.buf,this.pos+4);return this.pos+=8,t},readSFixed64:function(){var t=cu(this.buf,this.pos)+4294967296*fu(this.buf,this.pos+4);return this.pos+=8,t},readFloat:function(){var t=Js(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=Js(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,r,n=this.buf;return e=127&(r=n[this.pos++]),r<128?e:(e|=(127&(r=n[this.pos++]))<<7,r<128?e:(e|=(127&(r=n[this.pos++]))<<14,r<128?e:(e|=(127&(r=n[this.pos++]))<<21,r<128?e:function(t,e,r){var n,i,a=r.buf;if(n=(112&(i=a[r.pos++]))>>4,i<128)return tu(t,n,e);if(n|=(127&(i=a[r.pos++]))<<3,i<128)return tu(t,n,e);if(n|=(127&(i=a[r.pos++]))<<10,i<128)return tu(t,n,e);if(n|=(127&(i=a[r.pos++]))<<17,i<128)return tu(t,n,e);if(n|=(127&(i=a[r.pos++]))<<24,i<128)return tu(t,n,e);if(n|=(1&(i=a[r.pos++]))<<31,i<128)return tu(t,n,e);throw new Error(\"Expected varint not more than 10 bytes\")}(e|=(15&(r=n[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=this.pos;return this.pos=t,t-e>=12&&Ws?function(t,e,r){return Ws.decode(t.subarray(e,r))}(this.buf,e,t):function(t,e,r){for(var n=\"\",i=e;i239?4:u>223?3:u>191?2:1;if(i+p>r)break;1===p?u<128&&(l=u):2===p?128==(192&(a=t[i+1]))&&(l=(31&u)<<6|63&a)<=127&&(l=null):3===p?(o=t[i+2],128==(192&(a=t[i+1]))&&128==(192&o)&&((l=(15&u)<<12|(63&a)<<6|63&o)<=2047||l>=55296&&l<=57343)&&(l=null)):4===p&&(o=t[i+2],s=t[i+3],128==(192&(a=t[i+1]))&&128==(192&o)&&128==(192&s)&&((l=(15&u)<<18|(63&a)<<12|(63&o)<<6|63&s)<=65535||l>=1114112)&&(l=null)),null===l?(l=65533,p=1):l>65535&&(l-=65536,n+=String.fromCharCode(l>>>10&1023|55296),l=56320|1023&l),n+=String.fromCharCode(l),i+=p;}return n}(this.buf,e,t)},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==$s.Bytes)return t.push(this.readVarint(e));var r=Qs(this);for(t=t||[];this.pos127;);else if(e===$s.Bytes)this.pos=this.readVarint()+this.pos;else if(e===$s.Fixed32)this.pos+=4;else {if(e!==$s.Fixed64)throw new Error(\"Unimplemented type: \"+e);this.pos+=8;}},writeTag:function(t,e){this.writeVarint(t<<3|e);},realloc:function(t){for(var e=this.length||16;e268435455||t<0?function(t,e){var r,n;if(t>=0?(r=t%4294967296|0,n=t/4294967296|0):(n=~(-t/4294967296),4294967295^(r=~(-t%4294967296))?r=r+1|0:(r=0,n=n+1|0)),t>=0x10000000000000000||t<-0x10000000000000000)throw new Error(\"Given varint doesn't fit into 10 bytes\");e.realloc(10),function(t,e,r){r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,r.buf[r.pos]=127&(t>>>=7);}(r,0,e),function(t,e){var r=(7&t)<<4;e.buf[e.pos++]|=r|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t)))));}(n,e);}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))));},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t);},writeBoolean:function(t){this.writeVarint(Boolean(t));},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,r){for(var n,i,a=0;a55295&&n<57344){if(!i){n>56319||a+1===e.length?(t[r++]=239,t[r++]=191,t[r++]=189):i=n;continue}if(n<56320){t[r++]=239,t[r++]=191,t[r++]=189,i=n;continue}n=i-55296<<10|n-56320|65536,i=null;}else i&&(t[r++]=239,t[r++]=191,t[r++]=189,i=null);n<128?t[r++]=n:(n<2048?t[r++]=n>>6|192:(n<65536?t[r++]=n>>12|224:(t[r++]=n>>18|240,t[r++]=n>>12&63|128),t[r++]=n>>6&63|128),t[r++]=63&n|128);}return r}(this.buf,t,this.pos);var r=this.pos-e;r>=128&&eu(e,r,this),this.pos=e-1,this.writeVarint(r),this.pos+=r;},writeFloat:function(t){this.realloc(4),Hs(this.buf,t,this.pos,!0,23,4),this.pos+=4;},writeDouble:function(t){this.realloc(8),Hs(this.buf,t,this.pos,!0,52,8),this.pos+=8;},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var r=0;r=128&&eu(r,n,this),this.pos=r-1,this.writeVarint(n),this.pos+=n;},writeMessage:function(t,e,r){this.writeTag(t,$s.Bytes),this.writeRawMessage(e,r);},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,ru,e);},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,nu,e);},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,ou,e);},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,iu,e);},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,au,e);},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,su,e);},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,uu,e);},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,lu,e);},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,pu,e);},writeBytesField:function(t,e){this.writeTag(t,$s.Bytes),this.writeBytes(e);},writeFixed32Field:function(t,e){this.writeTag(t,$s.Fixed32),this.writeFixed32(e);},writeSFixed32Field:function(t,e){this.writeTag(t,$s.Fixed32),this.writeSFixed32(e);},writeFixed64Field:function(t,e){this.writeTag(t,$s.Fixed64),this.writeFixed64(e);},writeSFixed64Field:function(t,e){this.writeTag(t,$s.Fixed64),this.writeSFixed64(e);},writeVarintField:function(t,e){this.writeTag(t,$s.Varint),this.writeVarint(e);},writeSVarintField:function(t,e){this.writeTag(t,$s.Varint),this.writeSVarint(e);},writeStringField:function(t,e){this.writeTag(t,$s.Bytes),this.writeString(e);},writeFloatField:function(t,e){this.writeTag(t,$s.Fixed32),this.writeFloat(e);},writeDoubleField:function(t,e){this.writeTag(t,$s.Fixed64),this.writeDouble(e);},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e));}};var gu=function(t,e){var r=e.pixelRatio,n=e.version,i=e.stretchX,a=e.stretchY,o=e.content;this.paddedRect=t,this.pixelRatio=r,this.stretchX=i,this.stretchY=a,this.content=o,this.version=n;},xu={tl:{configurable:!0},br:{configurable:!0},tlbr:{configurable:!0},displaySize:{configurable:!0}};xu.tl.get=function(){return [this.paddedRect.x+1,this.paddedRect.y+1]},xu.br.get=function(){return [this.paddedRect.x+this.paddedRect.w-1,this.paddedRect.y+this.paddedRect.h-1]},xu.tlbr.get=function(){return this.tl.concat(this.br)},xu.displaySize.get=function(){return [(this.paddedRect.w-2)/this.pixelRatio,(this.paddedRect.h-2)/this.pixelRatio]},Object.defineProperties(gu.prototype,xu);var bu=function(t,e){var r={},n={};this.haveRenderCallbacks=[];var i=[];this.addImages(t,r,i),this.addImages(e,n,i);var a=vu(i),o=new xo({width:a.w||1,height:a.h||1});for(var s in t){var u=t[s],l=r[s].paddedRect;xo.copy(u.data,o,{x:0,y:0},{x:l.x+1,y:l.y+1},u.data);}for(var p in e){var c=e[p],h=n[p].paddedRect,f=h.x+1,y=h.y+1,d=c.data.width,m=c.data.height;xo.copy(c.data,o,{x:0,y:0},{x:f,y:y},c.data),xo.copy(c.data,o,{x:0,y:m-1},{x:f,y:y-1},{width:d,height:1}),xo.copy(c.data,o,{x:0,y:0},{x:f,y:y+m},{width:d,height:1}),xo.copy(c.data,o,{x:d-1,y:0},{x:f-1,y:y},{width:1,height:m}),xo.copy(c.data,o,{x:0,y:0},{x:f+d,y:y},{width:1,height:m});}this.image=o,this.iconPositions=r,this.patternPositions=n;};bu.prototype.addImages=function(t,e,r){for(var n in t){var i=t[n],a={x:0,y:0,w:i.data.width+2,h:i.data.height+2};r.push(a),e[n]=new gu(a,i),i.hasRenderCallback&&this.haveRenderCallbacks.push(n);}},bu.prototype.patchUpdatedImages=function(t,e){for(var r in t.dispatchRenderCallbacks(this.haveRenderCallbacks),t.updatedImages)this.patchUpdatedImage(this.iconPositions[r],t.getImage(r),e),this.patchUpdatedImage(this.patternPositions[r],t.getImage(r),e);},bu.prototype.patchUpdatedImage=function(t,e,r){if(t&&e&&t.version!==e.version){t.version=e.version;var n=t.tl;r.update(e.data,void 0,{x:n[0],y:n[1]});}},On(\"ImagePosition\",gu),On(\"ImageAtlas\",bu);var wu={horizontal:1,vertical:2,horizontalOnly:3},_u=function(){this.scale=1,this.fontStack=\"\",this.imageName=null;};_u.forText=function(t,e){var r=new _u;return r.scale=t||1,r.fontStack=e,r},_u.forImage=function(t){var e=new _u;return e.imageName=t,e};var Au=function(){this.text=\"\",this.sectionIndex=[],this.sections=[],this.imageSectionID=null;};function Su(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d){var m,v=Au.fromFeature(t,i);c===wu.vertical&&v.verticalizePunctuation();var g=oi.processBidirectionalText,x=oi.processStyledBidirectionalText;if(g&&1===v.sections.length){m=[];for(var b=0,w=g(v.toString(),Mu(v,l,a,e,n,f,y));b0&&O>k&&(k=O);}else {var R=r[z.fontStack],U=R&&R[E];if(U&&U.rect)B=U.rect,M=U.metrics;else {var j=e[z.fontStack],q=j&&j[E];if(!q)continue;M=q.metrics;}P=24*(w-z.scale);}F?(t.verticalizable=!0,S.push({glyph:E,imageName:T,x:h,y:f+P,vertical:F,scale:z.scale,fontStack:z.fontStack,sectionIndex:C,metrics:M,rect:B}),h+=V*z.scale+l):(S.push({glyph:E,imageName:T,x:h,y:f+P,vertical:F,scale:z.scale,fontStack:z.fontStack,sectionIndex:C,metrics:M,rect:B}),h+=M.advance*z.scale+l);}0!==S.length&&(y=Math.max(h-l,y),Tu(S,0,S.length-1,m,k)),h=0;var N=a*w+k;A.lineOffset=Math.max(k,_),f+=N,d=Math.max(N,d),++v;}else f+=a,++v;}var K,G=f- -17,Z=Bu(o),X=Z.horizontalAlign,J=Z.verticalAlign;(function(t,e,r,n,i,a,o,s,u){var l,p=(e-r)*i;l=a!==o?-s*n- -17:(-n*u+.5)*o;for(var c=0,h=t;c=0&&n>=t&&ku[this.text.charCodeAt(n)];n--)r--;this.text=this.text.substring(t,r),this.sectionIndex=this.sectionIndex.slice(t,r);},Au.prototype.substring=function(t,e){var r=new Au;return r.text=this.text.substring(t,e),r.sectionIndex=this.sectionIndex.slice(t,e),r.sections=this.sections,r},Au.prototype.toString=function(){return this.text},Au.prototype.getMaxScale=function(){var t=this;return this.sectionIndex.reduce((function(e,r){return Math.max(e,t.sections[r].scale)}),0)},Au.prototype.addTextSection=function(t,e){this.text+=t.text,this.sections.push(_u.forText(t.scale,t.fontStack||e));for(var r=this.sections.length-1,n=0;n=63743?null:++this.imageSectionID:(this.imageSectionID=57344,this.imageSectionID)};var ku={9:!0,10:!0,11:!0,12:!0,13:!0,32:!0},Iu={};function zu(t,e,r,n,i,a){if(e.imageName){var o=n[e.imageName];return o?o.displaySize[0]*e.scale*24/a+i:0}var s=r[e.fontStack],u=s&&s[t];return u?u.metrics.advance*e.scale+i:0}function Cu(t,e,r,n){var i=Math.pow(t-e,2);return n?t=0,c=0,h=0;h-r/2;){if(--o<0)return !1;s-=t[o].dist(a),a=t[o];}s+=t[o].dist(t[o+1]),o++;for(var u=[],l=0;sn;)l-=u.shift().angleDelta;if(l>i)return !1;o++,s+=p.dist(c);}return !0}function ju(t){for(var e=0,r=0;rl){var y=(l-u)/f,d=Ke(c.x,h.x,y),m=Ke(c.y,h.y,y),v=new Fu(d,m,h.angleTo(c),p);return v._round(),!o||Uu(t,v,s,o,e)?v:void 0}u+=f;}}function Gu(t,e,r,n,i,a,o,s,u){var l=qu(n,a,o),p=Nu(n,i),c=p*o,h=0===t[0].x||t[0].x===u||0===t[0].y||t[0].y===u;return e-c=0&&w=0&&_=0&&f+p<=c){var A=new Fu(w,_,x,d);A._round(),i&&!Uu(e,A,o,i,a)||y.push(A);}}h+=g;}return u||y.length||s||(y=t(e,h/2,n,i,a,o,s,!0,l)),y}(t,h?e/2*s%e:(p/2+2*a)*o*s%e,e,l,r,c,h,!1,u)}function Zu(t,e,r,n,a){for(var o=[],s=0;s=n&&h.x>=n||(c.x>=n?c=new i(n,c.y+(n-c.x)/(h.x-c.x)*(h.y-c.y))._round():h.x>=n&&(h=new i(n,c.y+(n-c.x)/(h.x-c.x)*(h.y-c.y))._round()),c.y>=a&&h.y>=a||(c.y>=a?c=new i(c.x+(a-c.y)/(h.y-c.y)*(h.x-c.x),a)._round():h.y>=a&&(h=new i(c.x+(a-c.y)/(h.y-c.y)*(h.x-c.x),a)._round()),l&&c.equals(l[l.length-1])||o.push(l=[c]),l.push(h)))));}return o}function Xu(t,e,r,n){var a=[],o=t.image,s=o.pixelRatio,u=o.paddedRect.w-2,l=o.paddedRect.h-2,p=t.right-t.left,c=t.bottom-t.top,h=o.stretchX||[[0,u]],f=o.stretchY||[[0,l]],y=function(t,e){return t+e[1]-e[0]},d=h.reduce(y,0),m=f.reduce(y,0),v=u-d,g=l-m,x=0,b=d,w=0,_=m,A=0,S=v,k=0,I=g;if(o.content&&n){var z=o.content;x=Ju(h,0,z[0]),w=Ju(f,0,z[1]),b=Ju(h,z[0],z[2]),_=Ju(f,z[1],z[3]),A=z[0]-x,k=z[1]-w,S=z[2]-z[0]-b,I=z[3]-z[1]-_;}var C=function(n,a,u,l){var h=Yu(n.stretch-x,b,p,t.left),f=$u(n.fixed-A,S,n.stretch,d),y=Yu(a.stretch-w,_,c,t.top),v=$u(a.fixed-k,I,a.stretch,m),g=Yu(u.stretch-x,b,p,t.left),z=$u(u.fixed-A,S,u.stretch,d),C=Yu(l.stretch-w,_,c,t.top),E=$u(l.fixed-k,I,l.stretch,m),P=new i(h,y),M=new i(g,y),B=new i(g,C),T=new i(h,C),V=new i(f/s,v/s),F=new i(z/s,E/s),D=e*Math.PI/180;if(D){var L=Math.sin(D),O=Math.cos(D),R=[O,-L,L,O];P._matMult(R),M._matMult(R),T._matMult(R),B._matMult(R);}var U=n.stretch+n.fixed,j=a.stretch+a.fixed;return {tl:P,tr:M,bl:T,br:B,tex:{x:o.paddedRect.x+1+U,y:o.paddedRect.y+1+j,w:u.stretch+u.fixed-U,h:l.stretch+l.fixed-j},writingMode:void 0,glyphOffset:[0,0],sectionIndex:0,pixelOffsetTL:V,pixelOffsetBR:F,minFontScaleX:S/s/p,minFontScaleY:I/s/c,isSDF:r}};if(n&&(o.stretchX||o.stretchY))for(var E=Hu(h,v,d),P=Hu(f,g,m),M=0;M0&&(y=Math.max(10,y),this.circleDiameter=y);}else {var d=o.top*s-u,m=o.bottom*s+u,v=o.left*s-u,g=o.right*s+u,x=o.collisionPadding;if(x&&(v-=x[0]*s,d-=x[1]*s,g+=x[2]*s,m+=x[3]*s),p){var b=new i(v,d),w=new i(g,d),_=new i(v,m),A=new i(g,m),S=p*Math.PI/180;b._rotate(S),w._rotate(S),_._rotate(S),A._rotate(S),v=Math.min(b.x,w.x,_.x,A.x),g=Math.max(b.x,w.x,_.x,A.x),d=Math.min(b.y,w.y,_.y,A.y),m=Math.max(b.y,w.y,_.y,A.y);}t.emplaceBack(e.x,e.y,v,d,g,m,r,n,a);}this.boxEndIndex=t.length;},Qu=function(t,e){if(void 0===t&&(t=[]),void 0===e&&(e=tl),this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(var r=(this.length>>1)-1;r>=0;r--)this._down(r);};function tl(t,e){return te?1:0}function el(t,e,r){void 0===e&&(e=1),void 0===r&&(r=!1);for(var n=1/0,a=1/0,o=-1/0,s=-1/0,u=t[0],l=0;lo)&&(o=p.x),(!l||p.y>s)&&(s=p.y);}var c=Math.min(o-n,s-a),h=c/2,f=new Qu([],rl);if(0===c)return new i(n,a);for(var y=n;ym.d||!m.d)&&(m=g,r&&console.log(\"found best %d after %d probes\",Math.round(1e4*g.d)/1e4,v)),g.max-m.d<=e||(f.push(new nl(g.p.x-(h=g.h/2),g.p.y-h,h,t)),f.push(new nl(g.p.x+h,g.p.y-h,h,t)),f.push(new nl(g.p.x-h,g.p.y+h,h,t)),f.push(new nl(g.p.x+h,g.p.y+h,h,t)),v+=4);}return r&&(console.log(\"num probes: \"+v),console.log(\"best distance: \"+m.d)),m.p}function rl(t,e){return e.max-t.max}function nl(t,e,r,n){this.p=new i(t,e),this.h=r,this.d=function(t,e){for(var r=!1,n=1/0,i=0;it.y!=p.y>t.y&&t.x<(p.x-l.x)*(t.y-l.y)/(p.y-l.y)+l.x&&(r=!r),n=Math.min(n,Ya(t,l,p));}return (r?1:-1)*Math.sqrt(n)}(this.p,n),this.max=this.d+this.h*Math.SQRT2;}Qu.prototype.push=function(t){this.data.push(t),this.length++,this._up(this.length-1);},Qu.prototype.pop=function(){if(0!==this.length){var t=this.data[0],e=this.data.pop();return this.length--,this.length>0&&(this.data[0]=e,this._down(0)),t}},Qu.prototype.peek=function(){return this.data[0]},Qu.prototype._up=function(t){for(var e=this.data,r=this.compare,n=e[t];t>0;){var i=t-1>>1,a=e[i];if(r(n,a)>=0)break;e[t]=a,t=i;}e[t]=n;},Qu.prototype._down=function(t){for(var e=this.data,r=this.compare,n=this.length>>1,i=e[t];t=0)break;e[t]=o,t=a;}e[t]=i;};var il=Number.POSITIVE_INFINITY;function al(t,e){return e[1]!==il?function(t,e,r){var n=0,i=0;switch(e=Math.abs(e),r=Math.abs(r),t){case\"top-right\":case\"top-left\":case\"top\":i=r-7;break;case\"bottom-right\":case\"bottom-left\":case\"bottom\":i=7-r;}switch(t){case\"top-right\":case\"bottom-right\":case\"right\":n=-e;break;case\"top-left\":case\"bottom-left\":case\"left\":n=e;}return [n,i]}(t,e[0],e[1]):function(t,e){var r=0,n=0;e<0&&(e=0);var i=e/Math.sqrt(2);switch(t){case\"top-right\":case\"top-left\":n=i-7;break;case\"bottom-right\":case\"bottom-left\":n=7-i;break;case\"bottom\":n=7-e;break;case\"top\":n=e-7;}switch(t){case\"top-right\":case\"bottom-right\":r=-i;break;case\"top-left\":case\"bottom-left\":r=i;break;case\"left\":r=e;break;case\"right\":r=-e;}return [r,n]}(t,e[0])}function ol(t){switch(t){case\"right\":case\"top-right\":case\"bottom-right\":return \"right\";case\"left\":case\"top-left\":case\"bottom-left\":return \"left\"}return \"center\"}function sl(t,e,r,n,a,o,s,u,l,p,c,h,f,y,d){var m=function(t,e,r,n,a,o,s,u){for(var l=n.layout.get(\"text-rotate\").evaluate(o,{})*Math.PI/180,p=[],c=0,h=e.positionedLines;c32640&&A(t.layerIds[0]+': Value for \"text-size\" is >= 255. Reduce your \"text-size\".'):\"composite\"===v.kind&&((g=[128*y.compositeTextSizes[0].evaluate(s,{},d),128*y.compositeTextSizes[1].evaluate(s,{},d)])[0]>32640||g[1]>32640)&&A(t.layerIds[0]+': Value for \"text-size\" is >= 255. Reduce your \"text-size\".'),t.addSymbols(t.text,m,g,u,o,s,p,e,l.lineStartIndex,l.lineLength,f,d);for(var x=0,b=c;x=0;o--)if(n.dist(a[o])0)&&(\"constant\"!==a.value.kind||a.value.value.length>0),l=\"constant\"!==s.value.kind||!!s.value.value||Object.keys(s.parameters).length>0,p=i.get(\"symbol-sort-key\");if(this.features=[],u||l){for(var c=e.iconDependencies,h=e.glyphDependencies,f=e.availableImages,y=new si(this.zoom),d=0,m=t;d=0;for(var B=0,T=S.sections;B=0;s--)a[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:i},s>0&&(i+=e[s-1].dist(e[s]));for(var u=0;u0},vl.prototype.hasIconData=function(){return this.icon.segments.get().length>0},vl.prototype.hasDebugData=function(){return this.textCollisionBox&&this.iconCollisionBox},vl.prototype.hasTextCollisionBoxData=function(){return this.hasDebugData()&&this.textCollisionBox.segments.get().length>0},vl.prototype.hasIconCollisionBoxData=function(){return this.hasDebugData()&&this.iconCollisionBox.segments.get().length>0},vl.prototype.addIndicesForPlacedSymbol=function(t,e){for(var r=t.placedSymbolArray.get(e),n=r.vertexStartIndex+4*r.numGlyphs,i=r.vertexStartIndex;i1||this.icon.segments.get().length>1)){this.symbolInstanceIndexes=this.getSortedSymbolIndexes(t),this.sortedAngle=t,this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder=[];for(var r=0,n=this.symbolInstanceIndexes;r=0&&n.indexOf(t)===r&&e.addIndicesForPlacedSymbol(e.text,t);})),i.verticalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.text,i.verticalPlacedTextSymbolIndex),i.placedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,i.placedIconSymbolIndex),i.verticalPlacedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,i.verticalPlacedIconSymbolIndex);}this.text.indexBuffer&&this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer&&this.icon.indexBuffer.updateData(this.icon.indexArray);}},On(\"SymbolBucket\",vl,{omit:[\"layers\",\"collisionBoxArray\",\"features\",\"compareText\"]}),vl.MAX_GLYPHS=65535,vl.addDynamicAttributes=fl;var gl=new wi({\"symbol-placement\":new mi(Et.layout_symbol[\"symbol-placement\"]),\"symbol-spacing\":new mi(Et.layout_symbol[\"symbol-spacing\"]),\"symbol-avoid-edges\":new mi(Et.layout_symbol[\"symbol-avoid-edges\"]),\"symbol-sort-key\":new vi(Et.layout_symbol[\"symbol-sort-key\"]),\"symbol-z-order\":new mi(Et.layout_symbol[\"symbol-z-order\"]),\"icon-allow-overlap\":new mi(Et.layout_symbol[\"icon-allow-overlap\"]),\"icon-ignore-placement\":new mi(Et.layout_symbol[\"icon-ignore-placement\"]),\"icon-optional\":new mi(Et.layout_symbol[\"icon-optional\"]),\"icon-rotation-alignment\":new mi(Et.layout_symbol[\"icon-rotation-alignment\"]),\"icon-size\":new vi(Et.layout_symbol[\"icon-size\"]),\"icon-text-fit\":new mi(Et.layout_symbol[\"icon-text-fit\"]),\"icon-text-fit-padding\":new mi(Et.layout_symbol[\"icon-text-fit-padding\"]),\"icon-image\":new vi(Et.layout_symbol[\"icon-image\"]),\"icon-rotate\":new vi(Et.layout_symbol[\"icon-rotate\"]),\"icon-padding\":new mi(Et.layout_symbol[\"icon-padding\"]),\"icon-keep-upright\":new mi(Et.layout_symbol[\"icon-keep-upright\"]),\"icon-offset\":new vi(Et.layout_symbol[\"icon-offset\"]),\"icon-anchor\":new vi(Et.layout_symbol[\"icon-anchor\"]),\"icon-pitch-alignment\":new mi(Et.layout_symbol[\"icon-pitch-alignment\"]),\"text-pitch-alignment\":new mi(Et.layout_symbol[\"text-pitch-alignment\"]),\"text-rotation-alignment\":new mi(Et.layout_symbol[\"text-rotation-alignment\"]),\"text-field\":new vi(Et.layout_symbol[\"text-field\"]),\"text-font\":new vi(Et.layout_symbol[\"text-font\"]),\"text-size\":new vi(Et.layout_symbol[\"text-size\"]),\"text-max-width\":new vi(Et.layout_symbol[\"text-max-width\"]),\"text-line-height\":new mi(Et.layout_symbol[\"text-line-height\"]),\"text-letter-spacing\":new vi(Et.layout_symbol[\"text-letter-spacing\"]),\"text-justify\":new vi(Et.layout_symbol[\"text-justify\"]),\"text-radial-offset\":new vi(Et.layout_symbol[\"text-radial-offset\"]),\"text-variable-anchor\":new mi(Et.layout_symbol[\"text-variable-anchor\"]),\"text-anchor\":new vi(Et.layout_symbol[\"text-anchor\"]),\"text-max-angle\":new mi(Et.layout_symbol[\"text-max-angle\"]),\"text-writing-mode\":new mi(Et.layout_symbol[\"text-writing-mode\"]),\"text-rotate\":new vi(Et.layout_symbol[\"text-rotate\"]),\"text-padding\":new mi(Et.layout_symbol[\"text-padding\"]),\"text-keep-upright\":new mi(Et.layout_symbol[\"text-keep-upright\"]),\"text-transform\":new vi(Et.layout_symbol[\"text-transform\"]),\"text-offset\":new vi(Et.layout_symbol[\"text-offset\"]),\"text-allow-overlap\":new mi(Et.layout_symbol[\"text-allow-overlap\"]),\"text-ignore-placement\":new mi(Et.layout_symbol[\"text-ignore-placement\"]),\"text-optional\":new mi(Et.layout_symbol[\"text-optional\"])}),xl={paint:new wi({\"icon-opacity\":new vi(Et.paint_symbol[\"icon-opacity\"]),\"icon-color\":new vi(Et.paint_symbol[\"icon-color\"]),\"icon-halo-color\":new vi(Et.paint_symbol[\"icon-halo-color\"]),\"icon-halo-width\":new vi(Et.paint_symbol[\"icon-halo-width\"]),\"icon-halo-blur\":new vi(Et.paint_symbol[\"icon-halo-blur\"]),\"icon-translate\":new mi(Et.paint_symbol[\"icon-translate\"]),\"icon-translate-anchor\":new mi(Et.paint_symbol[\"icon-translate-anchor\"]),\"text-opacity\":new vi(Et.paint_symbol[\"text-opacity\"]),\"text-color\":new vi(Et.paint_symbol[\"text-color\"],{runtimeType:jt,getOverride:function(t){return t.textColor},hasOverride:function(t){return !!t.textColor}}),\"text-halo-color\":new vi(Et.paint_symbol[\"text-halo-color\"]),\"text-halo-width\":new vi(Et.paint_symbol[\"text-halo-width\"]),\"text-halo-blur\":new vi(Et.paint_symbol[\"text-halo-blur\"]),\"text-translate\":new mi(Et.paint_symbol[\"text-translate\"]),\"text-translate-anchor\":new mi(Et.paint_symbol[\"text-translate-anchor\"])}),layout:gl},bl=function(t){this.type=t.property.overrides?t.property.overrides.runtimeType:Lt,this.defaultValue=t;};bl.prototype.evaluate=function(t){if(t.formattedSection){var e=this.defaultValue.property.overrides;if(e&&e.hasOverride(t.formattedSection))return e.getOverride(t.formattedSection)}return t.feature&&t.featureState?this.defaultValue.evaluate(t.feature,t.featureState):this.defaultValue.property.specification.default},bl.prototype.eachChild=function(t){this.defaultValue.isConstant()||t(this.defaultValue.value._styleExpression.expression);},bl.prototype.outputDefined=function(){return !1},bl.prototype.serialize=function(){return null},On(\"FormatSectionOverride\",bl,{omit:[\"defaultValue\"]});var wl=function(t){function e(e){t.call(this,e,xl);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.recalculate=function(e,r){if(t.prototype.recalculate.call(this,e,r),\"auto\"===this.layout.get(\"icon-rotation-alignment\")&&(this.layout._values[\"icon-rotation-alignment\"]=\"point\"!==this.layout.get(\"symbol-placement\")?\"map\":\"viewport\"),\"auto\"===this.layout.get(\"text-rotation-alignment\")&&(this.layout._values[\"text-rotation-alignment\"]=\"point\"!==this.layout.get(\"symbol-placement\")?\"map\":\"viewport\"),\"auto\"===this.layout.get(\"text-pitch-alignment\")&&(this.layout._values[\"text-pitch-alignment\"]=this.layout.get(\"text-rotation-alignment\")),\"auto\"===this.layout.get(\"icon-pitch-alignment\")&&(this.layout._values[\"icon-pitch-alignment\"]=this.layout.get(\"icon-rotation-alignment\")),\"point\"===this.layout.get(\"symbol-placement\")){var n=this.layout.get(\"text-writing-mode\");if(n){for(var i=[],a=0,o=n;a\",targetMapId:n,sourceMapId:a.mapId});}}},Fl.prototype.receive=function(t){var e=t.data,r=e.id;if(r&&(!e.targetMapId||this.mapId===e.targetMapId))if(\"\"===e.type){delete this.tasks[r];var n=this.cancelCallbacks[r];delete this.cancelCallbacks[r],n&&n();}else I()||e.mustQueue?(this.tasks[r]=e,this.taskQueue.push(r),this.invoker.trigger()):this.processTask(r,e);},Fl.prototype.process=function(){if(this.taskQueue.length){var t=this.taskQueue.shift(),e=this.tasks[t];delete this.tasks[t],this.taskQueue.length&&this.invoker.trigger(),e&&this.processTask(t,e);}},Fl.prototype.processTask=function(t,e){var r=this;if(\"\"===e.type){var n=this.callbacks[t];delete this.callbacks[t],n&&(e.error?n(Nn(e.error)):n(null,Nn(e.data)));}else {var i=!1,a=E(this.globalScope)?void 0:[],o=e.hasCallback?function(e,n){i=!0,delete r.cancelCallbacks[t],r.target.postMessage({id:t,type:\"\",sourceMapId:r.mapId,error:e?qn(e):null,data:qn(n,a)},a);}:function(t){i=!0;},s=null,u=Nn(e.data);if(this.parent[e.type])s=this.parent[e.type](e.sourceMapId,u,o);else if(this.parent.getWorkerSource){var l=e.type.split(\".\");s=this.parent.getWorkerSource(e.sourceMapId,l[0],u.source)[l[1]](u,o);}else o(new Error(\"Could not find function \"+e.type));!i&&s&&s.cancel&&(this.cancelCallbacks[t]=s.cancel);}},Fl.prototype.remove=function(){this.invoker.remove(),this.target.removeEventListener(\"message\",this.receive,!1);};var Ll=function(t,e){t&&(e?this.setSouthWest(t).setNorthEast(e):4===t.length?this.setSouthWest([t[0],t[1]]).setNorthEast([t[2],t[3]]):this.setSouthWest(t[0]).setNorthEast(t[1]));};Ll.prototype.setNorthEast=function(t){return this._ne=t instanceof Ol?new Ol(t.lng,t.lat):Ol.convert(t),this},Ll.prototype.setSouthWest=function(t){return this._sw=t instanceof Ol?new Ol(t.lng,t.lat):Ol.convert(t),this},Ll.prototype.extend=function(t){var e,r,n=this._sw,i=this._ne;if(t instanceof Ol)e=t,r=t;else {if(!(t instanceof Ll))return Array.isArray(t)?4===t.length||t.every(Array.isArray)?this.extend(Ll.convert(t)):this.extend(Ol.convert(t)):this;if(r=t._ne,!(e=t._sw)||!r)return this}return n||i?(n.lng=Math.min(e.lng,n.lng),n.lat=Math.min(e.lat,n.lat),i.lng=Math.max(r.lng,i.lng),i.lat=Math.max(r.lat,i.lat)):(this._sw=new Ol(e.lng,e.lat),this._ne=new Ol(r.lng,r.lat)),this},Ll.prototype.getCenter=function(){return new Ol((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)},Ll.prototype.getSouthWest=function(){return this._sw},Ll.prototype.getNorthEast=function(){return this._ne},Ll.prototype.getNorthWest=function(){return new Ol(this.getWest(),this.getNorth())},Ll.prototype.getSouthEast=function(){return new Ol(this.getEast(),this.getSouth())},Ll.prototype.getWest=function(){return this._sw.lng},Ll.prototype.getSouth=function(){return this._sw.lat},Ll.prototype.getEast=function(){return this._ne.lng},Ll.prototype.getNorth=function(){return this._ne.lat},Ll.prototype.toArray=function(){return [this._sw.toArray(),this._ne.toArray()]},Ll.prototype.toString=function(){return \"LngLatBounds(\"+this._sw.toString()+\", \"+this._ne.toString()+\")\"},Ll.prototype.isEmpty=function(){return !(this._sw&&this._ne)},Ll.prototype.contains=function(t){var e=Ol.convert(t),r=e.lng,n=e.lat,i=this._sw.lng<=r&&r<=this._ne.lng;return this._sw.lng>this._ne.lng&&(i=this._sw.lng>=r&&r>=this._ne.lng),this._sw.lat<=n&&n<=this._ne.lat&&i},Ll.convert=function(t){return !t||t instanceof Ll?t:new Ll(t)};var Ol=function(t,e){if(isNaN(t)||isNaN(e))throw new Error(\"Invalid LngLat object: (\"+t+\", \"+e+\")\");if(this.lng=+t,this.lat=+e,this.lat>90||this.lat<-90)throw new Error(\"Invalid LngLat latitude value: must be between -90 and 90\")};Ol.prototype.wrap=function(){return new Ol(c(this.lng,-180,180),this.lat)},Ol.prototype.toArray=function(){return [this.lng,this.lat]},Ol.prototype.toString=function(){return \"LngLat(\"+this.lng+\", \"+this.lat+\")\"},Ol.prototype.distanceTo=function(t){var e=Math.PI/180,r=this.lat*e,n=t.lat*e,i=Math.sin(r)*Math.sin(n)+Math.cos(r)*Math.cos(n)*Math.cos((t.lng-this.lng)*e);return 6371008.8*Math.acos(Math.min(i,1))},Ol.prototype.toBounds=function(t){void 0===t&&(t=0);var e=360*t/40075017,r=e/Math.cos(Math.PI/180*this.lat);return new Ll(new Ol(this.lng-r,this.lat-e),new Ol(this.lng+r,this.lat+e))},Ol.convert=function(t){if(t instanceof Ol)return t;if(Array.isArray(t)&&(2===t.length||3===t.length))return new Ol(Number(t[0]),Number(t[1]));if(!Array.isArray(t)&&\"object\"==typeof t&&null!==t)return new Ol(Number(\"lng\"in t?t.lng:t.lon),Number(t.lat));throw new Error(\"`LngLatLike` argument must be specified as a LngLat instance, an object {lng: , lat: }, an object {lon: , lat: }, or an array of [, ]\")};var Rl=2*Math.PI*6371008.8;function Ul(t){return Rl*Math.cos(t*Math.PI/180)}function jl(t){return (180+t)/360}function ql(t){return (180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360}function Nl(t,e){return t/Ul(e)}function Kl(t){return 360/Math.PI*Math.atan(Math.exp((180-360*t)*Math.PI/180))-90}var Gl=function(t,e,r){void 0===r&&(r=0),this.x=+t,this.y=+e,this.z=+r;};Gl.fromLngLat=function(t,e){void 0===e&&(e=0);var r=Ol.convert(t);return new Gl(jl(r.lng),ql(r.lat),Nl(e,r.lat))},Gl.prototype.toLngLat=function(){return new Ol(360*this.x-180,Kl(this.y))},Gl.prototype.toAltitude=function(){return this.z*Ul(Kl(this.y))},Gl.prototype.meterInMercatorCoordinateUnits=function(){return 1/Rl*(t=Kl(this.y),1/Math.cos(t*Math.PI/180));var t;};var Zl=function(t,e,r){this.z=t,this.x=e,this.y=r,this.key=Hl(0,t,t,e,r);};Zl.prototype.equals=function(t){return this.z===t.z&&this.x===t.x&&this.y===t.y},Zl.prototype.url=function(t,e){var r,n,i,a,o,s=(n=this.y,i=this.z,a=Dl(256*(r=this.x),256*(n=Math.pow(2,i)-n-1),i),o=Dl(256*(r+1),256*(n+1),i),a[0]+\",\"+a[1]+\",\"+o[0]+\",\"+o[1]),u=function(t,e,r){for(var n,i=\"\",a=t;a>0;a--)i+=(e&(n=1<this.canonical.z?new Jl(t,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new Jl(t,this.wrap,t,this.canonical.x>>e,this.canonical.y>>e)},Jl.prototype.calculateScaledKey=function(t,e){var r=this.canonical.z-t;return t>this.canonical.z?Hl(this.wrap*+e,t,this.canonical.z,this.canonical.x,this.canonical.y):Hl(this.wrap*+e,t,t,this.canonical.x>>r,this.canonical.y>>r)},Jl.prototype.isChildOf=function(t){if(t.wrap!==this.wrap)return !1;var e=this.canonical.z-t.canonical.z;return 0===t.overscaledZ||t.overscaledZ>e&&t.canonical.y===this.canonical.y>>e},Jl.prototype.children=function(t){if(this.overscaledZ>=t)return [new Jl(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];var e=this.canonical.z+1,r=2*this.canonical.x,n=2*this.canonical.y;return [new Jl(e,this.wrap,e,r,n),new Jl(e,this.wrap,e,r+1,n),new Jl(e,this.wrap,e,r,n+1),new Jl(e,this.wrap,e,r+1,n+1)]},Jl.prototype.isLessThan=function(t){return this.wrapt.wrap)&&(this.overscaledZt.overscaledZ)&&(this.canonical.xt.canonical.x)&&this.canonical.y=this.dim+1||e<-1||e>=this.dim+1)throw new RangeError(\"out of range source coordinates for DEM data\");return (e+1)*this.stride+(t+1)},Yl.prototype._unpackMapbox=function(t,e,r){return (256*t*256+256*e+r)/10-1e4},Yl.prototype._unpackTerrarium=function(t,e,r){return 256*t+e+r/256-32768},Yl.prototype.getPixels=function(){return new xo({width:this.stride,height:this.stride},new Uint8Array(this.data.buffer))},Yl.prototype.backfillBorder=function(t,e,r){if(this.dim!==t.dim)throw new Error(\"dem dimension mismatch\");var n=e*this.dim,i=e*this.dim+this.dim,a=r*this.dim,o=r*this.dim+this.dim;switch(e){case-1:n=i-1;break;case 1:i=n+1;}switch(r){case-1:a=o-1;break;case 1:o=a+1;}for(var s=-e*this.dim,u=-r*this.dim,l=a;l=0&&p[3]>=0&&s.insert(o,p[0],p[1],p[2],p[3]);}},ep.prototype.loadVTLayers=function(){return this.vtLayers||(this.vtLayers=new bs.VectorTile(new Ys(this.rawTileData)).layers,this.sourceLayerCoder=new $l(this.vtLayers?Object.keys(this.vtLayers).sort():[\"_geojsonTileLayer\"])),this.vtLayers},ep.prototype.query=function(t,e,r,n){var a=this;this.loadVTLayers();for(var o=t.params||{},s=8192/t.tileSize/t.scale,u=on(o.filter),l=t.queryGeometry,p=t.queryPadding*s,c=np(l),h=this.grid.query(c.minX-p,c.minY-p,c.maxX+p,c.maxY+p),f=np(t.cameraQueryGeometry),y=this.grid3D.query(f.minX-p,f.minY-p,f.maxX+p,f.maxY+p,(function(e,r,n,a){return function(t,e,r,n,a){for(var o=0,s=t;o=u.x&&a>=u.y)return !0}var l=[new i(e,r),new i(e,a),new i(n,a),new i(n,r)];if(t.length>2)for(var p=0,c=l;p=0)return !0;return !1}(a,c)){var f=this.sourceLayerCoder.decode(r),y=this.vtLayers[f].feature(n);if(i.needGeometry){var d=Ua(y,!0);if(!i.filter(new si(this.tileID.overscaledZ),d,this.tileID.canonical))return}else if(!i.filter(new si(this.tileID.overscaledZ),y))return;for(var m=this.getId(y,f),v=0;vn)i=!1;else if(e)if(this.expirationTimeut&&(t.getActor().send(\"enforceCacheSizeLimit\",st),ht=0);},t.clamp=p,t.clearTileCache=function(t){var e=o.caches.delete(\"mapbox-tiles\");t&&e.catch(t).then((function(){return t()}));},t.clipLine=Zu,t.clone=function(t){var e=new ao(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},t.clone$1=w,t.clone$2=function(t){var e=new ao(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e},t.collisionCircleLayout=Gs,t.config=R,t.create=function(){var t=new ao(16);return ao!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t},t.create$1=function(){var t=new ao(9);return ao!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t},t.create$2=function(){var t=new ao(4);return ao!=Float32Array&&(t[1]=0,t[2]=0),t[0]=1,t[3]=1,t},t.createCommonjsModule=e,t.createExpression=Zr,t.createLayout=Ii,t.createStyleLayer=function(t){return \"custom\"===t.type?new Il(t):new zl[t.type](t)},t.cross=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],u=r[2];return t[0]=i*u-a*s,t[1]=a*o-n*u,t[2]=n*s-i*o,t},t.deepEqual=function t(e,r){if(Array.isArray(e)){if(!Array.isArray(r)||e.length!==r.length)return !1;for(var n=0;n0&&(a=1/Math.sqrt(a)),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a,t},t.number=Ke,t.offscreenCanvasSupported=ft,t.ortho=function(t,e,r,n,i,a,o){var s=1/(e-r),u=1/(n-i),l=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*u,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*u,t[14]=(o+a)*l,t[15]=1,t},t.parseGlyphPBF=function(t){return new Ys(t).readFields(yu,[])},t.pbf=Ys,t.performSymbolLayout=function(t,e,r,n,i,a,o){t.createArrays(),t.tilePixelRatio=8192/(512*t.overscaling),t.compareText={},t.iconsNeedLinear=!1;var s=t.layers[0].layout,u=t.layers[0]._unevaluatedLayout._values,l={};if(\"composite\"===t.textSizeData.kind){var p=t.textSizeData,c=p.maxZoom;l.compositeTextSizes=[u[\"text-size\"].possiblyEvaluate(new si(p.minZoom),o),u[\"text-size\"].possiblyEvaluate(new si(c),o)];}if(\"composite\"===t.iconSizeData.kind){var h=t.iconSizeData,f=h.maxZoom;l.compositeIconSizes=[u[\"icon-size\"].possiblyEvaluate(new si(h.minZoom),o),u[\"icon-size\"].possiblyEvaluate(new si(f),o)];}l.layoutTextSize=u[\"text-size\"].possiblyEvaluate(new si(t.zoom+1),o),l.layoutIconSize=u[\"icon-size\"].possiblyEvaluate(new si(t.zoom+1),o),l.textMaxSize=u[\"text-size\"].possiblyEvaluate(new si(18));for(var y=24*s.get(\"text-line-height\"),d=\"map\"===s.get(\"text-rotation-alignment\")&&\"point\"!==s.get(\"symbol-placement\"),m=s.get(\"text-keep-upright\"),v=s.get(\"text-size\"),g=function(){var a=b[x],u=s.get(\"text-font\").evaluate(a,{},o).join(\",\"),p=v.evaluate(a,{},o),c=l.layoutTextSize.evaluate(a,{},o),h=l.layoutIconSize.evaluate(a,{},o),f={horizontal:{},vertical:void 0},g=a.text,w=[0,0];if(g){var _=g.toString(),S=24*s.get(\"text-letter-spacing\").evaluate(a,{},o),k=function(t){for(var e=0,r=t;e=8192||c.y<0||c.y>=8192||function(t,e,r,n,i,a,o,s,u,l,p,c,h,f,y,d,m,v,g,x,b,w,_,S,k){var I,z,C,E,P,M=t.addToLineVertexArray(e,r),B=0,T=0,V=0,F=0,D=-1,L=-1,O={},R=ha(\"\"),U=0,j=0;if(void 0===s._unevaluatedLayout.getValue(\"text-radial-offset\")?(U=(I=s.layout.get(\"text-offset\").evaluate(b,{},S).map((function(t){return 24*t})))[0],j=I[1]):(U=24*s.layout.get(\"text-radial-offset\").evaluate(b,{},S),j=il),t.allowVerticalPlacement&&n.vertical){var q=s.layout.get(\"text-rotate\").evaluate(b,{},S)+90;E=new Wu(u,e,l,p,c,n.vertical,h,f,y,q),o&&(P=new Wu(u,e,l,p,c,o,m,v,y,q));}if(i){var N=s.layout.get(\"icon-rotate\").evaluate(b,{}),K=\"none\"!==s.layout.get(\"icon-text-fit\"),G=Xu(i,N,_,K),Z=o?Xu(o,N,_,K):void 0;C=new Wu(u,e,l,p,c,i,m,v,!1,N),B=4*G.length;var X=t.iconSizeData,J=null;\"source\"===X.kind?(J=[128*s.layout.get(\"icon-size\").evaluate(b,{})])[0]>32640&&A(t.layerIds[0]+': Value for \"icon-size\" is >= 255. Reduce your \"icon-size\".'):\"composite\"===X.kind&&((J=[128*w.compositeIconSizes[0].evaluate(b,{},S),128*w.compositeIconSizes[1].evaluate(b,{},S)])[0]>32640||J[1]>32640)&&A(t.layerIds[0]+': Value for \"icon-size\" is >= 255. Reduce your \"icon-size\".'),t.addSymbols(t.icon,G,J,x,g,b,!1,e,M.lineStartIndex,M.lineLength,-1,S),D=t.icon.placedSymbolArray.length-1,Z&&(T=4*Z.length,t.addSymbols(t.icon,Z,J,x,g,b,wu.vertical,e,M.lineStartIndex,M.lineLength,-1,S),L=t.icon.placedSymbolArray.length-1);}for(var H in n.horizontal){var Y=n.horizontal[H];if(!z){R=ha(Y.text);var $=s.layout.get(\"text-rotate\").evaluate(b,{},S);z=new Wu(u,e,l,p,c,Y,h,f,y,$);}var W=1===Y.positionedLines.length;if(V+=sl(t,e,Y,a,s,y,b,d,M,n.vertical?wu.horizontal:wu.horizontalOnly,W?Object.keys(n.horizontal):[H],O,D,w,S),W)break}n.vertical&&(F+=sl(t,e,n.vertical,a,s,y,b,d,M,wu.vertical,[\"vertical\"],O,L,w,S));var Q=z?z.boxStartIndex:t.collisionBoxArray.length,tt=z?z.boxEndIndex:t.collisionBoxArray.length,et=E?E.boxStartIndex:t.collisionBoxArray.length,rt=E?E.boxEndIndex:t.collisionBoxArray.length,nt=C?C.boxStartIndex:t.collisionBoxArray.length,it=C?C.boxEndIndex:t.collisionBoxArray.length,at=P?P.boxStartIndex:t.collisionBoxArray.length,ot=P?P.boxEndIndex:t.collisionBoxArray.length,st=-1,ut=function(t,e){return t&&t.circleDiameter?Math.max(t.circleDiameter,e):e};st=ut(z,st),st=ut(E,st),st=ut(C,st);var lt=(st=ut(P,st))>-1?1:0;lt&&(st*=k/24),t.glyphOffsetArray.length>=vl.MAX_GLYPHS&&A(\"Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907\"),void 0!==b.sortKey&&t.addToSortKeyRanges(t.symbolInstances.length,b.sortKey),t.symbolInstances.emplaceBack(e.x,e.y,O.right>=0?O.right:-1,O.center>=0?O.center:-1,O.left>=0?O.left:-1,O.vertical||-1,D,L,R,Q,tt,et,rt,nt,it,at,ot,l,V,F,B,T,lt,0,h,U,j,st);}(t,c,s,r,n,i,h,t.layers[0],t.collisionBoxArray,e.index,e.sourceLayerIndex,t.index,v,w,k,u,x,_,I,y,e,a,l,p,o);};if(\"line\"===z)for(var M=0,B=Zu(e.geometry,0,0,8192,8192);M1){var U=Ku(R,S,r.vertical||d,n,24,g);U&&P(R,U);}}else if(\"Polygon\"===e.type)for(var j=0,q=ns(e.geometry,0);j=T.maxzoom||\"none\"!==T.visibility&&(a(P,this.zoom,i),(g[T.id]=T.createBucket({index:h.bucketLayerIDs.length,layers:P,zoom:this.zoom,pixelRatio:this.pixelRatio,overscaling:this.overscaling,collisionBoxArray:this.collisionBoxArray,sourceLayerIndex:w,sourceID:this.source})).populate(S,v,this.tileID.canonical),h.bucketLayerIDs.push(P.map((function(e){return e.id}))));}}}var C=e.mapObject(v.glyphDependencies,(function(e){return Object.keys(e).map(Number)}));Object.keys(C).length?n.send(\"getGlyphs\",{uid:this.uid,stacks:C},(function(e,t){c||(c=e,p=t,z.call(l));})):p={};var D=Object.keys(v.iconDependencies);D.length?n.send(\"getImages\",{icons:D,source:this.source,tileID:this.tileID,type:\"icons\"},(function(e,t){c||(c=e,f=t,z.call(l));})):f={};var L=Object.keys(v.patternDependencies);function z(){if(c)return s(c);if(p&&f&&d){var t=new o(p),r=new e.ImageAtlas(f,d);for(var n in g){var l=g[n];l instanceof e.SymbolBucket?(a(l.layers,this.zoom,i),e.performSymbolLayout(l,p,t.positions,f,r.iconPositions,this.showCollisionBoxes,this.tileID.canonical)):l.hasPattern&&(l instanceof e.LineBucket||l instanceof e.FillBucket||l instanceof e.FillExtrusionBucket)&&(a(l.layers,this.zoom,i),l.addFeatures(v,this.tileID.canonical,r.patternPositions));}this.status=\"done\",s(null,{buckets:e.values(g).filter((function(e){return !e.isEmpty()})),featureIndex:h,collisionBoxArray:this.collisionBoxArray,glyphAtlasImage:t.image,imageAtlas:r,glyphMap:this.returnDependencies?p:null,iconMap:this.returnDependencies?f:null,glyphPositions:this.returnDependencies?t.positions:null});}}L.length?n.send(\"getImages\",{icons:L,source:this.source,tileID:this.tileID,type:\"patterns\"},(function(e,t){c||(c=e,d=t,z.call(l));})):d={},z.call(this);};var l=function(e,t,r,i){this.actor=e,this.layerIndex=t,this.availableImages=r,this.loadVectorData=i||s,this.loading={},this.loaded={};};l.prototype.loadTile=function(t,r){var i=this,o=t.uid;this.loading||(this.loading={});var a=!!(t&&t.request&&t.request.collectResourceTiming)&&new e.RequestPerformance(t.request),s=this.loading[o]=new n(t);s.abort=this.loadVectorData(t,(function(t,n){if(delete i.loading[o],t||!n)return s.status=\"done\",i.loaded[o]=s,r(t);var l=n.rawData,u={};n.expires&&(u.expires=n.expires),n.cacheControl&&(u.cacheControl=n.cacheControl);var h={};if(a){var c=a.finish();c&&(h.resourceTiming=JSON.parse(JSON.stringify(c)));}s.vectorTile=n.vectorTile,s.parse(n.vectorTile,i.layerIndex,i.availableImages,i.actor,(function(t,i){if(t||!i)return r(t);r(null,e.extend({rawTileData:l.slice(0)},i,u,h));})),i.loaded=i.loaded||{},i.loaded[o]=s;}));},l.prototype.reloadTile=function(e,t){var r=this,i=this.loaded,o=e.uid,n=this;if(i&&i[o]){var a=i[o];a.showCollisionBoxes=e.showCollisionBoxes;var s=function(e,i){var o=a.reloadCallback;o&&(delete a.reloadCallback,a.parse(a.vectorTile,n.layerIndex,r.availableImages,n.actor,o)),t(e,i);};\"parsing\"===a.status?a.reloadCallback=s:\"done\"===a.status&&(a.vectorTile?a.parse(a.vectorTile,this.layerIndex,this.availableImages,this.actor,s):s());}},l.prototype.abortTile=function(e,t){var r=this.loading,i=e.uid;r&&r[i]&&r[i].abort&&(r[i].abort(),delete r[i]),t();},l.prototype.removeTile=function(e,t){var r=this.loaded,i=e.uid;r&&r[i]&&delete r[i],t();};var u=e.window.ImageBitmap,h=function(){this.loaded={};};function c(e,t){if(0!==e.length){p(e[0],t);for(var r=1;r=Math.abs(s)?r-l+s:s-l+r,r=l;}r+i>=0!=!!t&&e.reverse();}h.prototype.loadTile=function(t,r){var i=t.uid,o=t.encoding,n=t.rawImageData,a=u&&n instanceof u?this.getImageData(n):n,s=new e.DEMData(i,a,o);this.loaded=this.loaded||{},this.loaded[i]=s,r(null,s);},h.prototype.getImageData=function(t){this.offscreenCanvas&&this.offscreenCanvasContext||(this.offscreenCanvas=new OffscreenCanvas(t.width,t.height),this.offscreenCanvasContext=this.offscreenCanvas.getContext(\"2d\")),this.offscreenCanvas.width=t.width,this.offscreenCanvas.height=t.height,this.offscreenCanvasContext.drawImage(t,0,0,t.width,t.height);var r=this.offscreenCanvasContext.getImageData(-1,-1,t.width+2,t.height+2);return this.offscreenCanvasContext.clearRect(0,0,this.offscreenCanvas.width,this.offscreenCanvas.height),new e.RGBAImage({width:r.width,height:r.height},r.data)},h.prototype.removeTile=function(e){var t=this.loaded,r=e.uid;t&&t[r]&&delete t[r];};var f=e.vectorTile.VectorTileFeature.prototype.toGeoJSON,d=function(t){this._feature=t,this.extent=e.EXTENT,this.type=t.type,this.properties=t.tags,\"id\"in t&&!isNaN(t.id)&&(this.id=parseInt(t.id,10));};d.prototype.loadGeometry=function(){if(1===this._feature.type){for(var t=[],r=0,i=this._feature.geometry;r>31}function T(e,t){for(var r=e.loadGeometry(),i=e.type,o=0,n=0,a=r.length,s=0;s>1;!function e(t,r,i,o,n,a){for(;n>o;){if(n-o>600){var s=n-o+1,l=i-o+1,u=Math.log(s),h=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*h*(s-h)/s)*(l-s/2<0?-1:1);e(t,r,i,Math.max(o,Math.floor(i-l*h/s+c)),Math.min(n,Math.floor(i+(s-l)*h/s+c)),a);}var p=r[2*i+a],f=o,d=n;for(D(t,r,o,i),r[2*n+a]>p&&D(t,r,o,n);fp;)d--;}r[2*o+a]===p?D(t,r,o,d):D(t,r,++d,n),d<=i&&(o=d+1),i<=d&&(n=d-1);}}(t,r,s,o,n,a%2),e(t,r,i,o,s-1,a+1),e(t,r,i,s+1,n,a+1);}}(a,s,i,0,a.length-1,0);};F.prototype.range=function(e,t,r,i){return function(e,t,r,i,o,n,a){for(var s,l,u=[0,e.length-1,0],h=[];u.length;){var c=u.pop(),p=u.pop(),f=u.pop();if(p-f<=a)for(var d=f;d<=p;d++)l=t[2*d+1],(s=t[2*d])>=r&&s<=o&&l>=i&&l<=n&&h.push(e[d]);else {var g=Math.floor((f+p)/2);l=t[2*g+1],(s=t[2*g])>=r&&s<=o&&l>=i&&l<=n&&h.push(e[g]);var v=(c+1)%2;(0===c?r<=s:i<=l)&&(u.push(f),u.push(g-1),u.push(v)),(0===c?o>=s:n>=l)&&(u.push(g+1),u.push(p),u.push(v));}}return h}(this.ids,this.coords,e,t,r,i,this.nodeSize)},F.prototype.within=function(e,t,r){return function(e,t,r,i,o,n){for(var a=[0,e.length-1,0],s=[],l=o*o;a.length;){var u=a.pop(),h=a.pop(),c=a.pop();if(h-c<=n)for(var p=c;p<=h;p++)z(t[2*p],t[2*p+1],r,i)<=l&&s.push(e[p]);else {var f=Math.floor((c+h)/2),d=t[2*f],g=t[2*f+1];z(d,g,r,i)<=l&&s.push(e[f]);var v=(u+1)%2;(0===u?r-o<=d:i-o<=g)&&(a.push(c),a.push(f-1),a.push(v)),(0===u?r+o>=d:i+o>=g)&&(a.push(f+1),a.push(h),a.push(v));}}return s}(this.ids,this.coords,e,t,r,this.nodeSize)};var N={minZoom:0,maxZoom:16,minPoints:2,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:function(e){return e}},J=function(e){this.options=V(Object.create(N),e),this.trees=new Array(this.options.maxZoom+1);};function Z(e,t,r,i,o){return {x:e,y:t,zoom:1/0,id:r,parentId:-1,numPoints:i,properties:o}}function A(e,t){var r=e.geometry.coordinates,i=r[1];return {x:Y(r[0]),y:j(i),zoom:1/0,index:t,parentId:-1}}function B(e){return {type:\"Feature\",id:e.id,properties:G(e),geometry:{type:\"Point\",coordinates:[(i=e.x,360*(i-.5)),(t=e.y,r=(180-360*t)*Math.PI/180,360*Math.atan(Math.exp(r))/Math.PI-90)]}};var t,r,i;}function G(e){var t=e.numPoints,r=t>=1e4?Math.round(t/1e3)+\"k\":t>=1e3?Math.round(t/100)/10+\"k\":t;return V(V({},e.properties),{cluster:!0,cluster_id:e.id,point_count:t,point_count_abbreviated:r})}function Y(e){return e/360+.5}function j(e){var t=Math.sin(e*Math.PI/180),r=.5-.25*Math.log((1+t)/(1-t))/Math.PI;return r<0?0:r>1?1:r}function V(e,t){for(var r in t)e[r]=t[r];return e}function X(e){return e.x}function W(e){return e.y}function R(e,t,r,i,o,n){var a=o-r,s=n-i;if(0!==a||0!==s){var l=((e-r)*a+(t-i)*s)/(a*a+s*s);l>1?(r=o,i=n):l>0&&(r+=a*l,i+=s*l);}return (a=e-r)*a+(s=t-i)*s}function q(e,t,r,i){var o={id:void 0===e?null:e,type:t,geometry:r,tags:i,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};return function(e){var t=e.geometry,r=e.type;if(\"Point\"===r||\"MultiPoint\"===r||\"LineString\"===r)U(e,t);else if(\"Polygon\"===r||\"MultiLineString\"===r)for(var i=0;i0&&(a+=i?(o*u-l*n)/2:Math.sqrt(Math.pow(l-o,2)+Math.pow(u-n,2))),o=l,n=u;}var h=t.length-3;t[2]=1,function e(t,r,i,o){for(var n,a=o,s=i-r>>1,l=i-r,u=t[r],h=t[r+1],c=t[i],p=t[i+1],f=r+3;fa)n=f,a=d;else if(d===a){var g=Math.abs(f-s);go&&(n-r>3&&e(t,r,n,o),t[n+2]=a,i-n>3&&e(t,n,i,o));}(t,0,h,r),t[h+2]=1,t.size=Math.abs(a),t.start=0,t.end=t.size;}function Q(e,t,r,i){for(var o=0;o1?1:r}function re(e,t,r,i,o,n,a,s){if(i/=t,n>=(r/=t)&&a=i)return null;for(var l=[],u=0;u=r&&d=i)){var g=[];if(\"Point\"===p||\"MultiPoint\"===p)ie(c,g,r,i,o);else if(\"LineString\"===p)oe(c,g,r,i,o,!1,s.lineMetrics);else if(\"MultiLineString\"===p)ae(c,g,r,i,o,!1);else if(\"Polygon\"===p)ae(c,g,r,i,o,!0);else if(\"MultiPolygon\"===p)for(var v=0;v=r&&a<=i&&(t.push(e[n]),t.push(e[n+1]),t.push(e[n+2]));}}function oe(e,t,r,i,o,n,a){for(var s,l,u=ne(e),h=0===o?le:ue,c=e.start,p=0;pr&&(l=h(u,f,d,v,m,r),a&&(u.start=c+s*l)):y>i?x=r&&(l=h(u,f,d,v,m,r),w=!0),x>i&&y<=i&&(l=h(u,f,d,v,m,i),w=!0),!n&&w&&(a&&(u.end=c+s*l),t.push(u),u=ne(e)),a&&(c+=s);}var S=e.length-3;f=e[S],d=e[S+1],g=e[S+2],(y=0===o?f:d)>=r&&y<=i&&se(u,f,d,g),S=u.length-3,n&&S>=3&&(u[S]!==u[0]||u[S+1]!==u[1])&&se(u,u[0],u[1],u[2]),u.length&&t.push(u);}function ne(e){var t=[];return t.size=e.size,t.start=e.start,t.end=e.end,t}function ae(e,t,r,i,o,n){for(var a=0;aa.maxX&&(a.maxX=h),c>a.maxY&&(a.maxY=c);}return a}function ge(e,t,r,i){var o=t.geometry,n=t.type,a=[];if(\"Point\"===n||\"MultiPoint\"===n)for(var s=0;s0&&t.size<(o?a:i))r.numPoints+=t.length/3;else {for(var s=[],l=0;la)&&(r.numSimplified++,s.push(t[l]),s.push(t[l+1])),r.numPoints++;o&&function(e,t){for(var r=0,i=0,o=e.length,n=o-2;i0===t)for(i=0,o=e.length;i24)throw new Error(\"maxZoom should be in the 0-24 range\");if(t.promoteId&&t.generateId)throw new Error(\"promoteId and generateId cannot be used together.\");var i=function(e,t){var r=[];if(\"FeatureCollection\"===e.type)for(var i=0;i=i;u--){var h=+Date.now();s=this._cluster(s,u),this.trees[u]=new F(s,X,W,n,Float32Array),r&&console.log(\"z%d: %d clusters in %dms\",u,s.length,+Date.now()-h);}return r&&console.timeEnd(\"total time\"),this},J.prototype.getClusters=function(e,t){var r=((e[0]+180)%360+360)%360-180,i=Math.max(-90,Math.min(90,e[1])),o=180===e[2]?180:((e[2]+180)%360+360)%360-180,n=Math.max(-90,Math.min(90,e[3]));if(e[2]-e[0]>=360)r=-180,o=180;else if(r>o){var a=this.getClusters([r,i,180,n],t),s=this.getClusters([-180,i,o,n],t);return a.concat(s)}for(var l=this.trees[this._limitZoom(t)],u=[],h=0,c=l.range(Y(r),j(n),Y(o),j(i));ht&&(p+=g.numPoints||1);}if(p>=n){for(var v=l.x*c,m=l.y*c,y=o&&c>1?this._map(l,!0):null,x=(s<<5)+(t+1)+this.points.length,w=0,S=h;w1)for(var b=0,_=h;b<_.length;b+=1){var k=u.points[_[b]];k.zoom<=t||(k.zoom=t,r.push(k));}}}return r},J.prototype._getOriginId=function(e){return e-this.points.length>>5},J.prototype._getOriginZoom=function(e){return (e-this.points.length)%32},J.prototype._map=function(e,t){if(e.numPoints)return t?V({},e.properties):e.properties;var r=this.points[e.index].properties,i=this.options.map(r);return t&&i===r?V({},i):i},me.prototype.options={maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,tolerance:3,extent:4096,buffer:64,lineMetrics:!1,promoteId:null,generateId:!1,debug:0},me.prototype.splitTile=function(e,t,r,i,o,n,a){for(var s=[e,t,r,i],l=this.options,u=l.debug;s.length;){i=s.pop(),r=s.pop(),t=s.pop(),e=s.pop();var h=1<1&&console.time(\"creation\"),p=this.tiles[c]=de(e,t,r,i,l),this.tileCoords.push({z:t,x:r,y:i}),u)){u>1&&(console.log(\"tile z%d-%d-%d (features: %d, points: %d, simplified: %d)\",t,r,i,p.numFeatures,p.numPoints,p.numSimplified),console.timeEnd(\"creation\"));var f=\"z\"+t;this.stats[f]=(this.stats[f]||0)+1,this.total++;}if(p.source=e,o){if(t===l.maxZoom||t===o)continue;var d=1<1&&console.time(\"clipping\");var g,v,m,y,x,w,S=.5*l.buffer/l.extent,I=.5-S,M=.5+S,b=1+S;g=v=m=y=null,x=re(e,h,r-S,r+M,0,p.minX,p.maxX,l),w=re(e,h,r+I,r+b,0,p.minX,p.maxX,l),e=null,x&&(g=re(x,h,i-S,i+M,1,p.minY,p.maxY,l),v=re(x,h,i+I,i+b,1,p.minY,p.maxY,l),x=null),w&&(m=re(w,h,i-S,i+M,1,p.minY,p.maxY,l),y=re(w,h,i+I,i+b,1,p.minY,p.maxY,l),w=null),u>1&&console.timeEnd(\"clipping\"),s.push(g||[],t+1,2*r,2*i),s.push(v||[],t+1,2*r,2*i+1),s.push(m||[],t+1,2*r+1,2*i),s.push(y||[],t+1,2*r+1,2*i+1);}}},me.prototype.getTile=function(e,t,r){var i=this.options,o=i.extent,n=i.debug;if(e<0||e>24)return null;var a=1<1&&console.log(\"drilling down to z%d-%d-%d\",e,t,r);for(var l,u=e,h=t,c=r;!l&&u>0;)u--,h=Math.floor(h/2),c=Math.floor(c/2),l=this.tiles[ye(u,h,c)];return l&&l.source?(n>1&&console.log(\"found parent tile z%d-%d-%d\",u,h,c),n>1&&console.time(\"drilling down\"),this.splitTile(l.source,u,h,c,e,t,r),n>1&&console.timeEnd(\"drilling down\"),this.tiles[s]?pe(this.tiles[s],o):null):null};var we=function(t){function r(e,r,i,o){t.call(this,e,r,i,xe),o&&(this.loadGeoJSON=o);}return t&&(r.__proto__=t),(r.prototype=Object.create(t&&t.prototype)).constructor=r,r.prototype.loadData=function(e,t){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),this._pendingCallback=t,this._pendingLoadDataParams=e,this._state&&\"Idle\"!==this._state?this._state=\"NeedsLoadData\":(this._state=\"Coalescing\",this._loadData());},r.prototype._loadData=function(){var t=this;if(this._pendingCallback&&this._pendingLoadDataParams){var r=this._pendingCallback,i=this._pendingLoadDataParams;delete this._pendingCallback,delete this._pendingLoadDataParams;var o=!!(i&&i.request&&i.request.collectResourceTiming)&&new e.RequestPerformance(i.request);this.loadGeoJSON(i,(function(n,a){if(n||!a)return r(n);if(\"object\"!=typeof a)return r(new Error(\"Input data given to '\"+i.source+\"' is not a valid GeoJSON object.\"));!function e(t,r){var i,o=t&&t.type;if(\"FeatureCollection\"===o)for(i=0;i=0?0:e.button},i.remove=function(t){t.parentNode&&t.parentNode.removeChild(t);};var p=function(e){function i(){e.call(this),this.images={},this.updatedImages={},this.callbackDispatchedThisFrame={},this.loaded=!1,this.requestors=[],this.patterns={},this.atlasImage=new t.RGBAImage({width:1,height:1}),this.dirty=!0;}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.isLoaded=function(){return this.loaded},i.prototype.setLoaded=function(t){if(this.loaded!==t&&(this.loaded=t,t)){for(var e=0,i=this.requestors;e=0?1.2:1));}function g(t,e,i,o,r,a,n){for(var s=0;s65535)e(new Error(\"glyphs > 65535 not supported\"));else if(a.ranges[s])e(null,{stack:i,id:r,glyph:n});else {var l=a.requests[s];l||(l=a.requests[s]=[],y.loadGlyphRange(i,s,o.url,o.requestManager,(function(t,e){if(e){for(var i in e)o._doesCharSupportLocalGlyph(+i)||(a.glyphs[+i]=e[+i]);a.ranges[s]=!0;}for(var r=0,n=l;r1&&(s=t[++n]);var c=Math.abs(l-s.left),u=Math.abs(l-s.right),h=Math.min(c,u),p=void 0,d=r/i*(o+1);if(s.isDash){var _=o-Math.abs(d);p=Math.sqrt(h*h+_*_);}else p=o-Math.sqrt(h*h+d*d);this.data[a+l]=Math.max(0,Math.min(255,p+128));}},T.prototype.addRegularDash=function(t){for(var e=t.length-1;e>=0;--e){var i=t[e],o=t[e+1];i.zeroLength?t.splice(e,1):o&&o.isDash===i.isDash&&(o.left=i.left,t.splice(e,1));}var r=t[0],a=t[t.length-1];r.isDash===a.isDash&&(r.left=a.left-this.width,a.right=r.right+this.width);for(var n=this.width*this.nextRow,s=0,l=t[s],c=0;c1&&(l=t[++s]);var u=Math.abs(c-l.left),h=Math.abs(c-l.right),p=Math.min(u,h);this.data[n+c]=Math.max(0,Math.min(255,(l.isDash?p:-p)+128));}},T.prototype.addDash=function(e,i){var o=i?7:0,r=2*o+1;if(this.nextRow+r>this.height)return t.warnOnce(\"LineAtlas out of space\"),null;for(var a=0,n=0;n=o&&e.x=r&&e.y0&&(l[new t.OverscaledTileID(e.overscaledZ,a,i.z,r,i.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,i.z,i.x,i.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,i.z,n,i.y-1).key]={backfilled:!1}),i.y+10&&(o.resourceTiming=e._resourceTiming,e._resourceTiming=[]),e.fire(new t.Event(\"data\",o));}}));},i.prototype.onAdd=function(t){this.map=t,this.load();},i.prototype.setData=function(e){var i=this;return this._data=e,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._updateWorkerData((function(e){if(e)i.fire(new t.ErrorEvent(e));else {var o={dataType:\"source\",sourceDataType:\"content\"};i._collectResourceTiming&&i._resourceTiming&&i._resourceTiming.length>0&&(o.resourceTiming=i._resourceTiming,i._resourceTiming=[]),i.fire(new t.Event(\"data\",o));}})),this},i.prototype.getClusterExpansionZoom=function(t,e){return this.actor.send(\"geojson.getClusterExpansionZoom\",{clusterId:t,source:this.id},e),this},i.prototype.getClusterChildren=function(t,e){return this.actor.send(\"geojson.getClusterChildren\",{clusterId:t,source:this.id},e),this},i.prototype.getClusterLeaves=function(t,e,i,o){return this.actor.send(\"geojson.getClusterLeaves\",{source:this.id,clusterId:t,limit:e,offset:i},o),this},i.prototype._updateWorkerData=function(e){var i=this;this._loaded=!1;var o=t.extend({},this.workerOptions),r=this._data;\"string\"==typeof r?(o.request=this.map._requestManager.transformRequest(t.browser.resolveURL(r),t.ResourceType.Source),o.request.collectResourceTiming=this._collectResourceTiming):o.data=JSON.stringify(r),this.actor.send(this.type+\".loadData\",o,(function(t,r){i._removed||r&&r.abandoned||(i._loaded=!0,r&&r.resourceTiming&&r.resourceTiming[i.id]&&(i._resourceTiming=r.resourceTiming[i.id].slice(0)),i.actor.send(i.type+\".coalesce\",{source:o.source},null),e(t));}));},i.prototype.loaded=function(){return this._loaded},i.prototype.loadTile=function(e,i){var o=this,r=e.actor?\"reloadTile\":\"loadTile\";e.actor=this.actor,e.request=this.actor.send(r,{type:this.type,uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId},(function(t,a){return delete e.request,e.unloadVectorData(),e.aborted?i(null):t?i(t):(e.loadVectorData(a,o.map.painter,\"reloadTile\"===r),i(null))}));},i.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.aborted=!0;},i.prototype.unloadTile=function(t){t.unloadVectorData(),this.actor.send(\"removeTile\",{uid:t.uid,type:this.type,source:this.id});},i.prototype.onRemove=function(){this._removed=!0,this.actor.send(\"removeSource\",{type:this.type,source:this.id});},i.prototype.serialize=function(){return t.extend({},this._options,{type:this.type,data:this._data})},i.prototype.hasTransition=function(){return !1},i}(t.Evented),A=t.createLayout([{name:\"a_pos\",type:\"Int16\",components:2},{name:\"a_texture_pos\",type:\"Int16\",components:2}]),M=function(e){function i(t,i,o,r){e.call(this),this.id=t,this.dispatcher=o,this.coordinates=i.coordinates,this.type=\"image\",this.minzoom=0,this.maxzoom=22,this.tileSize=512,this.tiles={},this._loaded=!1,this.setEventedParent(r),this.options=i;}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.load=function(e,i){var o=this;this._loaded=!1,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this.url=this.options.url,t.getImage(this.map._requestManager.transformRequest(this.url,t.ResourceType.Image),(function(r,a){o._loaded=!0,r?o.fire(new t.ErrorEvent(r)):a&&(o.image=a,e&&(o.coordinates=e),i&&i(),o._finishLoading());}));},i.prototype.loaded=function(){return this._loaded},i.prototype.updateImage=function(t){var e=this;return this.image&&t.url?(this.options.url=t.url,this.load(t.coordinates,(function(){e.texture=null;})),this):this},i.prototype._finishLoading=function(){this.map&&(this.setCoordinates(this.coordinates),this.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"metadata\"})));},i.prototype.onAdd=function(t){this.map=t,this.load();},i.prototype.setCoordinates=function(e){var i=this;this.coordinates=e;var o=e.map(t.MercatorCoordinate.fromLngLat);this.tileID=function(e){for(var i=1/0,o=1/0,r=-1/0,a=-1/0,n=0,s=e;ni.end(0)?this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+this.id,null,\"Playback for this video can be set only between the \"+i.start(0)+\" and \"+i.end(0)+\"-second mark.\"))):this.video.currentTime=e;}},i.prototype.getVideo=function(){return this.video},i.prototype.onAdd=function(t){this.map||(this.map=t,this.load(),this.video&&(this.video.play(),this.setCoordinates(this.coordinates)));},i.prototype.prepare=function(){if(!(0===Object.keys(this.tiles).length||this.video.readyState<2)){var e=this.map.painter.context,i=e.gl;for(var o in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,A.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?this.video.paused||(this.texture.bind(i.LINEAR,i.CLAMP_TO_EDGE),i.texSubImage2D(i.TEXTURE_2D,0,0,0,i.RGBA,i.UNSIGNED_BYTE,this.video)):(this.texture=new t.Texture(e,this.video,i.RGBA),this.texture.bind(i.LINEAR,i.CLAMP_TO_EDGE)),this.tiles){var r=this.tiles[o];\"loaded\"!==r.state&&(r.state=\"loaded\",r.texture=this.texture);}}},i.prototype.serialize=function(){return {type:\"video\",urls:this.urls,coordinates:this.coordinates}},i.prototype.hasTransition=function(){return this.video&&!this.video.paused},i}(M),R=function(e){function i(i,o,r,a){e.call(this,i,o,r,a),o.coordinates?Array.isArray(o.coordinates)&&4===o.coordinates.length&&!o.coordinates.some((function(t){return !Array.isArray(t)||2!==t.length||t.some((function(t){return \"number\"!=typeof t}))}))||this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+i,null,'\"coordinates\" property must be an array of 4 longitude/latitude array pairs'))):this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+i,null,'missing required property \"coordinates\"'))),o.animate&&\"boolean\"!=typeof o.animate&&this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+i,null,'optional \"animate\" property must be a boolean value'))),o.canvas?\"string\"==typeof o.canvas||o.canvas instanceof t.window.HTMLCanvasElement||this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+i,null,'\"canvas\" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance'))):this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+i,null,'missing required property \"canvas\"'))),this.options=o,this.animate=void 0===o.animate||o.animate;}return e&&(i.__proto__=e),(i.prototype=Object.create(e&&e.prototype)).constructor=i,i.prototype.load=function(){this._loaded=!0,this.canvas||(this.canvas=this.options.canvas instanceof t.window.HTMLCanvasElement?this.options.canvas:t.window.document.getElementById(this.options.canvas)),this.width=this.canvas.width,this.height=this.canvas.height,this._hasInvalidDimensions()?this.fire(new t.ErrorEvent(new Error(\"Canvas dimensions cannot be less than or equal to zero.\"))):(this.play=function(){this._playing=!0,this.map.triggerRepaint();},this.pause=function(){this._playing&&(this.prepare(),this._playing=!1);},this._finishLoading());},i.prototype.getCanvas=function(){return this.canvas},i.prototype.onAdd=function(t){this.map=t,this.load(),this.canvas&&this.animate&&this.play();},i.prototype.onRemove=function(){this.pause();},i.prototype.prepare=function(){var e=!1;if(this.canvas.width!==this.width&&(this.width=this.canvas.width,e=!0),this.canvas.height!==this.height&&(this.height=this.canvas.height,e=!0),!this._hasInvalidDimensions()&&0!==Object.keys(this.tiles).length){var i=this.map.painter.context,o=i.gl;for(var r in this.boundsBuffer||(this.boundsBuffer=i.createVertexBuffer(this._boundsArray,A.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?(e||this._playing)&&this.texture.update(this.canvas,{premultiply:!0}):this.texture=new t.Texture(i,this.canvas,o.RGBA,{premultiply:!0}),this.tiles){var a=this.tiles[r];\"loaded\"!==a.state&&(a.state=\"loaded\",a.texture=this.texture);}}},i.prototype.serialize=function(){return {type:\"canvas\",coordinates:this.coordinates}},i.prototype.hasTransition=function(){return this._playing},i.prototype._hasInvalidDimensions=function(){for(var t=0,e=[this.canvas.width,this.canvas.height];tthis.max){var n=this._getAndRemoveByKey(this.order[0]);n&&this.onRemove(n);}return this},U.prototype.has=function(t){return t.wrapped().key in this.data},U.prototype.getAndRemove=function(t){return this.has(t)?this._getAndRemoveByKey(t.wrapped().key):null},U.prototype._getAndRemoveByKey=function(t){var e=this.data[t].shift();return e.timeout&&clearTimeout(e.timeout),0===this.data[t].length&&delete this.data[t],this.order.splice(this.order.indexOf(t),1),e.value},U.prototype.getByKey=function(t){var e=this.data[t];return e?e[0].value:null},U.prototype.get=function(t){return this.has(t)?this.data[t.wrapped().key][0].value:null},U.prototype.remove=function(t,e){if(!this.has(t))return this;var i=t.wrapped().key,o=void 0===e?0:this.data[i].indexOf(e),r=this.data[i][o];return this.data[i].splice(o,1),r.timeout&&clearTimeout(r.timeout),0===this.data[i].length&&delete this.data[i],this.onRemove(r.value),this.order.splice(this.order.indexOf(i),1),this},U.prototype.setMaxSize=function(t){for(this.max=t;this.order.length>this.max;){var e=this._getAndRemoveByKey(this.order[0]);e&&this.onRemove(e);}return this},U.prototype.filter=function(t){var e=[];for(var i in this.data)for(var o=0,r=this.data[i];o1||(Math.abs(i)>1&&(1===Math.abs(i+r)?i+=r:1===Math.abs(i-r)&&(i-=r)),e.dem&&t.dem&&(t.dem.backfillBorder(e.dem,i,o),t.neighboringTiles&&t.neighboringTiles[a]&&(t.neighboringTiles[a].backfilled=!0)));}},i.prototype.getTile=function(t){return this.getTileByID(t.key)},i.prototype.getTileByID=function(t){return this._tiles[t]},i.prototype._retainLoadedChildren=function(t,e,i,o){for(var r in this._tiles){var a=this._tiles[r];if(!(o[r]||!a.hasData()||a.tileID.overscaledZ<=e||a.tileID.overscaledZ>i)){for(var n=a.tileID;a&&a.tileID.overscaledZ>e+1;){var s=a.tileID.scaledTo(a.tileID.overscaledZ-1);(a=this._tiles[s.key])&&a.hasData()&&(n=s);}for(var l=n;l.overscaledZ>e;)if(t[(l=l.scaledTo(l.overscaledZ-1)).key]){o[n.key]=n;break}}}},i.prototype.findLoadedParent=function(t,e){if(t.key in this._loadedParentTiles){var i=this._loadedParentTiles[t.key];return i&&i.tileID.overscaledZ>=e?i:null}for(var o=t.overscaledZ-1;o>=e;o--){var r=t.scaledTo(o),a=this._getLoadedTile(r);if(a)return a}},i.prototype._getLoadedTile=function(t){var e=this._tiles[t.key];return e&&e.hasData()?e:this._cache.getByKey(t.wrapped().key)},i.prototype.updateCacheSize=function(t){var e=Math.ceil(t.width/this._source.tileSize)+1,i=Math.ceil(t.height/this._source.tileSize)+1,o=Math.floor(e*i*5),r=\"number\"==typeof this._maxTileCacheSize?Math.min(this._maxTileCacheSize,o):o;this._cache.setMaxSize(r);},i.prototype.handleWrapJump=function(t){var e=Math.round((t-(void 0===this._prevLng?t:this._prevLng))/360);if(this._prevLng=t,e){var i={};for(var o in this._tiles){var r=this._tiles[o];r.tileID=r.tileID.unwrapTo(r.tileID.wrap+e),i[r.tileID.key]=r;}for(var a in this._tiles=i,this._timers)clearTimeout(this._timers[a]),delete this._timers[a];for(var n in this._tiles)this._setTileReloadTimer(n,this._tiles[n]);}},i.prototype.update=function(e){var o=this;if(this.transform=e,this._sourceLoaded&&!this._paused){var r;this.updateCacheSize(e),this.handleWrapJump(this.transform.center.lng),this._coveredTiles={},this.used?this._source.tileID?r=e.getVisibleUnwrappedCoordinates(this._source.tileID).map((function(e){return new t.OverscaledTileID(e.canonical.z,e.wrap,e.canonical.z,e.canonical.x,e.canonical.y)})):(r=e.coveringTiles({tileSize:this._source.tileSize,minzoom:this._source.minzoom,maxzoom:this._source.maxzoom,roundZoom:this._source.roundZoom,reparseOverscaled:this._source.reparseOverscaled}),this._source.hasTile&&(r=r.filter((function(t){return o._source.hasTile(t)})))):r=[];var a=e.coveringZoomLevel(this._source),n=Math.max(a-i.maxOverzooming,this._source.minzoom),s=Math.max(a+i.maxUnderzooming,this._source.minzoom),l=this._updateRetainedTiles(r,a);if(Mt(this._source.type)){for(var c={},u={},h=0,p=Object.keys(l);hthis._source.maxzoom){var m=_.children(this._source.maxzoom)[0],g=this.getTile(m);if(g&&g.hasData()){o[m.key]=m;continue}}else {var v=_.children(this._source.maxzoom);if(o[v[0].key]&&o[v[1].key]&&o[v[2].key]&&o[v[3].key])continue}for(var y=f.wasRequested(),x=_.overscaledZ-1;x>=a;--x){var b=_.scaledTo(x);if(r[b.key])break;if(r[b.key]=!0,!(f=this.getTile(b))&&y&&(f=this._addTile(b)),f&&(o[b.key]=b,y=f.wasRequested(),f.hasData()))break}}}return o},i.prototype._updateLoadedParentTileCache=function(){for(var t in this._loadedParentTiles={},this._tiles){for(var e=[],i=void 0,o=this._tiles[t].tileID;o.overscaledZ>0;){if(o.key in this._loadedParentTiles){i=this._loadedParentTiles[o.key];break}e.push(o.key);var r=o.scaledTo(o.overscaledZ-1);if(i=this._getLoadedTile(r))break;o=r;}for(var a=0,n=e;a0||(e.hasData()&&\"reloading\"!==e.state?this._cache.add(e.tileID,e,e.getExpiryTimeout()):(e.aborted=!0,this._abortTile(e),this._unloadTile(e))));},i.prototype.clearTiles=function(){for(var t in this._shouldReloadOnResume=!1,this._paused=!1,this._tiles)this._removeTile(t);this._cache.reset();},i.prototype.tilesIn=function(e,i,o){var r=this,a=[],n=this.transform;if(!n)return a;for(var s=o?n.getCameraQueryGeometry(e):e,l=e.map((function(t){return n.pointCoordinate(t)})),c=s.map((function(t){return n.pointCoordinate(t)})),u=this.getIds(),h=1/0,p=1/0,d=-1/0,_=-1/0,f=0,m=c;f=0&&g[1].y+m>=0){var v=l.map((function(t){return s.getTilePoint(t)})),y=c.map((function(t){return s.getTilePoint(t)}));a.push({tile:o,tileID:s,queryGeometry:v,cameraQueryGeometry:y,scale:f});}}},y=0;y=t.browser.now())return !0}return !1},i.prototype.setFeatureState=function(t,e,i){this._state.updateState(t=t||\"_geojsonTileLayer\",e,i);},i.prototype.removeFeatureState=function(t,e,i){this._state.removeFeatureState(t=t||\"_geojsonTileLayer\",e,i);},i.prototype.getFeatureState=function(t,e){return this._state.getState(t=t||\"_geojsonTileLayer\",e)},i.prototype.setDependencies=function(t,e,i){var o=this._tiles[t];o&&o.setDependencies(e,i);},i.prototype.reloadTilesForDependencies=function(t,e){for(var i in this._tiles)this._tiles[i].hasDependency(t,e)&&this._reloadTile(i,\"reloading\");this._cache.filter((function(i){return !i.hasDependency(t,e)}));},i}(t.Evented);function At(t,e){var i=Math.abs(2*t.wrap)-+(t.wrap<0),o=Math.abs(2*e.wrap)-+(e.wrap<0);return t.overscaledZ-e.overscaledZ||o-i||e.canonical.y-t.canonical.y||e.canonical.x-t.canonical.x}function Mt(t){return \"raster\"===t||\"image\"===t||\"video\"===t}function Lt(){return new t.window.Worker(Kr.workerUrl)}Dt.maxOverzooming=10,Dt.maxUnderzooming=3;var Rt=\"mapboxgl_preloaded_worker_pool\",kt=function(){this.active={};};kt.prototype.acquire=function(t){if(!this.workers)for(this.workers=[];this.workers.length0?(r-n)/s:0;return this.points[a].mult(1-l).add(this.points[i].mult(l))};var Yt=function(t,e,i){var o=this.boxCells=[],r=this.circleCells=[];this.xCellCount=Math.ceil(t/i),this.yCellCount=Math.ceil(e/i);for(var a=0;a=-e[0]&&i<=e[0]&&o>=-e[1]&&o<=e[1]}function ie(e,i,o,r,a,n,s,l){var c=r?e.textSizeData:e.iconSizeData,u=t.evaluateSizeForZoom(c,o.transform.zoom),h=[256/o.width*2+1,256/o.height*2+1],p=r?e.text.dynamicLayoutVertexArray:e.icon.dynamicLayoutVertexArray;p.clear();for(var d=e.lineVertexArray,_=r?e.text.placedSymbolArray:e.icon.placedSymbolArray,f=o.transform.width/o.transform.height,m=!1,g=0;g<_.length;g++){var v=_.get(g);if(v.hidden||v.writingMode===t.WritingMode.vertical&&!m)ce(v.numGlyphs,p);else {m=!1;var y=[v.anchorX,v.anchorY,0,1];if(t.transformMat4(y,y,i),ee(y,h)){var x=te(o.transform.cameraToCenterDistance,y[3]),b=t.evaluateSizeForFeature(c,u,v),w=s?b/x:b*x,T=new t.Point(v.anchorX,v.anchorY),E=$t(T,a).point,I={},P=ae(v,w,!1,l,i,a,n,e.glyphOffsetArray,d,p,E,T,I,f);m=P.useVertical,(P.notEnoughRoom||m||P.needsFlipping&&ae(v,w,!0,l,i,a,n,e.glyphOffsetArray,d,p,E,T,I,f).notEnoughRoom)&&ce(v.numGlyphs,p);}else ce(v.numGlyphs,p);}}r?e.text.dynamicLayoutVertexBuffer.updateData(p):e.icon.dynamicLayoutVertexBuffer.updateData(p);}function oe(t,e,i,o,r,a,n,s,l,c,u){var h=s.glyphStartIndex+s.numGlyphs,p=s.lineStartIndex,d=s.lineStartIndex+s.lineLength,_=e.getoffsetX(s.glyphStartIndex),f=e.getoffsetX(h-1),m=se(t*_,i,o,r,a,n,s.segment,p,d,l,c,u);if(!m)return null;var g=se(t*f,i,o,r,a,n,s.segment,p,d,l,c,u);return g?{first:m,last:g}:null}function re(e,i,o,r){return e===t.WritingMode.horizontal&&Math.abs(o.y-i.y)>Math.abs(o.x-i.x)*r?{useVertical:!0}:(e===t.WritingMode.vertical?i.yo.x)?{needsFlipping:!0}:null}function ae(e,i,o,r,a,n,s,l,c,u,h,p,d,_){var f,m=i/24,g=e.lineOffsetX*m,v=e.lineOffsetY*m;if(e.numGlyphs>1){var y=e.glyphStartIndex+e.numGlyphs,x=e.lineStartIndex,b=e.lineStartIndex+e.lineLength,w=oe(m,l,g,v,o,h,p,e,c,n,d);if(!w)return {notEnoughRoom:!0};var T=$t(w.first.point,s).point,E=$t(w.last.point,s).point;if(r&&!o){var I=re(e.writingMode,T,E,_);if(I)return I}f=[w.first];for(var P=e.glyphStartIndex+1;P0?D.point:ne(p,z,S,1,a),M=re(e.writingMode,S,A,_);if(M)return M}var L=se(m*l.getoffsetX(e.glyphStartIndex),g,v,o,h,p,e.segment,e.lineStartIndex,e.lineStartIndex+e.lineLength,c,n,d);if(!L)return {notEnoughRoom:!0};f=[L];}for(var R=0,k=f;R0?1:-1,f=0;r&&(_*=-1,f=Math.PI),_<0&&(f+=Math.PI);for(var m=_>0?l+s:l+s+1,g=a,v=a,y=0,x=0,b=Math.abs(d),w=[];y+x<=b;){if((m+=_)=c)return null;if(v=g,w.push(g),void 0===(g=p[m])){var T=new t.Point(u.getx(m),u.gety(m)),E=$t(T,h);if(E.signedDistanceFromCamera>0)g=p[m]=E.point;else {var I=m-_;g=ne(0===y?n:new t.Point(u.getx(I),u.gety(I)),T,v,b-y+1,h);}}y+=x,x=v.dist(g);}var P=(b-y)/x,S=g.sub(v),C=S.mult(P)._add(v);C._add(S._unit()._perp()._mult(o*_));var z=f+Math.atan2(g.y-v.y,g.x-v.x);return w.push(C),{point:C,angle:z,path:w}}Yt.prototype.keysLength=function(){return this.boxKeys.length+this.circleKeys.length},Yt.prototype.insert=function(t,e,i,o,r){this._forEachCell(e,i,o,r,this._insertBoxCell,this.boxUid++),this.boxKeys.push(t),this.bboxes.push(e),this.bboxes.push(i),this.bboxes.push(o),this.bboxes.push(r);},Yt.prototype.insertCircle=function(t,e,i,o){this._forEachCell(e-o,i-o,e+o,i+o,this._insertCircleCell,this.circleUid++),this.circleKeys.push(t),this.circles.push(e),this.circles.push(i),this.circles.push(o);},Yt.prototype._insertBoxCell=function(t,e,i,o,r,a){this.boxCells[r].push(a);},Yt.prototype._insertCircleCell=function(t,e,i,o,r,a){this.circleCells[r].push(a);},Yt.prototype._query=function(t,e,i,o,r,a){if(i<0||t>this.width||o<0||e>this.height)return !r&&[];var n=[];if(t<=0&&e<=0&&this.width<=i&&this.height<=o){if(r)return !0;for(var s=0;s0:n},Yt.prototype._queryCircle=function(t,e,i,o,r){var a=t-i,n=t+i,s=e-i,l=e+i;if(n<0||a>this.width||l<0||s>this.height)return !o&&[];var c=[];return this._forEachCell(a,s,n,l,this._queryCellCircle,c,{hitTest:o,circle:{x:t,y:e,radius:i},seenUids:{box:{},circle:{}}},r),o?c.length>0:c},Yt.prototype.query=function(t,e,i,o,r){return this._query(t,e,i,o,!1,r)},Yt.prototype.hitTest=function(t,e,i,o,r){return this._query(t,e,i,o,!0,r)},Yt.prototype.hitTestCircle=function(t,e,i,o){return this._queryCircle(t,e,i,!0,o)},Yt.prototype._queryCell=function(t,e,i,o,r,a,n,s){var l=n.seenUids,c=this.boxCells[r];if(null!==c)for(var u=this.bboxes,h=0,p=c;h=u[_+0]&&o>=u[_+1]&&(!s||s(this.boxKeys[d]))){if(n.hitTest)return a.push(!0),!0;a.push({key:this.boxKeys[d],x1:u[_],y1:u[_+1],x2:u[_+2],y2:u[_+3]});}}}var f=this.circleCells[r];if(null!==f)for(var m=this.circles,g=0,v=f;gn*n+s*s},Yt.prototype._circleAndRectCollide=function(t,e,i,o,r,a,n){var s=(a-o)/2,l=Math.abs(t-(o+s));if(l>s+i)return !1;var c=(n-r)/2,u=Math.abs(e-(r+c));if(u>c+i)return !1;if(l<=s||u<=c)return !0;var h=l-s,p=u-c;return h*h+p*p<=i*i};var le=new Float32Array([-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0]);function ce(t,e){for(var i=0;i=1;A--)D.push(C.path[A]);for(var M=1;M0){for(var B=D[0].clone(),O=D[0].clone(),F=1;F=I.x&&O.x<=P.x&&B.y>=I.y&&O.y<=P.y?[D]:O.xP.x||O.yP.y?[]:t.clipLine([D],I.x,I.y,P.x,P.y);}for(var U=0,N=k;U=this.screenRightBoundary||o<100||e>this.screenBottomBoundary},he.prototype.isInsideGrid=function(t,e,i,o){return i>=0&&t=0&&e0?(this.prevPlacement&&this.prevPlacement.variableOffsets[h.crossTileID]&&this.prevPlacement.placements[h.crossTileID]&&this.prevPlacement.placements[h.crossTileID].text&&(f=this.prevPlacement.variableOffsets[h.crossTileID].anchor),this.variableOffsets[h.crossTileID]={textOffset:m,width:i,height:o,anchor:t,textBoxScale:r,prevAnchor:f},this.markUsedJustification(p,t,h,d),p.allowVerticalPlacement&&(this.markUsedOrientation(p,d,h),this.placedOrientations[h.crossTileID]=d),{shift:g,placedGlyphBoxes:v}):void 0},be.prototype.placeLayerBucketPart=function(e,i,o){var r=this,a=e.parameters,n=a.bucket,s=a.layout,l=a.posMatrix,c=a.textLabelPlaneMatrix,u=a.labelToScreenMatrix,h=a.textPixelRatio,p=a.holdingForFade,d=a.collisionBoxArray,_=a.partiallyEvaluatedTextSize,f=a.collisionGroup,m=s.get(\"text-optional\"),g=s.get(\"icon-optional\"),v=s.get(\"text-allow-overlap\"),y=s.get(\"icon-allow-overlap\"),x=\"map\"===s.get(\"text-rotation-alignment\"),b=\"map\"===s.get(\"text-pitch-alignment\"),w=\"none\"!==s.get(\"icon-text-fit\"),T=\"viewport-y\"===s.get(\"symbol-z-order\"),E=v&&(y||!n.hasIconData()||g),I=y&&(v||!n.hasTextData()||m);!n.collisionArrays&&d&&n.deserializeCollisionBoxes(d);var P=function(e,a){if(!i[e.crossTileID])if(p)r.placements[e.crossTileID]=new fe(!1,!1,!1);else {var d,T=!1,P=!1,S=!0,C=null,z={box:null,offscreen:null},D={box:null,offscreen:null},A=null,M=null,L=0,R=0,k=0;a.textFeatureIndex?L=a.textFeatureIndex:e.useRuntimeCollisionCircles&&(L=e.featureIndex),a.verticalTextFeatureIndex&&(R=a.verticalTextFeatureIndex);var B=a.textBox;if(B){var O=function(i){var o=t.WritingMode.horizontal;if(n.allowVerticalPlacement&&!i&&r.prevPlacement){var a=r.prevPlacement.placedOrientations[e.crossTileID];a&&(r.placedOrientations[e.crossTileID]=a,r.markUsedOrientation(n,o=a,e));}return o},F=function(i,o){if(n.allowVerticalPlacement&&e.numVerticalGlyphVertices>0&&a.verticalTextBox)for(var r=0,s=n.writingModes;r0&&(U=U.filter((function(t){return t!==N.anchor}))).unshift(N.anchor);}var Z=function(t,i,o){for(var a=t.x2-t.x1,s=t.y2-t.y1,c=e.textBoxScale,u=w&&!y?i:null,p={box:[],offscreen:!1},d=v?2*U.length:U.length,_=0;_=U.length,e,n,o,u);if(m&&(p=m.placedGlyphBoxes)&&p.box&&p.box.length){T=!0,C=m.shift;break}}return p};F((function(){return Z(B,a.iconBox,t.WritingMode.horizontal)}),(function(){var i=a.verticalTextBox;return n.allowVerticalPlacement&&!(z&&z.box&&z.box.length)&&e.numVerticalGlyphVertices>0&&i?Z(i,a.verticalIconBox,t.WritingMode.vertical):{box:null,offscreen:null}})),z&&(T=z.box,S=z.offscreen);var q=O(z&&z.box);if(!T&&r.prevPlacement){var j=r.prevPlacement.variableOffsets[e.crossTileID];j&&(r.variableOffsets[e.crossTileID]=j,r.markUsedJustification(n,j.anchor,e,q));}}else {var V=function(t,i){var o=r.collisionIndex.placeCollisionBox(t,v,h,l,f.predicate);return o&&o.box&&o.box.length&&(r.markUsedOrientation(n,i,e),r.placedOrientations[e.crossTileID]=i),o};F((function(){return V(B,t.WritingMode.horizontal)}),(function(){var i=a.verticalTextBox;return n.allowVerticalPlacement&&e.numVerticalGlyphVertices>0&&i?V(i,t.WritingMode.vertical):{box:null,offscreen:null}})),O(z&&z.box&&z.box.length);}}if(T=(d=z)&&d.box&&d.box.length>0,S=d&&d.offscreen,e.useRuntimeCollisionCircles){var G=n.text.placedSymbolArray.get(e.centerJustifiedTextSymbolIndex),W=t.evaluateSizeForFeature(n.textSizeData,_,G),X=s.get(\"text-padding\");A=r.collisionIndex.placeCollisionCircles(v,G,n.lineVertexArray,n.glyphOffsetArray,W,l,c,u,o,b,f.predicate,e.collisionCircleDiameter,X),T=v||A.circles.length>0&&!A.collisionDetected,S=S&&A.offscreen;}if(a.iconFeatureIndex&&(k=a.iconFeatureIndex),a.iconBox){var H=function(t){var e=w&&C?xe(t,C.x,C.y,x,b,r.transform.angle):t;return r.collisionIndex.placeCollisionBox(e,y,h,l,f.predicate)};P=D&&D.box&&D.box.length&&a.verticalIconBox?(M=H(a.verticalIconBox)).box.length>0:(M=H(a.iconBox)).box.length>0,S=S&&M.offscreen;}var K=m||0===e.numHorizontalGlyphVertices&&0===e.numVerticalGlyphVertices,Y=g||0===e.numIconVertices;if(K||Y?Y?K||(P=P&&T):T=P&&T:P=T=P&&T,T&&d&&d.box&&r.collisionIndex.insertCollisionBox(d.box,s.get(\"text-ignore-placement\"),n.bucketInstanceId,D&&D.box&&R?R:L,f.ID),P&&M&&r.collisionIndex.insertCollisionBox(M.box,s.get(\"icon-ignore-placement\"),n.bucketInstanceId,k,f.ID),A&&(T&&r.collisionIndex.insertCollisionCircles(A.circles,s.get(\"text-ignore-placement\"),n.bucketInstanceId,L,f.ID),o)){var J=n.bucketInstanceId,Q=r.collisionCircleArrays[J];void 0===Q&&(Q=r.collisionCircleArrays[J]=new me);for(var $=0;$=0;--C){var z=S[C];P(n.symbolInstances.get(z),n.collisionArrays[z]);}else for(var D=e.symbolInstanceStart;D=0&&(e.text.placedSymbolArray.get(l).crossTileID=a>=0&&l!==a?0:o.crossTileID);}},be.prototype.markUsedOrientation=function(e,i,o){for(var r=i===t.WritingMode.horizontal||i===t.WritingMode.horizontalOnly?i:0,a=i===t.WritingMode.vertical?i:0,n=0,s=[o.leftJustifiedTextSymbolIndex,o.centerJustifiedTextSymbolIndex,o.rightJustifiedTextSymbolIndex];n0,v=r.placedOrientations[a.crossTileID],y=v===t.WritingMode.vertical,x=v===t.WritingMode.horizontal||v===t.WritingMode.horizontalOnly;if(s>0||l>0){var b=De(m.text);_(e.text,s,y?Ae:b),_(e.text,l,x?Ae:b);var w=m.text.isHidden();[a.rightJustifiedTextSymbolIndex,a.centerJustifiedTextSymbolIndex,a.leftJustifiedTextSymbolIndex].forEach((function(t){t>=0&&(e.text.placedSymbolArray.get(t).hidden=w||y?1:0);})),a.verticalPlacedTextSymbolIndex>=0&&(e.text.placedSymbolArray.get(a.verticalPlacedTextSymbolIndex).hidden=w||x?1:0);var T=r.variableOffsets[a.crossTileID];T&&r.markUsedJustification(e,T.anchor,a,v);var E=r.placedOrientations[a.crossTileID];E&&(r.markUsedJustification(e,\"left\",a,E),r.markUsedOrientation(e,E,a));}if(g){var I=De(m.icon),P=!(p&&a.verticalPlacedIconSymbolIndex&&y);a.placedIconSymbolIndex>=0&&(_(e.icon,a.numIconVertices,P?I:Ae),e.icon.placedSymbolArray.get(a.placedIconSymbolIndex).hidden=m.icon.isHidden()),a.verticalPlacedIconSymbolIndex>=0&&(_(e.icon,a.numVerticalIconVertices,P?Ae:I),e.icon.placedSymbolArray.get(a.verticalPlacedIconSymbolIndex).hidden=m.icon.isHidden());}if(e.hasIconCollisionBoxData()||e.hasTextCollisionBoxData()){var S=e.collisionArrays[o];if(S){var C=new t.Point(0,0);if(S.textBox||S.verticalTextBox){var z=!0;if(c){var D=r.variableOffsets[f];D?(C=ye(D.anchor,D.width,D.height,D.textOffset,D.textBoxScale),u&&C._rotate(h?r.transform.angle:-r.transform.angle)):z=!1;}S.textBox&&we(e.textCollisionBox.collisionVertexArray,m.text.placed,!z||y,C.x,C.y),S.verticalTextBox&&we(e.textCollisionBox.collisionVertexArray,m.text.placed,!z||x,C.x,C.y);}var A=Boolean(!x&&S.verticalIconBox);S.iconBox&&we(e.iconCollisionBox.collisionVertexArray,m.icon.placed,A,p?C.x:0,p?C.y:0),S.verticalIconBox&&we(e.iconCollisionBox.collisionVertexArray,m.icon.placed,!A,p?C.x:0,p?C.y:0);}}},m=0;mt},be.prototype.setStale=function(){this.stale=!0;};var Te=Math.pow(2,25),Ee=Math.pow(2,24),Ie=Math.pow(2,17),Pe=Math.pow(2,16),Se=Math.pow(2,9),Ce=Math.pow(2,8),ze=Math.pow(2,1);function De(t){if(0===t.opacity&&!t.placed)return 0;if(1===t.opacity&&t.placed)return 4294967295;var e=t.placed?1:0,i=Math.floor(127*t.opacity);return i*Te+e*Ee+i*Ie+e*Pe+i*Se+e*Ce+i*ze+e}var Ae=0,Me=function(t){this._sortAcrossTiles=\"viewport-y\"!==t.layout.get(\"symbol-z-order\")&&void 0!==t.layout.get(\"symbol-sort-key\").constantOr(1),this._currentTileIndex=0,this._currentPartIndex=0,this._seenCrossTileIDs={},this._bucketParts=[];};Me.prototype.continuePlacement=function(t,e,i,o,r){for(var a=this._bucketParts;this._currentTileIndex2};this._currentPlacementIndex>=0;){var s=i[e[this._currentPlacementIndex]],l=this.placement.collisionIndex.transform.zoom;if(\"symbol\"===s.type&&(!s.minzoom||s.minzoom<=l)&&(!s.maxzoom||s.maxzoom>l)){if(this._inProgressLayer||(this._inProgressLayer=new Me(s)),this._inProgressLayer.continuePlacement(o[s.source],this.placement,this._showCollisionBoxes,s,n))return;delete this._inProgressLayer;}this._currentPlacementIndex--;}this._done=!0;},Le.prototype.commit=function(t){return this.placement.commit(t),this.placement};var Re=512/t.EXTENT/2,ke=function(t,e,i){this.tileID=t,this.indexedSymbolInstances={},this.bucketInstanceId=i;for(var o=0;ot.overscaledZ)for(var s in n){var l=n[s];l.tileID.isChildOf(t)&&l.findMatches(e.symbolInstances,t,r);}else {var c=n[t.scaledTo(Number(a)).key];c&&c.findMatches(e.symbolInstances,t,r);}}for(var u=0;u1?\"@2x\":\"\",l=t.getJSON(i.transformRequest(i.normalizeSpriteURL(e,s,\".json\"),t.ResourceType.SpriteJSON),(function(t,e){l=null,n||(n=t,r=e,u());})),c=t.getImage(i.transformRequest(i.normalizeSpriteURL(e,s,\".png\"),t.ResourceType.SpriteImage),(function(t,e){c=null,n||(n=t,a=e,u());}));function u(){if(n)o(n);else if(r&&a){var e=t.browser.getImageData(a),i={};for(var s in r){var l=r[s],c=l.width,u=l.height,h=l.x,p=l.y,d=l.sdf,_=l.pixelRatio,f=l.stretchX,m=l.stretchY,g=l.content,v=new t.RGBAImage({width:c,height:u});t.RGBAImage.copy(e,v,{x:h,y:p},{x:0,y:0},{width:c,height:u}),i[s]={data:v,pixelRatio:_,sdf:d,stretchX:f,stretchY:m,content:g};}o(null,i);}}return {cancel:function(){l&&(l.cancel(),l=null),c&&(c.cancel(),c=null);}}}(e,this.map._requestManager,(function(e,o){if(i._spriteRequest=null,e)i.fire(new t.ErrorEvent(e));else if(o)for(var r in o)i.imageManager.addImage(r,o[r]);i.imageManager.setLoaded(!0),i._availableImages=i.imageManager.listImages(),i.dispatcher.broadcast(\"setImages\",i._availableImages),i.fire(new t.Event(\"data\",{dataType:\"style\"}));}));},i.prototype._validateLayer=function(e){var i=this.sourceCaches[e.source];if(i){var o=e.sourceLayer;if(o){var r=i.getSource();(\"geojson\"===r.type||r.vectorLayerIds&&-1===r.vectorLayerIds.indexOf(o))&&this.fire(new t.ErrorEvent(new Error('Source layer \"'+o+'\" does not exist on source \"'+r.id+'\" as specified by style layer \"'+e.id+'\"')));}}},i.prototype.loaded=function(){if(!this._loaded)return !1;if(Object.keys(this._updatedSources).length)return !1;for(var t in this.sourceCaches)if(!this.sourceCaches[t].loaded())return !1;return !!this.imageManager.isLoaded()},i.prototype._serializeLayers=function(t){for(var e=[],i=0,o=t;i0)throw new Error(\"Unimplemented: \"+r.map((function(t){return t.command})).join(\", \")+\".\");return o.forEach((function(t){\"setTransition\"!==t.command&&i[t.command].apply(i,t.args);})),this.stylesheet=e,!0},i.prototype.addImage=function(e,i){if(this.getImage(e))return this.fire(new t.ErrorEvent(new Error(\"An image with this name already exists.\")));this.imageManager.addImage(e,i),this._afterImageUpdated(e);},i.prototype.updateImage=function(t,e){this.imageManager.updateImage(t,e);},i.prototype.getImage=function(t){return this.imageManager.getImage(t)},i.prototype.removeImage=function(e){if(!this.getImage(e))return this.fire(new t.ErrorEvent(new Error(\"No image with this name exists.\")));this.imageManager.removeImage(e),this._afterImageUpdated(e);},i.prototype._afterImageUpdated=function(e){this._availableImages=this.imageManager.listImages(),this._changedImages[e]=!0,this._changed=!0,this.dispatcher.broadcast(\"setImages\",this._availableImages),this.fire(new t.Event(\"data\",{dataType:\"style\"}));},i.prototype.listImages=function(){return this._checkLoaded(),this.imageManager.listImages()},i.prototype.addSource=function(e,i,o){var r=this;if(void 0===o&&(o={}),this._checkLoaded(),void 0!==this.sourceCaches[e])throw new Error(\"There is already a source with this ID\");if(!i.type)throw new Error(\"The type property must be defined, but only the following properties were given: \"+Object.keys(i).join(\", \")+\".\");if(!([\"vector\",\"raster\",\"geojson\",\"video\",\"image\"].indexOf(i.type)>=0&&this._validate(t.validateStyle.source,\"sources.\"+e,i,null,o))){this.map&&this.map._collectResourceTiming&&(i.collectResourceTiming=!0);var a=this.sourceCaches[e]=new Dt(e,i,this.dispatcher);a.style=this,a.setEventedParent(this,(function(){return {isSourceLoaded:r.loaded(),source:a.serialize(),sourceId:e}})),a.onAdd(this.map),this._changed=!0;}},i.prototype.removeSource=function(e){if(this._checkLoaded(),void 0===this.sourceCaches[e])throw new Error(\"There is no source with this ID\");for(var i in this._layers)if(this._layers[i].source===e)return this.fire(new t.ErrorEvent(new Error('Source \"'+e+'\" cannot be removed while layer \"'+i+'\" is using it.')));var o=this.sourceCaches[e];delete this.sourceCaches[e],delete this._updatedSources[e],o.fire(new t.Event(\"data\",{sourceDataType:\"metadata\",dataType:\"source\",sourceId:e})),o.setEventedParent(null),o.clearTiles(),o.onRemove&&o.onRemove(this.map),this._changed=!0;},i.prototype.setGeoJSONSourceData=function(t,e){this._checkLoaded(),this.sourceCaches[t].getSource().setData(e),this._changed=!0;},i.prototype.getSource=function(t){return this.sourceCaches[t]&&this.sourceCaches[t].getSource()},i.prototype.addLayer=function(e,i,o){void 0===o&&(o={}),this._checkLoaded();var r=e.id;if(this.getLayer(r))this.fire(new t.ErrorEvent(new Error('Layer with id \"'+r+'\" already exists on this map')));else {var a;if(\"custom\"===e.type){if(Ue(this,t.validateCustomStyleLayer(e)))return;a=t.createStyleLayer(e);}else {if(\"object\"==typeof e.source&&(this.addSource(r,e.source),e=t.clone$1(e),e=t.extend(e,{source:r})),this._validate(t.validateStyle.layer,\"layers.\"+r,e,{arrayIndex:-1},o))return;a=t.createStyleLayer(e),this._validateLayer(a),a.setEventedParent(this,{layer:{id:r}}),this._serializedLayers[a.id]=a.serialize();}var n=i?this._order.indexOf(i):this._order.length;if(i&&-1===n)this.fire(new t.ErrorEvent(new Error('Layer with id \"'+i+'\" does not exist on this map.')));else {if(this._order.splice(n,0,r),this._layerOrderChanged=!0,this._layers[r]=a,this._removedLayers[r]&&a.source&&\"custom\"!==a.type){var s=this._removedLayers[r];delete this._removedLayers[r],s.type!==a.type?this._updatedSources[a.source]=\"clear\":(this._updatedSources[a.source]=\"reload\",this.sourceCaches[a.source].pause());}this._updateLayer(a),a.onAdd&&a.onAdd(this.map);}}},i.prototype.moveLayer=function(e,i){if(this._checkLoaded(),this._changed=!0,this._layers[e]){if(e!==i){var o=this._order.indexOf(e);this._order.splice(o,1);var r=i?this._order.indexOf(i):this._order.length;i&&-1===r?this.fire(new t.ErrorEvent(new Error('Layer with id \"'+i+'\" does not exist on this map.'))):(this._order.splice(r,0,e),this._layerOrderChanged=!0);}}else this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be moved.\")));},i.prototype.removeLayer=function(e){this._checkLoaded();var i=this._layers[e];if(i){i.setEventedParent(null);var o=this._order.indexOf(e);this._order.splice(o,1),this._layerOrderChanged=!0,this._changed=!0,this._removedLayers[e]=i,delete this._layers[e],delete this._serializedLayers[e],delete this._updatedLayers[e],delete this._updatedPaintProps[e],i.onRemove&&i.onRemove(this.map);}else this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be removed.\")));},i.prototype.getLayer=function(t){return this._layers[t]},i.prototype.hasLayer=function(t){return t in this._layers},i.prototype.setLayerZoomRange=function(e,i,o){this._checkLoaded();var r=this.getLayer(e);r?r.minzoom===i&&r.maxzoom===o||(null!=i&&(r.minzoom=i),null!=o&&(r.maxzoom=o),this._updateLayer(r)):this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot have zoom extent.\")));},i.prototype.setFilter=function(e,i,o){void 0===o&&(o={}),this._checkLoaded();var r=this.getLayer(e);if(r){if(!t.deepEqual(r.filter,i))return null==i?(r.filter=void 0,void this._updateLayer(r)):void(this._validate(t.validateStyle.filter,\"layers.\"+r.id+\".filter\",i,null,o)||(r.filter=t.clone$1(i),this._updateLayer(r)))}else this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be filtered.\")));},i.prototype.getFilter=function(e){return t.clone$1(this.getLayer(e).filter)},i.prototype.setLayoutProperty=function(e,i,o,r){void 0===r&&(r={}),this._checkLoaded();var a=this.getLayer(e);a?t.deepEqual(a.getLayoutProperty(i),o)||(a.setLayoutProperty(i,o,r),this._updateLayer(a)):this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be styled.\")));},i.prototype.getLayoutProperty=function(e,i){var o=this.getLayer(e);if(o)return o.getLayoutProperty(i);this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style.\")));},i.prototype.setPaintProperty=function(e,i,o,r){void 0===r&&(r={}),this._checkLoaded();var a=this.getLayer(e);a?t.deepEqual(a.getPaintProperty(i),o)||(a.setPaintProperty(i,o,r)&&this._updateLayer(a),this._changed=!0,this._updatedPaintProps[e]=!0):this.fire(new t.ErrorEvent(new Error(\"The layer '\"+e+\"' does not exist in the map's style and cannot be styled.\")));},i.prototype.getPaintProperty=function(t,e){return this.getLayer(t).getPaintProperty(e)},i.prototype.setFeatureState=function(e,i){this._checkLoaded();var o=e.source,r=e.sourceLayer,a=this.sourceCaches[o];if(void 0!==a){var n=a.getSource().type;\"geojson\"===n&&r?this.fire(new t.ErrorEvent(new Error(\"GeoJSON sources cannot have a sourceLayer parameter.\"))):\"vector\"!==n||r?(void 0===e.id&&this.fire(new t.ErrorEvent(new Error(\"The feature id parameter must be provided.\"))),a.setFeatureState(r,e.id,i)):this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")));}else this.fire(new t.ErrorEvent(new Error(\"The source '\"+o+\"' does not exist in the map's style.\")));},i.prototype.removeFeatureState=function(e,i){this._checkLoaded();var o=e.source,r=this.sourceCaches[o];if(void 0!==r){var a=r.getSource().type,n=\"vector\"===a?e.sourceLayer:void 0;\"vector\"!==a||n?i&&\"string\"!=typeof e.id&&\"number\"!=typeof e.id?this.fire(new t.ErrorEvent(new Error(\"A feature id is required to remove its specific state property.\"))):r.removeFeatureState(n,e.id,i):this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")));}else this.fire(new t.ErrorEvent(new Error(\"The source '\"+o+\"' does not exist in the map's style.\")));},i.prototype.getFeatureState=function(e){this._checkLoaded();var i=e.source,o=e.sourceLayer,r=this.sourceCaches[i];if(void 0!==r){if(\"vector\"!==r.getSource().type||o)return void 0===e.id&&this.fire(new t.ErrorEvent(new Error(\"The feature id parameter must be provided.\"))),r.getFeatureState(o,e.id);this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")));}else this.fire(new t.ErrorEvent(new Error(\"The source '\"+i+\"' does not exist in the map's style.\")));},i.prototype.getTransition=function(){return t.extend({duration:300,delay:0},this.stylesheet&&this.stylesheet.transition)},i.prototype.serialize=function(){return t.filterObject({version:this.stylesheet.version,name:this.stylesheet.name,metadata:this.stylesheet.metadata,light:this.stylesheet.light,center:this.stylesheet.center,zoom:this.stylesheet.zoom,bearing:this.stylesheet.bearing,pitch:this.stylesheet.pitch,sprite:this.stylesheet.sprite,glyphs:this.stylesheet.glyphs,transition:this.stylesheet.transition,sources:t.mapObject(this.sourceCaches,(function(t){return t.serialize()})),layers:this._serializeLayers(this._order)},(function(t){return void 0!==t}))},i.prototype._updateLayer=function(t){this._updatedLayers[t.id]=!0,t.source&&!this._updatedSources[t.source]&&\"raster\"!==this.sourceCaches[t.source].getSource().type&&(this._updatedSources[t.source]=\"reload\",this.sourceCaches[t.source].pause()),this._changed=!0;},i.prototype._flattenAndSortRenderedFeatures=function(t){for(var e=this,i=function(t){return \"fill-extrusion\"===e._layers[t].type},o={},r=[],a=this._order.length-1;a>=0;a--){var n=this._order[a];if(i(n)){o[n]=a;for(var s=0,l=t;s=0;d--){var _=this._order[d];if(i(_))for(var f=r.length-1;f>=0;f--){var m=r[f].feature;if(o[m.layer.id] 0.5) {gl_FragColor=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {gl_FragColor*=.1;}}\",\"attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;attribute vec2 a_shift;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);gl_Position.xy+=(a_extrude+a_shift)*u_extrude_scale*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;}\"),$e=gi(\"varying float v_radius;varying vec2 v_extrude;varying float v_perspective_ratio;varying float v_collision;void main() {float alpha=0.5*min(v_perspective_ratio,1.0);float stroke_radius=0.9*max(v_perspective_ratio,1.0);float distance_to_center=length(v_extrude);float distance_to_edge=abs(distance_to_center-v_radius);float opacity_t=smoothstep(-stroke_radius,0.0,-distance_to_edge);vec4 color=mix(vec4(0.0,0.0,1.0,0.5),vec4(1.0,0.0,0.0,1.0),v_collision);gl_FragColor=color*alpha*opacity_t;}\",\"attribute vec2 a_pos;attribute float a_radius;attribute vec2 a_flags;uniform mat4 u_matrix;uniform mat4 u_inv_matrix;uniform vec2 u_viewport_size;uniform float u_camera_to_center_distance;varying float v_radius;varying vec2 v_extrude;varying float v_perspective_ratio;varying float v_collision;vec3 toTilePosition(vec2 screenPos) {vec4 rayStart=u_inv_matrix*vec4(screenPos,-1.0,1.0);vec4 rayEnd =u_inv_matrix*vec4(screenPos, 1.0,1.0);rayStart.xyz/=rayStart.w;rayEnd.xyz /=rayEnd.w;highp float t=(0.0-rayStart.z)/(rayEnd.z-rayStart.z);return mix(rayStart.xyz,rayEnd.xyz,t);}void main() {vec2 quadCenterPos=a_pos;float radius=a_radius;float collision=a_flags.x;float vertexIdx=a_flags.y;vec2 quadVertexOffset=vec2(mix(-1.0,1.0,float(vertexIdx >=2.0)),mix(-1.0,1.0,float(vertexIdx >=1.0 && vertexIdx <=2.0)));vec2 quadVertexExtent=quadVertexOffset*radius;vec3 tilePos=toTilePosition(quadCenterPos);vec4 clipPos=u_matrix*vec4(tilePos,1.0);highp float camera_to_anchor_distance=clipPos.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);float padding_factor=1.2;v_radius=radius;v_extrude=quadVertexExtent*padding_factor;v_perspective_ratio=collision_perspective_ratio;v_collision=collision;gl_Position=vec4(clipPos.xyz/clipPos.w,1.0)+vec4(quadVertexExtent*padding_factor/u_viewport_size*2.0,0.0,0.0);}\"),ti=gi(\"uniform highp vec4 u_color;uniform sampler2D u_overlay;varying vec2 v_uv;void main() {vec4 overlay_color=texture2D(u_overlay,v_uv);gl_FragColor=mix(u_color,overlay_color,overlay_color.a);}\",\"attribute vec2 a_pos;varying vec2 v_uv;uniform mat4 u_matrix;uniform float u_overlay_scale;void main() {v_uv=a_pos/8192.0;gl_Position=u_matrix*vec4(a_pos*u_overlay_scale,0,1);}\"),ei=gi(\"#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float opacity\\ngl_FragColor=color*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float opacity\\ngl_Position=u_matrix*vec4(a_pos,0,1);}\"),ii=gi(\"varying vec2 v_pos;\\n#pragma mapbox: define highp vec4 outline_color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 outline_color\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=outline_color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;uniform vec2 u_world;varying vec2 v_pos;\\n#pragma mapbox: define highp vec4 outline_color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 outline_color\\n#pragma mapbox: initialize lowp float opacity\\ngl_Position=u_matrix*vec4(a_pos,0,1);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}\"),oi=gi(\"uniform vec2 u_texsize;uniform sampler2D u_image;uniform float u_fade;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=mix(color1,color2,u_fade)*alpha*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_world;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;gl_Position=u_matrix*vec4(a_pos,0,1);vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,a_pos);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}\"),ri=gi(\"uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_fade)*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileZoomRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileZoomRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileZoomRatio,a_pos);}\"),ai=gi(\"varying vec4 v_color;void main() {gl_FragColor=v_color;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;uniform lowp float u_opacity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec4 v_color;\\n#pragma mapbox: define highp float base\\n#pragma mapbox: define highp float height\\n#pragma mapbox: define highp vec4 color\\nvoid main() {\\n#pragma mapbox: initialize highp float base\\n#pragma mapbox: initialize highp float height\\n#pragma mapbox: initialize highp vec4 color\\nvec3 normal=a_normal_ed.xyz;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);gl_Position=u_matrix*vec4(a_pos,t > 0.0 ? height : base,1);float colorvalue=color.r*0.2126+color.g*0.7152+color.b*0.0722;v_color=vec4(0.0,0.0,0.0,1.0);vec4 ambientlight=vec4(0.03,0.03,0.03,1.0);color+=ambientlight;float directional=clamp(dot(normal/16384.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_color.r+=clamp(color.r*directional*u_lightcolor.r,mix(0.0,0.3,1.0-u_lightcolor.r),1.0);v_color.g+=clamp(color.g*directional*u_lightcolor.g,mix(0.0,0.3,1.0-u_lightcolor.g),1.0);v_color.b+=clamp(color.b*directional*u_lightcolor.b,mix(0.0,0.3,1.0-u_lightcolor.b),1.0);v_color*=u_opacity;}\"),ni=gi(\"uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\\n#pragma mapbox: define lowp float base\\n#pragma mapbox: define lowp float height\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float base\\n#pragma mapbox: initialize lowp float height\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);vec4 mixedColor=mix(color1,color2,u_fade);gl_FragColor=mixedColor*v_lighting;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform vec3 u_scale;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\\n#pragma mapbox: define lowp float base\\n#pragma mapbox: define lowp float height\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float base\\n#pragma mapbox: initialize lowp float height\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec3 normal=a_normal_ed.xyz;float edgedistance=a_normal_ed.w;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);float z=t > 0.0 ? height : base;gl_Position=u_matrix*vec4(a_pos,z,1);vec2 pos=normal.x==1.0 && normal.y==0.0 && normal.z==16384.0\\n? a_pos\\n: vec2(edgedistance,z*u_height_factor);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,pos);v_lighting=vec4(0.0,0.0,0.0,1.0);float directional=clamp(dot(normal/16383.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_lighting.rgb+=clamp(directional*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_lighting*=u_opacity;}\"),si=gi(\"#ifdef GL_ES\\nprecision highp float;\\n#endif\\nuniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;uniform vec4 u_unpack;float getElevation(vec2 coord,float bias) {vec4 data=texture2D(u_image,coord)*255.0;data.a=-1.0;return dot(data,u_unpack)/4.0;}void main() {vec2 epsilon=1.0/u_dimension;float a=getElevation(v_pos+vec2(-epsilon.x,-epsilon.y),0.0);float b=getElevation(v_pos+vec2(0,-epsilon.y),0.0);float c=getElevation(v_pos+vec2(epsilon.x,-epsilon.y),0.0);float d=getElevation(v_pos+vec2(-epsilon.x,0),0.0);float e=getElevation(v_pos,0.0);float f=getElevation(v_pos+vec2(epsilon.x,0),0.0);float g=getElevation(v_pos+vec2(-epsilon.x,epsilon.y),0.0);float h=getElevation(v_pos+vec2(0,epsilon.y),0.0);float i=getElevation(v_pos+vec2(epsilon.x,epsilon.y),0.0);float exaggerationFactor=u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;float exaggeration=u_zoom < 15.0 ? (u_zoom-15.0)*exaggerationFactor : 0.0;vec2 deriv=vec2((c+f+f+i)-(a+d+d+g),(g+h+h+i)-(a+b+b+c))/pow(2.0,exaggeration+(19.2562-u_zoom));gl_FragColor=clamp(vec4(deriv.x/2.0+0.5,deriv.y/2.0+0.5,1.0,1.0),0.0,1.0);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_dimension;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);highp vec2 epsilon=1.0/u_dimension;float scale=(u_dimension.x-2.0)/u_dimension.x;v_pos=(a_texture_pos/8192.0)*scale+epsilon;}\"),li=gi(\"uniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_latrange;uniform vec2 u_light;uniform vec4 u_shadow;uniform vec4 u_highlight;uniform vec4 u_accent;\\n#define PI 3.141592653589793\\nvoid main() {vec4 pixel=texture2D(u_image,v_pos);vec2 deriv=((pixel.rg*2.0)-1.0);float scaleFactor=cos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));float slope=atan(1.25*length(deriv)/scaleFactor);float aspect=deriv.x !=0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y > 0.0 ? 1.0 :-1.0);float intensity=u_light.x;float azimuth=u_light.y+PI;float base=1.875-intensity*1.75;float maxValue=0.5*PI;float scaledSlope=intensity !=0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent=cos(scaledSlope);vec4 accent_color=(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade=abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color=mix(u_shadow,u_highlight,shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);gl_FragColor=accent_color*(1.0-shade_color.a)+shade_color;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=a_texture_pos/8192.0;}\"),ci=gi(\"uniform lowp float u_device_pixel_ratio;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);gl_FragColor=color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform vec2 u_units_to_pixels;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_linesofar;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}\"),ui=gi(\"uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;varying highp vec2 v_uv;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color=texture2D(u_image,v_uv);gl_FragColor=color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\nattribute vec2 a_pos_normal;attribute vec4 a_data;attribute float a_uv_x;attribute float a_split_index;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_units_to_pixels;uniform float u_image_height;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp vec2 v_uv;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;highp float texel_height=1.0/u_image_height;highp float half_texel_height=0.5*texel_height;v_uv=vec2(a_uv_x,a_split_index*texel_height-half_texel_height);vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}\"),hi=gi(\"uniform lowp float u_device_pixel_ratio;uniform vec2 u_texsize;uniform float u_fade;uniform mediump vec3 u_scale;uniform sampler2D u_image;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;varying float v_width;\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileZoomRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;vec2 pattern_size_a=vec2(display_size_a.x*fromScale/tileZoomRatio,display_size_a.y);vec2 pattern_size_b=vec2(display_size_b.x*toScale/tileZoomRatio,display_size_b.y);float aspect_a=display_size_a.y/v_width;float aspect_b=display_size_b.y/v_width;float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float x_a=mod(v_linesofar/pattern_size_a.x*aspect_a,1.0);float x_b=mod(v_linesofar/pattern_size_b.x*aspect_b,1.0);float y=0.5*v_normal.y+0.5;vec2 texel_size=1.0/u_texsize;vec2 pos_a=mix(pattern_tl_a*texel_size-texel_size,pattern_br_a*texel_size+texel_size,vec2(x_a,y));vec2 pos_b=mix(pattern_tl_b*texel_size-texel_size,pattern_br_b*texel_size+texel_size,vec2(x_b,y));vec4 color=mix(texture2D(u_image,pos_a),texture2D(u_image,pos_b),u_fade);gl_FragColor=color*alpha*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\n#define LINE_DISTANCE_SCALE 2.0\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform vec2 u_units_to_pixels;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;varying float v_width;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_linesofar=a_linesofar;v_width2=vec2(outset,inset);v_width=floorwidth;}\"),pi=gi(\"uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;uniform float u_sdfgamma;uniform float u_mix;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float sdfdist_a=texture2D(u_image,v_tex_a).a;float sdfdist_b=texture2D(u_image,v_tex_b).a;float sdfdist=mix(sdfdist_a,sdfdist_b,u_mix);alpha*=smoothstep(0.5-u_sdfgamma/floorwidth,0.5+u_sdfgamma/floorwidth,sdfdist);gl_FragColor=color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\n#define LINE_DISTANCE_SCALE 2.0\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_patternscale_a;uniform float u_tex_y_a;uniform vec2 u_patternscale_b;uniform float u_tex_y_b;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_tex_a=vec2(a_linesofar*u_patternscale_a.x/floorwidth,normal.y*u_patternscale_a.y+u_tex_y_a);v_tex_b=vec2(a_linesofar*u_patternscale_b.x/floorwidth,normal.y*u_patternscale_b.y+u_tex_y_b);v_width2=vec2(outset,inset);}\"),di=gi(\"uniform float u_fade_t;uniform float u_opacity;uniform sampler2D u_image0;uniform sampler2D u_image1;varying vec2 v_pos0;varying vec2 v_pos1;uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;void main() {vec4 color0=texture2D(u_image0,v_pos0);vec4 color1=texture2D(u_image1,v_pos1);if (color0.a > 0.0) {color0.rgb=color0.rgb/color0.a;}if (color1.a > 0.0) {color1.rgb=color1.rgb/color1.a;}vec4 color=mix(color0,color1,u_fade_t);color.a*=u_opacity;vec3 rgb=color.rgb;rgb=vec3(dot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average=(color.r+color.g+color.b)/3.0;rgb+=(average-rgb)*u_saturation_factor;rgb=(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec=vec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec=vec3(u_brightness_high,u_brightness_high,u_brightness_high);gl_FragColor=vec4(mix(u_high_vec,u_low_vec,rgb)*color.a,color.a);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform float u_buffer_scale;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos0;varying vec2 v_pos1;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos0=(((a_texture_pos/8192.0)-0.5)/u_buffer_scale )+0.5;v_pos1=(v_pos0*u_scale_parent)+u_tl_parent;}\"),_i=gi(\"uniform sampler2D u_texture;varying vec2 v_tex;varying float v_fade_opacity;\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\nlowp float alpha=opacity*v_fade_opacity;gl_FragColor=texture2D(u_texture,v_tex)*alpha;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform highp float u_camera_to_center_distance;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform float u_fade_change;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform vec2 u_texsize;varying vec2 v_tex;varying float v_fade_opacity;\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;vec2 a_minFontScale=a_pixeloffset.zw/256.0;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*max(a_minFontScale,fontScale)+a_pxoffset/16.0),0.0,1.0);v_tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;v_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));}\"),fi=gi(\"#define SDF_PX 8.0\\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;uniform bool u_is_text;varying vec2 v_data0;varying vec3 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nfloat EDGE_GAMMA=0.105/u_device_pixel_ratio;vec2 tex=v_data0.xy;float gamma_scale=v_data1.x;float size=v_data1.y;float fade_opacity=v_data1[2];float fontScale=u_is_text ? size/24.0 : size;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;varying vec2 v_data0;varying vec3 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale+a_pxoffset),0.0,1.0);float gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0=a_tex/u_texsize;v_data1=vec3(gamma_scale,size,interpolated_fade_opacity);}\"),mi=gi(\"#define SDF_PX 8.0\\n#define SDF 1.0\\n#define ICON 0.0\\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform sampler2D u_texture_icon;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;varying vec4 v_data0;varying vec4 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nfloat fade_opacity=v_data1[2];if (v_data1.w==ICON) {vec2 tex_icon=v_data0.zw;lowp float alpha=opacity*fade_opacity;gl_FragColor=texture2D(u_texture_icon,tex_icon)*alpha;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\nreturn;}vec2 tex=v_data0.xy;float EDGE_GAMMA=0.105/u_device_pixel_ratio;float gamma_scale=v_data1.x;float size=v_data1.y;float fontScale=size/24.0;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor=vec4(1.0);\\n#endif\\n}\",\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;uniform vec2 u_texsize_icon;varying vec4 v_data0;varying vec4 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;float a_size_min=floor(a_size[0]*0.5);float is_sdf=a_size[0]-2.0*a_size_min;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=size/24.0;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);float gamma_scale=gl_Position.w;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0.xy=a_tex/u_texsize;v_data0.zw=a_tex/u_texsize_icon;v_data1=vec4(gamma_scale,size,interpolated_fade_opacity,is_sdf);}\");function gi(t,e){var i=/#pragma mapbox: ([\\w]+) ([\\w]+) ([\\w]+) ([\\w]+)/g,o=e.match(/attribute ([\\w]+) ([\\w]+)/g),r=t.match(/uniform ([\\w]+) ([\\w]+)([\\s]*)([\\w]*)/g),a=e.match(/uniform ([\\w]+) ([\\w]+)([\\s]*)([\\w]*)/g),n=a?a.concat(r):r,s={};return {fragmentSource:t=t.replace(i,(function(t,e,i,o,r){return s[r]=!0,\"define\"===e?\"\\n#ifndef HAS_UNIFORM_u_\"+r+\"\\nvarying \"+i+\" \"+o+\" \"+r+\";\\n#else\\nuniform \"+i+\" \"+o+\" u_\"+r+\";\\n#endif\\n\":\"\\n#ifdef HAS_UNIFORM_u_\"+r+\"\\n \"+i+\" \"+o+\" \"+r+\" = u_\"+r+\";\\n#endif\\n\"})),vertexSource:e=e.replace(i,(function(t,e,i,o,r){var a=\"float\"===o?\"vec2\":\"vec4\",n=r.match(/color/)?\"color\":a;return s[r]?\"define\"===e?\"\\n#ifndef HAS_UNIFORM_u_\"+r+\"\\nuniform lowp float u_\"+r+\"_t;\\nattribute \"+i+\" \"+a+\" a_\"+r+\";\\nvarying \"+i+\" \"+o+\" \"+r+\";\\n#else\\nuniform \"+i+\" \"+o+\" u_\"+r+\";\\n#endif\\n\":\"vec4\"===n?\"\\n#ifndef HAS_UNIFORM_u_\"+r+\"\\n \"+r+\" = a_\"+r+\";\\n#else\\n \"+i+\" \"+o+\" \"+r+\" = u_\"+r+\";\\n#endif\\n\":\"\\n#ifndef HAS_UNIFORM_u_\"+r+\"\\n \"+r+\" = unpack_mix_\"+n+\"(a_\"+r+\", u_\"+r+\"_t);\\n#else\\n \"+i+\" \"+o+\" \"+r+\" = u_\"+r+\";\\n#endif\\n\":\"define\"===e?\"\\n#ifndef HAS_UNIFORM_u_\"+r+\"\\nuniform lowp float u_\"+r+\"_t;\\nattribute \"+i+\" \"+a+\" a_\"+r+\";\\n#else\\nuniform \"+i+\" \"+o+\" u_\"+r+\";\\n#endif\\n\":\"vec4\"===n?\"\\n#ifndef HAS_UNIFORM_u_\"+r+\"\\n \"+i+\" \"+o+\" \"+r+\" = a_\"+r+\";\\n#else\\n \"+i+\" \"+o+\" \"+r+\" = u_\"+r+\";\\n#endif\\n\":\"\\n#ifndef HAS_UNIFORM_u_\"+r+\"\\n \"+i+\" \"+o+\" \"+r+\" = unpack_mix_\"+n+\"(a_\"+r+\", u_\"+r+\"_t);\\n#else\\n \"+i+\" \"+o+\" \"+r+\" = u_\"+r+\";\\n#endif\\n\"})),staticAttributes:o,staticUniforms:n}}var vi=Object.freeze({__proto__:null,prelude:Ge,background:We,backgroundPattern:Xe,circle:He,clippingMask:Ke,heatmap:Ye,heatmapTexture:Je,collisionBox:Qe,collisionCircle:$e,debug:ti,fill:ei,fillOutline:ii,fillOutlinePattern:oi,fillPattern:ri,fillExtrusion:ai,fillExtrusionPattern:ni,hillshadePrepare:si,hillshade:li,line:ci,lineGradient:ui,linePattern:hi,lineSDF:pi,raster:di,symbolIcon:_i,symbolSDF:fi,symbolTextAndIcon:mi}),yi=function(){this.boundProgram=null,this.boundLayoutVertexBuffer=null,this.boundPaintVertexBuffers=[],this.boundIndexBuffer=null,this.boundVertexOffset=null,this.boundDynamicVertexBuffer=null,this.vao=null;};function xi(t){for(var e=[],i=0;i>16,s>>16],u_pixel_coord_lower:[65535&n,65535&s]}}bi.prototype.draw=function(t,e,i,o,r,a,n,s,l,c,u,h,p,d,_,f){var m,g=t.gl;if(!this.failedToCreate){for(var v in t.program.set(this.program),t.setDepthMode(i),t.setStencilMode(o),t.setColorMode(r),t.setCullFace(a),this.fixedUniforms)this.fixedUniforms[v].set(n[v]);d&&d.setUniforms(t,this.binderUniforms,h,{zoom:p});for(var y=(m={},m[g.LINES]=2,m[g.TRIANGLES]=3,m[g.LINE_STRIP]=1,m)[e],x=0,b=u.get();x0?1-1/(1.001-n):-n),u_contrast_factor:(a=r.paint.get(\"raster-contrast\"),a>0?1/(1-a):1+a),u_spin_weights:qi(r.paint.get(\"raster-hue-rotate\"))};var a,n;};function qi(t){t*=Math.PI/180;var e=Math.sin(t),i=Math.cos(t);return [(2*i+1)/3,(-Math.sqrt(3)*e-i+1)/3,(Math.sqrt(3)*e-i+1)/3]}var ji,Vi=function(t,e,i,o,r,a,n,s,l,c){var u=r.transform;return {u_is_size_zoom_constant:+(\"constant\"===t||\"source\"===t),u_is_size_feature_constant:+(\"constant\"===t||\"camera\"===t),u_size_t:e?e.uSizeT:0,u_size:e?e.uSize:0,u_camera_to_center_distance:u.cameraToCenterDistance,u_pitch:u.pitch/360*2*Math.PI,u_rotate_symbol:+i,u_aspect_ratio:u.width/u.height,u_fade_change:r.options.fadeDuration?r.symbolFadeChange:1,u_matrix:a,u_label_plane_matrix:n,u_coord_matrix:s,u_is_text:+l,u_pitch_with_map:+o,u_texsize:c,u_texture:0}},Gi=function(e,i,o,r,a,n,s,l,c,u,h){var p=a.transform;return t.extend(Vi(e,i,o,r,a,n,s,l,c,u),{u_gamma_scale:r?Math.cos(p._pitch)*p.cameraToCenterDistance:1,u_device_pixel_ratio:t.browser.devicePixelRatio,u_is_halo:+h})},Wi=function(e,i,o,r,a,n,s,l,c,u){return t.extend(Gi(e,i,o,r,a,n,s,l,!0,c,!0),{u_texsize_icon:u,u_texture_icon:1})},Xi=function(t,e,i){return {u_matrix:t,u_opacity:e,u_color:i}},Hi=function(e,i,o,r,a,n){return t.extend(function(t,e,i,o){var r=i.imageManager.getPattern(t.from.toString()),a=i.imageManager.getPattern(t.to.toString()),n=i.imageManager.getPixelSize(),s=n.width,l=n.height,c=Math.pow(2,o.tileID.overscaledZ),u=o.tileSize*Math.pow(2,i.transform.tileZoom)/c,h=u*(o.tileID.canonical.x+o.tileID.wrap*c),p=u*o.tileID.canonical.y;return {u_image:0,u_pattern_tl_a:r.tl,u_pattern_br_a:r.br,u_pattern_tl_b:a.tl,u_pattern_br_b:a.br,u_texsize:[s,l],u_mix:e.t,u_pattern_size_a:r.displaySize,u_pattern_size_b:a.displaySize,u_scale_a:e.fromScale,u_scale_b:e.toScale,u_tile_units_to_pixels:1/pe(o,1,i.transform.tileZoom),u_pixel_coord_upper:[h>>16,p>>16],u_pixel_coord_lower:[65535&h,65535&p]}}(r,n,o,a),{u_matrix:e,u_opacity:i})},Ki={fillExtrusion:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_lightpos:new t.Uniform3f(e,i.u_lightpos),u_lightintensity:new t.Uniform1f(e,i.u_lightintensity),u_lightcolor:new t.Uniform3f(e,i.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,i.u_vertical_gradient),u_opacity:new t.Uniform1f(e,i.u_opacity)}},fillExtrusionPattern:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_lightpos:new t.Uniform3f(e,i.u_lightpos),u_lightintensity:new t.Uniform1f(e,i.u_lightintensity),u_lightcolor:new t.Uniform3f(e,i.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,i.u_vertical_gradient),u_height_factor:new t.Uniform1f(e,i.u_height_factor),u_image:new t.Uniform1i(e,i.u_image),u_texsize:new t.Uniform2f(e,i.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,i.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,i.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,i.u_scale),u_fade:new t.Uniform1f(e,i.u_fade),u_opacity:new t.Uniform1f(e,i.u_opacity)}},fill:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix)}},fillPattern:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_image:new t.Uniform1i(e,i.u_image),u_texsize:new t.Uniform2f(e,i.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,i.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,i.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,i.u_scale),u_fade:new t.Uniform1f(e,i.u_fade)}},fillOutline:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_world:new t.Uniform2f(e,i.u_world)}},fillOutlinePattern:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_world:new t.Uniform2f(e,i.u_world),u_image:new t.Uniform1i(e,i.u_image),u_texsize:new t.Uniform2f(e,i.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,i.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,i.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,i.u_scale),u_fade:new t.Uniform1f(e,i.u_fade)}},circle:function(e,i){return {u_camera_to_center_distance:new t.Uniform1f(e,i.u_camera_to_center_distance),u_scale_with_map:new t.Uniform1i(e,i.u_scale_with_map),u_pitch_with_map:new t.Uniform1i(e,i.u_pitch_with_map),u_extrude_scale:new t.Uniform2f(e,i.u_extrude_scale),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_matrix:new t.UniformMatrix4f(e,i.u_matrix)}},collisionBox:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_camera_to_center_distance:new t.Uniform1f(e,i.u_camera_to_center_distance),u_pixels_to_tile_units:new t.Uniform1f(e,i.u_pixels_to_tile_units),u_extrude_scale:new t.Uniform2f(e,i.u_extrude_scale),u_overscale_factor:new t.Uniform1f(e,i.u_overscale_factor)}},collisionCircle:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_inv_matrix:new t.UniformMatrix4f(e,i.u_inv_matrix),u_camera_to_center_distance:new t.Uniform1f(e,i.u_camera_to_center_distance),u_viewport_size:new t.Uniform2f(e,i.u_viewport_size)}},debug:function(e,i){return {u_color:new t.UniformColor(e,i.u_color),u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_overlay:new t.Uniform1i(e,i.u_overlay),u_overlay_scale:new t.Uniform1f(e,i.u_overlay_scale)}},clippingMask:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix)}},heatmap:function(e,i){return {u_extrude_scale:new t.Uniform1f(e,i.u_extrude_scale),u_intensity:new t.Uniform1f(e,i.u_intensity),u_matrix:new t.UniformMatrix4f(e,i.u_matrix)}},heatmapTexture:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_world:new t.Uniform2f(e,i.u_world),u_image:new t.Uniform1i(e,i.u_image),u_color_ramp:new t.Uniform1i(e,i.u_color_ramp),u_opacity:new t.Uniform1f(e,i.u_opacity)}},hillshade:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_image:new t.Uniform1i(e,i.u_image),u_latrange:new t.Uniform2f(e,i.u_latrange),u_light:new t.Uniform2f(e,i.u_light),u_shadow:new t.UniformColor(e,i.u_shadow),u_highlight:new t.UniformColor(e,i.u_highlight),u_accent:new t.UniformColor(e,i.u_accent)}},hillshadePrepare:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_image:new t.Uniform1i(e,i.u_image),u_dimension:new t.Uniform2f(e,i.u_dimension),u_zoom:new t.Uniform1f(e,i.u_zoom),u_unpack:new t.Uniform4f(e,i.u_unpack)}},line:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_ratio:new t.Uniform1f(e,i.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,i.u_units_to_pixels)}},lineGradient:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_ratio:new t.Uniform1f(e,i.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,i.u_units_to_pixels),u_image:new t.Uniform1i(e,i.u_image),u_image_height:new t.Uniform1f(e,i.u_image_height)}},linePattern:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_texsize:new t.Uniform2f(e,i.u_texsize),u_ratio:new t.Uniform1f(e,i.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_image:new t.Uniform1i(e,i.u_image),u_units_to_pixels:new t.Uniform2f(e,i.u_units_to_pixels),u_scale:new t.Uniform3f(e,i.u_scale),u_fade:new t.Uniform1f(e,i.u_fade)}},lineSDF:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_ratio:new t.Uniform1f(e,i.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,i.u_units_to_pixels),u_patternscale_a:new t.Uniform2f(e,i.u_patternscale_a),u_patternscale_b:new t.Uniform2f(e,i.u_patternscale_b),u_sdfgamma:new t.Uniform1f(e,i.u_sdfgamma),u_image:new t.Uniform1i(e,i.u_image),u_tex_y_a:new t.Uniform1f(e,i.u_tex_y_a),u_tex_y_b:new t.Uniform1f(e,i.u_tex_y_b),u_mix:new t.Uniform1f(e,i.u_mix)}},raster:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_tl_parent:new t.Uniform2f(e,i.u_tl_parent),u_scale_parent:new t.Uniform1f(e,i.u_scale_parent),u_buffer_scale:new t.Uniform1f(e,i.u_buffer_scale),u_fade_t:new t.Uniform1f(e,i.u_fade_t),u_opacity:new t.Uniform1f(e,i.u_opacity),u_image0:new t.Uniform1i(e,i.u_image0),u_image1:new t.Uniform1i(e,i.u_image1),u_brightness_low:new t.Uniform1f(e,i.u_brightness_low),u_brightness_high:new t.Uniform1f(e,i.u_brightness_high),u_saturation_factor:new t.Uniform1f(e,i.u_saturation_factor),u_contrast_factor:new t.Uniform1f(e,i.u_contrast_factor),u_spin_weights:new t.Uniform3f(e,i.u_spin_weights)}},symbolIcon:function(e,i){return {u_is_size_zoom_constant:new t.Uniform1i(e,i.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,i.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,i.u_size_t),u_size:new t.Uniform1f(e,i.u_size),u_camera_to_center_distance:new t.Uniform1f(e,i.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,i.u_pitch),u_rotate_symbol:new t.Uniform1i(e,i.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,i.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,i.u_fade_change),u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,i.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,i.u_coord_matrix),u_is_text:new t.Uniform1i(e,i.u_is_text),u_pitch_with_map:new t.Uniform1i(e,i.u_pitch_with_map),u_texsize:new t.Uniform2f(e,i.u_texsize),u_texture:new t.Uniform1i(e,i.u_texture)}},symbolSDF:function(e,i){return {u_is_size_zoom_constant:new t.Uniform1i(e,i.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,i.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,i.u_size_t),u_size:new t.Uniform1f(e,i.u_size),u_camera_to_center_distance:new t.Uniform1f(e,i.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,i.u_pitch),u_rotate_symbol:new t.Uniform1i(e,i.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,i.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,i.u_fade_change),u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,i.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,i.u_coord_matrix),u_is_text:new t.Uniform1i(e,i.u_is_text),u_pitch_with_map:new t.Uniform1i(e,i.u_pitch_with_map),u_texsize:new t.Uniform2f(e,i.u_texsize),u_texture:new t.Uniform1i(e,i.u_texture),u_gamma_scale:new t.Uniform1f(e,i.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_is_halo:new t.Uniform1i(e,i.u_is_halo)}},symbolTextAndIcon:function(e,i){return {u_is_size_zoom_constant:new t.Uniform1i(e,i.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,i.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,i.u_size_t),u_size:new t.Uniform1f(e,i.u_size),u_camera_to_center_distance:new t.Uniform1f(e,i.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,i.u_pitch),u_rotate_symbol:new t.Uniform1i(e,i.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,i.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,i.u_fade_change),u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,i.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,i.u_coord_matrix),u_is_text:new t.Uniform1i(e,i.u_is_text),u_pitch_with_map:new t.Uniform1i(e,i.u_pitch_with_map),u_texsize:new t.Uniform2f(e,i.u_texsize),u_texsize_icon:new t.Uniform2f(e,i.u_texsize_icon),u_texture:new t.Uniform1i(e,i.u_texture),u_texture_icon:new t.Uniform1i(e,i.u_texture_icon),u_gamma_scale:new t.Uniform1f(e,i.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,i.u_device_pixel_ratio),u_is_halo:new t.Uniform1i(e,i.u_is_halo)}},background:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_opacity:new t.Uniform1f(e,i.u_opacity),u_color:new t.UniformColor(e,i.u_color)}},backgroundPattern:function(e,i){return {u_matrix:new t.UniformMatrix4f(e,i.u_matrix),u_opacity:new t.Uniform1f(e,i.u_opacity),u_image:new t.Uniform1i(e,i.u_image),u_pattern_tl_a:new t.Uniform2f(e,i.u_pattern_tl_a),u_pattern_br_a:new t.Uniform2f(e,i.u_pattern_br_a),u_pattern_tl_b:new t.Uniform2f(e,i.u_pattern_tl_b),u_pattern_br_b:new t.Uniform2f(e,i.u_pattern_br_b),u_texsize:new t.Uniform2f(e,i.u_texsize),u_mix:new t.Uniform1f(e,i.u_mix),u_pattern_size_a:new t.Uniform2f(e,i.u_pattern_size_a),u_pattern_size_b:new t.Uniform2f(e,i.u_pattern_size_b),u_scale_a:new t.Uniform1f(e,i.u_scale_a),u_scale_b:new t.Uniform1f(e,i.u_scale_b),u_pixel_coord_upper:new t.Uniform2f(e,i.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,i.u_pixel_coord_lower),u_tile_units_to_pixels:new t.Uniform1f(e,i.u_tile_units_to_pixels)}}};function Yi(e,i,o,r,a,n,s){for(var l=e.context,c=l.gl,u=e.useProgram(\"collisionBox\"),h=[],p=0,d=0,_=0;_0){var b=t.create(),w=v;t.mul(b,g.placementInvProjMatrix,e.transform.glCoordMatrix),t.mul(b,b,g.placementViewportMatrix),h.push({circleArray:x,circleOffset:d,transform:w,invTransform:b}),d=p+=x.length/4;}y&&u.draw(l,c.LINES,It.disabled,Pt.disabled,e.colorModeForRenderPass(),Ct.disabled,Di(v,e.transform,m),o.id,y.layoutVertexBuffer,y.indexBuffer,y.segments,null,e.transform.zoom,null,null,y.collisionVertexBuffer);}}if(s&&h.length){var T=e.useProgram(\"collisionCircle\"),E=new t.StructArrayLayout2f1f2i16;E.resize(4*p),E._trim();for(var I=0,P=0,S=h;P=0&&(f[g.associatedIconIndex]={shiftedAnchor:E,angle:I});}else ce(g.numGlyphs,d);}if(h){_.clear();for(var S=e.icon.placedSymbolArray,C=0;C0){var s=t.browser.now(),l=(s-e.timeAdded)/n,c=i?(s-i.timeAdded)/n:-1,u=o.getSource(),h=a.coveringZoomLevel({tileSize:u.tileSize,roundZoom:u.roundZoom}),p=!i||Math.abs(i.tileID.overscaledZ-h)>Math.abs(e.tileID.overscaledZ-h),d=p&&e.refreshedUponExpiration?1:t.clamp(p?l:1-c,0,1);return e.refreshedUponExpiration&&l>=1&&(e.refreshedUponExpiration=!1),i?{opacity:1,mix:1-d}:{opacity:d,mix:0}}return {opacity:1,mix:0}}var lo=new t.Color(1,0,0,1),co=new t.Color(0,1,0,1),uo=new t.Color(0,0,1,1),ho=new t.Color(1,0,1,1),po=new t.Color(0,1,1,1);function _o(t,e,i,o){mo(t,0,e+i/2,t.transform.width,i,o);}function fo(t,e,i,o){mo(t,e-i/2,0,i,t.transform.height,o);}function mo(e,i,o,r,a,n){var s=e.context,l=s.gl;l.enable(l.SCISSOR_TEST),l.scissor(i*t.browser.devicePixelRatio,o*t.browser.devicePixelRatio,r*t.browser.devicePixelRatio,a*t.browser.devicePixelRatio),s.clear({color:n}),l.disable(l.SCISSOR_TEST);}function go(e,i,o){var r=e.context,a=r.gl,n=o.posMatrix,s=e.useProgram(\"debug\"),l=It.disabled,c=Pt.disabled,u=e.colorModeForRenderPass();r.activeTexture.set(a.TEXTURE0),e.emptyTexture.bind(a.LINEAR,a.CLAMP_TO_EDGE),s.draw(r,a.LINE_STRIP,l,c,u,Ct.disabled,Mi(n,t.Color.red),\"$debug\",e.debugBuffer,e.tileBorderIndexBuffer,e.debugSegments);var h=i.getTileByID(o.key).latestRawTileData,p=Math.floor((h&&h.byteLength||0)/1024),d=i.getTile(o).tileSize,_=512/Math.min(d,512)*(o.overscaledZ/e.transform.zoom)*.5,f=o.canonical.toString();o.overscaledZ!==o.canonical.z&&(f+=\" => \"+o.overscaledZ),function(t,e){t.initDebugOverlayCanvas();var i=t.debugOverlayCanvas,o=t.context.gl,r=t.debugOverlayCanvas.getContext(\"2d\");r.clearRect(0,0,i.width,i.height),r.shadowColor=\"white\",r.shadowBlur=2,r.lineWidth=1.5,r.strokeStyle=\"white\",r.textBaseline=\"top\",r.font=\"bold 36px Open Sans, sans-serif\",r.fillText(e,5,5),r.strokeText(e,5,5),t.debugOverlayTexture.update(i),t.debugOverlayTexture.bind(o.LINEAR,o.CLAMP_TO_EDGE);}(e,f+\" \"+p+\"kb\"),s.draw(r,a.TRIANGLES,l,c,St.alphaBlended,Ct.disabled,Mi(n,t.Color.transparent,_),\"$debug\",e.debugBuffer,e.quadTriangleIndexBuffer,e.debugSegments);}var vo={symbol:function(e,i,o,r,a){if(\"translucent\"===e.renderPass){var n=Pt.disabled,s=e.colorModeForRenderPass();o.layout.get(\"text-variable-anchor\")&&function(e,i,o,r,a,n,s){for(var l=i.transform,c=\"map\"===a,u=\"map\"===n,h=0,p=e;h256&&this.clearStencil(),i.setColorMode(St.disabled),i.setDepthMode(It.disabled);var r=this.useProgram(\"clippingMask\");this._tileClippingMaskIDs={};for(var a=0,n=e;a256&&this.clearStencil();var t=this.nextStencilID++,e=this.context.gl;return new Pt({func:e.NOTEQUAL,mask:255},t,255,e.KEEP,e.KEEP,e.REPLACE)},yo.prototype.stencilModeForClipping=function(t){var e=this.context.gl;return new Pt({func:e.EQUAL,mask:255},this._tileClippingMaskIDs[t.key],0,e.KEEP,e.KEEP,e.REPLACE)},yo.prototype.stencilConfigForOverlap=function(t){var e,i=this.context.gl,o=t.sort((function(t,e){return e.overscaledZ-t.overscaledZ})),r=o[o.length-1].overscaledZ,a=o[0].overscaledZ-r+1;if(a>1){this.currentStencilSource=void 0,this.nextStencilID+a>256&&this.clearStencil();for(var n={},s=0;s=0;this.currentLayer--){var x=this.style._layers[r[this.currentLayer]],b=a[x.source],w=u[x.source];this._renderTileClippingMasks(x,w),this.renderLayer(this,b,x,w);}for(this.renderPass=\"translucent\",this.currentLayer=0;this.currentLayer0?e.pop():null},yo.prototype.isPatternMissing=function(t){if(!t)return !1;if(!t.from||!t.to)return !0;var e=this.imageManager.getPattern(t.from.toString()),i=this.imageManager.getPattern(t.to.toString());return !e||!i},yo.prototype.useProgram=function(t,e){this.cache=this.cache||{};var i=\"\"+t+(e?e.cacheKey:\"\")+(this._showOverdrawInspector?\"/overdraw\":\"\");return this.cache[i]||(this.cache[i]=new bi(this.context,t,vi[t],e,Ki[t],this._showOverdrawInspector)),this.cache[i]},yo.prototype.setCustomLayerDefaults=function(){this.context.unbindVAO(),this.context.cullFace.setDefault(),this.context.activeTexture.setDefault(),this.context.pixelStoreUnpack.setDefault(),this.context.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.context.pixelStoreUnpackFlipY.setDefault();},yo.prototype.setBaseState=function(){var t=this.context.gl;this.context.cullFace.set(!1),this.context.viewport.set([0,0,this.width,this.height]),this.context.blendEquation.set(t.FUNC_ADD);},yo.prototype.initDebugOverlayCanvas=function(){null==this.debugOverlayCanvas&&(this.debugOverlayCanvas=t.window.document.createElement(\"canvas\"),this.debugOverlayCanvas.width=512,this.debugOverlayCanvas.height=512,this.debugOverlayTexture=new t.Texture(this.context,this.debugOverlayCanvas,this.context.gl.RGBA));},yo.prototype.destroy=function(){this.emptyTexture.destroy(),this.debugOverlayTexture&&this.debugOverlayTexture.destroy();};var xo=function(t,e){this.points=t,this.planes=e;};xo.fromInvProjectionMatrix=function(e,i,o){var r=Math.pow(2,o),a=[[-1,1,-1,1],[1,1,-1,1],[1,-1,-1,1],[-1,-1,-1,1],[-1,1,1,1],[1,1,1,1],[1,-1,1,1],[-1,-1,1,1]].map((function(i){return t.transformMat4([],i,e)})).map((function(e){return t.scale$1([],e,1/e[3]/i*r)})),n=[[0,1,2],[6,5,4],[0,3,7],[2,1,5],[3,2,6],[0,4,5]].map((function(e){var i=t.sub([],a[e[0]],a[e[1]]),o=t.sub([],a[e[2]],a[e[1]]),r=t.normalize([],t.cross([],i,o)),n=-t.dot(r,a[e[1]]);return r.concat(n)}));return new xo(a,n)};var bo=function(e,i){this.min=e,this.max=i,this.center=t.scale$2([],t.add([],this.min,this.max),.5);};bo.prototype.quadrant=function(e){for(var i=[e%2==0,e<2],o=t.clone$2(this.min),r=t.clone$2(this.max),a=0;a=0;if(0===n)return 0;n!==i.length&&(o=!1);}if(o)return 2;for(var l=0;l<3;l++){for(var c=Number.MAX_VALUE,u=-Number.MAX_VALUE,h=0;hthis.max[l]-this.min[l])return 0}return 1};var wo=function(t,e,i,o){if(void 0===t&&(t=0),void 0===e&&(e=0),void 0===i&&(i=0),void 0===o&&(o=0),isNaN(t)||t<0||isNaN(e)||e<0||isNaN(i)||i<0||isNaN(o)||o<0)throw new Error(\"Invalid value for edge-insets, top, bottom, left and right must all be numbers\");this.top=t,this.bottom=e,this.left=i,this.right=o;};wo.prototype.interpolate=function(e,i,o){return null!=i.top&&null!=e.top&&(this.top=t.number(e.top,i.top,o)),null!=i.bottom&&null!=e.bottom&&(this.bottom=t.number(e.bottom,i.bottom,o)),null!=i.left&&null!=e.left&&(this.left=t.number(e.left,i.left,o)),null!=i.right&&null!=e.right&&(this.right=t.number(e.right,i.right,o)),this},wo.prototype.getCenter=function(e,i){var o=t.clamp((this.left+e-this.right)/2,0,e),r=t.clamp((this.top+i-this.bottom)/2,0,i);return new t.Point(o,r)},wo.prototype.equals=function(t){return this.top===t.top&&this.bottom===t.bottom&&this.left===t.left&&this.right===t.right},wo.prototype.clone=function(){return new wo(this.top,this.bottom,this.left,this.right)},wo.prototype.toJSON=function(){return {top:this.top,bottom:this.bottom,left:this.left,right:this.right}};var To=function(e,i,o,r,a){this.tileSize=512,this.maxValidLatitude=85.051129,this._renderWorldCopies=void 0===a||a,this._minZoom=e||0,this._maxZoom=i||22,this._minPitch=null==o?0:o,this._maxPitch=null==r?60:r,this.setMaxBounds(),this.width=0,this.height=0,this._center=new t.LngLat(0,0),this.zoom=0,this.angle=0,this._fov=.6435011087932844,this._pitch=0,this._unmodified=!0,this._edgeInsets=new wo,this._posMatrixCache={},this._alignedPosMatrixCache={};},Eo={minZoom:{configurable:!0},maxZoom:{configurable:!0},minPitch:{configurable:!0},maxPitch:{configurable:!0},renderWorldCopies:{configurable:!0},worldSize:{configurable:!0},centerOffset:{configurable:!0},size:{configurable:!0},bearing:{configurable:!0},pitch:{configurable:!0},fov:{configurable:!0},zoom:{configurable:!0},center:{configurable:!0},padding:{configurable:!0},centerPoint:{configurable:!0},unmodified:{configurable:!0},point:{configurable:!0}};To.prototype.clone=function(){var t=new To(this._minZoom,this._maxZoom,this._minPitch,this.maxPitch,this._renderWorldCopies);return t.tileSize=this.tileSize,t.latRange=this.latRange,t.width=this.width,t.height=this.height,t._center=this._center,t.zoom=this.zoom,t.angle=this.angle,t._fov=this._fov,t._pitch=this._pitch,t._unmodified=this._unmodified,t._edgeInsets=this._edgeInsets.clone(),t._calcMatrices(),t},Eo.minZoom.get=function(){return this._minZoom},Eo.minZoom.set=function(t){this._minZoom!==t&&(this._minZoom=t,this.zoom=Math.max(this.zoom,t));},Eo.maxZoom.get=function(){return this._maxZoom},Eo.maxZoom.set=function(t){this._maxZoom!==t&&(this._maxZoom=t,this.zoom=Math.min(this.zoom,t));},Eo.minPitch.get=function(){return this._minPitch},Eo.minPitch.set=function(t){this._minPitch!==t&&(this._minPitch=t,this.pitch=Math.max(this.pitch,t));},Eo.maxPitch.get=function(){return this._maxPitch},Eo.maxPitch.set=function(t){this._maxPitch!==t&&(this._maxPitch=t,this.pitch=Math.min(this.pitch,t));},Eo.renderWorldCopies.get=function(){return this._renderWorldCopies},Eo.renderWorldCopies.set=function(t){void 0===t?t=!0:null===t&&(t=!1),this._renderWorldCopies=t;},Eo.worldSize.get=function(){return this.tileSize*this.scale},Eo.centerOffset.get=function(){return this.centerPoint._sub(this.size._div(2))},Eo.size.get=function(){return new t.Point(this.width,this.height)},Eo.bearing.get=function(){return -this.angle/Math.PI*180},Eo.bearing.set=function(e){var i=-t.wrap(e,-180,180)*Math.PI/180;this.angle!==i&&(this._unmodified=!1,this.angle=i,this._calcMatrices(),this.rotationMatrix=t.create$2(),t.rotate(this.rotationMatrix,this.rotationMatrix,this.angle));},Eo.pitch.get=function(){return this._pitch/Math.PI*180},Eo.pitch.set=function(e){var i=t.clamp(e,this.minPitch,this.maxPitch)/180*Math.PI;this._pitch!==i&&(this._unmodified=!1,this._pitch=i,this._calcMatrices());},Eo.fov.get=function(){return this._fov/Math.PI*180},Eo.fov.set=function(t){t=Math.max(.01,Math.min(60,t)),this._fov!==t&&(this._unmodified=!1,this._fov=t/180*Math.PI,this._calcMatrices());},Eo.zoom.get=function(){return this._zoom},Eo.zoom.set=function(t){var e=Math.min(Math.max(t,this.minZoom),this.maxZoom);this._zoom!==e&&(this._unmodified=!1,this._zoom=e,this.scale=this.zoomScale(e),this.tileZoom=Math.floor(e),this.zoomFraction=e-this.tileZoom,this._constrain(),this._calcMatrices());},Eo.center.get=function(){return this._center},Eo.center.set=function(t){t.lat===this._center.lat&&t.lng===this._center.lng||(this._unmodified=!1,this._center=t,this._constrain(),this._calcMatrices());},Eo.padding.get=function(){return this._edgeInsets.toJSON()},Eo.padding.set=function(t){this._edgeInsets.equals(t)||(this._unmodified=!1,this._edgeInsets.interpolate(this._edgeInsets,t,1),this._calcMatrices());},Eo.centerPoint.get=function(){return this._edgeInsets.getCenter(this.width,this.height)},To.prototype.isPaddingEqual=function(t){return this._edgeInsets.equals(t)},To.prototype.interpolatePadding=function(t,e,i){this._unmodified=!1,this._edgeInsets.interpolate(t,e,i),this._constrain(),this._calcMatrices();},To.prototype.coveringZoomLevel=function(t){var e=(t.roundZoom?Math.round:Math.floor)(this.zoom+this.scaleZoom(this.tileSize/t.tileSize));return Math.max(0,e)},To.prototype.getVisibleUnwrappedCoordinates=function(e){var i=[new t.UnwrappedTileID(0,e)];if(this._renderWorldCopies)for(var o=this.pointCoordinate(new t.Point(0,0)),r=this.pointCoordinate(new t.Point(this.width,0)),a=this.pointCoordinate(new t.Point(this.width,this.height)),n=this.pointCoordinate(new t.Point(0,this.height)),s=Math.floor(Math.min(o.x,r.x,a.x,n.x)),l=Math.floor(Math.max(o.x,r.x,a.x,n.x)),c=s-1;c<=l+1;c++)0!==c&&i.push(new t.UnwrappedTileID(c,e));return i},To.prototype.coveringTiles=function(e){var i=this.coveringZoomLevel(e),o=i;if(void 0!==e.minzoom&&ie.maxzoom&&(i=e.maxzoom);var r=t.MercatorCoordinate.fromLngLat(this.center),a=Math.pow(2,i),n=[a*r.x,a*r.y,0],s=xo.fromInvProjectionMatrix(this.invProjMatrix,this.worldSize,i),l=e.minzoom||0;this.pitch<=60&&this._edgeInsets.top<.1&&(l=i);var c=function(t){return {aabb:new bo([t*a,0,0],[(t+1)*a,a,0]),zoom:0,x:0,y:0,wrap:t,fullyVisible:!1}},u=[],h=[],p=i,d=e.reparseOverscaled?o:i;if(this._renderWorldCopies)for(var _=1;_<=3;_++)u.push(c(-_)),u.push(c(_));for(u.push(c(0));u.length>0;){var f=u.pop(),m=f.x,g=f.y,v=f.fullyVisible;if(!v){var y=f.aabb.intersects(s);if(0===y)continue;v=2===y;}var x=f.aabb.distanceX(n),b=f.aabb.distanceY(n),w=Math.max(Math.abs(x),Math.abs(b));if(f.zoom===p||w>3+(1<=l)h.push({tileID:new t.OverscaledTileID(f.zoom===p?d:f.zoom,f.wrap,f.zoom,m,g),distanceSq:t.sqrLen([n[0]-.5-m,n[1]-.5-g])});else for(var T=0;T<4;T++){var E=(m<<1)+T%2,I=(g<<1)+(T>>1);u.push({aabb:f.aabb.quadrant(T),zoom:f.zoom+1,x:E,y:I,wrap:f.wrap,fullyVisible:v});}}return h.sort((function(t,e){return t.distanceSq-e.distanceSq})).map((function(t){return t.tileID}))},To.prototype.resize=function(t,e){this.width=t,this.height=e,this.pixelsToGLUnits=[2/t,-2/e],this._constrain(),this._calcMatrices();},Eo.unmodified.get=function(){return this._unmodified},To.prototype.zoomScale=function(t){return Math.pow(2,t)},To.prototype.scaleZoom=function(t){return Math.log(t)/Math.LN2},To.prototype.project=function(e){var i=t.clamp(e.lat,-this.maxValidLatitude,this.maxValidLatitude);return new t.Point(t.mercatorXfromLng(e.lng)*this.worldSize,t.mercatorYfromLat(i)*this.worldSize)},To.prototype.unproject=function(e){return new t.MercatorCoordinate(e.x/this.worldSize,e.y/this.worldSize).toLngLat()},Eo.point.get=function(){return this.project(this.center)},To.prototype.setLocationAtPoint=function(e,i){var o=this.pointCoordinate(i),r=this.pointCoordinate(this.centerPoint),a=this.locationCoordinate(e),n=new t.MercatorCoordinate(a.x-(o.x-r.x),a.y-(o.y-r.y));this.center=this.coordinateLocation(n),this._renderWorldCopies&&(this.center=this.center.wrap());},To.prototype.locationPoint=function(t){return this.coordinatePoint(this.locationCoordinate(t))},To.prototype.pointLocation=function(t){return this.coordinateLocation(this.pointCoordinate(t))},To.prototype.locationCoordinate=function(e){return t.MercatorCoordinate.fromLngLat(e)},To.prototype.coordinateLocation=function(t){return t.toLngLat()},To.prototype.pointCoordinate=function(e){var i=[e.x,e.y,0,1],o=[e.x,e.y,1,1];t.transformMat4(i,i,this.pixelMatrixInverse),t.transformMat4(o,o,this.pixelMatrixInverse);var r=i[3],a=o[3],n=i[1]/r,s=o[1]/a,l=i[2]/r,c=o[2]/a,u=l===c?0:(0-l)/(c-l);return new t.MercatorCoordinate(t.number(i[0]/r,o[0]/a,u)/this.worldSize,t.number(n,s,u)/this.worldSize)},To.prototype.coordinatePoint=function(e){var i=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(i,i,this.pixelMatrix),new t.Point(i[0]/i[3],i[1]/i[3])},To.prototype.getBounds=function(){return (new t.LngLatBounds).extend(this.pointLocation(new t.Point(0,0))).extend(this.pointLocation(new t.Point(this.width,0))).extend(this.pointLocation(new t.Point(this.width,this.height))).extend(this.pointLocation(new t.Point(0,this.height)))},To.prototype.getMaxBounds=function(){return this.latRange&&2===this.latRange.length&&this.lngRange&&2===this.lngRange.length?new t.LngLatBounds([this.lngRange[0],this.latRange[0]],[this.lngRange[1],this.latRange[1]]):null},To.prototype.setMaxBounds=function(t){t?(this.lngRange=[t.getWest(),t.getEast()],this.latRange=[t.getSouth(),t.getNorth()],this._constrain()):(this.lngRange=null,this.latRange=[-this.maxValidLatitude,this.maxValidLatitude]);},To.prototype.calculatePosMatrix=function(e,i){void 0===i&&(i=!1);var o=e.key,r=i?this._alignedPosMatrixCache:this._posMatrixCache;if(r[o])return r[o];var a=e.canonical,n=this.worldSize/this.zoomScale(a.z),s=a.x+Math.pow(2,a.z)*e.wrap,l=t.identity(new Float64Array(16));return t.translate(l,l,[s*n,a.y*n,0]),t.scale(l,l,[n/t.EXTENT,n/t.EXTENT,1]),t.multiply(l,i?this.alignedProjMatrix:this.projMatrix,l),r[o]=new Float32Array(l),r[o]},To.prototype.customLayerMatrix=function(){return this.mercatorMatrix.slice()},To.prototype._constrain=function(){if(this.center&&this.width&&this.height&&!this._constraining){this._constraining=!0;var e,i,o,r,a=-90,n=90,s=-180,l=180,c=this.size,u=this._unmodified;if(this.latRange){var h=this.latRange;a=t.mercatorYfromLat(h[1])*this.worldSize,e=(n=t.mercatorYfromLat(h[0])*this.worldSize)-an&&(r=n-m);}if(this.lngRange){var g=d.x,v=c.x/2;g-vl&&(o=l-v);}void 0===o&&void 0===r||(this.center=this.unproject(new t.Point(void 0!==o?o:d.x,void 0!==r?r:d.y))),this._unmodified=u,this._constraining=!1;}},To.prototype._calcMatrices=function(){if(this.height){var e=this.centerOffset;this.cameraToCenterDistance=.5/Math.tan(this._fov/2)*this.height;var i=Math.PI/2+this._pitch,o=this._fov*(.5+e.y/this.height),r=Math.sin(o)*this.cameraToCenterDistance/Math.sin(t.clamp(Math.PI-i-o,.01,Math.PI-.01)),a=this.point,n=a.x,s=a.y,l=1.01*(Math.cos(Math.PI/2-this._pitch)*r+this.cameraToCenterDistance),c=this.height/50,u=new Float64Array(16);t.perspective(u,this._fov,this.width/this.height,c,l),u[8]=2*-e.x/this.width,u[9]=2*e.y/this.height,t.scale(u,u,[1,-1,1]),t.translate(u,u,[0,0,-this.cameraToCenterDistance]),t.rotateX(u,u,this._pitch),t.rotateZ(u,u,this.angle),t.translate(u,u,[-n,-s,0]),this.mercatorMatrix=t.scale([],u,[this.worldSize,this.worldSize,this.worldSize]),t.scale(u,u,[1,1,t.mercatorZfromAltitude(1,this.center.lat)*this.worldSize,1]),this.projMatrix=u,this.invProjMatrix=t.invert([],this.projMatrix);var h=this.width%2/2,p=this.height%2/2,d=Math.cos(this.angle),_=Math.sin(this.angle),f=n-Math.round(n)+d*h+_*p,m=s-Math.round(s)+d*p+_*h,g=new Float64Array(u);if(t.translate(g,g,[f>.5?f-1:f,m>.5?m-1:m,0]),this.alignedProjMatrix=g,u=t.create(),t.scale(u,u,[this.width/2,-this.height/2,1]),t.translate(u,u,[1,-1,0]),this.labelPlaneMatrix=u,u=t.create(),t.scale(u,u,[1,-1,1]),t.translate(u,u,[-1,-1,0]),t.scale(u,u,[2/this.width,2/this.height,1]),this.glCoordMatrix=u,this.pixelMatrix=t.multiply(new Float64Array(16),this.labelPlaneMatrix,this.projMatrix),!(u=t.invert(new Float64Array(16),this.pixelMatrix)))throw new Error(\"failed to invert matrix\");this.pixelMatrixInverse=u,this._posMatrixCache={},this._alignedPosMatrixCache={};}},To.prototype.maxPitchScaleFactor=function(){if(!this.pixelMatrixInverse)return 1;var e=this.pointCoordinate(new t.Point(0,0)),i=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(i,i,this.pixelMatrix)[3]/this.cameraToCenterDistance},To.prototype.getCameraPoint=function(){var e=Math.tan(this._pitch)*(this.cameraToCenterDistance||1);return this.centerPoint.add(new t.Point(0,e))},To.prototype.getCameraQueryGeometry=function(e){var i=this.getCameraPoint();if(1===e.length)return [e[0],i];for(var o=i.x,r=i.y,a=i.x,n=i.y,s=0,l=e;s=3&&!t.some((function(t){return isNaN(t)}))){var e=this._map.dragRotate.isEnabled()&&this._map.touchZoomRotate.isEnabled()?+(t[3]||0):this._map.getBearing();return this._map.jumpTo({center:[+t[2],+t[1]],zoom:+t[0],bearing:e,pitch:+(t[4]||0)}),!0}return !1},Io.prototype._updateHashUnthrottled=function(){var e=t.window.location.href.replace(/(#.+)?$/,this.getHashString());try{t.window.history.replaceState(t.window.history.state,null,e);}catch(t){}};var Po={linearity:.3,easing:t.bezier(0,0,.3,1)},So=t.extend({deceleration:2500,maxSpeed:1400},Po),Co=t.extend({deceleration:20,maxSpeed:1400},Po),zo=t.extend({deceleration:1e3,maxSpeed:360},Po),Do=t.extend({deceleration:1e3,maxSpeed:90},Po),Ao=function(t){this._map=t,this.clear();};function Mo(t,e){(!t.duration||t.duration0&&i-e[0].time>160;)e.shift();},Ao.prototype._onMoveEnd=function(e){if(this._drainInertiaBuffer(),!(this._inertiaBuffer.length<2)){for(var i={zoom:0,bearing:0,pitch:0,pan:new t.Point(0,0),pinchAround:void 0,around:void 0},o=0,r=this._inertiaBuffer;o=this._clickTolerance||this._map.fire(new Ro(t.type,this._map,t));},Oo.prototype.dblclick=function(t){return this._firePreventable(new Ro(t.type,this._map,t))},Oo.prototype.mouseover=function(t){this._map.fire(new Ro(t.type,this._map,t));},Oo.prototype.mouseout=function(t){this._map.fire(new Ro(t.type,this._map,t));},Oo.prototype.touchstart=function(t){return this._firePreventable(new ko(t.type,this._map,t))},Oo.prototype.touchmove=function(t){this._map.fire(new ko(t.type,this._map,t));},Oo.prototype.touchend=function(t){this._map.fire(new ko(t.type,this._map,t));},Oo.prototype.touchcancel=function(t){this._map.fire(new ko(t.type,this._map,t));},Oo.prototype._firePreventable=function(t){if(this._map.fire(t),t.defaultPrevented)return {}},Oo.prototype.isEnabled=function(){return !0},Oo.prototype.isActive=function(){return !1},Oo.prototype.enable=function(){},Oo.prototype.disable=function(){};var Fo=function(t){this._map=t;};Fo.prototype.reset=function(){this._delayContextMenu=!1,delete this._contextMenuEvent;},Fo.prototype.mousemove=function(t){this._map.fire(new Ro(t.type,this._map,t));},Fo.prototype.mousedown=function(){this._delayContextMenu=!0;},Fo.prototype.mouseup=function(){this._delayContextMenu=!1,this._contextMenuEvent&&(this._map.fire(new Ro(\"contextmenu\",this._map,this._contextMenuEvent)),delete this._contextMenuEvent);},Fo.prototype.contextmenu=function(t){this._delayContextMenu?this._contextMenuEvent=t:this._map.fire(new Ro(t.type,this._map,t)),this._map.listens(\"contextmenu\")&&t.preventDefault();},Fo.prototype.isEnabled=function(){return !0},Fo.prototype.isActive=function(){return !1},Fo.prototype.enable=function(){},Fo.prototype.disable=function(){};var Uo=function(t,e){this._map=t,this._el=t.getCanvasContainer(),this._container=t.getContainer(),this._clickTolerance=e.clickTolerance||1;};function No(t,e){for(var i={},o=0;othis.numTouches)&&(this.aborted=!0),this.aborted||(void 0===this.startTime&&(this.startTime=e.timeStamp),o.length===this.numTouches&&(this.centroid=function(e){for(var i=new t.Point(0,0),o=0,r=e;o30)&&(this.aborted=!0);}}},Zo.prototype.touchend=function(t,e,i){if((!this.centroid||t.timeStamp-this.startTime>500)&&(this.aborted=!0),0===i.length){var o=!this.aborted&&this.centroid;if(this.reset(),o)return o}};var qo=function(t){this.singleTap=new Zo(t),this.numTaps=t.numTaps,this.reset();};qo.prototype.reset=function(){this.lastTime=1/0,delete this.lastTap,this.count=0,this.singleTap.reset();},qo.prototype.touchstart=function(t,e,i){this.singleTap.touchstart(t,e,i);},qo.prototype.touchmove=function(t,e,i){this.singleTap.touchmove(t,e,i);},qo.prototype.touchend=function(t,e,i){var o=this.singleTap.touchend(t,e,i);if(o){var r=t.timeStamp-this.lastTime<500,a=!this.lastTap||this.lastTap.dist(o)<30;if(r&&a||this.reset(),this.count++,this.lastTime=t.timeStamp,this.lastTap=o,this.count===this.numTaps)return this.reset(),o}};var jo=function(){this._zoomIn=new qo({numTouches:1,numTaps:2}),this._zoomOut=new qo({numTouches:2,numTaps:1}),this.reset();};jo.prototype.reset=function(){this._active=!1,this._zoomIn.reset(),this._zoomOut.reset();},jo.prototype.touchstart=function(t,e,i){this._zoomIn.touchstart(t,e,i),this._zoomOut.touchstart(t,e,i);},jo.prototype.touchmove=function(t,e,i){this._zoomIn.touchmove(t,e,i),this._zoomOut.touchmove(t,e,i);},jo.prototype.touchend=function(t,e,i){var o=this,r=this._zoomIn.touchend(t,e,i),a=this._zoomOut.touchend(t,e,i);return r?(this._active=!0,t.preventDefault(),setTimeout((function(){return o.reset()}),0),{cameraAnimation:function(e){return e.easeTo({duration:300,zoom:e.getZoom()+1,around:e.unproject(r)},{originalEvent:t})}}):a?(this._active=!0,t.preventDefault(),setTimeout((function(){return o.reset()}),0),{cameraAnimation:function(e){return e.easeTo({duration:300,zoom:e.getZoom()-1,around:e.unproject(a)},{originalEvent:t})}}):void 0},jo.prototype.touchcancel=function(){this.reset();},jo.prototype.enable=function(){this._enabled=!0;},jo.prototype.disable=function(){this._enabled=!1,this.reset();},jo.prototype.isEnabled=function(){return this._enabled},jo.prototype.isActive=function(){return this._active};var Vo={0:1,2:2},Go=function(t){this.reset(),this._clickTolerance=t.clickTolerance||1;};Go.prototype.blur=function(){this.reset();},Go.prototype.reset=function(){this._active=!1,this._moved=!1,delete this._lastPoint,delete this._eventButton;},Go.prototype._correctButton=function(t,e){return !1},Go.prototype._move=function(t,e){return {}},Go.prototype.mousedown=function(t,e){if(!this._lastPoint){var o=i.mouseButton(t);this._correctButton(t,o)&&(this._lastPoint=e,this._eventButton=o);}},Go.prototype.mousemoveWindow=function(t,e){var i=this._lastPoint;if(i)if(t.preventDefault(),function(t,e){var i=Vo[e];return void 0===t.buttons||(t.buttons&i)!==i}(t,this._eventButton))this.reset();else if(this._moved||!(e.dist(i)0&&(this._active=!0);var r=No(o,i),a=new t.Point(0,0),n=new t.Point(0,0),s=0;for(var l in r){var c=r[l],u=this._touches[l];u&&(a._add(c),n._add(c.sub(u)),s++,r[l]=c);}if(this._touches=r,!(sMath.abs(t.x)}var or=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e.prototype.reset=function(){t.prototype.reset.call(this),this._valid=void 0,delete this._firstMove,delete this._lastPoints;},e.prototype._start=function(t){this._lastPoints=t,ir(t[0].sub(t[1]))&&(this._valid=!1);},e.prototype._move=function(t,e,i){var o=t[0].sub(this._lastPoints[0]),r=t[1].sub(this._lastPoints[1]);if(this._valid=this.gestureBeginsVertically(o,r,i.timeStamp),this._valid)return this._lastPoints=t,this._active=!0,{pitchDelta:(o.y+r.y)/2*-.5}},e.prototype.gestureBeginsVertically=function(t,e,i){if(void 0!==this._valid)return this._valid;var o=t.mag()>=2,r=e.mag()>=2;if(o||r){if(!o||!r)return void 0===this._firstMove&&(this._firstMove=i),i-this._firstMove<100&&void 0;var a=t.y>0==e.y>0;return ir(t)&&ir(e)&&a}},e}(Yo),rr={panStep:100,bearingStep:15,pitchStep:10},ar=function(){var t=rr;this._panStep=t.panStep,this._bearingStep=t.bearingStep,this._pitchStep=t.pitchStep,this._rotationDisabled=!1;};function nr(t){return t*(2-t)}ar.prototype.blur=function(){this.reset();},ar.prototype.reset=function(){this._active=!1;},ar.prototype.keydown=function(t){var e=this;if(!(t.altKey||t.ctrlKey||t.metaKey)){var i=0,o=0,r=0,a=0,n=0;switch(t.keyCode){case 61:case 107:case 171:case 187:i=1;break;case 189:case 109:case 173:i=-1;break;case 37:t.shiftKey?o=-1:(t.preventDefault(),a=-1);break;case 39:t.shiftKey?o=1:(t.preventDefault(),a=1);break;case 38:t.shiftKey?r=1:(t.preventDefault(),n=-1);break;case 40:t.shiftKey?r=-1:(t.preventDefault(),n=1);break;default:return}return this._rotationDisabled&&(o=0,r=0),{cameraAnimation:function(s){var l=s.getZoom();s.easeTo({duration:300,easeId:\"keyboardHandler\",easing:nr,zoom:i?Math.round(l)+i*(t.shiftKey?2:1):l,bearing:s.getBearing()+o*e._bearingStep,pitch:s.getPitch()+r*e._pitchStep,offset:[-a*e._panStep,-n*e._panStep],center:s.getCenter()},{originalEvent:t});}}}},ar.prototype.enable=function(){this._enabled=!0;},ar.prototype.disable=function(){this._enabled=!1,this.reset();},ar.prototype.isEnabled=function(){return this._enabled},ar.prototype.isActive=function(){return this._active},ar.prototype.disableRotation=function(){this._rotationDisabled=!0;},ar.prototype.enableRotation=function(){this._rotationDisabled=!1;};var sr=function(e,i){this._map=e,this._el=e.getCanvasContainer(),this._handler=i,this._delta=0,this._defaultZoomRate=.01,this._wheelZoomRate=1/450,t.bindAll([\"_onTimeout\"],this);};sr.prototype.setZoomRate=function(t){this._defaultZoomRate=t;},sr.prototype.setWheelZoomRate=function(t){this._wheelZoomRate=t;},sr.prototype.isEnabled=function(){return !!this._enabled},sr.prototype.isActive=function(){return !!this._active||void 0!==this._finishTimeout},sr.prototype.isZooming=function(){return !!this._zooming},sr.prototype.enable=function(t){this.isEnabled()||(this._enabled=!0,this._aroundCenter=t&&\"center\"===t.around);},sr.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1);},sr.prototype.wheel=function(e){if(this.isEnabled()){var i=e.deltaMode===t.window.WheelEvent.DOM_DELTA_LINE?40*e.deltaY:e.deltaY,o=t.browser.now(),r=o-(this._lastWheelEventTime||0);this._lastWheelEventTime=o,0!==i&&i%4.000244140625==0?this._type=\"wheel\":0!==i&&Math.abs(i)<4?this._type=\"trackpad\":r>400?(this._type=null,this._lastValue=i,this._timeout=setTimeout(this._onTimeout,40,e)):this._type||(this._type=Math.abs(r*i)<200?\"trackpad\":\"wheel\",this._timeout&&(clearTimeout(this._timeout),this._timeout=null,i+=this._lastValue)),e.shiftKey&&i&&(i/=4),this._type&&(this._lastWheelEvent=e,this._delta-=i,this._active||this._start(e)),e.preventDefault();}},sr.prototype._onTimeout=function(t){this._type=\"wheel\",this._delta-=this._lastValue,this._active||this._start(t);},sr.prototype._start=function(e){if(this._delta){this._frameId&&(this._frameId=null),this._active=!0,this.isZooming()||(this._zooming=!0),this._finishTimeout&&(clearTimeout(this._finishTimeout),delete this._finishTimeout);var o=i.mousePos(this._el,e);this._around=t.LngLat.convert(this._aroundCenter?this._map.getCenter():this._map.unproject(o)),this._aroundPoint=this._map.transform.locationPoint(this._around),this._frameId||(this._frameId=!0,this._handler._triggerRenderFrame());}},sr.prototype.renderFrame=function(){var e=this;if(this._frameId&&(this._frameId=null,this.isActive())){var i=this._map.transform;if(0!==this._delta){var o=\"wheel\"===this._type&&Math.abs(this._delta)>4.000244140625?this._wheelZoomRate:this._defaultZoomRate,r=2/(1+Math.exp(-Math.abs(this._delta*o)));this._delta<0&&0!==r&&(r=1/r);var a=\"number\"==typeof this._targetZoom?i.zoomScale(this._targetZoom):i.scale;this._targetZoom=Math.min(i.maxZoom,Math.max(i.minZoom,i.scaleZoom(a*r))),\"wheel\"===this._type&&(this._startZoom=i.zoom,this._easing=this._smoothOutEasing(200)),this._delta=0;}var n,s=\"number\"==typeof this._targetZoom?this._targetZoom:i.zoom,l=this._startZoom,c=this._easing,u=!1;if(\"wheel\"===this._type&&l&&c){var h=Math.min((t.browser.now()-this._lastWheelEventTime)/200,1),p=c(h);n=t.number(l,s,p),h<1?this._frameId||(this._frameId=!0):u=!0;}else n=s,u=!0;return this._active=!0,u&&(this._active=!1,this._finishTimeout=setTimeout((function(){e._zooming=!1,e._handler._triggerRenderFrame(),delete e._targetZoom,delete e._finishTimeout;}),200)),{noInertia:!0,needsRenderFrame:!u,zoomDelta:n-i.zoom,around:this._aroundPoint,originalEvent:this._lastWheelEvent}}},sr.prototype._smoothOutEasing=function(e){var i=t.ease;if(this._prevEase){var o=this._prevEase,r=(t.browser.now()-o.start)/o.duration,a=o.easing(r+.01)-o.easing(r),n=.27/Math.sqrt(a*a+1e-4)*.01,s=Math.sqrt(.0729-n*n);i=t.bezier(n,s,.25,1);}return this._prevEase={start:t.browser.now(),duration:e,easing:i},i},sr.prototype.blur=function(){this.reset();},sr.prototype.reset=function(){this._active=!1;};var lr=function(t,e){this._clickZoom=t,this._tapZoom=e;};lr.prototype.enable=function(){this._clickZoom.enable(),this._tapZoom.enable();},lr.prototype.disable=function(){this._clickZoom.disable(),this._tapZoom.disable();},lr.prototype.isEnabled=function(){return this._clickZoom.isEnabled()&&this._tapZoom.isEnabled()},lr.prototype.isActive=function(){return this._clickZoom.isActive()||this._tapZoom.isActive()};var cr=function(){this.reset();};cr.prototype.reset=function(){this._active=!1;},cr.prototype.blur=function(){this.reset();},cr.prototype.dblclick=function(t,e){return t.preventDefault(),{cameraAnimation:function(i){i.easeTo({duration:300,zoom:i.getZoom()+(t.shiftKey?-1:1),around:i.unproject(e)},{originalEvent:t});}}},cr.prototype.enable=function(){this._enabled=!0;},cr.prototype.disable=function(){this._enabled=!1,this.reset();},cr.prototype.isEnabled=function(){return this._enabled},cr.prototype.isActive=function(){return this._active};var ur=function(){this._tap=new qo({numTouches:1,numTaps:1}),this.reset();};ur.prototype.reset=function(){this._active=!1,delete this._swipePoint,delete this._swipeTouch,delete this._tapTime,this._tap.reset();},ur.prototype.touchstart=function(t,e,i){this._swipePoint||(this._tapTime&&t.timeStamp-this._tapTime>500&&this.reset(),this._tapTime?i.length>0&&(this._swipePoint=e[0],this._swipeTouch=i[0].identifier):this._tap.touchstart(t,e,i));},ur.prototype.touchmove=function(t,e,i){if(this._tapTime){if(this._swipePoint){if(i[0].identifier!==this._swipeTouch)return;var o=e[0],r=o.y-this._swipePoint.y;return this._swipePoint=o,t.preventDefault(),this._active=!0,{zoomDelta:r/128}}}else this._tap.touchmove(t,e,i);},ur.prototype.touchend=function(t,e,i){this._tapTime?this._swipePoint&&0===i.length&&this.reset():this._tap.touchend(t,e,i)&&(this._tapTime=t.timeStamp);},ur.prototype.touchcancel=function(){this.reset();},ur.prototype.enable=function(){this._enabled=!0;},ur.prototype.disable=function(){this._enabled=!1,this.reset();},ur.prototype.isEnabled=function(){return this._enabled},ur.prototype.isActive=function(){return this._active};var hr=function(t,e,i){this._el=t,this._mousePan=e,this._touchPan=i;};hr.prototype.enable=function(t){this._inertiaOptions=t||{},this._mousePan.enable(),this._touchPan.enable(),this._el.classList.add(\"mapboxgl-touch-drag-pan\");},hr.prototype.disable=function(){this._mousePan.disable(),this._touchPan.disable(),this._el.classList.remove(\"mapboxgl-touch-drag-pan\");},hr.prototype.isEnabled=function(){return this._mousePan.isEnabled()&&this._touchPan.isEnabled()},hr.prototype.isActive=function(){return this._mousePan.isActive()||this._touchPan.isActive()};var pr=function(t,e,i){this._pitchWithRotate=t.pitchWithRotate,this._mouseRotate=e,this._mousePitch=i;};pr.prototype.enable=function(){this._mouseRotate.enable(),this._pitchWithRotate&&this._mousePitch.enable();},pr.prototype.disable=function(){this._mouseRotate.disable(),this._mousePitch.disable();},pr.prototype.isEnabled=function(){return this._mouseRotate.isEnabled()&&(!this._pitchWithRotate||this._mousePitch.isEnabled())},pr.prototype.isActive=function(){return this._mouseRotate.isActive()||this._mousePitch.isActive()};var dr=function(t,e,i,o){this._el=t,this._touchZoom=e,this._touchRotate=i,this._tapDragZoom=o,this._rotationDisabled=!1,this._enabled=!0;};dr.prototype.enable=function(t){this._touchZoom.enable(t),this._rotationDisabled||this._touchRotate.enable(t),this._tapDragZoom.enable(),this._el.classList.add(\"mapboxgl-touch-zoom-rotate\");},dr.prototype.disable=function(){this._touchZoom.disable(),this._touchRotate.disable(),this._tapDragZoom.disable(),this._el.classList.remove(\"mapboxgl-touch-zoom-rotate\");},dr.prototype.isEnabled=function(){return this._touchZoom.isEnabled()&&(this._rotationDisabled||this._touchRotate.isEnabled())&&this._tapDragZoom.isEnabled()},dr.prototype.isActive=function(){return this._touchZoom.isActive()||this._touchRotate.isActive()||this._tapDragZoom.isActive()},dr.prototype.disableRotation=function(){this._rotationDisabled=!0,this._touchRotate.disable();},dr.prototype.enableRotation=function(){this._rotationDisabled=!1,this._touchZoom.isEnabled()&&this._touchRotate.enable();};var _r=function(t){return t.zoom||t.drag||t.pitch||t.rotate},fr=function(t){function e(){t.apply(this,arguments);}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e,e}(t.Event);function mr(t){return t.panDelta&&t.panDelta.mag()||t.zoomDelta||t.bearingDelta||t.pitchDelta}var gr=function(e,o){this._map=e,this._el=this._map.getCanvasContainer(),this._handlers=[],this._handlersById={},this._changes=[],this._inertia=new Ao(e),this._bearingSnap=o.bearingSnap,this._previousActiveHandlers={},this._eventsInProgress={},this._addDefaultHandlers(o),t.bindAll([\"handleEvent\",\"handleWindowEvent\"],this);var r=this._el;this._listeners=[[r,\"touchstart\",{passive:!0}],[r,\"touchmove\",{passive:!1}],[r,\"touchend\",void 0],[r,\"touchcancel\",void 0],[r,\"mousedown\",void 0],[r,\"mousemove\",void 0],[r,\"mouseup\",void 0],[t.window.document,\"mousemove\",{capture:!0}],[t.window.document,\"mouseup\",void 0],[r,\"mouseover\",void 0],[r,\"mouseout\",void 0],[r,\"dblclick\",void 0],[r,\"click\",void 0],[r,\"keydown\",{capture:!1}],[r,\"keyup\",void 0],[r,\"wheel\",{passive:!1}],[r,\"contextmenu\",void 0],[t.window,\"blur\",void 0]];for(var a=0,n=this._listeners;aa?Math.min(2,b):Math.max(.5,b),w=Math.pow(m,1-e),T=r.unproject(y.add(x.mult(e*w)).mult(f));r.setLocationAtPoint(r.renderWorldCopies?T.wrap():T,_);}o._fireMoveEvents(i);}),(function(t){o._afterEase(i,t);}),e),this},i.prototype._prepareEase=function(e,i,o){void 0===o&&(o={}),this._moving=!0,i||o.moving||this.fire(new t.Event(\"movestart\",e)),this._zooming&&!o.zooming&&this.fire(new t.Event(\"zoomstart\",e)),this._rotating&&!o.rotating&&this.fire(new t.Event(\"rotatestart\",e)),this._pitching&&!o.pitching&&this.fire(new t.Event(\"pitchstart\",e));},i.prototype._fireMoveEvents=function(e){this.fire(new t.Event(\"move\",e)),this._zooming&&this.fire(new t.Event(\"zoom\",e)),this._rotating&&this.fire(new t.Event(\"rotate\",e)),this._pitching&&this.fire(new t.Event(\"pitch\",e));},i.prototype._afterEase=function(e,i){if(!this._easeId||!i||this._easeId!==i){delete this._easeId;var o=this._zooming,r=this._rotating,a=this._pitching;this._moving=!1,this._zooming=!1,this._rotating=!1,this._pitching=!1,this._padding=!1,o&&this.fire(new t.Event(\"zoomend\",e)),r&&this.fire(new t.Event(\"rotateend\",e)),a&&this.fire(new t.Event(\"pitchend\",e)),this.fire(new t.Event(\"moveend\",e));}},i.prototype.flyTo=function(e,i){var o=this;if(!e.essential&&t.browser.prefersReducedMotion){var r=t.pick(e,[\"center\",\"zoom\",\"bearing\",\"pitch\",\"around\"]);return this.jumpTo(r,i)}this.stop(),e=t.extend({offset:[0,0],speed:1.2,curve:1.42,easing:t.ease},e);var a=this.transform,n=this.getZoom(),s=this.getBearing(),l=this.getPitch(),c=this.getPadding(),u=\"zoom\"in e?t.clamp(+e.zoom,a.minZoom,a.maxZoom):n,h=\"bearing\"in e?this._normalizeBearing(e.bearing,s):s,p=\"pitch\"in e?+e.pitch:l,d=\"padding\"in e?e.padding:a.padding,_=a.zoomScale(u-n),f=t.Point.convert(e.offset),m=a.centerPoint.add(f),g=a.pointLocation(m),v=t.LngLat.convert(e.center||g);this._normalizeCenter(v);var y=a.project(g),x=a.project(v).sub(y),b=e.curve,w=Math.max(a.width,a.height),T=w/_,E=x.mag();if(\"minZoom\"in e){var I=t.clamp(Math.min(e.minZoom,n,u),a.minZoom,a.maxZoom),P=w/a.zoomScale(I-n);b=Math.sqrt(P/E*2);}var S=b*b;function C(t){var e=(T*T-w*w+(t?-1:1)*S*S*E*E)/(2*(t?T:w)*S*E);return Math.log(Math.sqrt(e*e+1)-e)}function z(t){return (Math.exp(t)-Math.exp(-t))/2}function D(t){return (Math.exp(t)+Math.exp(-t))/2}var A=C(0),M=function(t){return D(A)/D(A+b*t)},L=function(t){return w*((D(A)*(z(e=A+b*t)/D(e))-z(A))/S)/E;var e;},R=(C(1)-A)/b;if(Math.abs(E)<1e-6||!isFinite(R)){if(Math.abs(w-T)<1e-6)return this.easeTo(e,i);var k=Te.maxDuration&&(e.duration=0),this._zooming=!0,this._rotating=s!==h,this._pitching=p!==l,this._padding=!a.isPaddingEqual(d),this._prepareEase(i,!1),this._ease((function(e){var r=e*R,_=1/M(r);a.zoom=1===e?u:n+a.scaleZoom(_),o._rotating&&(a.bearing=t.number(s,h,e)),o._pitching&&(a.pitch=t.number(l,p,e)),o._padding&&(a.interpolatePadding(c,d,e),m=a.centerPoint.add(f));var g=1===e?v:a.unproject(y.add(x.mult(L(r))).mult(_));a.setLocationAtPoint(a.renderWorldCopies?g.wrap():g,m),o._fireMoveEvents(i);}),(function(){return o._afterEase(i)}),e),this},i.prototype.isEasing=function(){return !!this._easeFrameId},i.prototype.stop=function(){return this._stop()},i.prototype._stop=function(t,e){if(this._easeFrameId&&(this._cancelRenderFrame(this._easeFrameId),delete this._easeFrameId,delete this._onEaseFrame),this._onEaseEnd){var i=this._onEaseEnd;delete this._onEaseEnd,i.call(this,e);}if(!t){var o=this.handlers;o&&o.stop(!1);}return this},i.prototype._ease=function(e,i,o){!1===o.animate||0===o.duration?(e(1),i()):(this._easeStart=t.browser.now(),this._easeOptions=o,this._onEaseFrame=e,this._onEaseEnd=i,this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback));},i.prototype._renderFrameCallback=function(){var e=Math.min((t.browser.now()-this._easeStart)/this._easeOptions.duration,1);this._onEaseFrame(this._easeOptions.easing(e)),e<1?this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback):this.stop();},i.prototype._normalizeBearing=function(e,i){e=t.wrap(e,-180,180);var o=Math.abs(e-i);return Math.abs(e-360-i)180?-360:i<-180?360:0;}},i}(t.Evented),yr=function(e){void 0===e&&(e={}),this.options=e,t.bindAll([\"_toggleAttribution\",\"_updateEditLink\",\"_updateData\",\"_updateCompact\"],this);};yr.prototype.getDefaultPosition=function(){return \"bottom-right\"},yr.prototype.onAdd=function(t){var e=this.options&&this.options.compact;return this._map=t,this._container=i.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-attrib\"),this._compactButton=i.create(\"button\",\"mapboxgl-ctrl-attrib-button\",this._container),this._compactButton.addEventListener(\"click\",this._toggleAttribution),this._setElementTitle(this._compactButton,\"ToggleAttribution\"),this._innerContainer=i.create(\"div\",\"mapboxgl-ctrl-attrib-inner\",this._container),this._innerContainer.setAttribute(\"role\",\"list\"),e&&this._container.classList.add(\"mapboxgl-compact\"),this._updateAttributions(),this._updateEditLink(),this._map.on(\"styledata\",this._updateData),this._map.on(\"sourcedata\",this._updateData),this._map.on(\"moveend\",this._updateEditLink),void 0===e&&(this._map.on(\"resize\",this._updateCompact),this._updateCompact()),this._container},yr.prototype.onRemove=function(){i.remove(this._container),this._map.off(\"styledata\",this._updateData),this._map.off(\"sourcedata\",this._updateData),this._map.off(\"moveend\",this._updateEditLink),this._map.off(\"resize\",this._updateCompact),this._map=void 0,this._attribHTML=void 0;},yr.prototype._setElementTitle=function(t,e){var i=this._map._getUIString(\"AttributionControl.\"+e);t.title=i,t.setAttribute(\"aria-label\",i);},yr.prototype._toggleAttribution=function(){this._container.classList.contains(\"mapboxgl-compact-show\")?(this._container.classList.remove(\"mapboxgl-compact-show\"),this._compactButton.setAttribute(\"aria-pressed\",\"false\")):(this._container.classList.add(\"mapboxgl-compact-show\"),this._compactButton.setAttribute(\"aria-pressed\",\"true\"));},yr.prototype._updateEditLink=function(){var e=this._editLink;e||(e=this._editLink=this._container.querySelector(\".mapbox-improve-map\"));var i=[{key:\"owner\",value:this.styleOwner},{key:\"id\",value:this.styleId},{key:\"access_token\",value:this._map._requestManager._customAccessToken||t.config.ACCESS_TOKEN}];if(e){var o=i.reduce((function(t,e,o){return e.value&&(t+=e.key+\"=\"+e.value+(o=0)return !1;return !0}))).join(\" | \");n!==this._attribHTML&&(this._attribHTML=n,t.length?(this._innerContainer.innerHTML=n,this._container.classList.remove(\"mapboxgl-attrib-empty\")):this._container.classList.add(\"mapboxgl-attrib-empty\"),this._editLink=null);}},yr.prototype._updateCompact=function(){this._map.getCanvasContainer().offsetWidth<=640?this._container.classList.add(\"mapboxgl-compact\"):this._container.classList.remove(\"mapboxgl-compact\",\"mapboxgl-compact-show\");};var xr=function(){t.bindAll([\"_updateLogo\"],this),t.bindAll([\"_updateCompact\"],this);};xr.prototype.onAdd=function(t){this._map=t,this._container=i.create(\"div\",\"mapboxgl-ctrl\");var e=i.create(\"a\",\"mapboxgl-ctrl-logo\");return e.target=\"_blank\",e.rel=\"noopener nofollow\",e.href=\"https://www.mapbox.com/\",e.setAttribute(\"aria-label\",this._map._getUIString(\"LogoControl.Title\")),e.setAttribute(\"rel\",\"noopener nofollow\"),this._container.appendChild(e),this._container.style.display=\"none\",this._map.on(\"sourcedata\",this._updateLogo),this._updateLogo(),this._map.on(\"resize\",this._updateCompact),this._updateCompact(),this._container},xr.prototype.onRemove=function(){i.remove(this._container),this._map.off(\"sourcedata\",this._updateLogo),this._map.off(\"resize\",this._updateCompact);},xr.prototype.getDefaultPosition=function(){return \"bottom-left\"},xr.prototype._updateLogo=function(t){t&&\"metadata\"!==t.sourceDataType||(this._container.style.display=this._logoRequired()?\"block\":\"none\");},xr.prototype._logoRequired=function(){if(this._map.style){var t=this._map.style.sourceCaches;for(var e in t)if(t[e].getSource().mapbox_logo)return !0;return !1}},xr.prototype._updateCompact=function(){var t=this._container.children;if(t.length){var e=t[0];this._map.getCanvasContainer().offsetWidth<250?e.classList.add(\"mapboxgl-compact\"):e.classList.remove(\"mapboxgl-compact\");}};var br=function(){this._queue=[],this._id=0,this._cleared=!1,this._currentlyRunning=!1;};br.prototype.add=function(t){var e=++this._id;return this._queue.push({callback:t,id:e,cancelled:!1}),e},br.prototype.remove=function(t){for(var e=this._currentlyRunning,i=0,o=e?this._queue.concat(e):this._queue;ie.maxZoom)throw new Error(\"maxZoom must be greater than or equal to minZoom\");if(null!=e.minPitch&&null!=e.maxPitch&&e.minPitch>e.maxPitch)throw new Error(\"maxPitch must be greater than or equal to minPitch\");if(null!=e.minPitch&&e.minPitch<0)throw new Error(\"minPitch must be greater than or equal to 0\");if(null!=e.maxPitch&&e.maxPitch>60)throw new Error(\"maxPitch must be less than or equal to 60\");var r=new To(e.minZoom,e.maxZoom,e.minPitch,e.maxPitch,e.renderWorldCopies);if(o.call(this,r,e),this._interactive=e.interactive,this._maxTileCacheSize=e.maxTileCacheSize,this._failIfMajorPerformanceCaveat=e.failIfMajorPerformanceCaveat,this._preserveDrawingBuffer=e.preserveDrawingBuffer,this._antialias=e.antialias,this._trackResize=e.trackResize,this._bearingSnap=e.bearingSnap,this._refreshExpiredTiles=e.refreshExpiredTiles,this._fadeDuration=e.fadeDuration,this._crossSourceCollisions=e.crossSourceCollisions,this._crossFadingFactor=1,this._collectResourceTiming=e.collectResourceTiming,this._renderTaskQueue=new br,this._controls=[],this._mapId=t.uniqueId(),this._locale=t.extend({},wr,e.locale),this._clickTolerance=e.clickTolerance,this._requestManager=new t.RequestManager(e.transformRequest,e.accessToken),\"string\"==typeof e.container){if(this._container=t.window.document.getElementById(e.container),!this._container)throw new Error(\"Container '\"+e.container+\"' not found.\")}else {if(!(e.container instanceof Er))throw new Error(\"Invalid type: 'container' must be a String or HTMLElement.\");this._container=e.container;}if(e.maxBounds&&this.setMaxBounds(e.maxBounds),t.bindAll([\"_onWindowOnline\",\"_onWindowResize\",\"_onMapScroll\",\"_contextLost\",\"_contextRestored\"],this),this._setupContainer(),this._setupPainter(),void 0===this.painter)throw new Error(\"Failed to initialize WebGL.\");this.on(\"move\",(function(){return i._update(!1)})),this.on(\"moveend\",(function(){return i._update(!1)})),this.on(\"zoom\",(function(){return i._update(!0)})),void 0!==t.window&&(t.window.addEventListener(\"online\",this._onWindowOnline,!1),t.window.addEventListener(\"resize\",this._onWindowResize,!1),t.window.addEventListener(\"orientationchange\",this._onWindowResize,!1)),this.handlers=new gr(this,e),this._hash=e.hash&&new Io(\"string\"==typeof e.hash&&e.hash||void 0).addTo(this),this._hash&&this._hash._onHashChange()||(this.jumpTo({center:e.center,zoom:e.zoom,bearing:e.bearing,pitch:e.pitch}),e.bounds&&(this.resize(),this.fitBounds(e.bounds,t.extend({},e.fitBoundsOptions,{duration:0})))),this.resize(),this._localIdeographFontFamily=e.localIdeographFontFamily,e.style&&this.setStyle(e.style,{localIdeographFontFamily:e.localIdeographFontFamily}),e.attributionControl&&this.addControl(new yr({customAttribution:e.customAttribution})),this.addControl(new xr,e.logoPosition),this.on(\"style.load\",(function(){i.transform.unmodified&&i.jumpTo(i.style.stylesheet);})),this.on(\"data\",(function(e){i._update(\"style\"===e.dataType),i.fire(new t.Event(e.dataType+\"data\",e));})),this.on(\"dataloading\",(function(e){i.fire(new t.Event(e.dataType+\"dataloading\",e));}));}o&&(r.__proto__=o),(r.prototype=Object.create(o&&o.prototype)).constructor=r;var a={showTileBoundaries:{configurable:!0},showPadding:{configurable:!0},showCollisionBoxes:{configurable:!0},showOverdrawInspector:{configurable:!0},repaint:{configurable:!0},vertices:{configurable:!0},version:{configurable:!0}};return r.prototype._getMapId=function(){return this._mapId},r.prototype.addControl=function(e,i){if(void 0===i&&(i=e.getDefaultPosition?e.getDefaultPosition():\"top-right\"),!e||!e.onAdd)return this.fire(new t.ErrorEvent(new Error(\"Invalid argument to map.addControl(). Argument must be a control with onAdd and onRemove methods.\")));var o=e.onAdd(this);this._controls.push(e);var r=this._controlPositions[i];return -1!==i.indexOf(\"bottom\")?r.insertBefore(o,r.firstChild):r.appendChild(o),this},r.prototype.removeControl=function(e){if(!e||!e.onRemove)return this.fire(new t.ErrorEvent(new Error(\"Invalid argument to map.removeControl(). Argument must be a control with onAdd and onRemove methods.\")));var i=this._controls.indexOf(e);return i>-1&&this._controls.splice(i,1),e.onRemove(this),this},r.prototype.hasControl=function(t){return this._controls.indexOf(t)>-1},r.prototype.resize=function(e){var i=this._containerDimensions(),o=i[0],r=i[1];if(o===this.transform.width&&r===this.transform.height)return this;this._resizeCanvas(o,r),this.transform.resize(o,r),this.painter.resize(o,r);var a=!this._moving;return a&&this.fire(new t.Event(\"movestart\",e)).fire(new t.Event(\"move\",e)),this.fire(new t.Event(\"resize\",e)),a&&this.fire(new t.Event(\"moveend\",e)),this},r.prototype.getBounds=function(){return this.transform.getBounds()},r.prototype.getMaxBounds=function(){return this.transform.getMaxBounds()},r.prototype.setMaxBounds=function(e){return this.transform.setMaxBounds(t.LngLatBounds.convert(e)),this._update()},r.prototype.setMinZoom=function(t){if((t=null==t?-2:t)>=-2&&t<=this.transform.maxZoom)return this.transform.minZoom=t,this._update(),this.getZoom()=this.transform.minZoom)return this.transform.maxZoom=t,this._update(),this.getZoom()>t&&this.setZoom(t),this;throw new Error(\"maxZoom must be greater than the current minZoom\")},r.prototype.getMaxZoom=function(){return this.transform.maxZoom},r.prototype.setMinPitch=function(t){if((t=null==t?0:t)<0)throw new Error(\"minPitch must be greater than or equal to 0\");if(t>=0&&t<=this.transform.maxPitch)return this.transform.minPitch=t,this._update(),this.getPitch()60)throw new Error(\"maxPitch must be less than or equal to 60\");if(t>=this.transform.minPitch)return this.transform.maxPitch=t,this._update(),this.getPitch()>t&&this.setPitch(t),this;throw new Error(\"maxPitch must be greater than the current minPitch\")},r.prototype.getMaxPitch=function(){return this.transform.maxPitch},r.prototype.getRenderWorldCopies=function(){return this.transform.renderWorldCopies},r.prototype.setRenderWorldCopies=function(t){return this.transform.renderWorldCopies=t,this._update()},r.prototype.project=function(e){return this.transform.locationPoint(t.LngLat.convert(e))},r.prototype.unproject=function(e){return this.transform.pointLocation(t.Point.convert(e))},r.prototype.isMoving=function(){return this._moving||this.handlers.isMoving()},r.prototype.isZooming=function(){return this._zooming||this.handlers.isZooming()},r.prototype.isRotating=function(){return this._rotating||this.handlers.isRotating()},r.prototype._createDelegatedListener=function(t,e,i){var o,r=this;if(\"mouseenter\"===t||\"mouseover\"===t){var a=!1;return {layer:e,listener:i,delegates:{mousemove:function(o){var n=r.getLayer(e)?r.queryRenderedFeatures(o.point,{layers:[e]}):[];n.length?a||(a=!0,i.call(r,new Ro(t,r,o.originalEvent,{features:n}))):a=!1;},mouseout:function(){a=!1;}}}}if(\"mouseleave\"===t||\"mouseout\"===t){var n=!1;return {layer:e,listener:i,delegates:{mousemove:function(o){(r.getLayer(e)?r.queryRenderedFeatures(o.point,{layers:[e]}):[]).length?n=!0:n&&(n=!1,i.call(r,new Ro(t,r,o.originalEvent)));},mouseout:function(e){n&&(n=!1,i.call(r,new Ro(t,r,e.originalEvent)));}}}}return {layer:e,listener:i,delegates:(o={},o[t]=function(t){var o=r.getLayer(e)?r.queryRenderedFeatures(t.point,{layers:[e]}):[];o.length&&(t.features=o,i.call(r,t),delete t.features);},o)}},r.prototype.on=function(t,e,i){if(void 0===i)return o.prototype.on.call(this,t,e);var r=this._createDelegatedListener(t,e,i);for(var a in this._delegatedListeners=this._delegatedListeners||{},this._delegatedListeners[t]=this._delegatedListeners[t]||[],this._delegatedListeners[t].push(r),r.delegates)this.on(a,r.delegates[a]);return this},r.prototype.once=function(t,e,i){if(void 0===i)return o.prototype.once.call(this,t,e);var r=this._createDelegatedListener(t,e,i);for(var a in r.delegates)this.once(a,r.delegates[a]);return this},r.prototype.off=function(t,e,i){var r=this;return void 0===i?o.prototype.off.call(this,t,e):(this._delegatedListeners&&this._delegatedListeners[t]&&function(o){for(var a=o[t],n=0;n180;){var s=o.locationPoint(e);if(s.x>=0&&s.y>=0&&s.x<=o.width&&s.y<=o.height)break;e.lng>o.center.lng?e.lng-=360:e.lng+=360;}return e}Ar.prototype.down=function(t,e){this.mouseRotate.mousedown(t,e),this.mousePitch&&this.mousePitch.mousedown(t,e),i.disableDrag();},Ar.prototype.move=function(t,e){var i=this.map,o=this.mouseRotate.mousemoveWindow(t,e);if(o&&o.bearingDelta&&i.setBearing(i.getBearing()+o.bearingDelta),this.mousePitch){var r=this.mousePitch.mousemoveWindow(t,e);r&&r.pitchDelta&&i.setPitch(i.getPitch()+r.pitchDelta);}},Ar.prototype.off=function(){var t=this.element;i.removeEventListener(t,\"mousedown\",this.mousedown),i.removeEventListener(t,\"touchstart\",this.touchstart,{passive:!1}),i.removeEventListener(t,\"touchmove\",this.touchmove),i.removeEventListener(t,\"touchend\",this.touchend),i.removeEventListener(t,\"touchcancel\",this.reset),this.offTemp();},Ar.prototype.offTemp=function(){i.enableDrag(),i.removeEventListener(t.window,\"mousemove\",this.mousemove),i.removeEventListener(t.window,\"mouseup\",this.mouseup);},Ar.prototype.mousedown=function(e){this.down(t.extend({},e,{ctrlKey:!0,preventDefault:function(){return e.preventDefault()}}),i.mousePos(this.element,e)),i.addEventListener(t.window,\"mousemove\",this.mousemove),i.addEventListener(t.window,\"mouseup\",this.mouseup);},Ar.prototype.mousemove=function(t){this.move(t,i.mousePos(this.element,t));},Ar.prototype.mouseup=function(t){this.mouseRotate.mouseupWindow(t),this.mousePitch&&this.mousePitch.mouseupWindow(t),this.offTemp();},Ar.prototype.touchstart=function(t){1!==t.targetTouches.length?this.reset():(this._startPos=this._lastPos=i.touchPos(this.element,t.targetTouches)[0],this.down({type:\"mousedown\",button:0,ctrlKey:!0,preventDefault:function(){return t.preventDefault()}},this._startPos));},Ar.prototype.touchmove=function(t){1!==t.targetTouches.length?this.reset():(this._lastPos=i.touchPos(this.element,t.targetTouches)[0],this.move({preventDefault:function(){return t.preventDefault()}},this._lastPos));},Ar.prototype.touchend=function(t){0===t.targetTouches.length&&this._startPos&&this._lastPos&&this._startPos.dist(this._lastPos)=i;}this._isDragging&&(this._pos=e.point.sub(this._positionDelta),this._lngLat=this._map.unproject(this._pos),this.setLngLat(this._lngLat),this._element.style.pointerEvents=\"none\",\"pending\"===this._state&&(this._state=\"active\",this.fire(new t.Event(\"dragstart\"))),this.fire(new t.Event(\"drag\")));},o.prototype._onUp=function(){this._element.style.pointerEvents=\"auto\",this._positionDelta=null,this._pointerdownPos=null,this._isDragging=!1,this._map.off(\"mousemove\",this._onMove),this._map.off(\"touchmove\",this._onMove),\"active\"===this._state&&this.fire(new t.Event(\"dragend\")),this._state=\"inactive\";},o.prototype._addDragHandler=function(t){this._element.contains(t.originalEvent.target)&&(t.preventDefault(),this._positionDelta=t.point.sub(this._pos).add(this._offset),this._pointerdownPos=t.point,this._state=\"pending\",this._map.on(\"mousemove\",this._onMove),this._map.on(\"touchmove\",this._onMove),this._map.once(\"mouseup\",this._onUp),this._map.once(\"touchend\",this._onUp));},o.prototype.setDraggable=function(t){return this._draggable=!!t,this._map&&(t?(this._map.on(\"mousedown\",this._addDragHandler),this._map.on(\"touchstart\",this._addDragHandler)):(this._map.off(\"mousedown\",this._addDragHandler),this._map.off(\"touchstart\",this._addDragHandler))),this},o.prototype.isDraggable=function(){return this._draggable},o.prototype.setRotation=function(t){return this._rotation=t||0,this._update(),this},o.prototype.getRotation=function(){return this._rotation},o.prototype.setRotationAlignment=function(t){return this._rotationAlignment=t||\"auto\",this._update(),this},o.prototype.getRotationAlignment=function(){return this._rotationAlignment},o.prototype.setPitchAlignment=function(t){return this._pitchAlignment=t&&\"auto\"!==t?t:this._rotationAlignment,this._update(),this},o.prototype.getPitchAlignment=function(){return this._pitchAlignment},o}(t.Evented),Or={positionOptions:{enableHighAccuracy:!1,maximumAge:0,timeout:6e3},fitBoundsOptions:{maxZoom:15},trackUserLocation:!1,showAccuracyCircle:!0,showUserLocation:!0},Fr=0,Ur=!1,Nr=function(e){function o(i){e.call(this),this.options=t.extend({},Or,i),t.bindAll([\"_onSuccess\",\"_onError\",\"_onZoom\",\"_finish\",\"_setupUI\",\"_updateCamera\",\"_updateMarker\"],this);}return e&&(o.__proto__=e),(o.prototype=Object.create(e&&e.prototype)).constructor=o,o.prototype.onAdd=function(e){var o;return this._map=e,this._container=i.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-group\"),o=this._setupUI,void 0!==kr?o(kr):void 0!==t.window.navigator.permissions?t.window.navigator.permissions.query({name:\"geolocation\"}).then((function(t){o(kr=\"denied\"!==t.state);})):o(kr=!!t.window.navigator.geolocation),this._container},o.prototype.onRemove=function(){void 0!==this._geolocationWatchID&&(t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0),this.options.showUserLocation&&this._userLocationDotMarker&&this._userLocationDotMarker.remove(),this.options.showAccuracyCircle&&this._accuracyCircleMarker&&this._accuracyCircleMarker.remove(),i.remove(this._container),this._map.off(\"zoom\",this._onZoom),this._map=void 0,Fr=0,Ur=!1;},o.prototype._isOutOfMapMaxBounds=function(t){var e=this._map.getMaxBounds(),i=t.coords;return e&&(i.longitudee.getEast()||i.latitudee.getNorth())},o.prototype._setErrorState=function(){switch(this._watchState){case\"WAITING_ACTIVE\":this._watchState=\"ACTIVE_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\");break;case\"ACTIVE_LOCK\":this._watchState=\"ACTIVE_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\");break;case\"BACKGROUND\":this._watchState=\"BACKGROUND_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\");}},o.prototype._onSuccess=function(e){if(this._map){if(this._isOutOfMapMaxBounds(e))return this._setErrorState(),this.fire(new t.Event(\"outofmaxbounds\",e)),this._updateMarker(),void this._finish();if(this.options.trackUserLocation)switch(this._lastKnownPosition=e,this._watchState){case\"WAITING_ACTIVE\":case\"ACTIVE_LOCK\":case\"ACTIVE_ERROR\":this._watchState=\"ACTIVE_LOCK\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"BACKGROUND\":case\"BACKGROUND_ERROR\":this._watchState=\"BACKGROUND\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\");}this.options.showUserLocation&&\"OFF\"!==this._watchState&&this._updateMarker(e),this.options.trackUserLocation&&\"ACTIVE_LOCK\"!==this._watchState||this._updateCamera(e),this.options.showUserLocation&&this._dotElement.classList.remove(\"mapboxgl-user-location-dot-stale\"),this.fire(new t.Event(\"geolocate\",e)),this._finish();}},o.prototype._updateCamera=function(e){var i=new t.LngLat(e.coords.longitude,e.coords.latitude),o=e.coords.accuracy,r=this._map.getBearing(),a=t.extend({bearing:r},this.options.fitBoundsOptions);this._map.fitBounds(i.toBounds(o),a,{geolocateSource:!0});},o.prototype._updateMarker=function(e){if(e){var i=new t.LngLat(e.coords.longitude,e.coords.latitude);this._accuracyCircleMarker.setLngLat(i).addTo(this._map),this._userLocationDotMarker.setLngLat(i).addTo(this._map),this._accuracy=e.coords.accuracy,this.options.showUserLocation&&this.options.showAccuracyCircle&&this._updateCircleRadius();}else this._userLocationDotMarker.remove(),this._accuracyCircleMarker.remove();},o.prototype._updateCircleRadius=function(){var t=this._map._container.clientHeight/2,e=this._map.unproject([0,t]),i=this._map.unproject([1,t]),o=e.distanceTo(i),r=Math.ceil(2*this._accuracy/o);this._circleElement.style.width=r+\"px\",this._circleElement.style.height=r+\"px\";},o.prototype._onZoom=function(){this.options.showUserLocation&&this.options.showAccuracyCircle&&this._updateCircleRadius();},o.prototype._onError=function(e){if(this._map){if(this.options.trackUserLocation)if(1===e.code){this._watchState=\"OFF\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.disabled=!0;var i=this._map._getUIString(\"GeolocateControl.LocationNotAvailable\");this._geolocateButton.title=i,this._geolocateButton.setAttribute(\"aria-label\",i),void 0!==this._geolocationWatchID&&this._clearWatch();}else {if(3===e.code&&Ur)return;this._setErrorState();}\"OFF\"!==this._watchState&&this.options.showUserLocation&&this._dotElement.classList.add(\"mapboxgl-user-location-dot-stale\"),this.fire(new t.Event(\"error\",e)),this._finish();}},o.prototype._finish=function(){this._timeoutId&&clearTimeout(this._timeoutId),this._timeoutId=void 0;},o.prototype._setupUI=function(e){var o=this;if(this._container.addEventListener(\"contextmenu\",(function(t){return t.preventDefault()})),this._geolocateButton=i.create(\"button\",\"mapboxgl-ctrl-geolocate\",this._container),i.create(\"span\",\"mapboxgl-ctrl-icon\",this._geolocateButton).setAttribute(\"aria-hidden\",!0),this._geolocateButton.type=\"button\",!1===e){t.warnOnce(\"Geolocation support is not available so the GeolocateControl will be disabled.\");var r=this._map._getUIString(\"GeolocateControl.LocationNotAvailable\");this._geolocateButton.disabled=!0,this._geolocateButton.title=r,this._geolocateButton.setAttribute(\"aria-label\",r);}else {var a=this._map._getUIString(\"GeolocateControl.FindMyLocation\");this._geolocateButton.title=a,this._geolocateButton.setAttribute(\"aria-label\",a);}this.options.trackUserLocation&&(this._geolocateButton.setAttribute(\"aria-pressed\",\"false\"),this._watchState=\"OFF\"),this.options.showUserLocation&&(this._dotElement=i.create(\"div\",\"mapboxgl-user-location-dot\"),this._userLocationDotMarker=new Br(this._dotElement),this._circleElement=i.create(\"div\",\"mapboxgl-user-location-accuracy-circle\"),this._accuracyCircleMarker=new Br({element:this._circleElement,pitchAlignment:\"map\"}),this.options.trackUserLocation&&(this._watchState=\"OFF\"),this._map.on(\"zoom\",this._onZoom)),this._geolocateButton.addEventListener(\"click\",this.trigger.bind(this)),this._setup=!0,this.options.trackUserLocation&&this._map.on(\"movestart\",(function(e){e.geolocateSource||\"ACTIVE_LOCK\"!==o._watchState||e.originalEvent&&\"resize\"===e.originalEvent.type||(o._watchState=\"BACKGROUND\",o._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\"),o._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),o.fire(new t.Event(\"trackuserlocationend\")));}));},o.prototype.trigger=function(){if(!this._setup)return t.warnOnce(\"Geolocate control triggered before added to a map\"),!1;if(this.options.trackUserLocation){switch(this._watchState){case\"OFF\":this._watchState=\"WAITING_ACTIVE\",this.fire(new t.Event(\"trackuserlocationstart\"));break;case\"WAITING_ACTIVE\":case\"ACTIVE_LOCK\":case\"ACTIVE_ERROR\":case\"BACKGROUND_ERROR\":Fr--,Ur=!1,this._watchState=\"OFF\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this.fire(new t.Event(\"trackuserlocationend\"));break;case\"BACKGROUND\":this._watchState=\"ACTIVE_LOCK\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._lastKnownPosition&&this._updateCamera(this._lastKnownPosition),this.fire(new t.Event(\"trackuserlocationstart\"));}switch(this._watchState){case\"WAITING_ACTIVE\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"ACTIVE_LOCK\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"ACTIVE_ERROR\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\");break;case\"BACKGROUND\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\");break;case\"BACKGROUND_ERROR\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background-error\");}if(\"OFF\"===this._watchState&&void 0!==this._geolocationWatchID)this._clearWatch();else if(void 0===this._geolocationWatchID){var e;this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.setAttribute(\"aria-pressed\",\"true\"),++Fr>1?(e={maximumAge:6e5,timeout:0},Ur=!0):(e=this.options.positionOptions,Ur=!1),this._geolocationWatchID=t.window.navigator.geolocation.watchPosition(this._onSuccess,this._onError,e);}}else t.window.navigator.geolocation.getCurrentPosition(this._onSuccess,this._onError,this.options.positionOptions),this._timeoutId=setTimeout(this._finish,1e4);return !0},o.prototype._clearWatch=function(){t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0,this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.setAttribute(\"aria-pressed\",\"false\"),this.options.showUserLocation&&this._updateMarker(null);},o}(t.Evented),Zr={maxWidth:100,unit:\"metric\"},qr=function(e){this.options=t.extend({},Zr,e),t.bindAll([\"_onMove\",\"setUnit\"],this);};function jr(t,e,i){var o=i&&i.maxWidth||100,r=t._container.clientHeight/2,a=t.unproject([0,r]),n=t.unproject([o,r]),s=a.distanceTo(n);if(i&&\"imperial\"===i.unit){var l=3.2808*s;l>5280?Vr(e,o,l/5280,t._getUIString(\"ScaleControl.Miles\")):Vr(e,o,l,t._getUIString(\"ScaleControl.Feet\"));}else i&&\"nautical\"===i.unit?Vr(e,o,s/1852,t._getUIString(\"ScaleControl.NauticalMiles\")):s>=1e3?Vr(e,o,s/1e3,t._getUIString(\"ScaleControl.Kilometers\")):Vr(e,o,s,t._getUIString(\"ScaleControl.Meters\"));}function Vr(t,e,i,o){var r,a,n,s=(r=i,(a=Math.pow(10,(\"\"+Math.floor(r)).length-1))*(n=(n=r/a)>=10?10:n>=5?5:n>=3?3:n>=2?2:n>=1?1:function(t){var e=Math.pow(10,Math.ceil(-Math.log(t)/Math.LN10));return Math.round(t*e)/e}(n)));t.style.width=e*(s/i)+\"px\",t.innerHTML=s+\" \"+o;}qr.prototype.getDefaultPosition=function(){return \"bottom-left\"},qr.prototype._onMove=function(){jr(this._map,this._container,this.options);},qr.prototype.onAdd=function(t){return this._map=t,this._container=i.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-scale\",t.getContainer()),this._map.on(\"move\",this._onMove),this._onMove(),this._container},qr.prototype.onRemove=function(){i.remove(this._container),this._map.off(\"move\",this._onMove),this._map=void 0;},qr.prototype.setUnit=function(t){this.options.unit=t,jr(this._map,this._container,this.options);};var Gr=function(e){this._fullscreen=!1,e&&e.container&&(e.container instanceof t.window.HTMLElement?this._container=e.container:t.warnOnce(\"Full screen control 'container' must be a DOM element.\")),t.bindAll([\"_onClickFullscreen\",\"_changeIcon\"],this),\"onfullscreenchange\"in t.window.document?this._fullscreenchange=\"fullscreenchange\":\"onmozfullscreenchange\"in t.window.document?this._fullscreenchange=\"mozfullscreenchange\":\"onwebkitfullscreenchange\"in t.window.document?this._fullscreenchange=\"webkitfullscreenchange\":\"onmsfullscreenchange\"in t.window.document&&(this._fullscreenchange=\"MSFullscreenChange\");};Gr.prototype.onAdd=function(e){return this._map=e,this._container||(this._container=this._map.getContainer()),this._controlContainer=i.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-group\"),this._checkFullscreenSupport()?this._setupUI():(this._controlContainer.style.display=\"none\",t.warnOnce(\"This device does not support fullscreen mode.\")),this._controlContainer},Gr.prototype.onRemove=function(){i.remove(this._controlContainer),this._map=null,t.window.document.removeEventListener(this._fullscreenchange,this._changeIcon);},Gr.prototype._checkFullscreenSupport=function(){return !!(t.window.document.fullscreenEnabled||t.window.document.mozFullScreenEnabled||t.window.document.msFullscreenEnabled||t.window.document.webkitFullscreenEnabled)},Gr.prototype._setupUI=function(){var e=this._fullscreenButton=i.create(\"button\",\"mapboxgl-ctrl-fullscreen\",this._controlContainer);i.create(\"span\",\"mapboxgl-ctrl-icon\",e).setAttribute(\"aria-hidden\",!0),e.type=\"button\",this._updateTitle(),this._fullscreenButton.addEventListener(\"click\",this._onClickFullscreen),t.window.document.addEventListener(this._fullscreenchange,this._changeIcon);},Gr.prototype._updateTitle=function(){var t=this._getTitle();this._fullscreenButton.setAttribute(\"aria-label\",t),this._fullscreenButton.title=t;},Gr.prototype._getTitle=function(){return this._map._getUIString(this._isFullscreen()?\"FullscreenControl.Exit\":\"FullscreenControl.Enter\")},Gr.prototype._isFullscreen=function(){return this._fullscreen},Gr.prototype._changeIcon=function(){(t.window.document.fullscreenElement||t.window.document.mozFullScreenElement||t.window.document.webkitFullscreenElement||t.window.document.msFullscreenElement)===this._container!==this._fullscreen&&(this._fullscreen=!this._fullscreen,this._fullscreenButton.classList.toggle(\"mapboxgl-ctrl-shrink\"),this._fullscreenButton.classList.toggle(\"mapboxgl-ctrl-fullscreen\"),this._updateTitle());},Gr.prototype._onClickFullscreen=function(){this._isFullscreen()?t.window.document.exitFullscreen?t.window.document.exitFullscreen():t.window.document.mozCancelFullScreen?t.window.document.mozCancelFullScreen():t.window.document.msExitFullscreen?t.window.document.msExitFullscreen():t.window.document.webkitCancelFullScreen&&t.window.document.webkitCancelFullScreen():this._container.requestFullscreen?this._container.requestFullscreen():this._container.mozRequestFullScreen?this._container.mozRequestFullScreen():this._container.msRequestFullscreen?this._container.msRequestFullscreen():this._container.webkitRequestFullscreen&&this._container.webkitRequestFullscreen();};var Wr={closeButton:!0,closeOnClick:!0,focusAfterOpen:!0,className:\"\",maxWidth:\"240px\"},Xr=[\"a[href]\",\"[tabindex]:not([tabindex='-1'])\",\"[contenteditable]:not([contenteditable='false'])\",\"button:not([disabled])\",\"input:not([disabled])\",\"select:not([disabled])\",\"textarea:not([disabled])\"].join(\", \"),Hr=function(e){function o(i){e.call(this),this.options=t.extend(Object.create(Wr),i),t.bindAll([\"_update\",\"_onClose\",\"remove\",\"_onMouseMove\",\"_onMouseUp\",\"_onDrag\"],this);}return e&&(o.__proto__=e),(o.prototype=Object.create(e&&e.prototype)).constructor=o,o.prototype.addTo=function(e){return this._map&&this.remove(),this._map=e,this.options.closeOnClick&&this._map.on(\"click\",this._onClose),this.options.closeOnMove&&this._map.on(\"move\",this._onClose),this._map.on(\"remove\",this.remove),this._update(),this._focusFirstElement(),this._trackPointer?(this._map.on(\"mousemove\",this._onMouseMove),this._map.on(\"mouseup\",this._onMouseUp),this._container&&this._container.classList.add(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.add(\"mapboxgl-track-pointer\")):this._map.on(\"move\",this._update),this.fire(new t.Event(\"open\")),this},o.prototype.isOpen=function(){return !!this._map},o.prototype.remove=function(){return this._content&&i.remove(this._content),this._container&&(i.remove(this._container),delete this._container),this._map&&(this._map.off(\"move\",this._update),this._map.off(\"move\",this._onClose),this._map.off(\"click\",this._onClose),this._map.off(\"remove\",this.remove),this._map.off(\"mousemove\",this._onMouseMove),this._map.off(\"mouseup\",this._onMouseUp),this._map.off(\"drag\",this._onDrag),delete this._map),this.fire(new t.Event(\"close\")),this},o.prototype.getLngLat=function(){return this._lngLat},o.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._trackPointer=!1,this._update(),this._map&&(this._map.on(\"move\",this._update),this._map.off(\"mousemove\",this._onMouseMove),this._container&&this._container.classList.remove(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.remove(\"mapboxgl-track-pointer\")),this},o.prototype.trackPointer=function(){return this._trackPointer=!0,this._pos=null,this._update(),this._map&&(this._map.off(\"move\",this._update),this._map.on(\"mousemove\",this._onMouseMove),this._map.on(\"drag\",this._onDrag),this._container&&this._container.classList.add(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.add(\"mapboxgl-track-pointer\")),this},o.prototype.getElement=function(){return this._container},o.prototype.setText=function(e){return this.setDOMContent(t.window.document.createTextNode(e))},o.prototype.setHTML=function(e){var i,o=t.window.document.createDocumentFragment(),r=t.window.document.createElement(\"body\");for(r.innerHTML=e;i=r.firstChild;)o.appendChild(i);return this.setDOMContent(o)},o.prototype.getMaxWidth=function(){return this._container&&this._container.style.maxWidth},o.prototype.setMaxWidth=function(t){return this.options.maxWidth=t,this._update(),this},o.prototype.setDOMContent=function(t){if(this._content)for(;this._content.hasChildNodes();)this._content.firstChild&&this._content.removeChild(this._content.firstChild);else this._content=i.create(\"div\",\"mapboxgl-popup-content\",this._container);return this._content.appendChild(t),this._createCloseButton(),this._update(),this._focusFirstElement(),this},o.prototype.addClassName=function(t){this._container&&this._container.classList.add(t);},o.prototype.removeClassName=function(t){this._container&&this._container.classList.remove(t);},o.prototype.setOffset=function(t){return this.options.offset=t,this._update(),this},o.prototype.toggleClassName=function(t){if(this._container)return this._container.classList.toggle(t)},o.prototype._createCloseButton=function(){this.options.closeButton&&(this._closeButton=i.create(\"button\",\"mapboxgl-popup-close-button\",this._content),this._closeButton.type=\"button\",this._closeButton.setAttribute(\"aria-label\",\"Close popup\"),this._closeButton.innerHTML=\"×\",this._closeButton.addEventListener(\"click\",this._onClose));},o.prototype._onMouseUp=function(t){this._update(t.point);},o.prototype._onMouseMove=function(t){this._update(t.point);},o.prototype._onDrag=function(t){this._update(t.point);},o.prototype._update=function(e){var o=this;if(this._map&&(this._lngLat||this._trackPointer)&&this._content&&(this._container||(this._container=i.create(\"div\",\"mapboxgl-popup\",this._map.getContainer()),this._tip=i.create(\"div\",\"mapboxgl-popup-tip\",this._container),this._container.appendChild(this._content),this.options.className&&this.options.className.split(\" \").forEach((function(t){return o._container.classList.add(t)})),this._trackPointer&&this._container.classList.add(\"mapboxgl-popup-track-pointer\")),this.options.maxWidth&&this._container.style.maxWidth!==this.options.maxWidth&&(this._container.style.maxWidth=this.options.maxWidth),this._map.transform.renderWorldCopies&&!this._trackPointer&&(this._lngLat=Mr(this._lngLat,this._pos,this._map.transform)),!this._trackPointer||e)){var r=this._pos=this._trackPointer&&e?e:this._map.project(this._lngLat),a=this.options.anchor,n=function e(i){if(i){if(\"number\"==typeof i){var o=Math.round(Math.sqrt(.5*Math.pow(i,2)));return {center:new t.Point(0,0),top:new t.Point(0,i),\"top-left\":new t.Point(o,o),\"top-right\":new t.Point(-o,o),bottom:new t.Point(0,-i),\"bottom-left\":new t.Point(o,-o),\"bottom-right\":new t.Point(-o,-o),left:new t.Point(i,0),right:new t.Point(-i,0)}}if(i instanceof t.Point||Array.isArray(i)){var r=t.Point.convert(i);return {center:r,top:r,\"top-left\":r,\"top-right\":r,bottom:r,\"bottom-left\":r,\"bottom-right\":r,left:r,right:r}}return {center:t.Point.convert(i.center||[0,0]),top:t.Point.convert(i.top||[0,0]),\"top-left\":t.Point.convert(i[\"top-left\"]||[0,0]),\"top-right\":t.Point.convert(i[\"top-right\"]||[0,0]),bottom:t.Point.convert(i.bottom||[0,0]),\"bottom-left\":t.Point.convert(i[\"bottom-left\"]||[0,0]),\"bottom-right\":t.Point.convert(i[\"bottom-right\"]||[0,0]),left:t.Point.convert(i.left||[0,0]),right:t.Point.convert(i.right||[0,0])}}return e(new t.Point(0,0))}(this.options.offset);if(!a){var s,l=this._container.offsetWidth,c=this._container.offsetHeight;s=r.y+n.bottom.ythis._map.transform.height-c?[\"bottom\"]:[],r.xthis._map.transform.width-l/2&&s.push(\"right\"),a=0===s.length?\"bottom\":s.join(\"-\");}var u=r.add(n[a]).round();i.setTransform(this._container,Lr[a]+\" translate(\"+u.x+\"px,\"+u.y+\"px)\"),Rr(this._container,a,\"popup\");}},o.prototype._focusFirstElement=function(){if(this.options.focusAfterOpen&&this._container){var t=this._container.querySelector(Xr);t&&t.focus();}},o.prototype._onClose=function(){this.remove();},o}(t.Evented),Kr={version:t.version,supported:e,setRTLTextPlugin:t.setRTLTextPlugin,getRTLTextPluginStatus:t.getRTLTextPluginStatus,Map:Sr,NavigationControl:Dr,GeolocateControl:Nr,AttributionControl:yr,ScaleControl:qr,FullscreenControl:Gr,Popup:Hr,Marker:Br,Style:je,LngLat:t.LngLat,LngLatBounds:t.LngLatBounds,Point:t.Point,MercatorCoordinate:t.MercatorCoordinate,Evented:t.Evented,config:t.config,prewarm:function(){Ft().acquire(Rt);},clearPrewarmedResources:function(){var t=Bt;t&&(t.isPreloaded()&&1===t.numActive()?(t.release(Rt),Bt=null):console.warn(\"Could not clear WebWorkers since there are active Map instances that still reference it. The pre-warmed WebWorker pool can only be cleared when all map instances have been removed with map.remove()\"));},get accessToken(){return t.config.ACCESS_TOKEN},set accessToken(e){t.config.ACCESS_TOKEN=e;},get baseApiUrl(){return t.config.API_URL},set baseApiUrl(e){t.config.API_URL=e;},get workerCount(){return kt.workerCount},set workerCount(t){kt.workerCount=t;},get maxParallelImageRequests(){return t.config.MAX_PARALLEL_IMAGE_REQUESTS},set maxParallelImageRequests(e){t.config.MAX_PARALLEL_IMAGE_REQUESTS=e;},clearStorage:function(e){t.clearTileCache(e);},workerUrl:\"\"};return Kr}));\n\n//\n\nreturn mapboxgl;\n\n})));\n//# sourceMappingURL=mapbox-gl.js.map\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"options\", \"fieldProps\", \"proFieldProps\", \"valueEnum\"];\nimport { runFunction } from '@ant-design/pro-utils';\nimport { Checkbox } from 'antd';\nimport React from 'react';\nimport { createField } from \"../../BaseForm/createField\";\nimport ProFormField from \"../Field\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar CheckboxGroup = /*#__PURE__*/React.forwardRef(function (_ref, ref) {\n var options = _ref.options,\n fieldProps = _ref.fieldProps,\n proFieldProps = _ref.proFieldProps,\n valueEnum = _ref.valueEnum,\n rest = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/_jsx(ProFormField, _objectSpread({\n ref: ref,\n valueType: \"checkbox\",\n valueEnum: runFunction(valueEnum, undefined),\n fieldProps: _objectSpread({\n options: options\n }, fieldProps),\n lightProps: _objectSpread({\n labelFormatter: function labelFormatter() {\n return /*#__PURE__*/_jsx(ProFormField, _objectSpread({\n ref: ref,\n valueType: \"checkbox\",\n mode: \"read\",\n valueEnum: runFunction(valueEnum, undefined),\n filedConfig: {\n customLightMode: true\n },\n fieldProps: _objectSpread({\n options: options\n }, fieldProps),\n proFieldProps: proFieldProps\n }, rest));\n }\n }, rest.lightProps),\n proFieldProps: proFieldProps\n }, rest));\n});\n/**\n * 多选框的\n *\n * @param\n */\nvar ProFormCheckboxComponents = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {\n var fieldProps = _ref2.fieldProps,\n children = _ref2.children;\n return /*#__PURE__*/_jsx(Checkbox, _objectSpread(_objectSpread({\n ref: ref\n }, fieldProps), {}, {\n children: children\n }));\n});\nvar ProFormCheckbox = createField(ProFormCheckboxComponents, {\n valuePropName: 'checked'\n});\nvar WrappedProFormCheckbox = ProFormCheckbox;\nWrappedProFormCheckbox.Group = CheckboxGroup;\nexport default WrappedProFormCheckbox;","module.exports = require('./forEach');\n","const e10 = Math.sqrt(50);\nconst e5 = Math.sqrt(10);\nconst e2 = Math.sqrt(2);\nexport function tickIncrement(start, stop, count) {\n const step = (stop - start) / Math.max(0, count);\n const power = Math.floor(Math.log(step) / Math.LN10);\n const error = step / 10 ** power;\n if (power >= 0) {\n // eslint-disable-next-line no-nested-ternary\n return (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * 10 ** power;\n }\n // eslint-disable-next-line no-nested-ternary\n return -(10 ** -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\nexport function tickStep(start, stop, count) {\n const step0 = Math.abs(stop - start) / Math.max(0, count);\n let step1 = 10 ** Math.floor(Math.log(step0) / Math.LN10);\n const error = step0 / step1;\n if (error >= e10)\n step1 *= 10;\n else if (error >= e5)\n step1 *= 5;\n else if (error >= e2)\n step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n//# sourceMappingURL=ticks.js.map","// This icon file is generated automatically.\nvar ShareAltOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M752 664c-28.5 0-54.8 10-75.4 26.7L469.4 540.8a160.68 160.68 0 000-57.6l207.2-149.9C697.2 350 723.5 360 752 360c66.2 0 120-53.8 120-120s-53.8-120-120-120-120 53.8-120 120c0 11.6 1.6 22.7 4.7 33.3L439.9 415.8C410.7 377.1 364.3 352 312 352c-88.4 0-160 71.6-160 160s71.6 160 160 160c52.3 0 98.7-25.1 127.9-63.8l196.8 142.5c-3.1 10.6-4.7 21.8-4.7 33.3 0 66.2 53.8 120 120 120s120-53.8 120-120-53.8-120-120-120zm0-476c28.7 0 52 23.3 52 52s-23.3 52-52 52-52-23.3-52-52 23.3-52 52-52zM312 600c-48.5 0-88-39.5-88-88s39.5-88 88-88 88 39.5 88 88-39.5 88-88 88zm440 236c-28.7 0-52-23.3-52-52s23.3-52 52-52 52 23.3 52 52-23.3 52-52 52z\" } }] }, \"name\": \"share-alt\", \"theme\": \"outlined\" };\nexport default ShareAltOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport ShareAltOutlinedSvg from \"@ant-design/icons-svg/es/asn/ShareAltOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar ShareAltOutlined = function ShareAltOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: ShareAltOutlinedSvg\n }));\n};\n\n/**![share-alt](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTc1MiA2NjRjLTI4LjUgMC01NC44IDEwLTc1LjQgMjYuN0w0NjkuNCA1NDAuOGExNjAuNjggMTYwLjY4IDAgMDAwLTU3LjZsMjA3LjItMTQ5LjlDNjk3LjIgMzUwIDcyMy41IDM2MCA3NTIgMzYwYzY2LjIgMCAxMjAtNTMuOCAxMjAtMTIwcy01My44LTEyMC0xMjAtMTIwLTEyMCA1My44LTEyMCAxMjBjMCAxMS42IDEuNiAyMi43IDQuNyAzMy4zTDQzOS45IDQxNS44QzQxMC43IDM3Ny4xIDM2NC4zIDM1MiAzMTIgMzUyYy04OC40IDAtMTYwIDcxLjYtMTYwIDE2MHM3MS42IDE2MCAxNjAgMTYwYzUyLjMgMCA5OC43LTI1LjEgMTI3LjktNjMuOGwxOTYuOCAxNDIuNWMtMy4xIDEwLjYtNC43IDIxLjgtNC43IDMzLjMgMCA2Ni4yIDUzLjggMTIwIDEyMCAxMjBzMTIwLTUzLjggMTIwLTEyMC01My44LTEyMC0xMjAtMTIwem0wLTQ3NmMyOC43IDAgNTIgMjMuMyA1MiA1MnMtMjMuMyA1Mi01MiA1Mi01Mi0yMy4zLTUyLTUyIDIzLjMtNTIgNTItNTJ6TTMxMiA2MDBjLTQ4LjUgMC04OC0zOS41LTg4LTg4czM5LjUtODggODgtODggODggMzkuNSA4OCA4OC0zOS41IDg4LTg4IDg4em00NDAgMjM2Yy0yOC43IDAtNTItMjMuMy01Mi01MnMyMy4zLTUyIDUyLTUyIDUyIDIzLjMgNTIgNTItMjMuMyA1Mi01MiA1MnoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(ShareAltOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'ShareAltOutlined';\n}\nexport default RefIcon;","// This icon file is generated automatically.\nvar DownloadOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z\" } }] }, \"name\": \"download\", \"theme\": \"outlined\" };\nexport default DownloadOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport DownloadOutlinedSvg from \"@ant-design/icons-svg/es/asn/DownloadOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar DownloadOutlined = function DownloadOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: DownloadOutlinedSvg\n }));\n};\n\n/**![download](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUwNS43IDY2MWE4IDggMCAwMDEyLjYgMGwxMTItMTQxLjdjNC4xLTUuMi40LTEyLjktNi4zLTEyLjloLTc0LjFWMTY4YzAtNC40LTMuNi04LTgtOGgtNjBjLTQuNCAwLTggMy42LTggOHYzMzguM0g0MDBjLTYuNyAwLTEwLjQgNy43LTYuMyAxMi45bDExMiAxNDEuOHpNODc4IDYyNmgtNjBjLTQuNCAwLTggMy42LTggOHYxNTRIMjE0VjYzNGMwLTQuNC0zLjYtOC04LThoLTYwYy00LjQgMC04IDMuNi04IDh2MTk4YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDY4NGMxNy43IDAgMzItMTQuMyAzMi0zMlY2MzRjMC00LjQtMy42LTgtOC04eiIgLz48L3N2Zz4=) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(DownloadOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'DownloadOutlined';\n}\nexport default RefIcon;","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isoWeek=t()}(this,(function(){\"use strict\";var e=\"day\";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf(\"year\"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,\"week\")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return\"isoweek\"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf(\"day\"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf(\"day\"):n.bind(this)(e,t)}}}));","import { Polar } from './polar';\nexport const getRadialOptions = (options = {}) => {\n const defaultOptions = {\n startAngle: -Math.PI / 2,\n endAngle: (Math.PI * 3) / 2,\n innerRadius: 0,\n outerRadius: 1,\n };\n return Object.assign(Object.assign({}, defaultOptions), options);\n};\n/**\n * Radial\n */\nexport const Radial = (options) => {\n const { startAngle, endAngle, innerRadius, outerRadius } = getRadialOptions(options);\n return [\n ['transpose'],\n ['translate', 0.5, 0.5],\n ['reflect'],\n ['translate', -0.5, -0.5],\n ...Polar({ startAngle, endAngle, innerRadius, outerRadius }),\n ];\n};\nRadial.props = {};\n//# sourceMappingURL=radial.js.map","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\", \"value\", \"valuePropName\", \"onChange\", \"fieldProps\", \"space\", \"type\", \"transform\", \"convertValue\", \"lightProps\"],\n _excluded2 = [\"children\", \"space\", \"valuePropName\"];\nimport { runFunction, useRefFunction } from '@ant-design/pro-utils';\nimport { Input, Space } from 'antd';\nimport toArray from \"rc-util/es/Children/toArray\";\nimport React, { useCallback, useImperativeHandle, useMemo } from 'react';\nimport { createField } from \"../../BaseForm/createField\";\nimport { useGridHelpers } from \"../../helpers\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar FieldSetType = {\n space: Space,\n group: Input.Group\n};\nexport function defaultGetValueFromEvent(valuePropName) {\n var event = arguments.length <= 1 ? undefined : arguments[1];\n if (event && event.target && valuePropName in event.target) {\n // @ts-ignore\n return event.target[valuePropName];\n }\n return event;\n}\nvar FieldSet = function FieldSet(props) {\n var children = props.children,\n _props$value = props.value,\n value = _props$value === void 0 ? [] : _props$value,\n valuePropName = props.valuePropName,\n onChange = props.onChange,\n fieldProps = props.fieldProps,\n space = props.space,\n _props$type = props.type,\n type = _props$type === void 0 ? 'space' : _props$type,\n transform = props.transform,\n convertValue = props.convertValue,\n lightProps = props.lightProps,\n rest = _objectWithoutProperties(props, _excluded);\n /**\n * 使用方法的引用防止闭包\n *\n * @param fileValue\n * @param index\n */\n var fieldSetOnChange = useRefFunction(function (fileValue, index) {\n var _fieldProps$onChange;\n var newValues = _toConsumableArray(value);\n newValues[index] = defaultGetValueFromEvent(valuePropName || 'value', fileValue);\n onChange === null || onChange === void 0 || onChange(newValues);\n fieldProps === null || fieldProps === void 0 || (_fieldProps$onChange = fieldProps.onChange) === null || _fieldProps$onChange === void 0 || _fieldProps$onChange.call(fieldProps, newValues);\n });\n var itemIndex = -1;\n var list = toArray(runFunction(children, value, props)).map(function (item) {\n if ( /*#__PURE__*/React.isValidElement(item)) {\n var _item$type, _item$props, _item$props2;\n itemIndex += 1;\n var index = itemIndex;\n var isProFromItem =\n // @ts-ignore\n (item === null || item === void 0 || (_item$type = item.type) === null || _item$type === void 0 ? void 0 : _item$type.displayName) === 'ProFormComponent' || (item === null || item === void 0 || (_item$props = item.props) === null || _item$props === void 0 ? void 0 : _item$props.readonly);\n var forkProps = isProFromItem ? _objectSpread(_objectSpread({\n key: index,\n ignoreFormItem: true\n }, item.props || {}), {}, {\n // 如果不是我们自定义的组件 fieldProps 无法识别\n fieldProps: _objectSpread(_objectSpread({}, item === null || item === void 0 || (_item$props2 = item.props) === null || _item$props2 === void 0 ? void 0 : _item$props2.fieldProps), {}, {\n onChange: function onChange() {\n fieldSetOnChange(arguments.length <= 0 ? undefined : arguments[0], index);\n }\n }),\n value: value === null || value === void 0 ? void 0 : value[index],\n onChange: undefined\n }) : _objectSpread(_objectSpread({\n key: index\n }, item.props || {}), {}, {\n value: value === null || value === void 0 ? void 0 : value[index],\n onChange: function onChange(itemValue) {\n var _props$onChange, _props;\n fieldSetOnChange(itemValue, index);\n (_props$onChange = (_props = item.props).onChange) === null || _props$onChange === void 0 || _props$onChange.call(_props, itemValue);\n }\n });\n return /*#__PURE__*/React.cloneElement(item, forkProps);\n }\n return item;\n });\n var Components = FieldSetType[type];\n var _useGridHelpers = useGridHelpers(rest),\n RowWrapper = _useGridHelpers.RowWrapper;\n\n /** Input.Group 需要配置 compact */\n var typeProps = useMemo(function () {\n return _objectSpread({}, type === 'group' ? {\n compact: true\n } : {});\n }, [type]);\n var Wrapper = useCallback(function (_ref) {\n var dom = _ref.children;\n return /*#__PURE__*/_jsx(Components, _objectSpread(_objectSpread(_objectSpread({}, typeProps), space), {}, {\n align: \"start\",\n wrap: true,\n children: dom\n }));\n }, [Components, space, typeProps]);\n return /*#__PURE__*/_jsx(RowWrapper, {\n Wrapper: Wrapper,\n children: list\n });\n};\nvar BaseProFormFieldSet = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {\n var children = _ref2.children,\n space = _ref2.space,\n valuePropName = _ref2.valuePropName,\n rest = _objectWithoutProperties(_ref2, _excluded2);\n useImperativeHandle(ref, function () {\n return {};\n });\n return /*#__PURE__*/_jsx(FieldSet, _objectSpread(_objectSpread(_objectSpread({\n space: space,\n valuePropName: valuePropName\n }, rest.fieldProps), {}, {\n // 把 fieldProps 里的重置掉\n onChange: undefined\n }, rest), {}, {\n children: children\n }));\n});\nvar ProFormFieldSet = createField(BaseProFormFieldSet);\nexport default ProFormFieldSet;","import { __read } from \"tslib\";\nimport { degToRad, parseSeriesAttr, textOf } from '../../../util';\nvar Bounds = /** @class */ (function () {\n function Bounds(x1, y1, x2, y2) {\n this.set(x1, y1, x2, y2);\n }\n Object.defineProperty(Bounds.prototype, \"left\", {\n get: function () {\n return this.x1;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Bounds.prototype, \"top\", {\n get: function () {\n return this.y1;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Bounds.prototype, \"right\", {\n get: function () {\n return this.x2;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Bounds.prototype, \"bottom\", {\n get: function () {\n return this.y2;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Bounds.prototype, \"width\", {\n get: function () {\n return this.defined('x2') && this.defined('x1') ? this.x2 - this.x1 : undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Bounds.prototype, \"height\", {\n get: function () {\n return this.defined('y2') && this.defined('y1') ? this.y2 - this.y1 : undefined;\n },\n enumerable: false,\n configurable: true\n });\n Bounds.prototype.rotatedPoints = function (radian, x, y) {\n var _a = this, x1 = _a.x1, y1 = _a.y1, x2 = _a.x2, y2 = _a.y2;\n var cos = Math.cos(radian);\n var sin = Math.sin(radian);\n var cx = x - x * cos + y * sin;\n var cy = y - x * sin - y * cos;\n var points = [\n [cos * x1 - sin * y2 + cx, sin * x1 + cos * y2 + cy],\n [cos * x2 - sin * y2 + cx, sin * x2 + cos * y2 + cy],\n [cos * x1 - sin * y1 + cx, sin * x1 + cos * y1 + cy],\n [cos * x2 - sin * y1 + cx, sin * x2 + cos * y1 + cy],\n ];\n return points;\n };\n Bounds.prototype.set = function (x1, y1, x2, y2) {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n }\n else {\n this.x1 = x1;\n this.x2 = x2;\n }\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n }\n else {\n this.y1 = y1;\n this.y2 = y2;\n }\n return this;\n };\n Bounds.prototype.defined = function (key) {\n return this[key] !== Number.MAX_VALUE && this[key] !== -Number.MAX_VALUE;\n };\n return Bounds;\n}());\nexport { Bounds };\n/**\n * Can't use getBounds directly since we should not use AABB here.\n */\nexport function getBounds(item, margin) {\n var angle = item.getEulerAngles() || 0;\n item.setEulerAngles(0);\n // get dimensions\n var _a = item.getBounds(), _b = __read(_a.min, 2), x = _b[0], y = _b[1], _c = __read(_a.max, 2), right = _c[0], bottom = _c[1];\n var _d = item.getBBox(), w = _d.width, h = _d.height;\n var height = h;\n var dx = 0;\n var dy = 0;\n var anchorX = x;\n var anchorY = y;\n var text = textOf(item);\n if (text) {\n // [to fix] 目前 G 上计算 bbox 有一点误差\n height -= 1.5;\n var a = text.style.textAlign;\n var b_1 = text.style.textBaseline;\n // horizontal alignment\n if (a === 'center') {\n anchorX = (x + right) / 2;\n }\n else if (a === 'right' || a === 'end') {\n anchorX = right;\n }\n else {\n // left by default, do nothing\n }\n // vertical alignment\n if (b_1 === 'middle') {\n anchorY = (y + bottom) / 2;\n }\n else if (b_1 === 'bottom') {\n anchorY = bottom;\n }\n }\n var _e = __read(parseSeriesAttr(margin), 4), _f = _e[0], t = _f === void 0 ? 0 : _f, _g = _e[1], r = _g === void 0 ? 0 : _g, _h = _e[2], b = _h === void 0 ? t : _h, _j = _e[3], l = _j === void 0 ? r : _j;\n var bounds = new Bounds((dx += x) - l, (dy += y) - t, dx + w + r, dy + height + b);\n item.setEulerAngles(angle);\n return bounds.rotatedPoints(degToRad(angle), anchorX, anchorY);\n}\n//# sourceMappingURL=bounds.js.map","import { getBounds } from './bounds';\nfunction onLine(line, point) {\n return (point[0] <= Math.max(line[0][0], line[1][0]) &&\n point[0] <= Math.min(line[0][0], line[1][0]) &&\n point[1] <= Math.max(line[0][1], line[1][1]) &&\n point[1] <= Math.min(line[0][1], line[1][1]));\n}\nfunction direction(a, b, c) {\n var val = (b[1] - a[1]) * (c[0] - b[0]) - (b[0] - a[0]) * (c[1] - b[1]);\n if (val === 0)\n return 0;\n return val < 0 ? 2 : 1;\n}\nfunction isIntersect(line1, line2) {\n var dir1 = direction(line1[0], line1[1], line2[0]);\n var dir2 = direction(line1[0], line1[1], line2[1]);\n var dir3 = direction(line2[0], line2[1], line1[0]);\n var dir4 = direction(line2[0], line2[1], line1[1]);\n if (dir1 !== dir2 && dir3 !== dir4)\n return true;\n if (dir1 === 0 && onLine(line1, line2[0]))\n return true;\n if (dir2 === 0 && onLine(line1, line2[1]))\n return true;\n if (dir3 === 0 && onLine(line2, line1[0]))\n return true;\n if (dir4 === 0 && onLine(line2, line1[1]))\n return true;\n return false;\n}\nexport function isPointInsideRectangle(polygon, point) {\n var n = polygon.length;\n if (n < 3)\n return false;\n var lineToInfinity = [point, [9999, point[1]]];\n var count = 0;\n var i = 0;\n do {\n var side = [polygon[i], polygon[(i + 1) % n]];\n if (isIntersect(side, lineToInfinity)) {\n if (direction(side[0], point, side[1]) === 0)\n return onLine(side, point);\n count++;\n }\n i = (i + 1) % n;\n } while (i !== 0);\n return !!(count & 1);\n}\nexport function isRectangleBInsideA(rectA, rectB) {\n return rectB.every(function (point) { return isPointInsideRectangle(rectA, point); });\n}\n/**\n * 检测 child 是否完全在 container 内部\n */\nexport function contain(container, child, margin) {\n var x1 = container.x1, x2 = container.x2, y1 = container.y1, y2 = container.y2;\n var parent = [\n [x1, y1],\n [x2, y1],\n [x2, y2],\n [x1, y2],\n ];\n var element = getBounds(child, margin);\n return isRectangleBInsideA(parent, element);\n}\n//# sourceMappingURL=contain.js.map","import { __read, __values } from \"tslib\";\nimport { parseSeriesAttr, scale } from '../../../util';\nimport { getLabelVector } from '../guides/utils';\nimport { isAxisVertical } from '../guides/line';\nimport { Bounds } from './bounds';\nimport { contain } from './contain';\nimport { intersect } from './intersect';\n/**\n * 创建副轴包围盒\n * @returns return false if no crossSize, else croseBBox\n */\nfunction createCrossBBox(attr, padding) {\n var type = attr.type, labelDirection = attr.labelDirection, crossSize = attr.crossSize;\n if (!crossSize)\n return false;\n if (type === 'arc') {\n var center = attr.center, radius = attr.radius;\n var _a = __read(center, 2), cx = _a[0], cy = _a[1];\n var size = labelDirection === 'negative' ? 0 : crossSize;\n var dMin = -radius - size;\n var dMax = radius + size;\n var _b = __read(parseSeriesAttr(padding), 4), top_1 = _b[0], right_1 = _b[1], bottom_1 = _b[2], left_1 = _b[3];\n // 假定始终为顺时针方向\n return new Bounds(cx + dMin - left_1, cy + dMin - top_1, cx + dMax + right_1, cy + dMax + bottom_1);\n }\n var _c = __read(attr.startPos, 2), sx = _c[0], sy = _c[1], _d = __read(attr.endPos, 2), ex = _d[0], ey = _d[1];\n // 水平时取左右,垂直时取上下\n var _e = __read(isAxisVertical(attr)\n ? [-padding, 0, padding, 0]\n : [0, padding, 0, -padding], 4), top = _e[0], right = _e[1], bottom = _e[2], left = _e[3];\n var labelVector = getLabelVector(0, attr);\n var diff = scale(labelVector, crossSize);\n var bbox = new Bounds(sx, sy, ex, ey);\n bbox.x1 += left;\n bbox.y1 += top;\n bbox.x2 += right + diff[0];\n bbox.y2 += bottom + diff[1];\n return bbox;\n}\nexport function boundTest(items, attr, margin) {\n var e_1, _a;\n var crossPadding = attr.crossPadding;\n var resultSet = new Set();\n var prev = null;\n var crossBBox = createCrossBBox(attr, crossPadding);\n var testContain = function (item) {\n if (crossBBox)\n return contain(crossBBox, item);\n return true;\n };\n var testIntersect = function (prevItem, currItem) {\n if (!prevItem || !prevItem.firstChild)\n return true;\n // Get the first child of the item(Text).\n // @ts-ignore\n return !intersect(prevItem.firstChild, currItem.firstChild, parseSeriesAttr(margin));\n };\n try {\n for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {\n var curr = items_1_1.value;\n if (!testContain(curr)) {\n resultSet.add(curr);\n }\n else if (!prev || testIntersect(prev, curr)) {\n prev = curr;\n }\n else {\n resultSet.add(prev);\n resultSet.add(curr);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return Array.from(resultSet);\n}\n//# sourceMappingURL=test.js.map","import { __read, __values } from \"tslib\";\nimport { getBounds } from './bounds';\n/**\n * Detect whether line-line collision.\n * From: https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect\n */\nfunction lineToLine(line1, line2) {\n var _a = __read(line1, 4), x0 = _a[0], y0 = _a[1], x1 = _a[2], y1 = _a[3];\n var _b = __read(line2, 4), x2 = _b[0], y2 = _b[1], x3 = _b[2], y3 = _b[3];\n var s10x = x1 - x0;\n var s10y = y1 - y0;\n var s32x = x3 - x2;\n var s32y = y3 - y2;\n var denom = s10x * s32y - s32x * s10y;\n if (denom === 0)\n return false;\n var denomPositive = denom > 0;\n var s02x = x0 - x2;\n var s02y = y0 - y2;\n var sNum = s10x * s02y - s10y * s02x;\n if (sNum < 0 === denomPositive)\n return false;\n var tNum = s32x * s02y - s32y * s02x;\n if (tNum < 0 === denomPositive)\n return false;\n if (sNum > denom === denomPositive || tNum > denom === denomPositive)\n return false;\n return true;\n}\nfunction intersectBoxLine(box /** 八个顶点 */, line) {\n var lines = [\n [box[0], box[1], box[2], box[3]],\n [box[2], box[3], box[4], box[5]],\n [box[4], box[5], box[6], box[7]],\n [box[6], box[7], box[0], box[1]],\n ];\n return lines.some(function (boxLine) { return lineToLine(line, boxLine); });\n}\nexport var IntersectUtils = { lineToLine: lineToLine, intersectBoxLine: intersectBoxLine, getBounds: getBounds };\n/**\n * 检测两个 DisplayObject 是否相交\n */\nexport function intersect(a, b, margin) {\n var e_1, _a;\n var p = getBounds(a, margin).flat(1);\n var q = getBounds(b, margin).flat(1);\n var linesP = [\n [p[0], p[1], p[2], p[3]],\n [p[0], p[1], p[4], p[5]],\n [p[4], p[5], p[6], p[7]],\n [p[2], p[3], p[6], p[7]],\n ];\n try {\n for (var linesP_1 = __values(linesP), linesP_1_1 = linesP_1.next(); !linesP_1_1.done; linesP_1_1 = linesP_1.next()) {\n var line = linesP_1_1.value;\n if (intersectBoxLine(q, line))\n return true;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (linesP_1_1 && !linesP_1_1.done && (_a = linesP_1.return)) _a.call(linesP_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return false;\n}\n//# sourceMappingURL=intersect.js.map","export function rotateVector(x, y, rad) {\n var X = x * Math.cos(rad) - y * Math.sin(rad);\n var Y = x * Math.sin(rad) + y * Math.cos(rad);\n return { x: X, y: Y };\n}\n//# sourceMappingURL=rotate-vector.js.map","import { rotateVector } from '../util/rotate-vector';\n/**\n * Converts A (arc-to) segments to C (cubic-bezier-to).\n *\n * For more information of where this math came from visit:\n * http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n */\nexport function arcToCubic(X1, Y1, RX, RY, angle, LAF, SF, X2, Y2, recursive) {\n var x1 = X1;\n var y1 = Y1;\n var rx = RX;\n var ry = RY;\n var x2 = X2;\n var y2 = Y2;\n // for more information of where this Math came from visit:\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n var d120 = (Math.PI * 120) / 180;\n var rad = (Math.PI / 180) * (+angle || 0);\n /** @type {number[]} */\n var res = [];\n var xy;\n var f1;\n var f2;\n var cx;\n var cy;\n if (!recursive) {\n xy = rotateVector(x1, y1, -rad);\n x1 = xy.x;\n y1 = xy.y;\n xy = rotateVector(x2, y2, -rad);\n x2 = xy.x;\n y2 = xy.y;\n var x = (x1 - x2) / 2;\n var y = (y1 - y2) / 2;\n var h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\n if (h > 1) {\n h = Math.sqrt(h);\n rx *= h;\n ry *= h;\n }\n var rx2 = rx * rx;\n var ry2 = ry * ry;\n var k = (LAF === SF ? -1 : 1) *\n Math.sqrt(Math.abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x)));\n cx = (k * rx * y) / ry + (x1 + x2) / 2;\n cy = (k * -ry * x) / rx + (y1 + y2) / 2;\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy no-bitwise\n f1 = Math.asin(((((y1 - cy) / ry) * Math.pow(10, 9)) >> 0) / Math.pow(10, 9));\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy no-bitwise\n f2 = Math.asin(((((y2 - cy) / ry) * Math.pow(10, 9)) >> 0) / Math.pow(10, 9));\n f1 = x1 < cx ? Math.PI - f1 : f1;\n f2 = x2 < cx ? Math.PI - f2 : f2;\n if (f1 < 0)\n f1 = Math.PI * 2 + f1;\n if (f2 < 0)\n f2 = Math.PI * 2 + f2;\n if (SF && f1 > f2) {\n f1 -= Math.PI * 2;\n }\n if (!SF && f2 > f1) {\n f2 -= Math.PI * 2;\n }\n }\n else {\n f1 = recursive[0], f2 = recursive[1], cx = recursive[2], cy = recursive[3];\n }\n var df = f2 - f1;\n if (Math.abs(df) > d120) {\n var f2old = f2;\n var x2old = x2;\n var y2old = y2;\n f2 = f1 + d120 * (SF && f2 > f1 ? 1 : -1);\n x2 = cx + rx * Math.cos(f2);\n y2 = cy + ry * Math.sin(f2);\n res = arcToCubic(x2, y2, rx, ry, angle, 0, SF, x2old, y2old, [f2, f2old, cx, cy]);\n }\n df = f2 - f1;\n var c1 = Math.cos(f1);\n var s1 = Math.sin(f1);\n var c2 = Math.cos(f2);\n var s2 = Math.sin(f2);\n var t = Math.tan(df / 4);\n var hx = (4 / 3) * rx * t;\n var hy = (4 / 3) * ry * t;\n var m1 = [x1, y1];\n var m2 = [x1 + hx * s1, y1 - hy * c1];\n var m3 = [x2 + hx * s2, y2 - hy * c2];\n var m4 = [x2, y2];\n m2[0] = 2 * m1[0] - m2[0];\n m2[1] = 2 * m1[1] - m2[1];\n if (recursive) {\n return m2.concat(m3, m4, res);\n // return [...m2, ...m3, ...m4, ...res];\n }\n res = m2.concat(m3, m4, res);\n // res = [...m2, ...m3, ...m4, ...res];\n var newres = [];\n for (var i = 0, ii = res.length; i < ii; i += 1) {\n newres[i] = i % 2 ? rotateVector(res[i - 1], res[i], rad).y : rotateVector(res[i], res[i + 1], rad).x;\n }\n return newres;\n}\n// const TAU = Math.PI * 2;\n// const mapToEllipse = (\n// { x, y }: { x: number; y: number },\n// rx: number,\n// ry: number,\n// cosphi: number,\n// sinphi: number,\n// centerx: number,\n// centery: number,\n// ) => {\n// x *= rx;\n// y *= ry;\n// const xp = cosphi * x - sinphi * y;\n// const yp = sinphi * x + cosphi * y;\n// return {\n// x: xp + centerx,\n// y: yp + centery,\n// };\n// };\n// const approxUnitArc = (ang1: number, ang2: number) => {\n// // If 90 degree circular arc, use a constant\n// // as derived from http://spencermortensen.com/articles/bezier-circle\n// const a =\n// ang2 === 1.5707963267948966\n// ? 0.551915024494\n// : ang2 === -1.5707963267948966\n// ? -0.551915024494\n// : (4 / 3) * Math.tan(ang2 / 4);\n// const x1 = Math.cos(ang1);\n// const y1 = Math.sin(ang1);\n// const x2 = Math.cos(ang1 + ang2);\n// const y2 = Math.sin(ang1 + ang2);\n// return [\n// {\n// x: x1 - y1 * a,\n// y: y1 + x1 * a,\n// },\n// {\n// x: x2 + y2 * a,\n// y: y2 - x2 * a,\n// },\n// {\n// x: x2,\n// y: y2,\n// },\n// ];\n// };\n// const vectorAngle = (ux: number, uy: number, vx: number, vy: number) => {\n// const sign = ux * vy - uy * vx < 0 ? -1 : 1;\n// let dot = ux * vx + uy * vy;\n// if (dot > 1) {\n// dot = 1;\n// }\n// if (dot < -1) {\n// dot = -1;\n// }\n// return sign * Math.acos(dot);\n// };\n// const getArcCenter = (\n// px: any,\n// py: any,\n// cx: any,\n// cy: any,\n// rx: number,\n// ry: number,\n// largeArcFlag: number,\n// sweepFlag: number,\n// sinphi: number,\n// cosphi: number,\n// pxp: number,\n// pyp: number,\n// ) => {\n// const rxsq = Math.pow(rx, 2);\n// const rysq = Math.pow(ry, 2);\n// const pxpsq = Math.pow(pxp, 2);\n// const pypsq = Math.pow(pyp, 2);\n// let radicant = rxsq * rysq - rxsq * pypsq - rysq * pxpsq;\n// if (radicant < 0) {\n// radicant = 0;\n// }\n// radicant /= rxsq * pypsq + rysq * pxpsq;\n// radicant = Math.sqrt(radicant) * (largeArcFlag === sweepFlag ? -1 : 1);\n// const centerxp = ((radicant * rx) / ry) * pyp;\n// const centeryp = ((radicant * -ry) / rx) * pxp;\n// const centerx = cosphi * centerxp - sinphi * centeryp + (px + cx) / 2;\n// const centery = sinphi * centerxp + cosphi * centeryp + (py + cy) / 2;\n// const vx1 = (pxp - centerxp) / rx;\n// const vy1 = (pyp - centeryp) / ry;\n// const vx2 = (-pxp - centerxp) / rx;\n// const vy2 = (-pyp - centeryp) / ry;\n// const ang1 = vectorAngle(1, 0, vx1, vy1);\n// let ang2 = vectorAngle(vx1, vy1, vx2, vy2);\n// if (sweepFlag === 0 && ang2 > 0) {\n// ang2 -= TAU;\n// }\n// if (sweepFlag === 1 && ang2 < 0) {\n// ang2 += TAU;\n// }\n// return [centerx, centery, ang1, ang2];\n// };\n// const arcToBezier = ({ px, py, cx, cy, rx, ry, xAxisRotation = 0, largeArcFlag = 0, sweepFlag = 0 }) => {\n// const curves = [];\n// if (rx === 0 || ry === 0) {\n// return [{ x1: 0, y1: 0, x2: 0, y2: 0, x: cx, y: cy }];\n// }\n// const sinphi = Math.sin((xAxisRotation * TAU) / 360);\n// const cosphi = Math.cos((xAxisRotation * TAU) / 360);\n// const pxp = (cosphi * (px - cx)) / 2 + (sinphi * (py - cy)) / 2;\n// const pyp = (-sinphi * (px - cx)) / 2 + (cosphi * (py - cy)) / 2;\n// if (pxp === 0 && pyp === 0) {\n// return [{ x1: 0, y1: 0, x2: 0, y2: 0, x: cx, y: cy }];\n// }\n// rx = Math.abs(rx);\n// ry = Math.abs(ry);\n// const lambda = Math.pow(pxp, 2) / Math.pow(rx, 2) + Math.pow(pyp, 2) / Math.pow(ry, 2);\n// if (lambda > 1) {\n// rx *= Math.sqrt(lambda);\n// ry *= Math.sqrt(lambda);\n// }\n// let [centerx, centery, ang1, ang2] = getArcCenter(\n// px,\n// py,\n// cx,\n// cy,\n// rx,\n// ry,\n// largeArcFlag,\n// sweepFlag,\n// sinphi,\n// cosphi,\n// pxp,\n// pyp,\n// );\n// // If 'ang2' == 90.0000000001, then `ratio` will evaluate to\n// // 1.0000000001. This causes `segments` to be greater than one, which is an\n// // unecessary split, and adds extra points to the bezier curve. To alleviate\n// // this issue, we round to 1.0 when the ratio is close to 1.0.\n// let ratio = Math.abs(ang2) / (TAU / 4);\n// if (Math.abs(1.0 - ratio) < 0.0000001) {\n// ratio = 1.0;\n// }\n// const segments = Math.max(Math.ceil(ratio), 1);\n// ang2 /= segments;\n// for (let i = 0; i < segments; i++) {\n// curves.push(approxUnitArc(ang1, ang2));\n// ang1 += ang2;\n// }\n// return curves.map((curve) => {\n// const { x: x1, y: y1 } = mapToEllipse(curve[0], rx, ry, cosphi, sinphi, centerx, centery);\n// const { x: x2, y: y2 } = mapToEllipse(curve[1], rx, ry, cosphi, sinphi, centerx, centery);\n// const { x, y } = mapToEllipse(curve[2], rx, ry, cosphi, sinphi, centerx, centery);\n// return { x1, y1, x2, y2, x, y };\n// });\n// };\n// export function arcToCubic(\n// x1: number,\n// y1: number,\n// rx: number,\n// ry: number,\n// angle: number,\n// LAF: number,\n// SF: number,\n// x2: number,\n// y2: number,\n// ) {\n// const curves = arcToBezier({\n// px: x1,\n// py: y1,\n// cx: x2,\n// cy: y2,\n// rx,\n// ry,\n// xAxisRotation: angle,\n// largeArcFlag: LAF,\n// sweepFlag: SF,\n// });\n// return curves.reduce((prev, cur) => {\n// const { x1, y1, x2, y2, x, y } = cur;\n// prev.push(x1, y1, x2, y2, x, y);\n// return prev;\n// }, [] as number[]);\n// }\n//# sourceMappingURL=arc-2-cubic.js.map","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\").default;\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\nvar React = _interopRequireWildcard(require(\"react\"));\nvar _ArrowRightOutlined = _interopRequireDefault(require(\"@ant-design/icons-svg/lib/asn/ArrowRightOutlined\"));\nvar _AntdIcon = _interopRequireDefault(require(\"../components/AntdIcon\"));\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nvar ArrowRightOutlined = function ArrowRightOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(_AntdIcon.default, (0, _extends2.default)({}, props, {\n ref: ref,\n icon: _ArrowRightOutlined.default\n }));\n};\n\n/**![arrow-right](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg2OSA0ODcuOEw0OTEuMiAxNTkuOWMtMi45LTIuNS02LjYtMy45LTEwLjUtMy45aC04OC41Yy03LjQgMC0xMC44IDkuMi01LjIgMTRsMzUwLjIgMzA0SDE1MmMtNC40IDAtOCAzLjYtOCA4djYwYzAgNC40IDMuNiA4IDggOGg1ODUuMUwzODYuOSA4NTRjLTUuNiA0LjktMi4yIDE0IDUuMiAxNGg5MS41YzEuOSAwIDMuOC0uNyA1LjItMkw4NjkgNTM2LjJhMzIuMDcgMzIuMDcgMCAwMDAtNDguNHoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(ArrowRightOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'ArrowRightOutlined';\n}\nvar _default = exports.default = RefIcon;","var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n","import { __assign, __read, __values } from \"tslib\";\nimport { select } from './selection';\n/**\n * 获得图形的x、y、width、height\n */\nexport function getShapeSpace(shape) {\n var bounds = shape && shape.getRenderBounds();\n if (!bounds)\n return {\n width: 0,\n height: 0,\n };\n var max = bounds.getMax();\n var min = bounds.getMin();\n return {\n width: max[0] - min[0],\n height: max[1] - min[1],\n };\n}\nexport function getLocalBBox(shape) {\n var _a = shape.getLocalBounds(), min = _a.min, max = _a.max;\n var _b = __read([min, max], 2), _c = __read(_b[0], 2), x1 = _c[0], y1 = _c[1], _d = __read(_b[1], 2), x2 = _d[0], y2 = _d[1];\n return { x: x1, y: y1, width: x2 - x1, height: y2 - y1, left: x1, bottom: y2, top: y1, right: x2 };\n}\nexport function createTempText(group, attrs) {\n var textNode = select(group).append('text').node();\n textNode.attr(__assign(__assign({}, attrs), { visibility: 'hidden' }));\n return textNode;\n}\nexport function isHorizontal(p1, p2) {\n var _a = __read(p1, 2), x1 = _a[0], y1 = _a[1];\n var _b = __read(p2, 2), x2 = _b[0], y2 = _b[1];\n return x1 !== x2 && y1 === y2;\n}\nexport function isVertical(p1, p2) {\n var _a = __read(p1, 2), x1 = _a[0], y1 = _a[1];\n var _b = __read(p2, 2), x2 = _b[0], y2 = _b[1];\n return x1 === x2 && y1 !== y2;\n}\nexport function copyAttributes(target, source) {\n var e_1, _a;\n var attributes = source.attributes;\n try {\n for (var _b = __values(Object.entries(attributes)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), key = _d[0], value = _d[1];\n if (key !== 'id' && key !== 'className')\n target.attr(key, value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n}\n//# sourceMappingURL=shape.js.map","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"className\", \"style\", \"bodyStyle\", \"headStyle\", \"title\", \"subTitle\", \"extra\", \"wrap\", \"layout\", \"loading\", \"gutter\", \"tooltip\", \"split\", \"headerBordered\", \"bordered\", \"boxShadow\", \"children\", \"size\", \"actions\", \"ghost\", \"hoverable\", \"direction\", \"collapsed\", \"collapsible\", \"collapsibleIconRender\", \"colStyle\", \"defaultCollapsed\", \"onCollapse\", \"checked\", \"onChecked\", \"tabs\", \"type\"];\nimport { RightOutlined } from '@ant-design/icons';\nimport { LabelIconTip } from '@ant-design/pro-utils';\nimport { ConfigProvider, Tabs } from 'antd';\nimport useBreakpoint from 'antd/es/grid/hooks/useBreakpoint';\nimport classNames from 'classnames';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport omit from \"rc-util/es/omit\";\nimport React, { useContext } from 'react';\nimport Actions from \"../Actions\";\nimport Loading from \"../Loading\";\nimport { useLegacyItems } from \"../TabPane\";\nimport useStyle from \"./style\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar Card = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var _classNames2;\n var className = props.className,\n style = props.style,\n bodyStyle = props.bodyStyle,\n headStyle = props.headStyle,\n title = props.title,\n subTitle = props.subTitle,\n extra = props.extra,\n _props$wrap = props.wrap,\n wrap = _props$wrap === void 0 ? false : _props$wrap,\n layout = props.layout,\n loading = props.loading,\n _props$gutter = props.gutter,\n gutter = _props$gutter === void 0 ? 0 : _props$gutter,\n tooltip = props.tooltip,\n split = props.split,\n _props$headerBordered = props.headerBordered,\n headerBordered = _props$headerBordered === void 0 ? false : _props$headerBordered,\n _props$bordered = props.bordered,\n bordered = _props$bordered === void 0 ? false : _props$bordered,\n _props$boxShadow = props.boxShadow,\n boxShadow = _props$boxShadow === void 0 ? false : _props$boxShadow,\n children = props.children,\n size = props.size,\n actions = props.actions,\n _props$ghost = props.ghost,\n ghost = _props$ghost === void 0 ? false : _props$ghost,\n _props$hoverable = props.hoverable,\n hoverable = _props$hoverable === void 0 ? false : _props$hoverable,\n direction = props.direction,\n controlCollapsed = props.collapsed,\n _props$collapsible = props.collapsible,\n collapsible = _props$collapsible === void 0 ? false : _props$collapsible,\n collapsibleIconRender = props.collapsibleIconRender,\n colStyle = props.colStyle,\n _props$defaultCollaps = props.defaultCollapsed,\n defaultCollapsed = _props$defaultCollaps === void 0 ? false : _props$defaultCollaps,\n onCollapse = props.onCollapse,\n checked = props.checked,\n onChecked = props.onChecked,\n tabs = props.tabs,\n type = props.type,\n rest = _objectWithoutProperties(props, _excluded);\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var screens = useBreakpoint() || {\n lg: true,\n md: true,\n sm: true,\n xl: false,\n xs: false,\n xxl: false\n };\n var _useMergedState = useMergedState(defaultCollapsed, {\n value: controlCollapsed,\n onChange: onCollapse\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n collapsed = _useMergedState2[0],\n setCollapsed = _useMergedState2[1];\n\n // 顺序决定如何进行响应式取值,按最大响应值依次取值,请勿修改。\n var responsiveArray = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n // 修改组合传给antd tabs的参数\n // @ts-ignore\n var ModifyTabItemsContent = useLegacyItems(tabs === null || tabs === void 0 ? void 0 : tabs.items, children, tabs);\n\n /**\n * 根据响应式获取 gutter, 参考 antd 实现\n *\n * @param gutter Gutter\n */\n var getNormalizedGutter = function getNormalizedGutter(gut) {\n var results = [0, 0];\n var normalizedGutter = Array.isArray(gut) ? gut : [gut, 0];\n normalizedGutter.forEach(function (g, index) {\n if (_typeof(g) === 'object') {\n for (var i = 0; i < responsiveArray.length; i += 1) {\n var breakpoint = responsiveArray[i];\n if (screens[breakpoint] && g[breakpoint] !== undefined) {\n results[index] = g[breakpoint];\n break;\n }\n }\n } else {\n results[index] = g || 0;\n }\n });\n return results;\n };\n\n /**\n * 根据条件返回 style,负责返回空对象\n *\n * @param withStyle 是否符合条件\n * @param appendStyle 如果符合条件要返回的 style 属性\n */\n var getStyle = function getStyle(withStyle, appendStyle) {\n return withStyle ? appendStyle : {};\n };\n var getColSpanStyle = function getColSpanStyle(colSpan) {\n var span = colSpan;\n\n // colSpan 响应式\n if (_typeof(colSpan) === 'object') {\n for (var i = 0; i < responsiveArray.length; i += 1) {\n var breakpoint = responsiveArray[i];\n if (screens !== null && screens !== void 0 && screens[breakpoint] && (colSpan === null || colSpan === void 0 ? void 0 : colSpan[breakpoint]) !== undefined) {\n span = colSpan[breakpoint];\n break;\n }\n }\n }\n\n // 当 colSpan 为 30% 或 300px 时\n var colSpanStyle = getStyle(typeof span === 'string' && /\\d%|\\dpx/i.test(span), {\n width: span,\n flexShrink: 0\n });\n return {\n span: span,\n colSpanStyle: colSpanStyle\n };\n };\n var prefixCls = getPrefixCls('pro-card');\n var _useStyle = useStyle(prefixCls),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n var _getNormalizedGutter = getNormalizedGutter(gutter),\n _getNormalizedGutter2 = _slicedToArray(_getNormalizedGutter, 2),\n horizontalGutter = _getNormalizedGutter2[0],\n verticalGutter = _getNormalizedGutter2[1];\n\n // 判断是否套了卡片,如果套了的话将自身卡片内部内容的 padding 设置为0\n var containProCard = false;\n var childrenArray = React.Children.toArray(children);\n var childrenModified = childrenArray.map(function (element, index) {\n var _element$type;\n if (element !== null && element !== void 0 && (_element$type = element.type) !== null && _element$type !== void 0 && _element$type.isProCard) {\n containProCard = true;\n\n // 宽度\n var colSpan = element.props.colSpan;\n var _getColSpanStyle = getColSpanStyle(colSpan),\n span = _getColSpanStyle.span,\n colSpanStyle = _getColSpanStyle.colSpanStyle;\n var columnClassName = classNames([\"\".concat(prefixCls, \"-col\")], hashId, _defineProperty(_defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-split-vertical\"), split === 'vertical' && index !== childrenArray.length - 1), \"\".concat(prefixCls, \"-split-horizontal\"), split === 'horizontal' && index !== childrenArray.length - 1), \"\".concat(prefixCls, \"-col-\").concat(span), typeof span === 'number' && span >= 0 && span <= 24));\n var wrappedElement = wrapSSR( /*#__PURE__*/_jsx(\"div\", {\n style: _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, colSpanStyle), getStyle(horizontalGutter > 0, {\n paddingInlineEnd: horizontalGutter / 2,\n paddingInlineStart: horizontalGutter / 2\n })), getStyle(verticalGutter > 0, {\n paddingBlockStart: verticalGutter / 2,\n paddingBlockEnd: verticalGutter / 2\n })), colStyle),\n className: columnClassName,\n children: /*#__PURE__*/React.cloneElement(element)\n }));\n return /*#__PURE__*/React.cloneElement(wrappedElement, {\n key: \"pro-card-col-\".concat((element === null || element === void 0 ? void 0 : element.key) || index)\n });\n }\n return element;\n });\n var cardCls = classNames(\"\".concat(prefixCls), className, hashId, (_classNames2 = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_classNames2, \"\".concat(prefixCls, \"-border\"), bordered), \"\".concat(prefixCls, \"-box-shadow\"), boxShadow), \"\".concat(prefixCls, \"-contain-card\"), containProCard), \"\".concat(prefixCls, \"-loading\"), loading), \"\".concat(prefixCls, \"-split\"), split === 'vertical' || split === 'horizontal'), \"\".concat(prefixCls, \"-ghost\"), ghost), \"\".concat(prefixCls, \"-hoverable\"), hoverable), \"\".concat(prefixCls, \"-size-\").concat(size), size), \"\".concat(prefixCls, \"-type-\").concat(type), type), \"\".concat(prefixCls, \"-collapse\"), collapsed), _defineProperty(_classNames2, \"\".concat(prefixCls, \"-checked\"), checked)));\n var bodyCls = classNames(\"\".concat(prefixCls, \"-body\"), hashId, _defineProperty(_defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-body-center\"), layout === 'center'), \"\".concat(prefixCls, \"-body-direction-column\"), split === 'horizontal' || direction === 'column'), \"\".concat(prefixCls, \"-body-wrap\"), wrap && containProCard));\n var cardBodyStyle = bodyStyle;\n var loadingDOM = /*#__PURE__*/React.isValidElement(loading) ? loading : /*#__PURE__*/_jsx(Loading, {\n prefix: prefixCls,\n style: (bodyStyle === null || bodyStyle === void 0 ? void 0 : bodyStyle.padding) === 0 || (bodyStyle === null || bodyStyle === void 0 ? void 0 : bodyStyle.padding) === '0px' ? {\n padding: 24\n } : undefined\n });\n // 非受控情况下展示\n var collapsibleButton = collapsible && controlCollapsed === undefined && (collapsibleIconRender ? collapsibleIconRender({\n collapsed: collapsed\n }) : /*#__PURE__*/_jsx(RightOutlined, {\n rotate: !collapsed ? 90 : undefined,\n className: \"\".concat(prefixCls, \"-collapsible-icon \").concat(hashId).trim()\n }));\n return wrapSSR( /*#__PURE__*/_jsxs(\"div\", _objectSpread(_objectSpread({\n className: cardCls,\n style: style,\n ref: ref,\n onClick: function onClick(e) {\n var _rest$onClick;\n onChecked === null || onChecked === void 0 || onChecked(e);\n rest === null || rest === void 0 || (_rest$onClick = rest.onClick) === null || _rest$onClick === void 0 || _rest$onClick.call(rest, e);\n }\n }, omit(rest, ['prefixCls', 'colSpan'])), {}, {\n children: [(title || extra || collapsibleButton) && /*#__PURE__*/_jsxs(\"div\", {\n className: classNames(\"\".concat(prefixCls, \"-header\"), hashId, _defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-header-border\"), headerBordered || type === 'inner'), \"\".concat(prefixCls, \"-header-collapsible\"), collapsibleButton)),\n style: headStyle,\n onClick: function onClick() {\n if (collapsibleButton) setCollapsed(!collapsed);\n },\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"\".concat(prefixCls, \"-title \").concat(hashId).trim(),\n children: [collapsibleButton, /*#__PURE__*/_jsx(LabelIconTip, {\n label: title,\n tooltip: tooltip,\n subTitle: subTitle\n })]\n }), extra && /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefixCls, \"-extra \").concat(hashId).trim(),\n onClick: function onClick(e) {\n return e.stopPropagation();\n },\n children: extra\n })]\n }), tabs ? /*#__PURE__*/_jsx(\"div\", {\n className: \"\".concat(prefixCls, \"-tabs \").concat(hashId).trim(),\n children: /*#__PURE__*/_jsx(Tabs, _objectSpread(_objectSpread({\n onChange: tabs.onChange\n }, omit(tabs, ['cardProps'])), {}, {\n // @ts-ignore\n items: ModifyTabItemsContent,\n children: loading ? loadingDOM : children\n }))\n }) : /*#__PURE__*/_jsx(\"div\", {\n className: bodyCls,\n style: cardBodyStyle,\n children: loading ? loadingDOM : childrenModified\n }), actions ? /*#__PURE__*/_jsx(Actions, {\n actions: actions,\n prefixCls: prefixCls\n }) : null]\n })));\n});\nexport default Card;","'use strict';\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nconst _ArrowRightOutlined = _interopRequireDefault(require('./lib/icons/ArrowRightOutlined'));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nconst _default = _ArrowRightOutlined;\nexports.default = _default;\nmodule.exports = _default;","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","// This icon file is generated automatically.\nvar FileOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0042 42h216v494z\" } }] }, \"name\": \"file\", \"theme\": \"outlined\" };\nexport default FileOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport FileOutlinedSvg from \"@ant-design/icons-svg/es/asn/FileOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar FileOutlined = function FileOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: FileOutlinedSvg\n }));\n};\n\n/**![file](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg1NC42IDI4OC42TDYzOS40IDczLjRjLTYtNi0xNC4xLTkuNC0yMi42LTkuNEgxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjgzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg2NDBjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzExLjNjMC04LjUtMy40LTE2LjctOS40LTIyLjd6TTc5MC4yIDMyNkg2MDJWMTM3LjhMNzkwLjIgMzI2em0xLjggNTYySDIzMlYxMzZoMzAydjIxNmE0MiA0MiAwIDAwNDIgNDJoMjE2djQ5NHoiIC8+PC9zdmc+) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(FileOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'FileOutlined';\n}\nexport default RefIcon;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getShadowRoot = getShadowRoot;\nexports.inShadow = inShadow;\nfunction getRoot(ele) {\n var _ele$getRootNode;\n return ele === null || ele === void 0 || (_ele$getRootNode = ele.getRootNode) === null || _ele$getRootNode === void 0 ? void 0 : _ele$getRootNode.call(ele);\n}\n\n/**\n * Check if is in shadowRoot\n */\nfunction inShadow(ele) {\n return getRoot(ele) instanceof ShadowRoot;\n}\n\n/**\n * Return shadowRoot if possible\n */\nfunction getShadowRoot(ele) {\n return inShadow(ele) ? getRoot(ele) : null;\n}","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","import { deepMix } from '@antv/util';\nimport { Path } from '../../shapes';\nimport { classNames } from '../../util';\nexport var AXIS_BASE_DEFAULT_ATTR = {\n data: [],\n animate: {\n enter: false,\n update: {\n duration: 100,\n easing: 'ease-in-out-sine',\n fill: 'both',\n },\n exit: {\n duration: 100,\n fill: 'both',\n },\n },\n showArrow: true,\n showGrid: true,\n showLabel: true,\n showLine: true,\n showTick: true,\n showTitle: true,\n showTrunc: false,\n dataThreshold: 100,\n lineLineWidth: 1,\n lineStroke: 'black',\n crossPadding: 10,\n titleFill: 'black',\n titleFontSize: 12,\n titlePosition: 'lb',\n titleSpacing: 0,\n titleTextAlign: 'center',\n titleTextBaseline: 'middle',\n lineArrow: function () {\n return new Path({\n style: {\n d: [['M', 10, 10], ['L', -10, 0], ['L', 10, -10], ['L', 0, 0], ['L', 10, 10], ['Z']],\n fill: 'black',\n transformOrigin: 'center',\n },\n });\n },\n labelAlign: 'parallel',\n labelDirection: 'positive',\n labelFontSize: 12,\n labelSpacing: 0,\n gridConnect: 'line',\n gridControlAngles: [],\n gridDirection: 'positive',\n gridLength: 0,\n gridType: 'segment',\n lineArrowOffset: 15,\n lineArrowSize: 10,\n tickDirection: 'positive',\n tickLength: 5,\n tickLineWidth: 1,\n tickStroke: 'black',\n labelOverlap: [\n // { type: 'rotate', optionalAngles: [0, 45, 90] },\n // { type: 'ellipsis', suffix: '...', minLength: 14, maxLength: 160 },\n // { type: 'hide' },\n ],\n};\nexport var ARC_DEFAULT_OPTIONS = deepMix({}, AXIS_BASE_DEFAULT_ATTR, {\n style: {\n type: 'arc',\n },\n});\nexport var HELIX_DEFAULT_OPTIONS = deepMix({}, AXIS_BASE_DEFAULT_ATTR, {\n style: {},\n});\nexport var CLASS_NAMES = classNames({\n mainGroup: 'main-group',\n gridGroup: 'grid-group',\n grid: 'grid',\n lineGroup: 'line-group',\n line: 'line',\n tickGroup: 'tick-group',\n tick: 'tick',\n tickItem: 'tick-item',\n labelGroup: 'label-group',\n label: 'label',\n labelItem: 'label-item',\n titleGroup: 'title-group',\n title: 'title',\n lineFirst: 'line-first',\n lineSecond: 'line-second',\n}, 'axis');\n//# sourceMappingURL=constant.js.map","import { deepMix } from '@antv/util';\nimport { isUnset, subObject } from './helper';\nexport function subTooltip(tooltip, name, defaults = {}, main = false) {\n if (isUnset(tooltip))\n return tooltip;\n if (Array.isArray(tooltip) && main)\n return tooltip;\n const sub = subObject(tooltip, name);\n return deepMix(defaults, sub);\n}\nexport function maybeTooltip(tooltip, defaults = {}) {\n if (isUnset(tooltip))\n return tooltip;\n if (Array.isArray(tooltip))\n return tooltip;\n if (!isFullTooltip(tooltip))\n return tooltip;\n return deepMix(defaults, tooltip);\n}\nexport function isFullTooltip(tooltip) {\n if (Object.keys(tooltip).length === 0)\n return true;\n const { title, items } = tooltip;\n return title !== undefined || items !== undefined;\n}\nexport function maybeAnimation(animate, sub) {\n return typeof animate === 'object' ? subObject(animate, sub) : animate;\n}\n//# sourceMappingURL=mark.js.map","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nfunction parseColWidth(totalWidth) {\n var width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n if (typeof width === 'number') {\n return width;\n }\n if (width.endsWith('%')) {\n return totalWidth * parseFloat(width) / 100;\n }\n return null;\n}\n\n/**\n * Fill all column with width\n */\nexport default function useWidthColumns(flattenColumns, scrollWidth, clientWidth) {\n return React.useMemo(function () {\n // Fill width if needed\n if (scrollWidth && scrollWidth > 0) {\n var totalWidth = 0;\n var missWidthCount = 0;\n\n // collect not given width column\n flattenColumns.forEach(function (col) {\n var colWidth = parseColWidth(scrollWidth, col.width);\n if (colWidth) {\n totalWidth += colWidth;\n } else {\n missWidthCount += 1;\n }\n });\n\n // Fill width\n var maxFitWidth = Math.max(scrollWidth, clientWidth);\n var restWidth = Math.max(maxFitWidth - totalWidth, missWidthCount);\n var restCount = missWidthCount;\n var avgWidth = restWidth / missWidthCount;\n var realTotal = 0;\n var filledColumns = flattenColumns.map(function (col) {\n var clone = _objectSpread({}, col);\n var colWidth = parseColWidth(scrollWidth, clone.width);\n if (colWidth) {\n clone.width = colWidth;\n } else {\n var colAvgWidth = Math.floor(avgWidth);\n clone.width = restCount === 1 ? restWidth : colAvgWidth;\n restWidth -= colAvgWidth;\n restCount -= 1;\n }\n realTotal += clone.width;\n return clone;\n });\n\n // If realTotal is less than clientWidth,\n // We need extend column width\n if (realTotal < maxFitWidth) {\n var scale = maxFitWidth / realTotal;\n restWidth = maxFitWidth;\n filledColumns.forEach(function (col, index) {\n var colWidth = Math.floor(col.width * scale);\n col.width = index === filledColumns.length - 1 ? restWidth : colWidth;\n restWidth -= colWidth;\n });\n }\n return [filledColumns, Math.max(realTotal, maxFitWidth)];\n }\n return [flattenColumns, scrollWidth];\n }, [flattenColumns, scrollWidth, clientWidth]);\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\"],\n _excluded2 = [\"fixed\"];\nimport toArray from \"rc-util/es/Children/toArray\";\nimport warning from \"rc-util/es/warning\";\nimport * as React from 'react';\nimport { EXPAND_COLUMN } from \"../../constant\";\nimport { INTERNAL_COL_DEFINE } from \"../../utils/legacyUtil\";\nimport useWidthColumns from \"./useWidthColumns\";\nexport function convertChildrenToColumns(children) {\n return toArray(children).filter(function (node) {\n return /*#__PURE__*/React.isValidElement(node);\n }).map(function (_ref) {\n var key = _ref.key,\n props = _ref.props;\n var nodeChildren = props.children,\n restProps = _objectWithoutProperties(props, _excluded);\n var column = _objectSpread({\n key: key\n }, restProps);\n if (nodeChildren) {\n column.children = convertChildrenToColumns(nodeChildren);\n }\n return column;\n });\n}\nfunction filterHiddenColumns(columns) {\n return columns.filter(function (column) {\n return column && _typeof(column) === 'object' && !column.hidden;\n }).map(function (column) {\n var subColumns = column.children;\n if (subColumns && subColumns.length > 0) {\n return _objectSpread(_objectSpread({}, column), {}, {\n children: filterHiddenColumns(subColumns)\n });\n }\n return column;\n });\n}\nfunction flatColumns(columns) {\n var parentKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key';\n return columns.filter(function (column) {\n return column && _typeof(column) === 'object';\n }).reduce(function (list, column, index) {\n var fixed = column.fixed;\n // Convert `fixed='true'` to `fixed='left'` instead\n var parsedFixed = fixed === true ? 'left' : fixed;\n var mergedKey = \"\".concat(parentKey, \"-\").concat(index);\n var subColumns = column.children;\n if (subColumns && subColumns.length > 0) {\n return [].concat(_toConsumableArray(list), _toConsumableArray(flatColumns(subColumns, mergedKey).map(function (subColum) {\n return _objectSpread({\n fixed: parsedFixed\n }, subColum);\n })));\n }\n return [].concat(_toConsumableArray(list), [_objectSpread(_objectSpread({\n key: mergedKey\n }, column), {}, {\n fixed: parsedFixed\n })]);\n }, []);\n}\nfunction revertForRtl(columns) {\n return columns.map(function (column) {\n var fixed = column.fixed,\n restProps = _objectWithoutProperties(column, _excluded2);\n\n // Convert `fixed='left'` to `fixed='right'` instead\n var parsedFixed = fixed;\n if (fixed === 'left') {\n parsedFixed = 'right';\n } else if (fixed === 'right') {\n parsedFixed = 'left';\n }\n return _objectSpread({\n fixed: parsedFixed\n }, restProps);\n });\n}\n\n/**\n * Parse `columns` & `children` into `columns`.\n */\nfunction useColumns(_ref2, transformColumns) {\n var prefixCls = _ref2.prefixCls,\n columns = _ref2.columns,\n children = _ref2.children,\n expandable = _ref2.expandable,\n expandedKeys = _ref2.expandedKeys,\n columnTitle = _ref2.columnTitle,\n getRowKey = _ref2.getRowKey,\n onTriggerExpand = _ref2.onTriggerExpand,\n expandIcon = _ref2.expandIcon,\n rowExpandable = _ref2.rowExpandable,\n expandIconColumnIndex = _ref2.expandIconColumnIndex,\n _ref2$expandedRowOffs = _ref2.expandedRowOffset,\n expandedRowOffset = _ref2$expandedRowOffs === void 0 ? 0 : _ref2$expandedRowOffs,\n direction = _ref2.direction,\n expandRowByClick = _ref2.expandRowByClick,\n columnWidth = _ref2.columnWidth,\n fixed = _ref2.fixed,\n scrollWidth = _ref2.scrollWidth,\n clientWidth = _ref2.clientWidth;\n var baseColumns = React.useMemo(function () {\n var newColumns = columns || convertChildrenToColumns(children) || [];\n return filterHiddenColumns(newColumns.slice());\n }, [columns, children]);\n\n // ========================== Expand ==========================\n var withExpandColumns = React.useMemo(function () {\n if (expandable) {\n var cloneColumns = baseColumns.slice();\n\n // >>> Warning if use `expandIconColumnIndex`\n if (process.env.NODE_ENV !== 'production' && expandIconColumnIndex >= 0) {\n warning(false, '`expandIconColumnIndex` is deprecated. Please use `Table.EXPAND_COLUMN` in `columns` instead.');\n }\n\n // >>> Insert expand column if not exist\n if (!cloneColumns.includes(EXPAND_COLUMN)) {\n var expandColIndex = expandIconColumnIndex || 0;\n if (expandColIndex >= 0 && (expandColIndex || fixed === 'left' || !fixed)) {\n cloneColumns.splice(expandColIndex, 0, EXPAND_COLUMN);\n }\n if (fixed === 'right') {\n cloneColumns.splice(baseColumns.length, 0, EXPAND_COLUMN);\n }\n }\n\n // >>> Deduplicate additional expand column\n if (process.env.NODE_ENV !== 'production' && cloneColumns.filter(function (c) {\n return c === EXPAND_COLUMN;\n }).length > 1) {\n warning(false, 'There exist more than one `EXPAND_COLUMN` in `columns`.');\n }\n var expandColumnIndex = cloneColumns.indexOf(EXPAND_COLUMN);\n cloneColumns = cloneColumns.filter(function (column, index) {\n return column !== EXPAND_COLUMN || index === expandColumnIndex;\n });\n\n // >>> Check if expand column need to fixed\n var prevColumn = baseColumns[expandColumnIndex];\n var fixedColumn;\n if (fixed) {\n fixedColumn = fixed;\n } else {\n fixedColumn = prevColumn ? prevColumn.fixed : null;\n }\n\n // >>> Create expandable column\n var expandColumn = _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, INTERNAL_COL_DEFINE, {\n className: \"\".concat(prefixCls, \"-expand-icon-col\"),\n columnType: 'EXPAND_COLUMN'\n }), \"title\", columnTitle), \"fixed\", fixedColumn), \"className\", \"\".concat(prefixCls, \"-row-expand-icon-cell\")), \"width\", columnWidth), \"render\", function render(_, record, index) {\n var rowKey = getRowKey(record, index);\n var expanded = expandedKeys.has(rowKey);\n var recordExpandable = rowExpandable ? rowExpandable(record) : true;\n var icon = expandIcon({\n prefixCls: prefixCls,\n expanded: expanded,\n expandable: recordExpandable,\n record: record,\n onExpand: onTriggerExpand\n });\n if (expandRowByClick) {\n return /*#__PURE__*/React.createElement(\"span\", {\n onClick: function onClick(e) {\n return e.stopPropagation();\n }\n }, icon);\n }\n return icon;\n });\n return cloneColumns.map(function (col, index) {\n var column = col === EXPAND_COLUMN ? expandColumn : col;\n if (index < expandedRowOffset) {\n return _objectSpread(_objectSpread({}, column), {}, {\n fixed: column.fixed || 'left'\n });\n }\n return column;\n });\n }\n if (process.env.NODE_ENV !== 'production' && baseColumns.includes(EXPAND_COLUMN)) {\n warning(false, '`expandable` is not config but there exist `EXPAND_COLUMN` in `columns`.');\n }\n return baseColumns.filter(function (col) {\n return col !== EXPAND_COLUMN;\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [expandable, baseColumns, getRowKey, expandedKeys, expandIcon, direction, expandedRowOffset]);\n\n // ========================= Transform ========================\n var mergedColumns = React.useMemo(function () {\n var finalColumns = withExpandColumns;\n if (transformColumns) {\n finalColumns = transformColumns(finalColumns);\n }\n\n // Always provides at least one column for table display\n if (!finalColumns.length) {\n finalColumns = [{\n render: function render() {\n return null;\n }\n }];\n }\n return finalColumns;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [transformColumns, withExpandColumns, direction]);\n\n // ========================== Flatten =========================\n var flattenColumns = React.useMemo(function () {\n if (direction === 'rtl') {\n return revertForRtl(flatColumns(mergedColumns));\n }\n return flatColumns(mergedColumns);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [mergedColumns, direction, scrollWidth]);\n\n // ========================= Gap Fixed ========================\n var hasGapFixed = React.useMemo(function () {\n // Fixed: left, since old browser not support `findLastIndex`, we should use reverse loop\n var lastLeftIndex = -1;\n for (var i = flattenColumns.length - 1; i >= 0; i -= 1) {\n var colFixed = flattenColumns[i].fixed;\n if (colFixed === 'left' || colFixed === true) {\n lastLeftIndex = i;\n break;\n }\n }\n if (lastLeftIndex >= 0) {\n for (var _i = 0; _i <= lastLeftIndex; _i += 1) {\n var _colFixed = flattenColumns[_i].fixed;\n if (_colFixed !== 'left' && _colFixed !== true) {\n return true;\n }\n }\n }\n\n // Fixed: right\n var firstRightIndex = flattenColumns.findIndex(function (_ref3) {\n var colFixed = _ref3.fixed;\n return colFixed === 'right';\n });\n if (firstRightIndex >= 0) {\n for (var _i2 = firstRightIndex; _i2 < flattenColumns.length; _i2 += 1) {\n var _colFixed2 = flattenColumns[_i2].fixed;\n if (_colFixed2 !== 'right') {\n return true;\n }\n }\n }\n return false;\n }, [flattenColumns]);\n\n // ========================= FillWidth ========================\n var _useWidthColumns = useWidthColumns(flattenColumns, scrollWidth, clientWidth),\n _useWidthColumns2 = _slicedToArray(_useWidthColumns, 2),\n filledColumns = _useWidthColumns2[0],\n realScrollWidth = _useWidthColumns2[1];\n return [mergedColumns, filledColumns, realScrollWidth, hasGapFixed];\n}\nexport default useColumns;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","export function ifShow(show, container, creator, removeChildren, removeHandler) {\n if (removeChildren === void 0) { removeChildren = true; }\n if (removeHandler === void 0) { removeHandler = function (g) {\n g.node().removeChildren();\n }; }\n if (show) {\n return creator(container);\n }\n if (removeChildren)\n removeHandler(container);\n return null;\n}\n//# sourceMappingURL=if-show.js.map","import React from 'react';\nexport var EditOrReadOnlyContext = /*#__PURE__*/React.createContext({\n mode: 'edit'\n});","export function toUppercaseFirstLetter(string) {\n return string.toString().charAt(0).toUpperCase() + string.toString().slice(1);\n}\nexport function toLowercaseFirstLetter(string) {\n return string.toString().charAt(0).toLowerCase() + string.toString().slice(1);\n}\nexport function addPrefix(string, prefix) {\n return \"\".concat(prefix).concat(toUppercaseFirstLetter(string));\n}\nexport function removePrefix(string, prefix, lowercaseFirstLetter) {\n var _a;\n if (lowercaseFirstLetter === void 0) { lowercaseFirstLetter = true; }\n var inferPrefix = prefix || ((_a = string.match(/^([a-z][a-z0-9]+)/)) === null || _a === void 0 ? void 0 : _a[0]) || '';\n var withoutPrefix = string.replace(new RegExp(\"^(\".concat(inferPrefix, \")\")), '');\n return lowercaseFirstLetter ? toLowercaseFirstLetter(withoutPrefix) : withoutPrefix;\n}\n//# sourceMappingURL=string.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { addPrefix, removePrefix, toUppercaseFirstLetter } from './string';\n/**\n * 对给定HTML对象应用给定样式\n * @param style {[key: string]: Object}\n * 样式表参考结构\n * {\n * '.selector': {\n * 'attrName': 'attr',\n * 'padding': '0 0 0 0',\n * 'background-color': 'red'\n * }\n * }\n */\nexport function applyStyleSheet(element, style) {\n Object.entries(style).forEach(function (_a) {\n var _b = __read(_a, 2), selector = _b[0], styleString = _b[1];\n // apply styles to element and children\n __spreadArray([element], __read(element.querySelectorAll(selector)), false).filter(function (el) { return el.matches(selector); })\n .forEach(function (target) {\n if (!target)\n return;\n var temp = target;\n temp.style.cssText += Object.entries(styleString).reduce(function (total, currVal) {\n return \"\".concat(total).concat(currVal.join(':'), \";\");\n }, '');\n });\n });\n}\nvar startsWith = function (text, prefix) {\n if (!(text === null || text === void 0 ? void 0 : text.startsWith(prefix)))\n return false;\n var nextChart = text[prefix.length];\n return nextChart >= 'A' && nextChart <= 'Z';\n};\nexport function subStyleProps(style, prefix, invert) {\n if (invert === void 0) { invert = false; }\n var result = {};\n Object.entries(style).forEach(function (_a) {\n var _b = __read(_a, 2), key = _b[0], value = _b[1];\n // never transfer class property\n if (key === 'className' || key === 'class') {\n // do nothing\n }\n // @example showHandle -> showHandle, showHandleLabel -> showLabel\n else if (startsWith(key, 'show') && startsWith(removePrefix(key, 'show'), prefix) !== invert) {\n if (key === addPrefix(prefix, 'show'))\n result[key] = value;\n else\n result[key.replace(new RegExp(toUppercaseFirstLetter(prefix)), '')] = value;\n }\n // @example navFormatter -> formatter\n else if (!startsWith(key, 'show') && startsWith(key, prefix) !== invert) {\n var name_1 = removePrefix(key, prefix);\n // don't transfer filter if it represents “过滤器”\n if (name_1 === 'filter' && typeof value === 'function') {\n // do nothing\n }\n else\n result[name_1] = value;\n }\n });\n return result;\n}\nexport function superStyleProps(style, prefix) {\n return Object.entries(style).reduce(function (acc, _a) {\n var _b = __read(_a, 2), key = _b[0], value = _b[1];\n if (key.startsWith('show'))\n acc[\"show\".concat(prefix).concat(key.slice(4))] = value;\n else\n acc[\"\".concat(prefix).concat(toUppercaseFirstLetter(key))] = value;\n return acc;\n }, {});\n}\n/**\n * extract group style from mixin style\n * @param style\n * @param ignoreStyleDict style will be ignore from style\n * @returns shape style and rest style\n */\nexport function splitStyle(style, ignoreStyleDict) {\n if (ignoreStyleDict === void 0) { ignoreStyleDict = ['x', 'y', 'class', 'className']; }\n var groupStyleDict = [\n 'transform',\n 'transformOrigin',\n 'anchor',\n 'visibility',\n 'pointerEvents',\n 'zIndex',\n 'cursor',\n 'clipPath',\n 'clipPathTargets',\n 'offsetPath',\n 'offsetPathTargets',\n 'offsetDistance',\n 'draggable',\n 'droppable',\n ];\n var output = {};\n var groupStyle = {};\n Object.entries(style).forEach(function (_a) {\n var _b = __read(_a, 2), key = _b[0], val = _b[1];\n if (ignoreStyleDict.includes(key)) {\n // do nothing\n }\n else if (groupStyleDict.indexOf(key) !== -1)\n groupStyle[key] = val;\n else\n output[key] = val;\n });\n return [output, groupStyle];\n}\n//# sourceMappingURL=style.js.map","export var EXPAND_COLUMN = {};\nexport var INTERNAL_HOOKS = 'rc-table-internal-hook';","// This icon file is generated automatically.\nvar DeleteOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z\" } }] }, \"name\": \"delete\", \"theme\": \"outlined\" };\nexport default DeleteOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport DeleteOutlinedSvg from \"@ant-design/icons-svg/es/asn/DeleteOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar DeleteOutlined = function DeleteOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: DeleteOutlinedSvg\n }));\n};\n\n/**![delete](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTM2MCAxODRoLThjNC40IDAgOC0zLjYgOC04djhoMzA0di04YzAgNC40IDMuNiA4IDggOGgtOHY3Mmg3MnYtODBjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzUyYy0zNS4zIDAtNjQgMjguNy02NCA2NHY4MGg3MnYtNzJ6bTUwNCA3MkgxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjMyYzAgNC40IDMuNiA4IDggOGg2MC40bDI0LjcgNTIzYzEuNiAzNC4xIDI5LjggNjEgNjMuOSA2MWg0NTRjMzQuMiAwIDYyLjMtMjYuOCA2My45LTYxbDI0LjctNTIzSDg4OGM0LjQgMCA4LTMuNiA4LTh2LTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek03MzEuMyA4NDBIMjkyLjdsLTI0LjItNTEyaDQ4N2wtMjQuMiA1MTJ6IiAvPjwvc3ZnPg==) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(DeleteOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'DeleteOutlined';\n}\nexport default RefIcon;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"steps\", \"columns\", \"forceUpdate\", \"grid\"];\nimport { useLatest } from '@ant-design/pro-utils';\nimport React, { useCallback, useMemo } from 'react';\nimport { StepsForm as ProStepsForm } from \"../../../layouts/StepsForm\";\nimport BetaSchemaForm from \"../index\";\nimport { createElement as _createElement } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar StepsForm = function StepsForm(_ref) {\n var steps = _ref.steps,\n columns = _ref.columns,\n forceUpdate = _ref.forceUpdate,\n grid = _ref.grid,\n props = _objectWithoutProperties(_ref, _excluded);\n var propsRef = useLatest(props);\n\n /**\n * Fixed StepsForm toggle step causing formRef to update\n */\n var onCurrentChange = useCallback(function (current) {\n var _propsRef$current$onC, _propsRef$current;\n (_propsRef$current$onC = (_propsRef$current = propsRef.current).onCurrentChange) === null || _propsRef$current$onC === void 0 || _propsRef$current$onC.call(_propsRef$current, current);\n forceUpdate([]);\n }, [forceUpdate, propsRef]);\n var StepDoms = useMemo(function () {\n return steps === null || steps === void 0 ? void 0 : steps.map(function (step, index) {\n return /*#__PURE__*/_createElement(BetaSchemaForm, _objectSpread(_objectSpread({\n grid: grid\n }, step), {}, {\n // eslint-disable-next-line react/no-array-index-key\n key: index,\n layoutType: \"StepForm\",\n columns: columns[index]\n }));\n });\n }, [columns, grid, steps]);\n return /*#__PURE__*/_jsx(ProStepsForm, _objectSpread(_objectSpread({}, props), {}, {\n onCurrentChange: onCurrentChange,\n children: StepDoms\n }));\n};\nexport default StepsForm;","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar FORMAT_KEYS = ['YYYY', 'MM', 'DD', 'HH', 'mm', 'ss', 'SSS'];\n// Use Chinese character to avoid conflict with the mask format\nvar REPLACE_KEY = '顧';\nvar MaskFormat = /*#__PURE__*/function () {\n function MaskFormat(format) {\n _classCallCheck(this, MaskFormat);\n _defineProperty(this, \"format\", void 0);\n _defineProperty(this, \"maskFormat\", void 0);\n _defineProperty(this, \"cells\", void 0);\n _defineProperty(this, \"maskCells\", void 0);\n this.format = format;\n\n // Generate mask format\n var replaceKeys = FORMAT_KEYS.map(function (key) {\n return \"(\".concat(key, \")\");\n }).join('|');\n var replaceReg = new RegExp(replaceKeys, 'g');\n this.maskFormat = format.replace(replaceReg,\n // Use Chinese character to avoid user use it in format\n function (key) {\n return REPLACE_KEY.repeat(key.length);\n });\n\n // Generate cells\n var cellReg = new RegExp(\"(\".concat(FORMAT_KEYS.join('|'), \")\"));\n var strCells = (format.split(cellReg) || []).filter(function (str) {\n return str;\n });\n var offset = 0;\n this.cells = strCells.map(function (text) {\n var mask = FORMAT_KEYS.includes(text);\n var start = offset;\n var end = offset + text.length;\n offset = end;\n return {\n text: text,\n mask: mask,\n start: start,\n end: end\n };\n });\n\n // Mask cells\n this.maskCells = this.cells.filter(function (cell) {\n return cell.mask;\n });\n }\n _createClass(MaskFormat, [{\n key: \"getSelection\",\n value: function getSelection(maskCellIndex) {\n var _ref = this.maskCells[maskCellIndex] || {},\n start = _ref.start,\n end = _ref.end;\n return [start || 0, end || 0];\n }\n\n /** Check given text match format */\n }, {\n key: \"match\",\n value: function match(text) {\n for (var i = 0; i < this.maskFormat.length; i += 1) {\n var maskChar = this.maskFormat[i];\n var textChar = text[i];\n if (!textChar || maskChar !== REPLACE_KEY && maskChar !== textChar) {\n return false;\n }\n }\n return true;\n }\n\n /** Get mask cell count */\n }, {\n key: \"size\",\n value: function size() {\n return this.maskCells.length;\n }\n }, {\n key: \"getMaskCellIndex\",\n value: function getMaskCellIndex(anchorIndex) {\n var closetDist = Number.MAX_SAFE_INTEGER;\n var closetIndex = 0;\n for (var i = 0; i < this.maskCells.length; i += 1) {\n var _this$maskCells$i = this.maskCells[i],\n start = _this$maskCells$i.start,\n end = _this$maskCells$i.end;\n if (anchorIndex >= start && anchorIndex <= end) {\n return i;\n }\n var dist = Math.min(Math.abs(anchorIndex - start), Math.abs(anchorIndex - end));\n if (dist < closetDist) {\n closetDist = dist;\n closetIndex = i;\n }\n }\n return closetIndex;\n }\n }]);\n return MaskFormat;\n}();\nexport { MaskFormat as default };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"active\", \"showActiveCls\", \"suffixIcon\", \"format\", \"validateFormat\", \"onChange\", \"onInput\", \"helped\", \"onHelp\", \"onSubmit\", \"onKeyDown\", \"preserveInvalidOnBlur\", \"invalid\", \"clearIcon\"];\nimport classNames from 'classnames';\nimport { useEvent } from 'rc-util';\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport raf from \"rc-util/es/raf\";\nimport * as React from 'react';\nimport { leftPad } from \"../../utils/miscUtil\";\nimport PickerContext from \"../context\";\nimport useLockEffect from \"../hooks/useLockEffect\";\nimport Icon from \"./Icon\";\nimport MaskFormat from \"./MaskFormat\";\nimport { getMaskRange } from \"./util\";\n\n// Format logic\n//\n// First time on focus:\n// 1. check if the text is valid, if not fill with format\n// 2. set highlight cell to the first cell\n// Cells\n// 1. Selection the index cell, set inner `cacheValue` to ''\n// 2. Key input filter non-number char, patch after the `cacheValue`\n// 1. Replace the `cacheValue` with input align the cell length\n// 2. Re-selection the mask cell\n// 3. If `cacheValue` match the limit length or cell format (like 1 ~ 12 month), go to next cell\n\nvar Input = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var active = props.active,\n _props$showActiveCls = props.showActiveCls,\n showActiveCls = _props$showActiveCls === void 0 ? true : _props$showActiveCls,\n suffixIcon = props.suffixIcon,\n format = props.format,\n validateFormat = props.validateFormat,\n onChange = props.onChange,\n onInput = props.onInput,\n helped = props.helped,\n onHelp = props.onHelp,\n onSubmit = props.onSubmit,\n onKeyDown = props.onKeyDown,\n _props$preserveInvali = props.preserveInvalidOnBlur,\n preserveInvalidOnBlur = _props$preserveInvali === void 0 ? false : _props$preserveInvali,\n invalid = props.invalid,\n clearIcon = props.clearIcon,\n restProps = _objectWithoutProperties(props, _excluded);\n var value = props.value,\n onFocus = props.onFocus,\n onBlur = props.onBlur,\n onMouseUp = props.onMouseUp;\n var _React$useContext = React.useContext(PickerContext),\n prefixCls = _React$useContext.prefixCls,\n _React$useContext$inp = _React$useContext.input,\n Component = _React$useContext$inp === void 0 ? 'input' : _React$useContext$inp;\n var inputPrefixCls = \"\".concat(prefixCls, \"-input\");\n\n // ======================== Value =========================\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n focused = _React$useState2[0],\n setFocused = _React$useState2[1];\n var _React$useState3 = React.useState(value),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n internalInputValue = _React$useState4[0],\n setInputValue = _React$useState4[1];\n var _React$useState5 = React.useState(''),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n focusCellText = _React$useState6[0],\n setFocusCellText = _React$useState6[1];\n var _React$useState7 = React.useState(null),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n focusCellIndex = _React$useState8[0],\n setFocusCellIndex = _React$useState8[1];\n var _React$useState9 = React.useState(null),\n _React$useState10 = _slicedToArray(_React$useState9, 2),\n forceSelectionSyncMark = _React$useState10[0],\n forceSelectionSync = _React$useState10[1];\n var inputValue = internalInputValue || '';\n\n // Sync value if needed\n React.useEffect(function () {\n setInputValue(value);\n }, [value]);\n\n // ========================= Refs =========================\n var holderRef = React.useRef();\n var inputRef = React.useRef();\n React.useImperativeHandle(ref, function () {\n return {\n nativeElement: holderRef.current,\n inputElement: inputRef.current,\n focus: function focus(options) {\n inputRef.current.focus(options);\n },\n blur: function blur() {\n inputRef.current.blur();\n }\n };\n });\n\n // ======================== Format ========================\n var maskFormat = React.useMemo(function () {\n return new MaskFormat(format || '');\n }, [format]);\n var _React$useMemo = React.useMemo(function () {\n if (helped) {\n return [0, 0];\n }\n return maskFormat.getSelection(focusCellIndex);\n }, [maskFormat, focusCellIndex, helped]),\n _React$useMemo2 = _slicedToArray(_React$useMemo, 2),\n selectionStart = _React$useMemo2[0],\n selectionEnd = _React$useMemo2[1];\n\n // ======================== Modify ========================\n // When input modify content, trigger `onHelp` if is not the format\n var onModify = function onModify(text) {\n if (text && text !== format && text !== value) {\n onHelp();\n }\n };\n\n // ======================== Change ========================\n /**\n * Triggered by paste, keyDown and focus to show format\n */\n var triggerInputChange = useEvent(function (text) {\n if (validateFormat(text)) {\n onChange(text);\n }\n setInputValue(text);\n onModify(text);\n });\n\n // Directly trigger `onChange` if `format` is empty\n var onInternalChange = function onInternalChange(event) {\n // Hack `onChange` with format to do nothing\n if (!format) {\n var text = event.target.value;\n onModify(text);\n setInputValue(text);\n onChange(text);\n }\n };\n var onFormatPaste = function onFormatPaste(event) {\n // Get paste text\n var pasteText = event.clipboardData.getData('text');\n if (validateFormat(pasteText)) {\n triggerInputChange(pasteText);\n }\n };\n\n // ======================== Mouse =========================\n // When `mouseDown` get focus, it's better to not to change the selection\n // Since the up position maybe not is the first cell\n var mouseDownRef = React.useRef(false);\n var onFormatMouseDown = function onFormatMouseDown() {\n mouseDownRef.current = true;\n };\n var onFormatMouseUp = function onFormatMouseUp(event) {\n var _ref = event.target,\n start = _ref.selectionStart;\n var closeMaskIndex = maskFormat.getMaskCellIndex(start);\n setFocusCellIndex(closeMaskIndex);\n\n // Force update the selection\n forceSelectionSync({});\n onMouseUp === null || onMouseUp === void 0 || onMouseUp(event);\n mouseDownRef.current = false;\n };\n\n // ====================== Focus Blur ======================\n var onFormatFocus = function onFormatFocus(event) {\n setFocused(true);\n setFocusCellIndex(0);\n setFocusCellText('');\n onFocus(event);\n };\n var onSharedBlur = function onSharedBlur(event) {\n onBlur(event);\n };\n var onFormatBlur = function onFormatBlur(event) {\n setFocused(false);\n onSharedBlur(event);\n };\n\n // ======================== Active ========================\n // Check if blur need reset input value\n useLockEffect(active, function () {\n if (!active && !preserveInvalidOnBlur) {\n setInputValue(value);\n }\n });\n\n // ======================= Keyboard =======================\n var onSharedKeyDown = function onSharedKeyDown(event) {\n if (event.key === 'Enter' && validateFormat(inputValue)) {\n onSubmit();\n }\n onKeyDown === null || onKeyDown === void 0 || onKeyDown(event);\n };\n var onFormatKeyDown = function onFormatKeyDown(event) {\n onSharedKeyDown(event);\n var key = event.key;\n\n // Save the cache with cell text\n var nextCellText = null;\n\n // Fill in the input\n var nextFillText = null;\n var maskCellLen = selectionEnd - selectionStart;\n var cellFormat = format.slice(selectionStart, selectionEnd);\n\n // Cell Index\n var offsetCellIndex = function offsetCellIndex(offset) {\n setFocusCellIndex(function (idx) {\n var nextIndex = idx + offset;\n nextIndex = Math.max(nextIndex, 0);\n nextIndex = Math.min(nextIndex, maskFormat.size() - 1);\n return nextIndex;\n });\n };\n\n // Range\n var offsetCellValue = function offsetCellValue(offset) {\n var _getMaskRange = getMaskRange(cellFormat),\n _getMaskRange2 = _slicedToArray(_getMaskRange, 3),\n rangeStart = _getMaskRange2[0],\n rangeEnd = _getMaskRange2[1],\n rangeDefault = _getMaskRange2[2];\n var currentText = inputValue.slice(selectionStart, selectionEnd);\n var currentTextNum = Number(currentText);\n if (isNaN(currentTextNum)) {\n return String(rangeDefault ? rangeDefault : offset > 0 ? rangeStart : rangeEnd);\n }\n var num = currentTextNum + offset;\n var range = rangeEnd - rangeStart + 1;\n return String(rangeStart + (range + num - rangeStart) % range);\n };\n switch (key) {\n // =============== Remove ===============\n case 'Backspace':\n case 'Delete':\n nextCellText = '';\n nextFillText = cellFormat;\n break;\n\n // =============== Arrows ===============\n // Left key\n case 'ArrowLeft':\n nextCellText = '';\n offsetCellIndex(-1);\n break;\n\n // Right key\n case 'ArrowRight':\n nextCellText = '';\n offsetCellIndex(1);\n break;\n\n // Up key\n case 'ArrowUp':\n nextCellText = '';\n nextFillText = offsetCellValue(1);\n break;\n\n // Down key\n case 'ArrowDown':\n nextCellText = '';\n nextFillText = offsetCellValue(-1);\n break;\n\n // =============== Number ===============\n default:\n if (!isNaN(Number(key))) {\n nextCellText = focusCellText + key;\n nextFillText = nextCellText;\n }\n break;\n }\n\n // Update cell text\n if (nextCellText !== null) {\n setFocusCellText(nextCellText);\n if (nextCellText.length >= maskCellLen) {\n // Go to next cell\n offsetCellIndex(1);\n setFocusCellText('');\n }\n }\n\n // Update the input text\n if (nextFillText !== null) {\n // Replace selection range with `nextCellText`\n var nextFocusValue =\n // before\n inputValue.slice(0, selectionStart) +\n // replace\n leftPad(nextFillText, maskCellLen) +\n // after\n inputValue.slice(selectionEnd);\n triggerInputChange(nextFocusValue.slice(0, format.length));\n }\n\n // Always trigger selection sync after key down\n forceSelectionSync({});\n };\n\n // ======================== Format ========================\n var rafRef = React.useRef();\n useLayoutEffect(function () {\n if (!focused || !format || mouseDownRef.current) {\n return;\n }\n\n // Reset with format if not match\n if (!maskFormat.match(inputValue)) {\n triggerInputChange(format);\n return;\n }\n\n // Match the selection range\n inputRef.current.setSelectionRange(selectionStart, selectionEnd);\n\n // Chrome has the bug anchor position looks not correct but actually correct\n rafRef.current = raf(function () {\n inputRef.current.setSelectionRange(selectionStart, selectionEnd);\n });\n return function () {\n raf.cancel(rafRef.current);\n };\n }, [maskFormat, format, focused, inputValue, focusCellIndex, selectionStart, selectionEnd, forceSelectionSyncMark, triggerInputChange]);\n\n // ======================== Render ========================\n // Input props for format\n var inputProps = format ? {\n onFocus: onFormatFocus,\n onBlur: onFormatBlur,\n onKeyDown: onFormatKeyDown,\n onMouseDown: onFormatMouseDown,\n onMouseUp: onFormatMouseUp,\n onPaste: onFormatPaste\n } : {};\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: holderRef,\n className: classNames(inputPrefixCls, _defineProperty(_defineProperty({}, \"\".concat(inputPrefixCls, \"-active\"), active && showActiveCls), \"\".concat(inputPrefixCls, \"-placeholder\"), helped))\n }, /*#__PURE__*/React.createElement(Component, _extends({\n ref: inputRef,\n \"aria-invalid\": invalid,\n autoComplete: \"off\"\n }, restProps, {\n onKeyDown: onSharedKeyDown,\n onBlur: onSharedBlur\n // Replace with format\n }, inputProps, {\n // Value\n value: inputValue,\n onChange: onInternalChange\n })), /*#__PURE__*/React.createElement(Icon, {\n type: \"suffix\",\n icon: suffixIcon\n }), clearIcon);\n});\nif (process.env.NODE_ENV !== 'production') {\n Input.displayName = 'Input';\n}\nexport default Input;","export function getMaskRange(key) {\n var PresetRange = {\n YYYY: [0, 9999, new Date().getFullYear()],\n MM: [1, 12],\n DD: [1, 31],\n HH: [0, 23],\n mm: [0, 59],\n ss: [0, 59],\n SSS: [0, 999]\n };\n return PresetRange[key];\n}","// src/utils/bandOperation/math.ts\nfunction mathematical(symbol, n1, n2) {\n switch (symbol) {\n case \"+\":\n return n1 + n2;\n case \"-\":\n return n1 - n2;\n case \"*\":\n return n1 * n2;\n case \"/\":\n return n1 / n2;\n case \"%\":\n return n1 % n2;\n case \"^\":\n return Math.pow(n1, n2);\n case \"abs\":\n return Math.abs(n1);\n case \"floor\":\n return Math.floor(n1);\n case \"round\":\n return Math.round(n1);\n case \"ceil\":\n return Math.ceil(n1);\n case \"sin\":\n return Math.sin(n1);\n case \"cos\":\n return Math.cos(n1);\n case \"atan\":\n return n2 === -1 ? Math.atan(n1) : Math.atan2(n1, n2);\n case \"min\":\n return Math.min(n1, n2);\n case \"max\":\n return Math.max(n1, n2);\n case \"log10\":\n return Math.log(n1);\n case \"log2\":\n return Math.log2(n1);\n default:\n console.warn(\"Calculate symbol err! Return default 0\");\n return 0;\n }\n}\nfunction calculate(express, bandsData) {\n const { width, height } = bandsData[0];\n const dataArray = bandsData.map((band) => band.rasterData);\n const length = width * height;\n const rasterData = [];\n const originExp = JSON.stringify(express);\n for (let i = 0; i < length; i++) {\n const exp = JSON.parse(originExp);\n const expResult = spellExpress(exp, dataArray, i);\n if (typeof expResult === \"number\") {\n rasterData.push(expResult);\n } else {\n const result = calculateExpress(exp);\n rasterData.push(result);\n }\n }\n return rasterData;\n}\nfunction spellExpress(express, dataArray, index) {\n if (express.length === 2 && express[0] === \"band\" && typeof express[1] === \"number\") {\n try {\n return dataArray[express[1]][index];\n } catch (err) {\n console.warn(\"Raster Data err!\");\n return 0;\n }\n }\n express.map((e, i) => {\n if (Array.isArray(e) && e.length > 0) {\n switch (e[0]) {\n case \"band\":\n try {\n express[i] = dataArray[e[1]][index];\n } catch (err) {\n console.warn(\"Raster Data err!\");\n express[i] = 0;\n }\n break;\n default:\n spellExpress(e, dataArray, index);\n }\n }\n });\n}\nfunction formatExpress(express) {\n const [symbol1, symbol2 = -1, symbol3 = -1] = express;\n if (symbol1 === void 0) {\n console.warn(\"Express err!\");\n return [\"+\", 0, 0];\n }\n const symbol = symbol1.replace(/\\s+/g, \"\");\n return [symbol, symbol2, symbol3];\n}\nfunction calculateExpress(express) {\n const formatExp = formatExpress(express);\n const str = formatExp[0];\n let left = formatExp[1];\n let right = formatExp[2];\n if (Array.isArray(left)) {\n left = calculateExpress(express[1]);\n }\n if (Array.isArray(right)) {\n right = calculateExpress(express[2]);\n }\n return mathematical(str, left, right);\n}\nexport {\n calculate,\n calculateExpress,\n formatExpress,\n mathematical,\n spellExpress\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n// src/utils/bandOperation/bands.ts\nimport { calculate } from \"./math\";\nimport { operationsSchema } from \"./operationSchema\";\nfunction bandsOperation(imageDataList, rasterFormat, operation) {\n return __async(this, null, function* () {\n if (imageDataList.length === 0) {\n return {\n rasterData: [0],\n width: 1,\n heigh: 1\n };\n }\n const formatData = yield Promise.all(\n imageDataList.map(({ data, bands = [0] }) => rasterFormat(data, bands))\n );\n const bandsData = [];\n formatData.forEach((d) => {\n Array.isArray(d) ? bandsData.push(...d) : bandsData.push(d);\n });\n const { width, height } = bandsData[0];\n let rasterData;\n switch (typeof operation) {\n case \"function\":\n rasterData = operation(bandsData);\n break;\n case \"object\":\n if (!Array.isArray(operation)) {\n rasterData = processSchemaOperation(operation, bandsData);\n } else {\n rasterData = { rasterData: calculate(operation, bandsData) };\n }\n break;\n default:\n rasterData = { rasterData: bandsData[0].rasterData };\n }\n return __spreadProps(__spreadValues({}, rasterData), {\n width,\n height\n });\n });\n}\nfunction processSchemaOperation(operation, bandsData) {\n const schema = operationsSchema[operation.type];\n if (schema.type === \"function\") {\n return schema.method(bandsData, operation == null ? void 0 : operation.options);\n } else if (schema.type === \"operation\") {\n if (operation.type === \"rgb\") {\n return getRgbBands(schema.expression, bandsData);\n } else {\n return { rasterData: calculate(schema.expression, bandsData) };\n }\n }\n}\nfunction getRgbBands(operation, bandsData) {\n if (operation.r === void 0) {\n console.warn(\"Channel R lost in Operation! Use band[0] to fill!\");\n }\n if (operation.g === void 0) {\n console.warn(\"Channel G lost in Operation! Use band[0] to fill!\");\n }\n if (operation.b === void 0) {\n console.warn(\"Channel B lost in Operation! Use band[0] to fill!\");\n }\n const r = calculate(operation.r || [\"band\", 0], bandsData);\n const g = calculate(operation.g || [\"band\", 0], bandsData);\n const b = calculate(operation.b || [\"band\", 0], bandsData);\n return [r, g, b];\n}\nfunction processRasterData(rasterFiles, rasterFormat, operation, callback) {\n return __async(this, null, function* () {\n const rasterData = yield bandsOperation(rasterFiles, rasterFormat, operation);\n callback(null, { data: rasterData });\n });\n}\nexport {\n bandsOperation,\n processRasterData\n};\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","export function getCellFixedInfo(colStart, colEnd, columns, stickyOffsets, direction) {\n var startColumn = columns[colStart] || {};\n var endColumn = columns[colEnd] || {};\n var fixLeft;\n var fixRight;\n if (startColumn.fixed === 'left') {\n fixLeft = stickyOffsets.left[direction === 'rtl' ? colEnd : colStart];\n } else if (endColumn.fixed === 'right') {\n fixRight = stickyOffsets.right[direction === 'rtl' ? colStart : colEnd];\n }\n var lastFixLeft = false;\n var firstFixRight = false;\n var lastFixRight = false;\n var firstFixLeft = false;\n var nextColumn = columns[colEnd + 1];\n var prevColumn = columns[colStart - 1];\n\n // need show shadow only when canLastFix is true\n var canLastFix = nextColumn && !nextColumn.fixed || prevColumn && !prevColumn.fixed || columns.every(function (col) {\n return col.fixed === 'left';\n });\n if (direction === 'rtl') {\n if (fixLeft !== undefined) {\n var prevFixLeft = prevColumn && prevColumn.fixed === 'left';\n firstFixLeft = !prevFixLeft && canLastFix;\n } else if (fixRight !== undefined) {\n var nextFixRight = nextColumn && nextColumn.fixed === 'right';\n lastFixRight = !nextFixRight && canLastFix;\n }\n } else if (fixLeft !== undefined) {\n var nextFixLeft = nextColumn && nextColumn.fixed === 'left';\n lastFixLeft = !nextFixLeft && canLastFix;\n } else if (fixRight !== undefined) {\n var prevFixRight = prevColumn && prevColumn.fixed === 'right';\n firstFixRight = !prevFixRight && canLastFix;\n }\n return {\n fixLeft: fixLeft,\n fixRight: fixRight,\n lastFixLeft: lastFixLeft,\n firstFixRight: firstFixRight,\n lastFixRight: lastFixRight,\n firstFixLeft: firstFixLeft,\n isSticky: stickyOffsets.isSticky\n };\n}","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","export function midPoint(a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var bx = b[0];\n var by = b[1];\n return [ax + (bx - ax) * t, ay + (by - ay) * t];\n}\n//# sourceMappingURL=mid-point.js.map","/**\n * camelCase('foo-bar');\n * // => 'fooBar'\n * @param s\n */\nexport function camelCase(s) {\n return s.replace(/-(\\w)/g, function (_, letter) {\n return letter.toUpperCase();\n });\n}\n/**\n * kebabCase('fooBar');\n * // => 'foo-bar'\n * @param s\n */\nexport function kebabCase(s) {\n return s.replace(/([A-Z])/g, '-$1').toLowerCase();\n}\n//# sourceMappingURL=string.js.map","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import { identity } from '@antv/util';\nimport { Continuous } from './continuous';\nimport { createInterpolateValue } from '../utils';\nimport { d3Ticks } from '../tick-methods/d3-ticks';\nconst transformPow = (exponent) => {\n return (x) => {\n return x < 0 ? -((-x) ** exponent) : x ** exponent;\n };\n};\nconst transformPowInvert = (exponent) => {\n return (x) => {\n return x < 0 ? -((-x) ** (1 / exponent)) : x ** (1 / exponent);\n };\n};\nconst transformSqrt = (x) => {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n};\n/**\n * Pow 比例尺\n *\n * 类似于 linear scale, 不同之处在于在计算输出范围值之前对输入域值应用了指数变换,.\n * 即 y = x ^ k 其中 k(指数)可以是任何实数。\n */\nexport class Pow extends Continuous {\n getDefaultOptions() {\n return {\n domain: [0, 1],\n range: [0, 1],\n nice: false,\n clamp: false,\n round: false,\n exponent: 2,\n interpolate: createInterpolateValue,\n tickMethod: d3Ticks,\n tickCount: 5,\n };\n }\n // 显示指定 options 的类型为 PowOptions O 的类型\n constructor(options) {\n super(options);\n }\n chooseTransforms() {\n const { exponent } = this.options;\n if (exponent === 1)\n return [identity, identity];\n const transform = exponent === 0.5 ? transformSqrt : transformPow(exponent);\n const untransform = transformPowInvert(exponent);\n return [transform, untransform];\n }\n clone() {\n return new Pow(this.options);\n }\n}\n//# sourceMappingURL=pow.js.map","/*!\n * @antv/g-math\n * @description Geometry util\n * @version 3.0.1\n * @date 5/9/2025, 8:18:51 AM\n * @author AntVis\n * @docs https://g.antv.antgroup.com/\n */\nimport _slicedToArray from '@babel/runtime/helpers/slicedToArray';\nimport _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';\nimport { isNumberEqual } from '@antv/util';\nimport { vec2 } from 'gl-matrix';\n\nfunction distance(x1, y1, x2, y2) {\n var dx = x1 - x2;\n var dy = y1 - y2;\n return Math.sqrt(dx * dx + dy * dy);\n}\nfunction getBBoxByArray(xArr, yArr) {\n var minX = Math.min.apply(Math, _toConsumableArray(xArr));\n var minY = Math.min.apply(Math, _toConsumableArray(yArr));\n var maxX = Math.max.apply(Math, _toConsumableArray(xArr));\n var maxY = Math.max.apply(Math, _toConsumableArray(yArr));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction piMod(angle) {\n return (angle + Math.PI * 2) % (Math.PI * 2);\n}\n\nfunction copysign(v1, v2) {\n var absv = Math.abs(v1);\n return v2 > 0 ? absv : absv * -1;\n}\nfunction nearestPoint$4(x, y, rx, ry, x0, y0) {\n var a = rx;\n var b = ry;\n // 假如椭圆半径为0则返回圆心\n if (a === 0 || b === 0) {\n return {\n x: x,\n y: y\n };\n }\n // 转换成 0, 0 为中心的椭圆计算\n var relativeX = x0 - x;\n var relativeY = y0 - y;\n var px = Math.abs(relativeX);\n var py = Math.abs(relativeY);\n var squareA = a * a;\n var squareB = b * b;\n // const angle0 = Math.atan2(relativeY, relativeX);\n var t = Math.PI / 4;\n var nearestX = 0; // 椭圆上的任一点\n var nearestY = 0;\n // 迭代 4 次\n for (var i = 0; i < 4; i++) {\n nearestX = a * Math.cos(t);\n nearestY = b * Math.sin(t);\n var ex = (squareA - squareB) * Math.pow(Math.cos(t), 3) / a;\n var ey = (squareB - squareA) * Math.pow(Math.sin(t), 3) / b;\n var rx1 = nearestX - ex;\n var ry1 = nearestY - ey;\n var qx = px - ex;\n var qy = py - ey;\n var r = Math.hypot(ry1, rx1);\n var q = Math.hypot(qy, qx);\n var delta_c = r * Math.asin((rx1 * qy - ry1 * qx) / (r * q));\n var delta_t = delta_c / Math.sqrt(squareA + squareB - nearestX * nearestX - nearestY * nearestY);\n t += delta_t;\n t = Math.min(Math.PI / 2, Math.max(0, t));\n }\n return {\n x: x + copysign(nearestX, relativeX),\n y: y + copysign(nearestY, relativeY)\n };\n}\n\n// 偏导数 x\nfunction derivativeXAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle) {\n return -1 * rx * Math.cos(xRotation) * Math.sin(angle) - ry * Math.sin(xRotation) * Math.cos(angle);\n}\n\n// 偏导数 y\nfunction derivativeYAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle) {\n return -1 * rx * Math.sin(xRotation) * Math.sin(angle) + ry * Math.cos(xRotation) * Math.cos(angle);\n}\n\n// x 的极值\nfunction xExtrema(rx, ry, xRotation) {\n return Math.atan(-ry / rx * Math.tan(xRotation));\n}\n\n// y 的极值\nfunction yExtrema(rx, ry, xRotation) {\n return Math.atan(ry / (rx * Math.tan(xRotation)));\n}\n\n// 根据角度求 x 坐标\nfunction xAt(cx, cy, rx, ry, xRotation, angle) {\n return rx * Math.cos(xRotation) * Math.cos(angle) - ry * Math.sin(xRotation) * Math.sin(angle) + cx;\n}\n\n// 根据角度求 y 坐标\nfunction yAt(cx, cy, rx, ry, xRotation, angle) {\n return rx * Math.sin(xRotation) * Math.cos(angle) + ry * Math.cos(xRotation) * Math.sin(angle) + cy;\n}\n\n// 获取点在椭圆上的角度\nfunction getAngle(rx, ry, x0, y0) {\n var angle = Math.atan2(y0 * rx, x0 * ry);\n // 转换到 0 - 2PI 内\n return (angle + Math.PI * 2) % (Math.PI * 2);\n}\n\n// 根据角度获取,x,y\nfunction getPoint(rx, ry, angle) {\n return {\n x: rx * Math.cos(angle),\n y: ry * Math.sin(angle)\n };\n}\n\n// 旋转\nfunction rotate(x, y, angle) {\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n return [x * cos - y * sin, x * sin + y * cos];\n}\nfunction box$5(cx, cy, rx, ry, xRotation, startAngle, endAngle) {\n var xDim = xExtrema(rx, ry, xRotation);\n var minX = Infinity;\n var maxX = -Infinity;\n var xs = [startAngle, endAngle];\n for (var i = -Math.PI * 2; i <= Math.PI * 2; i += Math.PI) {\n var xAngle = xDim + i;\n if (startAngle < endAngle) {\n if (startAngle < xAngle && xAngle < endAngle) {\n xs.push(xAngle);\n }\n } else if (endAngle < xAngle && xAngle < startAngle) {\n xs.push(xAngle);\n }\n }\n for (var _i = 0; _i < xs.length; _i++) {\n var x = xAt(cx, cy, rx, ry, xRotation, xs[_i]);\n if (x < minX) {\n minX = x;\n }\n if (x > maxX) {\n maxX = x;\n }\n }\n var yDim = yExtrema(rx, ry, xRotation);\n var minY = Infinity;\n var maxY = -Infinity;\n var ys = [startAngle, endAngle];\n for (var _i2 = -Math.PI * 2; _i2 <= Math.PI * 2; _i2 += Math.PI) {\n var yAngle = yDim + _i2;\n if (startAngle < endAngle) {\n if (startAngle < yAngle && yAngle < endAngle) {\n ys.push(yAngle);\n }\n } else if (endAngle < yAngle && yAngle < startAngle) {\n ys.push(yAngle);\n }\n }\n for (var _i3 = 0; _i3 < ys.length; _i3++) {\n var y = yAt(cx, cy, rx, ry, xRotation, ys[_i3]);\n if (y < minY) {\n minY = y;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction nearestPoint$3(cx, cy, rx, ry, xRotation, startAngle, endAngle, x0, y0) {\n // 将最近距离问题转换成到椭圆中心 0,0 没有旋转的椭圆问题\n var relativeVector = rotate(x0 - cx, y0 - cy, -xRotation);\n var _relativeVector = _slicedToArray(relativeVector, 2),\n x1 = _relativeVector[0],\n y1 = _relativeVector[1];\n // 计算点到椭圆的最近的点\n var relativePoint = nearestPoint$4(0, 0, rx, ry, x1, y1);\n // 获取点在椭圆上的角度\n var angle = getAngle(rx, ry, relativePoint.x, relativePoint.y);\n // 点没有在圆弧上\n if (angle < startAngle) {\n // 小于起始圆弧\n relativePoint = getPoint(rx, ry, startAngle);\n } else if (angle > endAngle) {\n // 大于结束圆弧\n relativePoint = getPoint(rx, ry, endAngle);\n }\n // 旋转到 xRotation 的角度\n var vector = rotate(relativePoint.x, relativePoint.y, xRotation);\n return {\n x: vector[0] + cx,\n y: vector[1] + cy\n };\n}\nfunction tangentAngle$4(cx, cy, rx, ry, xRotation, startAngle, endAngle, t) {\n var angle = (endAngle - startAngle) * t + startAngle;\n var dx = derivativeXAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle);\n var dy = derivativeYAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle);\n return piMod(Math.atan2(dy, dx));\n}\n\nvar EPSILON = 0.0001;\n/**\n * 使用牛顿切割法求最近的点\n * @param {number[]} xArr 点的 x 数组\n * @param {number[]} yArr 点的 y 数组\n * @param {number} x 指定的点 x\n * @param {number} y 指定的点 y\n * @param {Function} tCallback 差值函数\n */\nfunction nearestPoint$2(xArr, yArr, x, y, tCallback, length) {\n var t = -1;\n var d = Infinity;\n var v0 = [x, y];\n var segNum = 20;\n if (length && length > 200) {\n segNum = length / 10;\n }\n var increaseRate = 1 / segNum;\n var interval = increaseRate / 10;\n for (var i = 0; i <= segNum; i++) {\n var _t = i * increaseRate;\n var v1 = [tCallback.apply(void 0, _toConsumableArray(xArr.concat([_t]))), tCallback.apply(void 0, _toConsumableArray(yArr.concat([_t])))];\n var d1 = distance(v0[0], v0[1], v1[0], v1[1]);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n // 提前终止\n if (t === 0) {\n return {\n x: xArr[0],\n y: yArr[0]\n };\n }\n if (t === 1) {\n var count = xArr.length;\n return {\n x: xArr[count - 1],\n y: yArr[count - 1]\n };\n }\n d = Infinity;\n for (var _i = 0; _i < 32; _i++) {\n if (interval < EPSILON) {\n break;\n }\n var prev = t - interval;\n var next = t + interval;\n var _v = [tCallback.apply(void 0, _toConsumableArray(xArr.concat([prev]))), tCallback.apply(void 0, _toConsumableArray(yArr.concat([prev])))];\n var _d = distance(v0[0], v0[1], _v[0], _v[1]);\n if (prev >= 0 && _d < d) {\n t = prev;\n d = _d;\n } else {\n var v2 = [tCallback.apply(void 0, _toConsumableArray(xArr.concat([next]))), tCallback.apply(void 0, _toConsumableArray(yArr.concat([next])))];\n var d2 = distance(v0[0], v0[1], v2[0], v2[1]);\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n } else {\n interval *= 0.5;\n }\n }\n }\n return {\n x: tCallback.apply(void 0, _toConsumableArray(xArr.concat([t]))),\n y: tCallback.apply(void 0, _toConsumableArray(yArr.concat([t])))\n };\n}\n\n// 近似求解 https://community.khronos.org/t/3d-cubic-bezier-segment-length/62363/2\nfunction snapLength(xArr, yArr) {\n var totalLength = 0;\n var count = xArr.length;\n for (var i = 0; i < count; i++) {\n var x = xArr[i];\n var y = yArr[i];\n var nextX = xArr[(i + 1) % count];\n var nextY = yArr[(i + 1) % count];\n totalLength += distance(x, y, nextX, nextY);\n }\n return totalLength / 2;\n}\n\nfunction box$4(x1, y1, x2, y2) {\n return getBBoxByArray([x1, x2], [y1, y2]);\n}\nfunction length$4(x1, y1, x2, y2) {\n return distance(x1, y1, x2, y2);\n}\nfunction pointAt$3(x1, y1, x2, y2, t) {\n return {\n x: (1 - t) * x1 + t * x2,\n y: (1 - t) * y1 + t * y2\n };\n}\nfunction pointDistance$4(x1, y1, x2, y2, x, y) {\n // 投影距离 x1, y1 的向量,假设 p, p1, p2 三个点,投影点为 a\n // p1a = p1p.p1p2/|p1p2| * (p1p 的单位向量)\n var cross = (x2 - x1) * (x - x1) + (y2 - y1) * (y - y1);\n if (cross < 0) {\n return distance(x1, y1, x, y);\n }\n var lengthSquare = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);\n if (cross > lengthSquare) {\n return distance(x2, y2, x, y);\n }\n return pointToLine(x1, y1, x2, y2, x, y);\n}\nfunction pointToLine(x1, y1, x2, y2, x, y) {\n var d = [x2 - x1, y2 - y1];\n // 如果端点相等,则判定点到点的距离\n if (vec2.exactEquals(d, [0, 0])) {\n return Math.sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));\n }\n var u = [-d[1], d[0]];\n vec2.normalize(u, u);\n var a = [x - x1, y - y1];\n return Math.abs(vec2.dot(a, u));\n}\nfunction tangentAngle$3(x1, y1, x2, y2) {\n return Math.atan2(y2 - y1, x2 - x1);\n}\n\nfunction cubicAt(p0, p1, p2, p3, t) {\n var onet = 1 - t; // t * t * t 的性能大概是 Math.pow(t, 3) 的三倍\n return onet * onet * onet * p0 + 3 * p1 * t * onet * onet + 3 * p2 * t * t * onet + p3 * t * t * t;\n}\nfunction derivativeAt(p0, p1, p2, p3, t) {\n var onet = 1 - t;\n return 3 * (onet * onet * (p1 - p0) + 2 * onet * t * (p2 - p1) + t * t * (p3 - p2));\n}\nfunction extrema$1(p0, p1, p2, p3) {\n var a = -3 * p0 + 9 * p1 - 9 * p2 + 3 * p3;\n var b = 6 * p0 - 12 * p1 + 6 * p2;\n var c = 3 * p1 - 3 * p0;\n var extremas = [];\n var t1;\n var t2;\n var discSqrt;\n if (isNumberEqual(a, 0)) {\n if (!isNumberEqual(b, 0)) {\n t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n extremas.push(t1);\n }\n }\n } else {\n var disc = b * b - 4 * a * c;\n if (isNumberEqual(disc, 0)) {\n extremas.push(-b / (2 * a));\n } else if (disc > 0) {\n discSqrt = Math.sqrt(disc);\n t1 = (-b + discSqrt) / (2 * a);\n t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n extremas.push(t1);\n }\n if (t2 >= 0 && t2 <= 1) {\n extremas.push(t2);\n }\n }\n }\n return extremas;\n}\n\n// 分割贝塞尔曲线\nfunction divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, t) {\n // 划分点\n var xt = cubicAt(x1, x2, x3, x4, t);\n var yt = cubicAt(y1, y2, y3, y4, t);\n // 计算两点之间的差值点\n var c1 = pointAt$3(x1, y1, x2, y2, t);\n var c2 = pointAt$3(x2, y2, x3, y3, t);\n var c3 = pointAt$3(x3, y3, x4, y4, t);\n var c12 = pointAt$3(c1.x, c1.y, c2.x, c2.y, t);\n var c23 = pointAt$3(c2.x, c2.y, c3.x, c3.y, t);\n return [[x1, y1, c1.x, c1.y, c12.x, c12.y, xt, yt], [xt, yt, c23.x, c23.y, c3.x, c3.y, x4, y4]];\n}\n\n// 使用迭代法取贝塞尔曲线的长度,二阶和三阶分开写,更清晰和便于调试\nfunction cubicLength(x1, y1, x2, y2, x3, y3, x4, y4, iterationCount) {\n if (iterationCount === 0) {\n return snapLength([x1, x2, x3, x4], [y1, y2, y3, y4]);\n }\n var cubics = divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, 0.5);\n var left = [].concat(_toConsumableArray(cubics[0]), [iterationCount - 1]);\n var right = [].concat(_toConsumableArray(cubics[1]), [iterationCount - 1]);\n return cubicLength.apply(void 0, _toConsumableArray(left)) + cubicLength.apply(void 0, _toConsumableArray(right));\n}\nfunction box$3(x1, y1, x2, y2, x3, y3, x4, y4) {\n var xArr = [x1, x4];\n var yArr = [y1, y4];\n var xExtrema = extrema$1(x1, x2, x3, x4);\n var yExtrema = extrema$1(y1, y2, y3, y4);\n for (var i = 0; i < xExtrema.length; i++) {\n xArr.push(cubicAt(x1, x2, x3, x4, xExtrema[i]));\n }\n for (var _i = 0; _i < yExtrema.length; _i++) {\n yArr.push(cubicAt(y1, y2, y3, y4, yExtrema[_i]));\n }\n return getBBoxByArray(xArr, yArr);\n}\nfunction length$3(x1, y1, x2, y2, x3, y3, x4, y4) {\n // 迭代三次,划分成 8 段求长度\n return cubicLength(x1, y1, x2, y2, x3, y3, x4, y4, 3);\n}\nfunction nearestPoint$1(x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length) {\n return nearestPoint$2([x1, x2, x3, x4], [y1, y2, y3, y4], x0, y0, cubicAt, length);\n}\nfunction pointDistance$3(x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length) {\n var point = nearestPoint$1(x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length);\n return distance(point.x, point.y, x0, y0);\n}\nfunction pointAt$2(x1, y1, x2, y2, x3, y3, x4, y4, t) {\n return {\n x: cubicAt(x1, x2, x3, x4, t),\n y: cubicAt(y1, y2, y3, y4, t)\n };\n}\nfunction tangentAngle$2(x1, y1, x2, y2, x3, y3, x4, y4, t) {\n var dx = derivativeAt(x1, x2, x3, x4, t);\n var dy = derivativeAt(y1, y2, y3, y4, t);\n return piMod(Math.atan2(dy, dx));\n}\n\nfunction analyzePoints(points) {\n // 计算每段的长度和总的长度\n var totalLength = 0;\n var segments = [];\n for (var i = 0; i < points.length - 1; i++) {\n var from = points[i];\n var to = points[i + 1];\n var length = distance(from[0], from[1], to[0], to[1]);\n var seg = {\n from: from,\n to: to,\n length: length\n };\n segments.push(seg);\n totalLength += length;\n }\n return {\n segments: segments,\n totalLength: totalLength\n };\n}\nfunction lengthOfSegment(points) {\n if (points.length < 2) {\n return 0;\n }\n var totalLength = 0;\n for (var i = 0; i < points.length - 1; i++) {\n var from = points[i];\n var to = points[i + 1];\n totalLength += distance(from[0], from[1], to[0], to[1]);\n }\n return totalLength;\n}\n\n/**\n * 按照比例在数据片段中获取点\n * @param {array} points 点的集合\n * @param {number} t 百分比 0-1\n * @return {object} 点的坐标\n */\nfunction pointAtSegments(points, t) {\n // 边界判断\n if (t > 1 || t < 0 || points.length < 2) {\n return null;\n }\n var _analyzePoints = analyzePoints(points),\n segments = _analyzePoints.segments,\n totalLength = _analyzePoints.totalLength;\n // 多个点有可能重合\n if (totalLength === 0) {\n return {\n x: points[0][0],\n y: points[0][1]\n };\n }\n // 计算比例\n var startRatio = 0;\n var point = null;\n for (var i = 0; i < segments.length; i++) {\n var seg = segments[i];\n var from = seg.from,\n to = seg.to;\n var currentRatio = seg.length / totalLength;\n if (t >= startRatio && t <= startRatio + currentRatio) {\n var localRatio = (t - startRatio) / currentRatio;\n point = pointAt$3(from[0], from[1], to[0], to[1], localRatio);\n break;\n }\n startRatio += currentRatio;\n }\n return point;\n}\n\n/**\n * 按照比例在数据片段中获取切线的角度\n * @param {array} points 点的集合\n * @param {number} t 百分比 0-1\n */\nfunction angleAtSegments(points, t) {\n // 边界判断\n if (t > 1 || t < 0 || points.length < 2) {\n return 0;\n }\n var _analyzePoints2 = analyzePoints(points),\n segments = _analyzePoints2.segments,\n totalLength = _analyzePoints2.totalLength;\n // 计算比例\n var startRatio = 0;\n var angle = 0;\n for (var i = 0; i < segments.length; i++) {\n var seg = segments[i];\n var from = seg.from,\n to = seg.to;\n var currentRatio = seg.length / totalLength;\n if (t >= startRatio && t <= startRatio + currentRatio) {\n angle = Math.atan2(to[1] - from[1], to[0] - from[0]);\n break;\n }\n startRatio += currentRatio;\n }\n return angle;\n}\nfunction distanceAtSegment(points, x, y) {\n var minDistance = Infinity;\n for (var i = 0; i < points.length - 1; i++) {\n var point = points[i];\n var nextPoint = points[i + 1];\n var _distance = pointDistance$4(point[0], point[1], nextPoint[0], nextPoint[1], x, y);\n if (_distance < minDistance) {\n minDistance = _distance;\n }\n }\n return minDistance;\n}\n\nfunction box$2(points) {\n var xArr = [];\n var yArr = [];\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n xArr.push(point[0]);\n yArr.push(point[1]);\n }\n return getBBoxByArray(xArr, yArr);\n}\nfunction length$2(points) {\n return lengthOfSegment(points);\n}\nfunction pointAt$1(points, t) {\n return pointAtSegments(points, t);\n}\nfunction pointDistance$2(points, x, y) {\n return distanceAtSegment(points, x, y);\n}\nfunction tangentAngle$1(points, t) {\n return angleAtSegments(points, t);\n}\n\nfunction getAllPoints(points) {\n var tmp = points.slice(0);\n if (points.length) {\n tmp.push(points[0]);\n }\n return tmp;\n}\nfunction box$1(points) {\n return box$2(points);\n}\nfunction length$1(points) {\n return lengthOfSegment(getAllPoints(points));\n}\nfunction pointAt(points, t) {\n return pointAtSegments(getAllPoints(points), t);\n}\nfunction pointDistance$1(points, x, y) {\n return distanceAtSegment(getAllPoints(points), x, y);\n}\nfunction tangentAngle(points, t) {\n return angleAtSegments(getAllPoints(points), t);\n}\n\n// 差值公式\nfunction quadraticAt(p0, p1, p2, t) {\n var onet = 1 - t;\n return onet * onet * p0 + 2 * t * onet * p1 + t * t * p2;\n}\n\n// 求极值\nfunction extrema(p0, p1, p2) {\n var a = p0 + p2 - 2 * p1;\n if (isNumberEqual(a, 0)) {\n return [0.5];\n }\n var rst = (p0 - p1) / a;\n if (rst <= 1 && rst >= 0) {\n return [rst];\n }\n return [];\n}\n\n// 分割贝塞尔曲线\nfunction divideQuadratic(x1, y1, x2, y2, x3, y3, t) {\n // 划分点\n var xt = quadraticAt(x1, x2, x3, t);\n var yt = quadraticAt(y1, y2, y3, t);\n\n // 分割的第一条曲线的控制点\n var controlPoint1 = pointAt$3(x1, y1, x2, y2, t);\n // 分割的第二条曲线的控制点\n var controlPoint2 = pointAt$3(x2, y2, x3, y3, t);\n return [[x1, y1, controlPoint1.x, controlPoint1.y, xt, yt], [xt, yt, controlPoint2.x, controlPoint2.y, x3, y3]];\n}\n\n// 使用迭代法取贝塞尔曲线的长度\nfunction quadraticLength(x1, y1, x2, y2, x3, y3, iterationCount) {\n if (iterationCount === 0) {\n return (distance(x1, y1, x2, y2) + distance(x2, y2, x3, y3) + distance(x1, y1, x3, y3)) / 2;\n }\n var quadratics = divideQuadratic(x1, y1, x2, y2, x3, y3, 0.5);\n var left = quadratics[0];\n var right = quadratics[1];\n left.push(iterationCount - 1);\n right.push(iterationCount - 1);\n return quadraticLength.apply(void 0, _toConsumableArray(left)) + quadraticLength.apply(void 0, _toConsumableArray(right));\n}\nfunction box(x1, y1, x2, y2, x3, y3) {\n var xExtrema = extrema(x1, x2, x3)[0];\n var yExtrema = extrema(y1, y2, y3)[0];\n // 控制点不加入 box 的计算\n var xArr = [x1, x3];\n var yArr = [y1, y3];\n if (xExtrema !== undefined) {\n xArr.push(quadraticAt(x1, x2, x3, xExtrema));\n }\n if (yExtrema !== undefined) {\n yArr.push(quadraticAt(y1, y2, y3, yExtrema));\n }\n return getBBoxByArray(xArr, yArr);\n}\nfunction length(x1, y1, x2, y2, x3, y3) {\n return quadraticLength(x1, y1, x2, y2, x3, y3, 3);\n}\nfunction nearestPoint(x1, y1, x2, y2, x3, y3, x0, y0) {\n return nearestPoint$2([x1, x2, x3], [y1, y2, y3], x0, y0, quadraticAt);\n}\nfunction pointDistance(x1, y1, x2, y2, x3, y3, x0, y0) {\n var point = nearestPoint(x1, y1, x2, y2, x3, y3, x0, y0);\n return distance(point.x, point.y, x0, y0);\n}\n\nexport { box$5 as arcBox, nearestPoint$3 as arcNearestPoint, tangentAngle$4 as arcTangentAngle, box$3 as cubicBox, length$3 as cubicLength, nearestPoint$1 as cubicNearestPoint, pointAt$2 as cubicPointAt, pointDistance$3 as cubicPointDistance, tangentAngle$2 as cubicTangentAngle, distance, box$4 as lineBox, length$4 as lineLength, pointAt$3 as linePointAt, pointDistance$4 as linePointDistance, pointToLine as linePointToLine, tangentAngle$3 as lineTangentAngle, box$1 as polygonBox, length$1 as polygonLength, pointAt as polygonPointAt, pointDistance$1 as polygonPointDistance, tangentAngle as polygonTangentAngle, box$2 as polylineBox, length$2 as polylineLength, pointAt$1 as polylinePointAt, pointDistance$2 as polylinePointDistance, tangentAngle$1 as polylineTangentAngle, box as quadBox, length as quadLength, nearestPoint as quadNearestPoint, pointDistance as quadPointDistance };\n//# sourceMappingURL=index.esm.js.map\n","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { __spreadArray } from \"tslib\";\nimport { midPoint } from '../util/mid-point';\nexport var lineToCubic = function (x1, y1, x2, y2) {\n var t = 0.5;\n var mid = midPoint([x1, y1], [x2, y2], t);\n return __spreadArray(__spreadArray([], mid, true), [x2, y2, x2, y2], false);\n};\n//# sourceMappingURL=line-2-cubic.js.map","import { __assign } from \"tslib\";\nimport { paramsParser } from '../parser/params-parser';\nimport { fixArc } from '../process/fix-arc';\nimport { normalizePath } from '../process/normalize-path';\nimport { isCurveArray } from '../util/is-curve-array';\nimport { segmentToCubic } from '../process/segment-2-cubic';\n// import { fixPath } from '../process/fix-path';\nexport function path2Curve(pathInput, needZCommandIndexes) {\n if (needZCommandIndexes === void 0) { needZCommandIndexes = false; }\n if (isCurveArray(pathInput)) {\n var cloned = [].concat(pathInput);\n if (needZCommandIndexes) {\n return [cloned, []];\n }\n else {\n return cloned;\n }\n }\n // fixPath will remove 'Z' command\n // const path = fixPath(normalizePath(pathInput));\n var path = normalizePath(pathInput);\n var params = __assign({}, paramsParser);\n var allPathCommands = [];\n var pathCommand = '';\n var ii = path.length;\n var segment;\n var seglen;\n var zCommandIndexes = [];\n for (var i = 0; i < ii; i += 1) {\n if (path[i])\n pathCommand = path[i][0];\n allPathCommands[i] = pathCommand;\n var curveSegment = segmentToCubic(path[i], params);\n path[i] = curveSegment;\n fixArc(path, allPathCommands, i);\n ii = path.length; // solves curveArrays ending in Z\n // keep Z command account for lineJoin\n // @see https://github.com/antvis/util/issues/68\n if (pathCommand === 'Z') {\n zCommandIndexes.push(i);\n }\n segment = path[i];\n seglen = segment.length;\n params.x1 = +segment[seglen - 2];\n params.y1 = +segment[seglen - 1];\n params.x2 = +segment[seglen - 4] || params.x1;\n params.y2 = +segment[seglen - 3] || params.y1;\n }\n // validate\n if (needZCommandIndexes) {\n return [path, zCommandIndexes];\n }\n else {\n return path;\n }\n}\n//# sourceMappingURL=path-2-curve.js.map","import { isNormalizedArray } from './is-normalized-array';\n/**\n * Iterates an array to check if it's a `PathArray`\n * with all C (cubic bezier) segments.\n *\n * @param {string | PathArray} path the `Array` to be checked\n * @returns {boolean} iteration result\n */\nexport function isCurveArray(path) {\n return isNormalizedArray(path) && path.every(function (_a) {\n var pc = _a[0];\n return 'MC'.includes(pc);\n });\n}\n//# sourceMappingURL=is-curve-array.js.map","import { arcToCubic } from './arc-2-cubic';\nimport { quadToCubic } from './quad-2-cubic';\nimport { lineToCubic } from './line-2-cubic';\nexport function segmentToCubic(segment, params) {\n var pathCommand = segment[0];\n var values = segment.slice(1).map(Number);\n var x = values[0], y = values[1];\n var args;\n var px1 = params.x1, py1 = params.y1, px = params.x, py = params.y;\n if (!'TQ'.includes(pathCommand)) {\n params.qx = null;\n params.qy = null;\n }\n switch (pathCommand) {\n case 'M':\n params.x = x;\n params.y = y;\n return segment;\n case 'A':\n args = [px1, py1].concat(values);\n // @ts-ignore\n return ['C'].concat(arcToCubic(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]));\n case 'Q':\n params.qx = x;\n params.qy = y;\n args = [px1, py1].concat(values);\n // @ts-ignore\n return ['C'].concat(quadToCubic(args[0], args[1], args[2], args[3], args[4], args[5]));\n case 'L':\n // @ts-ignore\n return ['C'].concat(lineToCubic(px1, py1, x, y));\n case 'Z':\n // prevent NaN from divide 0\n if (px1 === px && py1 === py) {\n return ['C', px1, py1, px, py, px, py];\n }\n // @ts-ignore\n return ['C'].concat(lineToCubic(px1, py1, px, py));\n default:\n }\n return segment;\n}\n//# sourceMappingURL=segment-2-cubic.js.map","export function quadToCubic(x1, y1, qx, qy, x2, y2) {\n var r13 = 1 / 3;\n var r23 = 2 / 3;\n return [\n r13 * x1 + r23 * qx, // cpx1\n r13 * y1 + r23 * qy, // cpy1\n r13 * x2 + r23 * qx, // cpx2\n r13 * y2 + r23 * qy, // cpy2\n x2,\n y2, // x,y\n ];\n}\n//# sourceMappingURL=quad-2-cubic.js.map","export function fixArc(pathArray, allPathCommands, i) {\n if (pathArray[i].length > 7) {\n pathArray[i].shift();\n var pi = pathArray[i];\n // const ni = i + 1;\n var ni = i;\n while (pi.length) {\n // if created multiple C:s, their original seg is saved\n allPathCommands[i] = 'A';\n // @ts-ignore\n pathArray.splice((ni += 1), 0, ['C'].concat(pi.splice(0, 6)));\n }\n pathArray.splice(i, 1);\n }\n}\n//# sourceMappingURL=fix-arc.js.map","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { isArray, mergeWith } from './index';\nvar arrayCoverage = function (objValue, srcValue) {\n if (isArray(srcValue)) {\n return srcValue;\n }\n};\nexport var mergeWithArrayCoverage = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return mergeWith.apply(void 0, __spreadArray(__spreadArray([], args, false), [arrayCoverage], false));\n};\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","\"use strict\";\n\nvar utils = module.exports = {};\n\n/**\n * Loops through the collection and calls the callback for each element. if the callback returns truthy, the loop is broken and returns the same value.\n * @public\n * @param {*} collection The collection to loop through. Needs to have a length property set and have indices set from 0 to length - 1.\n * @param {function} callback The callback to be called for each element. The element will be given as a parameter to the callback. If this callback returns truthy, the loop is broken and the same value is returned.\n * @returns {*} The value that a callback has returned (if truthy). Otherwise nothing.\n */\nutils.forEach = function(collection, callback) {\n for(var i = 0; i < collection.length; i++) {\n var result = callback(collection[i]);\n if(result) {\n return result;\n }\n }\n};\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"columns\", \"layoutType\", \"type\", \"action\", \"shouldUpdate\", \"formRef\"];\nimport { LabelIconTip, omitUndefined, runFunction, stringify, useDeepCompareMemo, useLatest, useReactiveRef, useRefFunction } from '@ant-design/pro-utils';\nimport { Form } from 'antd';\nimport React, { useCallback, useImperativeHandle, useRef, useState } from 'react';\nimport { DrawerForm } from \"../../layouts/DrawerForm\";\nimport { LightFilter } from \"../../layouts/LightFilter\";\nimport { ModalForm } from \"../../layouts/ModalForm\";\nimport { ProForm } from \"../../layouts/ProForm\";\nimport { QueryFilter } from \"../../layouts/QueryFilter\";\nimport { StepsForm as ProStepsForm } from \"../../layouts/StepsForm\";\nimport { Embed, StepsForm } from \"./layoutType\";\nimport { renderValueType } from \"./valueType\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport * from \"./typing\";\nvar FormLayoutType = {\n DrawerForm: DrawerForm,\n QueryFilter: QueryFilter,\n LightFilter: LightFilter,\n StepForm: ProStepsForm.StepForm,\n StepsForm: StepsForm,\n ModalForm: ModalForm,\n Embed: Embed,\n Form: ProForm\n};\n\n/**\n * 此组件可以根据 Json Schema 来生成相应的表单,大部分配置与 antd 的 table 列配置相同\n *\n * @see 此组件仍为 beta 版本,api 可能发生变化\n */\n\nfunction BetaSchemaForm(props) {\n var columns = props.columns,\n _props$layoutType = props.layoutType,\n layoutType = _props$layoutType === void 0 ? 'Form' : _props$layoutType,\n _props$type = props.type,\n type = _props$type === void 0 ? 'form' : _props$type,\n action = props.action,\n _props$shouldUpdate = props.shouldUpdate,\n shouldUpdate = _props$shouldUpdate === void 0 ? function (pre, next) {\n return stringify(pre) !== stringify(next);\n } : _props$shouldUpdate,\n propsFormRef = props.formRef,\n restProps = _objectWithoutProperties(props, _excluded);\n var FormRenderComponents = FormLayoutType[layoutType] || ProForm;\n var _Form$useForm = Form.useForm(),\n _Form$useForm2 = _slicedToArray(_Form$useForm, 1),\n form = _Form$useForm2[0];\n var formInstance = Form.useFormInstance();\n var _useState = useState([]),\n _useState2 = _slicedToArray(_useState, 2),\n forceUpdate = _useState2[1];\n var _useState3 = useState(function () {\n return [];\n }),\n _useState4 = _slicedToArray(_useState3, 2),\n formDomsDeps = _useState4[0],\n updatedFormDoms = _useState4[1];\n var formRef = useReactiveRef(props.form || formInstance || form);\n var oldValuesRef = useRef();\n var propsRef = useLatest(props);\n\n /**\n * 生成子项,方便被 table 接入\n *\n * @param items\n */\n var genItems = useRefFunction(function (items) {\n return items.filter(function (originItem) {\n return !(originItem.hideInForm && type === 'form');\n }).sort(function (a, b) {\n if (b.order || a.order) {\n return (b.order || 0) - (a.order || 0);\n }\n return (b.index || 0) - (a.index || 0);\n }).map(function (originItem, index) {\n var title = runFunction(originItem.title, originItem, 'form', /*#__PURE__*/_jsx(LabelIconTip, {\n label: originItem.title,\n tooltip: originItem.tooltip || originItem.tip\n }));\n var item = omitUndefined({\n title: title,\n label: title,\n name: originItem.name,\n valueType: runFunction(originItem.valueType, {}),\n key: originItem.key || originItem.dataIndex || index,\n columns: originItem.columns,\n valueEnum: originItem.valueEnum,\n dataIndex: originItem.dataIndex || originItem.key,\n initialValue: originItem.initialValue,\n width: originItem.width,\n index: originItem.index,\n readonly: originItem.readonly,\n colSize: originItem.colSize,\n colProps: originItem.colProps,\n rowProps: originItem.rowProps,\n className: originItem.className,\n tooltip: originItem.tooltip || originItem.tip,\n dependencies: originItem.dependencies,\n proFieldProps: originItem.proFieldProps,\n ignoreFormItem: originItem.ignoreFormItem,\n getFieldProps: originItem.fieldProps ? function () {\n return runFunction(originItem.fieldProps, formRef.current, originItem);\n } : undefined,\n getFormItemProps: originItem.formItemProps ? function () {\n return runFunction(originItem.formItemProps, formRef.current, originItem);\n } : undefined,\n render: originItem.render,\n renderFormItem: originItem.renderFormItem,\n renderText: originItem.renderText,\n request: originItem.request,\n params: originItem.params,\n transform: originItem.transform,\n convertValue: originItem.convertValue,\n debounceTime: originItem.debounceTime,\n defaultKeyWords: originItem.defaultKeyWords\n });\n return renderValueType(item, {\n action: action,\n type: type,\n originItem: originItem,\n formRef: formRef,\n genItems: genItems\n });\n }).filter(function (field) {\n return Boolean(field);\n });\n });\n var onValuesChange = useCallback(function (changedValues, values) {\n var propsOnValuesChange = propsRef.current.onValuesChange;\n if (shouldUpdate === true || typeof shouldUpdate === 'function' && shouldUpdate(values, oldValuesRef.current)) {\n updatedFormDoms([]);\n }\n oldValuesRef.current = values;\n propsOnValuesChange === null || propsOnValuesChange === void 0 || propsOnValuesChange(changedValues, values);\n }, [propsRef, shouldUpdate]);\n var formChildrenDoms = useDeepCompareMemo(function () {\n if (!formRef.current) return;\n // like StepsForm's columns but not only for StepsForm\n if (columns.length && Array.isArray(columns[0])) return;\n return genItems(columns);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [columns, restProps === null || restProps === void 0 ? void 0 : restProps.open, action, type, formDomsDeps]);\n\n /**\n * Append layoutType component specific props\n */\n var specificProps = useDeepCompareMemo(function () {\n if (layoutType === 'StepsForm') {\n return {\n forceUpdate: forceUpdate,\n columns: columns\n };\n }\n return {};\n }, [columns, layoutType]);\n useImperativeHandle(propsFormRef, function () {\n return formRef.current;\n }, [formRef.current]);\n return /*#__PURE__*/_jsx(FormRenderComponents, _objectSpread(_objectSpread(_objectSpread({}, specificProps), restProps), {}, {\n onInit: function onInit(_, initForm) {\n var _restProps$onInit;\n if (propsFormRef) {\n propsFormRef.current = initForm;\n }\n restProps === null || restProps === void 0 || (_restProps$onInit = restProps.onInit) === null || _restProps$onInit === void 0 || _restProps$onInit.call(restProps, _, initForm);\n formRef.current = initForm;\n },\n form: props.form || form,\n formRef: formRef,\n onValuesChange: onValuesChange,\n children: formChildrenDoms\n }));\n}\nexport default BetaSchemaForm;","import isArray from './is-array';\n/**\n * Flattens `array` a single level deep.\n *\n * @param {Array} arr The array to flatten.\n * @return {Array} Returns the new flattened array.\n * @example\n *\n * flatten([1, [2, [3, [4]], 5]]); // => [1, 2, [3, [4]], 5]\n */\nvar flatten = function (arr) {\n if (!isArray(arr)) {\n return [];\n }\n var rst = [];\n for (var i = 0; i < arr.length; i++) {\n rst = rst.concat(arr[i]);\n }\n return rst;\n};\nexport default flatten;\n//# sourceMappingURL=flatten.js.map","import { __classPrivateFieldGet, __read, __spreadArray, __values } from \"tslib\";\nimport { flatten } from '@antv/util';\nimport { Circle, Ellipse, Group, HTML, Image, Line, Path, Polygon, Polyline, Rect, Text } from '../shapes';\nimport { group } from './group';\nfunction error(msg) {\n throw new Error(msg);\n}\n/**\n * A simple implementation of d3-selection for @antv/g.\n * It has the core features of d3-selection and extended ability.\n * Every methods of selection returns new selection if elements\n * are mutated(e.g. append, remove), otherwise return the selection itself(e.g. attr, style).\n * @see https://github.com/d3/d3-selection\n * @see https://github.com/antvis/g\n * @todo Nested selections.\n * @todo More useful functor.\n */\nvar Selection = /** @class */ (function () {\n function Selection(elements, data, parent, document, selections, transitions, updateElements) {\n if (elements === void 0) { elements = null; }\n if (data === void 0) { data = null; }\n if (parent === void 0) { parent = null; }\n if (document === void 0) { document = null; }\n if (selections === void 0) { selections = [null, null, null, null, null]; }\n if (transitions === void 0) { transitions = []; }\n if (updateElements === void 0) { updateElements = []; }\n _Selection_instances.add(this);\n this._elements = Array.from(elements);\n this._data = data;\n this._parent = parent;\n this._document = document;\n this._enter = selections[0];\n this._update = selections[1];\n this._exit = selections[2];\n this._merge = selections[3];\n this._split = selections[4];\n this._transitions = transitions;\n this._facetElements = updateElements;\n }\n Selection.prototype.selectAll = function (selector) {\n var elements = typeof selector === 'string' ? this._parent.querySelectorAll(selector) : selector;\n return new _a(elements, null, this._elements[0], this._document);\n };\n Selection.prototype.selectFacetAll = function (selector) {\n var elements = typeof selector === 'string' ? this._parent.querySelectorAll(selector) : selector;\n return new _a(this._elements, null, this._parent, this._document, undefined, undefined, elements);\n };\n /**\n * @todo Replace with querySelector which has bug now.\n */\n Selection.prototype.select = function (selector) {\n var element = typeof selector === 'string' ? this._parent.querySelectorAll(selector)[0] || null : selector;\n return new _a([element], null, element, this._document);\n };\n Selection.prototype.append = function (node) {\n var _this = this;\n var callback = typeof node === 'function' ? node : function () { return _this.createElement(node); };\n var elements = [];\n if (this._data !== null) {\n // For empty selection, append new element to parent.\n // Each element is bind with datum.\n for (var i = 0; i < this._data.length; i++) {\n var d = this._data[i];\n var _b = __read(Array.isArray(d) ? d : [d, null], 2), datum = _b[0], from = _b[1];\n var newElement = callback(datum, i);\n newElement.__data__ = datum;\n if (from !== null)\n newElement.__fromElements__ = from;\n this._parent.appendChild(newElement);\n elements.push(newElement);\n }\n return new _a(elements, null, this._parent, this._document);\n }\n // For non-empty selection, append new element to\n // selected element and return new selection.\n for (var i = 0; i < this._elements.length; i++) {\n var element = this._elements[i];\n var datum = element.__data__;\n var newElement = callback(datum, i);\n element.appendChild(newElement);\n elements.push(newElement);\n }\n return new _a(elements, null, elements[0], this._document);\n };\n Selection.prototype.maybeAppend = function (id, node) {\n var element = __classPrivateFieldGet(this, _Selection_instances, \"m\", _Selection_maybeAppend).call(this, id[0] === '#' ? id : \"#\".concat(id), node);\n element.attr('id', id);\n return element;\n };\n Selection.prototype.maybeAppendByClassName = function (className, node) {\n var cls = className.toString();\n var element = __classPrivateFieldGet(this, _Selection_instances, \"m\", _Selection_maybeAppend).call(this, cls[0] === '.' ? cls : \".\".concat(cls), node);\n element.attr('className', cls);\n return element;\n };\n Selection.prototype.maybeAppendByName = function (name, node) {\n var element = __classPrivateFieldGet(this, _Selection_instances, \"m\", _Selection_maybeAppend).call(this, \"[name=\\\"\".concat(name, \"\\\"]\"), node);\n element.attr('name', name);\n return element;\n };\n /**\n * Bind data to elements, and produce three selection:\n * Enter: Selection with empty elements and data to be bind to elements.\n * Update: Selection with elements to be updated.\n * Exit: Selection with elements to be removed.\n */\n Selection.prototype.data = function (data, id, groupId) {\n var e_1, _b;\n if (id === void 0) { id = function (d) { return d; }; }\n if (groupId === void 0) { groupId = function () { return null; }; }\n // An Array of new data.\n var enter = [];\n // An Array of elements to be updated.\n var update = [];\n // A Set of elements to be removed.\n var exit = new Set(this._elements);\n // An Array of data to be merged into one element.\n var merge = [];\n // A Set of elements to be split into multiple datum.\n var split = new Set();\n // A Map from key to each element.\n var keyElement = new Map(this._elements.map(function (d, i) { return [id(d.__data__, i), d]; }));\n // A Map from key to exist element. The Update Selection\n // can get element from this map, this is for diff among\n // facets.\n var keyUpdateElement = new Map(this._facetElements.map(function (d, i) { return [id(d.__data__, i), d]; }));\n // A Map from groupKey to a group of elements.\n var groupKeyElements = group(this._elements, function (d) { return groupId(d.__data__); });\n // Diff data with selection(elements with data).\n // !!! Note\n // The switch is strictly ordered, not not change the order of them.\n for (var i = 0; i < data.length; i++) {\n var datum = data[i];\n var key = id(datum, i);\n var groupKey = groupId(datum, i);\n // Append element to update selection if incoming data has\n // exactly the same key with elements.\n if (keyElement.has(key)) {\n var element = keyElement.get(key);\n element.__data__ = datum;\n element.__facet__ = false;\n update.push(element);\n exit.delete(element);\n keyElement.delete(key);\n // Append element to update selection if incoming data has\n // exactly the same key with updateElements.\n }\n else if (keyUpdateElement.has(key)) {\n var element = keyUpdateElement.get(key);\n element.__data__ = datum;\n // Flag this element should update its parentNode.\n element.__facet__ = true;\n update.push(element);\n keyUpdateElement.delete(key);\n // Append datum to merge selection if existed elements has\n // its key as groupKey.\n }\n else if (groupKeyElements.has(key)) {\n var group_2 = groupKeyElements.get(key);\n merge.push([datum, group_2]);\n try {\n for (var group_1 = (e_1 = void 0, __values(group_2)), group_1_1 = group_1.next(); !group_1_1.done; group_1_1 = group_1.next()) {\n var element = group_1_1.value;\n exit.delete(element);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (group_1_1 && !group_1_1.done && (_b = group_1.return)) _b.call(group_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n groupKeyElements.delete(key);\n // Append element to split selection if incoming data has\n // groupKey as its key, and bind to datum for it.\n }\n else if (keyElement.has(groupKey)) {\n var element = keyElement.get(groupKey);\n if (element.__toData__)\n element.__toData__.push(datum);\n else\n element.__toData__ = [datum];\n split.add(element);\n exit.delete(element);\n }\n else {\n enter.push(datum);\n }\n }\n // Create new selection with enter, update and exit.\n var S = [\n new _a([], enter, this._parent, this._document),\n new _a(update, null, this._parent, this._document),\n new _a(exit, null, this._parent, this._document),\n new _a([], merge, this._parent, this._document),\n new _a(split, null, this._parent, this._document),\n ];\n return new _a(this._elements, null, this._parent, this._document, S);\n };\n Selection.prototype.merge = function (other) {\n var elements = __spreadArray(__spreadArray([], __read(this._elements), false), __read(other._elements), false);\n var transitions = __spreadArray(__spreadArray([], __read(this._transitions), false), __read(other._transitions), false);\n return new _a(elements, null, this._parent, this._document, undefined, transitions);\n };\n Selection.prototype.createElement = function (type) {\n if (this._document) {\n return this._document.createElement(type, {});\n }\n var Ctor = _a.registry[type];\n if (Ctor)\n return new Ctor();\n return error(\"Unknown node type: \".concat(type));\n };\n /**\n * Apply callback for each selection(enter, update, exit)\n * and merge them into one selection.\n */\n Selection.prototype.join = function (enter, update, exit, merge, split) {\n if (enter === void 0) { enter = function (d) { return d; }; }\n if (update === void 0) { update = function (d) { return d; }; }\n if (exit === void 0) { exit = function (d) { return d.remove(); }; }\n if (merge === void 0) { merge = function (d) { return d; }; }\n if (split === void 0) { split = function (d) { return d.remove(); }; }\n var newEnter = enter(this._enter);\n var newUpdate = update(this._update);\n var newExit = exit(this._exit);\n var newMerge = merge(this._merge);\n var newSplit = split(this._split);\n return newUpdate.merge(newEnter).merge(newExit).merge(newMerge).merge(newSplit);\n };\n Selection.prototype.remove = function () {\n var _loop_1 = function (i) {\n var element = this_1._elements[i];\n var transition = this_1._transitions[i];\n if (transition) {\n transition.then(function () { return element.remove(); });\n }\n else {\n element.remove();\n }\n };\n var this_1 = this;\n // Remove node immediately if there is no transition,\n // otherwise wait until transition finished.\n for (var i = 0; i < this._elements.length; i++) {\n _loop_1(i);\n }\n return new _a([], null, this._parent, this._document, undefined, this._transitions);\n };\n Selection.prototype.each = function (callback) {\n for (var i = 0; i < this._elements.length; i++) {\n var element = this._elements[i];\n var datum = element.__data__;\n callback.call(element, datum, i);\n }\n return this;\n };\n Selection.prototype.attr = function (key, value) {\n var callback = typeof value !== 'function' ? function () { return value; } : value;\n return this.each(function (d, i) {\n if (value !== undefined)\n this[key] = callback.call(this, d, i);\n });\n };\n Selection.prototype.style = function (key, value, callable) {\n if (callable === void 0) { callable = true; }\n var callback = typeof value !== 'function' || !callable ? function () { return value; } : value;\n return this.each(function (d, i) {\n if (value !== undefined)\n this.style[key] = callback.call(this, d, i);\n });\n };\n Selection.prototype.styles = function (style, callable) {\n if (style === void 0) { style = {}; }\n if (callable === void 0) { callable = true; }\n return this.each(function (d, i) {\n var _this = this;\n Object.entries(style).forEach(function (_b) {\n var _c = __read(_b, 2), key = _c[0], value = _c[1];\n var callback = typeof value !== 'function' || !callable ? function () { return value; } : value;\n if (value !== undefined)\n _this.attr(key, callback.call(_this, d, i));\n });\n });\n };\n Selection.prototype.update = function (option, callable) {\n if (callable === void 0) { callable = true; }\n var callback = typeof option !== 'function' || !callable ? function () { return option; } : option;\n return this.each(function (d, i) {\n if (option && this.update)\n this.update(callback.call(this, d, i));\n });\n };\n /** if current stage is maybeAppend, skip update stage */\n Selection.prototype.maybeUpdate = function (option, callable) {\n if (callable === void 0) { callable = true; }\n var callback = typeof option !== 'function' || !callable ? function () { return option; } : option;\n return this.each(function (d, i) {\n if (option && this.update)\n this.update(callback.call(this, d, i));\n });\n };\n Selection.prototype.transition = function (callback) {\n var T = this._transitions;\n var newTransitions = new Array(this._elements.length);\n this.each(function (d, i) {\n newTransitions[i] = callback.call(this, d, i);\n });\n this._transitions = flatten(newTransitions);\n return this;\n };\n Selection.prototype.on = function (event, handler) {\n this.each(function () {\n this.addEventListener(event, handler);\n });\n return this;\n };\n Selection.prototype.call = function (callback) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n callback.call.apply(callback, __spreadArray([this._parent, this], __read(args), false));\n return this;\n };\n Selection.prototype.node = function () {\n return this._elements[0];\n };\n Selection.prototype.nodes = function () {\n return this._elements;\n };\n Selection.prototype.transitions = function () {\n return this._transitions.filter(function (t) { return !!t; });\n };\n Selection.prototype.parent = function () {\n return this._parent;\n };\n var _Selection_instances, _a, _Selection_maybeAppend;\n _a = Selection, _Selection_instances = new WeakSet(), _Selection_maybeAppend = function _Selection_maybeAppend(selector, node) {\n var element = this._elements[0];\n var child = element.querySelector(selector);\n if (child)\n return new _a([child], null, this._parent, this._document);\n var newChild = typeof node === 'string' ? this.createElement(node) : node();\n element.appendChild(newChild);\n return new _a([newChild], null, this._parent, this._document);\n };\n Selection.registry = {\n g: Group,\n rect: Rect,\n circle: Circle,\n path: Path,\n text: Text,\n ellipse: Ellipse,\n image: Image,\n line: Line,\n polygon: Polygon,\n polyline: Polyline,\n html: HTML,\n };\n return Selection;\n}());\nexport { Selection };\nexport function select(node) {\n return new Selection([node], null, node, node.ownerDocument);\n}\nexport function maybeAppend(parent, selector, node) {\n if (!parent.querySelector(selector)) {\n return select(parent).append(node);\n }\n return select(parent).select(selector);\n}\n//# sourceMappingURL=selection.js.map","export function group(array, keyFunc) {\n var grouped = new Map();\n array.forEach(function (item) {\n var key = keyFunc(item);\n if (!grouped.has(key)) {\n grouped.set(key, []);\n }\n grouped.get(key).push(item);\n });\n return grouped;\n}\n//# sourceMappingURL=group.js.map","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","import { AttributeType, gl } from '@antv/l7-core';\n\n/**\n * Attribute Layout Location in Shader\n */\nexport const COMMON_ATTRIBUTE_LOCATION = {\n // common attribute in RegisterStyleAttributePlugin\n POSITION: 0,\n // low part for double precision POSITION attribute\n POSITION_64LOW: 1,\n COLOR: 2,\n PICKING_COLOR: 3,\n // common style attribute\n STROKE: 4,\n OPACITY: 5,\n OFFSETS: 6,\n ROTATION: 7,\n // last index\n MAX: 8\n};\nexport function getCommonStyleAttributeOptions(name) {\n switch (name) {\n // // roate\n case 'rotation':\n return {\n name: 'Rotation',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Rotation',\n shaderLocation: COMMON_ATTRIBUTE_LOCATION.ROTATION,\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n rotation = 0\n } = feature;\n return Array.isArray(rotation) ? [rotation[0]] : [rotation];\n }\n }\n };\n case 'stroke':\n return {\n name: 'stroke',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Stroke',\n shaderLocation: COMMON_ATTRIBUTE_LOCATION.STROKE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 4,\n update: feature => {\n const {\n stroke = [1, 1, 1, 1]\n } = feature;\n return stroke;\n }\n }\n };\n case 'opacity':\n return {\n name: 'opacity',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Opacity',\n shaderLocation: COMMON_ATTRIBUTE_LOCATION.OPACITY,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n opacity: op = 1\n } = feature;\n return [op];\n }\n }\n };\n case 'offsets':\n return {\n name: 'offsets',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Offsets',\n shaderLocation: COMMON_ATTRIBUTE_LOCATION.OFFSETS,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: feature => {\n const {\n offsets: epo\n } = feature;\n return epo;\n }\n }\n };\n default:\n return undefined;\n }\n}","import Line from './line';\nimport Area from './area';\nimport Column from './column';\nimport Progress from './progress';\nimport Ring from './ring';\nexport var Tiny = { Line: Line, Area: Area, Column: Column, Progress: Progress, Ring: Ring };\n","import { makeChartComp } from '../../../util/makeChartComp';\nvar TinyLineChart = makeChartComp('TinyLine');\nexport default TinyLineChart;\n","import { makeChartComp } from '../../../util/makeChartComp';\nvar TinyAreaChart = makeChartComp('TinyArea');\nexport default TinyAreaChart;\n","import { makeChartComp } from '../../../util/makeChartComp';\nvar TinyLineChart = makeChartComp('TinyColumn');\nexport default TinyLineChart;\n","import { makeChartComp } from '../../../util/makeChartComp';\nvar TinyProgressChart = makeChartComp('TinyProgress');\nexport default TinyProgressChart;\n","import { makeChartComp } from '../../../util/makeChartComp';\nvar TinyRingChart = makeChartComp('TinyRing');\nexport default TinyRingChart;\n","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar _excluded = [\"key\"];\nimport { omitUndefined } from '@ant-design/pro-utils';\nimport omit from \"rc-util/es/omit\";\nimport React from 'react';\nimport ProFormDependency from \"../../Dependency\";\nimport ProFormField from \"../../Field\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createElement as _createElement } from \"react\";\nexport var field = function field(item, _ref) {\n var action = _ref.action,\n formRef = _ref.formRef,\n type = _ref.type,\n originItem = _ref.originItem;\n /** 公用的 类型 props */\n var formFieldProps = _objectSpread(_objectSpread({}, omit(item, ['dataIndex', 'width', 'render', 'renderFormItem', 'renderText', 'title'])), {}, {\n name: item.name || item.key || item.dataIndex,\n width: item.width,\n render: item !== null && item !== void 0 && item.render ? function (dom, entity, renderIndex) {\n var _item$render, _item$key, _item$getFormItemProp, _item$getFieldProps;\n return item === null || item === void 0 || (_item$render = item.render) === null || _item$render === void 0 ? void 0 : _item$render.call(item, dom, entity, renderIndex, action === null || action === void 0 ? void 0 : action.current, _objectSpread(_objectSpread({\n type: type\n }, item), {}, {\n key: (_item$key = item.key) === null || _item$key === void 0 ? void 0 : _item$key.toString(),\n formItemProps: (_item$getFormItemProp = item.getFormItemProps) === null || _item$getFormItemProp === void 0 ? void 0 : _item$getFormItemProp.call(item),\n fieldProps: (_item$getFieldProps = item.getFieldProps) === null || _item$getFieldProps === void 0 ? void 0 : _item$getFieldProps.call(item)\n }));\n } : undefined\n });\n var defaultRender = function defaultRender() {\n var key = formFieldProps.key,\n rest = _objectWithoutProperties(formFieldProps, _excluded);\n return /*#__PURE__*/_jsx(ProFormField, _objectSpread(_objectSpread({}, rest), {}, {\n ignoreFormItem: true\n }), key);\n };\n var renderFormItem = item !== null && item !== void 0 && item.renderFormItem ? function (_, config) {\n var _item$renderFormItem, _item$key2, _item$getFormItemProp2, _item$getFieldProps2;\n var renderConfig = omitUndefined(_objectSpread(_objectSpread({}, config), {}, {\n onChange: undefined\n }));\n return item === null || item === void 0 || (_item$renderFormItem = item.renderFormItem) === null || _item$renderFormItem === void 0 ? void 0 : _item$renderFormItem.call(item, _objectSpread(_objectSpread({\n type: type\n }, item), {}, {\n key: (_item$key2 = item.key) === null || _item$key2 === void 0 ? void 0 : _item$key2.toString(),\n formItemProps: (_item$getFormItemProp2 = item.getFormItemProps) === null || _item$getFormItemProp2 === void 0 ? void 0 : _item$getFormItemProp2.call(item),\n fieldProps: (_item$getFieldProps2 = item.getFieldProps) === null || _item$getFieldProps2 === void 0 ? void 0 : _item$getFieldProps2.call(item),\n originProps: originItem\n }), _objectSpread(_objectSpread({}, renderConfig), {}, {\n defaultRender: defaultRender,\n type: type\n }), formRef.current);\n } : undefined;\n var getField = function getField() {\n if (item !== null && item !== void 0 && item.renderFormItem) {\n var dom = renderFormItem === null || renderFormItem === void 0 ? void 0 : renderFormItem(null, {});\n if (!dom || item.ignoreFormItem) return dom;\n }\n return /*#__PURE__*/_createElement(ProFormField, _objectSpread(_objectSpread({}, formFieldProps), {}, {\n key: [item.key, item.index || 0].join('-'),\n renderFormItem: renderFormItem\n }));\n };\n if (item.dependencies) {\n return /*#__PURE__*/_jsx(ProFormDependency, {\n name: item.dependencies || [],\n children: getField\n }, item.key);\n }\n return getField();\n};","import { dependency } from \"./dependency\";\nimport { divider } from \"./divider\";\nimport { field } from \"./field\";\nimport { formList } from \"./formList\";\nimport { formSet } from \"./formSet\";\nimport { group } from \"./group\";\nimport { ignore } from \"./ignore\";\n\n// 按照数组顺序执行\nvar tasks = [ignore, group, formList, formSet, divider, dependency];\nexport var renderValueType = function renderValueType(item, helpers) {\n for (var cur = 0; cur < tasks.length; cur++) {\n var task = tasks[cur];\n var dom = task(item, helpers);\n\n // False 不再遍历\n // if (dom === false) {\n // return false;\n if (dom === true) {\n // True 继续下一次\n continue;\n } else {\n // Other Is Dom\n return dom;\n }\n }\n\n // 最后执行\n return field(item, helpers);\n};","export var ignore = function ignore(item) {\n // 几种特殊的 value 不处理\n if (item.valueType && typeof item.valueType === 'string' && ['index', 'indexBorder', 'option'].includes(item === null || item === void 0 ? void 0 : item.valueType)) {\n return null;\n }\n return true;\n};","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { ProFormGroup } from \"../../../layouts\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var group = function group(item, _ref) {\n var genItems = _ref.genItems;\n if (item.valueType === 'group') {\n var _item$getFieldProps;\n if (!item.columns || !Array.isArray(item.columns)) return null;\n return /*#__PURE__*/_jsx(ProFormGroup, _objectSpread(_objectSpread({\n label: item.label,\n colProps: item.colProps,\n rowProps: item.rowProps\n }, (_item$getFieldProps = item.getFieldProps) === null || _item$getFieldProps === void 0 ? void 0 : _item$getFieldProps.call(item)), {}, {\n children: genItems(item.columns)\n }), item.key);\n }\n return true;\n};","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { ProFormList } from \"../../List\";\nimport { createElement as _createElement } from \"react\";\nexport var formList = function formList(item, _ref) {\n var genItems = _ref.genItems;\n if (item.valueType === 'formList' && item.dataIndex) {\n var _item$getFormItemProp, _item$getFieldProps;\n if (!item.columns || !Array.isArray(item.columns)) return null;\n return /*#__PURE__*/_createElement(ProFormList, _objectSpread(_objectSpread({}, (_item$getFormItemProp = item.getFormItemProps) === null || _item$getFormItemProp === void 0 ? void 0 : _item$getFormItemProp.call(item)), {}, {\n key: item.key,\n name: item.dataIndex,\n label: item.label,\n initialValue: item.initialValue,\n colProps: item.colProps,\n rowProps: item.rowProps\n }, (_item$getFieldProps = item.getFieldProps) === null || _item$getFieldProps === void 0 ? void 0 : _item$getFieldProps.call(item)), genItems(item.columns));\n }\n return true;\n};","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport ProFormFieldSet from \"../../FieldSet\";\nimport { createElement as _createElement } from \"react\";\nexport var formSet = function formSet(item, _ref) {\n var genItems = _ref.genItems;\n if (item.valueType === 'formSet' && item.dataIndex) {\n var _item$getFormItemProp, _item$getFieldProps;\n if (!item.columns || !Array.isArray(item.columns)) return null;\n return /*#__PURE__*/_createElement(ProFormFieldSet, _objectSpread(_objectSpread({}, (_item$getFormItemProp = item.getFormItemProps) === null || _item$getFormItemProp === void 0 ? void 0 : _item$getFormItemProp.call(item)), {}, {\n key: item.key,\n initialValue: item.initialValue,\n name: item.dataIndex,\n label: item.label,\n colProps: item.colProps,\n rowProps: item.rowProps\n }, (_item$getFieldProps = item.getFieldProps) === null || _item$getFieldProps === void 0 ? void 0 : _item$getFieldProps.call(item)), genItems(item.columns));\n }\n return true;\n};","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { Divider } from 'antd';\nimport { createElement as _createElement } from \"react\";\nexport var divider = function divider(item) {\n /** 分割线 */\n if (item.valueType === 'divider') {\n var _item$getFieldProps;\n return /*#__PURE__*/_createElement(Divider, _objectSpread(_objectSpread({}, (_item$getFieldProps = item.getFieldProps) === null || _item$getFieldProps === void 0 ? void 0 : _item$getFieldProps.call(item)), {}, {\n key: item.key\n }));\n }\n return true;\n};","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { noteOnce } from \"rc-util/es/warning\";\nimport ProFormDependency from \"../../Dependency\";\nimport { createElement as _createElement } from \"react\";\nexport var dependency = function dependency(item, helpers) {\n /** ProFormDependency */\n if (item.valueType === 'dependency') {\n var _item$getFieldProps, _item$name, _item$name2;\n var fieldProps = (_item$getFieldProps = item.getFieldProps) === null || _item$getFieldProps === void 0 ? void 0 : _item$getFieldProps.call(item);\n noteOnce(Array.isArray((_item$name = item.name) !== null && _item$name !== void 0 ? _item$name : fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.name), 'SchemaForm: fieldProps.name should be NamePath[] when valueType is \"dependency\"');\n noteOnce(typeof item.columns === 'function', 'SchemaForm: columns should be a function when valueType is \"dependency\"');\n if (!Array.isArray((_item$name2 = item.name) !== null && _item$name2 !== void 0 ? _item$name2 : fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.name)) return null;\n return /*#__PURE__*/_createElement(ProFormDependency, _objectSpread(_objectSpread({\n name: item.name\n }, fieldProps), {}, {\n key: item.key\n }), function (values) {\n if (!item.columns || typeof item.columns !== 'function') return null;\n return helpers.genItems(item.columns(values));\n });\n }\n return true;\n};","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","export default function assert(condition, message) {\n if (!condition) {\n throw new Error(message || 'viewport-mercator-project: assertion failed.');\n }\n}\n//# sourceMappingURL=assert.js.map","module.exports = function isArrayish(obj) {\n\tif (!obj || typeof obj === 'string') {\n\t\treturn false;\n\t}\n\n\treturn obj instanceof Array || Array.isArray(obj) ||\n\t\t(obj.length >= 0 && (obj.splice instanceof Function ||\n\t\t\t(Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String')));\n};\n","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport { rgb2arr } from '@antv/l7-utils';\nimport BaseModel from \"../../core/BaseModel\";\nimport { PolygonExtrudeTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/build_frag.glsl' */\nconst buildFrag = \"precision highp float;\\nlayout(std140) uniform commonUniforms {\\n vec4 u_baseColor: [ 1.0, 0, 0, 1.0 ];\\n vec4 u_brightColor: [ 1.0, 0, 0, 1.0 ];\\n vec4 u_windowColor: [ 1.0, 0, 0, 1.0 ];\\n vec4 u_circleSweepColor;\\n vec2 u_cityCenter;\\n float u_circleSweep;\\n float u_cityMinSize;\\n float u_circleSweepSpeed;\\n float u_opacity: 1.0;\\n float u_near: 0;\\n float u_far: 1;\\n float u_time;\\n};\\nin vec4 v_Color;\\nin vec2 v_texCoord;\\nin float v_worldDis;\\nout vec4 outputColor;\\n\\n#pragma include \\\"picking\\\"\\n#pragma include \\\"scene_uniforms\\\"\\n\\nvec3 getWindowColor(float n, float hot, vec3 brightColor, vec3 darkColor) {\\n float s = step(hot, n);\\n vec3 color = mix(brightColor,vec3(0.9,0.9,1.0),n);\\n\\n return mix(darkColor, color, s);\\n}\\nfloat random (vec2 st) {\\n return fract(sin(dot(st.xy, vec2(12.9898,78.233)))* 43758.5453123);\\n}\\n\\nfloat LinearizeDepth()\\n{\\n float z = gl_FragCoord.z * 2.0 - 1.0;\\n return (2.0 * u_near * u_far) / (u_far + u_near - z * (u_far - u_near));\\n}\\n\\nvec3 fog(vec3 color, vec3 fogColor, float depth){\\n float fogFactor=clamp(depth,0.0,1.0);\\n vec3 output_color=mix(fogColor,color,fogFactor);\\n return output_color;\\n}\\n\\nfloat sdRect(vec2 p, vec2 sz) {\\n vec2 d = abs(p) - sz;\\n float outside = length(max(d, 0.));\\n float inside = min(max(d.x, d.y), 0.);\\n return outside + inside;\\n}\\n\\nvoid main() {\\n outputColor = v_Color;\\n vec3 baseColor = u_baseColor.xyz;\\n vec3 brightColor = u_brightColor.xyz;\\n vec3 windowColor = u_windowColor.xyz;\\n float targetColId = 5.;\\n float depth = 1.0 - LinearizeDepth() / u_far * u_Zoom;\\n vec3 fogColor = vec3(23.0/255.0,31.0/255.0,51.0/255.0);\\n if(v_texCoord.x < 0.) { //\\u9876\\u90E8\\u989C\\u8272\\n vec3 foggedColor = fog(baseColor.xyz + vec3(0.12*0.9,0.2*0.9,0.3*0.9),fogColor,depth);\\n outputColor = vec4( foggedColor, v_Color.w);\\n }else { // \\u4FA7\\u9762\\u989C\\u8272\\n vec2 st = v_texCoord;\\n vec2 UvScale = v_texCoord;\\n float tStep = min(0.08,max(0.05* (18.0-u_Zoom),0.02));\\n float tStart = 0.25 * tStep;\\n float tEnd = 0.75 * tStep;\\n float u = mod(UvScale.x, tStep);\\n float v = mod(UvScale.y, tStep);\\n float ux = floor(UvScale.x/tStep);\\n float uy = floor(UvScale.y/tStep);\\n float n = random(vec2(ux,uy));\\n float lightP = u_time;\\n float head = 1.0- step(0.005,st.y);\\n /*step3*/\\n // \\u5C06\\u7A97\\u6237\\u989C\\u8272\\u548C\\u5899\\u9762\\u989C\\u8272\\u533A\\u522B\\u5F00\\u6765\\n float sU = step(tStart, u) - step(tEnd, u);\\n float sV = step(tStart, v) - step(tEnd, v);\\n vec2 windowSize = vec2(abs(tEnd-tStart),abs(tEnd-tStart));\\n float dist = sdRect(vec2(u,v), windowSize);\\n float s = sU * sV;\\n\\n float curColId = floor(UvScale.x / tStep);\\n float sCol = step(targetColId - 0.2, curColId) - step(targetColId + 0.2, curColId);\\n\\n float mLightP = mod(lightP, 2.);\\n float sRow = step(mLightP - 0.2, st.y) - step(mLightP, st.y);\\n if(ux == targetColId){\\n n =0.;\\n }\\n float timeP = min(0.75, abs ( sin(u_time/3.0) ) );\\n float hot = smoothstep(1.0,0.0,timeP);\\n vec3 color = mix(baseColor, getWindowColor(n,hot,brightColor,windowColor), s);\\n //vec3 color = mix(baseColor, getWindowColor(n,hot,brightColor,windowColor), 1.0);\\n float sFinal = s * sCol * sRow;\\n color += mix(baseColor, brightColor, sFinal*n);\\n if (st.y<0.01){\\n color = baseColor;\\n }\\n if(head ==1.0) { // \\u9876\\u90E8\\u4EAE\\u7EBF\\n color = brightColor;\\n }\\n color = color * v_Color.rgb;\\n\\n vec3 foggedColor = fog(color,fogColor,depth);\\n\\n outputColor = vec4(foggedColor,1.0);\\n }\\n\\n\\n if(u_circleSweep > 0.0 && v_worldDis < u_cityMinSize) {\\n float r = fract(((v_worldDis/u_cityMinSize) - u_time * u_circleSweepSpeed) * 2.0);\\n outputColor.rgb += r * r * u_circleSweepColor.rgb;\\n }\\n\\n outputColor.a *= u_opacity;\\n outputColor = filterColor(outputColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/build_vert.glsl' */\nconst buildVert = \"precision highp float;\\n\\n#define ambientRatio 0.5\\n#define diffuseRatio 0.3\\n#define specularRatio 0.2\\n\\nlayout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_Uv;\\n\\nout vec2 v_texCoord;\\nout vec4 v_Color;\\nout float v_worldDis;\\n\\nlayout(std140) uniform commonUniforms {\\n vec4 u_baseColor : [ 1.0, 0, 0, 1.0 ];\\n vec4 u_brightColor : [ 1.0, 0, 0, 1.0 ];\\n vec4 u_windowColor : [ 1.0, 0, 0, 1.0 ];\\n vec4 u_circleSweepColor;\\n vec2 u_cityCenter;\\n float u_circleSweep;\\n float u_cityMinSize;\\n float u_circleSweepSpeed;\\n float u_opacity: 1.0;\\n float u_near : 0;\\n float u_far : 1;\\n float u_time;\\n};\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"light\\\"\\n#pragma include \\\"picking\\\"\\n\\n\\nvoid main() {\\n vec4 pos = vec4(a_Position.xy, a_Position.z * a_Size, 1.0);\\n vec4 project_pos = project_position(pos);\\n\\n v_texCoord = a_Uv;\\n\\n if(u_circleSweep > 0.0) {\\n vec2 lnglatscale = vec2(0.0);\\n lnglatscale = (a_Position.xy - u_cityCenter) * vec2(0.0, 0.135);\\n v_worldDis = length(a_Position.xy + lnglatscale - u_cityCenter);\\n }\\n\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));\\n\\n float lightWeight = calc_lighting(pos);\\n // v_Color = a_Color;\\n v_Color = vec4(a_Color.rgb * lightWeight, a_Color.w);\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nexport default class CityBuildModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"cityCenter\", void 0);\n _defineProperty(this, \"cityMinSize\", void 0);\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n NORMAL: 10,\n UV: 11\n });\n }\n getCommonUniformsInfo() {\n const {\n opacity = 1,\n baseColor = 'rgb(16,16,16)',\n brightColor = 'rgb(255,176,38)',\n windowColor = 'rgb(30,60,89)',\n time = 0,\n sweep = {\n enable: false,\n sweepRadius: 1,\n sweepColor: 'rgb(255, 255, 255)',\n sweepSpeed: 0.4,\n sweepCenter: this.cityCenter\n }\n } = this.layer.getLayerConfig();\n const commonOptions = {\n u_baseColor: rgb2arr(baseColor),\n u_brightColor: rgb2arr(brightColor),\n u_windowColor: rgb2arr(windowColor),\n u_circleSweepColor: [...rgb2arr(sweep.sweepColor).slice(0, 3), 1.0],\n u_cityCenter: sweep.sweepCenter || this.cityCenter,\n u_circleSweep: sweep.enable ? 1.0 : 0.0,\n u_cityMinSize: this.cityMinSize * sweep.sweepRadius,\n u_circleSweepSpeed: sweep.sweepSpeed,\n u_opacity: opacity,\n u_near: 0,\n u_far: 1,\n u_time: this.layer.getLayerAnimateTime() || time\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n calCityGeo() {\n // @ts-ignore\n const [minLng, minLat, maxLng, maxLat] = this.layer.getSource().extent;\n const w = maxLng - minLng;\n const h = maxLat - minLat;\n this.cityCenter = [(maxLng + minLng) / 2, (maxLat + minLat) / 2];\n this.cityMinSize = Math.sqrt(Math.pow(w, 2) + Math.pow(h, 2)) / 4;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.calCityGeo();\n _this.initUniformsBuffer();\n _this.startModelAnimate();\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'cityBuilding',\n vertexShader: buildVert,\n fragmentShader: buildFrag,\n triangulation: PolygonExtrudeTriangulation,\n depth: {\n enable: true\n },\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n cull: {\n enable: true,\n face: gl.BACK\n }\n });\n return [model];\n })();\n }\n registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'normal',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Normal',\n shaderLocation: this.attributeLocation.NORMAL,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: (feature, featureIdx, vertex, attributeIdx, normal) => {\n return normal;\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n size = 10\n } = feature;\n return Array.isArray(size) ? [size[0]] : [size];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n shaderLocation: this.attributeLocation.UV,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: (feature, featureIdx, vertex) => {\n return [vertex[3], vertex[4]];\n }\n }\n });\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport BaseLayer from \"../core/BaseLayer\";\nimport CityBuildModel from \"./models/build\";\nexport default class CityBuildingLayer extends BaseLayer {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"type\", 'CityBuildingLayer');\n }\n buildModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.layerModel = new CityBuildModel(_this);\n yield _this.initLayerModels();\n })();\n }\n setLight(t) {\n this.updateLayerConfig({\n time: t\n });\n }\n getModelType() {\n return 'citybuilding';\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport BaseModel from \"../../core/BaseModel\";\nimport { HeatmapGridTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/grid/grid_frag.glsl' */\nconst grid_frag = \"in vec4 v_color;\\n\\n#pragma include \\\"scene_uniforms\\\"\\n#pragma include \\\"picking\\\"\\nout vec4 outputColor;\\nvoid main() {\\n outputColor = v_color;\\n outputColor = filterColor(outputColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/grid/grid_vert.glsl' */\nconst grid_vert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_POS) in vec3 a_Pos;\\n\\nlayout(std140) uniform commonUniforms {\\n vec2 u_radius;\\n float u_opacity;\\n float u_coverage;\\n float u_angle;\\n};\\n\\nout vec4 v_color;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"project\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n v_color = a_Color;\\n v_color.a *= u_opacity;\\n\\n mat2 rotationMatrix = mat2(cos(u_angle), sin(u_angle), -sin(u_angle), cos(u_angle));\\n vec2 offset = a_Position.xy * u_radius * rotationMatrix * u_coverage;\\n\\n vec2 lnglat = unProjectFlat(a_Pos.xy + offset);\\n vec4 project_pos = project_position(vec4(lnglat, 0, 1.0));\\n gl_Position = project_common_position_to_clipspace(project_pos);\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nexport default class GridModel extends BaseModel {\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n POS: 9\n });\n }\n getUninforms() {\n const commoninfo = this.getCommonUniformsInfo();\n const attributeInfo = this.getUniformsBufferInfo(this.getStyleAttribute());\n this.updateStyleUnifoms();\n return _objectSpread(_objectSpread({}, commoninfo.uniformsOption), attributeInfo.uniformsOption);\n }\n getCommonUniformsInfo() {\n const {\n opacity,\n coverage,\n angle\n } = this.layer.getLayerConfig();\n const commonOptions = {\n u_radius: [this.layer.getSource().data.xOffset, this.layer.getSource().data.yOffset],\n u_opacity: opacity || 1.0,\n u_coverage: coverage || 0.9,\n u_angle: angle || 0\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.initUniformsBuffer();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'heatmapGrid',\n vertexShader: grid_vert,\n fragmentShader: grid_frag,\n defines: _this2.getDefines(),\n triangulation: HeatmapGridTriangulation,\n primitive: gl.TRIANGLES,\n depth: {\n enable: false\n }\n });\n return [model];\n })();\n }\n registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'pos',\n // 顶点经纬度位置\n type: AttributeType.Attribute,\n descriptor: {\n shaderLocation: this.attributeLocation.POS,\n name: 'a_Pos',\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: feature => {\n const coordinates = feature.coordinates;\n return [coordinates[0], coordinates[1], 0];\n }\n }\n });\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport BaseModel from \"../../core/BaseModel\";\nimport { PointExtrudeTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/grid3d/grid_3d_frag.glsl' */\nconst grid_3d_frag = \"in vec4 v_color;\\n\\nlayout(std140) uniform commonUniforms {\\n vec2 u_radius;\\n float u_opacity;\\n float u_coverage;\\n float u_angle;\\n};\\n\\n#pragma include \\\"scene_uniforms\\\"\\n#pragma include \\\"picking\\\"\\n\\nout vec4 outputColor;\\nvoid main() {\\n outputColor = v_color;\\n outputColor = filterColor(outputColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/grid3d/grid_3d_vert.glsl' */\nconst grid_3d_vert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_POS) in vec3 a_Pos;\\nlayout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;\\n\\nlayout(std140) uniform commonUniforms {\\n vec2 u_radius;\\n float u_opacity;\\n float u_coverage;\\n float u_angle;\\n};\\n\\nout vec4 v_color;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"project\\\"\\n#pragma include \\\"light\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n mat2 rotationMatrix = mat2(cos(u_angle), sin(u_angle), -sin(u_angle), cos(u_angle));\\n vec2 offset = vec2(a_Position.xy * u_radius * rotationMatrix * u_coverage);\\n\\n vec2 lnglat = unProjectFlat(a_Pos.xy + offset); // \\u5B9E\\u9645\\u7684\\u7ECF\\u7EAC\\u5EA6\\n vec4 project_pos = project_position(vec4(lnglat, a_Position.z * a_Size, 1.0));\\n\\n float lightWeight = calc_lighting(project_pos);\\n v_color = vec4(a_Color.rgb * lightWeight, a_Color.w);\\n\\n gl_Position = project_common_position_to_clipspace(project_pos);\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nexport default class Grid3DModel extends BaseModel {\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n POS: 10,\n NORMAL: 11\n });\n }\n getUninforms() {\n const commoninfo = this.getCommonUniformsInfo();\n const attributeInfo = this.getUniformsBufferInfo(this.getStyleAttribute());\n this.updateStyleUnifoms();\n return _objectSpread(_objectSpread({}, commoninfo.uniformsOption), attributeInfo.uniformsOption);\n }\n getCommonUniformsInfo() {\n const {\n opacity,\n coverage,\n angle\n } = this.layer.getLayerConfig();\n const commonOptions = {\n u_radius: [this.layer.getSource().data.xOffset, this.layer.getSource().data.yOffset],\n u_opacity: opacity || 1.0,\n u_coverage: coverage || 0.9,\n u_angle: angle || 0\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.initUniformsBuffer();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'heatmapGrid3d',\n vertexShader: grid_3d_vert,\n fragmentShader: grid_3d_frag,\n defines: _this2.getDefines(),\n triangulation: PointExtrudeTriangulation,\n primitive: gl.TRIANGLES,\n depth: {\n enable: true\n }\n });\n return [model];\n })();\n }\n registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n shaderLocation: this.attributeLocation.SIZE,\n name: 'a_Size',\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n size\n } = feature;\n return Array.isArray(size) ? [size[0]] : [size];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'normal',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Normal',\n shaderLocation: this.attributeLocation.NORMAL,\n buffer: {\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: (feature, featureIdx, vertex, attributeIdx, normal) => {\n return normal;\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'pos',\n // 顶点经纬度位置\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Pos',\n shaderLocation: this.attributeLocation.POS,\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: feature => {\n const coordinates = feature.coordinates;\n return [coordinates[0], coordinates[1], 0];\n }\n }\n });\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, TextureUsage, gl } from '@antv/l7-core';\nimport { generateColorRamp, lodashUtil } from '@antv/l7-utils';\nimport { mat4 } from 'gl-matrix';\nimport BaseModel from \"../../core/BaseModel\";\nimport { HeatmapTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/heatmap/heatmap_3d_frag.glsl' */\nconst heatmap_3d_frag = \"layout(std140) uniform commonUniforms {\\n mat4 u_ViewProjectionMatrixUncentered;\\n mat4 u_InverseViewProjectionMatrix;\\n float u_opacity;\\n float u_common_uniforms_padding1;\\n float u_common_uniforms_padding2;\\n float u_common_uniforms_padding3;\\n};\\n\\nuniform sampler2D u_texture;\\nuniform sampler2D u_colorTexture;\\n\\nin vec2 v_texCoord;\\nin float v_intensity;\\nout vec4 outputColor;\\n\\nvoid main(){\\n \\n float intensity = texture(SAMPLER_2D(u_texture), v_texCoord).r;\\n vec4 color = texture(SAMPLER_2D(u_colorTexture),vec2(intensity, 0));\\n outputColor = color;\\n // gl_FragColor.a = color.a * smoothstep(0.1,0.2,intensity)* u_opacity;\\n outputColor.a = color.a * smoothstep(0.,0.1,intensity) * u_opacity;\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/heatmap/heatmap_3d_vert.glsl' */\nconst heatmap_3d_vert = \"layout(location = 0) in vec3 a_Position;\\nlayout(location = 10) in vec2 a_Uv;\\n\\nlayout(std140) uniform commonUniforms {\\n mat4 u_ViewProjectionMatrixUncentered;\\n mat4 u_InverseViewProjectionMatrix;\\n float u_opacity;\\n float u_common_uniforms_padding1;\\n float u_common_uniforms_padding2;\\n float u_common_uniforms_padding3;\\n};\\n\\nuniform sampler2D u_texture;\\nuniform sampler2D u_colorTexture;\\n\\nout vec2 v_texCoord;\\nout float v_intensity;\\n\\nvec2 toBezier(float t, vec2 P0, vec2 P1, vec2 P2, vec2 P3) {\\n float t2 = t * t;\\n float one_minus_t = 1.0 - t;\\n float one_minus_t2 = one_minus_t * one_minus_t;\\n return P0 * one_minus_t2 * one_minus_t +\\n P1 * 3.0 * t * one_minus_t2 +\\n P2 * 3.0 * t2 * one_minus_t +\\n P3 * t2 * t;\\n}\\nvec2 toBezier(float t, vec4 p) {\\n return toBezier(t, vec2(0.0, 0.0), vec2(p.x, p.y), vec2(p.z, p.w), vec2(1.0, 1.0));\\n}\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"project\\\"\\n\\nvoid main() {\\n v_texCoord = a_Uv;\\n\\n vec2 pos = a_Uv * vec2(2.0) - vec2(1.0); // \\u5C06\\u539F\\u672C 0 -> 1 \\u7684 uv \\u8F6C\\u6362\\u4E3A -1 -> 1 \\u7684\\u6807\\u51C6\\u5750\\u6807\\u7A7A\\u95F4\\uFF08NDC\\uFF09\\n\\n vec4 p1 = vec4(pos, 0.0, 1.0); // x/y \\u5E73\\u9762\\u4E0A\\u7684\\u70B9\\uFF08z == 0\\uFF09\\u53EF\\u4EE5\\u8BA4\\u4E3A\\u662F\\u4E09\\u7EF4\\u4E0A\\u7684\\u70B9\\u88AB\\u6295\\u5F71\\u5230\\u5E73\\u9762\\u540E\\u7684\\u70B9\\n vec4 p2 = vec4(pos, 1.0, 1.0); // \\u5E73\\u884C\\u4E8Ex/y\\u5E73\\u9762\\u3001z==1 \\u7684\\u5E73\\u9762\\u4E0A\\u7684\\u70B9\\n\\n vec4 inverseP1 = u_InverseViewProjectionMatrix * p1; // \\u6839\\u636E\\u89C6\\u56FE\\u6295\\u5F71\\u77E9\\u9635\\u7684\\u9006\\u77E9\\u9635\\u5E73\\u9762\\u4E0A\\u7684\\u53CD\\u7B97\\u51FA\\u4E09\\u7EF4\\u7A7A\\u95F4\\u4E2D\\u7684\\u70B9\\uFF08p1\\u5E73\\u9762\\u4E0A\\u7684\\u70B9\\uFF09\\n vec4 inverseP2 = u_InverseViewProjectionMatrix * p2;\\n\\n inverseP1 = inverseP1 / inverseP1.w; // \\u5F52\\u4E00\\u5316\\u64CD\\u4F5C\\uFF08\\u5F52\\u4E00\\u5316\\u540E\\u4E3A\\u4E16\\u754C\\u5750\\u6807\\uFF09\\n inverseP2 = inverseP2 / inverseP2.w;\\n\\n float zPos = (0.0 - inverseP1.z) / (inverseP2.z - inverseP1.z); // ??\\n vec4 position = inverseP1 + zPos * (inverseP2 - inverseP1);\\n\\n vec4 b = vec4(0.5, 0.0, 1.0, 0.5);\\n float fh;\\n\\n v_intensity = texture(SAMPLER_2D(u_texture), v_texCoord).r;\\n fh = toBezier(v_intensity, b).y;\\n gl_Position = u_ViewProjectionMatrixUncentered * vec4(position.xy, fh * project_pixel(50.0), 1.0);\\n\\n}\\n\"; // 绘制平面热力的 shader\n/* babel-plugin-inline-import '../shaders/heatmap/heatmap_frag.glsl' */\nconst heatmap_frag = \"uniform sampler2D u_texture; // \\u70ED\\u529B\\u5F3A\\u5EA6\\u56FE\\nuniform sampler2D u_colorTexture; // \\u6839\\u636E\\u5F3A\\u5EA6\\u5206\\u5E03\\u7684\\u8272\\u5E26\\n\\nlayout(std140) uniform commonUniforms {\\n float u_opacity;\\n float u_common_uniforms_padding1;\\n float u_common_uniforms_padding2;\\n float u_common_uniforms_padding3;\\n};\\nin vec2 v_texCoord;\\nout vec4 outputColor;\\n\\n#pragma include \\\"scene_uniforms\\\"\\n\\nfloat getBlurIndusty() {\\n float vW = 2.0/ u_ViewportSize.x;\\n float vH = 2.0/ u_ViewportSize.y;\\n vec2 vUv = v_texCoord;\\n float i11 = texture(SAMPLER_2D(u_texture), vec2( vUv.x - 1.0 * vW, vUv.y + 1.0 * vH) ).r;\\n float i12 = texture(SAMPLER_2D(u_texture), vec2( vUv.x - 0.0 * vW, vUv.y + 1.0 * vH) ).r;\\n float i13 = texture(SAMPLER_2D(u_texture), vec2( vUv.x + 1.0 * vW, vUv.y + 1.0 * vH) ).r;\\n\\n float i21 = texture(SAMPLER_2D(u_texture), vec2( vUv.x - 1.0 * vW, vUv.y) ).r;\\n float i22 = texture(SAMPLER_2D(u_texture), vec2( vUv.x , vUv.y) ).r;\\n float i23 = texture(SAMPLER_2D(u_texture), vec2( vUv.x + 1.0 * vW, vUv.y) ).r;\\n\\n float i31 = texture(SAMPLER_2D(u_texture), vec2( vUv.x - 1.0 * vW, vUv.y-1.0*vH) ).r;\\n float i32 = texture(SAMPLER_2D(u_texture), vec2( vUv.x - 0.0 * vW, vUv.y-1.0*vH) ).r;\\n float i33 = texture(SAMPLER_2D(u_texture), vec2( vUv.x + 1.0 * vW, vUv.y-1.0*vH) ).r;\\n\\n return(\\n i11 + \\n i12 + \\n i13 + \\n i21 + \\n i21 + \\n i22 + \\n i23 + \\n i31 + \\n i32 + \\n i33\\n )/9.0;\\n}\\n\\n\\nvoid main(){\\n // float intensity = texture(u_texture, v_texCoord).r;\\n float intensity = getBlurIndusty();\\n vec4 color = texture(SAMPLER_2D(u_colorTexture), vec2(intensity, 0.0));\\n outputColor = color;\\n outputColor.a = color.a * smoothstep(0.,0.1,intensity) * u_opacity;\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/heatmap/heatmap_vert.glsl' */\nconst heatmap_vert = \"layout(location = 0) in vec3 a_Position;\\nlayout(location = 10) in vec2 a_Uv;\\n\\nlayout(std140) uniform commonUniforms {\\n float u_opacity;\\n float u_common_uniforms_padding1;\\n float u_common_uniforms_padding2;\\n float u_common_uniforms_padding3;\\n};\\n\\n#pragma include \\\"scene_uniforms\\\"\\n\\nout vec2 v_texCoord;\\nvoid main() {\\n v_texCoord = a_Uv;\\n #ifdef VIEWPORT_ORIGIN_TL\\n v_texCoord.y = 1.0 - v_texCoord.y;\\n #endif\\n\\n gl_Position = vec4(a_Position.xy, 0, 1.0);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/heatmap/heatmap_framebuffer_frag.glsl' */\nconst heatmap_framebuffer_frag = \"layout(std140) uniform commonUniforms {\\n float u_radius;\\n float u_intensity;\\n float u_common_uniforms_padding1;\\n float u_common_uniforms_padding2;\\n};\\n\\nin vec2 v_extrude;\\nin float v_weight;\\nout vec4 outputColor;\\n#define GAUSS_COEF 0.3989422804014327\\n\\nvoid main(){\\n float d = -0.5 * 3.0 * 3.0 * dot(v_extrude, v_extrude);\\n float val = v_weight * u_intensity * GAUSS_COEF * exp(d);\\n outputColor = vec4(val, 1., 1., 1.);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/heatmap/heatmap_framebuffer_vert.glsl' */\nconst heatmap_framebuffer_vert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_DIR) in vec2 a_Dir;\\n\\nlayout(std140) uniform commonUniforms {\\n float u_radius;\\n float u_intensity;\\n float u_common_uniforms_padding1;\\n float u_common_uniforms_padding2;\\n};\\n\\nout vec2 v_extrude;\\nout float v_weight;\\n\\n#define GAUSS_COEF (0.3989422804014327)\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n vec3 picking_color_placeholder = u_PickingColor;\\n\\n v_weight = a_Size;\\n float ZERO = 1.0 / 255.0 / 16.0;\\n float extrude_x = a_Dir.x * 2.0 - 1.0;\\n float extrude_y = a_Dir.y * 2.0 - 1.0;\\n vec2 extrude_dir = normalize(vec2(extrude_x, extrude_y));\\n float S = sqrt(-2.0 * log(ZERO / a_Size / u_intensity / GAUSS_COEF)) / 2.5;\\n v_extrude = extrude_dir * S;\\n\\n vec2 offset = project_pixel(v_extrude * u_radius);\\n vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0));\\n\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));\\n\\n}\\n\";\nimport { heatMap3DTriangulation } from \"../triangulation\";\nconst {\n isEqual\n} = lodashUtil;\nexport default class HeatMapModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"texture\", void 0);\n _defineProperty(this, \"colorTexture\", void 0);\n _defineProperty(this, \"heatmapFramerBuffer\", void 0);\n _defineProperty(this, \"heatmapTexture\", void 0);\n _defineProperty(this, \"intensityModel\", void 0);\n _defineProperty(this, \"colorModel\", void 0);\n _defineProperty(this, \"shapeType\", void 0);\n _defineProperty(this, \"preRampColors\", void 0);\n _defineProperty(this, \"colorModelUniformBuffer\", []);\n _defineProperty(this, \"heat3DModelUniformBuffer\", []);\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n UV: 10,\n DIR: 11\n });\n }\n prerender() {\n const {\n clear,\n useFramebuffer\n } = this.rendererService;\n useFramebuffer(this.heatmapFramerBuffer, () => {\n clear({\n color: [0, 0, 0, 0],\n depth: 1,\n stencil: 0,\n framebuffer: this.heatmapFramerBuffer\n });\n this.drawIntensityMode(); // 密度图\n });\n }\n render(options) {\n const {\n rampColors\n } = this.layer.getLayerConfig();\n if (!isEqual(this.preRampColors, rampColors)) {\n this.updateColorTexture();\n }\n this.shapeType === 'heatmap' ? this.drawHeatMap(options) // 2D\n : this.draw3DHeatMap(options); // 3D\n }\n getUninforms() {\n throw new Error('Method not implemented.');\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n var _shapeAttr$scale;\n const {\n createFramebuffer,\n getViewportSize,\n createTexture2D\n } = _this.rendererService;\n const shapeAttr = _this.styleAttributeService.getLayerStyleAttribute('shape');\n const shapeType = (shapeAttr === null || shapeAttr === void 0 || (_shapeAttr$scale = shapeAttr.scale) === null || _shapeAttr$scale === void 0 ? void 0 : _shapeAttr$scale.field) || 'heatmap';\n _this.shapeType = shapeType;\n // 生成热力图密度图\n _this.intensityModel = yield _this.buildHeatMapIntensity();\n // 渲染到屏幕\n _this.colorModel = shapeType === 'heatmap' ? _this.buildHeatmap() // 2D\n : _this.build3dHeatMap(); // 3D\n\n const {\n width,\n height\n } = getViewportSize();\n\n // 初始化密度图纹理\n _this.heatmapTexture = createTexture2D({\n width: Math.floor(width / 4),\n height: Math.floor(height / 4),\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n min: gl.LINEAR,\n mag: gl.LINEAR,\n usage: TextureUsage.RENDER_TARGET\n });\n _this.heatmapFramerBuffer = createFramebuffer({\n color: _this.heatmapTexture,\n depth: true,\n width: Math.floor(width / 4),\n height: Math.floor(height / 4)\n });\n _this.updateColorTexture();\n return [_this.intensityModel, _this.colorModel];\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n return _this2.initModels();\n })();\n }\n registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'dir',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Dir',\n shaderLocation: this.attributeLocation.DIR,\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: (feature, featureIdx, vertex) => {\n return [vertex[3], vertex[4]];\n }\n }\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n size = 1\n } = feature;\n return [size];\n }\n }\n });\n }\n\n /**\n * 热力图密度图\n */\n buildHeatMapIntensity() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n _this3.uniformBuffers = [_this3.rendererService.createBuffer({\n // opacity\n data: new Float32Array(4).fill(0),\n // 长度需要大于等于 4\n isUBO: true\n })];\n _this3.layer.triangulation = HeatmapTriangulation;\n const model = yield _this3.layer.buildLayerModel({\n moduleName: 'heatmapIntensity',\n vertexShader: heatmap_framebuffer_vert,\n fragmentShader: heatmap_framebuffer_frag,\n triangulation: HeatmapTriangulation,\n defines: _this3.getDefines(),\n depth: {\n enable: false\n },\n cull: {\n enable: true,\n face: gl.FRONT\n }\n });\n return model;\n })();\n }\n buildHeatmap() {\n this.shaderModuleService.registerModule('heatmapColor', {\n vs: heatmap_vert,\n fs: heatmap_frag\n });\n this.colorModelUniformBuffer = [this.rendererService.createBuffer({\n // opacity\n data: new Float32Array(4).fill(0),\n // 长度需要大于等于 4\n isUBO: true\n })];\n const {\n vs,\n fs,\n uniforms\n } = this.shaderModuleService.getModule('heatmapColor');\n const {\n createAttribute,\n createElements,\n createBuffer,\n createModel\n } = this.rendererService;\n return createModel({\n vs,\n fs,\n uniformBuffers: [...this.colorModelUniformBuffer, ...this.rendererService.uniformBuffers],\n attributes: {\n a_Position: createAttribute({\n shaderLocation: this.attributeLocation.POSITION,\n buffer: createBuffer({\n data: [-1, 1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0],\n type: gl.FLOAT\n }),\n size: 3\n }),\n a_Uv: createAttribute({\n shaderLocation: this.attributeLocation.UV,\n buffer: createBuffer({\n data: [0, 1, 1, 1, 0, 0, 1, 0],\n type: gl.FLOAT\n }),\n size: 2\n })\n },\n uniforms: _objectSpread({}, uniforms),\n depth: {\n enable: false\n },\n elements: createElements({\n data: [0, 2, 1, 2, 3, 1],\n type: gl.UNSIGNED_INT,\n count: 6\n })\n });\n }\n build3dHeatMap() {\n const {\n getViewportSize\n } = this.rendererService;\n const {\n width,\n height\n } = getViewportSize();\n const triangulation = heatMap3DTriangulation(width / 4.0, height / 4.0);\n this.shaderModuleService.registerModule('heatmap3dColor', {\n vs: heatmap_3d_vert,\n fs: heatmap_3d_frag\n });\n this.heat3DModelUniformBuffer = [this.rendererService.createBuffer({\n // opacity\n data: new Float32Array(16 * 2 + 4).fill(0),\n // 长度需要大于等于 4\n isUBO: true\n })];\n const {\n vs,\n fs,\n uniforms\n } = this.shaderModuleService.getModule('heatmap3dColor');\n const {\n createAttribute,\n createElements,\n createBuffer,\n createModel\n } = this.rendererService;\n return createModel({\n vs,\n fs,\n attributes: {\n a_Position: createAttribute({\n shaderLocation: this.attributeLocation.POSITION,\n buffer: createBuffer({\n data: triangulation.vertices,\n type: gl.FLOAT\n }),\n size: 3\n }),\n a_Uv: createAttribute({\n shaderLocation: this.attributeLocation.UV,\n buffer: createBuffer({\n data: triangulation.uvs,\n type: gl.FLOAT\n }),\n size: 2\n })\n },\n primitive: gl.TRIANGLES,\n uniformBuffers: [...this.heat3DModelUniformBuffer, ...this.rendererService.uniformBuffers],\n uniforms: _objectSpread({}, uniforms),\n depth: {\n enable: true\n },\n blend: {\n enable: true,\n func: {\n srcRGB: gl.SRC_ALPHA,\n srcAlpha: 1,\n dstRGB: gl.ONE_MINUS_SRC_ALPHA,\n dstAlpha: 1\n }\n },\n elements: createElements({\n data: triangulation.indices,\n type: gl.UNSIGNED_INT,\n count: triangulation.indices.length\n })\n });\n }\n\n // 绘制密度图\n drawIntensityMode() {\n var _this$intensityModel;\n const {\n intensity = 10,\n radius = 5\n } = this.layer.getLayerConfig();\n const commonOptions = {\n u_radius: radius,\n u_intensity: intensity\n };\n this.uniformBuffers[0].subData({\n offset: 0,\n data: [radius, intensity]\n });\n this.layerService.beforeRenderData(this.layer);\n this.layer.hooks.beforeRender.call();\n\n // 绘制密度图\n (_this$intensityModel = this.intensityModel) === null || _this$intensityModel === void 0 || _this$intensityModel.draw({\n uniforms: commonOptions,\n blend: {\n enable: true,\n func: {\n srcRGB: gl.ONE,\n srcAlpha: 1,\n dstRGB: gl.ONE,\n dstAlpha: 1\n }\n },\n stencil: {\n enable: false,\n mask: 0xff,\n func: {\n cmp: 514,\n // gl.EQUAL,\n ref: 1,\n mask: 0xff\n }\n }\n });\n this.layer.hooks.afterRender.call();\n }\n drawHeatMap(options) {\n var _this$colorModel;\n const {\n opacity = 1.0\n } = this.layer.getLayerConfig();\n const commonOptions = {\n u_opacity: opacity,\n u_colorTexture: this.colorTexture,\n u_texture: this.heatmapFramerBuffer\n };\n const textures = [this.heatmapTexture, this.colorTexture];\n this.colorModelUniformBuffer[0].subData({\n offset: 0,\n data: [opacity]\n });\n (_this$colorModel = this.colorModel) === null || _this$colorModel === void 0 || _this$colorModel.draw({\n uniforms: commonOptions,\n textures,\n blend: this.getBlend(),\n stencil: this.getStencil(options)\n });\n }\n draw3DHeatMap(options) {\n var _this$colorModel2;\n const {\n opacity = 1.0\n } = this.layer.getLayerConfig();\n const invert = mat4.create();\n mat4.invert(invert, this.cameraService.getViewProjectionMatrixUncentered());\n const commonOptions = {\n u_opacity: opacity,\n u_colorTexture: this.colorTexture,\n u_texture: this.heatmapFramerBuffer,\n u_ViewProjectionMatrixUncentered: this.cameraService.getViewProjectionMatrixUncentered(),\n u_InverseViewProjectionMatrix: [...invert]\n };\n this.heat3DModelUniformBuffer[0].subData({\n offset: 0,\n data: [...commonOptions.u_ViewProjectionMatrixUncentered, ...commonOptions.u_InverseViewProjectionMatrix, opacity]\n });\n const textures = [this.heatmapTexture, this.colorTexture];\n (_this$colorModel2 = this.colorModel) === null || _this$colorModel2 === void 0 || _this$colorModel2.draw({\n uniforms: commonOptions,\n textures,\n blend: {\n enable: true,\n func: {\n srcRGB: gl.SRC_ALPHA,\n srcAlpha: 1,\n dstRGB: gl.ONE_MINUS_SRC_ALPHA,\n dstAlpha: 1\n }\n },\n stencil: this.getStencil(options)\n });\n }\n updateColorTexture() {\n const {\n createTexture2D\n } = this.rendererService;\n if (this.texture) {\n this.texture.destroy();\n }\n const {\n rampColors\n } = this.layer.getLayerConfig();\n const imageData = generateColorRamp(rampColors);\n this.colorTexture = createTexture2D({\n data: imageData.data,\n usage: TextureUsage.SAMPLED,\n width: imageData.width,\n height: imageData.height,\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n min: gl.NEAREST,\n mag: gl.NEAREST,\n flipY: false,\n unorm: true\n });\n this.preRampColors = rampColors;\n }\n}","export function heatMap3DTriangulation(width, height) {\n const indices = [];\n const vertices = [];\n const uvs = [];\n const gridX1 = width + 1;\n const gridY1 = height + 1;\n const widthHalf = width / 2;\n const heightHalf = height / 2;\n for (let iy = 0; iy < gridY1; iy++) {\n const y = iy - heightHalf;\n for (let ix = 0; ix < gridX1; ix++) {\n const x = ix - widthHalf;\n vertices.push(x / widthHalf, -y / heightHalf, 0);\n uvs.push(ix / width);\n uvs.push(1 - iy / height);\n }\n }\n for (let iy = 0; iy < height; iy++) {\n for (let ix = 0; ix < width; ix++) {\n const a = ix + gridX1 * iy;\n const b = ix + gridX1 * (iy + 1);\n const c = ix + 1 + gridX1 * (iy + 1);\n const d = ix + 1 + gridX1 * iy;\n indices.push(a, b, d);\n indices.push(b, c, d);\n }\n }\n return {\n vertices,\n indices,\n uvs\n };\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport BaseModel from \"../../core/BaseModel\";\nimport { HeatmapGridTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/hexagon/hexagon_frag.glsl' */\nconst hexagon_frag = \"in vec4 v_color;\\n\\n#pragma include \\\"picking\\\"\\nout vec4 outputColor;\\nvoid main() {\\n outputColor = v_color;\\n outputColor = filterColor(outputColor);\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/hexagon/hexagon_vert.glsl' */\nconst hexagon_vert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_POS) in vec3 a_Pos;\\n\\nlayout(std140) uniform commonUniforms {\\n vec2 u_radius;\\n float u_opacity;\\n float u_coverage;\\n float u_angle;\\n};\\n\\nout vec4 v_color;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"project\\\"\\n#pragma include \\\"picking\\\"\\n\\nvoid main() {\\n v_color = a_Color;\\n v_color.a *= u_opacity;\\n\\n mat2 rotationMatrix = mat2(cos(u_angle), sin(u_angle), -sin(u_angle), cos(u_angle));\\n vec2 offset = vec2(a_Position.xy * u_radius * rotationMatrix * u_coverage);\\n vec2 lnglat = unProjectFlat(a_Pos.xy + offset);\\n\\n vec4 project_pos = project_position(vec4(lnglat, 0, 1.0));\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy, 0.0, 1.0));\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nexport default class HexagonModel extends BaseModel {\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n POS: 9\n });\n }\n getUninforms() {\n const commoninfo = this.getCommonUniformsInfo();\n const attributeInfo = this.getUniformsBufferInfo(this.getStyleAttribute());\n this.updateStyleUnifoms();\n return _objectSpread(_objectSpread({}, commoninfo.uniformsOption), attributeInfo.uniformsOption);\n }\n getCommonUniformsInfo() {\n const {\n opacity,\n coverage,\n angle\n } = this.layer.getLayerConfig();\n const commonOptions = {\n u_radius: [this.layer.getSource().data.xOffset, this.layer.getSource().data.yOffset],\n u_opacity: opacity || 1.0,\n u_coverage: coverage || 0.9,\n u_angle: angle || 0\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.initUniformsBuffer();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'heatmapHexagon',\n vertexShader: hexagon_vert,\n fragmentShader: hexagon_frag,\n defines: _this2.getDefines(),\n triangulation: HeatmapGridTriangulation,\n depth: {\n enable: false\n },\n primitive: gl.TRIANGLES\n });\n return [model];\n })();\n }\n registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'pos',\n // 顶点经纬度位置\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Pos',\n shaderLocation: this.attributeLocation.POS,\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: feature => {\n const coordinates = feature.coordinates;\n return [coordinates[0], coordinates[1], 0];\n }\n }\n });\n }\n}","import GridModel from \"./grid\";\nimport Grid3DModel from \"./grid3d\";\nimport HeatMapModel from \"./heatmap\";\nimport HexagonModel from \"./hexagon\";\nconst HeatMapModels = {\n heatmap: HeatMapModel,\n heatmap3d: HeatMapModel,\n grid: GridModel,\n grid3d: Grid3DModel,\n hexagon: HexagonModel\n};\nexport default HeatMapModels;","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport BaseLayer from \"../core/BaseLayer\";\nimport { rampColor2legend } from \"../utils/rampcolor_legend\";\nimport HeatMapModels from \"./models\";\nexport default class HeatMapLayer extends BaseLayer {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"type\", 'HeatMapLayer');\n }\n buildModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const shape = _this.getModelType();\n _this.layerModel = new HeatMapModels[shape](_this);\n yield _this.initLayerModels();\n })();\n }\n prerender() {\n const shape = this.getModelType();\n if (shape === 'heatmap') {\n if (this.layerModel) {\n this.layerModel.prerender(); // 独立的渲染流程\n }\n }\n }\n renderModels(options = {}) {\n const shape = this.getModelType();\n if (shape === 'heatmap') {\n if (this.layerModel) {\n this.layerModel.render(options); // 独立的渲染流程\n }\n return this;\n }\n if (this.encodeDataLength <= 0 && !this.forceRender) {\n return this;\n }\n this.hooks.beforeRender.call();\n this.models.forEach(model => model.draw({\n uniforms: this.layerModel.getUninforms(),\n blend: this.layerModel.getBlend(),\n stencil: this.layerModel.getStencil(options)\n }));\n this.hooks.afterRender.call();\n return this;\n }\n updateModelData(data) {\n if (data.attributes && data.elements) {\n this.models[0].updateAttributesAndElements(data.attributes, data.elements);\n } else {\n console.warn('data error');\n }\n }\n getModelType() {\n var _shapeAttribute$scale;\n const shapeAttribute = this.styleAttributeService.getLayerStyleAttribute('shape');\n const {\n shape3d\n } = this.getLayerConfig();\n const source = this.getSource();\n const sourceType = source.data.type;\n const shape = (shapeAttribute === null || shapeAttribute === void 0 || (_shapeAttribute$scale = shapeAttribute.scale) === null || _shapeAttribute$scale === void 0 ? void 0 : _shapeAttribute$scale.field) || 'heatmap';\n if (shape === 'heatmap' || shape === 'heatmap3d') {\n return 'heatmap';\n }\n if (sourceType === 'hexagon') {\n return (shape3d === null || shape3d === void 0 ? void 0 : shape3d.indexOf(shape)) === -1 ? 'hexagon' : 'grid3d';\n }\n if (sourceType === 'grid') {\n return (shape3d === null || shape3d === void 0 ? void 0 : shape3d.indexOf(shape)) === -1 ? 'grid' : 'grid3d';\n }\n return 'heatmap';\n }\n getLegend(name) {\n if (this.getModelType() === 'heatmap') {\n if (name !== 'color') return {\n type: undefined,\n field: undefined,\n items: []\n };\n const rampColors = this.getLayerConfig().rampColors;\n return rampColor2legend(rampColors, name);\n } else {\n return super.getLegend(name);\n }\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport class TileLayerService {\n constructor({\n rendererService,\n layerService,\n parent\n }) {\n /**\n * tileResource 用于存储瓦片的全局资源\n */\n _defineProperty(this, \"tileResource\", new Map());\n _defineProperty(this, \"rendererService\", void 0);\n _defineProperty(this, \"layerService\", void 0);\n _defineProperty(this, \"parent\", void 0);\n _defineProperty(this, \"layerTiles\", []);\n this.rendererService = rendererService;\n this.layerService = layerService;\n this.parent = parent;\n }\n get tiles() {\n return this.layerTiles;\n }\n hasTile(tileKey) {\n return this.layerTiles.some(tile => tile.key === tileKey);\n }\n addTile(tile) {\n this.layerTiles.push(tile);\n }\n getTile(tileKey) {\n return this.layerTiles.find(tile => tile.key === tileKey);\n }\n getVisibleTileBylngLat(lngLat) {\n // 加载完成 & 可见 & 鼠标选中\n return this.layerTiles.find(tile => tile.isLoaded && tile.visible && tile.lnglatInBounds(lngLat));\n }\n removeTile(tileKey) {\n const index = this.layerTiles.findIndex(t => t.key === tileKey);\n const tile = this.layerTiles.splice(index, 1);\n if (tile[0]) {\n tile[0].destroy();\n }\n }\n updateTileVisible(sourceTile) {\n const tile = this.getTile(sourceTile.key);\n if (sourceTile.isVisible) {\n // 不可见 => 可见 兄弟节点加载完成\n if (sourceTile.parent) {\n const flag = this.isChildrenLoaded(sourceTile.parent);\n tile === null || tile === void 0 || tile.updateVisible(flag);\n } else {\n tile === null || tile === void 0 || tile.updateVisible(true);\n }\n } else {\n // 可见 => 不可见 兄弟节点加载完成\n if (sourceTile.parent) {\n const flag = this.isChildrenLoaded(sourceTile.parent);\n tile === null || tile === void 0 || tile.updateVisible(!flag);\n } else {\n tile === null || tile === void 0 || tile.updateVisible(false);\n }\n }\n }\n isParentLoaded(sourceTile) {\n const parentTile = sourceTile.parent;\n if (!parentTile) {\n return true;\n }\n const tile = this.getTile(parentTile === null || parentTile === void 0 ? void 0 : parentTile.key);\n if (tile !== null && tile !== void 0 && tile.isLoaded) {\n // 递归父级\n return true;\n }\n return false;\n }\n isChildrenLoaded(sourceTile) {\n const childrenTile = sourceTile === null || sourceTile === void 0 ? void 0 : sourceTile.children;\n if (childrenTile.length === 0) {\n return true;\n }\n return childrenTile.every(tile => {\n const tileLayer = this.getTile(tile === null || tile === void 0 ? void 0 : tile.key);\n if (!tileLayer) {\n return true;\n }\n return (tileLayer === null || tileLayer === void 0 ? void 0 : tileLayer.isLoaded) === true;\n });\n }\n render() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const layers = _this.getRenderLayers();\n const renders = layers.map( /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (layer) {\n yield _this.layerService.renderTileLayer(layer);\n });\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n yield Promise.all(renders);\n })();\n }\n getRenderLayers() {\n const tileList = this.layerTiles.filter(t => t.visible && t.isLoaded);\n const layers = [];\n tileList.map(tile => layers.push(...tile.getLayers()));\n return layers;\n }\n getLayers() {\n const tileList = this.layerTiles.filter(t => t.isLoaded);\n const layers = [];\n tileList.map(tile => layers.push(...tile.getLayers()));\n return layers;\n }\n getTiles() {\n return this.layerTiles;\n }\n destroy() {\n this.layerTiles.forEach(t => t.destroy());\n this.tileResource.clear();\n }\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as turf from '@turf/helpers';\nimport union from '@turf/union';\n\n/**\n * 专门处理 Tile 数据相关\n */\nexport class TileSourceService {\n getCombineFeature(features) {\n let p = null;\n const properties = features[0];\n features.map(feature => {\n const polygon = turf.polygon(feature.coordinates);\n // tslint:disable-next-line: prefer-conditional-expression\n if (p === null) {\n p = polygon;\n } else {\n p = union(p, polygon);\n }\n });\n if (properties) {\n p.properties = _objectSpread({}, properties);\n }\n return p;\n }\n}","import polygonClipping from \"polygon-clipping\";\nimport { getGeom } from \"@turf/invariant\";\nimport { multiPolygon, polygon } from \"@turf/helpers\";\n/**\n * Takes two {@link (Multi)Polygon(s)} and returns a combined polygon. If the input polygons are not contiguous, this function returns a {@link MultiPolygon} feature.\n *\n * @name union\n * @param {Feature} polygon1 input Polygon feature\n * @param {Feature} polygon2 Polygon feature to difference from polygon1\n * @param {Object} [options={}] Optional Parameters\n * @param {Object} [options.properties={}] Translate Properties to output Feature\n * @returns {Feature<(Polygon|MultiPolygon)>} a combined {@link Polygon} or {@link MultiPolygon} feature, or null if the inputs are empty\n * @example\n * var poly1 = turf.polygon([[\n * [-82.574787, 35.594087],\n * [-82.574787, 35.615581],\n * [-82.545261, 35.615581],\n * [-82.545261, 35.594087],\n * [-82.574787, 35.594087]\n * ]], {\"fill\": \"#0f0\"});\n * var poly2 = turf.polygon([[\n * [-82.560024, 35.585153],\n * [-82.560024, 35.602602],\n * [-82.52964, 35.602602],\n * [-82.52964, 35.585153],\n * [-82.560024, 35.585153]\n * ]], {\"fill\": \"#00f\"});\n *\n * var union = turf.union(poly1, poly2);\n *\n * //addToMap\n * var addToMap = [poly1, poly2, union];\n */\nfunction union(poly1, poly2, options) {\n if (options === void 0) { options = {}; }\n var geom1 = getGeom(poly1);\n var geom2 = getGeom(poly2);\n var unioned = polygonClipping.union(geom1.coordinates, geom2.coordinates);\n if (unioned.length === 0)\n return null;\n if (unioned.length === 1)\n return polygon(unioned[0], options.properties);\n else\n return multiPolygon(unioned, options.properties);\n}\nexport default union;\n","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { decodePickingColor, encodePickingColor } from '@antv/l7-utils';\nimport { TileSourceService } from \"./TileSourceService\";\nconst SELECT = 'select';\nconst ACTIVE = 'active';\nexport class TilePickService {\n constructor({\n layerService,\n tileLayerService,\n parent\n }) {\n _defineProperty(this, \"layerService\", void 0);\n _defineProperty(this, \"tileLayerService\", void 0);\n _defineProperty(this, \"tileSourceService\", void 0);\n _defineProperty(this, \"parent\", void 0);\n _defineProperty(this, \"tilePickID\", new Map());\n this.layerService = layerService;\n this.tileLayerService = tileLayerService;\n this.parent = parent;\n this.tileSourceService = new TileSourceService();\n }\n pickRender(target) {\n // 一个 TileLayer 有多个 Tile,但是会同时触发事件的只有一个 Tile\n const tile = this.tileLayerService.getVisibleTileBylngLat(target.lngLat);\n if (tile) {\n // TODO 多图层拾取\n const pickLayer = tile.getMainLayer();\n pickLayer === null || pickLayer === void 0 || pickLayer.layerPickService.pickRender(target);\n }\n }\n pick(layer, target) {\n var _this = this;\n return _asyncToGenerator(function* () {\n const container = _this.parent.getContainer();\n const pickingService = container.pickingService;\n if (layer.type === 'RasterLayer') {\n const tile = _this.tileLayerService.getVisibleTileBylngLat(target.lngLat);\n if (tile && tile.getMainLayer() !== undefined) {\n const pickLayer = tile.getMainLayer();\n return pickLayer.layerPickService.pickRasterLayer(pickLayer, target, _this.parent);\n }\n return false;\n }\n _this.pickRender(target);\n return pickingService.pickFromPickingFBO(layer, target);\n })();\n }\n selectFeature(pickedColors) {\n // @ts-ignore\n const [r, g, b] = pickedColors;\n const id = this.color2PickId(r, g, b);\n this.tilePickID.set(SELECT, id);\n this.updateHighLight(r, g, b, SELECT);\n }\n highlightPickedFeature(pickedColors) {\n // @ts-ignore\n const [r, g, b] = pickedColors;\n const id = this.color2PickId(r, g, b);\n this.tilePickID.set(ACTIVE, id);\n this.updateHighLight(r, g, b, ACTIVE);\n }\n updateHighLight(r, g, b, type) {\n this.tileLayerService.tiles.map(tile => {\n const layer = tile.getMainLayer();\n switch (type) {\n case SELECT:\n layer === null || layer === void 0 || layer.hooks.beforeSelect.call([r, g, b]);\n break;\n case ACTIVE:\n layer === null || layer === void 0 || layer.hooks.beforeHighlight.call([r, g, b]);\n break;\n }\n });\n }\n setPickState() {\n const selectColor = this.tilePickID.get(SELECT);\n const activeColor = this.tilePickID.get(ACTIVE);\n if (selectColor) {\n const [r, g, b] = this.pickId2Color(selectColor);\n this.updateHighLight(r, g, b, SELECT);\n return;\n }\n if (activeColor) {\n const [r, g, b] = this.pickId2Color(activeColor);\n this.updateHighLight(r, g, b, ACTIVE);\n return;\n }\n }\n color2PickId(r, g, b) {\n return decodePickingColor(new Uint8Array([r, g, b]));\n }\n pickId2Color(str) {\n return encodePickingColor(str);\n }\n\n /** 从瓦片中根据数据 */\n getFeatureById(pickedFeatureIdx) {\n // 提取当前可见瓦片\n const tiles = this.tileLayerService.getTiles().filter(tile => tile.visible);\n // 提取当前可见瓦片中匹配 ID 的 feature 列表\n const features = [];\n tiles.forEach(tile => {\n features.push(...tile.getFeatureById(pickedFeatureIdx));\n });\n\n // 将 feature 列表合并后返回\n // 统一返回成 polygon 的格式 点、线、面可以通用\n\n // const data = this.tileSourceService.getCombineFeature(features);\n\n return features;\n }\n\n // Tip: for interface define\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n pickRasterLayer() {\n return false;\n }\n}","// TileLayer 需要代理的子图层的方法\n// 一般都是在 BaseLayer 上的方法\nexport const ProxyFuncs = [\n/**\n * 1. 需要作用到所属子图层才会生效的方法\n * 2. 不需要主动重新创建 model 的方法\n */\n'shape', 'color', 'size', 'style', 'animate', 'filter', 'rotate', 'scale', 'setBlend', 'setSelect', 'setActive', 'disableMask', 'enableMask', 'addMask', 'removeMask'];","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { lodashUtil } from '@antv/l7-utils';\nimport { TileLayerService } from \"../service/TileLayerService\";\nimport { TilePickService } from \"../service/TilePickService\";\nimport { getTileFactory } from \"../tile\";\nimport { ProxyFuncs } from \"../utils/constants\";\nconst {\n debounce\n} = lodashUtil;\nexport default class BaseTileLayer {\n constructor(parent) {\n _defineProperty(this, \"parent\", void 0);\n _defineProperty(this, \"tileLayerService\", void 0);\n _defineProperty(this, \"mapService\", void 0);\n _defineProperty(this, \"layerService\", void 0);\n _defineProperty(this, \"rendererService\", void 0);\n _defineProperty(this, \"pickingService\", void 0);\n _defineProperty(this, \"tilePickService\", void 0);\n _defineProperty(this, \"tilesetManager\", void 0);\n // 瓦片数据管理器\n _defineProperty(this, \"initedTileset\", false);\n // 瓦片是否加载成功\n _defineProperty(this, \"lastViewStates\", void 0);\n _defineProperty(this, \"mapchange\", () => {\n var _this$tilesetManager;\n // 图层不可见时,不触发加载瓦片\n if (this.parent.isVisible() === false) {\n return;\n }\n const {\n latLonBounds,\n zoom\n } = this.getCurrentView();\n if (this.lastViewStates && this.lastViewStates.zoom === zoom && this.lastViewStates.latLonBounds.toString() === latLonBounds.toString()) {\n return;\n }\n this.lastViewStates = {\n zoom,\n latLonBounds\n };\n (_this$tilesetManager = this.tilesetManager) === null || _this$tilesetManager === void 0 || _this$tilesetManager.throttleUpdate(zoom, latLonBounds);\n });\n // 防抖操作\n _defineProperty(this, \"viewchange\", debounce(this.mapchange, 24));\n this.parent = parent;\n const container = this.parent.getContainer();\n this.rendererService = container.rendererService;\n this.layerService = container.layerService;\n this.mapService = container.mapService;\n this.pickingService = container.pickingService;\n\n // 初始化瓦片管理服务\n this.tileLayerService = new TileLayerService({\n rendererService: this.rendererService,\n layerService: this.layerService,\n parent\n });\n // 初始化拾取服务\n this.tilePickService = new TilePickService({\n tileLayerService: this.tileLayerService,\n layerService: this.layerService,\n parent\n });\n\n // 重置\n this.parent.setLayerPickService(this.tilePickService);\n this.proxy(parent);\n this.initTileSetManager();\n }\n initTileSetManager() {\n var _this$tilesetManager2;\n const source = this.parent.getSource();\n this.tilesetManager = source.tileset;\n if (!this.initedTileset) {\n this.bindTilesetEvent();\n this.initedTileset = true;\n }\n\n // 图层不可见时,不触发加载瓦片\n if (this.parent.isVisible() === false) {\n return;\n }\n const {\n latLonBounds,\n zoom\n } = this.getCurrentView();\n (_this$tilesetManager2 = this.tilesetManager) === null || _this$tilesetManager2 === void 0 || _this$tilesetManager2.update(zoom, latLonBounds);\n }\n getCurrentView() {\n const bounds = this.mapService.getBounds();\n const latLonBounds = [bounds[0][0], bounds[0][1], bounds[1][0], bounds[1][1]];\n const zoom = this.mapService.getZoom();\n return {\n latLonBounds,\n zoom\n };\n }\n bindTilesetEvent() {\n // 瓦片数据加载成功\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n this.tilesetManager.on('tile-loaded', tile => {\n // 将事件抛出,图层上可以监听使用\n });\n\n // 瓦片数据从缓存删除或被执行重新加载\n this.tilesetManager.on('tile-unload', tile => {\n // 将事件抛出,图层上可以监听使用\n this.tileUnLoad(tile);\n });\n\n // 瓦片数据加载失败\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n this.tilesetManager.on('tile-error', (error, tile) => {\n // 将事件抛出,图层上可以监听使用\n this.tileError(error);\n });\n\n // 瓦片显隐状态更新\n this.tilesetManager.on('tile-update', () => {\n this.tileUpdate();\n });\n\n // 地图视野发生改变\n this.mapService.on('zoomend', this.mapchange);\n this.mapService.on('moveend', this.viewchange);\n }\n render() {\n this.tileLayerService.render();\n }\n getLayers() {\n return this.tileLayerService.getLayers();\n }\n getTiles() {\n return this.tileLayerService.getTiles();\n }\n getTile(key) {\n return this.tileLayerService.getTile(key);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tileLoaded(tile) {\n //\n }\n tileError(error) {\n console.warn('error:', error);\n }\n destroy() {\n var _this$tilesetManager3;\n this.mapService.off('zoomend', this.mapchange);\n this.mapService.off('moveend', this.viewchange);\n (_this$tilesetManager3 = this.tilesetManager) === null || _this$tilesetManager3 === void 0 || _this$tilesetManager3.destroy();\n this.tileLayerService.destroy();\n }\n // 重新加载\n reload() {\n var _this$tilesetManager4;\n // 瓦片重新加载\n this.tilesetManager.clear();\n const {\n latLonBounds,\n zoom\n } = this.getCurrentView();\n (_this$tilesetManager4 = this.tilesetManager) === null || _this$tilesetManager4 === void 0 || _this$tilesetManager4.update(zoom, latLonBounds);\n }\n tileUnLoad(tile) {\n this.tileLayerService.removeTile(tile.key);\n }\n tileUpdate() {\n var _this = this;\n return _asyncToGenerator(function* () {\n if (!_this.tilesetManager) {\n return;\n }\n const minZoom = _this.parent.getMinZoom();\n const maxZoom = _this.parent.getMaxZoom();\n const tiles = _this.tilesetManager.tiles.filter(tile => tile.isLoaded) // 过滤未加载完成的\n .filter(tile => tile.isVisibleChange) // 过滤未发生变化的\n .filter(tile => tile.data) //\n .filter(tile => tile.z >= minZoom && tile.z < maxZoom); // 过滤不可见见\n yield Promise.all(tiles.map( /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (tile) {\n // 未加载瓦片\n if (!_this.tileLayerService.hasTile(tile.key)) {\n const tileInstance = getTileFactory(_this.parent);\n const tileLayer = new tileInstance(tile, _this.parent);\n yield tileLayer.initTileLayer();\n _this.tilePickService.setPickState();\n if (tileLayer.getLayers().length !== 0) {\n _this.tileLayerService.addTile(tileLayer);\n _this.tileLayerService.updateTileVisible(tile);\n _this.layerService.reRender();\n }\n } else {\n // 已加载瓦片\n _this.tileLayerService.updateTileVisible(tile);\n _this.tilePickService.setPickState();\n _this.layerService.reRender();\n }\n });\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }()));\n if (_this.tilesetManager.isLoaded) {\n // 将事件抛出,图层上可以使用瓦片\n _this.parent.emit('tiles-loaded', _this.tilesetManager.currentTiles);\n }\n })();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n setPickState(layers) {\n return;\n }\n pickRender(target) {\n this.tilePickService.pickRender(target);\n }\n selectFeature(pickedColors) {\n this.tilePickService.selectFeature(pickedColors);\n }\n highlightPickedFeature(pickedColors) {\n this.tilePickService.highlightPickedFeature(pickedColors);\n }\n\n /**\n * 实现 TileLayer 对子图层方法的代理\n * @param parent\n */\n proxy(parent) {\n ProxyFuncs.forEach(func => {\n // @ts-ignore\n const oldStyleFunc = parent[func].bind(parent);\n // @ts-ignore\n parent[func] = (...args) => {\n oldStyleFunc(...args);\n this.getLayers().map(child => {\n // @ts-ignore\n child[func](...args);\n });\n // Tip: 目前在更新 RasterData 的 colorTexture 的时候需要额外优化\n if (func === 'style') {\n this.getTiles().forEach(tile => tile.styleUpdate(...args));\n }\n return parent;\n };\n });\n }\n}","/**\n * Create DOM from a html string.\n * @param str\n * @returns\n */\nexport function createDOM(str) {\n var container = document.createElement('div');\n container.innerHTML = str;\n var dom = container.childNodes[0];\n if (dom && container.contains(dom)) {\n container.removeChild(dom);\n }\n return dom;\n}\n//# sourceMappingURL=create-dom.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var replaceChildren = function (el, content) {\n if (content == null) {\n el.innerHTML = '';\n return;\n }\n if (el.replaceChildren) {\n if (Array.isArray(content)) {\n el.replaceChildren.apply(el, __spreadArray([], __read(content), false));\n }\n else {\n el.replaceChildren(content);\n }\n }\n else {\n el.innerHTML = '';\n if (Array.isArray(content)) {\n content.forEach(function (child) { return el.appendChild(child); });\n }\n else {\n el.appendChild(content);\n }\n }\n};\n//# sourceMappingURL=replace-children.js.map","import { __assign } from \"tslib\";\nexport function getClassNames(prefixCls) {\n if (prefixCls === void 0) { prefixCls = ''; }\n return {\n CONTAINER: \"\".concat(prefixCls, \"tooltip\"),\n TITLE: \"\".concat(prefixCls, \"tooltip-title\"),\n LIST: \"\".concat(prefixCls, \"tooltip-list\"),\n LIST_ITEM: \"\".concat(prefixCls, \"tooltip-list-item\"),\n NAME: \"\".concat(prefixCls, \"tooltip-list-item-name\"),\n MARKER: \"\".concat(prefixCls, \"tooltip-list-item-marker\"),\n NAME_LABEL: \"\".concat(prefixCls, \"tooltip-list-item-name-label\"),\n VALUE: \"\".concat(prefixCls, \"tooltip-list-item-value\"),\n CROSSHAIR_X: \"\".concat(prefixCls, \"tooltip-crosshair-x\"),\n CROSSHAIR_Y: \"\".concat(prefixCls, \"tooltip-crosshair-y\"),\n };\n}\nvar TEXT_OVERFLOW_STYLE = {\n overflow: 'hidden',\n 'white-space': 'nowrap',\n 'text-overflow': 'ellipsis',\n};\nexport function getDefaultTooltipStyle(prefixCls) {\n var _a;\n if (prefixCls === void 0) { prefixCls = ''; }\n var CLASS_NAME = getClassNames(prefixCls);\n return _a = {},\n _a[\".\".concat(CLASS_NAME.CONTAINER)] = {\n position: 'absolute',\n visibility: 'visible',\n // 'white-space': 'nowrap',\n 'z-index': 8,\n transition: 'visibility 0.2s cubic-bezier(0.23, 1, 0.32, 1), ' +\n 'left 0.4s cubic-bezier(0.23, 1, 0.32, 1), ' +\n 'top 0.4s cubic-bezier(0.23, 1, 0.32, 1)',\n 'background-color': 'rgba(255, 255, 255, 0.96)',\n 'box-shadow': '0 6px 12px 0 rgba(0, 0, 0, 0.12)',\n 'border-radius': '4px',\n color: 'rgba(0, 0, 0, 0.65)',\n 'font-size': '12px',\n // 'font-family': ,\n 'line-height': '20px',\n padding: '12px',\n 'min-width': '120px',\n 'max-width': '360px',\n 'font-family': 'Roboto-Regular',\n },\n _a[\".\".concat(CLASS_NAME.TITLE)] = {\n color: 'rgba(0, 0, 0, 0.45)',\n },\n _a[\".\".concat(CLASS_NAME.LIST)] = {\n margin: '0px',\n 'list-style-type': 'none',\n padding: '0px',\n },\n _a[\".\".concat(CLASS_NAME.LIST_ITEM)] = {\n 'list-style-type': 'none',\n display: 'flex',\n 'line-height': '2em',\n 'align-items': 'center',\n 'justify-content': 'space-between',\n 'white-space': 'nowrap',\n },\n _a[\".\".concat(CLASS_NAME.MARKER)] = {\n width: '8px',\n height: '8px',\n 'border-radius': '50%',\n display: 'inline-block',\n 'margin-right': '4px',\n },\n _a[\".\".concat(CLASS_NAME.NAME)] = {\n display: 'flex',\n 'align-items': 'center',\n 'max-width': '216px',\n },\n _a[\".\".concat(CLASS_NAME.NAME_LABEL)] = __assign({ flex: 1 }, TEXT_OVERFLOW_STYLE),\n _a[\".\".concat(CLASS_NAME.VALUE)] = __assign({ display: 'inline-block', float: 'right', flex: 1, 'text-align': 'right', 'min-width': '28px', 'margin-left': '30px', color: 'rgba(0, 0, 0, 0.85)' }, TEXT_OVERFLOW_STYLE),\n _a[\".\".concat(CLASS_NAME.CROSSHAIR_X)] = {\n position: 'absolute',\n width: '1px',\n 'background-color': 'rgba(0, 0, 0, 0.25)',\n },\n _a[\".\".concat(CLASS_NAME.CROSSHAIR_Y)] = {\n position: 'absolute',\n height: '1px',\n 'background-color': 'rgba(0, 0, 0, 0.25)',\n },\n _a;\n}\n//# sourceMappingURL=constant.js.map","import { __assign, __extends, __read, __rest } from \"tslib\";\nimport { substitute, createDOM } from '@antv/util';\nimport { Component } from '../../core';\nimport { BBox, applyStyleSheet, replaceChildren } from '../../util';\nimport { getClassNames, getDefaultTooltipStyle } from './constant';\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n function Tooltip(options) {\n var _this = this;\n var _a, _b;\n var prefixCls = (_b = (_a = options.style) === null || _a === void 0 ? void 0 : _a.template) === null || _b === void 0 ? void 0 : _b.prefixCls;\n var CLASS_NAME = getClassNames(prefixCls);\n _this = _super.call(this, options, {\n data: [],\n x: 0,\n y: 0,\n visibility: 'visible',\n title: '',\n position: 'bottom-right',\n offset: [5, 5],\n enterable: false,\n container: {\n x: 0,\n y: 0,\n },\n bounding: null,\n template: {\n prefixCls: '',\n container: \"
\"),\n title: \"
\"),\n item: \"
  • \\n \\n \\n {name}\\n \\n {value}\\n
  • \"),\n },\n style: getDefaultTooltipStyle(prefixCls),\n }) || this;\n _this.timestamp = -1;\n _this.prevCustomContentKey = _this.attributes.contentKey;\n _this.initShape();\n _this.render(_this.attributes, _this);\n return _this;\n }\n Object.defineProperty(Tooltip.prototype, \"HTMLTooltipElement\", {\n get: function () {\n return this.element;\n },\n enumerable: false,\n configurable: true\n });\n Tooltip.prototype.getContainer = function () {\n return this.element;\n };\n Object.defineProperty(Tooltip.prototype, \"elementSize\", {\n get: function () {\n var width = this.element.offsetWidth;\n var height = this.element.offsetHeight;\n return { width: width, height: height };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Tooltip.prototype, \"HTMLTooltipItemsElements\", {\n get: function () {\n var _a = this.attributes, data = _a.data, template = _a.template;\n return data.map(function (_a, idx) {\n var _b = _a.name, name = _b === void 0 ? '' : _b, _c = _a.color, color = _c === void 0 ? 'black' : _c, index = _a.index, rest = __rest(_a, [\"name\", \"color\", \"index\"]);\n var datum = __assign({ name: name, color: color, index: index !== null && index !== void 0 ? index : idx }, rest);\n return createDOM(substitute(template.item, datum));\n });\n },\n enumerable: false,\n configurable: true\n });\n Tooltip.prototype.render = function (attributes, container) {\n this.renderHTMLTooltipElement();\n this.updatePosition();\n };\n Tooltip.prototype.destroy = function () {\n var _a;\n (_a = this.element) === null || _a === void 0 ? void 0 : _a.remove();\n _super.prototype.destroy.call(this);\n };\n /**\n * 如果设置了坐标值,显示过程中会立即更新位置并关闭过渡动画\n */\n Tooltip.prototype.show = function (x, y) {\n var _this = this;\n if (x !== undefined && y !== undefined) {\n var isToggle = this.element.style.visibility === 'hidden';\n var setPosition = function () {\n _this.attributes.x = x !== null && x !== void 0 ? x : _this.attributes.x;\n _this.attributes.y = y !== null && y !== void 0 ? y : _this.attributes.y;\n _this.updatePosition();\n };\n // 只有从 hidden 状态变为 visible 状态时才需要关闭过渡动画\n isToggle ? this.closeTransition(setPosition) : setPosition();\n }\n this.element.style.visibility = 'visible';\n };\n /**\n * 如果 hide 时传入了坐标值,那么只有当鼠标不在 tooltip 上时才会隐藏\n * 对于 enterable = true 的时候,需要传入 x y,为了避免问题,建议上层在使用的时候,都传入 x y\n * @param x\n * @param y\n * @returns\n */\n Tooltip.prototype.hide = function (x, y) {\n if (x === void 0) { x = 0; }\n if (y === void 0) { y = 0; }\n var enterable = this.attributes.enterable;\n // 如果当前鼠标在 tooltip 上,则不隐藏\n if (enterable && this.isCursorEntered(x, y))\n return;\n this.element.style.visibility = 'hidden';\n };\n /**\n * 初始化容器\n */\n Tooltip.prototype.initShape = function () {\n var template = this.attributes.template;\n this.element = createDOM(template.container);\n if (this.id)\n this.element.setAttribute('id', this.id);\n };\n Tooltip.prototype.renderCustomContent = function () {\n if (this.prevCustomContentKey !== undefined && this.prevCustomContentKey === this.attributes.contentKey)\n return;\n this.prevCustomContentKey = this.attributes.contentKey;\n var content = this.attributes.content;\n if (!content)\n return;\n if (typeof content === 'string')\n this.element.innerHTML = content;\n else\n replaceChildren(this.element, content);\n };\n /**\n * 更新 HTML 上的内容\n */\n Tooltip.prototype.renderHTMLTooltipElement = function () {\n var _a, _b;\n var _c = this.attributes, template = _c.template, title = _c.title, enterable = _c.enterable, style = _c.style, content = _c.content;\n var CLASS_NAME = getClassNames(template.prefixCls);\n var container = this.element;\n this.element.style.pointerEvents = enterable ? 'auto' : 'none';\n if (content)\n this.renderCustomContent();\n else {\n if (title) {\n container.innerHTML = template.title;\n container.getElementsByClassName(CLASS_NAME.TITLE)[0].innerHTML = title;\n }\n else\n (_b = (_a = container.getElementsByClassName(CLASS_NAME.TITLE)) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.remove();\n var itemsElements = this.HTMLTooltipItemsElements;\n var ul = document.createElement('ul');\n ul.className = CLASS_NAME.LIST;\n replaceChildren(ul, itemsElements);\n var list = this.element.querySelector(\".\".concat(CLASS_NAME.LIST));\n if (list)\n list.replaceWith(ul);\n else\n container.appendChild(ul);\n }\n applyStyleSheet(container, style);\n };\n /**\n * 根据 position 和指针位置,计算出 tooltip 相对于指针的偏移量\n * @param assignPosition {TooltipPosition} tooltip相对于指针的位置,不指定时使用默认参数\n */\n Tooltip.prototype.getRelativeOffsetFromCursor = function (assignPosition) {\n var _a = this.attributes, position = _a.position, offset = _a.offset;\n var interPosition = assignPosition || position;\n var finalPosition = interPosition.split('-');\n var positionScore = { left: [-1, 0], right: [1, 0], top: [0, -1], bottom: [0, 1] };\n var _b = this.elementSize, width = _b.width, height = _b.height;\n var absolutelyOffset = [-width / 2, -height / 2];\n finalPosition.forEach(function (pos) {\n var _a = __read(absolutelyOffset, 2), abs1 = _a[0], abs2 = _a[1];\n var _b = __read(positionScore[pos], 2), pos1 = _b[0], pos2 = _b[1];\n absolutelyOffset = [abs1 + (width / 2 + offset[0]) * pos1, abs2 + (height / 2 + offset[1]) * pos2];\n });\n return absolutelyOffset;\n };\n /**\n * 将相对于指针的偏移量生效到dom元素上\n */\n Tooltip.prototype.setOffsetPosition = function (_a) {\n var _b = __read(_a, 2), offsetX = _b[0], offsetY = _b[1];\n var _c = this.attributes, _d = _c.x, x = _d === void 0 ? 0 : _d, _e = _c.y, y = _e === void 0 ? 0 : _e, _f = _c.container, cx = _f.x, cy = _f.y;\n this.element.style.left = \"\".concat(+x + cx + offsetX, \"px\");\n this.element.style.top = \"\".concat(+y + cy + offsetY, \"px\");\n };\n /**\n * 更新tooltip的位置\n */\n Tooltip.prototype.updatePosition = function () {\n var _a = this.attributes.showDelay, showDelay = _a === void 0 ? 60 : _a;\n var currentTimestamp = Date.now();\n if (this.timestamp > 0 && currentTimestamp - this.timestamp < showDelay)\n return;\n this.timestamp = currentTimestamp;\n // 尝试当前的位置使用默认 position 能否放下\n // 如果不能,则改变取溢出边的反向 position\n /**\n * 默认位置\n * ⬇️\n * 计算自动调整位置\n * ⬇️\n * 实际摆放位置\n */\n this.setOffsetPosition(this.autoPosition(this.getRelativeOffsetFromCursor()));\n };\n /**\n * 计算自动调整位置后的相对位置\n * @param offsetX 根据position计算的横向偏移量\n * @param offsetY 根据position计算的纵向偏移量\n */\n Tooltip.prototype.autoPosition = function (_a) {\n var _b = __read(_a, 2), offsetX = _b[0], offsetY = _b[1];\n var _c = this.attributes, cursorX = _c.x, cursorY = _c.y, bounding = _c.bounding, position = _c.position;\n // 如果没有设置 bounds,那么意思就是不限制空间\n if (!bounding)\n return [offsetX, offsetY];\n // 更新前的位置和宽度\n var _d = this.element, offsetWidth = _d.offsetWidth, offsetHeight = _d.offsetHeight;\n // 预期放置的位置\n var _e = __read([+cursorX + offsetX, +cursorY + offsetY], 2), expectLeft = _e[0], expectTop = _e[1];\n // 反方向\n var inversion = {\n left: 'right',\n right: 'left',\n top: 'bottom',\n bottom: 'top',\n };\n // 各个边界是否超出容器边界\n var boundingX = bounding.x, boundingY = bounding.y, boundingWidth = bounding.width, boundingHeight = bounding.height;\n var edgeCompare = {\n left: expectLeft < boundingX,\n right: expectLeft + offsetWidth > boundingX + boundingWidth,\n top: expectTop < boundingY,\n bottom: expectTop + offsetHeight > boundingY + boundingHeight,\n };\n // 修正的位置\n var correctivePosition = [];\n // 判断是否超出边界\n position.split('-').forEach(function (pos) {\n // 如果在当前方向超出边界,则设置其反方向\n if (edgeCompare[pos])\n correctivePosition.push(inversion[pos]);\n else\n correctivePosition.push(pos);\n });\n var correctedPositionString = correctivePosition.join('-');\n return this.getRelativeOffsetFromCursor(correctedPositionString);\n };\n Tooltip.prototype.isCursorEntered = function (clientX, clientY) {\n // 是可捕获的,并且点在 tooltip dom 上\n if (this.element) {\n var _a = this.element.getBoundingClientRect(), x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n // const { container } = this.attributes;\n // const { x: cx, y: cy } = container;\n // console.log(1113, [clientX, clientY], [x, y, width, height], [cx, cy], new BBox(x - cx, y - cy, width, height).isPointIn(cursorX, cursorY));\n return new BBox(x, y, width, height).isPointIn(clientX, clientY);\n }\n return false;\n };\n Tooltip.prototype.closeTransition = function (callback) {\n var _this = this;\n var transition = this.element.style.transition;\n this.element.style.transition = 'none';\n callback();\n setTimeout(function () {\n _this.element.style.transition = transition;\n }, 10);\n };\n Tooltip.tag = 'tooltip';\n return Tooltip;\n}(Component));\nexport { Tooltip };\n//# sourceMappingURL=index.js.map","function substitute(str, o) {\n if (!str || !o) {\n return str;\n }\n return str.replace(/\\\\?\\{([^{}]+)\\}/g, function (match, name) {\n if (match.charAt(0) === '\\\\') {\n return match.slice(1);\n }\n return o[name] === undefined ? '' : o[name];\n });\n}\nexport default substitute;\n//# sourceMappingURL=substitute.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Circle, Line } from '@antv/g';\nimport { sort, group, mean, bisector, minIndex } from '@antv/vendor/d3-array';\nimport { deepMix, lowerFirst, throttle } from '@antv/util';\nimport { Tooltip as TooltipComponent } from '@antv/component';\nimport { defined, groupNameOf, subObject, dataOf } from '../utils/helper';\nimport { isTranspose, isPolar } from '../utils/coordinate';\nimport { angle, sub, dist } from '../utils/vector';\nimport { invert } from '../utils/scale';\nimport { CALLBACK_ITEM_SYMBOL } from '../runtime/transform';\nimport { selectG2Elements, createXKey, selectPlotArea, mousePosition, selectFacetG2Elements, createDatumof, selectElementByData, bboxOf, maybeRoot, } from './utils';\nfunction getContainer(group, mount) {\n var _a;\n if (mount) {\n return typeof mount === 'string' ? document.querySelector(mount) : mount;\n }\n const view = (_a = group.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView;\n if (!view)\n return;\n const canvas = view.getContextService().getDomElement();\n return canvas.parentElement;\n}\nfunction getBounding(root) {\n const bbox = root.getRenderBounds();\n const { min: [x1, y1], max: [x2, y2], } = bbox;\n return {\n x: x1,\n y: y1,\n width: x2 - x1,\n height: y2 - y1,\n };\n}\nfunction getContainerOffset(container1, container2) {\n const r1 = container1.getBoundingClientRect();\n const r2 = container2.getBoundingClientRect();\n return {\n x: r1.x - r2.x,\n y: r1.y - r2.y,\n };\n}\nfunction createTooltip(container, x0, y0, position, enterable, bounding, containerOffset, css = {}, offset = [10, 10]) {\n const defaults = {\n '.g2-tooltip': {},\n '.g2-tooltip-title': {\n overflow: 'hidden',\n 'white-space': 'nowrap',\n 'text-overflow': 'ellipsis',\n },\n };\n const tooltipElement = new TooltipComponent({\n className: 'tooltip',\n style: {\n x: x0,\n y: y0,\n container: containerOffset,\n data: [],\n bounding,\n position,\n enterable,\n title: '',\n offset,\n template: {\n prefixCls: 'g2-',\n },\n style: deepMix(defaults, css),\n },\n });\n container.appendChild(tooltipElement.HTMLTooltipElement);\n return tooltipElement;\n}\nfunction showTooltip({ root, data, x, y, render, event, single, position = 'right-bottom', enterable = false, css, mount, bounding, offset, }) {\n const container = getContainer(root, mount);\n const canvasContainer = getContainer(root);\n // All the views share the same tooltip.\n const parent = single ? canvasContainer : root;\n const b = bounding || getBounding(root);\n const containerOffset = getContainerOffset(canvasContainer, container);\n const { tooltipElement = createTooltip(container, x, y, position, enterable, b, containerOffset, css, offset), } = parent;\n const { items, title = '' } = data;\n tooltipElement.update(Object.assign({ x,\n y, data: items, title,\n position,\n enterable, container: containerOffset }, (render !== undefined && {\n content: render(event, { items, title }),\n })));\n parent.tooltipElement = tooltipElement;\n}\nfunction hideTooltip({ root, single, emitter, nativeEvent = true, event = null, }) {\n if (nativeEvent) {\n emitter.emit('tooltip:hide', { nativeEvent });\n }\n const container = getContainer(root);\n const parent = single ? container : root;\n const { tooltipElement } = parent;\n if (tooltipElement) {\n // Must be clientX, clientY.\n tooltipElement.hide(event === null || event === void 0 ? void 0 : event.clientX, event === null || event === void 0 ? void 0 : event.clientY);\n }\n hideRuleY(root);\n hideRuleX(root);\n hideMarker(root);\n}\nfunction destroyTooltip({ root, single }) {\n const container = getContainer(root);\n const parent = single ? container : root;\n if (!parent)\n return;\n const { tooltipElement } = parent;\n if (tooltipElement) {\n tooltipElement.destroy();\n parent.tooltipElement = undefined;\n }\n hideRuleY(root);\n hideRuleX(root);\n hideMarker(root);\n}\nfunction showUndefined(item) {\n const { value } = item;\n return Object.assign(Object.assign({}, item), { value: value === undefined ? 'undefined' : value });\n}\nfunction singleItem(element) {\n const { __data__: datum } = element;\n const { title, items = [] } = datum;\n const newItems = items\n .filter(defined)\n .map((_a) => {\n var { color = itemColorOf(element) } = _a, item = __rest(_a, [\"color\"]);\n return (Object.assign(Object.assign({}, item), { color }));\n })\n .map(showUndefined);\n return Object.assign(Object.assign({}, (title && { title })), { items: newItems });\n}\nfunction itemColorOf(element) {\n const fill = element.getAttribute('fill');\n const stroke = element.getAttribute('stroke');\n const { __data__: datum } = element;\n const { color = fill && fill !== 'transparent' ? fill : stroke } = datum;\n return color;\n}\nfunction unique(items, key = (d) => d) {\n const valueName = new Map(items.map((d) => [key(d), d]));\n return Array.from(valueName.values());\n}\nfunction groupItems(elements, scale, groupName, data = elements.map((d) => d['__data__']), theme = {}) {\n const key = (d) => (d instanceof Date ? +d : d);\n const T = unique(data.map((d) => d.title), key).filter(defined);\n const newItems = data\n .flatMap((datum, i) => {\n const element = elements[i];\n const { items = [], title } = datum;\n const definedItems = items.filter(defined);\n // If there is only one item, use groupName as title by default.\n const useGroupName = groupName !== undefined ? groupName : items.length <= 1 ? true : false;\n return definedItems.map((_a) => {\n var { color = itemColorOf(element) || theme.color, name } = _a, item = __rest(_a, [\"color\", \"name\"]);\n const groupName = groupNameOf(scale, datum);\n // callback's priority is higher than groupName.\n const name1 = useGroupName && !(CALLBACK_ITEM_SYMBOL in item)\n ? groupName || name\n : name || groupName;\n return Object.assign(Object.assign({}, item), { color, name: name1 || title });\n });\n })\n .map(showUndefined);\n return Object.assign(Object.assign({}, (T.length > 0 && { title: T.join(',') })), { items: unique(newItems, (d) => `(${key(d.name)}, ${key(d.value)}, ${key(d.color)})`) });\n}\nfunction updateRuleX(root, points, mouse, _a) {\n var { plotWidth, plotHeight, mainWidth, mainHeight, startX, startY, transposed, polar, insetLeft, insetTop } = _a, rest = __rest(_a, [\"plotWidth\", \"plotHeight\", \"mainWidth\", \"mainHeight\", \"startX\", \"startY\", \"transposed\", \"polar\", \"insetLeft\", \"insetTop\"]);\n const defaults = Object.assign({ lineWidth: 1, stroke: '#1b1e23', strokeOpacity: 0.5 }, rest);\n const createCircle = (cx, cy, r) => {\n const circle = new Circle({\n style: Object.assign({ cx,\n cy,\n r }, defaults),\n });\n root.appendChild(circle);\n return circle;\n };\n const createLine = (x1, x2, y1, y2) => {\n const line = new Line({\n style: Object.assign({ x1,\n x2,\n y1,\n y2 }, defaults),\n });\n root.appendChild(line);\n return line;\n };\n const minDistPoint = (mouse, points) => {\n // only one point do not need compute\n if (points.length === 1) {\n return points[0];\n }\n const dists = points.map((p) => dist(p, mouse));\n const minDistIndex = minIndex(dists, (d) => d);\n return points[minDistIndex];\n };\n const target = minDistPoint(mouse, points);\n const pointsOf = () => {\n if (transposed)\n return [\n startX + target[0],\n startX + target[0],\n startY,\n startY + plotHeight,\n ];\n return [startX, startX + plotWidth, target[1] + startY, target[1] + startY];\n };\n const pointsOfPolar = () => {\n const cx = startX + insetLeft + mainWidth / 2;\n const cy = startY + insetTop + mainHeight / 2;\n const cdist = dist([cx, cy], target);\n return [cx, cy, cdist];\n };\n if (polar) {\n const [cx, cy, r] = pointsOfPolar();\n const ruleX = root.ruleX || createCircle(cx, cy, r);\n ruleX.style.cx = cx;\n ruleX.style.cy = cy;\n ruleX.style.r = r;\n root.ruleX = ruleX;\n }\n else {\n const [x1, x2, y1, y2] = pointsOf();\n const ruleX = root.ruleX || createLine(x1, x2, y1, y2);\n ruleX.style.x1 = x1;\n ruleX.style.x2 = x2;\n ruleX.style.y1 = y1;\n ruleX.style.y2 = y2;\n root.ruleX = ruleX;\n }\n}\nfunction updateRuleY(root, points, _a) {\n var { plotWidth, plotHeight, mainWidth, mainHeight, startX, startY, transposed, polar, insetLeft, insetTop } = _a, rest = __rest(_a, [\"plotWidth\", \"plotHeight\", \"mainWidth\", \"mainHeight\", \"startX\", \"startY\", \"transposed\", \"polar\", \"insetLeft\", \"insetTop\"]);\n const defaults = Object.assign({ lineWidth: 1, stroke: '#1b1e23', strokeOpacity: 0.5 }, rest);\n const Y = points.map((p) => p[1]);\n const X = points.map((p) => p[0]);\n const y = mean(Y);\n const x = mean(X);\n const pointsOf = () => {\n if (polar) {\n const r = Math.min(mainWidth, mainHeight) / 2;\n const cx = startX + insetLeft + mainWidth / 2;\n const cy = startY + insetTop + mainHeight / 2;\n const a = angle(sub([x, y], [cx, cy]));\n const x0 = cx + r * Math.cos(a);\n const y0 = cy + r * Math.sin(a);\n return [cx, x0, cy, y0];\n }\n if (transposed)\n return [startX, startX + plotWidth, y + startY, y + startY];\n return [x + startX, x + startX, startY, startY + plotHeight];\n };\n const [x1, x2, y1, y2] = pointsOf();\n const createLine = () => {\n const line = new Line({\n style: Object.assign({ x1,\n x2,\n y1,\n y2 }, defaults),\n });\n root.appendChild(line);\n return line;\n };\n // Only update rule with defined series elements.\n if (X.length > 0) {\n const ruleY = root.ruleY || createLine();\n ruleY.style.x1 = x1;\n ruleY.style.x2 = x2;\n ruleY.style.y1 = y1;\n ruleY.style.y2 = y2;\n root.ruleY = ruleY;\n }\n}\nfunction hideRuleY(root) {\n if (root.ruleY) {\n root.ruleY.remove();\n root.ruleY = undefined;\n }\n}\nfunction hideRuleX(root) {\n if (root.ruleX) {\n root.ruleX.remove();\n root.ruleX = undefined;\n }\n}\nfunction updateMarker(root, { data, style, theme }) {\n if (root.markers)\n root.markers.forEach((d) => d.remove());\n const { type = '' } = style;\n const markers = data\n .filter((d) => {\n const [{ x, y }] = d;\n return defined(x) && defined(y);\n })\n .map((d) => {\n const [{ color, element }, point] = d;\n const originColor = color || // encode value\n element.style.fill ||\n element.style.stroke ||\n theme.color;\n const fill = type === 'hollow' ? 'transparent' : originColor;\n const stroke = type === 'hollow' ? originColor : '#fff';\n const shape = new Circle({\n className: 'g2-tooltip-marker',\n style: Object.assign({ cx: point[0], cy: point[1], fill, r: 4, stroke, lineWidth: 2, \n // Prevents blocking clicks on elements behind.\n pointerEvents: 'none' }, style),\n });\n return shape;\n });\n for (const marker of markers)\n root.appendChild(marker);\n root.markers = markers;\n}\nfunction hideMarker(root) {\n if (root.markers) {\n root.markers.forEach((d) => d.remove());\n root.markers = [];\n }\n}\nfunction interactionKeyof(markState, key) {\n return Array.from(markState.values()).some(\n // @ts-ignore\n (d) => { var _a; return (_a = d.interaction) === null || _a === void 0 ? void 0 : _a[key]; });\n}\nexport function maybeValue(specified, defaults) {\n return specified === undefined ? defaults : specified;\n}\nfunction isEmptyTooltipData(data) {\n const { title, items } = data;\n if (items.length === 0 && title === undefined)\n return true;\n return false;\n}\nfunction hasSeries(markState) {\n return Array.from(markState.values()).some(\n // @ts-ignore\n (d) => { var _a; return ((_a = d.interaction) === null || _a === void 0 ? void 0 : _a.seriesTooltip) && d.tooltip; });\n}\n/**\n * Finds a single element based on the mouse event in a non-series context (e.g., single item tooltip).\n * @param root - The root display object of the chart.\n * @param event - The mouse event object (e.g., pointermove, pointerdown).\n * @param elements - Array of chart elements to search within.\n * @param coordinate - The coordinate system of the chart (e.g., Cartesian, polar).\n * @param scale - The scale configurations (e.g., x, series scales).\n * @param shared - Whether the tooltip is shared among multiple elements (e.g., grouped bars).\n * @returns The matched display object or `undefined` if no element is found.\n * @description\n * - Handles bar charts by sorting elements and using bisector search for efficient lookup.\n * - For non-bar charts, directly finds the target element from the event's target.\n * - Adjusts for bar spacing in grouped charts when `shared` is false.\n */\nexport function findSingleElement({ root, event, elements, coordinate, scale, shared, }) {\n var _a, _b;\n const inInterval = (d) => d.markType === 'interval';\n const isBar = elements.every(inInterval) && !isPolar(coordinate);\n const scaleX = scale.x;\n const scaleSeries = scale.series;\n const bandWidth = (_b = (_a = scaleX === null || scaleX === void 0 ? void 0 : scaleX.getBandWidth) === null || _a === void 0 ? void 0 : _a.call(scaleX)) !== null && _b !== void 0 ? _b : 0;\n const xof = scaleSeries\n ? (d) => {\n const seriesCount = Math.round(1 / scaleSeries.valueBandWidth);\n return (d.__data__.x +\n d.__data__.series * bandWidth +\n bandWidth / (seriesCount * 2));\n }\n : (d) => d.__data__.x + bandWidth / 2;\n // Sort for bisector search.\n if (isBar)\n elements.sort((a, b) => xof(a) - xof(b));\n const findElementByTarget = (event) => {\n const { target } = event;\n return maybeRoot(target, (node) => {\n if (!node.classList)\n return false;\n return node.classList.includes('element');\n });\n };\n const element = isBar\n ? (event) => {\n const mouse = mousePosition(root, event);\n if (!mouse)\n return;\n const [abstractX] = coordinate.invert(mouse);\n const search = bisector(xof).center;\n const i = search(elements, abstractX);\n const target = elements[i];\n if (!shared) {\n // For grouped bar chart without shared options.\n const isGrouped = elements.find((d) => d !== target && xof(d) === xof(target));\n if (isGrouped)\n return findElementByTarget(event);\n }\n return target;\n }\n : findElementByTarget;\n return element(event);\n}\n/**\n * Finds series-related elements and data based on the mouse event for series tooltips.\n * @param root - The root display object of the chart.\n * @param event - The mouse event object (e.g., pointermove, pointerdown).\n * @param elements - Array of chart elements to search within.\n * @param coordinate - The coordinate system of the chart (e.g., Cartesian, polar).\n * @param scale - The scale configurations (e.g., x, series scales).\n * @param startX - The starting X position of the plot area.\n * @param startY - The starting Y position of the plot area.\n * @returns An object containing:\n * - `selectedElements`: Matched display objects (series and item elements).\n * - `selectedData`: Corresponding data records of the selected elements.\n * - `filteredSeriesData`: Filtered series data closest to the mouse focus.\n * - `abstractX`: A function to convert mouse coordinates to abstract X values.\n * @description\n * - Splits elements into series and item elements for targeted searching.\n * - Handles bar charts and band scales using bisector search and coordinate inversion.\n * - Sorts elements to ensure correct visual ordering (top-to-bottom or right-to-left in transposed mode).\n * - Filters and groups data to provide accurate tooltip information for series.\n */\nexport function findSeriesElement({ root, event, elements, coordinate, scale, startX, startY, }) {\n const transposed = isTranspose(coordinate);\n // Split elements into series elements and item elements.\n const seriesElements = [];\n const itemElements = [];\n for (const element of elements) {\n const { __data__: data } = element;\n const { seriesX, title, items } = data;\n if (seriesX)\n seriesElements.push(element);\n else if (title || items)\n itemElements.push(element);\n }\n const inInterval = (d) => d.markType === 'interval';\n const isBar = itemElements.length &&\n itemElements.every(inInterval) &&\n !isPolar(coordinate);\n const xof = (d) => d.__data__.x;\n // For band scale x, find the closest series element to focus,\n // useful for interval + line mark.\n const isBandScale = !!scale.x.getBandWidth;\n const closest = isBandScale && itemElements.length > 0;\n // Sorted elements from top to bottom visually,\n // or from right to left in transpose coordinate.\n seriesElements.sort((a, b) => {\n const index = transposed ? 0 : 1;\n const minY = (d) => d.getBounds().min[index];\n return transposed ? minY(b) - minY(a) : minY(a) - minY(b);\n });\n const extent = (d) => {\n const index = transposed ? 1 : 0;\n const { min, max } = d.getLocalBounds();\n return sort([min[index], max[index]]);\n };\n // Sort itemElements for bisector search.\n if (isBar)\n elements.sort((a, b) => xof(a) - xof(b));\n else {\n itemElements.sort((a, b) => {\n const [minA, maxA] = extent(a);\n const [minB, maxB] = extent(b);\n const midA = (minA + maxA) / 2;\n const midB = (minB + maxB) / 2;\n return transposed ? midB - midA : midA - midB;\n });\n }\n // Get sortedIndex and X for each series elements\n const elementSortedX = new Map(seriesElements.map((element) => {\n const { __data__: data } = element;\n const { seriesX } = data;\n const seriesIndex = seriesX.map((_, i) => i);\n const sortedIndex = sort(seriesIndex, (i) => seriesX[+i]);\n return [element, [sortedIndex, seriesX]];\n }));\n const { x: scaleX } = scale;\n // Apply offset for band scale x.\n const offsetX = (scaleX === null || scaleX === void 0 ? void 0 : scaleX.getBandWidth) ? scaleX.getBandWidth() / 2 : 0;\n const abstractX = (focus) => {\n const [normalizedX] = coordinate.invert(focus);\n return normalizedX - offsetX;\n };\n const indexByFocus = (event, focus, I, X) => {\n // _x is from emit event, to find the right element.\n const { _x } = event;\n const finalX = _x !== undefined ? scaleX.map(_x) : abstractX(focus);\n const DX = X.filter(defined);\n const [minX, maxX] = sort([DX[0], DX[DX.length - 1]]);\n // If only has one element(minX == maxX), show tooltip when hover whole chart\n const isOnlyOneElement = minX === maxX;\n // If closest is true, always find at least one element.\n // Otherwise, skip element out of plot area.\n if (!closest && (finalX < minX || finalX > maxX) && !isOnlyOneElement)\n return null;\n const search = bisector((i) => X[+i]).center;\n const i = search(I, finalX);\n return I[i];\n };\n const elementsByFocus = isBar\n ? (focus, elements) => {\n const search = bisector(xof).center;\n const i = search(elements, abstractX(focus));\n const find = elements[i];\n const groups = group(elements, xof);\n const selected = groups.get(xof(find));\n return selected;\n }\n : (focus, elements) => {\n const index = transposed ? 1 : 0;\n const x = focus[index];\n const filtered = elements.filter((element) => {\n const [min, max] = extent(element);\n return x >= min && x <= max;\n });\n // If closet is true, always find at least one element.\n if (!closest || filtered.length > 0)\n return filtered;\n // Search the closet element to the focus.\n const search = bisector((element) => {\n const [min, max] = extent(element);\n return (min + max) / 2;\n }).center;\n const i = search(elements, x);\n return [elements[i]].filter(defined);\n };\n const seriesData = (element, index) => {\n const { __data__: data } = element;\n return Object.fromEntries(Object.entries(data)\n .filter(([key]) => key.startsWith('series') && key !== 'series')\n .map(([key, V]) => {\n const d = V[index];\n return [lowerFirst(key.replace('series', '')), d];\n }));\n };\n const mouse = mousePosition(root, event);\n if (!mouse)\n return;\n const focus = [mouse[0] - startX, mouse[1] - startY];\n if (!focus)\n return;\n // Get selected item element.\n const selectedItems = elementsByFocus(focus, itemElements);\n // Get selected data item from both series element and item element.\n const selectedSeriesElements = [];\n const selectedSeriesData = [];\n for (const element of seriesElements) {\n const [sortedIndex, X] = elementSortedX.get(element);\n const index = indexByFocus(event, focus, sortedIndex, X);\n if (index !== null) {\n selectedSeriesElements.push(element);\n const d = seriesData(element, index);\n const { x, y } = d;\n const p = coordinate.map([(x || 0) + offsetX, y || 0]);\n selectedSeriesData.push([Object.assign(Object.assign({}, d), { element }), p]);\n }\n }\n // Filter selectedSeriesData with different x,\n // make sure there is only one x closest to focusX.\n const SX = Array.from(new Set(selectedSeriesData.map((d) => d[0].x)));\n const closestX = SX[minIndex(SX, (x) => Math.abs(x - abstractX(focus)))];\n const filteredSeriesData = selectedSeriesData.filter((d) => d[0].x === closestX);\n const selectedData = [\n ...filteredSeriesData.map((d) => d[0]),\n ...selectedItems.map((d) => d.__data__),\n ];\n // Get the displayed tooltip data.\n const selectedElements = [...selectedSeriesElements, ...selectedItems];\n return { selectedElements, selectedData, filteredSeriesData, abstractX };\n}\n/**\n * Show tooltip for series item.\n */\nexport function seriesTooltip(root, _a) {\n var { elements: elementsof, sort: sortFunction, filter: filterFunction, scale, coordinate, crosshairs, crosshairsX, crosshairsY, render, groupName, emitter, wait = 50, leading = true, trailing = false, startX = 0, startY = 0, body = true, single = true, position, enterable, mount, bounding, theme, offset, disableNative = false, marker = true, preserve = false, style: _style = {}, css = {} } = _a, rest = __rest(_a, [\"elements\", \"sort\", \"filter\", \"scale\", \"coordinate\", \"crosshairs\", \"crosshairsX\", \"crosshairsY\", \"render\", \"groupName\", \"emitter\", \"wait\", \"leading\", \"trailing\", \"startX\", \"startY\", \"body\", \"single\", \"position\", \"enterable\", \"mount\", \"bounding\", \"theme\", \"offset\", \"disableNative\", \"marker\", \"preserve\", \"style\", \"css\"]);\n const elements = elementsof(root);\n const style = deepMix(_style, rest);\n const polar = isPolar(coordinate);\n const transposed = isTranspose(coordinate);\n const { innerWidth: plotWidth, innerHeight: plotHeight, width: mainWidth, height: mainHeight, insetLeft, insetTop, } = coordinate.getOptions();\n const update = throttle((event) => {\n var _a;\n const mouse = mousePosition(root, event);\n if (!mouse)\n return;\n const bbox = bboxOf(root);\n const x = bbox.min[0];\n const y = bbox.min[1];\n const { selectedElements, selectedData, filteredSeriesData, abstractX } = findSeriesElement({\n root,\n event,\n elements,\n coordinate,\n scale,\n startX,\n startY,\n });\n const tooltipData = groupItems(selectedElements, scale, groupName, selectedData, theme);\n // Sort items and filter items.\n if (sortFunction) {\n tooltipData.items.sort((a, b) => sortFunction(a) - sortFunction(b));\n }\n if (filterFunction) {\n tooltipData.items = tooltipData.items.filter(filterFunction);\n }\n // Hide tooltip with no selected tooltip.\n if (selectedElements.length === 0 || isEmptyTooltipData(tooltipData)) {\n hide(event);\n return;\n }\n if (body) {\n showTooltip({\n root,\n data: tooltipData,\n x: mouse[0] + x,\n y: mouse[1] + y,\n render,\n event,\n single,\n position,\n enterable,\n mount,\n bounding,\n css,\n offset,\n });\n }\n if (crosshairs || crosshairsX || crosshairsY) {\n const ruleStyle = subObject(style, 'crosshairs');\n const ruleStyleX = Object.assign(Object.assign({}, ruleStyle), subObject(style, 'crosshairsX'));\n const ruleStyleY = Object.assign(Object.assign({}, ruleStyle), subObject(style, 'crosshairsY'));\n const points = filteredSeriesData.map((d) => d[1]);\n if (crosshairsX) {\n updateRuleX(root, points, mouse, Object.assign(Object.assign({}, ruleStyleX), { plotWidth,\n plotHeight,\n mainWidth,\n mainHeight,\n insetLeft,\n insetTop,\n startX,\n startY,\n transposed,\n polar }));\n }\n if (crosshairsY) {\n updateRuleY(root, points, Object.assign(Object.assign({}, ruleStyleY), { plotWidth,\n plotHeight,\n mainWidth,\n mainHeight,\n insetLeft,\n insetTop,\n startX,\n startY,\n transposed,\n polar }));\n }\n }\n if (marker) {\n const markerStyles = subObject(style, 'marker');\n updateMarker(root, {\n data: filteredSeriesData,\n style: markerStyles,\n theme,\n });\n }\n // X in focus may related multiple points when dataset is large,\n // so we need to find the first x to show tooltip.\n const firstX = (_a = filteredSeriesData[0]) === null || _a === void 0 ? void 0 : _a[0].x;\n const transformedX = firstX !== null && firstX !== void 0 ? firstX : abstractX(focus);\n emitter.emit('tooltip:show', Object.assign(Object.assign({}, event), { nativeEvent: true, data: Object.assign(Object.assign({}, tooltipData), { data: { x: invert(scale.x, transformedX, true) } }) }));\n }, wait, { leading, trailing });\n const hide = (event) => {\n hideTooltip({ root, single, emitter, event });\n };\n const destroy = () => {\n destroyTooltip({ root, single });\n };\n const onTooltipShow = (_a) => {\n var _b;\n var { nativeEvent, data, offsetX, offsetY } = _a, rest = __rest(_a, [\"nativeEvent\", \"data\", \"offsetX\", \"offsetY\"]);\n if (nativeEvent)\n return;\n const x = (_b = data === null || data === void 0 ? void 0 : data.data) === null || _b === void 0 ? void 0 : _b.x;\n const scaleX = scale.x;\n const x1 = scaleX.map(x);\n const [x2, y2] = coordinate.map([x1, 0.5]);\n const rootBounds = root.getRenderBounds();\n const minX = rootBounds.min[0];\n const minY = rootBounds.min[1];\n update(Object.assign(Object.assign({}, rest), { offsetX: offsetX !== undefined ? offsetX : minX + x2, offsetY: offsetY !== undefined ? offsetY : minY + y2, _x: x }));\n };\n const onTooltipHide = () => {\n hideTooltip({ root, single, emitter, nativeEvent: false });\n };\n const onTooltipDisable = () => {\n removeEventListeners();\n destroy();\n };\n const onTooltipEnable = () => {\n addEventListeners();\n };\n const addEventListeners = () => {\n if (!disableNative) {\n root.addEventListener('pointerdown', update);\n root.addEventListener('pointerenter', update);\n root.addEventListener('pointermove', update);\n // Only emit pointerleave event when the pointer is not in the root area.\n root.addEventListener('pointerleave', (e) => {\n if (mousePosition(root, e))\n return;\n hide(e);\n });\n root.addEventListener('pointerup', hide);\n }\n };\n const removeEventListeners = () => {\n if (!disableNative) {\n root.removeEventListener('pointerdown', update);\n root.removeEventListener('pointerenter', update);\n root.removeEventListener('pointermove', update);\n root.removeEventListener('pointerleave', hide);\n root.removeEventListener('pointerup', hide);\n }\n };\n addEventListeners();\n emitter.on('tooltip:show', onTooltipShow);\n emitter.on('tooltip:hide', onTooltipHide);\n emitter.on('tooltip:disable', onTooltipDisable);\n emitter.on('tooltip:enable', onTooltipEnable);\n return () => {\n removeEventListeners();\n emitter.off('tooltip:show', onTooltipShow);\n emitter.off('tooltip:hide', onTooltipHide);\n emitter.off('tooltip:disable', onTooltipDisable);\n emitter.off('tooltip:enable', onTooltipEnable);\n if (preserve) {\n hideTooltip({ root, single, emitter, nativeEvent: false });\n }\n else {\n destroy();\n }\n };\n}\n/**\n * Show tooltip for non-series item.\n */\nexport function tooltip(root, { elements: elementsof, coordinate, scale, render, groupName, sort: sortFunction, filter: filterFunction, emitter, wait = 50, leading = true, trailing = false, groupKey = (d) => d, // group elements by specified key\nsingle = true, position, enterable, datum, view, mount, bounding, theme, offset, shared = false, body = true, disableNative = false, preserve = false, css = {}, }) {\n const elements = elementsof(root);\n const keyGroup = group(elements, groupKey);\n const pointermove = throttle((event) => {\n const element = findSingleElement({\n root,\n event,\n elements,\n coordinate,\n scale,\n shared,\n });\n if (!element) {\n hideTooltip({ root, single, emitter, event });\n return;\n }\n const k = groupKey(element);\n const group = keyGroup.get(k);\n if (!group) {\n return;\n }\n const data = group.length === 1 && !shared\n ? singleItem(group[0])\n : groupItems(group, scale, groupName, undefined, theme);\n // Sort items and sort.\n if (sortFunction) {\n data.items.sort((a, b) => sortFunction(a) - sortFunction(b));\n }\n if (filterFunction) {\n data.items = data.items.filter(filterFunction);\n }\n if (isEmptyTooltipData(data)) {\n hideTooltip({ root, single, emitter, event });\n return;\n }\n const { offsetX, offsetY } = event;\n if (body) {\n showTooltip({\n root,\n data,\n x: offsetX,\n y: offsetY,\n render,\n event,\n single,\n position,\n enterable,\n mount,\n bounding,\n css,\n offset,\n });\n }\n emitter.emit('tooltip:show', Object.assign(Object.assign({}, event), { nativeEvent: true, data: Object.assign(Object.assign({}, data), { data: dataOf(element, view) }) }));\n }, wait, { leading, trailing });\n const pointerleave = (event) => {\n hideTooltip({ root, single, emitter, event });\n };\n const addEventListeners = () => {\n if (!disableNative) {\n root.addEventListener('pointerdown', pointermove);\n root.addEventListener('pointermove', pointermove);\n // Only emit pointerleave event when the pointer is not in the root area.\n // !!!DO NOT USE pointerout event, it will emit when the pointer is in the child area.\n root.addEventListener('pointerleave', pointerleave);\n root.addEventListener('pointerup', pointerleave);\n }\n };\n const removeEventListeners = () => {\n if (!disableNative) {\n root.removeEventListener('pointerdown', pointermove);\n root.removeEventListener('pointermove', pointermove);\n root.removeEventListener('pointerleave', pointerleave);\n root.removeEventListener('pointerup', pointerleave);\n }\n };\n const onTooltipShow = ({ nativeEvent, offsetX, offsetY, data: raw }) => {\n if (nativeEvent)\n return;\n const { data } = raw;\n const element = selectElementByData(elements, data, datum);\n if (!element)\n return;\n const bbox = element.getBBox();\n const { x, y, width, height } = bbox;\n const rootBBox = root.getBBox();\n pointermove({\n target: element,\n offsetX: offsetX !== undefined ? offsetX + rootBBox.x : x + width / 2,\n offsetY: offsetY !== undefined ? offsetY + rootBBox.y : y + height / 2,\n });\n };\n const onTooltipHide = ({ nativeEvent } = {}) => {\n if (nativeEvent)\n return;\n hideTooltip({ root, single, emitter, nativeEvent: false });\n };\n const onTooltipDisable = () => {\n removeEventListeners();\n destroyTooltip({ root, single });\n };\n const onTooltipEnable = () => {\n addEventListeners();\n };\n emitter.on('tooltip:show', onTooltipShow);\n emitter.on('tooltip:hide', onTooltipHide);\n emitter.on('tooltip:enable', onTooltipEnable);\n emitter.on('tooltip:disable', onTooltipDisable);\n addEventListeners();\n return () => {\n removeEventListeners();\n emitter.off('tooltip:show', onTooltipShow);\n emitter.off('tooltip:hide', onTooltipHide);\n if (preserve) {\n hideTooltip({ root, single, emitter, nativeEvent: false });\n }\n else {\n destroyTooltip({ root, single });\n }\n };\n}\nexport function Tooltip(options) {\n const { shared, crosshairs, crosshairsX, crosshairsY, series, name, item = () => ({}), facet = false } = options, rest = __rest(options, [\"shared\", \"crosshairs\", \"crosshairsX\", \"crosshairsY\", \"series\", \"name\", \"item\", \"facet\"]);\n return (target, viewInstances, emitter) => {\n const { container, view } = target;\n const { scale, markState, coordinate, theme } = view;\n // Get default value from mark states.\n const defaultSeries = interactionKeyof(markState, 'seriesTooltip');\n const defaultShowCrosshairs = interactionKeyof(markState, 'crosshairs');\n const plotArea = selectPlotArea(container);\n const isSeries = maybeValue(series, defaultSeries);\n const crosshairsSetting = maybeValue(crosshairs, defaultShowCrosshairs);\n // For non-facet and series tooltip.\n if (isSeries && hasSeries(markState) && !facet) {\n return seriesTooltip(plotArea, Object.assign(Object.assign({}, rest), { theme, elements: selectG2Elements, scale,\n coordinate, crosshairs: crosshairsSetting, \n // the crosshairsX settings level: crosshairsX > crosshairs > false\n // it means crosshairsX default is false\n crosshairsX: maybeValue(maybeValue(crosshairsX, crosshairs), false), \n // crosshairsY default depend on the crossharisSettings\n crosshairsY: maybeValue(crosshairsY, crosshairsSetting), item,\n emitter }));\n }\n // For facet and series tooltip.\n if (isSeries && facet) {\n // Get sub view instances for this view.\n const facetInstances = viewInstances.filter((d) => d !== target && d.options.parentKey === target.options.key);\n const elements = selectFacetG2Elements(target, viewInstances);\n // Use the scale of the first view.\n const scale = facetInstances[0].view.scale;\n const bbox = plotArea.getBounds();\n const startX = bbox.min[0];\n const startY = bbox.min[1];\n Object.assign(scale, { facet: true });\n // @todo Nested structure rather than flat structure for facet?\n // Add listener to the root area.\n // @ts-ignore\n return seriesTooltip(plotArea.parentNode.parentNode, Object.assign(Object.assign({}, rest), { theme, elements: () => elements, scale,\n coordinate, crosshairs: maybeValue(crosshairs, defaultShowCrosshairs), \n // the crosshairsX settings level: crosshairsX > crosshairs > false\n // it means crosshairsX default is false\n crosshairsX: maybeValue(maybeValue(crosshairsX, crosshairs), false), crosshairsY: maybeValue(crosshairsY, crosshairsSetting), item,\n startX,\n startY,\n emitter }));\n }\n return tooltip(plotArea, Object.assign(Object.assign({}, rest), { datum: createDatumof(view), elements: selectG2Elements, scale,\n coordinate, groupKey: shared ? createXKey(view) : undefined, item,\n emitter,\n view,\n theme,\n shared }));\n };\n}\nTooltip.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=tooltip.js.map","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import { createContext, useContext } from 'react';\n// tslint:disable-next-line: no-object-literal-type-assertion\nexport var SceneContext = /*#__PURE__*/createContext({});\nexport function useSceneValue() {\n return useContext(SceneContext);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.flattenNames = undefined;\n\nvar _isString2 = require('lodash/isString');\n\nvar _isString3 = _interopRequireDefault(_isString2);\n\nvar _forOwn2 = require('lodash/forOwn');\n\nvar _forOwn3 = _interopRequireDefault(_forOwn2);\n\nvar _isPlainObject2 = require('lodash/isPlainObject');\n\nvar _isPlainObject3 = _interopRequireDefault(_isPlainObject2);\n\nvar _map2 = require('lodash/map');\n\nvar _map3 = _interopRequireDefault(_map2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar flattenNames = exports.flattenNames = function flattenNames() {\n var things = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n var names = [];\n\n (0, _map3.default)(things, function (thing) {\n if (Array.isArray(thing)) {\n flattenNames(thing).map(function (name) {\n return names.push(name);\n });\n } else if ((0, _isPlainObject3.default)(thing)) {\n (0, _forOwn3.default)(thing, function (value, key) {\n value === true && names.push(key);\n names.push(key + '-' + value);\n });\n } else if ((0, _isString3.default)(thing)) {\n names.push(thing);\n }\n });\n\n return names;\n};\n\nexports.default = flattenNames;","/**\n * Webpack has bug for import loop, which is not the same behavior as ES module.\n * When util.js imports the TreeNode for tree generate will cause treeContextTypes be empty.\n */\nimport * as React from 'react';\nexport var TreeContext = /*#__PURE__*/React.createContext(null);\n\n/** Internal usage, safe to remove. Do not use in prod */\nexport var UnstableContext = /*#__PURE__*/React.createContext({});","import { __extends, __read, __rest } from \"tslib\";\nimport { Component } from '../../core';\nimport { BBox, classNames, ifShow, parseSeriesAttr, select, splitStyle } from '../../util';\nvar CLASS_NAMES = classNames({\n text: 'text',\n}, 'title');\n/**\n * @example\n * lt -> ['l', 't']\n * left-top -> ['l', 't']\n * inner -> i\n */\nexport function parsePosition(position) {\n if (!/\\S+-\\S+/g.test(position))\n return position.length > 2 ? [position[0]] : position.split('');\n return position.split('-').map(function (str) {\n return str[0];\n });\n}\n/**\n * calculate the actual bbox of the element with title\n * @example a legend with width x, height y, but the real bbox is x1 < x, y1 < y\n */\nexport function getBBox(title, content) {\n var _a = title.attributes, position = _a.position, spacing = _a.spacing, inset = _a.inset, text = _a.text;\n var titleBBox = title.getBBox();\n var contentBBox = content.getBBox();\n var pos = parsePosition(position);\n var _b = __read(parseSeriesAttr(text ? spacing : 0), 4), spacingTop = _b[0], spacingRight = _b[1], spacingBottom = _b[2], spacingLeft = _b[3];\n var _c = __read(parseSeriesAttr(inset), 4), insetTop = _c[0], insetRight = _c[1], insetBottom = _c[2], insetLeft = _c[3];\n var _d = __read([spacingLeft + spacingRight, spacingTop + spacingBottom], 2), spacingWidth = _d[0], spacingHeight = _d[1];\n var _e = __read([insetLeft + insetRight, insetTop + insetBottom], 2), insetWidth = _e[0], insetHeight = _e[1];\n // 只基于第一个 pos 进行判断\n // 如果在左边或者上边,直接包围盒相加再加上间距\n if (pos[0] === 'l') {\n return new BBox(titleBBox.x, titleBBox.y, contentBBox.width + titleBBox.width + spacingWidth + insetWidth, Math.max(contentBBox.height + insetHeight, titleBBox.height));\n }\n if (pos[0] === 't') {\n return new BBox(titleBBox.x, titleBBox.y, Math.max(contentBBox.width + insetWidth, titleBBox.width), contentBBox.height + titleBBox.height + spacingHeight + insetHeight);\n }\n // 如果在右边或者下边,基于 content.width, content.height 相加再加上间距\n var _f = __read([\n content.attributes.width || contentBBox.width,\n content.attributes.height || contentBBox.height,\n ], 2), contentWidth = _f[0], contentHeight = _f[1];\n return new BBox(contentBBox.x, contentBBox.y, contentWidth + titleBBox.width + spacingWidth + insetWidth, contentHeight + titleBBox.height + spacingHeight + insetHeight);\n}\nfunction mayApplyStyle(el, style) {\n var finalStyle = Object.entries(style).reduce(function (acc, _a) {\n var _b = __read(_a, 2), key = _b[0], value = _b[1];\n var currAttr = el.node().attr(key);\n if (!currAttr)\n acc[key] = value;\n return acc;\n }, {});\n el.styles(finalStyle);\n}\nfunction getTitleLayout(cfg) {\n var _a, _b, _c, _d;\n var _e = cfg, width = _e.width, height = _e.height, position = _e.position;\n var _f = __read([+width / 2, +height / 2], 2), hW = _f[0], hH = _f[1];\n var _g = __read([+hW, +hH, 'center', 'middle'], 4), x = _g[0], y = _g[1], textAlign = _g[2], textBaseline = _g[3];\n var pos = parsePosition(position);\n if (pos.includes('l'))\n _a = __read([0, 'start'], 2), x = _a[0], textAlign = _a[1];\n if (pos.includes('r'))\n _b = __read([+width, 'end'], 2), x = _b[0], textAlign = _b[1];\n if (pos.includes('t'))\n _c = __read([0, 'top'], 2), y = _c[0], textBaseline = _c[1];\n if (pos.includes('b'))\n _d = __read([+height, 'bottom'], 2), y = _d[0], textBaseline = _d[1];\n return { x: x, y: y, textAlign: textAlign, textBaseline: textBaseline };\n}\nvar Title = /** @class */ (function (_super) {\n __extends(Title, _super);\n function Title(options) {\n return _super.call(this, options, {\n text: '',\n width: 0,\n height: 0,\n fill: '#4a505a',\n fontWeight: 'bold',\n fontSize: 12,\n fontFamily: 'sans-serif',\n inset: 0,\n spacing: 0,\n position: 'top-left',\n }) || this;\n }\n Title.prototype.getAvailableSpace = function () {\n var container = this;\n var _a = this.attributes, containerWidth = _a.width, containerHeight = _a.height, position = _a.position, spacing = _a.spacing, inset = _a.inset;\n var title = container.querySelector(CLASS_NAMES.text.class);\n if (!title)\n return new BBox(0, 0, +containerWidth, +containerHeight);\n var _b = title.getBBox(), titleWidth = _b.width, titleHeight = _b.height;\n var _c = __read(parseSeriesAttr(spacing), 4), spacingTop = _c[0], spacingRight = _c[1], spacingBottom = _c[2], spacingLeft = _c[3];\n var _d = __read([0, 0, +containerWidth, +containerHeight], 4), x = _d[0], y = _d[1], width = _d[2], height = _d[3];\n var pos = parsePosition(position);\n if (pos.includes('i'))\n return new BBox(x, y, width, height);\n pos.forEach(function (p, i) {\n var _a, _b, _c, _d;\n if (p === 't')\n _a = __read(i === 0\n ? [titleHeight + spacingBottom, +containerHeight - titleHeight - spacingBottom]\n : [0, +containerHeight], 2), y = _a[0], height = _a[1];\n if (p === 'r')\n _b = __read([+containerWidth - titleWidth - spacingLeft], 1), width = _b[0];\n if (p === 'b')\n _c = __read([+containerHeight - titleHeight - spacingTop], 1), height = _c[0];\n if (p === 'l')\n _d = __read(i === 0 ? [titleWidth + spacingRight, +containerWidth - titleWidth - spacingRight] : [0, +containerWidth], 2), x = _d[0], width = _d[1];\n });\n var _e = __read(parseSeriesAttr(inset), 4), insetTop = _e[0], insetRight = _e[1], insetBottom = _e[2], insetLeft = _e[3];\n var _f = __read([insetLeft + insetRight, insetTop + insetBottom], 2), insetWidth = _f[0], insetHeight = _f[1];\n return new BBox(x + insetLeft, y + insetTop, width - insetWidth, height - insetHeight);\n };\n Title.prototype.getBBox = function () {\n if (this.title)\n return this.title.getBBox();\n return new BBox(0, 0, 0, 0);\n };\n Title.prototype.render = function (attributes, container) {\n var _this = this;\n var width = attributes.width, height = attributes.height, position = attributes.position, spacing = attributes.spacing, restStyle = __rest(attributes, [\"width\", \"height\", \"position\", \"spacing\"]);\n var _a = __read(splitStyle(restStyle), 1), titleStyle = _a[0];\n var _b = getTitleLayout(attributes), x = _b.x, y = _b.y, textAlign = _b.textAlign, textBaseline = _b.textBaseline;\n ifShow(!!restStyle.text, select(container), function (group) {\n _this.title = group\n .maybeAppendByClassName(CLASS_NAMES.text, 'text')\n .styles(titleStyle)\n .call(mayApplyStyle, { x: x, y: y, textAlign: textAlign, textBaseline: textBaseline })\n .node();\n });\n };\n return Title;\n}(Component));\nexport { Title };\n//# sourceMappingURL=index.js.map","import isArrayLike from './is-array-like';\nvar filter = function (arr, func) {\n if (!isArrayLike(arr)) {\n return arr;\n }\n var result = [];\n for (var index = 0; index < arr.length; index++) {\n var value = arr[index];\n if (func(value, index)) {\n result.push(value);\n }\n }\n return result;\n};\nexport default filter;\n//# sourceMappingURL=filter.js.map","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","import { isPathArray } from './is-path-array';\n/**\n * Iterates an array to check if it's a `PathArray`\n * with all absolute values.\n */\nexport function isAbsoluteArray(path) {\n return (isPathArray(path) &&\n // @ts-ignore -- `isPathArray` also checks if it's `Array`\n path.every(function (_a) {\n var x = _a[0];\n return x === x.toUpperCase();\n }));\n}\n//# sourceMappingURL=is-absolute-array.js.map","\nmodule.exports = rewind;\n\nfunction rewind(gj, outer) {\n var type = gj && gj.type, i;\n\n if (type === 'FeatureCollection') {\n for (i = 0; i < gj.features.length; i++) rewind(gj.features[i], outer);\n\n } else if (type === 'GeometryCollection') {\n for (i = 0; i < gj.geometries.length; i++) rewind(gj.geometries[i], outer);\n\n } else if (type === 'Feature') {\n rewind(gj.geometry, outer);\n\n } else if (type === 'Polygon') {\n rewindRings(gj.coordinates, outer);\n\n } else if (type === 'MultiPolygon') {\n for (i = 0; i < gj.coordinates.length; i++) rewindRings(gj.coordinates[i], outer);\n }\n\n return gj;\n}\n\nfunction rewindRings(rings, outer) {\n if (rings.length === 0) return;\n\n rewindRing(rings[0], outer);\n for (var i = 1; i < rings.length; i++) {\n rewindRing(rings[i], !outer);\n }\n}\n\nfunction rewindRing(ring, dir) {\n var area = 0, err = 0;\n for (var i = 0, len = ring.length, j = len - 1; i < len; j = i++) {\n var k = (ring[i][0] - ring[j][0]) * (ring[j][1] + ring[i][1]);\n var m = area + k;\n err += Math.abs(area) >= Math.abs(k) ? area - m + k : k - m + area;\n area = m;\n }\n if (area + err >= 0 !== !!dir) ring.reverse();\n}\n","/**\n * 在一个升序的序列指定范围内 array[lo, hi) 二分查找一个值 x,返回最右边一个匹配的值后面的索引 i\n * https://github.com/d3/d3-array/blob/master/src/bisector.js\n * @param array 升序的目标数组\n * @param x 查找的值\n * @param lo 开始的索引\n * @param hi 结束的索引\n * @returns 最右边一个匹配的值后一个的索引\n */\nexport function bisect(array, x, lo, hi, getter) {\n let i = lo || 0;\n let j = hi || array.length;\n const get = getter || ((x) => x);\n while (i < j) {\n const mid = Math.floor((i + j) / 2);\n if (get(array[mid]) > x) {\n j = mid;\n }\n else {\n i = mid + 1;\n }\n }\n return i;\n}\n//# sourceMappingURL=bisect.js.map","import isArray from './is-array';\nvar clone = function (obj) {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n var rst;\n if (isArray(obj)) {\n rst = [];\n for (var i = 0, l = obj.length; i < l; i++) {\n if (typeof obj[i] === 'object' && obj[i] != null) {\n rst[i] = clone(obj[i]);\n }\n else {\n rst[i] = obj[i];\n }\n }\n }\n else {\n rst = {};\n for (var k in obj) {\n if (typeof obj[k] === 'object' && obj[k] != null) {\n rst[k] = clone(obj[k]);\n }\n else {\n rst[k] = obj[k];\n }\n }\n }\n return rst;\n};\nexport default clone;\n//# sourceMappingURL=clone.js.map","import { __assign, __extends, __rest } from \"tslib\";\nimport { deepMix } from '@antv/util';\nimport { DisplayObject, Group } from '../../shapes';\nimport { deepAssign, select } from '../../util';\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns(_a) {\n var _this = this;\n var style = _a.style, rest = __rest(_a, [\"style\"]);\n _this = _super.call(this, deepMix({}, { type: 'column' }, __assign({ style: style }, rest))) || this;\n _this.columnsGroup = new Group({ name: 'columns' });\n _this.appendChild(_this.columnsGroup);\n _this.render();\n return _this;\n }\n Columns.prototype.render = function () {\n var _a = this.attributes, columns = _a.columns, x = _a.x, y = _a.y;\n this.columnsGroup.style.transform = \"translate(\".concat(x, \", \").concat(y, \")\");\n select(this.columnsGroup)\n .selectAll('.column')\n .data(columns.flat())\n .join(function (enter) {\n return enter\n .append('rect')\n .attr('className', 'column')\n .each(function (style) {\n this.attr(style);\n });\n }, function (update) {\n return update.each(function (style) {\n this.attr(style);\n });\n }, function (exit) { return exit.remove(); });\n };\n Columns.prototype.update = function (attr) {\n this.attr(deepAssign({}, this.attributes, attr));\n this.render();\n };\n Columns.prototype.clear = function () {\n this.removeChildren();\n };\n return Columns;\n}(DisplayObject));\nexport { Columns };\n//# sourceMappingURL=columns.js.map","import { __assign, __extends, __rest } from \"tslib\";\nimport { deepMix } from '@antv/util';\nimport { DisplayObject, Group } from '../../shapes';\nimport { deepAssign, select } from '../../util';\nvar Lines = /** @class */ (function (_super) {\n __extends(Lines, _super);\n function Lines(_a) {\n var _this = this;\n var style = _a.style, rest = __rest(_a, [\"style\"]);\n _this = _super.call(this, deepMix({}, { type: 'lines' }, __assign({ style: style }, rest))) || this;\n _this.linesGroup = _this.appendChild(new Group());\n _this.areasGroup = _this.appendChild(new Group());\n _this.render();\n return _this;\n }\n Lines.prototype.render = function () {\n var _a = this.attributes, lines = _a.lines, areas = _a.areas, x = _a.x, y = _a.y;\n this.style.transform = \"translate(\".concat(x, \", \").concat(y, \")\");\n if (lines)\n this.renderLines(lines);\n if (areas)\n this.renderAreas(areas);\n };\n Lines.prototype.clear = function () {\n this.linesGroup.removeChildren();\n this.areasGroup.removeChildren();\n };\n Lines.prototype.update = function (attr) {\n this.attr(deepAssign({}, this.attributes, attr));\n this.render();\n };\n Lines.prototype.renderLines = function (lines) {\n select(this.linesGroup)\n .selectAll('.line')\n .data(lines)\n .join(function (enter) {\n return enter\n .append('path')\n .attr('className', 'line')\n .each(function (style) {\n this.attr(style);\n });\n }, function (update) {\n return update.each(function (style) {\n this.attr(style);\n });\n }, function (exit) { return exit.remove(); });\n };\n Lines.prototype.renderAreas = function (areas) {\n select(this.linesGroup)\n .selectAll('.area')\n .data(areas)\n .join(function (enter) {\n return enter\n .append('path')\n .attr('className', 'area')\n .each(function (style) {\n this.attr(style);\n });\n }, function (update) {\n return update.each(function (style) {\n this.style(style);\n });\n }, function (exit) { return exit.remove(); });\n };\n return Lines;\n}(DisplayObject));\nexport { Lines };\n//# sourceMappingURL=lines.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { clone, isEqual, clamp } from '@antv/util';\nimport { catmullRom2Bezier } from '../../util';\n/**\n * 根据数据获得每条线各点x,y值\n */\nexport function dataToLines(data, scales) {\n var _a;\n var x = scales.x, y = scales.y;\n var _b = __read((y.getOptions().range || [0, 0]), 2), max = _b[0], min = _b[1];\n if (min > max)\n _a = __read([max, min], 2), min = _a[0], max = _a[1];\n return data.map(function (points) {\n var lines = points.map(function (val, idx) {\n return [x.map(idx), clamp(y.map(val), min, max)];\n });\n return lines;\n });\n}\n/**\n * 根据线的点数据生成折线path\n */\nexport function lineToLinePath(line, reverse) {\n if (reverse === void 0) { reverse = false; }\n var M = reverse ? line.length - 1 : 0;\n var linePath = line.map(function (point, idx) { return __spreadArray([idx === M ? 'M' : 'L'], __read(point), false); });\n return reverse ? linePath.reverse() : linePath;\n}\n/**\n * 根据点数据生成曲线path\n * @param points 点数据\n * @param reverse 是否倒序生成\n */\nexport function lineToCurvePath(line, reverse) {\n if (reverse === void 0) { reverse = false; }\n if (line.length <= 2) {\n return lineToLinePath(line);\n }\n var data = [];\n var len = line.length;\n for (var idx = 0; idx < len; idx += 1) {\n var point = reverse ? line[len - idx - 1] : line[idx];\n if (!isEqual(point, data.slice(-2))) {\n data.push.apply(data, __spreadArray([], __read(point), false));\n }\n }\n var path = catmullRom2Bezier(data, false);\n if (reverse) {\n path.unshift(__spreadArray(['M'], __read(line[len - 1]), false));\n }\n else {\n path.unshift(__spreadArray(['M'], __read(line[0]), false));\n }\n return path;\n}\n/**\n * 根据baseline将path闭合\n */\nexport function closePathByBaseLine(path, width, baseline) {\n var closedPath = clone(path);\n closedPath.push(['L', width, baseline], ['L', 0, baseline], ['Z']);\n return closedPath;\n}\n/**\n * 将多条线的点数据生成区域path\n * 可以是折线或曲线\n */\nexport function linesToAreaPaths(lines, smooth, width, baseline) {\n return lines.map(function (line) {\n return closePathByBaseLine(smooth ? lineToCurvePath(line) : lineToLinePath(line), width, baseline);\n });\n}\n/**\n * 生成折线堆叠区域封闭图形路径\n */\nexport function linesToStackAreaPaths(lines, width, baseline) {\n var paths = [];\n for (var idx = lines.length - 1; idx >= 0; idx -= 1) {\n var currLine = lines[idx];\n var currCurvePath = lineToLinePath(currLine);\n var path = void 0;\n if (idx === 0) {\n // 最底部的线直接与y=0连接成闭合区域\n path = closePathByBaseLine(currCurvePath, width, baseline);\n }\n else {\n // 计算下一根曲线的反向路径\n var belowLine = lines[idx - 1];\n var belowCurvePath = lineToLinePath(belowLine, true);\n belowCurvePath[0][0] = 'L';\n // 连接路径\n path = __spreadArray(__spreadArray(__spreadArray([], __read(currCurvePath), false), __read(belowCurvePath), false), [['Z']], false);\n }\n paths.push(path);\n }\n return paths;\n}\n/**\n * 生成曲线堆叠区域封闭图形路径\n */\nexport function linesToStackCurveAreaPaths(lines, width, baseline) {\n var paths = [];\n for (var idx = lines.length - 1; idx >= 0; idx -= 1) {\n var currLine = lines[idx];\n var currCurvePath = lineToCurvePath(currLine);\n var path = void 0;\n if (idx === 0) {\n // 最底部的线直接与y=0连接成闭合区域\n path = closePathByBaseLine(currCurvePath, width, baseline);\n }\n else {\n // 计算下一根曲线的反向路径\n var belowLine = lines[idx - 1];\n var belowCurvePath = lineToCurvePath(belowLine, true);\n /**\n * 将线条连接成闭合路径\n * M C C C C C\n * A ~ -> ~ B\n * ⬆ ⬇\n * D ~ <- ~ C\n * C C C C C M\n *\n */\n var A = currLine[0];\n // const B = currLine[currLine.length - 1];\n // const C = belowLine[belowLine.length - 1];\n // const D = belowLine[0];\n // 将反向曲线开头 M X Y 改为 L X Y\n belowCurvePath[0][0] = 'L';\n // 连接路径\n path = __spreadArray(__spreadArray(__spreadArray([], __read(currCurvePath), false), __read(belowCurvePath), false), [__spreadArray(['M'], __read(A), false), ['Z']], false);\n }\n paths.push(path);\n }\n return paths;\n}\n//# sourceMappingURL=path.js.map","import { __read } from \"tslib\";\nimport { add, sub, min as _min, max as _max, scale, distance } from './matrix';\nfunction smoothBezier(points, smooth, isLoop, constraint) {\n var _a;\n var cps = [];\n var hasConstraint = !!constraint;\n var prevPoint;\n var nextPoint;\n var min = [Infinity, Infinity];\n var max = [-Infinity, -Infinity];\n var nextCp0;\n var cp1;\n var cp0;\n if (hasConstraint) {\n _a = __read(constraint, 2), min = _a[0], max = _a[1];\n for (var i = 0, l = points.length; i < l; i += 1) {\n var point = points[i];\n min = _min(min, point);\n max = _max(max, point);\n }\n }\n for (var i = 0, len = points.length; i < len; i += 1) {\n var point = points[i];\n if (i === 0 && !isLoop) {\n cp0 = point;\n }\n else if (i === len - 1 && !isLoop) {\n cp1 = point;\n cps.push(cp0);\n cps.push(cp1);\n }\n else {\n var prevIdx = [i ? i - 1 : len - 1, i - 1][isLoop ? 0 : 1];\n prevPoint = points[prevIdx];\n nextPoint = points[isLoop ? (i + 1) % len : i + 1];\n var v = [0, 0];\n v = sub(nextPoint, prevPoint);\n v = scale(v, smooth);\n var d0 = distance(point, prevPoint);\n var d1 = distance(point, nextPoint);\n var sum = d0 + d1;\n if (sum !== 0) {\n d0 /= sum;\n d1 /= sum;\n }\n var v1 = scale(v, -d0);\n var v2 = scale(v, d1);\n cp1 = add(point, v1);\n nextCp0 = add(point, v2);\n // 下一个控制点必须在这个点和下一个点之间\n nextCp0 = _min(nextCp0, _max(nextPoint, point));\n nextCp0 = _max(nextCp0, _min(nextPoint, point));\n // 重新计算 cp1 的值\n v1 = sub(nextCp0, point);\n v1 = scale(v1, -d0 / d1);\n cp1 = add(point, v1);\n // 上一个控制点必须要在上一个点和这一个点之间\n cp1 = _min(cp1, _max(prevPoint, point));\n cp1 = _max(cp1, _min(prevPoint, point));\n // 重新计算 nextCp0 的值\n v2 = sub(point, cp1);\n v2 = scale(v2, d1 / d0);\n nextCp0 = add(point, v2);\n if (hasConstraint) {\n cp1 = _max(cp1, min);\n cp1 = _min(cp1, max);\n nextCp0 = _max(nextCp0, min);\n nextCp0 = _min(nextCp0, max);\n }\n cps.push(cp0);\n cps.push(cp1);\n cp0 = nextCp0;\n }\n }\n if (isLoop) {\n cps.push(cps.shift());\n }\n return cps;\n}\n/**\n * create bezier spline from catmull rom spline\n * @param {Array} crp Catmull Rom Points\n * @param {boolean} z Spline is loop\n * @param {Array} constraint Constraint\n */\nexport function catmullRom2Bezier(crp, z, constraint) {\n var _a;\n if (z === void 0) { z = false; }\n if (constraint === void 0) { constraint = [\n [0, 0],\n [1, 1],\n ]; }\n var isLoop = !!z;\n var pointList = [];\n for (var i = 0, l = crp.length; i < l; i += 2) {\n pointList.push([crp[i], crp[i + 1]]);\n }\n var controlPointList = smoothBezier(pointList, 0.4, isLoop, constraint);\n var len = pointList.length;\n var d1 = [];\n var cp1;\n var cp2;\n var p;\n for (var i = 0; i < len - 1; i += 1) {\n cp1 = controlPointList[i * 2];\n cp2 = controlPointList[i * 2 + 1];\n p = pointList[i + 1];\n d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]]);\n }\n if (isLoop) {\n cp1 = controlPointList[len];\n cp2 = controlPointList[len + 1];\n _a = __read(pointList, 1), p = _a[0];\n d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]]);\n }\n return d1;\n}\n//# sourceMappingURL=path.js.map","import isArray from './is-array';\nimport isFunction from './is-function';\n/**\n * @param {Array} arr The array to iterate over.\n * @param {Function} [fn] The iteratee invoked per element.\n * @return {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nexport default (function (arr, fn) {\n if (!isArray(arr)) {\n return undefined;\n }\n var minItem;\n var min = Infinity;\n for (var i = 0; i < arr.length; i++) {\n var item = arr[i];\n var v = isFunction(fn) ? fn(item) : item[fn];\n if (v < min) {\n minItem = item;\n min = v;\n }\n }\n return minItem;\n});\n//# sourceMappingURL=min-by.js.map","import isArray from './is-array';\nimport isFunction from './is-function';\n/**\n * @param {Array} arr The array to iterate over.\n * @param {Function} [fn] The iteratee invoked per element.\n * @return {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\nexport default (function (arr, fn) {\n if (!isArray(arr)) {\n return undefined;\n }\n var maxItem;\n var max = -Infinity;\n for (var i = 0; i < arr.length; i++) {\n var item = arr[i];\n var v = isFunction(fn) ? fn(item) : item[fn];\n if (v > max) {\n maxItem = item;\n max = v;\n }\n }\n return maxItem;\n});\n//# sourceMappingURL=max-by.js.map","import { __read } from \"tslib\";\nimport { clone, min, minBy, max, maxBy } from '@antv/util';\n/**\n * 获得数据的最值\n */\nexport function getRange(data) {\n if (data.length === 0)\n return [0, 0];\n return [\n min(minBy(data, function (arr) { return min(arr) || 0; })),\n max(maxBy(data, function (arr) { return max(arr) || 0; })),\n ];\n}\n/**\n * 数据转换为堆叠数据\n */\nexport function getStackedData(_) {\n var data = clone(_);\n // 生成堆叠数据\n var datumLen = data[0].length;\n // 上一个堆叠的数据值,分别记录正负\n var _a = __read([Array(datumLen).fill(0), Array(datumLen).fill(0)], 2), positivePrev = _a[0], negativePrev = _a[1];\n for (var i = 0; i < data.length; i += 1) {\n var datum = data[i];\n for (var j = 0; j < datumLen; j += 1) {\n if (datum[j] >= 0) {\n datum[j] += positivePrev[j];\n positivePrev[j] = datum[j];\n }\n else {\n datum[j] += negativePrev[j];\n negativePrev[j] = datum[j];\n }\n }\n }\n return data;\n}\n//# sourceMappingURL=utils.js.map","import { __assign, __extends, __read } from \"tslib\";\nimport { Band, Linear } from '@antv/scale';\nimport { clone, isArray, isFunction, isNumber } from '@antv/util';\nimport { Component } from '../../core';\nimport { maybeAppend, select, subStyleProps } from '../../util';\nimport { Columns } from './columns';\nimport { Lines } from './lines';\nimport { dataToLines, lineToCurvePath, lineToLinePath, linesToAreaPaths, linesToStackAreaPaths, linesToStackCurveAreaPaths, } from './path';\nimport { getRange, getStackedData } from './utils';\nvar Sparkline = /** @class */ (function (_super) {\n __extends(Sparkline, _super);\n function Sparkline(options) {\n return _super.call(this, options, {\n type: 'line',\n x: 0,\n y: 0,\n width: 200,\n height: 20,\n isStack: false,\n color: ['#83daad', '#edbf45', '#d2cef9', '#e290b3', '#6f63f4'],\n smooth: true,\n lineLineWidth: 1,\n areaOpacity: 0,\n isGroup: false,\n columnLineWidth: 1,\n columnStroke: '#fff',\n scale: 1,\n spacing: 0,\n }) || this;\n }\n Object.defineProperty(Sparkline.prototype, \"rawData\", {\n /**\n * 将data统一格式化为数组形式\n * 如果堆叠,则生成堆叠数据\n */\n get: function () {\n var rawData = this.attributes.data;\n if (!rawData || (rawData === null || rawData === void 0 ? void 0 : rawData.length) === 0)\n return [[]];\n var data = clone(rawData);\n // number[] -> number[][]\n return isNumber(data[0]) ? [data] : data;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Sparkline.prototype, \"data\", {\n get: function () {\n if (this.attributes.isStack)\n return getStackedData(this.rawData);\n return this.rawData;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Sparkline.prototype, \"scales\", {\n get: function () {\n return this.createScales(this.data);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Sparkline.prototype, \"baseline\", {\n /**\n * 基准线,默认为 0\n */\n get: function () {\n var y = this.scales.y;\n var _a = __read(y.getOptions().domain || [0, 0], 2), y1 = _a[0], y2 = _a[1];\n if (y2 < 0) {\n return y.map(y2);\n }\n return y.map(y1 < 0 ? 0 : y1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Sparkline.prototype, \"containerShape\", {\n get: function () {\n var _a = this.attributes, width = _a.width, height = _a.height;\n return { width: width, height: height };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Sparkline.prototype, \"linesStyle\", {\n get: function () {\n var _this = this;\n var _a = this.attributes, type = _a.type, isStack = _a.isStack, smooth = _a.smooth;\n if (type !== 'line')\n throw new Error('linesStyle can only be used in line type');\n var areaStyle = subStyleProps(this.attributes, 'area');\n var lineStyle = subStyleProps(this.attributes, 'line');\n var width = this.containerShape.width;\n var data = this.data;\n if (data[0].length === 0)\n return { lines: [], areas: [] };\n var _b = this.scales, x = _b.x, y = _b.y;\n // 线条Path\n var lines = dataToLines(data, { type: 'line', x: x, y: y });\n // 生成区域path\n var areas = [];\n if (areaStyle) {\n var baseline = this.baseline;\n if (isStack) {\n areas = smooth\n ? linesToStackCurveAreaPaths(lines, width, baseline)\n : linesToStackAreaPaths(lines, width, baseline);\n }\n else {\n areas = linesToAreaPaths(lines, smooth, width, baseline);\n }\n }\n return {\n lines: lines.map(function (line, idx) {\n return __assign({ stroke: _this.getColor(idx), d: smooth ? lineToCurvePath(line) : lineToLinePath(line) }, lineStyle);\n }),\n areas: areas.map(function (path, idx) {\n return __assign({ d: path, fill: _this.getColor(idx) }, areaStyle);\n }),\n };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Sparkline.prototype, \"columnsStyle\", {\n get: function () {\n var _this = this;\n var columnStyle = subStyleProps(this.attributes, 'column');\n var _a = this.attributes, isStack = _a.isStack, type = _a.type, scale = _a.scale;\n if (type !== 'column')\n throw new Error('columnsStyle can only be used in column type');\n var height = this.containerShape.height;\n var data = this.rawData;\n if (!data)\n return { columns: [] };\n if (isStack)\n data = getStackedData(data);\n var _b = this.createScales(data), x = _b.x, y = _b.y;\n var _c = __read(getRange(data), 2), minVal = _c[0], maxVal = _c[1];\n var heightScale = new Linear({\n domain: [0, maxVal - (minVal > 0 ? 0 : minVal)],\n range: [0, height * scale],\n });\n var bandWidth = x.getBandWidth();\n var rawData = this.rawData;\n return {\n columns: data.map(function (column, i) {\n return column.map(function (val, j) {\n var barWidth = bandWidth / data.length;\n var getShape = function () {\n return {\n x: x.map(j) + barWidth * i,\n y: val >= 0 ? y.map(val) : y.map(0),\n width: barWidth,\n height: heightScale.map(Math.abs(val)),\n };\n };\n var getStackShape = function () {\n return {\n x: x.map(j),\n y: y.map(val),\n width: bandWidth,\n height: heightScale.map(rawData[i][j]),\n };\n };\n return __assign(__assign({ fill: _this.getColor(i) }, columnStyle), (isStack ? getStackShape() : getShape()));\n });\n }),\n };\n },\n enumerable: false,\n configurable: true\n });\n Sparkline.prototype.render = function (attributes, container) {\n maybeAppend(container, '.container', 'rect').attr('className', 'container').node();\n var type = attributes.type, x = attributes.x, y = attributes.y;\n var className = \"spark\".concat(type);\n var style = __assign({ x: x, y: y }, (type === 'line' ? this.linesStyle : this.columnsStyle));\n select(container)\n .selectAll('.spark')\n .data([type])\n .join(function (enter) {\n return enter\n .append(function (type) {\n if (type === 'line')\n return new Lines({ className: className, style: style });\n return new Columns({ className: className, style: style });\n })\n .attr('className', \"spark \".concat(className));\n }, function (update) { return update.update(style); }, function (exit) { return exit.remove(); });\n };\n /**\n * 根据数据索引获取color\n */\n Sparkline.prototype.getColor = function (index) {\n var color = this.attributes.color;\n if (isArray(color)) {\n return color[index % color.length];\n }\n if (isFunction(color)) {\n return color.call(null, index);\n }\n return color;\n };\n /**\n * 根据数据生成scale\n */\n Sparkline.prototype.createScales = function (data) {\n var _a, _b;\n var _c = this.attributes, type = _c.type, scale = _c.scale, _d = _c.range, range = _d === void 0 ? [] : _d, spacing = _c.spacing;\n var _e = this.containerShape, width = _e.width, height = _e.height;\n var _f = __read(getRange(data), 2), minVal = _f[0], maxVal = _f[1];\n var yScale = new Linear({\n domain: [(_a = range[0]) !== null && _a !== void 0 ? _a : minVal, (_b = range[1]) !== null && _b !== void 0 ? _b : maxVal],\n range: [height, height * (1 - scale)],\n });\n if (type === 'line') {\n return {\n type: type,\n x: new Linear({\n domain: [0, data[0].length - 1],\n range: [0, width],\n }),\n y: yScale,\n };\n }\n return {\n type: type,\n x: new Band({\n domain: data[0].map(function (val, idx) { return idx; }),\n range: [0, width],\n paddingInner: spacing,\n paddingOuter: spacing / 2,\n align: 0.5,\n }),\n y: yScale,\n };\n };\n Sparkline.tag = 'sparkline';\n return Sparkline;\n}(Component));\nexport { Sparkline };\n//# sourceMappingURL=index.js.map","import { __assign, __extends, __read } from \"tslib\";\nimport { CustomEvent } from '@antv/g';\nimport { clamp } from '@antv/util';\nimport { transition } from '../../animation';\nimport { Component } from '../../core';\nimport { Text } from '../../shapes';\nimport { getEventPos, ifShow, parseSeriesAttr, select, subStyleProps, superStyleProps, toPrecision } from '../../util';\nimport { Sparkline } from '../sparkline';\nimport { CLASS_NAMES, HANDLE_DEFAULT_CFG, HANDLE_ICON_DEFAULT_CFG, HANDLE_LABEL_DEFAULT_CFG } from './constant';\nimport { Handle } from './handle';\nvar Slider = /** @class */ (function (_super) {\n __extends(Slider, _super);\n function Slider(options) {\n var _this = _super.call(this, options, __assign(__assign(__assign({ x: 0, y: 0, animate: { duration: 100, fill: 'both' }, brushable: true, formatter: function (val) { return val.toString(); }, handleSpacing: 2, orientation: 'horizontal', padding: 0, autoFitLabel: true, scrollable: true, selectionFill: '#5B8FF9', selectionFillOpacity: 0.45, selectionZIndex: 2, showHandle: true, showLabel: true, slidable: true, trackFill: '#416180', trackLength: 200, trackOpacity: 0.05, trackSize: 20, trackZIndex: -1, values: [0, 1], type: 'range', selectionType: 'select', handleIconOffset: 0 }, superStyleProps(HANDLE_DEFAULT_CFG, 'handle')), superStyleProps(HANDLE_ICON_DEFAULT_CFG, 'handleIcon')), superStyleProps(HANDLE_LABEL_DEFAULT_CFG, 'handleLabel'))) || this;\n _this.range = [0, 1];\n _this.onDragStart = function (target) { return function (e) {\n e.stopPropagation();\n _this.target = target;\n _this.prevPos = _this.getOrientVal(getEventPos(e));\n var _a = _this.availableSpace, x = _a.x, y = _a.y;\n var _b = _this.getBBox(), X = _b.x, Y = _b.y;\n _this.selectionStartPos = _this.getRatio(_this.prevPos - _this.getOrientVal([x, y]) - _this.getOrientVal([+X, +Y]));\n _this.selectionWidth = 0;\n document.addEventListener('pointermove', _this.onDragging);\n document.addEventListener('pointerup', _this.onDragEnd);\n }; };\n _this.onDragging = function (e) {\n var _a = _this.attributes, slidable = _a.slidable, brushable = _a.brushable, type = _a.type;\n e.stopPropagation();\n var currPos = _this.getOrientVal(getEventPos(e));\n var diffPos = currPos - _this.prevPos;\n if (!diffPos)\n return;\n var deltaVal = _this.getRatio(diffPos);\n switch (_this.target) {\n case 'start':\n if (slidable)\n _this.setValuesOffset(deltaVal);\n break;\n case 'end':\n if (slidable)\n _this.setValuesOffset(0, deltaVal);\n break;\n case 'selection':\n if (slidable)\n _this.setValuesOffset(deltaVal, deltaVal);\n break;\n case 'track':\n if (!brushable)\n return;\n // 绘制蒙板\n _this.selectionWidth += deltaVal;\n if (type === 'range') {\n _this.innerSetValues([_this.selectionStartPos, _this.selectionStartPos + _this.selectionWidth].sort(), true);\n }\n else\n _this.innerSetValues([0, _this.selectionStartPos + _this.selectionWidth], true);\n break;\n default:\n break;\n }\n _this.prevPos = currPos;\n };\n _this.onDragEnd = function () {\n document.removeEventListener('pointermove', _this.onDragging);\n document.removeEventListener('pointermove', _this.onDragging);\n document.removeEventListener('pointerup', _this.onDragEnd);\n _this.target = '';\n // 更新 handle 状态\n _this.updateHandlesPosition(false);\n };\n _this.onValueChange = function (oldValue) {\n var _a = _this.attributes, onChange = _a.onChange, type = _a.type;\n var internalOldValue = type === 'range' ? oldValue : oldValue[1];\n var value = type === 'range' ? _this.getValues() : _this.getValues()[1];\n var evt = new CustomEvent('valuechange', {\n detail: { oldValue: internalOldValue, value: value },\n });\n _this.dispatchEvent(evt);\n onChange === null || onChange === void 0 ? void 0 : onChange(value);\n };\n _this.selectionStartPos = 0;\n _this.selectionWidth = 0;\n _this.prevPos = 0;\n _this.target = '';\n return _this;\n }\n Object.defineProperty(Slider.prototype, \"values\", {\n get: function () {\n return this.attributes.values;\n },\n set: function (values) {\n this.attributes.values = this.clampValues(values);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Slider.prototype, \"sparklineStyle\", {\n get: function () {\n var orientation = this.attributes.orientation;\n if (orientation !== 'horizontal')\n return null;\n var attr = subStyleProps(this.attributes, 'sparkline');\n return __assign(__assign({ zIndex: 0 }, this.availableSpace), attr);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Slider.prototype, \"shape\", {\n get: function () {\n var _a = this.attributes, trackLength = _a.trackLength, trackSize = _a.trackSize;\n var _b = __read(this.getOrientVal([\n [trackLength, trackSize],\n [trackSize, trackLength],\n ]), 2), width = _b[0], height = _b[1];\n return { width: width, height: height };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Slider.prototype, \"availableSpace\", {\n get: function () {\n var _a = this.attributes, x = _a.x, y = _a.y, padding = _a.padding;\n var _b = __read(parseSeriesAttr(padding), 4), top = _b[0], right = _b[1], bottom = _b[2], left = _b[3];\n var _c = this.shape, width = _c.width, height = _c.height;\n return {\n x: left,\n y: top,\n width: width - (left + right),\n height: height - (top + bottom),\n };\n },\n enumerable: false,\n configurable: true\n });\n Slider.prototype.getValues = function () {\n return this.values;\n };\n /** 不触发重绘 */\n Slider.prototype.setValues = function (values, animate) {\n if (values === void 0) { values = [0, 0]; }\n if (animate === void 0) { animate = false; }\n this.attributes.values = values;\n var animation = animate === false ? false : this.attributes.animate;\n this.updateSelectionArea(animation);\n this.updateHandlesPosition(animation);\n };\n Slider.prototype.updateSelectionArea = function (animation) {\n var newSelectionArea = this.calcSelectionArea();\n this.foregroundGroup.selectAll(CLASS_NAMES.selection.class).each(function (datum, index) {\n transition(this, newSelectionArea[index], animation);\n });\n };\n Slider.prototype.updateHandlesPosition = function (animation) {\n if (!this.attributes.showHandle)\n return;\n this.startHandle && transition(this.startHandle, this.getHandleStyle('start'), animation);\n this.endHandle && transition(this.endHandle, this.getHandleStyle('end'), animation);\n };\n Slider.prototype.innerSetValues = function (values, trigger) {\n if (values === void 0) { values = [0, 0]; }\n if (trigger === void 0) { trigger = false; }\n var oldValues = this.values;\n var newValues = this.clampValues(values);\n this.attributes.values = newValues;\n this.setValues(newValues);\n if (trigger) {\n this.onValueChange(oldValues);\n }\n };\n Slider.prototype.renderTrack = function (container) {\n var _a = this.attributes, x = _a.x, y = _a.y;\n var style = subStyleProps(this.attributes, 'track');\n this.trackShape = select(container)\n .maybeAppendByClassName(CLASS_NAMES.track, 'rect')\n .styles(__assign(__assign({ x: x, y: y }, this.shape), style));\n };\n Slider.prototype.renderBrushArea = function (container) {\n var _a = this.attributes, x = _a.x, y = _a.y, brushable = _a.brushable;\n this.brushArea = select(container)\n .maybeAppendByClassName(CLASS_NAMES.brushArea, 'rect')\n .styles(__assign({ x: x, y: y, fill: 'transparent', cursor: brushable ? 'crosshair' : 'default' }, this.shape));\n };\n Slider.prototype.renderSparkline = function (container) {\n var _this = this;\n var _a = this.attributes, x = _a.x, y = _a.y, orientation = _a.orientation;\n var sparklineGroup = select(container).maybeAppendByClassName(CLASS_NAMES.sparklineGroup, 'g');\n ifShow(orientation === 'horizontal', sparklineGroup, function (group) {\n var style = __assign(__assign({}, _this.sparklineStyle), { x: x, y: y });\n group.maybeAppendByClassName(CLASS_NAMES.sparkline, function () { return new Sparkline({ style: style }); }).update(style);\n });\n };\n Slider.prototype.renderHandles = function () {\n var _this = this;\n var _a;\n var _b = this.attributes, showHandle = _b.showHandle, type = _b.type;\n var availableHandle = type === 'range' ? ['start', 'end'] : ['end'];\n var data = showHandle ? availableHandle : [];\n var that = this;\n (_a = this.foregroundGroup) === null || _a === void 0 ? void 0 : _a.selectAll(CLASS_NAMES.handle.class).data(data.map(function (type) { return ({ type: type }); }), function (d) { return d.type; }).join(function (enter) {\n return enter\n .append(function (_a) {\n var type = _a.type;\n return new Handle({ style: _this.getHandleStyle(type) });\n })\n .each(function (_a) {\n var type = _a.type;\n this.attr('class', \"\".concat(CLASS_NAMES.handle.name, \" \").concat(type, \"-handle\"));\n var name = \"\".concat(type, \"Handle\");\n that[name] = this;\n this.addEventListener('pointerdown', that.onDragStart(type));\n });\n }, function (update) {\n return update.each(function (_a) {\n var type = _a.type;\n this.update(that.getHandleStyle(type));\n });\n }, function (exit) {\n return exit\n .each(function (_a) {\n var type = _a.type;\n var name = \"\".concat(type, \"Handle\");\n that[name] = undefined;\n })\n .remove();\n });\n };\n Slider.prototype.renderSelection = function (container) {\n var _a = this.attributes, x = _a.x, y = _a.y, type = _a.type, selectionType = _a.selectionType;\n this.foregroundGroup = select(container).maybeAppendByClassName(CLASS_NAMES.foreground, 'g');\n // value 类型的 slider 不渲染选区\n var selectionStyle = subStyleProps(this.attributes, 'selection');\n var applyStyle = function (selection) {\n return selection\n .style('visibility', function (d) { return (d.show ? 'visible' : 'hidden'); })\n .style('cursor', function (d) {\n if (selectionType === 'select')\n return 'grab';\n if (selectionType === 'invert')\n return 'crosshair';\n return 'default';\n })\n .styles(__assign(__assign({}, selectionStyle), { transform: \"translate(\".concat(x, \", \").concat(y, \")\") }));\n };\n var that = this;\n this.foregroundGroup\n .selectAll(CLASS_NAMES.selection.class)\n .data(type === 'value'\n ? []\n : this.calcSelectionArea().map(function (area, index) { return ({\n style: __assign({}, area),\n index: index,\n // 是否可见\n show: selectionType === 'select' ? index === 1 : index !== 1,\n }); }), function (d) { return d.index; })\n .join(function (enter) {\n return enter\n .append('rect')\n .attr('className', CLASS_NAMES.selection.name)\n .call(applyStyle)\n .each(function (datum, index) {\n var _this = this;\n if (index === 1) {\n that.selectionShape = select(this);\n // 选区drag事件\n this.on('pointerdown', function (e) {\n _this.attr('cursor', 'grabbing');\n that.onDragStart('selection')(e);\n });\n // 选区hover事件\n that.dispatchCustomEvent(this, 'pointerenter', 'selectionMouseenter');\n that.dispatchCustomEvent(this, 'pointerleave', 'selectionMouseleave');\n that.dispatchCustomEvent(this, 'click', 'selectionClick');\n // 拖拽交互\n this.addEventListener('pointerdown', function () {\n _this.attr('cursor', 'grabbing');\n });\n this.addEventListener('pointerup', function () {\n _this.attr('cursor', 'pointer');\n });\n this.addEventListener('pointerover', function () {\n _this.attr('cursor', 'pointer');\n });\n }\n else {\n this.on('pointerdown', that.onDragStart('track'));\n }\n });\n }, function (update) { return update.call(applyStyle); }, function (exit) { return exit.remove(); });\n this.updateSelectionArea(false);\n this.renderHandles();\n };\n Slider.prototype.render = function (attributes, container) {\n this.renderTrack(container);\n this.renderSparkline(container);\n this.renderBrushArea(container);\n this.renderSelection(container);\n };\n Slider.prototype.clampValues = function (values, precision) {\n var _a;\n if (precision === void 0) { precision = 4; }\n var _b = __read(this.range, 2), min = _b[0], max = _b[1];\n var _c = __read(this.getValues().map(function (num) { return toPrecision(num, precision); }), 2), prevStart = _c[0], prevEnd = _c[1];\n var internalValues = Array.isArray(values) ? values : [prevStart, values !== null && values !== void 0 ? values : prevEnd];\n var _d = __read((internalValues || [prevStart, prevEnd]).map(function (num) { return toPrecision(num, precision); }), 2), startVal = _d[0], endVal = _d[1];\n if (this.attributes.type === 'value')\n return [0, clamp(endVal, min, max)];\n // 交换startVal endVal\n if (startVal > endVal) {\n _a = __read([endVal, startVal], 2), startVal = _a[0], endVal = _a[1];\n }\n var range = endVal - startVal;\n // 超出范围就全选\n if (range > max - min)\n return [min, max];\n if (startVal < min) {\n if (prevStart === min && prevEnd === endVal)\n return [min, endVal];\n return [min, range + min];\n }\n if (endVal > max) {\n if (prevEnd === max && prevStart === startVal)\n return [startVal, max];\n return [max - range, max];\n }\n // 保留小数\n return [startVal, endVal];\n };\n /**\n * 计算选区坐标和宽高\n * 默认用来计算前景位置大小\n */\n Slider.prototype.calcSelectionArea = function (values) {\n var _a = __read(this.clampValues(values), 2), start = _a[0], end = _a[1];\n var _b = this.availableSpace, x = _b.x, y = _b.y, width = _b.width, height = _b.height;\n // 中间为选区,两端为反选区\n return this.getOrientVal([\n [\n { y: y, height: height, x: x, width: start * width },\n { y: y, height: height, x: start * width + x, width: (end - start) * width },\n { y: y, height: height, x: end * width, width: (1 - end) * width },\n ],\n [\n { x: x, width: width, y: y, height: start * height },\n { x: x, width: width, y: start * height + y, height: (end - start) * height },\n { x: x, width: width, y: end * height, height: (1 - end) * height },\n ],\n ]);\n };\n /**\n * 计算手柄的x y\n */\n Slider.prototype.calcHandlePosition = function (handleType) {\n var handleIconOffset = this.attributes.handleIconOffset;\n var _a = this.availableSpace, x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n var _b = __read(this.clampValues(), 2), stVal = _b[0], endVal = _b[1];\n var offset = handleType === 'start' ? -handleIconOffset : handleIconOffset;\n var L = (handleType === 'start' ? stVal : endVal) * this.getOrientVal([width, height]) + offset;\n return {\n x: x + this.getOrientVal([L, width / 2]),\n y: y + this.getOrientVal([height / 2, L]),\n };\n };\n Slider.prototype.inferTextStyle = function (handleType) {\n var orientation = this.attributes.orientation;\n if (orientation === 'horizontal')\n return {};\n if (handleType === 'start')\n return { transformOrigin: 'left center', transform: 'rotate(90)', textAlign: 'start' };\n if (handleType === 'end')\n return { transformOrigin: 'right center', transform: 'rotate(90)', textAlign: 'end' };\n return {};\n };\n /**\n * 计算手柄应当处于的位置\n * @param handleType start手柄还是end手柄\n * @returns\n */\n Slider.prototype.calcHandleText = function (handleType) {\n var _a;\n var _b = this.attributes, type = _b.type, orientation = _b.orientation, formatter = _b.formatter, autoFitLabel = _b.autoFitLabel;\n var handleStyle = subStyleProps(this.attributes, 'handle');\n var labelStyle = subStyleProps(handleStyle, 'label');\n var spacing = handleStyle.spacing;\n var size = this.getHandleSize();\n var values = this.clampValues();\n var value = handleType === 'start' ? values[0] : values[1];\n var text = formatter(value);\n var temp = new Text({\n style: __assign(__assign(__assign({}, labelStyle), this.inferTextStyle(handleType)), { text: text }),\n });\n // 文字包围盒的宽高\n var _c = temp.getBBox(), textWidth = _c.width, textHeight = _c.height;\n temp.destroy();\n if (!autoFitLabel) {\n if (type === 'value')\n return { text: text, x: 0, y: -textHeight - spacing };\n var finaleWidth = spacing + size + (orientation === 'horizontal' ? textWidth / 2 : 0);\n return _a = { text: text }, _a[orientation === 'horizontal' ? 'x' : 'y'] = handleType === 'start' ? -finaleWidth : finaleWidth, _a;\n }\n var x = 0;\n var y = 0;\n // 相对于获取两端可用空间\n var _d = this.availableSpace, iW = _d.width, iH = _d.height;\n var _e = this.calcSelectionArea()[1], fX = _e.x, fY = _e.y, fW = _e.width, fH = _e.height;\n var totalSpacing = spacing + size;\n if (orientation === 'horizontal') {\n var finalWidth = totalSpacing + textWidth / 2;\n if (handleType === 'start') {\n var left = fX - totalSpacing - textWidth;\n x = left > 0 ? -finalWidth : finalWidth;\n }\n else {\n var sign = iW - fX - fW - totalSpacing > textWidth;\n x = sign ? finalWidth : -finalWidth;\n }\n }\n else {\n var positiveSize = totalSpacing;\n var negativeSize = textHeight + totalSpacing;\n if (handleType === 'start') {\n y = fY - size > textHeight ? -negativeSize : positiveSize;\n }\n else {\n y = iH - (fY + fH) - size > textHeight ? negativeSize : -positiveSize;\n }\n }\n return { x: x, y: y, text: text };\n };\n Slider.prototype.getHandleLabelStyle = function (handleType) {\n var style = subStyleProps(this.attributes, 'handleLabel');\n return __assign(__assign(__assign({}, style), this.calcHandleText(handleType)), this.inferTextStyle(handleType));\n };\n Slider.prototype.getHandleIconStyle = function () {\n var shape = this.attributes.handleIconShape;\n var style = subStyleProps(this.attributes, 'handleIcon');\n var cursor = this.getOrientVal(['ew-resize', 'ns-resize']);\n var size = this.getHandleSize();\n return __assign({ cursor: cursor, shape: shape, size: size }, style);\n };\n Slider.prototype.getHandleStyle = function (handleType) {\n var _a = this.attributes, ox = _a.x, oy = _a.y, showLabel = _a.showLabel, showLabelOnInteraction = _a.showLabelOnInteraction, orientation = _a.orientation;\n var _b = this.calcHandlePosition(handleType), x = _b.x, y = _b.y;\n var textStyle = this.calcHandleText(handleType);\n var internalShowLabel = showLabel;\n if (!showLabel && showLabelOnInteraction) {\n if (this.target)\n internalShowLabel = true;\n else\n internalShowLabel = false;\n }\n return __assign(__assign(__assign({}, superStyleProps(this.getHandleIconStyle(), 'icon')), superStyleProps(__assign(__assign({}, this.getHandleLabelStyle(handleType)), textStyle), 'label')), { transform: \"translate(\".concat(x + ox, \", \").concat(y + oy, \")\"), orientation: orientation, showLabel: internalShowLabel, type: handleType, zIndex: 3 });\n };\n Slider.prototype.getHandleSize = function () {\n var _a = this.attributes, size = _a.handleIconSize, width = _a.width, height = _a.height;\n if (size)\n return size;\n // 没设置 size 的话,高度就取 height + 4 高度,手柄宽度是高度的 1/ 2.4\n return Math.floor((this.getOrientVal([+height, +width]) + 4) / 2.4);\n };\n Slider.prototype.getOrientVal = function (_a) {\n var _b = __read(_a, 2), x = _b[0], y = _b[1];\n var orientation = this.attributes.orientation;\n return orientation === 'horizontal' ? x : y;\n };\n Slider.prototype.setValuesOffset = function (stOffset, endOffset, animate) {\n if (endOffset === void 0) { endOffset = 0; }\n if (animate === void 0) { animate = false; }\n var type = this.attributes.type;\n var _a = __read(this.getValues(), 2), oldStartVal = _a[0], oldEndVal = _a[1];\n var internalStartOffset = type === 'range' ? stOffset : 0;\n var values = [oldStartVal + internalStartOffset, oldEndVal + endOffset].sort();\n if (animate)\n this.setValues(values);\n else\n this.innerSetValues(values, true);\n };\n Slider.prototype.getRatio = function (val) {\n var _a = this.availableSpace, width = _a.width, height = _a.height;\n return val / this.getOrientVal([width, height]);\n };\n Slider.prototype.dispatchCustomEvent = function (target, event, name) {\n var _this = this;\n target.on(event, function (e) {\n e.stopPropagation();\n _this.dispatchEvent(new CustomEvent(name, { detail: e }));\n });\n };\n Slider.prototype.bindEvents = function () {\n // scroll 事件\n this.addEventListener('wheel', this.onScroll);\n var brushArea = this.brushArea;\n this.dispatchCustomEvent(brushArea, 'click', 'trackClick');\n this.dispatchCustomEvent(brushArea, 'pointerenter', 'trackMouseenter');\n this.dispatchCustomEvent(brushArea, 'pointerleave', 'trackMouseleave');\n // Drag and brush\n brushArea.on('pointerdown', this.onDragStart('track'));\n };\n Slider.prototype.onScroll = function (event) {\n var scrollable = this.attributes.scrollable;\n if (scrollable) {\n var deltaX = event.deltaX, deltaY = event.deltaY;\n var offset = deltaY || deltaX;\n var deltaVal = this.getRatio(offset);\n this.setValuesOffset(deltaVal, deltaVal, true);\n }\n };\n Slider.tag = 'slider';\n return Slider;\n}(Component));\nexport { Slider };\n//# sourceMappingURL=index.js.map","'use strict';\n\nvar Point = require('@mapbox/point-geometry');\n\nmodule.exports = VectorTileFeature;\n\nfunction VectorTileFeature(pbf, end, extent, keys, values) {\n // Public\n this.properties = {};\n this.extent = extent;\n this.type = 0;\n\n // Private\n this._pbf = pbf;\n this._geometry = -1;\n this._keys = keys;\n this._values = values;\n\n pbf.readFields(readFeature, this, end);\n}\n\nfunction readFeature(tag, feature, pbf) {\n if (tag == 1) feature.id = pbf.readVarint();\n else if (tag == 2) readTag(pbf, feature);\n else if (tag == 3) feature.type = pbf.readVarint();\n else if (tag == 4) feature._geometry = pbf.pos;\n}\n\nfunction readTag(pbf, feature) {\n var end = pbf.readVarint() + pbf.pos;\n\n while (pbf.pos < end) {\n var key = feature._keys[pbf.readVarint()],\n value = feature._values[pbf.readVarint()];\n feature.properties[key] = value;\n }\n}\n\nVectorTileFeature.types = ['Unknown', 'Point', 'LineString', 'Polygon'];\n\nVectorTileFeature.prototype.loadGeometry = function() {\n var pbf = this._pbf;\n pbf.pos = this._geometry;\n\n var end = pbf.readVarint() + pbf.pos,\n cmd = 1,\n length = 0,\n x = 0,\n y = 0,\n lines = [],\n line;\n\n while (pbf.pos < end) {\n if (length <= 0) {\n var cmdLen = pbf.readVarint();\n cmd = cmdLen & 0x7;\n length = cmdLen >> 3;\n }\n\n length--;\n\n if (cmd === 1 || cmd === 2) {\n x += pbf.readSVarint();\n y += pbf.readSVarint();\n\n if (cmd === 1) { // moveTo\n if (line) lines.push(line);\n line = [];\n }\n\n line.push(new Point(x, y));\n\n } else if (cmd === 7) {\n\n // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90\n if (line) {\n line.push(line[0].clone()); // closePolygon\n }\n\n } else {\n throw new Error('unknown command ' + cmd);\n }\n }\n\n if (line) lines.push(line);\n\n return lines;\n};\n\nVectorTileFeature.prototype.bbox = function() {\n var pbf = this._pbf;\n pbf.pos = this._geometry;\n\n var end = pbf.readVarint() + pbf.pos,\n cmd = 1,\n length = 0,\n x = 0,\n y = 0,\n x1 = Infinity,\n x2 = -Infinity,\n y1 = Infinity,\n y2 = -Infinity;\n\n while (pbf.pos < end) {\n if (length <= 0) {\n var cmdLen = pbf.readVarint();\n cmd = cmdLen & 0x7;\n length = cmdLen >> 3;\n }\n\n length--;\n\n if (cmd === 1 || cmd === 2) {\n x += pbf.readSVarint();\n y += pbf.readSVarint();\n if (x < x1) x1 = x;\n if (x > x2) x2 = x;\n if (y < y1) y1 = y;\n if (y > y2) y2 = y;\n\n } else if (cmd !== 7) {\n throw new Error('unknown command ' + cmd);\n }\n }\n\n return [x1, y1, x2, y2];\n};\n\nVectorTileFeature.prototype.toGeoJSON = function(x, y, z) {\n var size = this.extent * Math.pow(2, z),\n x0 = this.extent * x,\n y0 = this.extent * y,\n coords = this.loadGeometry(),\n type = VectorTileFeature.types[this.type],\n i, j;\n\n function project(line) {\n for (var j = 0; j < line.length; j++) {\n var p = line[j], y2 = 180 - (p.y + y0) * 360 / size;\n line[j] = [\n (p.x + x0) * 360 / size - 180,\n 360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90\n ];\n }\n }\n\n switch (this.type) {\n case 1:\n var points = [];\n for (i = 0; i < coords.length; i++) {\n points[i] = coords[i][0];\n }\n coords = points;\n project(coords);\n break;\n\n case 2:\n for (i = 0; i < coords.length; i++) {\n project(coords[i]);\n }\n break;\n\n case 3:\n coords = classifyRings(coords);\n for (i = 0; i < coords.length; i++) {\n for (j = 0; j < coords[i].length; j++) {\n project(coords[i][j]);\n }\n }\n break;\n }\n\n if (coords.length === 1) {\n coords = coords[0];\n } else {\n type = 'Multi' + type;\n }\n\n var result = {\n type: \"Feature\",\n geometry: {\n type: type,\n coordinates: coords\n },\n properties: this.properties\n };\n\n if ('id' in this) {\n result.id = this.id;\n }\n\n return result;\n};\n\n// classifies an array of rings into polygons with outer rings and holes\n\nfunction classifyRings(rings) {\n var len = rings.length;\n\n if (len <= 1) return [rings];\n\n var polygons = [],\n polygon,\n ccw;\n\n for (var i = 0; i < len; i++) {\n var area = signedArea(rings[i]);\n if (area === 0) continue;\n\n if (ccw === undefined) ccw = area < 0;\n\n if (ccw === area < 0) {\n if (polygon) polygons.push(polygon);\n polygon = [rings[i]];\n\n } else {\n polygon.push(rings[i]);\n }\n }\n if (polygon) polygons.push(polygon);\n\n return polygons;\n}\n\nfunction signedArea(ring) {\n var sum = 0;\n for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {\n p1 = ring[i];\n p2 = ring[j];\n sum += (p2.x - p1.x) * (p1.y + p2.y);\n }\n return sum;\n}\n","import { applyToText } from './text';\nexport function ellipsisIt(node, w, suffix) {\n if (suffix === void 0) { suffix = '...'; }\n applyToText(node, { wordWrap: true, wordWrapWidth: w, maxLines: 1, textOverflow: suffix });\n}\n//# sourceMappingURL=ellipsis.js.map","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","export default function (max) {\n\tvar num, curr, prev;\n\tvar limit = max || 1;\n\n\tfunction keep(key, value) {\n\t\tif (++num > limit) {\n\t\t\tprev = curr;\n\t\t\treset(1);\n\t\t\t++num;\n\t\t}\n\t\tcurr[key] = value;\n\t}\n\n\tfunction reset(isPartial) {\n\t\tnum = 0;\n\t\tcurr = Object.create(null);\n\t\tisPartial || (prev=Object.create(null));\n\t}\n\n\treset();\n\n\treturn {\n\t\tclear: reset,\n\t\thas: function (key) {\n\t\t\treturn curr[key] !== void 0 || prev[key] !== void 0;\n\t\t},\n\t\tget: function (key) {\n\t\t\tvar val = curr[key];\n\t\t\tif (val !== void 0) return val;\n\t\t\tif ((val=prev[key]) !== void 0) {\n\t\t\t\tkeep(key, val);\n\t\t\t\treturn val;\n\t\t\t}\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (curr[key] !== void 0) {\n\t\t\t\tcurr[key] = value;\n\t\t\t} else {\n\t\t\t\tkeep(key, value);\n\t\t\t}\n\t\t}\n\t};\n}\n","import flru from 'flru';\nconst cache = flru(3);\n/**\n * A decorator to return new function with LRU cache.\n */\nexport function lru(fn, keyFn = (...args) => `${args[0]}`, maxSize = 16) {\n const cache = flru(maxSize);\n return (...args) => {\n const key = keyFn(...args);\n let v = cache.get(key);\n if (cache.has(key))\n return cache.get(key);\n v = fn(...args);\n cache.set(key, v);\n return v;\n };\n}\n//# sourceMappingURL=lru.js.map","'use strict';\n\nmodule.exports = TinySDF;\nmodule.exports.default = TinySDF;\n\nvar INF = 1e20;\n\nfunction TinySDF(fontSize, buffer, radius, cutoff, fontFamily, fontWeight) {\n this.fontSize = fontSize || 24;\n this.buffer = buffer === undefined ? 3 : buffer;\n this.cutoff = cutoff || 0.25;\n this.fontFamily = fontFamily || 'sans-serif';\n this.fontWeight = fontWeight || 'normal';\n this.radius = radius || 8;\n\n // For backwards compatibility, we honor the implicit contract that the\n // size of the returned bitmap will be fontSize + buffer * 2\n var size = this.size = this.fontSize + this.buffer * 2;\n // Glyphs may be slightly larger than their fontSize. The canvas already\n // has buffer space, but create extra buffer space in the output grid for the\n // \"halo\" to extend into (if metric extraction is enabled)\n var gridSize = size + this.buffer * 2;\n\n this.canvas = document.createElement('canvas');\n this.canvas.width = this.canvas.height = size;\n\n this.ctx = this.canvas.getContext('2d');\n this.ctx.font = this.fontWeight + ' ' + this.fontSize + 'px ' + this.fontFamily;\n\n this.ctx.textAlign = 'left'; // Necessary so that RTL text doesn't have different alignment\n this.ctx.fillStyle = 'black';\n\n // temporary arrays for the distance transform\n this.gridOuter = new Float64Array(gridSize * gridSize);\n this.gridInner = new Float64Array(gridSize * gridSize);\n this.f = new Float64Array(gridSize);\n this.z = new Float64Array(gridSize + 1);\n this.v = new Uint16Array(gridSize);\n\n this.useMetrics = this.ctx.measureText('A').actualBoundingBoxLeft !== undefined;\n\n // hack around https://bugzilla.mozilla.org/show_bug.cgi?id=737852\n this.middle = Math.round((size / 2) * (navigator.userAgent.indexOf('Gecko/') >= 0 ? 1.2 : 1));\n}\n\nfunction prepareGrids(imgData, width, height, glyphWidth, glyphHeight, gridOuter, gridInner) {\n // Initialize grids outside the glyph range to alpha 0\n gridOuter.fill(INF, 0, width * height);\n gridInner.fill(0, 0, width * height);\n\n var offset = (width - glyphWidth) / 2; // This is zero if we're not extracting metrics\n\n for (var y = 0; y < glyphHeight; y++) {\n for (var x = 0; x < glyphWidth; x++) {\n var j = (y + offset) * width + x + offset;\n var a = imgData.data[4 * (y * glyphWidth + x) + 3] / 255; // alpha value\n if (a === 1) {\n gridOuter[j] = 0;\n gridInner[j] = INF;\n } else if (a === 0) {\n gridOuter[j] = INF;\n gridInner[j] = 0;\n } else {\n var b = Math.max(0, 0.5 - a);\n var c = Math.max(0, a - 0.5);\n gridOuter[j] = b * b;\n gridInner[j] = c * c;\n }\n }\n }\n}\n\nfunction extractAlpha(alphaChannel, width, height, gridOuter, gridInner, radius, cutoff) {\n for (var i = 0; i < width * height; i++) {\n var d = Math.sqrt(gridOuter[i]) - Math.sqrt(gridInner[i]);\n alphaChannel[i] = Math.round(255 - 255 * (d / radius + cutoff));\n }\n}\n\nTinySDF.prototype._draw = function (char, getMetrics) {\n var textMetrics = this.ctx.measureText(char);\n // Older browsers only expose the glyph width\n // This is enough for basic layout with all glyphs using the same fixed size\n var advance = textMetrics.width;\n\n var doubleBuffer = 2 * this.buffer;\n var width, glyphWidth, height, glyphHeight, top;\n\n var imgTop, imgLeft, baselinePosition;\n // If the browser supports bounding box metrics, we can generate a smaller\n // SDF. This is a significant performance win.\n if (getMetrics && this.useMetrics) {\n // The integer/pixel part of the top alignment is encoded in metrics.top\n // The remainder is implicitly encoded in the rasterization\n top = Math.floor(textMetrics.actualBoundingBoxAscent);\n baselinePosition = this.buffer + Math.ceil(textMetrics.actualBoundingBoxAscent);\n imgTop = this.buffer;\n imgLeft = this.buffer;\n\n // If the glyph overflows the canvas size, it will be clipped at the\n // bottom/right\n glyphWidth = Math.min(this.size,\n Math.ceil(textMetrics.actualBoundingBoxRight - textMetrics.actualBoundingBoxLeft));\n glyphHeight = Math.min(this.size - imgTop,\n Math.ceil(textMetrics.actualBoundingBoxAscent + textMetrics.actualBoundingBoxDescent));\n\n width = glyphWidth + doubleBuffer;\n height = glyphHeight + doubleBuffer;\n this.ctx.textBaseline = 'alphabetic';\n } else {\n width = glyphWidth = this.size;\n height = glyphHeight = this.size;\n // 19 points is an approximation of the \"cap height\" ascent from alphabetic\n // baseline (even though actual drawing is from middle baseline, we can\n // use the approximation because every glyph fills the em box)\n top = 19 * this.fontSize / 24;\n imgTop = imgLeft = 0;\n baselinePosition = this.middle;\n this.ctx.textBaseline = 'middle';\n }\n\n var imgData;\n if (glyphWidth && glyphHeight) {\n this.ctx.clearRect(imgLeft, imgTop, glyphWidth, glyphHeight);\n this.ctx.fillText(char, this.buffer, baselinePosition);\n imgData = this.ctx.getImageData(imgLeft, imgTop, glyphWidth, glyphHeight);\n }\n\n var alphaChannel = new Uint8ClampedArray(width * height);\n\n prepareGrids(imgData, width, height, glyphWidth, glyphHeight, this.gridOuter, this.gridInner);\n\n edt(this.gridOuter, width, height, this.f, this.v, this.z);\n edt(this.gridInner, width, height, this.f, this.v, this.z);\n\n extractAlpha(alphaChannel, width, height, this.gridOuter, this.gridInner, this.radius, this.cutoff);\n\n return {\n data: alphaChannel,\n metrics: {\n width: glyphWidth,\n height: glyphHeight,\n sdfWidth: width,\n sdfHeight: height,\n top: top,\n left: 0,\n advance: advance\n }\n };\n};\n\nTinySDF.prototype.draw = function (char) {\n return this._draw(char, false).data;\n};\n\nTinySDF.prototype.drawWithMetrics = function (char) {\n return this._draw(char, true);\n};\n\n// 2D Euclidean squared distance transform by Felzenszwalb & Huttenlocher https://cs.brown.edu/~pff/papers/dt-final.pdf\nfunction edt(data, width, height, f, v, z) {\n for (var x = 0; x < width; x++) edt1d(data, x, width, height, f, v, z);\n for (var y = 0; y < height; y++) edt1d(data, y * width, 1, width, f, v, z);\n}\n\n// 1D squared distance transform\nfunction edt1d(grid, offset, stride, length, f, v, z) {\n var q, k, s, r;\n v[0] = 0;\n z[0] = -INF;\n z[1] = INF;\n\n for (q = 0; q < length; q++) f[q] = grid[offset + q * stride];\n\n for (q = 1, k = 0, s = 0; q < length; q++) {\n do {\n r = v[k];\n s = (f[q] - f[r] + q * q - r * r) / (q - r) / 2;\n } while (s <= z[k] && --k > -1);\n\n k++;\n v[k] = q;\n z[k] = s;\n z[k + 1] = INF;\n }\n\n for (q = 0, k = 0; q < length; q++) {\n while (z[k + 1] < q) k++;\n r = v[k];\n grid[offset + q * stride] = f[r] + (q - r) * (q - r);\n }\n}\n","import { useContext } from '@rc-component/context';\nimport * as React from 'react';\nimport Cell from \"../Cell\";\nimport TableContext from \"../context/TableContext\";\nimport devRenderTimes from \"../hooks/useRenderTimes\";\nfunction ExpandedRow(props) {\n if (process.env.NODE_ENV !== 'production') {\n devRenderTimes(props);\n }\n var prefixCls = props.prefixCls,\n children = props.children,\n Component = props.component,\n cellComponent = props.cellComponent,\n className = props.className,\n expanded = props.expanded,\n colSpan = props.colSpan,\n isEmpty = props.isEmpty,\n _props$stickyOffset = props.stickyOffset,\n stickyOffset = _props$stickyOffset === void 0 ? 0 : _props$stickyOffset;\n var _useContext = useContext(TableContext, ['scrollbarSize', 'fixHeader', 'fixColumn', 'componentWidth', 'horizonScroll']),\n scrollbarSize = _useContext.scrollbarSize,\n fixHeader = _useContext.fixHeader,\n fixColumn = _useContext.fixColumn,\n componentWidth = _useContext.componentWidth,\n horizonScroll = _useContext.horizonScroll;\n\n // Cache render node\n var contentNode = children;\n if (isEmpty ? horizonScroll && componentWidth : fixColumn) {\n contentNode = /*#__PURE__*/React.createElement(\"div\", {\n style: {\n width: componentWidth - stickyOffset - (fixHeader && !isEmpty ? scrollbarSize : 0),\n position: 'sticky',\n left: stickyOffset,\n overflow: 'hidden'\n },\n className: \"\".concat(prefixCls, \"-expanded-row-fixed\")\n }, contentNode);\n }\n return /*#__PURE__*/React.createElement(Component, {\n className: className,\n style: {\n display: expanded ? null : 'none'\n }\n }, /*#__PURE__*/React.createElement(Cell, {\n component: cellComponent,\n prefixCls: prefixCls,\n colSpan: colSpan\n }, contentNode));\n}\nexport default ExpandedRow;","import { get } from './index';\nexport function fieldAdapter(field) {\n switch (typeof field) {\n case 'function':\n return field;\n case 'string':\n return function (d) { return get(d, [field]); };\n default:\n return function () { return field; };\n }\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","export let MapType = /*#__PURE__*/function (MapType) {\n MapType[\"GAODE\"] = \"GAODE\";\n MapType[\"MAPBOX\"] = \"MAPBOX\";\n MapType[\"DEFAULT\"] = \"DEFAUlTMAP\";\n MapType[\"SIMPLE\"] = \"SIMPLE\";\n MapType[\"GLOBEL\"] = \"GLOBEL\";\n return MapType;\n}({});","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { useContext } from '@rc-component/context';\nimport TableContext from \"../context/TableContext\";\nimport { getColumnsKey } from \"../utils/valueUtil\";\nimport { useEvent } from 'rc-util';\nimport classNames from 'classnames';\nexport default function useRowInfo(record, rowKey, recordIndex, indent) {\n var context = useContext(TableContext, ['prefixCls', 'fixedInfoList', 'flattenColumns', 'expandableType', 'expandRowByClick', 'onTriggerExpand', 'rowClassName', 'expandedRowClassName', 'indentSize', 'expandIcon', 'expandedRowRender', 'expandIconColumnIndex', 'expandedKeys', 'childrenColumnName', 'rowExpandable', 'onRow']);\n var flattenColumns = context.flattenColumns,\n expandableType = context.expandableType,\n expandedKeys = context.expandedKeys,\n childrenColumnName = context.childrenColumnName,\n onTriggerExpand = context.onTriggerExpand,\n rowExpandable = context.rowExpandable,\n onRow = context.onRow,\n expandRowByClick = context.expandRowByClick,\n rowClassName = context.rowClassName;\n\n // ======================= Expandable =======================\n // Only when row is not expandable and `children` exist in record\n var nestExpandable = expandableType === 'nest';\n var rowSupportExpand = expandableType === 'row' && (!rowExpandable || rowExpandable(record));\n var mergedExpandable = rowSupportExpand || nestExpandable;\n var expanded = expandedKeys && expandedKeys.has(rowKey);\n var hasNestChildren = childrenColumnName && record && record[childrenColumnName];\n var onInternalTriggerExpand = useEvent(onTriggerExpand);\n\n // ========================= onRow ==========================\n var rowProps = onRow === null || onRow === void 0 ? void 0 : onRow(record, recordIndex);\n var onRowClick = rowProps === null || rowProps === void 0 ? void 0 : rowProps.onClick;\n var onClick = function onClick(event) {\n if (expandRowByClick && mergedExpandable) {\n onTriggerExpand(record, event);\n }\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n onRowClick === null || onRowClick === void 0 || onRowClick.apply(void 0, [event].concat(args));\n };\n\n // ====================== RowClassName ======================\n var computeRowClassName;\n if (typeof rowClassName === 'string') {\n computeRowClassName = rowClassName;\n } else if (typeof rowClassName === 'function') {\n computeRowClassName = rowClassName(record, recordIndex, indent);\n }\n\n // ========================= Column =========================\n var columnsKey = getColumnsKey(flattenColumns);\n return _objectSpread(_objectSpread({}, context), {}, {\n columnsKey: columnsKey,\n nestExpandable: nestExpandable,\n expanded: expanded,\n hasNestChildren: hasNestChildren,\n record: record,\n onTriggerExpand: onInternalTriggerExpand,\n rowSupportExpand: rowSupportExpand,\n expandable: mergedExpandable,\n rowProps: _objectSpread(_objectSpread({}, rowProps), {}, {\n className: classNames(computeRowClassName, rowProps === null || rowProps === void 0 ? void 0 : rowProps.className),\n onClick: onClick\n })\n });\n}","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport BaseModel from \"../../core/BaseModel\";\nimport { PointFillTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/fill/fill_frag.glsl' */\nconst pointFillFrag = \"\\nlayout(std140) uniform commonUniforms {\\n vec3 u_blur_height_fixed;\\n float u_stroke_width;\\n float u_additive;\\n float u_stroke_opacity;\\n float u_size_unit;\\n float u_time;\\n vec4 u_animate;\\n};\\n\\nin vec4 v_color;\\nin vec4 v_stroke;\\nin vec4 v_data;\\nin float v_radius;\\n\\n#pragma include \\\"scene_uniforms\\\"\\n#pragma include \\\"sdf_2d\\\"\\n#pragma include \\\"picking\\\"\\n\\nout vec4 outputColor;\\n\\nvoid main() {\\n int shape = int(floor(v_data.w + 0.5));\\n lowp float antialiasblur = v_data.z;\\n float r = v_radius / (v_radius + u_stroke_width);\\n\\n float outer_df;\\n float inner_df;\\n // 'circle', 'triangle', 'square', 'pentagon', 'hexagon', 'octogon', 'hexagram', 'rhombus', 'vesica'\\n if (shape == 0) {\\n outer_df = sdCircle(v_data.xy, 1.0);\\n inner_df = sdCircle(v_data.xy, r);\\n } else if (shape == 1) {\\n outer_df = sdEquilateralTriangle(1.1 * v_data.xy);\\n inner_df = sdEquilateralTriangle(1.1 / r * v_data.xy);\\n } else if (shape == 2) {\\n outer_df = sdBox(v_data.xy, vec2(1.));\\n inner_df = sdBox(v_data.xy, vec2(r));\\n } else if (shape == 3) {\\n outer_df = sdPentagon(v_data.xy, 0.8);\\n inner_df = sdPentagon(v_data.xy, r * 0.8);\\n } else if (shape == 4) {\\n outer_df = sdHexagon(v_data.xy, 0.8);\\n inner_df = sdHexagon(v_data.xy, r * 0.8);\\n } else if (shape == 5) {\\n outer_df = sdOctogon(v_data.xy, 1.0);\\n inner_df = sdOctogon(v_data.xy, r);\\n } else if (shape == 6) {\\n outer_df = sdHexagram(v_data.xy, 0.52);\\n inner_df = sdHexagram(v_data.xy, r * 0.52);\\n } else if (shape == 7) {\\n outer_df = sdRhombus(v_data.xy, vec2(1.0));\\n inner_df = sdRhombus(v_data.xy, vec2(r));\\n } else if (shape == 8) {\\n outer_df = sdVesica(v_data.xy, 1.1, 0.8);\\n inner_df = sdVesica(v_data.xy, r * 1.1, r * 0.8);\\n }\\n\\n float opacity_t = smoothstep(0.0, antialiasblur, outer_df);\\n\\n float color_t = u_stroke_width < 0.01 ? 0.0 : smoothstep(\\n antialiasblur,\\n 0.0,\\n inner_df\\n );\\n\\n float PI = 3.14159;\\n float N_RINGS = 3.0;\\n float FREQ = 1.0;\\n\\n if(u_stroke_width < 0.01) {\\n outputColor = v_color;\\n } else {\\n outputColor = mix(v_color, v_stroke * u_stroke_opacity, color_t);\\n }\\n float intensity = 1.0;\\n if(u_time!=-1.0){\\n //wave\\u76F8\\u5173\\u903B\\u8F91\\n float d = length(v_data.xy);\\n if(d > 0.5) {\\n discard;\\n }\\n intensity = clamp(cos(d * PI), 0.0, 1.0) * clamp(cos(2.0 * PI * (d * 2.0 * u_animate.z - u_animate.y * u_time)), 0.0, 1.0);\\n }\\n\\n if(u_additive > 0.0) {\\n outputColor *= opacity_t;\\n outputColor *= intensity;//wave\\n outputColor = filterColorAlpha(outputColor, outputColor.a);\\n } else {\\n outputColor.a *= opacity_t;\\n outputColor.a *= intensity;//wave \\n outputColor = filterColor(outputColor);\\n }\\n // \\u4F5C\\u4E3A mask \\u6A21\\u677F\\u65F6\\u9700\\u8981\\u4E22\\u5F03\\u900F\\u660E\\u7684\\u50CF\\u7D20\\n if(outputColor.a < 0.01) {\\n discard;\\n } \\n}\\n\";\n/* babel-plugin-inline-import '../shaders/fill/fill_vert.glsl' */\nconst pointFillVert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;\\nlayout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;\\nlayout(location = ATTRIBUTE_LOCATION_SHAPE) in float a_Shape;\\nlayout(location = ATTRIBUTE_LOCATION_EXTRUDE) in vec3 a_Extrude;\\n\\nlayout(std140) uniform commonUniforms {\\n vec3 u_blur_height_fixed;\\n float u_stroke_width;\\n float u_additive;\\n float u_stroke_opacity;\\n float u_size_unit;\\n float u_time;\\n vec4 u_animate;\\n};\\n\\nout vec4 v_color;\\nout vec4 v_stroke;\\nout vec4 v_data;\\nout float v_radius;\\n\\n#pragma include \\\"projection\\\"\\n#pragma include \\\"picking\\\"\\n#pragma include \\\"rotation_2d\\\"\\n\\nvoid main() {\\n // \\u900F\\u660E\\u5EA6\\u8BA1\\u7B97\\n v_stroke = stroke;\\n vec3 extrude = a_Extrude;\\n float shape_type = a_Shape;\\n /*\\n * setPickingSize \\u8BBE\\u7F6E\\u62FE\\u53D6\\u5927\\u5C0F\\n * u_meter2coord \\u5728\\u7B49\\u9762\\u79EF\\u5927\\u5C0F\\u7684\\u65F6\\u5019\\u8BBE\\u7F6E\\u5355\\u4F4D\\n */\\n float newSize = setPickingSize(a_Size);\\n // float newSize = setPickingSize(a_Size) * 0.00001038445708445579;\\n\\n\\n\\n // unpack color(vec2)\\n v_color = vec4(a_Color.xyz, a_Color.w * opacity);\\n\\n if(u_size_unit == 1.0) {\\n newSize = newSize * u_PixelsPerMeter.z;\\n }\\n\\n v_radius = newSize;\\n\\n // anti-alias\\n // float antialiased_blur = -max(u_blur, antialiasblur);\\n float antialiasblur = -max(2.0 / u_DevicePixelRatio / newSize, u_blur_height_fixed.x);\\n\\n vec2 offset = (extrude.xy * (newSize + u_stroke_width) + u_offsets);\\n\\n offset = project_pixel(offset);\\n offset = rotate_matrix(offset,rotation);\\n\\n // TODP: /abs(extrude.x) \\u662F\\u4E3A\\u4E86\\u517C\\u5BB9\\u5730\\u7403\\u6A21\\u5F0F\\n v_data = vec4(extrude.x/abs(extrude.x), extrude.y/abs(extrude.y), antialiasblur,shape_type);\\n\\n vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0), a_Position64Low);\\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\\n\\n float raisingHeight = u_blur_height_fixed.y;\\n\\n if(u_blur_height_fixed.z < 1.0) { // false\\n raisingHeight = project_pixel(u_blur_height_fixed.y);\\n } else {\\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\\n float mapboxZoomScale = 4.0/pow(2.0, 21.0 - u_Zoom);\\n raisingHeight = u_blur_height_fixed.y * mapboxZoomScale;\\n }\\n }\\n\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, raisingHeight, 1.0));\\n\\n setPickingColor(a_PickingColor);\\n}\\n\";\nimport { SizeUnitType } from \"../../core/interface\";\nexport default class FillModel extends BaseModel {\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n SIZE: 9,\n SHAPE: 10,\n EXTRUDE: 11\n });\n }\n getCommonUniformsInfo() {\n const {\n strokeOpacity = 1,\n strokeWidth = 0,\n blend,\n blur = 0,\n raisingHeight = 0,\n heightfixed = false,\n unit = 'pixel'\n } = this.layer.getLayerConfig();\n let u_time = this.getAnimateUniforms().u_time;\n if (isNaN(u_time)) {\n u_time = -1.0;\n }\n const commonOptions = {\n u_blur_height_fixed: [blur, Number(raisingHeight), Number(heightfixed)],\n u_stroke_width: strokeWidth,\n u_additive: blend === 'additive' ? 1.0 : 0.0,\n u_stroke_opacity: strokeOpacity,\n u_size_unit: SizeUnitType[unit],\n u_time,\n u_animate: this.getAnimateUniforms().u_animate\n };\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n getAnimateUniforms() {\n const {\n animateOption = {\n enable: false\n }\n } = this.layer.getLayerConfig();\n return {\n u_animate: this.animateOption2Array(animateOption),\n u_time: this.layer.getLayerAnimateTime()\n };\n }\n getAttribute() {\n return this.styleAttributeService.createAttributesAndIndices(this.layer.getEncodedData(), PointFillTriangulation);\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n const {\n frag,\n vert,\n type\n } = _this2.getShaders();\n _this2.layer.triangulation = PointFillTriangulation;\n _this2.initUniformsBuffer();\n const model = yield _this2.layer.buildLayerModel({\n moduleName: type,\n vertexShader: vert,\n fragmentShader: frag,\n defines: _this2.getDefines(),\n inject: _this2.getInject(),\n triangulation: PointFillTriangulation,\n depth: {\n enable: false\n }\n });\n return [model];\n })();\n }\n\n /**\n * 根据 animateOption 的值返回对应的 shader 代码\n * @returns\n */\n getShaders() {\n return {\n frag: pointFillFrag,\n vert: pointFillVert,\n type: 'pointFill'\n };\n }\n\n // overwrite baseModel func\n animateOption2Array(option) {\n return [option.enable ? 0 : 1.0, option.speed || 1, option.rings || 3, 0];\n }\n registerBuiltinAttributes() {\n // 注册 Style 参与数据映射的内置属性\n const shape2d = this.layer.getLayerConfig().shape2d;\n\n // 注册 Position 属性 64 位地位部分,经纬度数据开启双精度,避免大于 20层级以上出现数据偏移\n this.registerPosition64LowAttribute();\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\n shaderLocation: this.attributeLocation.EXTRUDE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 3,\n update: (feature, featureIdx, vertex, attributeIdx) => {\n const extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];\n const extrudeIndex = attributeIdx % 4 * 3;\n return [extrude[extrudeIndex], extrude[extrudeIndex + 1], extrude[extrudeIndex + 2]];\n }\n }\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n shaderLocation: this.attributeLocation.SIZE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n size = 5\n } = feature;\n return Array.isArray(size) ? [size[0]] : [size];\n }\n }\n });\n\n // point layer shape;\n this.styleAttributeService.registerStyleAttribute({\n name: 'shape',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Shape',\n shaderLocation: this.attributeLocation.SHAPE,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 1,\n update: feature => {\n const {\n shape = 2\n } = feature;\n const shapeIndex = shape2d.indexOf(shape);\n return [shapeIndex];\n }\n }\n });\n }\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getTwoToneColor = getTwoToneColor;\nexports.setTwoToneColor = setTwoToneColor;\nvar _slicedToArray2 = _interopRequireDefault(require(\"@babel/runtime/helpers/slicedToArray\"));\nvar _IconBase = _interopRequireDefault(require(\"./IconBase\"));\nvar _utils = require(\"../utils\");\nfunction setTwoToneColor(twoToneColor) {\n var _normalizeTwoToneColo = (0, _utils.normalizeTwoToneColors)(twoToneColor),\n _normalizeTwoToneColo2 = (0, _slicedToArray2.default)(_normalizeTwoToneColo, 2),\n primaryColor = _normalizeTwoToneColo2[0],\n secondaryColor = _normalizeTwoToneColo2[1];\n return _IconBase.default.setTwoToneColors({\n primaryColor: primaryColor,\n secondaryColor: secondaryColor\n });\n}\nfunction getTwoToneColor() {\n var colors = _IconBase.default.getTwoToneColors();\n if (!colors.calculated) {\n return colors.primaryColor;\n }\n return [colors.primaryColor, colors.secondaryColor];\n}","'use strict';\n\nmodule.exports = earcut;\nmodule.exports.default = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 32767 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim | 0);\n triangles.push(ear.i / dim | 0);\n triangles.push(next.i / dim | 0);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n var p = c.next;\n while (p !== a) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(x0, y0, minX, minY, invSize),\n maxZ = zOrder(x1, y1, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim | 0);\n triangles.push(p.i / dim | 0);\n triangles.push(b.i / dim | 0);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize, 0);\n earcutLinked(c, triangles, dim, minX, minY, invSize, 0);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n var bridge = findHoleBridge(hole, outerNode);\n if (!bridge) {\n return outerNode;\n }\n\n var bridgeReverse = splitPolygon(bridge, hole);\n\n // filter collinear points around the cuts\n filterPoints(bridgeReverse, bridgeReverse.next);\n return filterPoints(bridge, bridge.next);\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n m = p.x < p.next.x ? p : p.next;\n if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = (x - minX) * invSize | 0;\n y = (y - minY) * invSize | 0;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) >= (ax - px) * (cy - py) &&\n (ax - px) * (by - py) >= (bx - px) * (ay - py) &&\n (bx - px) * (cy - py) >= (cx - px) * (by - py);\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = 0;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n","\"use strict\";\n\nvar forEach = require(\"./collection-utils\").forEach;\nvar elementUtilsMaker = require(\"./element-utils\");\nvar listenerHandlerMaker = require(\"./listener-handler\");\nvar idGeneratorMaker = require(\"./id-generator\");\nvar idHandlerMaker = require(\"./id-handler\");\nvar reporterMaker = require(\"./reporter\");\nvar browserDetector = require(\"./browser-detector\");\nvar batchProcessorMaker = require(\"batch-processor\");\nvar stateHandler = require(\"./state-handler\");\n\n//Detection strategies.\nvar objectStrategyMaker = require(\"./detection-strategy/object.js\");\nvar scrollStrategyMaker = require(\"./detection-strategy/scroll.js\");\n\nfunction isCollection(obj) {\n return Array.isArray(obj) || obj.length !== undefined;\n}\n\nfunction toArray(collection) {\n if (!Array.isArray(collection)) {\n var array = [];\n forEach(collection, function (obj) {\n array.push(obj);\n });\n return array;\n } else {\n return collection;\n }\n}\n\nfunction isElement(obj) {\n return obj && obj.nodeType === 1;\n}\n\n/**\n * @typedef idHandler\n * @type {object}\n * @property {function} get Gets the resize detector id of the element.\n * @property {function} set Generate and sets the resize detector id of the element.\n */\n\n/**\n * @typedef Options\n * @type {object}\n * @property {boolean} callOnAdd Determines if listeners should be called when they are getting added.\n Default is true. If true, the listener is guaranteed to be called when it has been added.\n If false, the listener will not be guarenteed to be called when it has been added (does not prevent it from being called).\n * @property {idHandler} idHandler A custom id handler that is responsible for generating, setting and retrieving id's for elements.\n If not provided, a default id handler will be used.\n * @property {reporter} reporter A custom reporter that handles reporting logs, warnings and errors.\n If not provided, a default id handler will be used.\n If set to false, then nothing will be reported.\n * @property {boolean} debug If set to true, the the system will report debug messages as default for the listenTo method.\n */\n\n/**\n * Creates an element resize detector instance.\n * @public\n * @param {Options?} options Optional global options object that will decide how this instance will work.\n */\nmodule.exports = function(options) {\n options = options || {};\n\n //idHandler is currently not an option to the listenTo function, so it should not be added to globalOptions.\n var idHandler;\n\n if (options.idHandler) {\n // To maintain compatability with idHandler.get(element, readonly), make sure to wrap the given idHandler\n // so that readonly flag always is true when it's used here. This may be removed next major version bump.\n idHandler = {\n get: function (element) { return options.idHandler.get(element, true); },\n set: options.idHandler.set\n };\n } else {\n var idGenerator = idGeneratorMaker();\n var defaultIdHandler = idHandlerMaker({\n idGenerator: idGenerator,\n stateHandler: stateHandler\n });\n idHandler = defaultIdHandler;\n }\n\n //reporter is currently not an option to the listenTo function, so it should not be added to globalOptions.\n var reporter = options.reporter;\n\n if(!reporter) {\n //If options.reporter is false, then the reporter should be quiet.\n var quiet = reporter === false;\n reporter = reporterMaker(quiet);\n }\n\n //batchProcessor is currently not an option to the listenTo function, so it should not be added to globalOptions.\n var batchProcessor = getOption(options, \"batchProcessor\", batchProcessorMaker({ reporter: reporter }));\n\n //Options to be used as default for the listenTo function.\n var globalOptions = {};\n globalOptions.callOnAdd = !!getOption(options, \"callOnAdd\", true);\n globalOptions.debug = !!getOption(options, \"debug\", false);\n\n var eventListenerHandler = listenerHandlerMaker(idHandler);\n var elementUtils = elementUtilsMaker({\n stateHandler: stateHandler\n });\n\n //The detection strategy to be used.\n var detectionStrategy;\n var desiredStrategy = getOption(options, \"strategy\", \"object\");\n var importantCssRules = getOption(options, \"important\", false);\n var strategyOptions = {\n reporter: reporter,\n batchProcessor: batchProcessor,\n stateHandler: stateHandler,\n idHandler: idHandler,\n important: importantCssRules\n };\n\n if(desiredStrategy === \"scroll\") {\n if (browserDetector.isLegacyOpera()) {\n reporter.warn(\"Scroll strategy is not supported on legacy Opera. Changing to object strategy.\");\n desiredStrategy = \"object\";\n } else if (browserDetector.isIE(9)) {\n reporter.warn(\"Scroll strategy is not supported on IE9. Changing to object strategy.\");\n desiredStrategy = \"object\";\n }\n }\n\n if(desiredStrategy === \"scroll\") {\n detectionStrategy = scrollStrategyMaker(strategyOptions);\n } else if(desiredStrategy === \"object\") {\n detectionStrategy = objectStrategyMaker(strategyOptions);\n } else {\n throw new Error(\"Invalid strategy name: \" + desiredStrategy);\n }\n\n //Calls can be made to listenTo with elements that are still being installed.\n //Also, same elements can occur in the elements list in the listenTo function.\n //With this map, the ready callbacks can be synchronized between the calls\n //so that the ready callback can always be called when an element is ready - even if\n //it wasn't installed from the function itself.\n var onReadyCallbacks = {};\n\n /**\n * Makes the given elements resize-detectable and starts listening to resize events on the elements. Calls the event callback for each event for each element.\n * @public\n * @param {Options?} options Optional options object. These options will override the global options. Some options may not be overriden, such as idHandler.\n * @param {element[]|element} elements The given array of elements to detect resize events of. Single element is also valid.\n * @param {function} listener The callback to be executed for each resize event for each element.\n */\n function listenTo(options, elements, listener) {\n function onResizeCallback(element) {\n var listeners = eventListenerHandler.get(element);\n forEach(listeners, function callListenerProxy(listener) {\n listener(element);\n });\n }\n\n function addListener(callOnAdd, element, listener) {\n eventListenerHandler.add(element, listener);\n\n if(callOnAdd) {\n listener(element);\n }\n }\n\n //Options object may be omitted.\n if(!listener) {\n listener = elements;\n elements = options;\n options = {};\n }\n\n if(!elements) {\n throw new Error(\"At least one element required.\");\n }\n\n if(!listener) {\n throw new Error(\"Listener required.\");\n }\n\n if (isElement(elements)) {\n // A single element has been passed in.\n elements = [elements];\n } else if (isCollection(elements)) {\n // Convert collection to array for plugins.\n // TODO: May want to check so that all the elements in the collection are valid elements.\n elements = toArray(elements);\n } else {\n return reporter.error(\"Invalid arguments. Must be a DOM element or a collection of DOM elements.\");\n }\n\n var elementsReady = 0;\n\n var callOnAdd = getOption(options, \"callOnAdd\", globalOptions.callOnAdd);\n var onReadyCallback = getOption(options, \"onReady\", function noop() {});\n var debug = getOption(options, \"debug\", globalOptions.debug);\n\n forEach(elements, function attachListenerToElement(element) {\n if (!stateHandler.getState(element)) {\n stateHandler.initState(element);\n idHandler.set(element);\n }\n\n var id = idHandler.get(element);\n\n debug && reporter.log(\"Attaching listener to element\", id, element);\n\n if(!elementUtils.isDetectable(element)) {\n debug && reporter.log(id, \"Not detectable.\");\n if(elementUtils.isBusy(element)) {\n debug && reporter.log(id, \"System busy making it detectable\");\n\n //The element is being prepared to be detectable. Do not make it detectable.\n //Just add the listener, because the element will soon be detectable.\n addListener(callOnAdd, element, listener);\n onReadyCallbacks[id] = onReadyCallbacks[id] || [];\n onReadyCallbacks[id].push(function onReady() {\n elementsReady++;\n\n if(elementsReady === elements.length) {\n onReadyCallback();\n }\n });\n return;\n }\n\n debug && reporter.log(id, \"Making detectable...\");\n //The element is not prepared to be detectable, so do prepare it and add a listener to it.\n elementUtils.markBusy(element, true);\n return detectionStrategy.makeDetectable({ debug: debug, important: importantCssRules }, element, function onElementDetectable(element) {\n debug && reporter.log(id, \"onElementDetectable\");\n\n if (stateHandler.getState(element)) {\n elementUtils.markAsDetectable(element);\n elementUtils.markBusy(element, false);\n detectionStrategy.addListener(element, onResizeCallback);\n addListener(callOnAdd, element, listener);\n\n // Since the element size might have changed since the call to \"listenTo\", we need to check for this change,\n // so that a resize event may be emitted.\n // Having the startSize object is optional (since it does not make sense in some cases such as unrendered elements), so check for its existance before.\n // Also, check the state existance before since the element may have been uninstalled in the installation process.\n var state = stateHandler.getState(element);\n if (state && state.startSize) {\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n if (state.startSize.width !== width || state.startSize.height !== height) {\n onResizeCallback(element);\n }\n }\n\n if(onReadyCallbacks[id]) {\n forEach(onReadyCallbacks[id], function(callback) {\n callback();\n });\n }\n } else {\n // The element has been unisntalled before being detectable.\n debug && reporter.log(id, \"Element uninstalled before being detectable.\");\n }\n\n delete onReadyCallbacks[id];\n\n elementsReady++;\n if(elementsReady === elements.length) {\n onReadyCallback();\n }\n });\n }\n\n debug && reporter.log(id, \"Already detecable, adding listener.\");\n\n //The element has been prepared to be detectable and is ready to be listened to.\n addListener(callOnAdd, element, listener);\n elementsReady++;\n });\n\n if(elementsReady === elements.length) {\n onReadyCallback();\n }\n }\n\n function uninstall(elements) {\n if(!elements) {\n return reporter.error(\"At least one element is required.\");\n }\n\n if (isElement(elements)) {\n // A single element has been passed in.\n elements = [elements];\n } else if (isCollection(elements)) {\n // Convert collection to array for plugins.\n // TODO: May want to check so that all the elements in the collection are valid elements.\n elements = toArray(elements);\n } else {\n return reporter.error(\"Invalid arguments. Must be a DOM element or a collection of DOM elements.\");\n }\n\n forEach(elements, function (element) {\n eventListenerHandler.removeAllListeners(element);\n detectionStrategy.uninstall(element);\n stateHandler.cleanState(element);\n });\n }\n\n function initDocument(targetDocument) {\n detectionStrategy.initDocument && detectionStrategy.initDocument(targetDocument);\n }\n\n return {\n listenTo: listenTo,\n removeListener: eventListenerHandler.removeListener,\n removeAllListeners: eventListenerHandler.removeAllListeners,\n uninstall: uninstall,\n initDocument: initDocument\n };\n};\n\nfunction getOption(options, name, defaultValue) {\n var value = options[name];\n\n if((value === undefined || value === null) && defaultValue !== undefined) {\n return defaultValue;\n }\n\n return value;\n}\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import { identity } from '@antv/util';\nimport { Continuous } from './continuous';\nimport { createInterpolateValue } from '../utils';\nimport { d3Ticks } from '../tick-methods/d3-ticks';\n/**\n * Linear 比例尺\n *\n * 构造可创建一个在输入和输出之间具有线性关系的比例尺\n */\nexport class Linear extends Continuous {\n getDefaultOptions() {\n return {\n domain: [0, 1],\n range: [0, 1],\n unknown: undefined,\n nice: false,\n clamp: false,\n round: false,\n interpolate: createInterpolateValue,\n tickMethod: d3Ticks,\n tickCount: 5,\n };\n }\n chooseTransforms() {\n return [identity, identity];\n }\n clone() {\n return new Linear(this.options);\n }\n}\n//# sourceMappingURL=linear.js.map","import { isNumber } from '@antv/util';\nimport { d3Ticks } from '../tick-methods/d3-ticks';\nimport { Base } from './base';\nexport class Constant extends Base {\n /**\n * 返回需要覆盖的默认选项\n * @returns 需要覆盖的默认选项\n */\n getDefaultOptions() {\n return {\n range: [0],\n domain: [0, 1],\n unknown: undefined,\n tickCount: 5,\n tickMethod: d3Ticks,\n };\n }\n /**\n * 输入和输出满足:y = b,其中 b 是一个常量,是 options.range 的第一个元素\n * @param _ 输入值\n * @returns 输出值(常量)\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n map(_) {\n const [v] = this.options.range;\n return v !== undefined ? v : this.options.unknown;\n }\n /**\n * 如果 x 是该比例尺的常量(\bx === b),返回输入值的范围(即定义域),否者返回 []\n * @param x 输出值 (常量)\n * @returns 定义域\n */\n invert(x) {\n const [v] = this.options.range;\n return x === v && v !== undefined ? this.options.domain : [];\n }\n getTicks() {\n const { tickMethod, domain, tickCount } = this.options;\n const [a, b] = domain;\n if (!isNumber(a) || !isNumber(b))\n return [];\n return tickMethod(a, b, tickCount);\n }\n /**\n * 克隆 Constant Scale\n * @returns 拥有相同选项且独立的 Constant Scale\n */\n clone() {\n return new Constant(this.options);\n }\n}\n//# sourceMappingURL=constant.js.map","import curveLinear from \"./linear.js\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport React, { Fragment } from 'react';\nvar ErrorBoundary = /** @class */ (function (_super) {\n __extends(ErrorBoundary, _super);\n function ErrorBoundary() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n hasError: false,\n };\n _this.renderError = function (e) {\n var errorTemplate = _this.props.errorTemplate;\n switch (e) {\n default:\n if (typeof errorTemplate === 'function')\n return errorTemplate(e);\n return errorTemplate ? errorTemplate : React.createElement(\"h5\", null,\n \"\\u7EC4\\u4EF6\\u51FA\\u9519\\u4E86\\uFF0C\\u8BF7\\u6838\\u67E5\\u540E\\u91CD\\u8BD5\\uFF1A \",\n e.message);\n }\n };\n return _this;\n }\n ErrorBoundary.getDerivedStateFromError = function (error) {\n return { hasError: true, error: error };\n };\n ErrorBoundary.getDerivedStateFromProps = function (nextProps, state) {\n if (state.children !== nextProps.children) {\n return {\n children: nextProps.children,\n hasError: false,\n error: undefined,\n };\n }\n return null;\n };\n ErrorBoundary.prototype.render = function () {\n if (this.state.hasError) {\n return this.renderError(this.state.error);\n }\n return React.createElement(Fragment, null, this.props.children);\n };\n return ErrorBoundary;\n}(React.Component));\nexport { ErrorBoundary };\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport * as React from 'react';\nvar version = React.version || '';\nvar createRoot;\nvar legacyRender;\nvar legacyUnmount;\nvar MARK = '__rc_react_root__';\ntry {\n var mainVersion = parseInt(version.split('.')[0], 10);\n if (mainVersion >= 18) {\n // 动态引入 React 18+ 的 API\n var client = require('react-dom/client');\n createRoot = client.createRoot;\n }\n else {\n // 仅在 React <18 才有 render/unmountComponentAtNode\n var legacyReactDOM = require('react-dom');\n legacyRender = legacyReactDOM.render;\n legacyUnmount = legacyReactDOM.unmountComponentAtNode;\n }\n}\ncatch (e) {\n // 忽略错误\n}\n// ========== 渲染 ==========\nfunction modernRender(node, container) {\n if (!container[MARK]) {\n container[MARK] = createRoot(container);\n }\n container[MARK].render(node);\n}\nfunction fallbackLegacyRender(node, container) {\n if (legacyRender) {\n legacyRender(node, container);\n }\n else {\n throw new Error('ReactDOM.render is not available in this React version');\n }\n}\nexport function render(node, container) {\n if (createRoot) {\n modernRender(node, container);\n }\n else {\n fallbackLegacyRender(node, container);\n }\n}\n// ========== 卸载 ==========\nfunction fallbackLegacyUnmount(container) {\n if (legacyUnmount) {\n legacyUnmount(container);\n }\n else {\n throw new Error('ReactDOM.unmountComponentAtNode is not available in this React version');\n }\n}\nfunction modernUnmount(container) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve().then(function () {\n var _a, _b;\n (_b = (_a = container[MARK]) === null || _a === void 0 ? void 0 : _a.unmount) === null || _b === void 0 ? void 0 : _b.call(_a);\n delete container[MARK];\n })];\n });\n });\n}\nexport function unmount(container) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (createRoot) {\n return [2 /*return*/, modernUnmount(container)];\n }\n else {\n return [2 /*return*/, fallbackLegacyUnmount(container)];\n }\n return [2 /*return*/];\n });\n });\n}\n","var ctx;\n/**\n * 获取 canvas context\n */\nexport var getCanvasContext = function () {\n if (!ctx) {\n ctx = document.createElement('canvas').getContext('2d');\n }\n return ctx;\n};\n","import { render } from '../react/render';\nvar mountMapping = new Map();\nif (typeof document !== 'undefined') {\n mountMapping.set('tooltip', document.createElement('div'));\n}\nexport var createNode = function (children, isTooltip) {\n if (isTooltip === void 0) { isTooltip = false; }\n var mount = null;\n /**\n * @description tooltip 为了防止抖动,只需一个root即可\n */\n if (isTooltip) {\n mount = mountMapping.get('tooltip');\n }\n else {\n mount = document.createElement('div');\n if (children === null || children === void 0 ? void 0 : children.key) {\n var exist = mountMapping.get(children.key);\n if (exist) {\n mount = exist;\n }\n else {\n mountMapping.set(children.key, mount);\n }\n }\n }\n render(children, mount);\n return mount;\n};\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport React from 'react';\nvar shadowLoading = function (ele, style) {\n if (style === void 0) { style = {}; }\n if (typeof document === 'undefined') {\n return 'loading';\n }\n var overStyle = \"\";\n if (style) {\n Object.keys(style).forEach(function (key) {\n overStyle += \"\".concat(key, \": \").concat(style[key], \";\\n\");\n });\n }\n var shadowRoot = ele.attachShadow({ mode: 'open' });\n var shadowDiv = document.createElement('div');\n var shadowStyle = document.createElement('style');\n shadowStyle.innerHTML = \".loading {\\n display: inline-block;\\n position: relative;\\n width: 80px;\\n height: 80px;\\n }\\n .loading div {\\n position: absolute;\\n top: 33px;\\n width: 13px;\\n height: 13px;\\n border-radius: 50%;\\n background: #ccc;\\n animation-timing-function: cubic-bezier(0, 1, 1, 0);\\n \".concat(overStyle, \"\\n }\\n .loading div:nth-child(1) {\\n left: 8px;\\n animation: loading1 0.6s infinite;\\n }\\n .loading div:nth-child(2) {\\n left: 8px;\\n animation: loading2 0.6s infinite;\\n }\\n .loading div:nth-child(3) {\\n left: 32px;\\n animation: loading2 0.6s infinite;\\n }\\n .loading div:nth-child(4) {\\n left: 56px;\\n animation: loading3 0.6s infinite;\\n }\\n @keyframes loading1 {\\n 0% {\\n transform: scale(0);\\n }\\n 100% {\\n transform: scale(1);\\n }\\n }\\n @keyframes loading3 {\\n 0% {\\n transform: scale(1);\\n }\\n 100% {\\n transform: scale(0);\\n }\\n }\\n @keyframes loading2 {\\n 0% {\\n transform: translate(0, 0);\\n }\\n 100% {\\n transform: translate(24px, 0);\\n }\\n }\\n \");\n shadowDiv.classList.add('loading');\n shadowDiv.innerHTML = '
    ';\n shadowRoot.appendChild(shadowStyle);\n shadowRoot.appendChild(shadowDiv);\n};\nexport var ChartLoading = function (_a) {\n var loadingTemplate = _a.loadingTemplate, _b = _a.theme, theme = _b === void 0 ? 'light' : _b, loading = _a.loading;\n var shadow = React.useRef(null);\n var _c = typeof loading === 'object' ? loading : {}, _d = _c.container, container = _d === void 0 ? {} : _d, _e = _c.icon, icon = _e === void 0 ? {} : _e;\n React.useEffect(function () {\n if (!loadingTemplate && shadow.current) {\n shadowLoading(shadow.current, icon);\n }\n }, []);\n var renderLoading = function () {\n if (loadingTemplate)\n return loadingTemplate;\n return React.createElement(\"div\", { ref: shadow });\n };\n return (React.createElement(\"div\", { className: \"charts-loading-container\", style: __assign({ position: 'absolute', width: '100%', height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center', left: 0, top: 0, zIndex: 99, background: theme === 'dark' ? 'rgb(20, 20, 20)' : 'rgb(255, 255, 255)' }, container) }, renderLoading()));\n};\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { isString, memoize, values } from 'lodash';\nimport { getCanvasContext } from './context';\n/**\n * 计算文本在画布中的相关信息(例如它的宽度)\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/CanvasRenderingContext2D/measureText\n */\nexport var measureText = memoize(function (text, font) {\n if (font === void 0) { font = {}; }\n var fontSize = font.fontSize, _a = font.fontFamily, fontFamily = _a === void 0 ? 'sans-serif' : _a, fontWeight = font.fontWeight, fontStyle = font.fontStyle, fontVariant = font.fontVariant;\n var ctx = getCanvasContext();\n // @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/font\n ctx.font = [fontStyle, fontWeight, fontVariant, \"\".concat(fontSize, \"px\"), fontFamily].join(' ');\n return ctx.measureText(isString(text) ? text : '');\n}, function (text, font) {\n if (font === void 0) { font = {}; }\n return __spreadArray([text], values(font), true).join('');\n});\n/**\n * 计算文本在画布中的宽度\n * @param text 文本\n * @param font 字体\n */\nexport var measureTextWidth = function (text, font) {\n if (font === void 0) { font = {}; }\n return measureText(text, font).width;\n};\n/**\n * 计算文本在画布中的实际高度\n * @param text 文本\n * @param font 字体\n */\nexport var measureTextHeight = function (text, font) {\n if (font === void 0) { font = {}; }\n var metrics = measureText(text, font);\n return metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n};\n","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n }\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","\"use strict\";\n// This icon file is generated automatically.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ArrowLeftOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M872 474H286.9l350.2-304c5.6-4.9 2.2-14-5.2-14h-88.5c-3.9 0-7.6 1.4-10.5 3.9L155 487.8a31.96 31.96 0 000 48.3L535.1 866c1.5 1.3 3.3 2 5.2 2h91.5c7.4 0 10.8-9.2 5.2-14L286.9 550H872c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8z\" } }] }, \"name\": \"arrow-left\", \"theme\": \"outlined\" };\nexports.default = ArrowLeftOutlined;\n","// This icon file is generated automatically.\nvar UpOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z\" } }] }, \"name\": \"up\", \"theme\": \"outlined\" };\nexport default UpOutlined;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\nimport * as React from 'react';\nimport UpOutlinedSvg from \"@ant-design/icons-svg/es/asn/UpOutlined\";\nimport AntdIcon from \"../components/AntdIcon\";\nvar UpOutlined = function UpOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _extends({}, props, {\n ref: ref,\n icon: UpOutlinedSvg\n }));\n};\n\n/**![up](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg5MC41IDc1NS4zTDUzNy45IDI2OS4yYy0xMi44LTE3LjYtMzktMTcuNi01MS43IDBMMTMzLjUgNzU1LjNBOCA4IDAgMDAxNDAgNzY4aDc1YzUuMSAwIDkuOS0yLjUgMTIuOS02LjZMNTEyIDM2OS44bDI4NC4xIDM5MS42YzMgNC4xIDcuOCA2LjYgMTIuOSA2LjZoNzVjNi41IDAgMTAuMy03LjQgNi41LTEyLjd6IiAvPjwvc3ZnPg==) */\nvar RefIcon = /*#__PURE__*/React.forwardRef(UpOutlined);\nif (process.env.NODE_ENV !== 'production') {\n RefIcon.displayName = 'UpOutlined';\n}\nexport default RefIcon;","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { angleOf } from '../utils/coordinate';\nimport { LinearAxis } from './axis';\nfunction inferTitleTransform(orientation) {\n const internalOrientation = orientation % (Math.PI * 2);\n if (internalOrientation === Math.PI / 2) {\n return { titleTransform: 'translate(0, 50%)' };\n }\n if (internalOrientation > -Math.PI / 2 && internalOrientation < Math.PI / 2) {\n return { titleTransform: 'translate(50%, 0)' };\n }\n if (internalOrientation > Math.PI / 2 &&\n internalOrientation < (Math.PI * 3) / 2) {\n return { titleTransform: 'translate(-50%, 0)' };\n }\n return {};\n}\nfunction inferAxisStyle(options, theme, coordinate, scales) {\n const { radar } = options;\n const [scale] = scales;\n const name = scale.getOptions().name;\n const [startAngle, endAngle] = angleOf(coordinate);\n const { axisRadar: radarTheme = {} } = theme;\n return Object.assign(Object.assign({}, radarTheme), { grid: name === 'position', gridConnect: 'line', gridControlAngles: new Array(radar.count).fill(0).map((_, i) => {\n const angle = (endAngle - startAngle) / radar.count;\n return angle * i;\n }) });\n}\nexport const AxisRadar = (options) => {\n const { important = {} } = options, restOptions = __rest(options, [\"important\"]);\n return (context) => {\n const { theme, coordinate, scales } = context;\n return LinearAxis(Object.assign(Object.assign(Object.assign({}, restOptions), inferTitleTransform(options.orientation)), { important: Object.assign(Object.assign({}, inferAxisStyle(options, theme, coordinate, scales)), important) }))(context);\n };\n};\nAxisRadar.props = Object.assign(Object.assign({}, LinearAxis.props), { defaultPosition: 'center' });\n//# sourceMappingURL=axisRadar.js.map","import { LegendContinuous } from './legendContinuous';\nexport const LegendContinuousBlock = (options) => {\n return (...args) => LegendContinuous(Object.assign({}, { block: true }, options))(...args);\n};\nLegendContinuousBlock.props = Object.assign(Object.assign({}, LegendContinuous.props), { defaultPosition: 'top', defaultOrientation: 'horizontal' });\n//# sourceMappingURL=legendContinuousBlock.js.map","import { scaleOf } from './utils';\nimport { LegendContinuous } from './legendContinuous';\nexport const LegendContinuousSize = (options) => {\n return (context) => {\n const { scales } = context;\n const sizeScale = scaleOf(scales, 'size');\n return LegendContinuous(Object.assign({}, {\n type: 'size',\n data: sizeScale.getTicks().map((value, index) => ({\n value,\n label: String(value),\n })),\n }, options))(context);\n };\n};\nLegendContinuousSize.props = Object.assign(Object.assign({}, LegendContinuous.props), { defaultPosition: 'top', defaultOrientation: 'horizontal' });\n//# sourceMappingURL=legendContinuousSize.js.map","import { LegendContinuous } from './legendContinuous';\nimport { LegendContinuousSize } from './legendContinuousSize';\nexport const LegendContinuousBlockSize = (options) => {\n return LegendContinuousSize(Object.assign({}, { block: true }, options));\n};\nLegendContinuousBlockSize.props = Object.assign(Object.assign({}, LegendContinuous.props), { defaultPosition: 'top', defaultOrientation: 'horizontal' });\n//# sourceMappingURL=legendContinuousBlockSize.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n// @todo Move this to runtime.\nexport const Mark = ({ static: isStatic = false, } = {}) => {\n return (options) => {\n const { width, height, depth, paddingLeft, paddingRight, paddingTop, paddingBottom, padding, inset, insetLeft, insetTop, insetRight, insetBottom, margin, marginLeft, marginBottom, marginTop, marginRight, data, coordinate, theme, component, interaction, x, y, z, key, frame, labelTransform, parentKey, clip, viewStyle, title } = options, mark = __rest(options, [\"width\", \"height\", \"depth\", \"paddingLeft\", \"paddingRight\", \"paddingTop\", \"paddingBottom\", \"padding\", \"inset\", \"insetLeft\", \"insetTop\", \"insetRight\", \"insetBottom\", \"margin\", \"marginLeft\", \"marginBottom\", \"marginTop\", \"marginRight\", \"data\", \"coordinate\", \"theme\", \"component\", \"interaction\", \"x\", \"y\", \"z\", \"key\", \"frame\", \"labelTransform\", \"parentKey\", \"clip\", \"viewStyle\", \"title\"]);\n return [\n Object.assign(Object.assign({ type: 'standardView', x,\n y,\n z,\n key,\n width,\n height,\n depth,\n padding,\n paddingLeft,\n paddingRight,\n paddingTop,\n inset,\n insetLeft,\n insetTop,\n insetRight,\n insetBottom,\n paddingBottom,\n theme,\n coordinate,\n component,\n interaction,\n frame,\n labelTransform,\n margin,\n marginLeft,\n marginBottom,\n marginTop,\n marginRight,\n parentKey,\n clip, style: viewStyle }, (!isStatic && { title })), { marks: [Object.assign(Object.assign(Object.assign({}, mark), { key: `${key}-0`, data }), (isStatic && { title }))] }),\n ];\n };\n};\nMark.props = {};\n//# sourceMappingURL=mark.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix } from '@antv/util';\nimport { mergeData } from './utils';\n/**\n * @todo Propagate more options to children.(e.g. filter)\n * @todo Propagate encode options to children. This is useful for Matrix composition.\n * @todo Move this to runtime, do not treat it as a composition to cause confusion.\n */\nexport const View = () => {\n return (options) => {\n const { children } = options, restOptions = __rest(options, [\"children\"]);\n if (!Array.isArray(children))\n return [];\n const { data: viewData, scale: viewScale = {}, axis: viewAxis = {}, legend: viewLegend = {}, encode: viewEncode = {}, transform: viewTransform = [] } = restOptions, rest = __rest(restOptions, [\"data\", \"scale\", \"axis\", \"legend\", \"encode\", \"transform\"]);\n const marks = children.map((_a) => {\n var { data, scale = {}, axis = {}, legend = {}, encode = {}, transform = [] } = _a, rest = __rest(_a, [\"data\", \"scale\", \"axis\", \"legend\", \"encode\", \"transform\"]);\n return (Object.assign({ data: mergeData(data, viewData), scale: deepMix({}, viewScale, scale), encode: deepMix({}, viewEncode, encode), transform: [...viewTransform, ...transform], axis: axis && viewAxis ? deepMix({}, viewAxis, axis) : false, legend: legend && viewLegend ? deepMix({}, viewLegend, legend) : false }, rest));\n });\n return [Object.assign(Object.assign({}, rest), { marks, type: 'standardView' })];\n };\n};\nView.props = {};\n//# sourceMappingURL=view.js.map","import { maxIndex } from '@antv/vendor/d3-array';\nimport { sub, angle } from '../../../utils/vector';\n/**\n * Only for Area label.\n */\nexport function area(position, points, value, coordinate) {\n const l = points.length / 2;\n const Y1 = points.slice(0, l);\n const Y0 = points.slice(l);\n // Get the maximal space for label.\n let idx = maxIndex(Y1, (p, i) => Math.abs(p[1] - Y0[i][1]));\n // Do not show label at first and last.\n idx = Math.max(Math.min(idx, l - 2), 1);\n const mid = (i) => [Y1[i][0], (Y1[i][1] + Y0[i][1]) / 2];\n const point = mid(idx);\n const prev = mid(idx - 1);\n const next = mid(idx + 1);\n // todo: G rotate only support deg.\n const rotate = (angle(sub(next, prev)) / Math.PI) * 180;\n return {\n x: point[0],\n y: point[1],\n transform: `rotate(${rotate})`,\n textAlign: 'center',\n textBaseline: 'middle',\n };\n}\n//# sourceMappingURL=area.js.map","import { getArcObject } from '../../../shape/utils';\nimport { isCircular, isRadial } from '../../../utils/coordinate';\nimport { maybePercentage } from '../../../utils/helper';\nimport { mid } from '../../../utils/vector';\nexport function inferNonCircularStyle(position, points, value, coordinate) {\n const { bounds } = value;\n const [[x0, y0], [x1, y1]] = bounds;\n const w = x1 - x0;\n const h = y1 - y0;\n const xy = (options) => {\n const { x: ox, y: oy } = options;\n const px = maybePercentage(value.x, w);\n const py = maybePercentage(value.y, h);\n return Object.assign(Object.assign({}, options), { x: (px || ox) + x0, y: (py || oy) + y0 });\n };\n // 4 direction.\n if (position === 'left')\n return xy({ x: 0, y: h / 2, textAlign: 'start', textBaseline: 'middle' });\n if (position === 'right')\n return xy({ x: w, y: h / 2, textAlign: 'end', textBaseline: 'middle' });\n if (position === 'top')\n return xy({ x: w / 2, y: 0, textAlign: 'center', textBaseline: 'top' });\n if (position === 'bottom')\n return xy({ x: w / 2, y: h, textAlign: 'center', textBaseline: 'bottom' });\n // 4 corner position.\n if (position === 'top-left')\n return xy({ x: 0, y: 0, textAlign: 'start', textBaseline: 'top' });\n if (position === 'top-right')\n return xy({ x: w, y: 0, textAlign: 'end', textBaseline: 'top' });\n if (position === 'bottom-left')\n return xy({ x: 0, y: h, textAlign: 'start', textBaseline: 'bottom' });\n if (position === 'bottom-right')\n return xy({ x: w, y: h, textAlign: 'end', textBaseline: 'bottom' });\n // default return 'inside'\n return xy({\n x: w / 2,\n y: h / 2,\n textAlign: 'center',\n textBaseline: 'middle',\n });\n}\nexport function inferRadialStyle(position, points, value, coordinate) {\n const { y, y1, autoRotate, rotateToAlignArc } = value;\n const center = coordinate.getCenter();\n const arcObject = getArcObject(coordinate, points, [y, y1]);\n const { innerRadius, outerRadius, startAngle, endAngle } = arcObject;\n const angle = position === 'inside' ? (startAngle + endAngle) / 2 : endAngle;\n const rotate = inferRotation(angle, autoRotate, rotateToAlignArc);\n const point = (() => {\n const [p0, p1] = points;\n const radius = innerRadius + (outerRadius - innerRadius) * 0.5;\n const [x, y] = position === 'inside' ? pointOfArc(center, angle, radius) : mid(p0, p1);\n return { x, y };\n })();\n return Object.assign(Object.assign({}, point), { textAlign: position === 'inside' ? 'center' : 'start', textBaseline: 'middle', rotate });\n}\nexport function pointOfArc(center, angle, radius) {\n return [\n center[0] + Math.sin(angle) * radius,\n center[1] - Math.cos(angle) * radius,\n ];\n}\nexport function inferRotation(angle, autoRotate, rotateToAlignArc) {\n if (!autoRotate)\n return 0;\n const append = rotateToAlignArc ? 0 : Math.sin(angle) < 0 ? 90 : -90;\n return (angle / Math.PI) * 180 + append;\n}\nfunction inferInnerCircularStyle(position, points, value, coordinate) {\n const { y, y1, autoRotate, rotateToAlignArc, radius: radiusRatio = 0.5, offset = 0, } = value;\n const arcObject = getArcObject(coordinate, points, [y, y1]);\n const { startAngle, endAngle } = arcObject;\n const center = coordinate.getCenter();\n const angle = (startAngle + endAngle) / 2;\n const rotate = inferRotation(angle, autoRotate, rotateToAlignArc);\n const textStyle = { textAlign: 'center', textBaseline: 'middle', rotate };\n const { innerRadius, outerRadius } = arcObject;\n const r0 = innerRadius + (outerRadius - innerRadius) * radiusRatio;\n const r1 = r0 + offset;\n const [x0, y0] = pointOfArc(center, angle, r1);\n return Object.assign({ x: x0, y: y0 }, textStyle);\n}\n// Set to null will not be set with default value as below.\n// const { x = 0 } = options;\nfunction maybeUndefined(d) {\n return d === undefined ? null : d;\n}\nexport function inferIdentityStyle(position, points, value, coordinate) {\n const { bounds } = value;\n const [p] = bounds;\n return {\n x: maybeUndefined(p[0]),\n y: maybeUndefined(p[1]),\n };\n}\nexport function getDefaultStyle(position, points, value, coordinate) {\n const { bounds } = value;\n // When bounds.length = 1\n // For series mark, such as line and area.\n // The bounds for text is defined with only one point.\n // Use this point as the label position.\n if (bounds.length === 1) {\n return inferIdentityStyle(position, points, value, coordinate);\n }\n const inferDefaultStyle = isRadial(coordinate)\n ? inferRadialStyle\n : isCircular(coordinate)\n ? inferInnerCircularStyle\n : inferNonCircularStyle;\n return inferDefaultStyle(position, points, value, coordinate);\n}\n//# sourceMappingURL=default.js.map","import { getArcObject } from '../../../shape/utils';\nimport { isCircular, isRadial } from '../../../utils/coordinate';\nimport { pointOfArc, inferRotation, inferIdentityStyle, inferRadialStyle, inferNonCircularStyle, } from './default';\nexport function linePoints(center, angle, radius, radius1, offsetX) {\n const [x0, y0] = pointOfArc(center, angle, radius);\n const [x1, y1] = pointOfArc(center, angle, radius1);\n const sign = Math.sin(angle) > 0 ? 1 : -1;\n return [\n [x0, y0],\n [x1, y1],\n [x1 + sign * offsetX, y1],\n ];\n}\nexport function radiusOf(points, value, coordinate) {\n const arcObject = getArcObject(coordinate, points, [value.y, value.y1]);\n const { innerRadius, outerRadius } = arcObject;\n return innerRadius + (outerRadius - innerRadius);\n}\nexport function angleOf(points, value, coordinate) {\n const arcObject = getArcObject(coordinate, points, [value.y, value.y1]);\n const { startAngle, endAngle } = arcObject;\n return (startAngle + endAngle) / 2;\n}\nexport function inferOutsideCircularStyle(position, points, value, coordinate) {\n const { autoRotate, rotateToAlignArc, offset = 0, connector = true, connectorLength = offset, connectorLength2 = 0, connectorDistance = 0, } = value;\n const center = coordinate.getCenter();\n const angle = angleOf(points, value, coordinate);\n const sign = Math.sin(angle) > 0 ? 1 : -1;\n const rotate = inferRotation(angle, autoRotate, rotateToAlignArc);\n const textStyle = {\n textAlign: sign > 0 || isRadial(coordinate) ? 'start' : 'end',\n textBaseline: 'middle',\n rotate,\n };\n const radius = radiusOf(points, value, coordinate);\n const radius1 = radius + (connector ? connectorLength : offset);\n const [[x0, y0], [x1, y1], [x2, y2]] = linePoints(center, angle, radius, radius1, connector ? connectorLength2 : 0);\n const dx = connector ? +connectorDistance * sign : 0;\n const x = x2 + dx;\n const y = y2;\n const connectorStyle = {\n connector,\n connectorPoints: [\n [x1 - x, y1 - y],\n [x2 - x, y2 - y],\n ],\n };\n return Object.assign(Object.assign({ x0,\n y0, x: x2 + dx, y: y2 }, textStyle), connectorStyle);\n}\nexport function outside(position, points, value, coordinate) {\n const { bounds } = value;\n // When bounds.length = 1\n // For series mark, such as line and area.\n // The bounds for text is defined with only one point.\n // Use this point as the label position.\n if (bounds.length === 1) {\n return inferIdentityStyle(position, points, value, coordinate);\n }\n const inferDefaultStyle = isRadial(coordinate)\n ? inferRadialStyle\n : isCircular(coordinate)\n ? inferOutsideCircularStyle\n : inferNonCircularStyle;\n return inferDefaultStyle(position, points, value, coordinate);\n}\n//# sourceMappingURL=outside.js.map","import { sort } from '@antv/vendor/d3-array';\n// Optimize antiCollision from: https://github.com/antvis/G2/blob/master/src/geometry/label/layout/pie/util.ts\nexport function dodgeY(labels, options = {}) {\n const { labelHeight = 14, height } = options;\n // Sort labels by y and init boxes (one box for each label)\n const sortedLabels = sort(labels, (d) => d.y);\n const n = sortedLabels.length;\n const boxes = new Array(n);\n for (let i = 0; i < n; i++) {\n const label = sortedLabels[i];\n const { y } = label;\n boxes[i] = { y, y1: y + labelHeight, labels: [y] };\n }\n // Merge boxes until no overlapping boxes or only one box left.\n // All the boxes should start higher than 0, but maybe higher than height.\n let overlap = true;\n while (overlap) {\n overlap = false;\n // Scan backward because boxes maybe deleted.\n for (let i = boxes.length - 1; i > 0; i--) {\n const box = boxes[i];\n const preBox = boxes[i - 1];\n if (preBox.y1 > box.y) {\n overlap = true;\n preBox.labels.push(...box.labels);\n boxes.splice(i, 1);\n // Compute new y1 to contain the current box.\n preBox.y1 += box.y1 - box.y;\n // Make sure the new box is in the range of [0, height].\n const newHeight = preBox.y1 - preBox.y;\n preBox.y1 = Math.max(Math.min(preBox.y1, height), newHeight);\n preBox.y = preBox.y1 - newHeight;\n }\n }\n }\n let i = 0;\n for (const box of boxes) {\n const { y, labels } = box;\n let prevY = y - labelHeight;\n for (const curY of labels) {\n const label = sortedLabels[i++];\n const expectedY = prevY + labelHeight;\n const dy = expectedY - curY;\n label.connectorPoints[0][1] -= dy;\n label.y = prevY + labelHeight;\n prevY += labelHeight;\n }\n }\n}\nexport function hideAndDodgeY(unsorted, options) {\n const labels = sort(unsorted, (d) => d.y);\n const { height, labelHeight = 14 } = options;\n const maxCount = Math.ceil(height / labelHeight);\n if (labels.length <= maxCount)\n return dodgeY(labels, options);\n const filtered = [];\n for (let i = 0; i < labels.length; i++) {\n // Hide labels out of range.\n if (i < labels.length - maxCount) {\n labels[i].opacity = 0;\n labels[i].connector = false;\n }\n else\n filtered.push(labels[i]);\n }\n dodgeY(filtered, options);\n}\n//# sourceMappingURL=utils.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { isCircular } from '../../../utils/coordinate';\nimport { inferOutsideCircularStyle, radiusOf, angleOf } from './outside';\nimport { hideAndDodgeY } from './utils';\nconst styleByPoints = new WeakMap();\nfunction compute(points, value, coordinate) {\n const { connectorLength, connectorLength2, connectorDistance } = value;\n const style = __rest(inferOutsideCircularStyle('outside', points, value, coordinate), []);\n const center = coordinate.getCenter();\n const radius = radiusOf(points, value, coordinate);\n const angle = angleOf(points, value, coordinate);\n const radius1 = radius + connectorLength + connectorLength2;\n const sign = Math.sin(angle) > 0 ? 1 : -1;\n const newX = center[0] + (radius1 + +connectorDistance) * sign;\n const { x: originX } = style;\n const dx = newX - originX;\n style.x += dx;\n style.connectorPoints[0][0] -= dx;\n return style;\n}\n/**\n * Spider label transform only suitable for the labels in polar coordinate,\n * labels should distinguish coordinate type.\n */\nexport function spider(position, points, value, coordinate, options, labels) {\n if (!isCircular(coordinate))\n return {};\n if (styleByPoints.has(points))\n return styleByPoints.get(points);\n const computed = labels.map((points) => compute(points, value, coordinate));\n const { width, height } = coordinate.getOptions();\n const left = computed.filter((d) => d.x < width / 2);\n const right = computed.filter((d) => d.x >= width / 2);\n const extendedOptions = Object.assign(Object.assign({}, options), { height });\n hideAndDodgeY(left, extendedOptions);\n hideAndDodgeY(right, extendedOptions);\n computed.forEach((style, i) => styleByPoints.set(labels[i], style));\n return styleByPoints.get(points);\n}\n//# sourceMappingURL=spider.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { getRadius, isCircular } from '../../../utils/coordinate';\nimport { angleWithQuadrant } from '../../../utils/vector';\nimport { pointOfArc } from './default';\nimport { inferOutsideCircularStyle } from './outside';\n/**\n * Surround label transform is used to make labels surround circular.\n */\nexport function surround(position, points, value, coordinate) {\n if (!isCircular(coordinate))\n return {};\n const { connectorLength, connectorLength2, connectorDistance } = value;\n const style = __rest(inferOutsideCircularStyle('outside', points, value, coordinate), []);\n const { x0, y0 } = style;\n const center = coordinate.getCenter();\n const radius = getRadius(coordinate);\n const radius1 = radius + connectorLength;\n const angle = angleWithQuadrant([x0 - center[0], y0 - center[1]]);\n const sign = Math.sin(angle) > 0 ? 1 : -1;\n const [newX, newY] = pointOfArc(center, angle, radius1);\n style.x = newX + (connectorLength2 + connectorDistance) * sign;\n style.y = newY;\n return style;\n}\n//# sourceMappingURL=surround.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { select } from '../../utils/selection';\nimport { applyStyle } from '../../shape/utils';\nimport { isTranspose, isCircular } from '../../utils/coordinate';\nimport { camelCase } from '../../utils/string';\nimport { Advance } from '../text/advance';\nimport * as PositionProcessor from './position';\nfunction inferPosition(position, coordinate) {\n if (position !== undefined)\n return position;\n if (isCircular(coordinate))\n return 'inside';\n if (isTranspose(coordinate))\n return 'right';\n return 'top';\n}\nfunction getDefaultStyle(points, value, coordinate, theme, options, labels) {\n // For non-series mark, calc position for label based on\n // position and the bounds of shape.\n const { position } = value;\n const { render } = options;\n const p = inferPosition(position, coordinate);\n const labelType = render\n ? 'htmlLabel'\n : p === 'inside'\n ? 'innerLabel'\n : 'label';\n const t = theme[labelType];\n const v = Object.assign({}, t, value);\n const processor = PositionProcessor[camelCase(p)];\n if (!processor) {\n throw new Error(`Unknown position: ${p}`);\n }\n return Object.assign(Object.assign({}, t), processor(p, points, v, coordinate, options, labels));\n}\n/**\n * Render normal label for each mark.\n * @todo Support position option: middle...\n */\nexport const Label = (options, context) => {\n const { coordinate, theme } = context;\n const { render } = options;\n return (points, value, style, labels) => {\n const { text, x, y, transform: specifiedTS = '', transformOrigin, className = '' } = value, overrideStyle = __rest(value, [\"text\", \"x\", \"y\", \"transform\", \"transformOrigin\", \"className\"]);\n const _a = getDefaultStyle(points, value, coordinate, theme, options, labels), { rotate = 0, transform = '' } = _a, defaultStyle = __rest(_a, [\"rotate\", \"transform\"]);\n return select(new Advance())\n .call(applyStyle, defaultStyle)\n .style('text', `${text}`)\n .style('className', `${className} g2-label`)\n .style('innerHTML', render ? render(text, value.datum, value.index) : undefined)\n .style('labelTransform', `${transform} rotate(${+rotate}) ${specifiedTS}`.trim())\n .style('labelTransformOrigin', transformOrigin)\n .style('coordCenter', coordinate.getCenter())\n .call(applyStyle, overrideStyle)\n .node();\n };\n};\nLabel.props = {\n defaultMarker: 'point',\n};\n//# sourceMappingURL=label.js.map","import { ChartEvent } from '../utils/event';\nimport { dataOf } from '../utils/helper';\nimport { maybeRoot } from './utils';\n// For extended component\nfunction maybeComponentRoot(node) {\n return maybeRoot(node, (node) => node.className === 'component');\n}\n// For extended shape.\nfunction maybeElementRoot(node) {\n return maybeRoot(node, (node) => node.className === 'element');\n}\n// For extended label.\nfunction maybeLabelRoot(node) {\n return maybeRoot(node, (node) => node.className === 'label');\n}\nfunction bubblesEvent(eventType, view, emitter, predicate = (event) => true) {\n return (e) => {\n if (!predicate(e))\n return;\n // Emit plot events.\n emitter.emit(`plot:${eventType}`, e);\n const { target } = e;\n // There is no target for pointerupoutside event if out of canvas.\n if (!target)\n return;\n const { className } = target;\n // If target area is plot area, do not emit extra events.\n if (className === 'plot')\n return;\n // If target is element or child of element.\n const elementRoot = maybeElementRoot(target);\n // If target is component or child of component.\n const componentRoot = maybeComponentRoot(target);\n // If target is babel or child of babel.\n const babelRoot = maybeLabelRoot(target);\n const root = elementRoot || componentRoot || babelRoot;\n if (!root)\n return;\n const { className: elementType, markType } = root;\n const e1 = Object.assign(Object.assign({}, e), { nativeEvent: true });\n if (elementType === 'element') {\n e1['data'] = { data: dataOf(root, view) };\n emitter.emit(`element:${eventType}`, e1);\n emitter.emit(`${markType}:${eventType}`, e1);\n }\n else if (elementType === 'label') {\n //label children [Text2, Rect2, Path2],\n e1['data'] = { data: root.attributes.datum };\n emitter.emit(`label:${eventType}`, e1);\n emitter.emit(`${className}:${eventType}`, e1);\n }\n else {\n emitter.emit(`component:${eventType}`, e1);\n emitter.emit(`${className}:${eventType}`, e1);\n }\n };\n}\n// @todo Provide more info for event.dataset.\nexport function Event() {\n return (context, _, emitter) => {\n const { container, view } = context;\n // Click events.\n const click = bubblesEvent(ChartEvent.CLICK, view, emitter, (e) => e.detail === 1);\n const dblclick = bubblesEvent(ChartEvent.DBLCLICK, view, emitter, (e) => e.detail === 2);\n // Pointer events.\n const pointertap = bubblesEvent(ChartEvent.POINTER_TAP, view, emitter);\n const pointerdown = bubblesEvent(ChartEvent.POINTER_DOWN, view, emitter);\n const pointerup = bubblesEvent(ChartEvent.POINTER_UP, view, emitter);\n const pointerover = bubblesEvent(ChartEvent.POINTER_OVER, view, emitter);\n const pointerout = bubblesEvent(ChartEvent.POINTER_OUT, view, emitter);\n const pointermove = bubblesEvent(ChartEvent.POINTER_MOVE, view, emitter);\n const pointerenter = bubblesEvent(ChartEvent.POINTER_ENTER, view, emitter);\n const pointerleave = bubblesEvent(ChartEvent.POINTER_LEAVE, view, emitter);\n const pointerupoutside = bubblesEvent(ChartEvent.POINTER_UPOUTSIDE, view, emitter);\n // Drag and drop events.\n const dragstart = bubblesEvent(ChartEvent.DRAG_START, view, emitter);\n const drag = bubblesEvent(ChartEvent.DRAG, view, emitter);\n const dragend = bubblesEvent(ChartEvent.DRAG_END, view, emitter);\n const dragenter = bubblesEvent(ChartEvent.DRAG_ENTER, view, emitter);\n const dragleave = bubblesEvent(ChartEvent.DRAG_LEAVE, view, emitter);\n const dragover = bubblesEvent(ChartEvent.DRAG_OVER, view, emitter);\n const drop = bubblesEvent(ChartEvent.DROP, view, emitter);\n // For legacy usage.\n container.addEventListener('click', click);\n container.addEventListener('click', dblclick);\n // Recommend events.\n container.addEventListener('pointertap', pointertap);\n container.addEventListener('pointerdown', pointerdown);\n container.addEventListener('pointerup', pointerup);\n container.addEventListener('pointerover', pointerover);\n container.addEventListener('pointerout', pointerout);\n container.addEventListener('pointermove', pointermove);\n container.addEventListener('pointerenter', pointerenter);\n container.addEventListener('pointerleave', pointerleave);\n container.addEventListener('pointerupoutside', pointerupoutside);\n // Plugin events.\n container.addEventListener('dragstart', dragstart);\n container.addEventListener('drag', drag);\n container.addEventListener('dragend', dragend);\n container.addEventListener('dragenter', dragenter);\n container.addEventListener('dragleave', dragleave);\n container.addEventListener('dragover', dragover);\n container.addEventListener('drop', drop);\n return () => {\n container.removeEventListener('click', click);\n container.removeEventListener('click', dblclick);\n container.removeEventListener('pointertap', pointertap);\n container.removeEventListener('pointerdown', pointerdown);\n container.removeEventListener('pointerup', pointerup);\n container.removeEventListener('pointerover', pointerover);\n container.removeEventListener('pointerout', pointerout);\n container.removeEventListener('pointermove', pointermove);\n container.removeEventListener('pointerenter', pointerenter);\n container.removeEventListener('pointerleave', pointerleave);\n container.removeEventListener('pointerupoutside', pointerupoutside);\n container.removeEventListener('dragstart', dragstart);\n container.removeEventListener('drag', drag);\n container.removeEventListener('dragend', dragend);\n container.removeEventListener('dragenter', dragenter);\n container.removeEventListener('dragleave', dragleave);\n container.removeEventListener('dragover', dragover);\n container.removeEventListener('drop', drop);\n };\n };\n}\nEvent.props = {\n reapplyWhenUpdate: true,\n};\n//# sourceMappingURL=event.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { error } from '../utils/helper';\nimport { builtinlib } from '../lib/builtinlib';\nexport function useLibrary(namespace, publicLibrary) {\n const library = Object.assign(Object.assign({}, builtinlib()), publicLibrary);\n const create = (type) => {\n if (typeof type !== 'string')\n return type;\n const key = `${namespace}.${type}`;\n return library[key] || error(`Unknown Component: ${key}`);\n };\n const use = (options, context) => {\n const { type } = options, rest = __rest(options, [\"type\"]);\n if (!type)\n error(`Plot type is required!`);\n const currentLibrary = create(type);\n return currentLibrary === null || currentLibrary === void 0 ? void 0 : currentLibrary(rest, context);\n };\n return [use, create];\n}\nexport function documentOf(library) {\n const { canvas, group } = library;\n return ((canvas === null || canvas === void 0 ? void 0 : canvas.document) ||\n (group === null || group === void 0 ? void 0 : group.ownerDocument) ||\n error(`Cannot find library document`));\n}\n//# sourceMappingURL=library.js.map","import { AxisLinear, AxisArc, AxisRadar, LegendContinuousBlock, LegendContinuousBlockSize, LegendContinuousSize, } from '../component';\nimport { Mark, View } from '../composition';\nimport { LabelShape } from '../shape';\nimport { Event } from '../interaction/event';\n// Some private visual components, they are not public to\n// users, only for runtime.\nexport function builtinlib() {\n return {\n 'component.axisRadar': AxisRadar,\n 'component.axisLinear': AxisLinear,\n 'component.axisArc': AxisArc,\n 'component.legendContinuousBlock': LegendContinuousBlock,\n 'component.legendContinuousBlockSize': LegendContinuousBlockSize,\n 'component.legendContinuousSize': LegendContinuousSize,\n 'interaction.event': Event,\n 'composition.mark': Mark,\n 'composition.view': View,\n 'shape.label.label': LabelShape,\n };\n}\n//# sourceMappingURL=builtinlib.js.map","/**\n * 计算数组的最大值\n * @param arr 数组\n * @return 最大值\n */\nexport default function max(arr) {\n if (!Array.isArray(arr))\n return -Infinity;\n var length = arr.length;\n if (!length)\n return -Infinity;\n var max = arr[0];\n for (var i = 1; i < length; i++) {\n max = Math.max(max, arr[i]);\n }\n return max;\n}\n//# sourceMappingURL=max.js.map","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","// src/device/DeviceAttribute.ts\nvar DeviceAttribute = class {\n constructor(device, options) {\n const { buffer, offset, stride, normalized, size, divisor, shaderLocation } = options;\n this.buffer = buffer;\n this.attribute = {\n shaderLocation,\n buffer: buffer.get(),\n offset: offset || 0,\n stride: stride || 0,\n normalized: normalized || false,\n divisor: divisor || 0\n };\n if (size) {\n this.attribute.size = size;\n }\n }\n get() {\n return this.buffer;\n }\n updateBuffer(options) {\n this.buffer.subData(options);\n }\n destroy() {\n this.buffer.destroy();\n }\n};\nexport {\n DeviceAttribute as default\n};\n","// src/device/constants.ts\nimport {\n AddressMode,\n BlendFactor,\n BlendMode,\n BufferFrequencyHint,\n CompareFunction,\n CullMode,\n Format,\n PrimitiveTopology,\n StencilOp\n} from \"@antv/g-device-api\";\nimport { gl } from \"@antv/l7-core\";\nvar typedArrayCtorMap = {\n [gl.FLOAT]: Float32Array,\n [gl.UNSIGNED_BYTE]: Uint8Array,\n [gl.SHORT]: Int16Array,\n [gl.UNSIGNED_SHORT]: Uint16Array,\n [gl.INT]: Int32Array,\n [gl.UNSIGNED_INT]: Uint32Array\n};\nvar primitiveMap = {\n [gl.POINTS]: PrimitiveTopology.POINTS,\n [gl.LINES]: PrimitiveTopology.LINES,\n [gl.LINE_LOOP]: PrimitiveTopology.LINES,\n [gl.LINE_STRIP]: PrimitiveTopology.LINE_STRIP,\n [gl.TRIANGLES]: PrimitiveTopology.TRIANGLES,\n [gl.TRIANGLE_FAN]: PrimitiveTopology.TRIANGLES,\n [gl.TRIANGLE_STRIP]: PrimitiveTopology.TRIANGLE_STRIP\n};\nvar sizeFormatMap = {\n [1]: Format.F32_R,\n [2]: Format.F32_RG,\n [3]: Format.F32_RGB,\n [4]: Format.F32_RGBA\n};\nvar hintMap = {\n [gl.STATIC_DRAW]: BufferFrequencyHint.STATIC,\n [gl.DYNAMIC_DRAW]: BufferFrequencyHint.DYNAMIC,\n [gl.STREAM_DRAW]: BufferFrequencyHint.DYNAMIC\n};\nvar wrapModeMap = {\n [gl.REPEAT]: AddressMode.REPEAT,\n [gl.CLAMP_TO_EDGE]: AddressMode.CLAMP_TO_EDGE,\n [gl.MIRRORED_REPEAT]: AddressMode.MIRRORED_REPEAT\n};\nvar depthFuncMap = {\n [gl.NEVER]: CompareFunction.NEVER,\n [gl.ALWAYS]: CompareFunction.ALWAYS,\n [gl.LESS]: CompareFunction.LESS,\n [gl.LEQUAL]: CompareFunction.LEQUAL,\n [gl.GREATER]: CompareFunction.GREATER,\n [gl.GEQUAL]: CompareFunction.GEQUAL,\n [gl.EQUAL]: CompareFunction.EQUAL,\n [gl.NOTEQUAL]: CompareFunction.NOTEQUAL\n};\nvar cullFaceMap = {\n [gl.FRONT]: CullMode.FRONT,\n [gl.BACK]: CullMode.BACK\n};\nvar blendEquationMap = {\n [gl.FUNC_ADD]: BlendMode.ADD,\n [gl.MIN_EXT]: BlendMode.MIN,\n [gl.MAX_EXT]: BlendMode.MAX,\n [gl.FUNC_SUBTRACT]: BlendMode.SUBSTRACT,\n [gl.FUNC_REVERSE_SUBTRACT]: BlendMode.REVERSE_SUBSTRACT\n};\nvar blendFuncMap = {\n [gl.ZERO]: BlendFactor.ZERO,\n [gl.ONE]: BlendFactor.ONE,\n [gl.SRC_COLOR]: BlendFactor.SRC,\n [gl.ONE_MINUS_SRC_COLOR]: BlendFactor.ONE_MINUS_SRC,\n [gl.SRC_ALPHA]: BlendFactor.SRC_ALPHA,\n [gl.ONE_MINUS_SRC_ALPHA]: BlendFactor.ONE_MINUS_SRC_ALPHA,\n [gl.DST_COLOR]: BlendFactor.DST,\n [gl.ONE_MINUS_DST_COLOR]: BlendFactor.ONE_MINUS_DST,\n [gl.DST_ALPHA]: BlendFactor.DST_ALPHA,\n [gl.ONE_MINUS_DST_ALPHA]: BlendFactor.ONE_MINUS_DST_ALPHA,\n [gl.CONSTANT_COLOR]: BlendFactor.CONST,\n [gl.ONE_MINUS_CONSTANT_COLOR]: BlendFactor.ONE_MINUS_CONSTANT,\n [gl.CONSTANT_ALPHA]: BlendFactor.CONST,\n [gl.ONE_MINUS_CONSTANT_ALPHA]: BlendFactor.ONE_MINUS_CONSTANT,\n [gl.SRC_ALPHA_SATURATE]: BlendFactor.SRC_ALPHA_SATURATE\n};\nvar stencilOpMap = {\n [gl.REPLACE]: StencilOp.REPLACE,\n [gl.KEEP]: StencilOp.KEEP,\n [gl.ZERO]: StencilOp.ZERO,\n [gl.INVERT]: StencilOp.INVERT,\n [gl.INCR]: StencilOp.INCREMENT_CLAMP,\n [gl.DECR]: StencilOp.DECREMENT_CLAMP,\n [gl.INCR_WRAP]: StencilOp.INCREMENT_WRAP,\n [gl.DECR_WRAP]: StencilOp.DECREMENT_WRAP\n};\nvar stencilFuncMap = {\n [gl.ALWAYS]: CompareFunction.ALWAYS,\n [gl.EQUAL]: CompareFunction.EQUAL,\n [gl.GEQUAL]: CompareFunction.GEQUAL,\n [gl.GREATER]: CompareFunction.GREATER,\n [gl.LEQUAL]: CompareFunction.LEQUAL,\n [gl.LESS]: CompareFunction.LESS,\n [gl.NEVER]: CompareFunction.NEVER,\n [gl.NOTEQUAL]: CompareFunction.NOTEQUAL\n};\nexport {\n blendEquationMap,\n blendFuncMap,\n cullFaceMap,\n depthFuncMap,\n hintMap,\n primitiveMap,\n sizeFormatMap,\n stencilFuncMap,\n stencilOpMap,\n typedArrayCtorMap,\n wrapModeMap\n};\n","// src/device/utils/typedarray.ts\nvar dtypes = {\n \"[object Int8Array]\": 5120,\n \"[object Int16Array]\": 5122,\n \"[object Int32Array]\": 5124,\n \"[object Uint8Array]\": 5121,\n \"[object Uint8ClampedArray]\": 5121,\n \"[object Uint16Array]\": 5123,\n \"[object Uint32Array]\": 5125,\n \"[object Float32Array]\": 5126,\n \"[object Float64Array]\": 5121,\n \"[object ArrayBuffer]\": 5121\n};\nfunction isTypedArray(x) {\n return Object.prototype.toString.call(x) in dtypes;\n}\nfunction extend3ChannelsTo4(array, valueToInsert) {\n const originalLength = array.length;\n const insertCount = Math.ceil(originalLength / 3);\n const newLength = originalLength + insertCount;\n const newArray = new Float32Array(newLength);\n for (let i = 0; i < newLength; i += 4) {\n newArray[i] = array[i / 4 * 3];\n newArray[i + 1] = array[i / 4 * 3 + 1];\n newArray[i + 2] = array[i / 4 * 3 + 2];\n newArray[i + 3] = valueToInsert;\n }\n return newArray;\n}\nexport {\n extend3ChannelsTo4,\n isTypedArray\n};\n","// src/device/DeviceBuffer.ts\nimport { BufferUsage } from \"@antv/g-device-api\";\nimport { gl } from \"@antv/l7-core\";\nimport { hintMap, typedArrayCtorMap } from \"./constants\";\nimport { isTypedArray } from \"./utils/typedarray\";\nvar DeviceBuffer = class {\n constructor(device, options) {\n this.isDestroyed = false;\n const { data, usage, type, isUBO, label } = options;\n let typed;\n if (isTypedArray(data)) {\n typed = data;\n } else {\n typed = new typedArrayCtorMap[this.type || gl.FLOAT](data);\n }\n this.type = type;\n this.size = typed.byteLength;\n this.buffer = device.createBuffer({\n viewOrSize: typed,\n usage: isUBO ? BufferUsage.UNIFORM : BufferUsage.VERTEX,\n hint: hintMap[usage || gl.STATIC_DRAW]\n });\n if (label) {\n device.setResourceName(this.buffer, label);\n }\n }\n get() {\n return this.buffer;\n }\n destroy() {\n if (!this.isDestroyed) {\n this.buffer.destroy();\n }\n this.isDestroyed = true;\n }\n subData({\n data,\n offset\n }) {\n let typed;\n if (isTypedArray(data)) {\n typed = data;\n } else {\n typed = new typedArrayCtorMap[this.type || gl.FLOAT](data);\n }\n this.buffer.setSubData(offset, new Uint8Array(typed.buffer));\n }\n};\nexport {\n DeviceBuffer as default\n};\n","// src/device/utils/HashMap.ts\nfunction hashCodeNumberUpdate(hash, v = 0) {\n hash += v;\n hash += hash << 10;\n hash += hash >>> 6;\n return hash >>> 0;\n}\nfunction hashCodeNumberFinish(hash) {\n hash += hash << 3;\n hash ^= hash >>> 11;\n hash += hash << 15;\n return hash >>> 0;\n}\nfunction nullHashFunc() {\n return 0;\n}\nvar HashBucket = class {\n constructor() {\n this.keys = [];\n this.values = [];\n }\n};\nvar HashMap = class {\n constructor(keyEqualFunc, keyHashFunc) {\n this.keyEqualFunc = keyEqualFunc;\n this.keyHashFunc = keyHashFunc;\n this.buckets = /* @__PURE__ */ new Map();\n }\n findBucketIndex(bucket, k) {\n for (let i = 0; i < bucket.keys.length; i++)\n if (this.keyEqualFunc(k, bucket.keys[i]))\n return i;\n return -1;\n }\n findBucket(k) {\n const bw = this.keyHashFunc(k);\n return this.buckets.get(bw);\n }\n get(k) {\n const bucket = this.findBucket(k);\n if (bucket === void 0)\n return null;\n const bi = this.findBucketIndex(bucket, k);\n if (bi < 0)\n return null;\n return bucket.values[bi];\n }\n add(k, v) {\n const bw = this.keyHashFunc(k);\n if (this.buckets.get(bw) === void 0)\n this.buckets.set(bw, new HashBucket());\n const bucket = this.buckets.get(bw);\n bucket.keys.push(k);\n bucket.values.push(v);\n }\n delete(k) {\n const bucket = this.findBucket(k);\n if (bucket === void 0)\n return;\n const bi = this.findBucketIndex(bucket, k);\n if (bi === -1)\n return;\n bucket.keys.splice(bi, 1);\n bucket.values.splice(bi, 1);\n }\n clear() {\n this.buckets.clear();\n }\n size() {\n let acc = 0;\n for (const bucket of this.buckets.values())\n acc += bucket.values.length;\n return acc;\n }\n *values() {\n for (const bucket of this.buckets.values())\n for (let j = bucket.values.length - 1; j >= 0; j--)\n yield bucket.values[j];\n }\n};\nexport {\n HashMap,\n hashCodeNumberFinish,\n hashCodeNumberUpdate,\n nullHashFunc\n};\n","// src/device/DeviceCache.ts\nimport {\n TransparentBlack,\n bindingsDescriptorCopy,\n bindingsDescriptorEquals,\n inputLayoutDescriptorCopy,\n inputLayoutDescriptorEquals,\n renderPipelineDescriptorCopy,\n renderPipelineDescriptorEquals\n} from \"@antv/g-device-api\";\nimport { HashMap, hashCodeNumberFinish, hashCodeNumberUpdate, nullHashFunc } from \"./utils/HashMap\";\nfunction blendStateHash(hash, a) {\n hash = hashCodeNumberUpdate(hash, a.blendMode);\n hash = hashCodeNumberUpdate(hash, a.blendSrcFactor);\n hash = hashCodeNumberUpdate(hash, a.blendDstFactor);\n return hash;\n}\nfunction attachmentStateHash(hash, a) {\n hash = blendStateHash(hash, a.rgbBlendState);\n hash = blendStateHash(hash, a.alphaBlendState);\n hash = hashCodeNumberUpdate(hash, a.channelWriteMask);\n return hash;\n}\nfunction colorHash(hash, a) {\n hash = hashCodeNumberUpdate(hash, a.r << 24 | a.g << 16 | a.b << 8 | a.a);\n return hash;\n}\nfunction megaStateDescriptorHash(hash, a) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n for (let i = 0; i < a.attachmentsState.length; i++)\n hash = attachmentStateHash(hash, a.attachmentsState[i]);\n hash = colorHash(hash, a.blendConstant || TransparentBlack);\n hash = hashCodeNumberUpdate(hash, a.depthCompare);\n hash = hashCodeNumberUpdate(hash, a.depthWrite ? 1 : 0);\n hash = hashCodeNumberUpdate(hash, (_a = a.stencilFront) == null ? void 0 : _a.compare);\n hash = hashCodeNumberUpdate(hash, (_b = a.stencilFront) == null ? void 0 : _b.passOp);\n hash = hashCodeNumberUpdate(hash, (_c = a.stencilFront) == null ? void 0 : _c.failOp);\n hash = hashCodeNumberUpdate(hash, (_d = a.stencilFront) == null ? void 0 : _d.depthFailOp);\n hash = hashCodeNumberUpdate(hash, (_e = a.stencilBack) == null ? void 0 : _e.compare);\n hash = hashCodeNumberUpdate(hash, (_f = a.stencilBack) == null ? void 0 : _f.passOp);\n hash = hashCodeNumberUpdate(hash, (_g = a.stencilBack) == null ? void 0 : _g.failOp);\n hash = hashCodeNumberUpdate(hash, (_h = a.stencilBack) == null ? void 0 : _h.depthFailOp);\n hash = hashCodeNumberUpdate(hash, a.stencilWrite ? 1 : 0);\n hash = hashCodeNumberUpdate(hash, a.cullMode);\n hash = hashCodeNumberUpdate(hash, a.frontFace ? 1 : 0);\n hash = hashCodeNumberUpdate(hash, a.polygonOffset ? 1 : 0);\n return hash;\n}\nfunction renderPipelineDescriptorHash(a) {\n let hash = 0;\n hash = hashCodeNumberUpdate(hash, a.program.id);\n if (a.inputLayout !== null)\n hash = hashCodeNumberUpdate(hash, a.inputLayout.id);\n hash = megaStateDescriptorHash(hash, a.megaStateDescriptor);\n for (let i = 0; i < a.colorAttachmentFormats.length; i++)\n hash = hashCodeNumberUpdate(hash, a.colorAttachmentFormats[i] || 0);\n hash = hashCodeNumberUpdate(hash, a.depthStencilAttachmentFormat || 0);\n return hashCodeNumberFinish(hash);\n}\nfunction bindingsDescriptorHash(a) {\n let hash = 0;\n if (a.samplerBindings) {\n for (let i = 0; i < a.samplerBindings.length; i++) {\n const binding = a.samplerBindings[i];\n if (binding !== null && binding.texture !== null)\n hash = hashCodeNumberUpdate(hash, binding.texture.id);\n }\n }\n if (a.uniformBufferBindings) {\n for (let i = 0; i < a.uniformBufferBindings.length; i++) {\n const binding = a.uniformBufferBindings[i];\n if (binding !== null && binding.buffer !== null) {\n hash = hashCodeNumberUpdate(hash, binding.buffer.id);\n hash = hashCodeNumberUpdate(hash, binding.binding);\n hash = hashCodeNumberUpdate(hash, binding.offset);\n hash = hashCodeNumberUpdate(hash, binding.size);\n }\n }\n }\n if (a.storageBufferBindings) {\n for (let i = 0; i < a.storageBufferBindings.length; i++) {\n const binding = a.storageBufferBindings[i];\n if (binding !== null && binding.buffer !== null) {\n hash = hashCodeNumberUpdate(hash, binding.buffer.id);\n hash = hashCodeNumberUpdate(hash, binding.binding);\n hash = hashCodeNumberUpdate(hash, binding.offset);\n hash = hashCodeNumberUpdate(hash, binding.size);\n }\n }\n }\n if (a.storageTextureBindings) {\n for (let i = 0; i < a.storageTextureBindings.length; i++) {\n const binding = a.storageTextureBindings[i];\n if (binding !== null && binding.texture !== null) {\n hash = hashCodeNumberUpdate(hash, binding.texture.id);\n hash = hashCodeNumberUpdate(hash, binding.binding);\n }\n }\n }\n return hashCodeNumberFinish(hash);\n}\nfunction programDescriptorEquals(a, b) {\n var _a, _b, _c, _d;\n return ((_a = a.vertex) == null ? void 0 : _a.glsl) === ((_b = b.vertex) == null ? void 0 : _b.glsl) && ((_c = a.fragment) == null ? void 0 : _c.glsl) === ((_d = b.fragment) == null ? void 0 : _d.glsl);\n}\nfunction programDescriptorCopy(a) {\n var _a, _b;\n return {\n vertex: {\n glsl: (_a = a.vertex) == null ? void 0 : _a.glsl\n },\n fragment: {\n glsl: (_b = a.fragment) == null ? void 0 : _b.glsl\n }\n };\n}\nvar RenderCache = class {\n constructor(device) {\n this.device = device;\n this.bindingsCache = new HashMap(\n bindingsDescriptorEquals,\n bindingsDescriptorHash\n );\n this.renderPipelinesCache = new HashMap(\n renderPipelineDescriptorEquals,\n renderPipelineDescriptorHash\n );\n this.inputLayoutsCache = new HashMap(\n inputLayoutDescriptorEquals,\n nullHashFunc\n );\n this.programCache = new HashMap(\n programDescriptorEquals,\n nullHashFunc\n );\n }\n createBindings(descriptor) {\n var _a;\n let bindings = this.bindingsCache.get(descriptor);\n if (bindings === null) {\n const descriptorCopy = bindingsDescriptorCopy(descriptor);\n descriptorCopy.uniformBufferBindings = (_a = descriptorCopy.uniformBufferBindings) == null ? void 0 : _a.filter(\n ({ size }) => size && size > 0\n );\n bindings = this.device.createBindings(descriptorCopy);\n this.bindingsCache.add(descriptorCopy, bindings);\n }\n return bindings;\n }\n createRenderPipeline(descriptor) {\n let renderPipeline = this.renderPipelinesCache.get(descriptor);\n if (renderPipeline === null) {\n const descriptorCopy = renderPipelineDescriptorCopy(descriptor);\n descriptorCopy.colorAttachmentFormats = descriptorCopy.colorAttachmentFormats.filter(\n (f) => f\n );\n renderPipeline = this.device.createRenderPipeline(descriptorCopy);\n this.renderPipelinesCache.add(descriptorCopy, renderPipeline);\n }\n return renderPipeline;\n }\n createInputLayout(descriptor) {\n descriptor.vertexBufferDescriptors = descriptor.vertexBufferDescriptors.filter((d) => !!d);\n let inputLayout = this.inputLayoutsCache.get(descriptor);\n if (inputLayout === null) {\n const descriptorCopy = inputLayoutDescriptorCopy(descriptor);\n inputLayout = this.device.createInputLayout(descriptorCopy);\n this.inputLayoutsCache.add(descriptorCopy, inputLayout);\n }\n return inputLayout;\n }\n createProgram(descriptor) {\n let program = this.programCache.get(descriptor);\n if (program === null) {\n const descriptorCopy = programDescriptorCopy(descriptor);\n program = this.device.createProgram(descriptor);\n this.programCache.add(descriptorCopy, program);\n }\n return program;\n }\n destroy() {\n for (const bindings of this.bindingsCache.values())\n bindings.destroy();\n for (const renderPipeline of this.renderPipelinesCache.values())\n renderPipeline.destroy();\n for (const inputLayout of this.inputLayoutsCache.values())\n inputLayout.destroy();\n for (const program of this.programCache.values())\n program.destroy();\n this.bindingsCache.clear();\n this.renderPipelinesCache.clear();\n this.inputLayoutsCache.clear();\n this.programCache.clear();\n }\n};\nexport {\n RenderCache\n};\n","// src/device/DeviceElements.ts\nimport { BufferUsage } from \"@antv/g-device-api\";\nimport { gl } from \"@antv/l7-core\";\nimport { typedArrayCtorMap } from \"./constants\";\nimport { isTypedArray } from \"./utils/typedarray\";\nvar DeviceElements = class {\n constructor(device, options) {\n const { data, type, count = 0 } = options;\n let typed;\n if (isTypedArray(data)) {\n typed = data;\n } else {\n typed = new typedArrayCtorMap[this.type || gl.UNSIGNED_INT](data);\n }\n this.type = type;\n this.count = count;\n this.indexBuffer = device.createBuffer({\n viewOrSize: typed,\n usage: BufferUsage.INDEX\n });\n }\n get() {\n return this.indexBuffer;\n }\n subData({\n data\n }) {\n let typed;\n if (isTypedArray(data)) {\n typed = data;\n } else {\n typed = new typedArrayCtorMap[this.type || gl.UNSIGNED_INT](data);\n }\n this.indexBuffer.setSubData(0, new Uint8Array(typed.buffer));\n }\n destroy() {\n this.indexBuffer.destroy();\n }\n};\nexport {\n DeviceElements as default\n};\n","// src/device/DeviceTexture2D.ts\nimport {\n TextureUsage as DeviceTextureUsage,\n FilterMode,\n Format,\n MipmapFilterMode\n} from \"@antv/g-device-api\";\nimport { TextureUsage, gl } from \"@antv/l7-core\";\nimport { wrapModeMap } from \"./constants\";\nimport { extend3ChannelsTo4 } from \"./utils/typedarray\";\nfunction isTexture2D(t) {\n return !!(t && t[\"texture\"]);\n}\nvar DeviceTexture2D = class {\n constructor(device, options) {\n this.device = device;\n this.options = options;\n this.isDestroy = false;\n const {\n wrapS = gl.CLAMP_TO_EDGE,\n wrapT = gl.CLAMP_TO_EDGE,\n aniso,\n mag = gl.NEAREST,\n min = gl.NEAREST\n } = options;\n this.createTexture(options);\n this.sampler = device.createSampler({\n addressModeU: wrapModeMap[wrapS],\n addressModeV: wrapModeMap[wrapT],\n minFilter: min === gl.NEAREST ? FilterMode.POINT : FilterMode.BILINEAR,\n magFilter: mag === gl.NEAREST ? FilterMode.POINT : FilterMode.BILINEAR,\n mipmapFilter: MipmapFilterMode.NO_MIP,\n // lodMinClamp: 0,\n // lodMaxClamp: 0,\n maxAnisotropy: aniso\n });\n }\n createTexture(options) {\n const {\n type = gl.UNSIGNED_BYTE,\n width,\n height,\n flipY = false,\n format = gl.RGBA,\n alignment = 1,\n usage = TextureUsage.SAMPLED,\n // premultiplyAlpha = false,\n unorm = false,\n // colorSpace = gl.BROWSER_DEFAULT_WEBGL,\n // x = 0,\n // y = 0,\n // copy = false,\n label\n } = options;\n let { data } = options;\n this.width = width;\n this.height = height;\n let pixelFormat = Format.U8_RGBA_RT;\n if (type === gl.UNSIGNED_BYTE && format === gl.RGBA) {\n pixelFormat = unorm ? Format.U8_RGBA_NORM : Format.U8_RGBA_RT;\n } else if (type === gl.UNSIGNED_BYTE && format === gl.LUMINANCE) {\n pixelFormat = Format.U8_LUMINANCE;\n } else if (type === gl.FLOAT && format === gl.LUMINANCE) {\n pixelFormat = Format.F32_LUMINANCE;\n } else if (type === gl.FLOAT && format === gl.RGB) {\n if (this.device.queryVendorInfo().platformString === \"WebGPU\") {\n if (data) {\n data = extend3ChannelsTo4(data, 0);\n }\n pixelFormat = Format.F32_RGBA;\n } else {\n pixelFormat = Format.F32_RGB;\n }\n } else if (type === gl.FLOAT && format === gl.RGBA) {\n pixelFormat = Format.F32_RGBA;\n } else if (type === gl.FLOAT && format === gl.RED) {\n pixelFormat = Format.F32_R;\n } else {\n throw new Error(`create texture error, type: ${type}, format: ${format}`);\n }\n this.texture = this.device.createTexture({\n format: pixelFormat,\n width,\n height,\n usage: usage === TextureUsage.SAMPLED ? DeviceTextureUsage.SAMPLED : DeviceTextureUsage.RENDER_TARGET,\n pixelStore: {\n unpackFlipY: flipY,\n packAlignment: alignment\n },\n // mipLevelCount: usage === TextureUsage.RENDER_TARGET ? 1 : mipmap ? 1 : 0,\n mipLevelCount: 1\n });\n if (label) {\n this.device.setResourceName(this.texture, label);\n }\n if (data) {\n this.texture.setImageData([data]);\n }\n }\n get() {\n return this.texture;\n }\n update(props) {\n const { data } = props;\n this.texture.setImageData([data]);\n }\n bind() {\n }\n resize({ width, height }) {\n if (this.width !== width || this.height !== height) {\n this.destroy();\n }\n this.options.width = width;\n this.options.height = height;\n this.createTexture(this.options);\n this.isDestroy = false;\n }\n getSize() {\n return [this.width, this.height];\n }\n destroy() {\n var _a;\n if (!this.isDestroy && !this.texture.destroyed) {\n (_a = this.texture) == null ? void 0 : _a.destroy();\n }\n this.isDestroy = true;\n }\n};\nexport {\n DeviceTexture2D as default,\n isTexture2D\n};\n","// src/device/DeviceFramebuffer.ts\nimport { Format, TextureUsage } from \"@antv/g-device-api\";\nimport { isTexture2D } from \"./DeviceTexture2D\";\nvar DeviceFramebuffer = class {\n constructor(device, options) {\n this.device = device;\n this.options = options;\n this.createColorRenderTarget();\n this.createDepthRenderTarget();\n }\n createColorRenderTarget(resize = false) {\n const { width, height, color } = this.options;\n if (color) {\n if (isTexture2D(color)) {\n if (resize) {\n color.resize({ width, height });\n }\n this.colorTexture = color.get();\n this.colorRenderTarget = this.device.createRenderTargetFromTexture(this.colorTexture);\n this.width = color[\"width\"];\n this.height = color[\"height\"];\n } else if (width && height) {\n this.colorTexture = this.device.createTexture({\n format: Format.U8_RGBA_RT,\n usage: TextureUsage.RENDER_TARGET,\n width,\n height\n });\n this.colorRenderTarget = this.device.createRenderTargetFromTexture(this.colorTexture);\n this.width = width;\n this.height = height;\n }\n }\n }\n createDepthRenderTarget(resize = false) {\n const { width, height, depth } = this.options;\n if (depth) {\n if (isTexture2D(depth)) {\n if (resize) {\n depth.resize({ width, height });\n }\n this.depthTexture = depth.get();\n this.depthRenderTarget = this.device.createRenderTargetFromTexture(this.depthTexture);\n this.width = depth[\"width\"];\n this.height = depth[\"height\"];\n } else if (width && height) {\n this.depthTexture = this.device.createTexture({\n format: Format.D24_S8,\n usage: TextureUsage.RENDER_TARGET,\n width,\n height\n });\n this.depthRenderTarget = this.device.createRenderTargetFromTexture(this.depthTexture);\n this.width = width;\n this.height = height;\n }\n }\n }\n get() {\n return this.colorRenderTarget;\n }\n destroy() {\n var _a, _b;\n (_a = this.colorRenderTarget) == null ? void 0 : _a.destroy();\n (_b = this.depthRenderTarget) == null ? void 0 : _b.destroy();\n }\n resize({ width, height }) {\n if (this.width !== width || this.height !== height) {\n this.destroy();\n this.colorTexture.destroyed = true;\n this.depthTexture.destroyed = true;\n this.options.width = width;\n this.options.height = height;\n this.createColorRenderTarget(true);\n this.createDepthRenderTarget(true);\n }\n }\n};\nexport {\n DeviceFramebuffer as default\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/device/DeviceModel.ts\nimport {\n BlendFactor,\n BlendMode,\n ChannelWriteMask,\n CompareFunction,\n CullMode,\n Format,\n StencilOp,\n TransparentBlack,\n VertexStepMode,\n ViewportOrigin\n} from \"@antv/g-device-api\";\nimport { gl } from \"@antv/l7-core\";\nimport { lodashUtil } from \"@antv/l7-utils\";\nimport DeviceFramebuffer from \"./DeviceFramebuffer\";\nimport DeviceTexture2D from \"./DeviceTexture2D\";\nimport {\n blendEquationMap,\n blendFuncMap,\n cullFaceMap,\n depthFuncMap,\n primitiveMap,\n sizeFormatMap,\n stencilFuncMap,\n stencilOpMap\n} from \"./constants\";\nvar { isPlainObject, isTypedArray, isNil } = lodashUtil;\nvar DeviceModel = class {\n constructor(device, options, service) {\n this.device = device;\n this.options = options;\n this.service = service;\n this.destroyed = false;\n this.uniforms = {};\n this.vertexBuffers = [];\n const { vs, fs, attributes, uniforms, count, elements, diagnosticDerivativeUniformityEnabled } = options;\n this.options = options;\n const diagnosticDerivativeUniformityHeader = diagnosticDerivativeUniformityEnabled ? \"\" : this.service[\"viewportOrigin\"] === ViewportOrigin.UPPER_LEFT ? \"diagnostic(off,derivative_uniformity);\" : \"\";\n this.program = service.renderCache.createProgram({\n vertex: {\n glsl: vs\n },\n fragment: {\n glsl: fs,\n postprocess: (fs2) => diagnosticDerivativeUniformityHeader + fs2\n }\n });\n if (uniforms) {\n this.uniforms = this.extractUniforms(uniforms);\n }\n const vertexBufferDescriptors = [];\n let inferredCount = 0;\n Object.keys(attributes).forEach((name) => {\n const attribute = attributes[name];\n const buffer = attribute.get();\n this.vertexBuffers.push(buffer.get());\n const {\n offset = 0,\n stride = 0,\n // TODO: normalized\n size = 1,\n divisor = 0,\n shaderLocation = 0\n } = attribute[\"attribute\"];\n vertexBufferDescriptors.push({\n arrayStride: stride || size * 4,\n // TODO: L7 hasn't use instanced array for now.\n stepMode: VertexStepMode.VERTEX,\n attributes: [\n {\n format: sizeFormatMap[size],\n shaderLocation,\n offset,\n divisor\n }\n ]\n });\n inferredCount = buffer[\"size\"] / size;\n });\n if (!count) {\n this.options.count = inferredCount;\n }\n if (elements) {\n this.indexBuffer = elements.get();\n }\n const inputLayout = service.renderCache.createInputLayout({\n vertexBufferDescriptors,\n indexBufferFormat: elements ? Format.U32_R : null,\n program: this.program\n });\n this.inputLayout = inputLayout;\n this.pipeline = this.createPipeline(options);\n }\n createPipeline(options, pick) {\n var _a;\n const { primitive = gl.TRIANGLES, depth, cull, blend, stencil } = options;\n const depthParams = this.initDepthDrawParams({ depth });\n const depthEnabled = !!(depthParams && depthParams.enable);\n const cullParams = this.initCullDrawParams({ cull });\n const cullEnabled = !!(cullParams && cullParams.enable);\n const blendParams = this.getBlendDrawParams({ blend });\n const blendEnabled = !!(blendParams && blendParams.enable);\n const stencilParams = this.getStencilDrawParams({ stencil });\n const stencilEnabled = !!(stencilParams && stencilParams.enable);\n const pipeline = this.device.createRenderPipeline({\n inputLayout: this.inputLayout,\n program: this.program,\n topology: primitiveMap[primitive],\n colorAttachmentFormats: [Format.U8_RGBA_RT],\n depthStencilAttachmentFormat: Format.D24_S8,\n megaStateDescriptor: {\n attachmentsState: [\n pick ? {\n channelWriteMask: ChannelWriteMask.ALL,\n rgbBlendState: {\n blendMode: BlendMode.ADD,\n blendSrcFactor: BlendFactor.ONE,\n blendDstFactor: BlendFactor.ZERO\n },\n alphaBlendState: {\n blendMode: BlendMode.ADD,\n blendSrcFactor: BlendFactor.ONE,\n blendDstFactor: BlendFactor.ZERO\n }\n } : {\n channelWriteMask: stencilEnabled && stencilParams.opFront.zpass === StencilOp.REPLACE ? ChannelWriteMask.NONE : ChannelWriteMask.ALL,\n rgbBlendState: {\n blendMode: blendEnabled && blendParams.equation.rgb || BlendMode.ADD,\n blendSrcFactor: blendEnabled && blendParams.func.srcRGB || BlendFactor.SRC_ALPHA,\n blendDstFactor: blendEnabled && blendParams.func.dstRGB || BlendFactor.ONE_MINUS_SRC_ALPHA\n },\n alphaBlendState: {\n blendMode: blendEnabled && blendParams.equation.alpha || BlendMode.ADD,\n blendSrcFactor: blendEnabled && blendParams.func.srcAlpha || BlendFactor.ONE,\n blendDstFactor: blendEnabled && blendParams.func.dstAlpha || BlendFactor.ONE\n }\n }\n ],\n blendConstant: blendEnabled ? TransparentBlack : void 0,\n depthWrite: depthEnabled,\n depthCompare: depthEnabled && depthParams.func || CompareFunction.LESS,\n cullMode: cullEnabled && cullParams.face || CullMode.NONE,\n stencilWrite: stencilEnabled,\n stencilFront: {\n compare: stencilEnabled ? stencilParams.func.cmp : CompareFunction.ALWAYS,\n passOp: stencilParams.opFront.zpass,\n failOp: stencilParams.opFront.fail,\n depthFailOp: stencilParams.opFront.zfail,\n mask: stencilParams.opFront.mask\n },\n stencilBack: {\n compare: stencilEnabled ? stencilParams.func.cmp : CompareFunction.ALWAYS,\n passOp: stencilParams.opBack.zpass,\n failOp: stencilParams.opBack.fail,\n depthFailOp: stencilParams.opBack.zfail,\n mask: stencilParams.opBack.mask\n }\n }\n });\n if (stencilEnabled && !isNil((_a = stencil == null ? void 0 : stencil.func) == null ? void 0 : _a.ref)) {\n pipeline.stencilFuncReference = stencil.func.ref;\n }\n return pipeline;\n }\n updateAttributesAndElements() {\n }\n /**\n * No need to implement this method, you should update data on `Attribute` like this:\n *\n * @example\n * ```ts\n * attribute.updateBuffer({\n * data: [],\n * offset: 0,\n * });\n * ```\n */\n updateAttributes() {\n }\n addUniforms(uniforms) {\n this.uniforms = __spreadValues(__spreadValues({}, this.uniforms), this.extractUniforms(uniforms));\n }\n draw(options, pick) {\n const mergedOptions = __spreadValues(__spreadValues({}, this.options), options);\n const {\n count = 0,\n instances,\n elements,\n uniforms = {},\n uniformBuffers,\n textures\n } = mergedOptions;\n this.uniforms = __spreadValues(__spreadValues({}, this.uniforms), this.extractUniforms(uniforms));\n const { renderPass, currentFramebuffer, width, height } = this.service;\n this.pipeline = this.createPipeline(mergedOptions, pick);\n const device = this.service[\"device\"];\n const tmpHeight = device[\"swapChainHeight\"];\n device[\"swapChainHeight\"] = (currentFramebuffer == null ? void 0 : currentFramebuffer[\"height\"]) || height;\n renderPass.setViewport(\n 0,\n 0,\n (currentFramebuffer == null ? void 0 : currentFramebuffer[\"width\"]) || width,\n (currentFramebuffer == null ? void 0 : currentFramebuffer[\"height\"]) || height\n );\n device[\"swapChainHeight\"] = tmpHeight;\n renderPass.setPipeline(this.pipeline);\n if (!isNil(this.pipeline.stencilFuncReference)) {\n renderPass.setStencilReference(this.pipeline.stencilFuncReference);\n }\n renderPass.setVertexInput(\n this.inputLayout,\n this.vertexBuffers.map((buffer) => ({\n buffer\n })),\n elements ? {\n buffer: this.indexBuffer,\n offset: 0\n } : null\n );\n if (uniformBuffers) {\n this.bindings = device.createBindings({\n pipeline: this.pipeline,\n uniformBufferBindings: uniformBuffers.map((uniformBuffer, i) => {\n const buffer = uniformBuffer;\n return {\n binding: i,\n buffer: buffer.get(),\n size: buffer[\"size\"]\n };\n }),\n samplerBindings: textures == null ? void 0 : textures.map((t) => ({\n texture: t[\"texture\"],\n sampler: t[\"sampler\"]\n }))\n });\n }\n if (this.bindings) {\n renderPass.setBindings(this.bindings);\n Object.keys(this.uniforms).forEach((uniformName) => {\n const uniform = this.uniforms[uniformName];\n if (uniform instanceof DeviceTexture2D) {\n this.uniforms[uniformName] = uniform.get();\n } else if (uniform instanceof DeviceFramebuffer) {\n this.uniforms[uniformName] = uniform.get()[\"texture\"];\n }\n });\n this.program.setUniformsLegacy(this.uniforms);\n }\n if (elements) {\n const indexCount = elements[\"count\"];\n if (indexCount === 0) {\n renderPass.draw(count, instances);\n } else {\n renderPass.drawIndexed(indexCount, instances);\n }\n } else {\n renderPass.draw(count, instances);\n }\n }\n destroy() {\n var _a, _b, _c;\n (_a = this.vertexBuffers) == null ? void 0 : _a.forEach((buffer) => buffer.destroy());\n (_b = this.indexBuffer) == null ? void 0 : _b.destroy();\n (_c = this.bindings) == null ? void 0 : _c.destroy();\n this.pipeline.destroy();\n this.destroyed = true;\n }\n initDepthDrawParams({ depth }) {\n if (depth) {\n return {\n enable: depth.enable === void 0 ? true : !!depth.enable,\n mask: depth.mask === void 0 ? true : !!depth.mask,\n func: depthFuncMap[depth.func || gl.LESS],\n range: depth.range || [0, 1]\n };\n }\n }\n getBlendDrawParams({ blend }) {\n const { enable, func, equation, color = [0, 0, 0, 0] } = blend || {};\n return {\n enable: !!enable,\n func: {\n srcRGB: blendFuncMap[func && func.srcRGB || gl.SRC_ALPHA],\n srcAlpha: blendFuncMap[func && func.srcAlpha || gl.SRC_ALPHA],\n dstRGB: blendFuncMap[func && func.dstRGB || gl.ONE_MINUS_SRC_ALPHA],\n dstAlpha: blendFuncMap[func && func.dstAlpha || gl.ONE_MINUS_SRC_ALPHA]\n },\n equation: {\n rgb: blendEquationMap[equation && equation.rgb || gl.FUNC_ADD],\n alpha: blendEquationMap[equation && equation.alpha || gl.FUNC_ADD]\n },\n color\n };\n }\n /**\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#stencil\n */\n getStencilDrawParams({ stencil }) {\n const {\n enable,\n mask = 4294967295,\n func = {\n cmp: gl.ALWAYS,\n ref: 0,\n mask: 4294967295\n },\n opFront = {\n fail: gl.KEEP,\n zfail: gl.KEEP,\n zpass: gl.KEEP\n },\n opBack = {\n fail: gl.KEEP,\n zfail: gl.KEEP,\n zpass: gl.KEEP\n }\n } = stencil || {};\n return {\n enable: !!enable,\n mask,\n func: __spreadProps(__spreadValues({}, func), {\n cmp: stencilFuncMap[func.cmp]\n }),\n opFront: {\n fail: stencilOpMap[opFront.fail],\n zfail: stencilOpMap[opFront.zfail],\n zpass: stencilOpMap[opFront.zpass],\n mask: func.mask\n },\n opBack: {\n fail: stencilOpMap[opBack.fail],\n zfail: stencilOpMap[opBack.zfail],\n zpass: stencilOpMap[opBack.zpass],\n mask: func.mask\n }\n };\n }\n /**\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#culling\n */\n initCullDrawParams({ cull }) {\n if (cull) {\n const { enable, face = gl.BACK } = cull;\n return {\n enable: !!enable,\n face: cullFaceMap[face]\n };\n }\n }\n /**\n * 考虑结构体命名, eg:\n * a: { b: 1 } -> 'a.b'\n * a: [ { b: 1 } ] -> 'a[0].b'\n */\n extractUniforms(uniforms) {\n const extractedUniforms = {};\n Object.keys(uniforms).forEach((uniformName) => {\n this.extractUniformsRecursively(uniformName, uniforms[uniformName], extractedUniforms, \"\");\n });\n return extractedUniforms;\n }\n extractUniformsRecursively(uniformName, uniformValue, uniforms, prefix) {\n if (uniformValue === null || typeof uniformValue === \"number\" || // u_A: 1\n typeof uniformValue === \"boolean\" || // u_A: false\n Array.isArray(uniformValue) && typeof uniformValue[0] === \"number\" || // u_A: [1, 2, 3]\n isTypedArray(uniformValue) || // u_A: Float32Array\n // @ts-ignore\n uniformValue === \"\" || \"resize\" in uniformValue) {\n uniforms[`${prefix && prefix + \".\"}${uniformName}`] = uniformValue;\n return;\n }\n if (isPlainObject(uniformValue)) {\n Object.keys(uniformValue).forEach((childName) => {\n this.extractUniformsRecursively(\n childName,\n // @ts-ignore\n uniformValue[childName],\n uniforms,\n `${prefix && prefix + \".\"}${uniformName}`\n );\n });\n }\n if (Array.isArray(uniformValue)) {\n uniformValue.forEach((child, idx) => {\n Object.keys(child).forEach((childName) => {\n this.extractUniformsRecursively(\n childName,\n // @ts-ignore\n child[childName],\n uniforms,\n `${prefix && prefix + \".\"}${uniformName}[${idx}]`\n );\n });\n });\n }\n }\n};\nexport {\n DeviceModel as default\n};\n","var __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n// src/device/index.ts\nimport {\n Format,\n TextureUsage,\n TransparentBlack,\n ViewportOrigin,\n WebGLDeviceContribution,\n WebGPUDeviceContribution,\n colorNewFromRGBA\n} from \"@antv/g-device-api\";\nimport { lodashUtil } from \"@antv/l7-utils\";\nimport DeviceAttribute from \"./DeviceAttribute\";\nimport DeviceBuffer from \"./DeviceBuffer\";\nimport { RenderCache } from \"./DeviceCache\";\nimport DeviceElements from \"./DeviceElements\";\nimport DeviceFramebuffer from \"./DeviceFramebuffer\";\nimport DeviceModel from \"./DeviceModel\";\nimport DeviceTexture2D from \"./DeviceTexture2D\";\nimport { isWebGL2 } from \"./utils/webgl\";\nvar { isUndefined } = lodashUtil;\nvar DeviceRendererService = class {\n constructor() {\n this.uniformBuffers = [];\n this.queryVerdorInfo = () => {\n return this.device.queryVendorInfo().platformString;\n };\n this.createModel = (options) => new DeviceModel(this.device, options, this);\n this.createAttribute = (options) => new DeviceAttribute(this.device, options);\n this.createBuffer = (options) => new DeviceBuffer(this.device, options);\n this.createElements = (options) => new DeviceElements(this.device, options);\n this.createTexture2D = (options) => new DeviceTexture2D(this.device, options);\n this.createFramebuffer = (options) => new DeviceFramebuffer(this.device, options);\n this.useFramebuffer = (framebuffer, drawCommands) => {\n this.currentFramebuffer = framebuffer;\n this.beginFrame();\n drawCommands();\n this.endFrame();\n this.currentFramebuffer = null;\n };\n this.useFramebufferAsync = (framebuffer, drawCommands) => __async(this, null, function* () {\n this.currentFramebuffer = framebuffer;\n this.preRenderPass = this.renderPass;\n this.beginFrame();\n yield drawCommands();\n this.endFrame();\n this.currentFramebuffer = null;\n this.renderPass = this.preRenderPass;\n });\n this.clear = (options) => {\n const { color, depth, stencil, framebuffer = null } = options;\n if (framebuffer) {\n framebuffer.clearOptions = { color, depth, stencil };\n } else {\n const platformString = this.queryVerdorInfo();\n if (platformString === \"WebGL1\") {\n const gl = this.getGLContext();\n if (!isUndefined(stencil)) {\n gl.clearStencil(stencil);\n gl.clear(gl.STENCIL_BUFFER_BIT);\n } else if (!isUndefined(depth)) {\n gl.clearDepth(depth);\n gl.clear(gl.DEPTH_BUFFER_BIT);\n }\n } else if (platformString === \"WebGL2\") {\n const gl = this.getGLContext();\n if (!isUndefined(stencil)) {\n gl.clearBufferiv(gl.STENCIL, 0, [stencil]);\n } else if (!isUndefined(depth)) {\n gl.clearBufferfv(gl.DEPTH, 0, [depth]);\n }\n }\n }\n };\n this.viewport = ({\n // x,\n // y,\n width,\n height\n }) => {\n this.swapChain.configureSwapChain(width, height);\n this.createMainColorDepthRT(width, height);\n this.width = width;\n this.height = height;\n };\n this.readPixels = (options) => {\n const { framebuffer, x, y, width, height } = options;\n const readback = this.device.createReadback();\n const texture = framebuffer[\"colorTexture\"];\n const result = readback.readTextureSync(\n texture,\n x,\n /**\n * Origin is at lower-left corner. Width / height is already multiplied by dpr.\n * WebGPU needs flipY\n */\n this.viewportOrigin === ViewportOrigin.LOWER_LEFT ? y : this.height - y,\n width,\n height,\n new Uint8Array(width * height * 4)\n );\n if (this.viewportOrigin !== ViewportOrigin.LOWER_LEFT) {\n for (let j = 0; j < result.length; j += 4) {\n const t = result[j];\n result[j] = result[j + 2];\n result[j + 2] = t;\n }\n }\n readback.destroy();\n return result;\n };\n this.readPixelsAsync = (options) => __async(this, null, function* () {\n const { framebuffer, x, y, width, height } = options;\n const readback = this.device.createReadback();\n const texture = framebuffer[\"colorTexture\"];\n const result = yield readback.readTexture(\n texture,\n x,\n /**\n * Origin is at lower-left corner. Width / height is already multiplied by dpr.\n * WebGPU needs flipY\n */\n this.viewportOrigin === ViewportOrigin.LOWER_LEFT ? y : this.height - y,\n width,\n height,\n new Uint8Array(width * height * 4)\n );\n if (this.viewportOrigin !== ViewportOrigin.LOWER_LEFT) {\n for (let j = 0; j < result.length; j += 4) {\n const t = result[j];\n result[j] = result[j + 2];\n result[j + 2] = t;\n }\n }\n readback.destroy();\n return result;\n });\n this.getViewportSize = () => {\n return {\n width: this.width,\n height: this.height\n };\n };\n this.getContainer = () => {\n var _a;\n return (_a = this.canvas) == null ? void 0 : _a.parentElement;\n };\n this.getCanvas = () => {\n return this.canvas;\n };\n this.getGLContext = () => {\n return this.device[\"gl\"];\n };\n this.destroy = () => {\n var _a;\n this.canvas = null;\n (_a = this.uniformBuffers) == null ? void 0 : _a.forEach((buffer) => {\n buffer.destroy();\n });\n this.device.destroy();\n this.renderCache.destroy();\n };\n }\n init(canvas, cfg) {\n return __async(this, null, function* () {\n const { enableWebGPU, shaderCompilerPath, antialias } = cfg;\n this.canvas = canvas;\n const deviceContribution = enableWebGPU ? new WebGPUDeviceContribution({\n shaderCompilerPath\n }) : new WebGLDeviceContribution({\n // Use WebGL2 first and downgrade to WebGL1 if WebGL2 is not supported.\n targets: [\"webgl2\", \"webgl1\"],\n antialias,\n onContextLost(e) {\n console.warn(\"context lost\", e);\n },\n onContextCreationError(e) {\n console.warn(\"context creation error\", e);\n },\n onContextRestored(e) {\n console.warn(\"context restored\", e);\n }\n });\n const swapChain = yield deviceContribution.createSwapChain(canvas);\n swapChain.configureSwapChain(canvas.width, canvas.height);\n this.device = swapChain.getDevice();\n this.swapChain = swapChain;\n this.renderCache = new RenderCache(this.device);\n this.currentFramebuffer = null;\n this.viewportOrigin = this.device.queryVendorInfo().viewportOrigin;\n const gl = this.device[\"gl\"];\n this.extensionObject = {\n // @ts-ignore\n OES_texture_float: !isWebGL2(gl) && this.device[\"OES_texture_float\"]\n };\n this.createMainColorDepthRT(canvas.width, canvas.height);\n });\n }\n createMainColorDepthRT(width, height) {\n if (this.mainColorRT) {\n this.mainColorRT.destroy();\n }\n if (this.mainDepthRT) {\n this.mainDepthRT.destroy();\n }\n this.mainColorRT = this.device.createRenderTargetFromTexture(\n this.device.createTexture({\n format: Format.U8_RGBA_RT,\n width,\n height,\n usage: TextureUsage.RENDER_TARGET\n })\n );\n this.mainDepthRT = this.device.createRenderTargetFromTexture(\n this.device.createTexture({\n format: Format.D24_S8,\n width,\n height,\n usage: TextureUsage.RENDER_TARGET\n })\n );\n }\n beginFrame() {\n this.device.beginFrame();\n const { currentFramebuffer, swapChain, mainColorRT, mainDepthRT } = this;\n const colorAttachment = currentFramebuffer ? currentFramebuffer[\"colorRenderTarget\"] : mainColorRT;\n const colorResolveTo = currentFramebuffer ? null : swapChain.getOnscreenTexture();\n const depthStencilAttachment = currentFramebuffer ? currentFramebuffer[\"depthRenderTarget\"] : mainDepthRT;\n const { color = [0, 0, 0, 0], depth = 1, stencil = 0 } = (\n // @ts-ignore\n (currentFramebuffer == null ? void 0 : currentFramebuffer.clearOptions) || {}\n );\n const colorClearColor = colorAttachment ? colorNewFromRGBA(color[0] * 255, color[1] * 255, color[2] * 255, color[3]) : TransparentBlack;\n const depthClearValue = depthStencilAttachment ? depth : void 0;\n const stencilClearValue = depthStencilAttachment ? stencil : void 0;\n const renderPass = this.device.createRenderPass({\n colorAttachment: [colorAttachment],\n colorResolveTo: [colorResolveTo],\n colorClearColor: [colorClearColor],\n // colorStore: [!!currentFramebuffer],\n colorStore: [true],\n depthStencilAttachment,\n depthClearValue,\n stencilClearValue\n });\n this.renderPass = renderPass;\n }\n endFrame() {\n this.device.submitPass(this.renderPass);\n this.device.endFrame();\n }\n getPointSizeRange() {\n const gl = this.device[\"gl\"];\n return gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE);\n }\n testExtension(name) {\n return !!this.getGLContext().getExtension(name);\n }\n // TODO: 临时方法\n setState() {\n }\n setBaseState() {\n }\n setCustomLayerDefaults() {\n }\n setDirty(flag) {\n this.isDirty = flag;\n }\n getDirty() {\n return this.isDirty;\n }\n};\nexport {\n DeviceRendererService as default\n};\n","// src/device/utils/webgl.ts\nfunction isWebGL2(gl) {\n if (typeof WebGL2RenderingContext !== \"undefined\" && gl instanceof WebGL2RenderingContext) {\n return true;\n }\n return Boolean(gl && gl._version === 2);\n}\nexport {\n isWebGL2\n};\n","// src/regl/ReglAttribute.ts\nvar ReglAttribute = class {\n constructor(gl, options) {\n const { buffer, offset, stride, normalized, size, divisor } = options;\n this.buffer = buffer;\n this.attribute = {\n buffer: buffer.get(),\n offset: offset || 0,\n stride: stride || 0,\n normalized: normalized || false,\n divisor: divisor || 0\n };\n if (size) {\n this.attribute.size = size;\n }\n }\n get() {\n return this.attribute;\n }\n updateBuffer(options) {\n this.buffer.subData(options);\n }\n destroy() {\n this.buffer.destroy();\n }\n};\nexport {\n ReglAttribute as default\n};\n","// src/regl/constants.ts\nimport { gl } from \"@antv/l7-core\";\nvar primitiveMap = {\n [gl.POINTS]: \"points\",\n [gl.LINES]: \"lines\",\n [gl.LINE_LOOP]: \"line loop\",\n [gl.LINE_STRIP]: \"line strip\",\n [gl.TRIANGLES]: \"triangles\",\n [gl.TRIANGLE_FAN]: \"triangle fan\",\n [gl.TRIANGLE_STRIP]: \"triangle strip\"\n};\nvar usageMap = {\n [gl.STATIC_DRAW]: \"static\",\n [gl.DYNAMIC_DRAW]: \"dynamic\",\n [gl.STREAM_DRAW]: \"stream\"\n};\nvar dataTypeMap = {\n [gl.BYTE]: \"int8\",\n // [gl.UNSIGNED_INT]: 'int16',\n [gl.INT]: \"int32\",\n [gl.UNSIGNED_BYTE]: \"uint8\",\n [gl.UNSIGNED_SHORT]: \"uint16\",\n [gl.UNSIGNED_INT]: \"uint32\",\n [gl.FLOAT]: \"float\"\n};\nvar formatMap = {\n [gl.ALPHA]: \"alpha\",\n [gl.LUMINANCE]: \"luminance\",\n [gl.LUMINANCE_ALPHA]: \"luminance alpha\",\n [gl.RGB]: \"rgb\",\n [gl.RGBA]: \"rgba\",\n [gl.RGBA4]: \"rgba4\",\n [gl.RGB5_A1]: \"rgb5 a1\",\n [gl.RGB565]: \"rgb565\",\n [gl.DEPTH_COMPONENT]: \"depth\",\n [gl.DEPTH_STENCIL]: \"depth stencil\"\n};\nvar mipmapMap = {\n [gl.DONT_CARE]: \"dont care\",\n [gl.NICEST]: \"nice\",\n [gl.FASTEST]: \"fast\"\n};\nvar filterMap = {\n [gl.NEAREST]: \"nearest\",\n [gl.LINEAR]: \"linear\",\n [gl.LINEAR_MIPMAP_LINEAR]: \"mipmap\",\n [gl.NEAREST_MIPMAP_LINEAR]: \"nearest mipmap linear\",\n [gl.LINEAR_MIPMAP_NEAREST]: \"linear mipmap nearest\",\n [gl.NEAREST_MIPMAP_NEAREST]: \"nearest mipmap nearest\"\n};\nvar wrapModeMap = {\n [gl.REPEAT]: \"repeat\",\n [gl.CLAMP_TO_EDGE]: \"clamp\",\n [gl.MIRRORED_REPEAT]: \"mirror\"\n};\nvar colorSpaceMap = {\n [gl.NONE]: \"none\",\n [gl.BROWSER_DEFAULT_WEBGL]: \"browser\"\n};\nvar depthFuncMap = {\n [gl.NEVER]: \"never\",\n [gl.ALWAYS]: \"always\",\n [gl.LESS]: \"less\",\n [gl.LEQUAL]: \"lequal\",\n [gl.GREATER]: \"greater\",\n [gl.GEQUAL]: \"gequal\",\n [gl.EQUAL]: \"equal\",\n [gl.NOTEQUAL]: \"notequal\"\n};\nvar blendEquationMap = {\n [gl.FUNC_ADD]: \"add\",\n [gl.MIN_EXT]: \"min\",\n [gl.MAX_EXT]: \"max\",\n [gl.FUNC_SUBTRACT]: \"subtract\",\n [gl.FUNC_REVERSE_SUBTRACT]: \"reverse subtract\"\n};\nvar blendFuncMap = {\n [gl.ZERO]: \"zero\",\n [gl.ONE]: \"one\",\n [gl.SRC_COLOR]: \"src color\",\n [gl.ONE_MINUS_SRC_COLOR]: \"one minus src color\",\n [gl.SRC_ALPHA]: \"src alpha\",\n [gl.ONE_MINUS_SRC_ALPHA]: \"one minus src alpha\",\n [gl.DST_COLOR]: \"dst color\",\n [gl.ONE_MINUS_DST_COLOR]: \"one minus dst color\",\n [gl.DST_ALPHA]: \"dst alpha\",\n [gl.ONE_MINUS_DST_ALPHA]: \"one minus dst alpha\",\n [gl.CONSTANT_COLOR]: \"constant color\",\n [gl.ONE_MINUS_CONSTANT_COLOR]: \"one minus constant color\",\n [gl.CONSTANT_ALPHA]: \"constant alpha\",\n [gl.ONE_MINUS_CONSTANT_ALPHA]: \"one minus constant alpha\",\n [gl.SRC_ALPHA_SATURATE]: \"src alpha saturate\"\n};\nvar stencilFuncMap = {\n [gl.NEVER]: \"never\",\n [gl.ALWAYS]: \"always\",\n [gl.LESS]: \"less\",\n [gl.LEQUAL]: \"lequal\",\n [gl.GREATER]: \"greater\",\n [gl.GEQUAL]: \"gequal\",\n [gl.EQUAL]: \"equal\",\n [gl.NOTEQUAL]: \"notequal\"\n};\nvar stencilOpMap = {\n [gl.ZERO]: \"zero\",\n [gl.KEEP]: \"keep\",\n [gl.REPLACE]: \"replace\",\n [gl.INVERT]: \"invert\",\n [gl.INCR]: \"increment\",\n [gl.DECR]: \"decrement\",\n [gl.INCR_WRAP]: \"increment wrap\",\n [gl.DECR_WRAP]: \"decrement wrap\"\n};\nvar cullFaceMap = {\n [gl.FRONT]: \"front\",\n [gl.BACK]: \"back\"\n};\nexport {\n blendEquationMap,\n blendFuncMap,\n colorSpaceMap,\n cullFaceMap,\n dataTypeMap,\n depthFuncMap,\n filterMap,\n formatMap,\n mipmapMap,\n primitiveMap,\n stencilFuncMap,\n stencilOpMap,\n usageMap,\n wrapModeMap\n};\n","// src/regl/ReglBuffer.ts\nimport { gl } from \"@antv/l7-core\";\nimport { dataTypeMap, usageMap } from \"./constants\";\nvar ReglBuffer = class {\n constructor(reGl, options) {\n this.isDestroyed = false;\n const { data, usage, type } = options;\n this.buffer = reGl.buffer({\n data,\n usage: usageMap[usage || gl.STATIC_DRAW],\n type: dataTypeMap[type || gl.UNSIGNED_BYTE]\n // length: 0,\n });\n }\n get() {\n return this.buffer;\n }\n destroy() {\n if (!this.isDestroyed) {\n this.buffer.destroy();\n }\n this.isDestroyed = true;\n }\n subData({\n data,\n offset\n }) {\n this.buffer.subdata(data, offset);\n }\n};\nexport {\n ReglBuffer as default\n};\n","// src/regl/ReglElements.ts\nimport { gl } from \"@antv/l7-core\";\nimport { dataTypeMap, usageMap } from \"./constants\";\nvar ReglElements = class {\n constructor(reGl, options) {\n const { data, usage, type, count } = options;\n this.elements = reGl.elements({\n data,\n usage: usageMap[usage || gl.STATIC_DRAW],\n type: dataTypeMap[type || gl.UNSIGNED_BYTE],\n count\n });\n }\n get() {\n return this.elements;\n }\n subData({\n data\n }) {\n this.elements.subdata(data);\n }\n destroy() {\n }\n};\nexport {\n ReglElements as default\n};\n","// src/regl/ReglFramebuffer.ts\nvar ReglFramebuffer = class {\n constructor(reGl, options) {\n const { width, height, color, colors } = options;\n const framebufferOptions = {\n width,\n height\n };\n if (Array.isArray(colors)) {\n framebufferOptions.colors = colors.map(\n (c) => c.get()\n );\n }\n if (color && typeof color !== \"boolean\") {\n framebufferOptions.color = color.get();\n }\n this.framebuffer = reGl.framebuffer(framebufferOptions);\n }\n get() {\n return this.framebuffer;\n }\n destroy() {\n this.framebuffer.destroy();\n }\n resize({ width, height }) {\n this.framebuffer.resize(width, height);\n }\n};\nexport {\n ReglFramebuffer as default\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/regl/ReglModel.ts\nimport { ClipSpaceNearZ, preprocessShader_GLSL, ViewportOrigin } from \"@antv/g-device-api\";\nimport { gl, removeDuplicateUniforms } from \"@antv/l7-core\";\nimport { lodashUtil } from \"@antv/l7-utils\";\nimport {\n blendEquationMap,\n blendFuncMap,\n cullFaceMap,\n depthFuncMap,\n primitiveMap,\n stencilFuncMap,\n stencilOpMap\n} from \"./constants\";\nvar { isPlainObject, isTypedArray } = lodashUtil;\nvar ReglModel = class {\n constructor(reGl, options) {\n this.destroyed = false;\n this.uniforms = {};\n this.reGl = reGl;\n const { vs, fs, attributes, uniforms, primitive, count, elements, depth, cull, instances } = options;\n const vendorInfo = {\n platformString: \"WebGL1\",\n glslVersion: \"#version 100\",\n explicitBindingLocations: false,\n separateSamplerTextures: false,\n viewportOrigin: ViewportOrigin.LOWER_LEFT,\n clipSpaceNearZ: ClipSpaceNearZ.NEGATIVE_ONE,\n supportMRT: false\n };\n const reglUniforms = {};\n this.options = options;\n if (uniforms) {\n this.uniforms = this.extractUniforms(uniforms);\n Object.keys(uniforms).forEach((uniformName) => {\n reglUniforms[uniformName] = reGl.prop(uniformName);\n });\n }\n const reglAttributes = {};\n Object.keys(attributes).forEach((name) => {\n reglAttributes[name] = attributes[name].get();\n });\n const frag = removeDuplicateUniforms(\n preprocessShader_GLSL(vendorInfo, \"frag\", fs, null, false)\n );\n const vert = removeDuplicateUniforms(\n preprocessShader_GLSL(vendorInfo, \"vert\", vs, null, false)\n );\n const drawParams = {\n attributes: reglAttributes,\n frag,\n uniforms: reglUniforms,\n vert,\n // @ts-ignore\n colorMask: reGl.prop(\"colorMask\"),\n lineWidth: 1,\n blend: {\n // @ts-ignore\n enable: reGl.prop(\"blend.enable\"),\n // @ts-ignore\n func: reGl.prop(\"blend.func\"),\n // @ts-ignore\n equation: reGl.prop(\"blend.equation\"),\n // @ts-ignore\n color: reGl.prop(\"blend.color\")\n },\n stencil: {\n // @ts-ignore\n enable: reGl.prop(\"stencil.enable\"),\n // @ts-ignore\n mask: reGl.prop(\"stencil.mask\"),\n // @ts-ignore\n func: reGl.prop(\"stencil.func\"),\n // @ts-ignore\n opFront: reGl.prop(\"stencil.opFront\"),\n // @ts-ignore\n opBack: reGl.prop(\"stencil.opBack\")\n },\n primitive: primitiveMap[primitive === void 0 ? gl.TRIANGLES : primitive]\n };\n if (instances) {\n drawParams.instances = instances;\n }\n if (count) {\n drawParams.count = count;\n } else if (elements) {\n drawParams.elements = elements.get();\n }\n this.initDepthDrawParams({ depth }, drawParams);\n this.initCullDrawParams({ cull }, drawParams);\n this.drawCommand = reGl(drawParams);\n this.drawParams = drawParams;\n }\n updateAttributesAndElements(attributes, elements) {\n const reglAttributes = {};\n Object.keys(attributes).forEach((name) => {\n reglAttributes[name] = attributes[name].get();\n });\n this.drawParams.attributes = reglAttributes;\n this.drawParams.elements = elements.get();\n this.drawCommand = this.reGl(this.drawParams);\n }\n updateAttributes(attributes) {\n const reglAttributes = {};\n Object.keys(attributes).forEach((name) => {\n reglAttributes[name] = attributes[name].get();\n });\n this.drawParams.attributes = reglAttributes;\n this.drawCommand = this.reGl(this.drawParams);\n }\n addUniforms(uniforms) {\n this.uniforms = __spreadValues(__spreadValues({}, this.uniforms), this.extractUniforms(uniforms));\n }\n draw(options, pick) {\n if (this.drawParams.attributes && Object.keys(this.drawParams.attributes).length === 0) {\n return;\n }\n const uniforms = __spreadValues(__spreadValues({}, this.uniforms), this.extractUniforms(options.uniforms || {}));\n const reglDrawProps = {};\n Object.keys(uniforms).forEach((uniformName) => {\n const type = typeof uniforms[uniformName];\n if (type === \"boolean\" || type === \"number\" || Array.isArray(uniforms[uniformName]) || // @ts-ignore\n uniforms[uniformName].BYTES_PER_ELEMENT) {\n reglDrawProps[uniformName] = uniforms[uniformName];\n } else {\n reglDrawProps[uniformName] = uniforms[uniformName].get();\n }\n });\n reglDrawProps.blend = pick ? this.getBlendDrawParams({\n blend: { enable: false }\n }) : this.getBlendDrawParams(options);\n reglDrawProps.stencil = this.getStencilDrawParams(options);\n reglDrawProps.colorMask = this.getColorMaskDrawParams(options, pick);\n this.drawCommand(reglDrawProps);\n }\n destroy() {\n var _a, _b;\n (_b = (_a = this.drawParams) == null ? void 0 : _a.elements) == null ? void 0 : _b.destroy();\n if (this.options.attributes) {\n Object.values(this.options.attributes).forEach((attr) => {\n attr == null ? void 0 : attr.destroy();\n });\n }\n this.destroyed = true;\n }\n /**\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#depth-buffer\n */\n initDepthDrawParams({ depth }, drawParams) {\n if (depth) {\n drawParams.depth = {\n enable: depth.enable === void 0 ? true : !!depth.enable,\n mask: depth.mask === void 0 ? true : !!depth.mask,\n func: depthFuncMap[depth.func || gl.LESS],\n range: depth.range || [0, 1]\n };\n }\n }\n getBlendDrawParams({ blend }) {\n const { enable, func, equation, color = [0, 0, 0, 0] } = blend || {};\n return {\n enable: !!enable,\n func: {\n srcRGB: blendFuncMap[func && func.srcRGB || gl.SRC_ALPHA],\n srcAlpha: blendFuncMap[func && func.srcAlpha || gl.SRC_ALPHA],\n dstRGB: blendFuncMap[func && func.dstRGB || gl.ONE_MINUS_SRC_ALPHA],\n dstAlpha: blendFuncMap[func && func.dstAlpha || gl.ONE_MINUS_SRC_ALPHA]\n },\n equation: {\n rgb: blendEquationMap[equation && equation.rgb || gl.FUNC_ADD],\n alpha: blendEquationMap[equation && equation.alpha || gl.FUNC_ADD]\n },\n color\n };\n }\n /**\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#stencil\n */\n getStencilDrawParams({ stencil }) {\n const {\n enable,\n mask = -1,\n func = {\n cmp: gl.ALWAYS,\n ref: 0,\n mask: -1\n },\n opFront = {\n fail: gl.KEEP,\n zfail: gl.KEEP,\n zpass: gl.KEEP\n },\n opBack = {\n fail: gl.KEEP,\n zfail: gl.KEEP,\n zpass: gl.KEEP\n }\n } = stencil || {};\n return {\n enable: !!enable,\n mask,\n func: __spreadProps(__spreadValues({}, func), {\n cmp: stencilFuncMap[func.cmp]\n }),\n opFront: {\n fail: stencilOpMap[opFront.fail],\n zfail: stencilOpMap[opFront.zfail],\n zpass: stencilOpMap[opFront.zpass]\n },\n opBack: {\n fail: stencilOpMap[opBack.fail],\n zfail: stencilOpMap[opBack.zfail],\n zpass: stencilOpMap[opBack.zpass]\n }\n };\n }\n getColorMaskDrawParams({ stencil }, pick) {\n const colorMask = (stencil == null ? void 0 : stencil.enable) && stencil.opFront && !pick ? [false, false, false, false] : [true, true, true, true];\n return colorMask;\n }\n /**\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#culling\n */\n initCullDrawParams({ cull }, drawParams) {\n if (cull) {\n const { enable, face = gl.BACK } = cull;\n drawParams.cull = {\n enable: !!enable,\n face: cullFaceMap[face]\n };\n }\n }\n /**\n * 考虑结构体命名, eg:\n * a: { b: 1 } -> 'a.b'\n * a: [ { b: 1 } ] -> 'a[0].b'\n */\n extractUniforms(uniforms) {\n const extractedUniforms = {};\n Object.keys(uniforms).forEach((uniformName) => {\n this.extractUniformsRecursively(uniformName, uniforms[uniformName], extractedUniforms, \"\");\n });\n return extractedUniforms;\n }\n extractUniformsRecursively(uniformName, uniformValue, uniforms, prefix) {\n if (uniformValue === null || typeof uniformValue === \"number\" || // u_A: 1\n typeof uniformValue === \"boolean\" || // u_A: false\n Array.isArray(uniformValue) && typeof uniformValue[0] === \"number\" || // u_A: [1, 2, 3]\n isTypedArray(uniformValue) || // u_A: Float32Array\n // @ts-ignore\n uniformValue === \"\" || \"resize\" in uniformValue) {\n uniforms[`${prefix && prefix + \".\"}${uniformName}`] = uniformValue;\n return;\n }\n if (isPlainObject(uniformValue)) {\n Object.keys(uniformValue).forEach((childName) => {\n this.extractUniformsRecursively(\n childName,\n // @ts-ignore\n uniformValue[childName],\n uniforms,\n `${prefix && prefix + \".\"}${uniformName}`\n );\n });\n }\n if (Array.isArray(uniformValue)) {\n uniformValue.forEach((child, idx) => {\n Object.keys(child).forEach((childName) => {\n this.extractUniformsRecursively(\n childName,\n // @ts-ignore\n child[childName],\n uniforms,\n `${prefix && prefix + \".\"}${uniformName}[${idx}]`\n );\n });\n });\n }\n }\n};\nexport {\n ReglModel as default\n};\n","// src/regl/ReglTexture2D.ts\nimport { gl } from \"@antv/l7-core\";\nimport {\n colorSpaceMap,\n dataTypeMap,\n filterMap,\n formatMap,\n mipmapMap,\n wrapModeMap\n} from \"./constants\";\nvar ReglTexture2D = class {\n constructor(reGl, options) {\n this.isDestroy = false;\n const {\n data,\n type = gl.UNSIGNED_BYTE,\n width,\n height,\n flipY = false,\n format = gl.RGBA,\n mipmap = false,\n wrapS = gl.CLAMP_TO_EDGE,\n wrapT = gl.CLAMP_TO_EDGE,\n aniso = 0,\n alignment = 1,\n premultiplyAlpha = false,\n mag = gl.NEAREST,\n min = gl.NEAREST,\n colorSpace = gl.BROWSER_DEFAULT_WEBGL,\n x = 0,\n y = 0,\n copy = false\n } = options;\n this.width = width;\n this.height = height;\n const textureOptions = {\n width,\n height,\n // @ts-ignore\n type: dataTypeMap[type],\n format: formatMap[format],\n wrapS: wrapModeMap[wrapS],\n wrapT: wrapModeMap[wrapT],\n // @ts-ignore\n mag: filterMap[mag],\n min: filterMap[min],\n alignment,\n flipY,\n colorSpace: colorSpaceMap[colorSpace],\n premultiplyAlpha,\n aniso,\n // copy pixels from current bind framebuffer\n x,\n y,\n copy\n };\n if (data) {\n textureOptions.data = data;\n }\n if (typeof mipmap === \"number\") {\n textureOptions.mipmap = mipmapMap[mipmap];\n } else if (typeof mipmap === \"boolean\") {\n textureOptions.mipmap = mipmap;\n }\n this.texture = reGl.texture(textureOptions);\n }\n get() {\n return this.texture;\n }\n update(props = {}) {\n this.texture(props);\n }\n bind() {\n this.texture._texture.bind();\n }\n resize({ width, height }) {\n this.texture.resize(width, height);\n this.width = width;\n this.height = height;\n }\n getSize() {\n return [this.width, this.height];\n }\n destroy() {\n var _a;\n if (!this.isDestroy) {\n (_a = this.texture) == null ? void 0 : _a.destroy();\n }\n this.isDestroy = true;\n }\n};\nexport {\n ReglTexture2D as default\n};\n","var __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n// src/regl/index.ts\nimport regl from \"regl\";\nimport ReglAttribute from \"./ReglAttribute\";\nimport ReglBuffer from \"./ReglBuffer\";\nimport ReglElements from \"./ReglElements\";\nimport ReglFramebuffer from \"./ReglFramebuffer\";\nimport ReglModel from \"./ReglModel\";\nimport ReglTexture2D from \"./ReglTexture2D\";\nvar ReglRendererService = class {\n constructor() {\n this.uniformBuffers = [];\n this.queryVerdorInfo = () => {\n return \"WebGL1\";\n };\n this.createModel = (options) => new ReglModel(this.gl, options);\n this.createAttribute = (options) => new ReglAttribute(this.gl, options);\n this.createBuffer = (options) => new ReglBuffer(this.gl, options);\n this.createElements = (options) => new ReglElements(this.gl, options);\n this.createTexture2D = (options) => new ReglTexture2D(this.gl, options);\n this.createFramebuffer = (options) => new ReglFramebuffer(this.gl, options);\n this.useFramebuffer = (framebuffer, drawCommands) => {\n this.gl({\n framebuffer: framebuffer ? framebuffer.get() : null\n })(drawCommands);\n };\n this.useFramebufferAsync = (framebuffer, drawCommands) => __async(this, null, function* () {\n this.gl({\n framebuffer: framebuffer ? framebuffer.get() : null\n })(drawCommands);\n });\n this.clear = (options) => {\n var _a;\n const { color, depth, stencil, framebuffer = null } = options;\n const reglClearOptions = {\n color,\n depth,\n stencil\n };\n reglClearOptions.framebuffer = framebuffer === null ? framebuffer : framebuffer.get();\n (_a = this.gl) == null ? void 0 : _a.clear(reglClearOptions);\n };\n this.viewport = ({\n x,\n y,\n width,\n height\n }) => {\n this.gl._gl.viewport(x, y, width, height);\n this.width = width;\n this.height = height;\n this.gl._refresh();\n };\n this.readPixels = (options) => {\n const { framebuffer, x, y, width, height } = options;\n const readPixelsOptions = {\n x,\n y,\n width,\n height\n };\n if (framebuffer) {\n readPixelsOptions.framebuffer = framebuffer.get();\n }\n return this.gl.read(readPixelsOptions);\n };\n this.readPixelsAsync = (options) => __async(this, null, function* () {\n return this.readPixels(options);\n });\n this.getViewportSize = () => {\n return {\n width: this.gl._gl.drawingBufferWidth,\n height: this.gl._gl.drawingBufferHeight\n };\n };\n this.getContainer = () => {\n var _a;\n return (_a = this.canvas) == null ? void 0 : _a.parentElement;\n };\n this.getCanvas = () => {\n return this.canvas;\n };\n this.getGLContext = () => {\n return this.gl._gl;\n };\n this.destroy = () => {\n var _a, _b, _c;\n this.canvas = null;\n (_c = (_b = (_a = this.gl) == null ? void 0 : _a._gl) == null ? void 0 : _b.getExtension(\"WEBGL_lose_context\")) == null ? void 0 : _c.loseContext();\n this.gl.destroy();\n this.gl = null;\n };\n }\n init(canvas, cfg, gl) {\n return __async(this, null, function* () {\n this.canvas = canvas;\n if (gl) {\n this.gl = gl;\n } else {\n this.gl = yield new Promise((resolve, reject) => {\n regl({\n canvas: this.canvas,\n attributes: {\n alpha: true,\n // use TAA instead of MSAA\n // @see https://www.khronos.org/registry/webgl/specs/1.0/#5.2.1\n antialias: cfg.antialias,\n premultipliedAlpha: true,\n preserveDrawingBuffer: cfg.preserveDrawingBuffer,\n stencil: cfg.stencil\n },\n // TODO: use extensions\n extensions: [\n \"OES_element_index_uint\",\n \"OES_standard_derivatives\",\n // wireframe\n \"ANGLE_instanced_arrays\"\n // VSM shadow map\n ],\n optionalExtensions: [\n \"oes_texture_float_linear\",\n \"OES_texture_float\",\n \"EXT_texture_filter_anisotropic\",\n \"EXT_blend_minmax\",\n \"WEBGL_depth_texture\",\n \"WEBGL_lose_context\"\n ],\n profile: true,\n onDone: (err, r) => {\n if (err || !r) {\n reject(err);\n }\n resolve(r);\n }\n });\n });\n }\n this.extensionObject = {\n OES_texture_float: this.testExtension(\"OES_texture_float\")\n };\n });\n }\n getPointSizeRange() {\n return this.gl._gl.getParameter(this.gl._gl.ALIASED_POINT_SIZE_RANGE);\n }\n testExtension(name) {\n return !!this.getGLContext().getExtension(name);\n }\n // TODO: 临时方法\n setState() {\n this.gl({\n cull: {\n enable: false,\n face: \"back\"\n },\n viewport: {\n x: 0,\n y: 0,\n height: this.width,\n width: this.height\n },\n blend: {\n enable: true,\n equation: \"add\"\n },\n framebuffer: null\n });\n this.gl._refresh();\n }\n setBaseState() {\n this.gl({\n cull: {\n enable: false,\n face: \"back\"\n },\n viewport: {\n x: 0,\n y: 0,\n height: this.width,\n width: this.height\n },\n blend: {\n enable: false,\n equation: \"add\"\n },\n framebuffer: null\n });\n this.gl._refresh();\n }\n setCustomLayerDefaults() {\n const gl = this.getGLContext();\n gl.disable(gl.CULL_FACE);\n }\n setDirty(flag) {\n this.isDirty = flag;\n }\n getDirty() {\n return this.isDirty;\n }\n beginFrame() {\n }\n endFrame() {\n }\n};\nexport {\n ReglRendererService as default\n};\n","// src/boxSelect.ts\nimport { DOM, getBBoxFromPoints } from \"@antv/l7-utils\";\nimport { EventEmitter } from \"eventemitter3\";\nvar BoxSelectEventList = [\"selectstart\", \"selecting\", \"selectend\"];\nvar BoxSelect = class extends EventEmitter {\n constructor(scene, options = {}) {\n super();\n this.isEnable = false;\n this.onDragStart = (e) => {\n this.box.style.display = \"block\";\n this.startEvent = this.endEvent = e;\n this.syncBoxBound();\n this.emit(\"selectstart\", this.getLngLatBox(), this.startEvent, this.endEvent);\n };\n this.onDragging = (e) => {\n this.endEvent = e;\n this.syncBoxBound();\n this.emit(\"selecting\", this.getLngLatBox(), this.startEvent, this.endEvent);\n };\n this.onDragEnd = (e) => {\n this.endEvent = e;\n this.box.style.display = \"none\";\n this.emit(\"selectend\", this.getLngLatBox(), this.startEvent, this.endEvent);\n };\n this.scene = scene;\n this.options = options;\n }\n get container() {\n return this.scene.getMapService().getMarkerContainer();\n }\n enable() {\n if (this.isEnable) {\n return;\n }\n const { className } = this.options;\n this.scene.setMapStatus({\n dragEnable: false\n });\n this.container.style.cursor = \"crosshair\";\n if (!this.box) {\n const box = DOM.create(\"div\", void 0, this.container);\n box.classList.add(\"l7-select-box\");\n if (className) {\n box.classList.add(className);\n }\n box.style.display = \"none\";\n this.box = box;\n }\n this.scene.on(\"dragstart\", this.onDragStart);\n this.scene.on(\"dragging\", this.onDragging);\n this.scene.on(\"dragend\", this.onDragEnd);\n this.isEnable = true;\n }\n disable() {\n if (!this.isEnable) {\n return;\n }\n this.scene.setMapStatus({\n dragEnable: true\n });\n this.container.style.cursor = \"auto\";\n this.scene.off(\"dragstart\", this.onDragStart);\n this.scene.off(\"dragging\", this.onDragging);\n this.scene.off(\"dragend\", this.onDragEnd);\n this.isEnable = false;\n }\n syncBoxBound() {\n const { x: x1, y: y1 } = this.startEvent;\n const { x: x2, y: y2 } = this.endEvent;\n const left = Math.min(x1, x2);\n const top = Math.min(y1, y2);\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n this.box.style.top = `${top}px`;\n this.box.style.left = `${left}px`;\n this.box.style.width = `${width}px`;\n this.box.style.height = `${height}px`;\n }\n getLngLatBox() {\n const {\n lngLat: { lng: lng1, lat: lat1 }\n } = this.startEvent;\n const {\n lngLat: { lng: lng2, lat: lat2 }\n } = this.endEvent;\n return getBBoxFromPoints([\n [lng1, lat1],\n [lng2, lat2]\n ]);\n }\n};\nexport {\n BoxSelectEventList,\n BoxSelect as default\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n// src/index.ts\nimport { Logo } from \"@antv/l7-component\";\nimport { SceneEventList, createLayerContainer, createSceneContainer } from \"@antv/l7-core\";\nimport { MaskLayer, TileLayer } from \"@antv/l7-layers\";\nimport { DeviceRendererService, ReglRendererService } from \"@antv/l7-renderer\";\nimport { DOM, SceneConifg } from \"@antv/l7-utils\";\nimport BoxSelect, { BoxSelectEventList } from \"./boxSelect\";\nvar Scene = class {\n constructor(config) {\n const { id, map, renderer = \"device\" } = config;\n const sceneContainer = createSceneContainer();\n this.container = sceneContainer;\n map.setContainer(sceneContainer, id);\n if (renderer === \"regl\") {\n sceneContainer.rendererService = new ReglRendererService();\n } else {\n sceneContainer.rendererService = new DeviceRendererService();\n }\n this.sceneService = sceneContainer.sceneService;\n this.mapService = sceneContainer.mapService;\n this.iconService = sceneContainer.iconService;\n this.fontService = sceneContainer.fontService;\n this.controlService = sceneContainer.controlService;\n this.layerService = sceneContainer.layerService;\n this.debugService = sceneContainer.debugService;\n this.debugService.setEnable(config.debug);\n this.markerService = sceneContainer.markerService;\n this.interactionService = sceneContainer.interactionService;\n this.popupService = sceneContainer.popupService;\n this.boxSelect = new BoxSelect(this, {});\n this.initComponent(id);\n this.sceneService.init(config);\n this.initControl();\n }\n get map() {\n return this.mapService.map;\n }\n get loaded() {\n return this.sceneService.loaded;\n }\n getServiceContainer() {\n return this.container;\n }\n getSize() {\n return this.mapService.getSize();\n }\n getMinZoom() {\n return this.mapService.getMinZoom();\n }\n getMaxZoom() {\n return this.mapService.getMaxZoom();\n }\n getType() {\n return this.mapService.getType();\n }\n getMapContainer() {\n return this.mapService.getMapContainer();\n }\n getMapCanvasContainer() {\n return this.mapService.getMapCanvasContainer();\n }\n getMapService() {\n return this.mapService;\n }\n /**\n * 对外暴露 debugService\n * @returns\n */\n getDebugService() {\n return this.debugService;\n }\n exportPng(type) {\n return __async(this, null, function* () {\n return this.sceneService.exportPng(type);\n });\n }\n exportMap(type) {\n return __async(this, null, function* () {\n return this.sceneService.exportPng(type);\n });\n }\n registerRenderService(render) {\n if (this.sceneService.loaded) {\n const renderSerivce = new render(this);\n renderSerivce.init();\n } else {\n this.on(\"loaded\", () => {\n const renderSerivce = new render(this);\n renderSerivce.init();\n });\n }\n }\n setBgColor(color) {\n this.mapService.setBgColor(color);\n }\n addLayer(layer) {\n if (this.loaded) {\n this.preAddLayer(layer);\n } else {\n this.once(\"loaded\", () => {\n this.preAddLayer(layer);\n });\n }\n }\n // layer 管理\n preAddLayer(layer) {\n const layerContainer = createLayerContainer(this.container);\n layer.setContainer(layerContainer);\n this.sceneService.addLayer(layer);\n if (layer.inited) {\n this.initTileLayer(layer);\n const maskInstance = this.initMask(layer);\n this.addMask(maskInstance, layer.id);\n } else {\n layer.on(\"inited\", () => {\n this.initTileLayer(layer);\n const maskInstance = this.initMask(layer);\n this.addMask(maskInstance, layer.id);\n });\n }\n }\n // 兼容历史接口\n initMask(layer) {\n const { mask, maskfence, maskColor = \"#000\", maskOpacity = 0 } = layer.getLayerConfig();\n if (!mask || !maskfence) {\n return void 0;\n }\n const maskInstance = new MaskLayer().source(maskfence).shape(\"fill\").style({\n color: maskColor,\n opacity: maskOpacity\n });\n return maskInstance;\n }\n addMask(mask, layerId) {\n if (!mask) {\n return;\n }\n const parent = this.getLayer(layerId);\n if (parent) {\n const layerContainer = createLayerContainer(this.container);\n mask.setContainer(layerContainer);\n parent.addMaskLayer(mask);\n this.sceneService.addMask(mask);\n } else {\n console.warn(\"parent layer not find!\");\n }\n }\n getPickedLayer() {\n return this.layerService.pickedLayerId;\n }\n getLayers() {\n return this.layerService.getLayers();\n }\n getLayer(id) {\n return this.layerService.getLayer(id);\n }\n getLayerByName(name) {\n return this.layerService.getLayerByName(name);\n }\n removeLayer(layer, parentLayer) {\n return __async(this, null, function* () {\n yield this.layerService.remove(layer, parentLayer);\n });\n }\n removeAllLayer() {\n return __async(this, null, function* () {\n yield this.layerService.removeAllLayers();\n });\n }\n render() {\n this.sceneService.render();\n }\n setEnableRender(flag) {\n this.layerService.setEnableRender(flag);\n }\n // asset method\n /**\n * 为 layer/point/text 支持 iconfont 模式支持\n * @param fontUnicode\n * @param name\n */\n addIconFont(name, fontUnicode) {\n this.fontService.addIconFont(name, fontUnicode);\n }\n addIconFonts(options) {\n options.forEach(([name, fontUnicode]) => {\n this.fontService.addIconFont(name, fontUnicode);\n });\n }\n /**\n * 用户自定义添加第三方字体\n * @param fontFamily\n * @param fontPath\n */\n addFontFace(fontFamily, fontPath) {\n this.fontService.once(\"fontloaded\", (e) => {\n this.emit(\"fontloaded\", e);\n });\n this.fontService.addFontFace(fontFamily, fontPath);\n }\n addImage(id, img) {\n return __async(this, null, function* () {\n yield this.iconService.addImage(id, img);\n });\n }\n hasImage(id) {\n return this.iconService.hasImage(id);\n }\n removeImage(id) {\n this.iconService.removeImage(id);\n }\n addIconFontGlyphs(fontFamily, glyphs) {\n this.fontService.addIconGlyphs(glyphs);\n }\n // map control method\n addControl(ctr) {\n this.controlService.addControl(ctr, this.container);\n }\n removeControl(ctr) {\n this.controlService.removeControl(ctr);\n }\n getControlByName(name) {\n return this.controlService.getControlByName(name);\n }\n // marker\n addMarker(marker) {\n this.markerService.addMarker(marker);\n }\n addMarkerLayer(layer) {\n this.markerService.addMarkerLayer(layer);\n }\n removeMarkerLayer(layer) {\n this.markerService.removeMarkerLayer(layer);\n }\n removeAllMarkers() {\n this.markerService.removeAllMarkers();\n }\n removeAllMakers() {\n console.warn(\"removeAllMakers 已废弃,请使用 removeAllMarkers\");\n this.markerService.removeAllMarkers();\n }\n addPopup(popup) {\n this.popupService.addPopup(popup);\n }\n removePopup(popup) {\n this.popupService.removePopup(popup);\n }\n on(type, handle) {\n var _a;\n if (BoxSelectEventList.includes(type)) {\n (_a = this.boxSelect) == null ? void 0 : _a.on(type, handle);\n } else if (SceneEventList.includes(type)) {\n this.sceneService.on(type, handle);\n } else {\n this.mapService.on(type, handle);\n }\n }\n once(type, handle) {\n var _a;\n if (BoxSelectEventList.includes(type)) {\n (_a = this.boxSelect) == null ? void 0 : _a.once(type, handle);\n } else if (SceneEventList.includes(type)) {\n this.sceneService.once(type, handle);\n } else {\n this.mapService.once(type, handle);\n }\n }\n emit(type, handle) {\n SceneEventList.indexOf(type) === -1 ? this.mapService.on(type, handle) : this.sceneService.emit(type, handle);\n }\n off(type, handle) {\n var _a;\n if (BoxSelectEventList.includes(type)) {\n (_a = this.boxSelect) == null ? void 0 : _a.off(type, handle);\n } else if (SceneEventList.includes(type)) {\n this.sceneService.off(type, handle);\n } else {\n this.mapService.off(type, handle);\n }\n }\n // implements IMapController\n getZoom() {\n return this.mapService.getZoom();\n }\n getCenter(options) {\n return this.mapService.getCenter(options);\n }\n setCenter(center, options) {\n return this.mapService.setCenter(center, options);\n }\n getPitch() {\n return this.mapService.getPitch();\n }\n setPitch(pitch) {\n return this.mapService.setPitch(pitch);\n }\n getRotation() {\n return this.mapService.getRotation();\n }\n getBounds() {\n return this.mapService.getBounds();\n }\n setRotation(rotation) {\n this.mapService.setRotation(rotation);\n }\n zoomIn() {\n this.mapService.zoomIn();\n }\n zoomOut() {\n this.mapService.zoomOut();\n }\n panTo(p) {\n this.mapService.panTo(p);\n }\n panBy(x, y) {\n this.mapService.panBy(x, y);\n }\n getContainer() {\n return this.mapService.getContainer();\n }\n setZoom(zoom) {\n this.mapService.setZoom(zoom);\n }\n fitBounds(bound, options) {\n const { fitBoundsOptions, animate } = this.sceneService.getSceneConfig();\n this.mapService.fitBounds(\n bound,\n // 选项优先级:用户传入,覆盖animate直接配置,覆盖Scene配置项传入\n options || __spreadProps(__spreadValues({}, fitBoundsOptions), {\n animate\n })\n );\n }\n setZoomAndCenter(zoom, center) {\n this.mapService.setZoomAndCenter(zoom, center);\n }\n setMapStyle(style) {\n this.mapService.setMapStyle(style);\n }\n setMapStatus(options) {\n this.mapService.setMapStatus(options);\n }\n // conversion Method\n pixelToLngLat(pixel) {\n return this.mapService.pixelToLngLat(pixel);\n }\n lngLatToPixel(lnglat) {\n return this.mapService.lngLatToPixel(lnglat);\n }\n containerToLngLat(pixel) {\n return this.mapService.containerToLngLat(pixel);\n }\n lngLatToContainer(lnglat) {\n return this.mapService.lngLatToContainer(lnglat);\n }\n destroy() {\n this.sceneService.destroy();\n }\n registerPostProcessingPass(constructor) {\n this.container.postProcessingPass.name = new constructor();\n }\n // 控制 shader pick 计算\n enableShaderPick() {\n this.layerService.enableShaderPick();\n }\n diasbleShaderPick() {\n this.layerService.disableShaderPick();\n }\n enableBoxSelect(once = true) {\n this.boxSelect.enable();\n if (once) {\n this.boxSelect.once(\"selectend\", () => {\n this.disableBoxSelect();\n });\n }\n }\n disableBoxSelect() {\n this.boxSelect.disable();\n }\n // 数据协议\n static addProtocol(protocol, handler) {\n SceneConifg.REGISTERED_PROTOCOLS[protocol] = handler;\n }\n static removeProtocol(protocol) {\n delete SceneConifg.REGISTERED_PROTOCOLS[protocol];\n }\n getProtocol(protocol) {\n return SceneConifg.REGISTERED_PROTOCOLS[protocol];\n }\n startAnimate() {\n this.layerService.startAnimate();\n }\n stopAnimate() {\n this.layerService.stopAnimate();\n }\n // get current point size info\n getPointSizeRange() {\n return this.sceneService.getPointSizeRange();\n }\n initComponent(id) {\n this.controlService.init(\n {\n container: DOM.getContainer(id)\n },\n this.container\n );\n this.markerService.init(this.container);\n this.popupService.init(this.container);\n }\n initControl() {\n const { logoVisible, logoPosition } = this.sceneService.getSceneConfig();\n if (logoVisible) {\n this.addControl(new Logo({ position: logoPosition }));\n }\n }\n initTileLayer(layer) {\n if (layer.getSource().isTile) {\n layer.tileLayer = new TileLayer(layer);\n }\n }\n};\nexport {\n Scene\n};\n","!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_quarterOfYear=n()}(this,(function(){\"use strict\";var t=\"month\",n=\"quarter\";return function(e,i){var r=i.prototype;r.quarter=function(t){return this.$utils().u(t)?Math.ceil((this.month()+1)/3):this.month(this.month()%3+3*(t-1))};var s=r.add;r.add=function(e,i){return e=Number(e),this.$utils().p(i)===n?this.add(3*e,t):s.bind(this)(e,i)};var u=r.startOf;r.startOf=function(e,i){var r=this.$utils(),s=!!r.u(i)||i;if(r.p(e)===n){var o=this.quarter()-1;return s?this.month(3*o).startOf(t).startOf(\"day\"):this.month(3*o+2).endOf(t).endOf(\"day\")}return u.bind(this)(e,i)}}}));","'use strict';\n\nvar self = module.exports;\n\nmodule.exports.isNumber = function (x) {\n return (typeof x === 'number');\n};\n\nmodule.exports.findMin = function (arr) {\n if (arr.length === 0) {\n return Infinity;\n }\n\n var curr = arr[0];\n for (var i = 1; i < arr.length; i++) {\n curr = Math.min(curr, arr[i]);\n }\n return curr;\n};\n\nmodule.exports.findMax = function (arr) {\n if (arr.length === 0) {\n return -Infinity;\n }\n\n var curr = arr[0];\n for (var i = 1; i < arr.length; i++) {\n curr = Math.max(curr, arr[i]);\n }\n return curr;\n};\n\nmodule.exports.findMinMulti = function (arr) {\n var curr = self.findMin(arr[0]);\n for (var i = 1; i < arr.length; i++) {\n curr = Math.min(curr, self.findMin(arr[i]));\n }\n return curr;\n};\n\nmodule.exports.findMaxMulti = function (arr) {\n var curr = self.findMax(arr[0]);\n for (var i = 1; i < arr.length; i++) {\n curr = Math.max(curr, self.findMax(arr[i]));\n }\n return curr;\n};\n\nmodule.exports.inside = function (min, max, x) {\n return (min <= x) && (x <= max);\n};\n","import { createContext, createImmutable } from '@rc-component/context';\nvar _createImmutable = createImmutable(),\n makeImmutable = _createImmutable.makeImmutable,\n responseImmutable = _createImmutable.responseImmutable,\n useImmutableMark = _createImmutable.useImmutableMark;\nexport { makeImmutable, responseImmutable, useImmutableMark };\nvar TableContext = createContext();\nexport default TableContext;","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","import { __read } from \"tslib\";\nimport { isPlainObject, isArray } from '@antv/util';\nvar MAX_MIX_LEVEL = 5;\nvar deep = function (dist, src, level, maxLevel) {\n if (level === void 0) { level = 0; }\n if (maxLevel === void 0) { maxLevel = MAX_MIX_LEVEL; }\n Object.entries(src).forEach(function (_a) {\n var _b = __read(_a, 2), key = _b[0], value = _b[1];\n var res = dist;\n if (Object.prototype.hasOwnProperty.call(src, key)) {\n if (!value) {\n // null 、 undefined 等情况直接赋值\n res[key] = value;\n }\n else if (isPlainObject(value)) {\n if (!isPlainObject(dist[key])) {\n res[key] = {};\n }\n if (level < maxLevel) {\n deep(dist[key], value, level + 1, maxLevel);\n }\n else {\n // 层级过深直接赋值,性能问题\n res[key] = src[key];\n }\n }\n else if (isArray(value)) {\n res[key] = [];\n res[key] = res[key].concat(value);\n }\n else {\n res[key] = value;\n }\n }\n });\n};\nexport var deepAssign = function (rst) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < args.length; i += 1) {\n deep(rst, args[i]);\n }\n return rst;\n};\n//# sourceMappingURL=deep-assign.js.map","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","import { feature, lineString, isObject, point } from '@turf/helpers';\n\n/**\n * Callback for coordEach\n *\n * @callback coordEachCallback\n * @param {Array} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()\n *\n * @name coordEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex)\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n // Handles null Geometry -- Skips this GeoJSON\n if (geojson === null) return;\n var j,\n k,\n l,\n geometry,\n stopG,\n coords,\n geometryMaybeCollection,\n wrapShrink = 0,\n coordIndex = 0,\n isGeometryCollection,\n type = geojson.type,\n isFeatureCollection = type === \"FeatureCollection\",\n isFeature = type === \"Feature\",\n stop = isFeatureCollection ? geojson.features.length : 1;\n\n // This logic may look a little weird. The reason why it is that way\n // is because it's trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don't apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it's called 'geometry'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n geometryMaybeCollection = isFeatureCollection\n ? geojson.features[featureIndex].geometry\n : isFeature\n ? geojson.geometry\n : geojson;\n isGeometryCollection = geometryMaybeCollection\n ? geometryMaybeCollection.type === \"GeometryCollection\"\n : false;\n stopG = isGeometryCollection\n ? geometryMaybeCollection.geometries.length\n : 1;\n\n for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n var multiFeatureIndex = 0;\n var geometryIndex = 0;\n geometry = isGeometryCollection\n ? geometryMaybeCollection.geometries[geomIndex]\n : geometryMaybeCollection;\n\n // Handles null Geometry -- Skips this geometry\n if (geometry === null) continue;\n coords = geometry.coordinates;\n var geomType = geometry.type;\n\n wrapShrink =\n excludeWrapCoord &&\n (geomType === \"Polygon\" || geomType === \"MultiPolygon\")\n ? 1\n : 0;\n\n switch (geomType) {\n case null:\n break;\n case \"Point\":\n if (\n callback(\n coords,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n multiFeatureIndex++;\n break;\n case \"LineString\":\n case \"MultiPoint\":\n for (j = 0; j < coords.length; j++) {\n if (\n callback(\n coords[j],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n if (geomType === \"MultiPoint\") multiFeatureIndex++;\n }\n if (geomType === \"LineString\") multiFeatureIndex++;\n break;\n case \"Polygon\":\n case \"MultiLineString\":\n for (j = 0; j < coords.length; j++) {\n for (k = 0; k < coords[j].length - wrapShrink; k++) {\n if (\n callback(\n coords[j][k],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n }\n if (geomType === \"MultiLineString\") multiFeatureIndex++;\n if (geomType === \"Polygon\") geometryIndex++;\n }\n if (geomType === \"Polygon\") multiFeatureIndex++;\n break;\n case \"MultiPolygon\":\n for (j = 0; j < coords.length; j++) {\n geometryIndex = 0;\n for (k = 0; k < coords[j].length; k++) {\n for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n if (\n callback(\n coords[j][k][l],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n }\n geometryIndex++;\n }\n multiFeatureIndex++;\n }\n break;\n case \"GeometryCollection\":\n for (j = 0; j < geometry.geometries.length; j++)\n if (\n coordEach(geometry.geometries[j], callback, excludeWrapCoord) ===\n false\n )\n return false;\n break;\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n }\n}\n\n/**\n * Callback for coordReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback coordReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Array} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Reduce coordinates in any GeoJSON object, similar to Array.reduce()\n *\n * @name coordReduce\n * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentCoord;\n * });\n */\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n var previousValue = initialValue;\n coordEach(\n geojson,\n function (\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) {\n if (coordIndex === 0 && initialValue === undefined)\n previousValue = currentCoord;\n else\n previousValue = callback(\n previousValue,\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n },\n excludeWrapCoord\n );\n return previousValue;\n}\n\n/**\n * Callback for propEach\n *\n * @callback propEachCallback\n * @param {Object} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over properties in any GeoJSON object, similar to Array.forEach()\n *\n * @name propEach\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentProperties, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propEach(features, function (currentProperties, featureIndex) {\n * //=currentProperties\n * //=featureIndex\n * });\n */\nfunction propEach(geojson, callback) {\n var i;\n switch (geojson.type) {\n case \"FeatureCollection\":\n for (i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i].properties, i) === false) break;\n }\n break;\n case \"Feature\":\n callback(geojson.properties, 0);\n break;\n }\n}\n\n/**\n * Callback for propReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback propReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {*} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce properties in any GeoJSON object into a single value,\n * similar to how Array.reduce works. However, in this case we lazily run\n * the reduction, so an array of all properties is unnecessary.\n *\n * @name propReduce\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) {\n * //=previousValue\n * //=currentProperties\n * //=featureIndex\n * return currentProperties\n * });\n */\nfunction propReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n propEach(geojson, function (currentProperties, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentProperties;\n else\n previousValue = callback(previousValue, currentProperties, featureIndex);\n });\n return previousValue;\n}\n\n/**\n * Callback for featureEach\n *\n * @callback featureEachCallback\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name featureEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.featureEach(features, function (currentFeature, featureIndex) {\n * //=currentFeature\n * //=featureIndex\n * });\n */\nfunction featureEach(geojson, callback) {\n if (geojson.type === \"Feature\") {\n callback(geojson, 0);\n } else if (geojson.type === \"FeatureCollection\") {\n for (var i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i], i) === false) break;\n }\n }\n}\n\n/**\n * Callback for featureReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback featureReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name featureReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * return currentFeature\n * });\n */\nfunction featureReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n featureEach(geojson, function (currentFeature, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentFeature;\n else previousValue = callback(previousValue, currentFeature, featureIndex);\n });\n return previousValue;\n}\n\n/**\n * Get all coordinates from any GeoJSON object.\n *\n * @name coordAll\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @returns {Array>} coordinate position array\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * var coords = turf.coordAll(features);\n * //= [[26, 37], [36, 53]]\n */\nfunction coordAll(geojson) {\n var coords = [];\n coordEach(geojson, function (coord) {\n coords.push(coord);\n });\n return coords;\n}\n\n/**\n * Callback for geomEach\n *\n * @callback geomEachCallback\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()\n *\n * @name geomEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * });\n */\nfunction geomEach(geojson, callback) {\n var i,\n j,\n g,\n geometry,\n stopG,\n geometryMaybeCollection,\n isGeometryCollection,\n featureProperties,\n featureBBox,\n featureId,\n featureIndex = 0,\n isFeatureCollection = geojson.type === \"FeatureCollection\",\n isFeature = geojson.type === \"Feature\",\n stop = isFeatureCollection ? geojson.features.length : 1;\n\n // This logic may look a little weird. The reason why it is that way\n // is because it's trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don't apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it's called 'geometry'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n for (i = 0; i < stop; i++) {\n geometryMaybeCollection = isFeatureCollection\n ? geojson.features[i].geometry\n : isFeature\n ? geojson.geometry\n : geojson;\n featureProperties = isFeatureCollection\n ? geojson.features[i].properties\n : isFeature\n ? geojson.properties\n : {};\n featureBBox = isFeatureCollection\n ? geojson.features[i].bbox\n : isFeature\n ? geojson.bbox\n : undefined;\n featureId = isFeatureCollection\n ? geojson.features[i].id\n : isFeature\n ? geojson.id\n : undefined;\n isGeometryCollection = geometryMaybeCollection\n ? geometryMaybeCollection.type === \"GeometryCollection\"\n : false;\n stopG = isGeometryCollection\n ? geometryMaybeCollection.geometries.length\n : 1;\n\n for (g = 0; g < stopG; g++) {\n geometry = isGeometryCollection\n ? geometryMaybeCollection.geometries[g]\n : geometryMaybeCollection;\n\n // Handle null Geometry\n if (geometry === null) {\n if (\n callback(\n null,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n continue;\n }\n switch (geometry.type) {\n case \"Point\":\n case \"LineString\":\n case \"MultiPoint\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\": {\n if (\n callback(\n geometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n break;\n }\n case \"GeometryCollection\": {\n for (j = 0; j < geometry.geometries.length; j++) {\n if (\n callback(\n geometry.geometries[j],\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n }\n break;\n }\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n // Only increase `featureIndex` per each feature\n featureIndex++;\n }\n}\n\n/**\n * Callback for geomReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback geomReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Reduce geometry in any GeoJSON object, similar to Array.reduce().\n *\n * @name geomReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=previousValue\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * return currentGeometry\n * });\n */\nfunction geomReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n geomEach(\n geojson,\n function (\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentGeometry;\n else\n previousValue = callback(\n previousValue,\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for flattenEach\n *\n * @callback flattenEachCallback\n * @param {Feature} currentFeature The current flattened feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Iterate over flattened features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name flattenEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * });\n */\nfunction flattenEach(geojson, callback) {\n geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {\n // Callback for single geometry\n var type = geometry === null ? null : geometry.type;\n switch (type) {\n case null:\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n if (\n callback(\n feature(geometry, properties, { bbox: bbox, id: id }),\n featureIndex,\n 0\n ) === false\n )\n return false;\n return;\n }\n\n var geomType;\n\n // Callback for multi-geometry\n switch (type) {\n case \"MultiPoint\":\n geomType = \"Point\";\n break;\n case \"MultiLineString\":\n geomType = \"LineString\";\n break;\n case \"MultiPolygon\":\n geomType = \"Polygon\";\n break;\n }\n\n for (\n var multiFeatureIndex = 0;\n multiFeatureIndex < geometry.coordinates.length;\n multiFeatureIndex++\n ) {\n var coordinate = geometry.coordinates[multiFeatureIndex];\n var geom = {\n type: geomType,\n coordinates: coordinate,\n };\n if (\n callback(feature(geom, properties), featureIndex, multiFeatureIndex) ===\n false\n )\n return false;\n }\n });\n}\n\n/**\n * Callback for flattenReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback flattenReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Reduce flattened features in any GeoJSON object, similar to Array.reduce().\n *\n * @name flattenReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * return currentFeature\n * });\n */\nfunction flattenReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n flattenEach(\n geojson,\n function (currentFeature, featureIndex, multiFeatureIndex) {\n if (\n featureIndex === 0 &&\n multiFeatureIndex === 0 &&\n initialValue === undefined\n )\n previousValue = currentFeature;\n else\n previousValue = callback(\n previousValue,\n currentFeature,\n featureIndex,\n multiFeatureIndex\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for segmentEach\n *\n * @callback segmentEachCallback\n * @param {Feature} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex)\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //=currentSegment\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * //=segmentIndex\n * });\n *\n * // Calculate the total number of segments\n * var total = 0;\n * turf.segmentEach(polygon, function () {\n * total++;\n * });\n */\nfunction segmentEach(geojson, callback) {\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n var segmentIndex = 0;\n\n // Exclude null Geometries\n if (!feature.geometry) return;\n // (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n var type = feature.geometry.type;\n if (type === \"Point\" || type === \"MultiPoint\") return;\n\n // Generate 2-vertex line segments\n var previousCoords;\n var previousFeatureIndex = 0;\n var previousMultiIndex = 0;\n var prevGeomIndex = 0;\n if (\n coordEach(\n feature,\n function (\n currentCoord,\n coordIndex,\n featureIndexCoord,\n multiPartIndexCoord,\n geometryIndex\n ) {\n // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false`\n if (\n previousCoords === undefined ||\n featureIndex > previousFeatureIndex ||\n multiPartIndexCoord > previousMultiIndex ||\n geometryIndex > prevGeomIndex\n ) {\n previousCoords = currentCoord;\n previousFeatureIndex = featureIndex;\n previousMultiIndex = multiPartIndexCoord;\n prevGeomIndex = geometryIndex;\n segmentIndex = 0;\n return;\n }\n var currentSegment = lineString(\n [previousCoords, currentCoord],\n feature.properties\n );\n if (\n callback(\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) === false\n )\n return false;\n segmentIndex++;\n previousCoords = currentCoord;\n }\n ) === false\n )\n return false;\n });\n}\n\n/**\n * Callback for segmentReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback segmentReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n */\n\n/**\n * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //= previousSegment\n * //= currentSegment\n * //= featureIndex\n * //= multiFeatureIndex\n * //= geometryIndex\n * //= segmentIndex\n * return currentSegment\n * });\n *\n * // Calculate the total number of segments\n * var initialValue = 0\n * var total = turf.segmentReduce(polygon, function (previousValue) {\n * previousValue++;\n * return previousValue;\n * }, initialValue);\n */\nfunction segmentReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n var started = false;\n segmentEach(\n geojson,\n function (\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) {\n if (started === false && initialValue === undefined)\n previousValue = currentSegment;\n else\n previousValue = callback(\n previousValue,\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n );\n started = true;\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for lineEach\n *\n * @callback lineEachCallback\n * @param {Feature} currentLine The current LineString|LinearRing being processed\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries,\n * similar to Array.forEach.\n *\n * @name lineEach\n * @param {Geometry|Feature} geojson object\n * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @example\n * var multiLine = turf.multiLineString([\n * [[26, 37], [35, 45]],\n * [[36, 53], [38, 50], [41, 55]]\n * ]);\n *\n * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\nfunction lineEach(geojson, callback) {\n // validation\n if (!geojson) throw new Error(\"geojson is required\");\n\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n if (feature.geometry === null) return;\n var type = feature.geometry.type;\n var coords = feature.geometry.coordinates;\n switch (type) {\n case \"LineString\":\n if (callback(feature, featureIndex, multiFeatureIndex, 0, 0) === false)\n return false;\n break;\n case \"Polygon\":\n for (\n var geometryIndex = 0;\n geometryIndex < coords.length;\n geometryIndex++\n ) {\n if (\n callback(\n lineString(coords[geometryIndex], feature.properties),\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n }\n break;\n }\n });\n}\n\n/**\n * Callback for lineReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback lineReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentLine The current LineString|LinearRing being processed.\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name lineReduce\n * @param {Geometry|Feature} geojson object\n * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var multiPoly = turf.multiPolygon([\n * turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]),\n * turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]])\n * ]);\n *\n * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentLine\n * });\n */\nfunction lineReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n lineEach(\n geojson,\n function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentLine;\n else\n previousValue = callback(\n previousValue,\n currentLine,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n * Point & MultiPoint will always return null.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.segmentIndex=0] Segment Index\n * @param {Object} [options.properties={}] Translate Properties to output LineString\n * @param {BBox} [options.bbox={}] Translate BBox to output LineString\n * @param {number|string} [options.id={}] Translate Id to output LineString\n * @returns {Feature} 2-vertex GeoJSON Feature LineString\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findSegment(multiLine);\n * // => Feature>\n *\n * // First Segment of 2nd Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: 1});\n * // => Feature>\n *\n * // Last Segment of Last Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1});\n * // => Feature>\n */\nfunction findSegment(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var segmentIndex = options.segmentIndex || 0;\n\n // Find FeatureIndex\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n\n // Find SegmentIndex\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n return lineString(\n [coords[segmentIndex], coords[segmentIndex + 1]],\n properties,\n options\n );\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n return lineString(\n [\n coords[geometryIndex][segmentIndex],\n coords[geometryIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n return lineString(\n [\n coords[multiFeatureIndex][segmentIndex],\n coords[multiFeatureIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex =\n coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n return lineString(\n [\n coords[multiFeatureIndex][geometryIndex][segmentIndex],\n coords[multiFeatureIndex][geometryIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\n\n/**\n * Finds a particular Point from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.coordIndex=0] Coord Index\n * @param {Object} [options.properties={}] Translate Properties to output Point\n * @param {BBox} [options.bbox={}] Translate BBox to output Point\n * @param {number|string} [options.id={}] Translate Id to output Point\n * @returns {Feature} 2-vertex GeoJSON Feature Point\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findPoint(multiLine);\n * // => Feature>\n *\n * // First Segment of the 2nd Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: 1});\n * // => Feature>\n *\n * // Last Segment of last Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1});\n * // => Feature>\n */\nfunction findPoint(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var coordIndex = options.coordIndex || 0;\n\n // Find FeatureIndex\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n\n // Find Coord Index\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n return point(coords, properties, options);\n case \"MultiPoint\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n return point(coords[multiFeatureIndex], properties, options);\n case \"LineString\":\n if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n return point(coords[coordIndex], properties, options);\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (coordIndex < 0)\n coordIndex = coords[geometryIndex].length + coordIndex;\n return point(coords[geometryIndex][coordIndex], properties, options);\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (coordIndex < 0)\n coordIndex = coords[multiFeatureIndex].length + coordIndex;\n return point(coords[multiFeatureIndex][coordIndex], properties, options);\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (coordIndex < 0)\n coordIndex =\n coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n return point(\n coords[multiFeatureIndex][geometryIndex][coordIndex],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\n\nexport { coordAll, coordEach, coordReduce, featureEach, featureReduce, findPoint, findSegment, flattenEach, flattenReduce, geomEach, geomReduce, lineEach, lineReduce, propEach, propReduce, segmentEach, segmentReduce };\n","import { Base } from './base';\nimport { bisect, isValid } from '../utils';\n/**\n * 将连续的定义域分段,每一段所有的值对应离散的值域中一个值\n */\nexport class Threshold extends Base {\n getDefaultOptions() {\n return {\n domain: [0.5],\n range: [0, 1],\n };\n }\n constructor(options) {\n super(options);\n }\n /**\n * 二分查找到输入值在哪一段,返回对应的值域中的值\n */\n map(x) {\n if (!isValid(x))\n return this.options.unknown;\n const index = bisect(this.thresholds, x, 0, this.n);\n return this.options.range[index];\n }\n /**\n * 在值域中找到对应的值,并返回在定义域中属于哪一段\n */\n invert(y) {\n const { range } = this.options;\n const index = range.indexOf(y);\n const domain = this.thresholds;\n return [domain[index - 1], domain[index]];\n }\n clone() {\n return new Threshold(this.options);\n }\n rescale() {\n const { domain, range } = this.options;\n this.n = Math.min(domain.length, range.length - 1);\n this.thresholds = domain;\n }\n}\n//# sourceMappingURL=threshold.js.map","import { lngLatToMeters } from '@antv/l7-utils';\nimport earcut from 'earcut';\nexport function MultipleOfFourNumber(num) {\n return Math.max(Math.ceil(num / 4) * 4, 4);\n}\n\n/**\n * Get vertex indices for drawing polygon mesh (triangulation)\n */\nexport function getPolygonSurfaceIndices(positions, holeIndices, positionSize, preproject = true) {\n const is3d = positionSize === 3;\n if (preproject) {\n positions = positions.slice();\n const p = [];\n for (let i = 0; i < positions.length; i += positionSize) {\n p[0] = positions[i];\n p[1] = positions[i + 1];\n if (is3d) {\n p[2] = positions[i + 2];\n }\n\n // earcut is a 2D triangulation algorithm, and handles 3D data as if it was projected onto the XY plane\n const xy = lngLatToMeters(p, true, {\n enable: false,\n decimal: 1\n });\n positions[i] = xy[0];\n positions[i + 1] = xy[1];\n if (is3d) {\n positions[i + 2] = xy[2];\n }\n }\n }\n const indices = earcut(positions, holeIndices, positionSize);\n return indices;\n}","import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n const v = variance(values, valueof);\n return v ? Math.sqrt(v) : v;\n}\n","export default function variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { deepMix } from '@antv/util';\nimport { column } from './utils/helper';\n/**\n * Infer key for every element.\n */\nexport const MaybeKey = () => {\n return (I, mark) => {\n const { encode } = mark;\n const { key } = encode, rest = __rest(encode, [\"key\"]);\n if (key !== undefined)\n return [I, mark];\n const values = Object.values(rest).map(({ value }) => value);\n const K = I.map((i) => values\n .filter(Array.isArray)\n .map((V) => V[i])\n .join('-'));\n return [I, deepMix({}, mark, { encode: { key: column(K) } })];\n };\n};\nMaybeKey.props = {};\n//# sourceMappingURL=maybeKey.js.map","function fillZero(digit) {\n if (Math.abs(digit) > 10)\n return String(digit);\n return digit.toString().padStart(2, '0');\n}\nexport function dynamicFormatDateTime(date) {\n const year = date.getFullYear();\n const month = fillZero(date.getMonth() + 1);\n const day = fillZero(date.getDate());\n const yyyyMMDD = `${year}-${month}-${day}`;\n const hour = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n if (hour || minutes || seconds)\n return `${yyyyMMDD} ${fillZero(hour)}:${fillZero(minutes)}:${fillZero(seconds)}`;\n return yyyyMMDD;\n}\n//# sourceMappingURL=dateFormat.js.map","import { deepMix } from '@antv/util';\nimport { isUnset } from '../utils/helper';\nimport { dynamicFormatDateTime } from '../utils/dateFormat';\nimport { columnOf } from './utils/helper';\n/**\n * Infer title channel from x-position channel.\n */\nexport const MaybeTitle = (options = {}) => {\n const { channel = 'x' } = options;\n return (I, mark) => {\n const { encode } = mark;\n const { tooltip } = mark;\n if (isUnset(tooltip))\n return [I, mark];\n const { title } = tooltip;\n if (title !== undefined)\n return [I, mark];\n const titles = Object.keys(encode)\n .filter((key) => key.startsWith(channel))\n .filter((key) => !encode[key].inferred)\n .map((key) => columnOf(encode, key))\n .filter(([T]) => T)\n .map((d) => d[0]);\n if (titles.length === 0)\n return [I, mark];\n const T = [];\n for (const i of I) {\n T[i] = {\n value: titles\n .map((t) => t[i] instanceof Date ? dynamicFormatDateTime(t[i]) : t[i])\n .join(', '),\n };\n }\n return [\n I,\n deepMix({}, mark, {\n tooltip: {\n title: T,\n },\n }),\n ];\n };\n};\nMaybeTitle.props = {};\n//# sourceMappingURL=maybeTitle.js.map","import { deepMix } from '@antv/util';\nimport { isUnset } from '../utils/helper';\n/**\n * Infer tooltip channel from specified channel.\n */\nexport const MaybeTooltip = (options) => {\n const { channel } = options;\n return (I, mark) => {\n const { encode, tooltip } = mark;\n if (isUnset(tooltip))\n return [I, mark];\n const { items = [] } = tooltip;\n if (!items || items.length > 0)\n return [I, mark];\n const channels = Array.isArray(channel) ? channel : [channel];\n const newItems = channels.flatMap((channel) => Object.keys(encode)\n .filter((key) => key.startsWith(channel))\n .map((key) => {\n const { field, value, inferred = false, aggregate } = encode[key];\n if (inferred)\n return null;\n // Do not show inferred column.\n if (aggregate && value)\n return { channel: key };\n if (field)\n return { field };\n if (value)\n return { channel: key };\n return null;\n })\n .filter((d) => d !== null));\n return [I, deepMix({}, mark, { tooltip: { items: newItems } })];\n };\n};\nMaybeTooltip.props = {};\n//# sourceMappingURL=maybeTooltip.js.map","import { MaybeKey, MaybeTitle, MaybeTooltip } from '../transform';\nexport function baseChannels(options = {}) {\n const { shapes } = options;\n return [\n { name: 'color' },\n { name: 'opacity' },\n { name: 'shape', range: shapes },\n { name: 'enterType' },\n { name: 'enterDelay', scaleKey: 'enter' },\n { name: 'enterDuration', scaleKey: 'enter' },\n { name: 'enterEasing' },\n { name: 'key', scale: 'identity' },\n { name: 'groupKey', scale: 'identity' },\n { name: 'label', scale: 'identity' },\n ];\n}\nexport function baseGeometryChannels(options = {}) {\n return [...baseChannels(options), { name: 'title', scale: 'identity' }];\n}\nexport function tooltip3d() {\n return [\n { type: MaybeTitle, channel: 'color' },\n { type: MaybeTooltip, channel: ['x', 'y', 'z'] },\n ];\n}\nexport function tooltip2d() {\n return [\n { type: MaybeTitle, channel: 'color' },\n { type: MaybeTooltip, channel: ['x', 'y'] },\n ];\n}\nexport function tooltip1d() {\n return [\n { type: MaybeTitle, channel: 'x' },\n { type: MaybeTooltip, channel: ['y'] },\n ];\n}\nexport function tooltipXd() {\n return [\n { type: MaybeTitle, channel: 'color' },\n { type: MaybeTooltip, channel: ['position'] },\n ];\n}\nexport function baseAnnotationChannels(options = {}) {\n return baseChannels(options);\n}\nexport function basePreInference() {\n return [{ type: MaybeKey }];\n}\nexport function basePostInference() {\n return [];\n}\nexport function bandWidth(scale, x) {\n return scale.getBandWidth(scale.invert(x));\n}\nexport function createBandOffset(scale, value, options = {}) {\n const { x: X, y: Y, series: S } = value;\n const { x, y, series } = scale;\n const { style: { bandOffset = series ? 0 : 0.5, bandOffsetX = bandOffset, bandOffsetY = bandOffset, } = {}, } = options;\n const isBandX = !!(x === null || x === void 0 ? void 0 : x.getBandWidth);\n const isBandY = !!(y === null || y === void 0 ? void 0 : y.getBandWidth);\n const isSeries = !!(series === null || series === void 0 ? void 0 : series.getBandWidth);\n if (!isBandX && !isBandY)\n return (d) => d;\n return (d, i) => {\n const widthX = isBandX ? bandWidth(x, X[i]) : 0;\n const widthY = isBandY ? bandWidth(y, Y[i]) : 0;\n const f = () => (bandWidth(series, S[i]) / 2 + +S[i]) * widthX;\n const offset = isSeries && S ? f() : 0;\n const [x0, y0] = d;\n return [x0 + bandOffsetX * widthX + offset, y0 + bandOffsetY * widthY];\n };\n}\nexport function p(d) {\n return parseFloat(d) / 100;\n}\nexport function visualMark(index, scale, value, coordinate) {\n const { x: X, y: Y } = value;\n const { innerWidth, innerHeight } = coordinate.getOptions();\n const P = Array.from(index, (i) => {\n const x0 = X[i];\n const y0 = Y[i];\n const x = typeof x0 === 'string' ? p(x0) * innerWidth : +x0;\n const y = typeof y0 === 'string' ? p(y0) * innerHeight : +y0;\n return [[x, y]];\n });\n return [index, P];\n}\nexport function field(encode) {\n return typeof encode === 'function' ? encode : (d) => d[encode];\n}\nexport function valueof(data, encode) {\n return Array.from(data, field(encode));\n}\nexport function initializeData(data, encode) {\n const { source = (d) => d.source, target = (d) => d.target, value = (d) => d.value, } = encode;\n const { links, nodes } = data;\n const LS = valueof(links, source);\n const LT = valueof(links, target);\n const LV = valueof(links, value);\n return {\n links: links.map((_, i) => ({\n target: LT[i],\n source: LS[i],\n value: LV[i],\n })),\n nodes: nodes || Array.from(new Set([...LS, ...LT]), (key) => ({ key })),\n };\n}\n//# sourceMappingURL=utils.js.map","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\", \"contentRender\", \"submitter\", \"fieldProps\", \"formItemProps\", \"groupProps\", \"transformKey\", \"formRef\", \"onInit\", \"form\", \"loading\", \"formComponentType\", \"extraUrlParams\", \"syncToUrl\", \"onUrlSearchChange\", \"onReset\", \"omitNil\", \"isKeyPressSubmit\", \"autoFocusFirstInput\", \"grid\", \"rowProps\", \"colProps\"],\n _excluded2 = [\"extraUrlParams\", \"syncToUrl\", \"isKeyPressSubmit\", \"syncToUrlAsImportant\", \"syncToInitialValues\", \"children\", \"contentRender\", \"submitter\", \"fieldProps\", \"proFieldProps\", \"formItemProps\", \"groupProps\", \"dateFormatter\", \"formRef\", \"onInit\", \"form\", \"formComponentType\", \"onReset\", \"grid\", \"rowProps\", \"colProps\", \"omitNil\", \"request\", \"params\", \"initialValues\", \"formKey\", \"readonly\", \"onLoadingChange\", \"loading\"];\n/* eslint-disable react-hooks/exhaustive-deps */\nimport { ProConfigProvider } from '@ant-design/pro-provider';\nimport { ProFormContext, conversionMomentValue, isDeepEqualReact, nanoid, runFunction, transformKeySubmitValue, useFetchData, useMountMergeState, usePrevious, useRefFunction, useStyle } from '@ant-design/pro-utils';\nimport { useUrlSearchParams } from '@umijs/use-params';\nimport { ConfigProvider, Form, Spin } from 'antd';\nimport classNames from 'classnames';\nimport omit from \"rc-util/es/omit\";\nimport get from \"rc-util/es/utils/get\";\nimport { default as namePathSet, default as set } from \"rc-util/es/utils/set\";\nimport { noteOnce } from \"rc-util/es/warning\";\nimport React, { useContext, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport FieldContext from \"../FieldContext\";\nimport { Submitter } from \"../components\";\nimport { FormListContext } from \"../components/List\";\nimport { GridContext, useGridHelpers } from \"../helpers\";\nimport { EditOrReadOnlyContext } from \"./EditOrReadOnlyContext\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar genParams = function genParams(syncUrl, params, type) {\n if (syncUrl === true) {\n return params;\n }\n return runFunction(syncUrl, params, type);\n};\n/**\n * It takes a name path and converts it to an array.\n * @param {NamePath} name - The name of the form.\n * @returns string[]\n *\n * a-> [a]\n * [a] -> [a]\n */\nvar covertFormName = function covertFormName(name) {\n if (!name) return name;\n if (Array.isArray(name)) return name;\n return [name];\n};\nfunction BaseFormComponents(props) {\n var _ConfigProvider$useCo;\n var children = props.children,\n contentRender = props.contentRender,\n submitter = props.submitter,\n fieldProps = props.fieldProps,\n formItemProps = props.formItemProps,\n groupProps = props.groupProps,\n transformKey = props.transformKey,\n propsFormRef = props.formRef,\n onInit = props.onInit,\n form = props.form,\n loading = props.loading,\n formComponentType = props.formComponentType,\n _props$extraUrlParams = props.extraUrlParams,\n extraUrlParams = _props$extraUrlParams === void 0 ? {} : _props$extraUrlParams,\n syncToUrl = props.syncToUrl,\n onUrlSearchChange = props.onUrlSearchChange,\n _onReset = props.onReset,\n _props$omitNil = props.omitNil,\n omitNil = _props$omitNil === void 0 ? true : _props$omitNil,\n isKeyPressSubmit = props.isKeyPressSubmit,\n _props$autoFocusFirst = props.autoFocusFirstInput,\n autoFocusFirstInput = _props$autoFocusFirst === void 0 ? true : _props$autoFocusFirst,\n grid = props.grid,\n rowProps = props.rowProps,\n colProps = props.colProps,\n rest = _objectWithoutProperties(props, _excluded);\n\n /**\n * 获取 form 实例\n */\n var formInstance = Form.useFormInstance();\n var _ref = (ConfigProvider === null || ConfigProvider === void 0 || (_ConfigProvider$useCo = ConfigProvider.useConfig) === null || _ConfigProvider$useCo === void 0 ? void 0 : _ConfigProvider$useCo.call(ConfigProvider)) || {\n componentSize: 'middle'\n },\n componentSize = _ref.componentSize;\n\n /** 同步 url 上的参数 */\n var formRef = useRef(form || formInstance);\n\n /**\n * 获取布局\n */\n var _useGridHelpers = useGridHelpers({\n grid: grid,\n rowProps: rowProps\n }),\n RowWrapper = _useGridHelpers.RowWrapper;\n var getFormInstance = useRefFunction(function () {\n return formInstance;\n });\n var formatValues = useMemo(function () {\n return {\n /**\n * 获取被 ProForm 格式化后的所有数据\n * @param allData boolean\n * @returns T\n *\n * @example getFieldsFormatValue(true) ->返回所有数据,即使没有被 form 托管的\n */\n getFieldsFormatValue: function getFieldsFormatValue(allData) {\n var _getFormInstance;\n return transformKey((_getFormInstance = getFormInstance()) === null || _getFormInstance === void 0 ? void 0 : _getFormInstance.getFieldsValue(allData), omitNil);\n },\n /**\n * 获取被 ProForm 格式化后的单个数据\n * @param nameList (string|number)[]\n * @returns T\n *\n * @example {a:{b:value}} -> getFieldFormatValue(['a', 'b']) -> value\n */\n /** 获取格式化之后的单个数据 */\n getFieldFormatValue: function getFieldFormatValue() {\n var _getFormInstance2;\n var paramsNameList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var nameList = covertFormName(paramsNameList);\n if (!nameList) throw new Error('nameList is require');\n var value = (_getFormInstance2 = getFormInstance()) === null || _getFormInstance2 === void 0 ? void 0 : _getFormInstance2.getFieldValue(nameList);\n var obj = nameList ? set({}, nameList, value) : value;\n //transformKey会将keys重新和nameList拼接,所以这里要将nameList的首个元素弹出\n var newNameList = _toConsumableArray(nameList);\n newNameList.shift();\n return get(transformKey(obj, omitNil, newNameList), nameList);\n },\n /**\n * 获取被 ProForm 格式化后的单个数据, 包含他的 name\n * @param nameList (string|number)[]\n * @returns T\n *\n * @example {a:{b:value}} -> getFieldFormatValueObject(['a', 'b']) -> {a:{b:value}}\n */\n /** 获取格式化之后的单个数据 */\n getFieldFormatValueObject: function getFieldFormatValueObject(paramsNameList) {\n var _getFormInstance3;\n var nameList = covertFormName(paramsNameList);\n var value = (_getFormInstance3 = getFormInstance()) === null || _getFormInstance3 === void 0 ? void 0 : _getFormInstance3.getFieldValue(nameList);\n var obj = nameList ? set({}, nameList, value) : value;\n return transformKey(obj, omitNil, nameList);\n },\n /** \n /**\n *验字段后返回格式化之后的所有数据\n * @param nameList (string|number)[]\n * @returns T\n * \n * @example validateFieldsReturnFormatValue -> {a:{b:value}}\n */\n validateFieldsReturnFormatValue: function () {\n var _validateFieldsReturnFormatValue = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(nameList) {\n var _getFormInstance4;\n var values, transformedKey;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!(!Array.isArray(nameList) && nameList)) {\n _context.next = 2;\n break;\n }\n throw new Error('nameList must be array');\n case 2:\n _context.next = 4;\n return (_getFormInstance4 = getFormInstance()) === null || _getFormInstance4 === void 0 ? void 0 : _getFormInstance4.validateFields(nameList);\n case 4:\n values = _context.sent;\n transformedKey = transformKey(values, omitNil);\n return _context.abrupt(\"return\", transformedKey ? transformedKey : {});\n case 7:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n function validateFieldsReturnFormatValue(_x) {\n return _validateFieldsReturnFormatValue.apply(this, arguments);\n }\n return validateFieldsReturnFormatValue;\n }()\n };\n }, [omitNil, transformKey]);\n var items = useMemo(function () {\n return React.Children.toArray(children).map(function (item, index) {\n if (index === 0 && /*#__PURE__*/React.isValidElement(item) && autoFocusFirstInput) {\n return /*#__PURE__*/React.cloneElement(item, _objectSpread(_objectSpread({}, item.props), {}, {\n autoFocus: autoFocusFirstInput\n }));\n }\n return item;\n });\n }, [autoFocusFirstInput, children]);\n\n /** 计算 props 的对象 */\n var submitterProps = useMemo(function () {\n return typeof submitter === 'boolean' || !submitter ? {} : submitter;\n }, [submitter]);\n\n /** 渲染提交按钮与重置按钮 */\n var submitterNode = useMemo(function () {\n if (submitter === false) return undefined;\n return /*#__PURE__*/_jsx(Submitter, _objectSpread(_objectSpread({}, submitterProps), {}, {\n onReset: function onReset() {\n var _formRef$current, _submitterProps$onRes;\n var finalValues = transformKey((_formRef$current = formRef.current) === null || _formRef$current === void 0 ? void 0 : _formRef$current.getFieldsValue(), omitNil);\n submitterProps === null || submitterProps === void 0 || (_submitterProps$onRes = submitterProps.onReset) === null || _submitterProps$onRes === void 0 || _submitterProps$onRes.call(submitterProps, finalValues);\n _onReset === null || _onReset === void 0 || _onReset(finalValues);\n // 如果 syncToUrl,清空一下数据\n if (syncToUrl) {\n var _formRef$current2;\n // 把没有的值设置为未定义可以删掉 url 的参数\n var params = Object.keys(transformKey((_formRef$current2 = formRef.current) === null || _formRef$current2 === void 0 ? void 0 : _formRef$current2.getFieldsValue(), false)).reduce(function (pre, next) {\n return _objectSpread(_objectSpread({}, pre), {}, _defineProperty({}, next, finalValues[next] || undefined));\n }, extraUrlParams);\n\n /** 在同步到 url 上时对参数进行转化 */\n onUrlSearchChange(genParams(syncToUrl, params || {}, 'set'));\n }\n },\n submitButtonProps: _objectSpread({\n loading: loading\n }, submitterProps.submitButtonProps)\n }), \"submitter\");\n }, [submitter, submitterProps, loading, transformKey, omitNil, _onReset, syncToUrl, extraUrlParams, onUrlSearchChange]);\n var content = useMemo(function () {\n var wrapItems = grid ? /*#__PURE__*/_jsx(RowWrapper, {\n children: items\n }) : items;\n if (contentRender) {\n return contentRender(wrapItems, submitterNode, formRef.current);\n }\n return wrapItems;\n }, [grid, RowWrapper, items, contentRender, submitterNode]);\n var preInitialValues = usePrevious(props.initialValues);\n\n // 提示一个 initialValues ,问的人实在是太多了\n useEffect(function () {\n if (syncToUrl || !props.initialValues || !preInitialValues || rest.request) return;\n var isEqual = isDeepEqualReact(props.initialValues, preInitialValues);\n noteOnce(isEqual, \"initialValues \\u53EA\\u5728 form \\u521D\\u59CB\\u5316\\u65F6\\u751F\\u6548\\uFF0C\\u5982\\u679C\\u4F60\\u9700\\u8981\\u5F02\\u6B65\\u52A0\\u8F7D\\u63A8\\u8350\\u4F7F\\u7528 request\\uFF0C\\u6216\\u8005 initialValues ?
    : null \");\n noteOnce(isEqual, \"The initialValues only take effect when the form is initialized, if you need to load asynchronously recommended request, or the initialValues ? : null \");\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.initialValues]);\n\n // 初始化给一个默认的 form\n useImperativeHandle(propsFormRef, function () {\n return _objectSpread(_objectSpread({}, formRef.current), formatValues);\n }, [formatValues, formRef.current]);\n useEffect(function () {\n var _formRef$current3, _formRef$current3$get;\n var finalValues = transformKey((_formRef$current3 = formRef.current) === null || _formRef$current3 === void 0 || (_formRef$current3$get = _formRef$current3.getFieldsValue) === null || _formRef$current3$get === void 0 ? void 0 : _formRef$current3$get.call(_formRef$current3, true), omitNil);\n onInit === null || onInit === void 0 || onInit(finalValues, _objectSpread(_objectSpread({}, formRef.current), formatValues));\n }, []);\n return /*#__PURE__*/_jsx(ProFormContext.Provider, {\n value: _objectSpread(_objectSpread({}, formatValues), {}, {\n formRef: formRef\n }),\n children: /*#__PURE__*/_jsx(ConfigProvider, {\n componentSize: rest.size || componentSize,\n children: /*#__PURE__*/_jsxs(GridContext.Provider, {\n value: {\n grid: grid,\n colProps: colProps\n },\n children: [rest.component !== false && /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n style: {\n display: 'none'\n }\n }), content]\n })\n })\n });\n}\n\n/** 自动的formKey 防止重复 */\nvar requestFormCacheId = 0;\nfunction BaseForm(props) {\n var _props$extraUrlParams2 = props.extraUrlParams,\n extraUrlParams = _props$extraUrlParams2 === void 0 ? {} : _props$extraUrlParams2,\n syncToUrl = props.syncToUrl,\n isKeyPressSubmit = props.isKeyPressSubmit,\n _props$syncToUrlAsImp = props.syncToUrlAsImportant,\n syncToUrlAsImportant = _props$syncToUrlAsImp === void 0 ? false : _props$syncToUrlAsImp,\n _props$syncToInitialV = props.syncToInitialValues,\n syncToInitialValues = _props$syncToInitialV === void 0 ? true : _props$syncToInitialV,\n children = props.children,\n contentRender = props.contentRender,\n submitter = props.submitter,\n fieldProps = props.fieldProps,\n proFieldProps = props.proFieldProps,\n formItemProps = props.formItemProps,\n groupProps = props.groupProps,\n _props$dateFormatter = props.dateFormatter,\n dateFormatter = _props$dateFormatter === void 0 ? 'string' : _props$dateFormatter,\n propsFormRef = props.formRef,\n onInit = props.onInit,\n form = props.form,\n formComponentType = props.formComponentType,\n onReset = props.onReset,\n grid = props.grid,\n rowProps = props.rowProps,\n colProps = props.colProps,\n _props$omitNil2 = props.omitNil,\n omitNil = _props$omitNil2 === void 0 ? true : _props$omitNil2,\n request = props.request,\n params = props.params,\n initialValues = props.initialValues,\n _props$formKey = props.formKey,\n formKey = _props$formKey === void 0 ? requestFormCacheId : _props$formKey,\n readonly = props.readonly,\n onLoadingChange = props.onLoadingChange,\n propsLoading = props.loading,\n propRest = _objectWithoutProperties(props, _excluded2);\n var formRef = useRef({});\n var _useMountMergeState = useMountMergeState(false, {\n onChange: onLoadingChange,\n value: propsLoading\n }),\n _useMountMergeState2 = _slicedToArray(_useMountMergeState, 2),\n loading = _useMountMergeState2[0],\n setLoading = _useMountMergeState2[1];\n var _useUrlSearchParams = useUrlSearchParams({}, {\n disabled: !syncToUrl\n }),\n _useUrlSearchParams2 = _slicedToArray(_useUrlSearchParams, 2),\n urlSearch = _useUrlSearchParams2[0],\n setUrlSearch = _useUrlSearchParams2[1];\n var curFormKey = useRef(nanoid());\n useEffect(function () {\n requestFormCacheId += 0;\n }, []);\n var _useFetchData = useFetchData({\n request: request,\n params: params,\n proFieldKey: formKey\n }),\n _useFetchData2 = _slicedToArray(_useFetchData, 1),\n initialData = _useFetchData2[0];\n var _useContext = useContext(ConfigProvider.ConfigContext),\n getPrefixCls = _useContext.getPrefixCls;\n var prefixCls = getPrefixCls('pro-form');\n // css\n var _useStyle = useStyle('ProForm', function (token) {\n return _defineProperty({}, \".\".concat(prefixCls), _defineProperty({}, \"> div:not(\".concat(token.proComponentsCls, \"-form-light-filter)\"), {\n '.pro-field': {\n maxWidth: '100%',\n '@media screen and (max-width: 575px)': {\n // 减少了 form 的 padding\n maxWidth: 'calc(93vw - 48px)'\n },\n // 适用于短数字,短文本或者选项\n '&-xs': {\n width: 104\n },\n '&-s': {\n width: 216\n },\n // 适用于较短字段录入、如姓名、电话、ID 等。\n '&-sm': {\n width: 216\n },\n '&-m': {\n width: 328\n },\n // 标准宽度,适用于大部分字段长度\n '&-md': {\n width: 328\n },\n '&-l': {\n width: 440\n },\n // 适用于较长字段录入,如长网址、标签组、文件路径等。\n '&-lg': {\n width: 440\n },\n // 适用于长文本录入,如长链接、描述、备注等,通常搭配自适应多行输入框或定高文本域使用。\n '&-xl': {\n width: 552\n }\n }\n }));\n }),\n wrapSSR = _useStyle.wrapSSR,\n hashId = _useStyle.hashId;\n\n // 如果为 false,不需要触发设置进去\n var _useState = useState(function () {\n if (!syncToUrl) {\n return {};\n }\n return genParams(syncToUrl, urlSearch, 'get');\n }),\n _useState2 = _slicedToArray(_useState, 2),\n urlParamsMergeInitialValues = _useState2[0],\n setUrlParamsMergeInitialValues = _useState2[1];\n\n /** 保存 transformKeyRef,用于对表单key transform */\n var transformKeyRef = useRef({});\n var fieldsValueType = useRef({});\n\n /** 使用 callback 的类型 */\n var transformKey = useRefFunction(function (values, paramsOmitNil, parentKey) {\n return transformKeySubmitValue(conversionMomentValue(values, dateFormatter, fieldsValueType.current, paramsOmitNil, parentKey), transformKeyRef.current, paramsOmitNil);\n });\n useEffect(function () {\n if (syncToInitialValues) return;\n setUrlParamsMergeInitialValues({});\n }, [syncToInitialValues]);\n var getGenParams = useRefFunction(function () {\n return _objectSpread(_objectSpread({}, urlSearch), extraUrlParams);\n });\n useEffect(function () {\n if (!syncToUrl) return;\n setUrlSearch(genParams(syncToUrl, getGenParams(), 'set'));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [extraUrlParams, getGenParams, syncToUrl]);\n var getPopupContainer = useMemo(function () {\n if (typeof window === 'undefined') return undefined;\n // 如果在 drawerForm 和 modalForm 里就渲染dom到父节点里\n // modalForm 可能高度太小不适合\n if (formComponentType && ['DrawerForm'].includes(formComponentType)) {\n return function (e) {\n return e.parentNode || document.body;\n };\n }\n return undefined;\n }, [formComponentType]);\n var onFinish = useRefFunction( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\n var _formRef$current4, _formRef$current4$get, finalValues, response, _formRef$current5, _formRef$current5$get, syncToUrlParams;\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (propRest.onFinish) {\n _context2.next = 2;\n break;\n }\n return _context2.abrupt(\"return\");\n case 2:\n if (!loading) {\n _context2.next = 4;\n break;\n }\n return _context2.abrupt(\"return\");\n case 4:\n _context2.prev = 4;\n finalValues = formRef === null || formRef === void 0 || (_formRef$current4 = formRef.current) === null || _formRef$current4 === void 0 || (_formRef$current4$get = _formRef$current4.getFieldsFormatValue) === null || _formRef$current4$get === void 0 ? void 0 : _formRef$current4$get.call(_formRef$current4);\n response = propRest.onFinish(finalValues);\n if (response instanceof Promise) {\n setLoading(true);\n }\n _context2.next = 10;\n return response;\n case 10:\n if (syncToUrl) {\n // 把没有的值设置为未定义可以删掉 url 的参数\n syncToUrlParams = Object.keys(formRef === null || formRef === void 0 || (_formRef$current5 = formRef.current) === null || _formRef$current5 === void 0 || (_formRef$current5$get = _formRef$current5.getFieldsFormatValue) === null || _formRef$current5$get === void 0 ? void 0 : _formRef$current5$get.call(_formRef$current5, undefined, false)).reduce(function (pre, next) {\n var _finalValues$next;\n return _objectSpread(_objectSpread({}, pre), {}, _defineProperty({}, next, (_finalValues$next = finalValues[next]) !== null && _finalValues$next !== void 0 ? _finalValues$next : undefined));\n }, extraUrlParams); // fix #3547: 当原先在url中存在的字段被删除时,应该将 params 中的该字段设置为 undefined,以便触发url同步删除\n Object.keys(urlSearch).forEach(function (key) {\n if (syncToUrlParams[key] !== false && syncToUrlParams[key] !== 0 && !syncToUrlParams[key]) {\n syncToUrlParams[key] = undefined;\n }\n });\n /** 在同步到 url 上时对参数进行转化 */\n setUrlSearch(genParams(syncToUrl, syncToUrlParams, 'set'));\n }\n setLoading(false);\n _context2.next = 18;\n break;\n case 14:\n _context2.prev = 14;\n _context2.t0 = _context2[\"catch\"](4);\n console.log(_context2.t0);\n setLoading(false);\n case 18:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, null, [[4, 14]]);\n })));\n\n // 初始化给一个默认的 form\n useImperativeHandle(propsFormRef, function () {\n return formRef.current;\n }, [!initialData]);\n if (!initialData && props.request) {\n return /*#__PURE__*/_jsx(\"div\", {\n style: {\n paddingTop: 50,\n paddingBottom: 50,\n textAlign: 'center'\n },\n children: /*#__PURE__*/_jsx(Spin, {})\n });\n }\n return wrapSSR( /*#__PURE__*/_jsx(EditOrReadOnlyContext.Provider, {\n value: {\n mode: props.readonly ? 'read' : 'edit'\n },\n children: /*#__PURE__*/_jsx(ProConfigProvider, {\n needDeps: true,\n children: /*#__PURE__*/_jsx(FieldContext.Provider, {\n value: {\n formRef: formRef,\n fieldProps: fieldProps,\n proFieldProps: proFieldProps,\n formItemProps: formItemProps,\n groupProps: groupProps,\n formComponentType: formComponentType,\n getPopupContainer: getPopupContainer,\n formKey: curFormKey.current,\n setFieldValueType: function setFieldValueType(name, _ref4) {\n var _ref4$valueType = _ref4.valueType,\n valueType = _ref4$valueType === void 0 ? 'text' : _ref4$valueType,\n dateFormat = _ref4.dateFormat,\n transform = _ref4.transform;\n if (!Array.isArray(name)) return;\n transformKeyRef.current = namePathSet(transformKeyRef.current, name, transform);\n fieldsValueType.current = namePathSet(fieldsValueType.current, name, {\n valueType: valueType,\n dateFormat: dateFormat\n });\n }\n },\n children: /*#__PURE__*/_jsx(FormListContext.Provider, {\n value: {},\n children: /*#__PURE__*/_jsx(Form, _objectSpread(_objectSpread({\n onKeyPress: function onKeyPress(event) {\n if (!isKeyPressSubmit) return;\n if (event.key === 'Enter') {\n var _formRef$current6;\n (_formRef$current6 = formRef.current) === null || _formRef$current6 === void 0 || _formRef$current6.submit();\n }\n },\n autoComplete: \"off\",\n form: form\n }, omit(propRest, ['ref', 'labelWidth', 'autoFocusFirstInput'])), {}, {\n ref: function ref(instance) {\n if (!formRef.current) return;\n formRef.current.nativeElement = instance === null || instance === void 0 ? void 0 : instance.nativeElement;\n }\n // 组合 urlSearch 和 initialValues\n ,\n initialValues: syncToUrlAsImportant ? _objectSpread(_objectSpread(_objectSpread({}, initialValues), initialData), urlParamsMergeInitialValues) : _objectSpread(_objectSpread(_objectSpread({}, urlParamsMergeInitialValues), initialValues), initialData),\n onValuesChange: function onValuesChange(changedValues, values) {\n var _propRest$onValuesCha;\n propRest === null || propRest === void 0 || (_propRest$onValuesCha = propRest.onValuesChange) === null || _propRest$onValuesCha === void 0 || _propRest$onValuesCha.call(propRest, transformKey(changedValues, !!omitNil), transformKey(values, !!omitNil));\n },\n className: classNames(props.className, prefixCls, hashId),\n onFinish: onFinish,\n children: /*#__PURE__*/_jsx(BaseFormComponents, _objectSpread(_objectSpread({\n transformKey: transformKey,\n autoComplete: \"off\",\n loading: loading,\n onUrlSearchChange: setUrlSearch\n }, props), {}, {\n formRef: formRef,\n initialValues: _objectSpread(_objectSpread({}, initialValues), initialData)\n }))\n }))\n })\n })\n })\n }));\n}\nexport { BaseForm };","\"use strict\";\n// This icon file is generated automatically.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ArrowRightOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M869 487.8L491.2 159.9c-2.9-2.5-6.6-3.9-10.5-3.9h-88.5c-7.4 0-10.8 9.2-5.2 14l350.2 304H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h585.1L386.9 854c-5.6 4.9-2.2 14 5.2 14h91.5c1.9 0 3.8-.7 5.2-2L869 536.2a32.07 32.07 0 000-48.4z\" } }] }, \"name\": \"arrow-right\", \"theme\": \"outlined\" };\nexports.default = ArrowRightOutlined;\n","import { __read } from \"tslib\";\nimport { Marker } from '../marker';\n/**\n * 将值转换至步长tick上\n */\nexport function getStepValueByValue(value, step, min) {\n var count = Math.round((value - min) / step);\n return min + count * step;\n}\nexport function hiddenHandle(x, y, r) {\n // 长宽比\n var ratio = 1.4;\n var diffY = ratio * r;\n return [['M', x - r, y - diffY], ['L', x + r, y - diffY], ['L', x + r, y + diffY], ['L', x - r, y + diffY], ['Z']];\n}\n// 控制手柄\nvar HANDLE_HEIGHT_RATIO = 1.4;\nvar HANDLE_TRIANGLE_RATIO = 0.4;\n// 纵向手柄\nexport function verticalHandle(x, y, r) {\n var width = r;\n var height = width * HANDLE_HEIGHT_RATIO;\n var halfWidth = width / 2;\n var oneSixthWidth = width / 6;\n var triangleX = x + height * HANDLE_TRIANGLE_RATIO;\n return [\n ['M', x, y],\n ['L', triangleX, y + halfWidth],\n ['L', x + height, y + halfWidth],\n ['L', x + height, y - halfWidth],\n ['L', triangleX, y - halfWidth],\n ['Z'],\n // 绘制两条横线\n ['M', triangleX, y + oneSixthWidth],\n ['L', x + height - 2, y + oneSixthWidth],\n ['M', triangleX, y - oneSixthWidth],\n ['L', x + height - 2, y - oneSixthWidth],\n ];\n}\n// 横向手柄\nexport function horizontalHandle(x, y, r) {\n var width = r;\n var height = width * HANDLE_HEIGHT_RATIO;\n var halfWidth = width / 2;\n var oneSixthWidth = width / 6;\n var triangleY = y + height * HANDLE_TRIANGLE_RATIO;\n return [\n ['M', x, y],\n ['L', x - halfWidth, triangleY],\n ['L', x - halfWidth, y + height],\n ['L', x + halfWidth, y + height],\n ['L', x + halfWidth, triangleY],\n ['Z'],\n // 绘制两条竖线\n ['M', x - oneSixthWidth, triangleY],\n ['L', x - oneSixthWidth, y + height - 2],\n ['M', x + oneSixthWidth, triangleY],\n ['L', x + oneSixthWidth, y + height - 2],\n ];\n}\nMarker.registerSymbol('hiddenHandle', hiddenHandle);\nMarker.registerSymbol('verticalHandle', verticalHandle);\nMarker.registerSymbol('horizontalHandle', horizontalHandle);\nexport var ifH = function (orientation, a, b) {\n if (orientation === void 0) { orientation = 'horizontal'; }\n return (orientation === 'horizontal' ? a : b);\n};\n// 具体逻辑还没看,@chushen\nexport function getSafetySelections(domain, newSelection, oldSelection, precision) {\n var _a;\n if (precision === void 0) { precision = 4; }\n var _b = __read(domain, 2), min = _b[0], max = _b[1];\n var _c = __read(newSelection, 2), start = _c[0], end = _c[1];\n var _d = __read(oldSelection, 2), prevStart = _d[0], prevEnd = _d[1];\n var _e = __read([start, end], 2), startVal = _e[0], endVal = _e[1];\n var range = endVal - startVal;\n // 交换startVal endVal\n if (startVal > endVal) {\n _a = __read([endVal, startVal], 2), startVal = _a[0], endVal = _a[1];\n }\n // 超出范围就全选\n if (range > max - min) {\n return [min, max];\n }\n if (startVal < min) {\n if (prevStart === min && prevEnd === endVal) {\n return [min, endVal];\n }\n return [min, range + min];\n }\n if (endVal > max) {\n if (prevEnd === max && prevStart === startVal) {\n return [startVal, max];\n }\n return [max - range, max];\n }\n // 保留小数\n return [startVal, endVal];\n}\nexport function ifHorizontal(orientation, a, b) {\n if (orientation === void 0) { orientation = 'horizontal'; }\n return orientation === 'horizontal' ? a : b;\n}\n//# sourceMappingURL=utils.js.map","import { Threshold } from './threshold';\nimport { wilkinsonExtended } from '../tick-methods/wilkinson-extended';\nimport { d3LinearNice } from '../utils';\n/**\n * 类似 Threshold 比例尺,区别在于 thresholds 是根据连续的 domain 根据离散的 range 的数量计算而得到的。\n */\nexport class Quantize extends Threshold {\n getDefaultOptions() {\n return {\n domain: [0, 1],\n range: [0.5],\n nice: false,\n tickCount: 5,\n tickMethod: wilkinsonExtended,\n };\n }\n constructor(options) {\n super(options);\n }\n nice() {\n const { nice } = this.options;\n if (nice) {\n const [min, max, tickCount] = this.getTickMethodOptions();\n this.options.domain = d3LinearNice(min, max, tickCount);\n }\n }\n getTicks() {\n const { tickMethod } = this.options;\n const [min, max, tickCount] = this.getTickMethodOptions();\n return tickMethod(min, max, tickCount);\n }\n getTickMethodOptions() {\n const { domain, tickCount } = this.options;\n const min = domain[0];\n const max = domain[domain.length - 1];\n return [min, max, tickCount];\n }\n rescale() {\n this.nice();\n const { range, domain } = this.options;\n const [x0, x1] = domain;\n this.n = range.length - 1;\n this.thresholds = new Array(this.n);\n for (let i = 0; i < this.n; i += 1) {\n this.thresholds[i] = ((i + 1) * x1 - (i - this.n) * x0) / (this.n + 1);\n }\n }\n /**\n * 如果是在第一段后或者最后一段就把两端的值添加上\n */\n invert(y) {\n const [a, b] = super.invert(y);\n const [x0, x1] = this.options.domain;\n return a === undefined && b === undefined ? [a, b] : [a || x0, b || x1];\n }\n getThresholds() {\n return this.thresholds;\n }\n clone() {\n return new Quantize(this.options);\n }\n}\n//# sourceMappingURL=quantize.js.map","export default function maxIndex(values, valueof) {\n let max;\n let maxIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n }\n return maxIndex;\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.active = undefined;\n\nvar _extends = Object.assign || 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; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar active = exports.active = function active(Component) {\n var Span = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'span';\n\n return function (_React$Component) {\n _inherits(Active, _React$Component);\n\n function Active() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Active);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Active.__proto__ || Object.getPrototypeOf(Active)).call.apply(_ref, [this].concat(args))), _this), _this.state = { active: false }, _this.handleMouseDown = function () {\n return _this.setState({ active: true });\n }, _this.handleMouseUp = function () {\n return _this.setState({ active: false });\n }, _this.render = function () {\n return _react2.default.createElement(\n Span,\n { onMouseDown: _this.handleMouseDown, onMouseUp: _this.handleMouseUp },\n _react2.default.createElement(Component, _extends({}, _this.props, _this.state))\n );\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n return Active;\n }(_react2.default.Component);\n};\n\nexports.default = active;","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","/**\n * Calls a defined callback function on each key:value of a object,\n * and returns a object contains the result.\n */\nexport function mapObject(object, callbackfn) {\n return Object.entries(object).reduce((obj, [key, value]) => {\n obj[key] = callbackfn(value, key, object);\n return obj;\n }, {});\n}\nexport function indexOf(array) {\n return array.map((_, i) => i);\n}\n/**\n * @example [[1, 2, 3], ['a', 'b', 'c']] => [[1, 'a'], [2, 'b'], [3, 'c']]\n */\nexport function transpose(matrix) {\n const row = matrix.length;\n const col = matrix[0].length;\n // Note: new Array(col).fill(new Array(row)) is not ok!!!\n // Because in this case it will fill new Array(col) with the same array: new Array(row).\n const transposed = new Array(col).fill(0).map(() => new Array(row));\n for (let i = 0; i < col; i++) {\n for (let j = 0; j < row; j++) {\n transposed[i][j] = matrix[j][i];\n }\n }\n return transposed;\n}\nexport function firstOf(array) {\n return array[0];\n}\nexport function lastOf(array) {\n return array[array.length - 1];\n}\nexport function isFlatArray(array) {\n return !array.some(Array.isArray);\n}\nexport function unique(array) {\n return Array.from(new Set(array));\n}\nexport function divide(array, callbackfn) {\n const result = [[], []];\n array.forEach((item) => {\n result[callbackfn(item) ? 0 : 1].push(item);\n });\n return result;\n}\nfunction comb(array, len = array.length) {\n if (len === 1)\n return array.map((item) => [item]);\n const result = [];\n for (let i = 0; i < array.length; i++) {\n const rest = array.slice(i + 1);\n const restComb = comb(rest, len - 1);\n restComb.forEach((comb) => {\n result.push([array[i], ...comb]);\n });\n }\n return result;\n}\n/**\n * get all combinations of two elements in an array\n * @example [1, 2, 3] => [[1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]\n * @param array\n * @returns\n */\nexport function combine(array) {\n if (array.length === 1)\n return [array];\n const result = [];\n for (let i = 1; i <= array.length; i++) {\n result.push(...comb(array, i));\n }\n return result;\n}\n//# sourceMappingURL=array.js.map","import { registerSymbol } from '../utils/marker';\nexport const library = {};\n// @todo Warn if override existing key.\nexport function register(key, component) {\n if (key.startsWith('symbol.'))\n registerSymbol(key.split('.').pop(), component);\n else\n Object.assign(library, { [key]: component });\n}\n//# sourceMappingURL=library.js.map","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/**\n * 判断值是否为字符串\n * @return 是否为字符串\n */\nexport default function isString(value) {\n return typeof value === 'string';\n}\n//# sourceMappingURL=is-string.js.map","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar loopable = function loopable(i, length) {\n var props = {};\n var setProp = function setProp(name) {\n var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n props[name] = value;\n };\n\n i === 0 && setProp('first-child');\n i === length - 1 && setProp('last-child');\n (i === 0 || i % 2 === 0) && setProp('even');\n Math.abs(i % 2) === 1 && setProp('odd');\n setProp('nth-child', i);\n\n return props;\n};\n\nexports.default = loopable;","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\"];\nimport toArray from \"rc-util/es/Children/toArray\";\nimport omit from \"rc-util/es/omit\";\nimport warning from \"rc-util/es/warning\";\nimport getEntity from \"./keyUtil\";\nexport function getPosition(level, index) {\n return \"\".concat(level, \"-\").concat(index);\n}\nexport function isTreeNode(node) {\n return node && node.type && node.type.isTreeNode;\n}\nexport function getKey(key, pos) {\n if (key !== null && key !== undefined) {\n return key;\n }\n return pos;\n}\nexport function fillFieldNames(fieldNames) {\n var _ref = fieldNames || {},\n title = _ref.title,\n _title = _ref._title,\n key = _ref.key,\n children = _ref.children;\n var mergedTitle = title || 'title';\n return {\n title: mergedTitle,\n _title: _title || [mergedTitle],\n key: key || 'key',\n children: children || 'children'\n };\n}\n\n/**\n * Warning if TreeNode do not provides key\n */\nexport function warningWithoutKey(treeData, fieldNames) {\n var keys = new Map();\n function dig(list) {\n var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n (list || []).forEach(function (treeNode) {\n var key = treeNode[fieldNames.key];\n var children = treeNode[fieldNames.children];\n warning(key !== null && key !== undefined, \"Tree node must have a certain key: [\".concat(path).concat(key, \"]\"));\n var recordKey = String(key);\n warning(!keys.has(recordKey) || key === null || key === undefined, \"Same 'key' exist in the Tree: \".concat(recordKey));\n keys.set(recordKey, true);\n dig(children, \"\".concat(path).concat(recordKey, \" > \"));\n });\n }\n dig(treeData);\n}\n\n/**\n * Convert `children` of Tree into `treeData` structure.\n */\nexport function convertTreeToData(rootNodes) {\n function dig(node) {\n var treeNodes = toArray(node);\n return treeNodes.map(function (treeNode) {\n // Filter invalidate node\n if (!isTreeNode(treeNode)) {\n warning(!treeNode, 'Tree/TreeNode can only accept TreeNode as children.');\n return null;\n }\n var key = treeNode.key;\n var _treeNode$props = treeNode.props,\n children = _treeNode$props.children,\n rest = _objectWithoutProperties(_treeNode$props, _excluded);\n var dataNode = _objectSpread({\n key: key\n }, rest);\n var parsedChildren = dig(children);\n if (parsedChildren.length) {\n dataNode.children = parsedChildren;\n }\n return dataNode;\n }).filter(function (dataNode) {\n return dataNode;\n });\n }\n return dig(rootNodes);\n}\n\n/**\n * Flat nest tree data into flatten list. This is used for virtual list render.\n * @param treeNodeList Origin data node list\n * @param expandedKeys\n * need expanded keys, provides `true` means all expanded (used in `rc-tree-select`).\n */\nexport function flattenTreeData(treeNodeList, expandedKeys, fieldNames) {\n var _fillFieldNames = fillFieldNames(fieldNames),\n fieldTitles = _fillFieldNames._title,\n fieldKey = _fillFieldNames.key,\n fieldChildren = _fillFieldNames.children;\n var expandedKeySet = new Set(expandedKeys === true ? [] : expandedKeys);\n var flattenList = [];\n function dig(list) {\n var parent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n return list.map(function (treeNode, index) {\n var pos = getPosition(parent ? parent.pos : '0', index);\n var mergedKey = getKey(treeNode[fieldKey], pos);\n\n // Pick matched title in field title list\n var mergedTitle;\n for (var i = 0; i < fieldTitles.length; i += 1) {\n var fieldTitle = fieldTitles[i];\n if (treeNode[fieldTitle] !== undefined) {\n mergedTitle = treeNode[fieldTitle];\n break;\n }\n }\n\n // Add FlattenDataNode into list\n // We use `Object.assign` here to save perf since babel's `objectSpread` has perf issue\n var flattenNode = Object.assign(omit(treeNode, [].concat(_toConsumableArray(fieldTitles), [fieldKey, fieldChildren])), {\n title: mergedTitle,\n key: mergedKey,\n parent: parent,\n pos: pos,\n children: null,\n data: treeNode,\n isStart: [].concat(_toConsumableArray(parent ? parent.isStart : []), [index === 0]),\n isEnd: [].concat(_toConsumableArray(parent ? parent.isEnd : []), [index === list.length - 1])\n });\n flattenList.push(flattenNode);\n\n // Loop treeNode children\n if (expandedKeys === true || expandedKeySet.has(mergedKey)) {\n flattenNode.children = dig(treeNode[fieldChildren] || [], flattenNode);\n } else {\n flattenNode.children = [];\n }\n return flattenNode;\n });\n }\n dig(treeNodeList);\n return flattenList;\n}\n/**\n * Traverse all the data by `treeData`.\n * Please not use it out of the `rc-tree` since we may refactor this code.\n */\nexport function traverseDataNodes(dataNodes, callback,\n// To avoid too many params, let use config instead of origin param\nconfig) {\n var mergedConfig = {};\n if (_typeof(config) === 'object') {\n mergedConfig = config;\n } else {\n mergedConfig = {\n externalGetKey: config\n };\n }\n mergedConfig = mergedConfig || {};\n\n // Init config\n var _mergedConfig = mergedConfig,\n childrenPropName = _mergedConfig.childrenPropName,\n externalGetKey = _mergedConfig.externalGetKey,\n fieldNames = _mergedConfig.fieldNames;\n var _fillFieldNames2 = fillFieldNames(fieldNames),\n fieldKey = _fillFieldNames2.key,\n fieldChildren = _fillFieldNames2.children;\n var mergeChildrenPropName = childrenPropName || fieldChildren;\n\n // Get keys\n var syntheticGetKey;\n if (externalGetKey) {\n if (typeof externalGetKey === 'string') {\n syntheticGetKey = function syntheticGetKey(node) {\n return node[externalGetKey];\n };\n } else if (typeof externalGetKey === 'function') {\n syntheticGetKey = function syntheticGetKey(node) {\n return externalGetKey(node);\n };\n }\n } else {\n syntheticGetKey = function syntheticGetKey(node, pos) {\n return getKey(node[fieldKey], pos);\n };\n }\n\n // Process\n function processNode(node, index, parent, pathNodes) {\n var children = node ? node[mergeChildrenPropName] : dataNodes;\n var pos = node ? getPosition(parent.pos, index) : '0';\n var connectNodes = node ? [].concat(_toConsumableArray(pathNodes), [node]) : [];\n\n // Process node if is not root\n if (node) {\n var key = syntheticGetKey(node, pos);\n var _data = {\n node: node,\n index: index,\n pos: pos,\n key: key,\n parentPos: parent.node ? parent.pos : null,\n level: parent.level + 1,\n nodes: connectNodes\n };\n callback(_data);\n }\n\n // Process children node\n if (children) {\n children.forEach(function (subNode, subIndex) {\n processNode(subNode, subIndex, {\n node: node,\n pos: pos,\n level: parent ? parent.level + 1 : -1\n }, connectNodes);\n });\n }\n }\n processNode(null);\n}\n/**\n * Convert `treeData` into entity records.\n */\nexport function convertDataToEntities(dataNodes) {\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n initWrapper = _ref2.initWrapper,\n processEntity = _ref2.processEntity,\n onProcessFinished = _ref2.onProcessFinished,\n externalGetKey = _ref2.externalGetKey,\n childrenPropName = _ref2.childrenPropName,\n fieldNames = _ref2.fieldNames;\n var /** @deprecated Use `config.externalGetKey` instead */\n legacyExternalGetKey = arguments.length > 2 ? arguments[2] : undefined;\n // Init config\n var mergedExternalGetKey = externalGetKey || legacyExternalGetKey;\n var posEntities = {};\n var keyEntities = {};\n var wrapper = {\n posEntities: posEntities,\n keyEntities: keyEntities\n };\n if (initWrapper) {\n wrapper = initWrapper(wrapper) || wrapper;\n }\n traverseDataNodes(dataNodes, function (item) {\n var node = item.node,\n index = item.index,\n pos = item.pos,\n key = item.key,\n parentPos = item.parentPos,\n level = item.level,\n nodes = item.nodes;\n var entity = {\n node: node,\n nodes: nodes,\n index: index,\n key: key,\n pos: pos,\n level: level\n };\n var mergedKey = getKey(key, pos);\n posEntities[pos] = entity;\n keyEntities[mergedKey] = entity;\n\n // Fill children\n entity.parent = posEntities[parentPos];\n if (entity.parent) {\n entity.parent.children = entity.parent.children || [];\n entity.parent.children.push(entity);\n }\n if (processEntity) {\n processEntity(entity, wrapper);\n }\n }, {\n externalGetKey: mergedExternalGetKey,\n childrenPropName: childrenPropName,\n fieldNames: fieldNames\n });\n if (onProcessFinished) {\n onProcessFinished(wrapper);\n }\n return wrapper;\n}\n/**\n * Get TreeNode props with Tree props.\n */\nexport function getTreeNodeProps(key, _ref3) {\n var expandedKeys = _ref3.expandedKeys,\n selectedKeys = _ref3.selectedKeys,\n loadedKeys = _ref3.loadedKeys,\n loadingKeys = _ref3.loadingKeys,\n checkedKeys = _ref3.checkedKeys,\n halfCheckedKeys = _ref3.halfCheckedKeys,\n dragOverNodeKey = _ref3.dragOverNodeKey,\n dropPosition = _ref3.dropPosition,\n keyEntities = _ref3.keyEntities;\n var entity = getEntity(keyEntities, key);\n var treeNodeProps = {\n eventKey: key,\n expanded: expandedKeys.indexOf(key) !== -1,\n selected: selectedKeys.indexOf(key) !== -1,\n loaded: loadedKeys.indexOf(key) !== -1,\n loading: loadingKeys.indexOf(key) !== -1,\n checked: checkedKeys.indexOf(key) !== -1,\n halfChecked: halfCheckedKeys.indexOf(key) !== -1,\n pos: String(entity ? entity.pos : ''),\n // [Legacy] Drag props\n // Since the interaction of drag is changed, the semantic of the props are\n // not accuracy, I think it should be finally removed\n dragOver: dragOverNodeKey === key && dropPosition === 0,\n dragOverGapTop: dragOverNodeKey === key && dropPosition === -1,\n dragOverGapBottom: dragOverNodeKey === key && dropPosition === 1\n };\n return treeNodeProps;\n}\nexport function convertNodePropsToEventData(props) {\n var data = props.data,\n expanded = props.expanded,\n selected = props.selected,\n checked = props.checked,\n loaded = props.loaded,\n loading = props.loading,\n halfChecked = props.halfChecked,\n dragOver = props.dragOver,\n dragOverGapTop = props.dragOverGapTop,\n dragOverGapBottom = props.dragOverGapBottom,\n pos = props.pos,\n active = props.active,\n eventKey = props.eventKey;\n var eventData = _objectSpread(_objectSpread({}, data), {}, {\n expanded: expanded,\n selected: selected,\n checked: checked,\n loaded: loaded,\n loading: loading,\n halfChecked: halfChecked,\n dragOver: dragOver,\n dragOverGapTop: dragOverGapTop,\n dragOverGapBottom: dragOverGapBottom,\n pos: pos,\n active: active,\n key: eventKey\n });\n if (!('props' in eventData)) {\n Object.defineProperty(eventData, 'props', {\n get: function get() {\n warning(false, 'Second param return from event is node data instead of TreeNode instance. Please read value directly instead of reading from `props`.');\n return props;\n }\n });\n }\n return eventData;\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport { getDefaultDomain } from '@antv/l7-utils';\nimport BaseModel from \"../../core/BaseModel\";\nimport { RasterImageTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/raster/raster_2d_frag.glsl' */\nconst rasterFrag = \"layout(std140) uniform commonUniforms {\\n vec2 u_domain;\\n float u_opacity;\\n float u_noDataValue;\\n float u_clampLow;\\n float u_clampHigh;\\n};\\n\\nuniform sampler2D u_rasterTexture;\\nuniform sampler2D u_colorTexture;\\n\\nin vec2 v_texCoord;\\n\\nbool isnan_emu(float x) { return (x > 0.0 || x < 0.0) ? x != x : x != 0.0; }\\n\\nout vec4 outputColor;\\n\\nvoid main() {\\n // Can use any component here since u_rasterTexture is under luminance format.\\n float value = texture(SAMPLER_2D(u_rasterTexture), vec2(v_texCoord.x, v_texCoord.y)).r;\\n if (value == u_noDataValue || isnan_emu(value)) {\\n discard;\\n } else if ((u_clampLow < 0.5 && value < u_domain[0]) || (u_clampHigh < 0.5 && value > u_domain[1])) {\\n discard;\\n } else {\\n float normalisedValue =(value - u_domain[0]) / (u_domain[1] - u_domain[0]);\\n vec4 color = texture(SAMPLER_2D(u_colorTexture), vec2(normalisedValue, 0));\\n \\n outputColor = color;\\n outputColor.a = outputColor.a * u_opacity ;\\n if (outputColor.a < 0.01)\\n discard;\\n }\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/raster/raster_2d_vert.glsl' */\nconst rasterVert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_Uv;\\n\\nlayout(std140) uniform commonUniforms {\\n vec2 u_domain;\\n float u_opacity;\\n float u_noDataValue;\\n float u_clampLow;\\n float u_clampHigh;\\n};\\n\\nout vec2 v_texCoord;\\n\\n#pragma include \\\"projection\\\"\\n\\nvoid main() {\\n v_texCoord = a_Uv;\\n vec4 project_pos = project_position(vec4(a_Position, 1.0), a_Position64Low);\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy, 0.0, 1.0));\\n}\\n\";\nexport default class RasterModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"texture\", void 0);\n _defineProperty(this, \"colorTexture\", void 0);\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n UV: 9\n });\n }\n getUninforms() {\n const commoninfo = this.getCommonUniformsInfo();\n const attributeInfo = this.getUniformsBufferInfo(this.getStyleAttribute());\n this.updateStyleUnifoms();\n return _objectSpread(_objectSpread({}, commoninfo.uniformsOption), attributeInfo.uniformsOption);\n }\n getCommonUniformsInfo() {\n const {\n opacity = 1,\n clampLow = true,\n clampHigh = true,\n noDataValue = -9999999,\n domain,\n rampColors\n } = this.layer.getLayerConfig();\n const newdomain = domain || getDefaultDomain(rampColors);\n this.colorTexture = this.layer.textureService.getColorTexture(rampColors, newdomain);\n const commonOptions = {\n u_domain: newdomain,\n u_opacity: opacity || 1,\n u_noDataValue: noDataValue,\n u_clampLow: clampLow ? 1 : 0,\n u_clampHigh: (typeof clampHigh !== 'undefined' ? clampHigh : clampLow) ? 1 : 0,\n u_rasterTexture: this.texture,\n u_colorTexture: this.colorTexture\n };\n this.textures = [this.texture, this.colorTexture];\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n getRasterData(parserDataItem) {\n return _asyncToGenerator(function* () {\n if (Array.isArray(parserDataItem.data)) {\n // 直接传入波段数据\n return {\n data: parserDataItem.data,\n width: parserDataItem.width,\n height: parserDataItem.height\n };\n } else {\n // 多波段形式、需要进行处理\n const {\n rasterData,\n width,\n height\n } = yield parserDataItem.data;\n return {\n data: Array.from(rasterData),\n width,\n height\n };\n }\n })();\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.buildModels();\n })();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.initUniformsBuffer();\n const source = _this2.layer.getSource();\n const {\n createTexture2D,\n queryVerdorInfo\n } = _this2.rendererService;\n const parserDataItem = source.data.dataArray[0];\n const {\n data,\n width,\n height\n } = yield _this2.getRasterData(parserDataItem);\n _this2.texture = createTexture2D({\n // @ts-ignore\n data: new Float32Array(data),\n width,\n height,\n /**\n * WebGL1 allow the combination of gl.LUMINANCE & gl.FLOAT with OES_texture_float\n * TODO: https://github.com/antvis/g-device-api/issues/188\n */\n format: queryVerdorInfo() === 'WebGL1' ? gl.LUMINANCE : gl.RED,\n type: gl.FLOAT,\n alignment: 1\n });\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'rasterImageData',\n vertexShader: rasterVert,\n fragmentShader: rasterFrag,\n defines: _this2.getDefines(),\n triangulation: RasterImageTriangulation,\n primitive: gl.TRIANGLES,\n depth: {\n enable: false\n },\n pickingEnabled: false\n });\n return [model];\n })();\n }\n clearModels() {\n var _this$texture, _this$colorTexture;\n (_this$texture = this.texture) === null || _this$texture === void 0 || _this$texture.destroy();\n (_this$colorTexture = this.colorTexture) === null || _this$colorTexture === void 0 || _this$colorTexture.destroy();\n }\n registerBuiltinAttributes() {\n // 注册 Position 属性 64 位地位部分,经纬度数据开启双精度,避免大于 22 层级以上出现数据偏移\n this.registerPosition64LowAttribute();\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n shaderLocation: this.attributeLocation.UV,\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: (feature, featureIdx, vertex) => {\n return [vertex[3], vertex[4]];\n }\n }\n });\n }\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nconst _excluded = [\"data\"],\n _excluded2 = [\"rasterData\"];\nimport { AttributeType, gl } from '@antv/l7-core';\nimport BaseModel from \"../../core/BaseModel\";\nimport { RasterImageTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/rgb/raster_rgb_frag.glsl' */\nconst rasterFrag = \"uniform sampler2D u_texture;\\nlayout(std140) uniform commonUniforms {\\n vec2 u_rminmax;\\n vec2 u_gminmax;\\n vec2 u_bminmax;\\n float u_opacity;\\n float u_noDataValue;\\n};\\n\\nin vec2 v_texCoord;\\n\\nout vec4 outputColor;\\n\\nvoid main() {\\n\\n vec3 rgb = texture(SAMPLER_2D(u_texture),vec2(v_texCoord.x,v_texCoord.y)).rgb;\\n\\n if(rgb == vec3(u_noDataValue)) {\\n outputColor = vec4(0.0, 0, 0, 0.0);\\n } else {\\n outputColor = vec4(rgb.r / (u_rminmax.y -u_rminmax.x), rgb.g /(u_gminmax.y -u_gminmax.x), rgb.b/ (u_bminmax.y - u_bminmax.x), u_opacity);\\n }\\n\\n if(outputColor.a < 0.01)\\n discard;\\n \\n}\";\n/* babel-plugin-inline-import '../shaders/rgb/raster_rgb_vert.glsl' */\nconst rasterVert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_POSITION_64LOW) in vec2 a_Position64Low;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_Uv;\\n\\nlayout(std140) uniform commonUniforms {\\n vec2 u_rminmax;\\n vec2 u_gminmax;\\n vec2 u_bminmax;\\n float u_opacity;\\n float u_noDataValue;\\n};\\n\\nout vec2 v_texCoord;\\n\\n#pragma include \\\"projection\\\"\\n\\nvoid main() {\\n v_texCoord = a_Uv;\\n vec4 project_pos = project_position(vec4(a_Position, 1.0), a_Position64Low);\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy, 0.0, 1.0));\\n}\\n\";\nexport default class RasterModel extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"texture\", void 0);\n _defineProperty(this, \"dataOption\", {});\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n UV: 9\n });\n }\n getUninforms() {\n const commoninfo = this.getCommonUniformsInfo();\n const attributeInfo = this.getUniformsBufferInfo(this.getStyleAttribute());\n this.updateStyleUnifoms();\n return _objectSpread(_objectSpread({}, commoninfo.uniformsOption), attributeInfo.uniformsOption);\n }\n getCommonUniformsInfo() {\n const {\n opacity = 1,\n noDataValue = 0\n } = this.layer.getLayerConfig();\n const {\n rMinMax = [0, 255],\n gMinMax = [0, 255],\n bMinMax = [0, 255]\n } = this.dataOption;\n const commonOptions = {\n u_rminmax: rMinMax,\n u_gminmax: gMinMax,\n u_bminmax: bMinMax,\n u_opacity: opacity || 1,\n u_noDataValue: noDataValue,\n u_texture: this.texture\n };\n this.textures = [this.texture];\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n getRasterData(parserDataItem) {\n var _this = this;\n return _asyncToGenerator(function* () {\n if (Array.isArray(parserDataItem.data)) {\n const {\n data\n } = parserDataItem,\n rescfg = _objectWithoutProperties(parserDataItem, _excluded);\n _this.dataOption = rescfg;\n return _objectSpread({\n data\n }, rescfg);\n }\n const _yield$parserDataItem = yield parserDataItem.data,\n {\n rasterData\n } = _yield$parserDataItem,\n rest = _objectWithoutProperties(_yield$parserDataItem, _excluded2);\n _this.dataOption = rest;\n if (Array.isArray(rasterData)) {\n // 直接传入波段数据\n return _objectSpread({\n data: rasterData\n }, rest);\n } else {\n // 多波段形式、需要进行处理\n // 支持彩色栅格(多通道)\n return _objectSpread({\n data: Array.from(rasterData)\n }, rest);\n }\n })();\n }\n initModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.initUniformsBuffer();\n const source = _this2.layer.getSource();\n const {\n createTexture2D\n } = _this2.rendererService;\n const parserDataItem = source.data.dataArray[0];\n const {\n data,\n width,\n height\n } = yield _this2.getRasterData(parserDataItem);\n _this2.texture = createTexture2D({\n // @ts-ignore\n data: new Float32Array(data),\n width,\n height,\n format: gl.RGB,\n type: gl.FLOAT\n });\n const model = yield _this2.layer.buildLayerModel({\n moduleName: 'rasterImageDataRGBA',\n vertexShader: rasterVert,\n fragmentShader: rasterFrag,\n defines: _this2.getDefines(),\n triangulation: RasterImageTriangulation,\n primitive: gl.TRIANGLES,\n depth: {\n enable: false\n },\n pickingEnabled: false\n });\n return [model];\n })();\n }\n buildModels() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n return _this3.initModels();\n })();\n }\n clearModels() {\n var _this$texture;\n (_this$texture = this.texture) === null || _this$texture === void 0 || _this$texture.destroy();\n }\n registerBuiltinAttributes() {\n // 注册 Position 属性 64 位地位部分,经纬度数据开启双精度,避免大于 22 层级以上出现数据偏移\n this.registerPosition64LowAttribute();\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n shaderLocation: this.attributeLocation.UV,\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: (feature, featureIdx, vertex) => {\n return [vertex[3], vertex[4]];\n }\n }\n });\n }\n}","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { AttributeType, gl } from '@antv/l7-core';\nimport { getDefaultDomain } from '@antv/l7-utils';\nimport BaseModel from \"../../core/BaseModel\";\nimport { RasterImageTriangulation } from \"../../core/triangulation\";\n/* babel-plugin-inline-import '../shaders/terrain/terrain_rgb_frag.glsl' */\nconst Raster_terrainFrag = \"uniform sampler2D u_texture;\\nuniform sampler2D u_colorTexture;\\n\\nlayout(std140) uniform commonUniforms {\\n vec4 u_unpack;\\n vec2 u_domain;\\n float u_opacity;\\n float u_noDataValue;\\n float u_clampLow;\\n float u_clampHigh;\\n};\\n\\nin vec2 v_texCoord;\\nout vec4 outputColor;\\n\\n\\nfloat getElevation(vec2 coord, float bias) {\\n // Convert encoded elevation value to meters\\n vec4 data = texture(SAMPLER_2D(u_texture), coord,bias) * 255.0;\\n data.a = -1.0;\\n return dot(data, u_unpack);\\n}\\n\\nvec4 getColor(float value) {\\n float normalisedValue =(value- u_domain[0]) / (u_domain[1] - u_domain[0]);\\n vec2 coord = vec2(normalisedValue, 0);\\n return texture(SAMPLER_2D(u_colorTexture), coord);\\n}\\n\\nvoid main() {\\n float value = getElevation(v_texCoord,0.0);\\n if (value == u_noDataValue) {\\n outputColor = vec4(0.0, 0, 0, 0.0);\\n } else if ((u_clampLow < 0.5 && value < u_domain[0]) || (u_clampHigh < 0.5 && value > u_domain[1])) {\\n outputColor = vec4(0.0, 0, 0, 0.0);\\n } else {\\n \\n outputColor = getColor(value);\\n outputColor.a = outputColor.a * u_opacity ;\\n if(outputColor.a < 0.01)\\n discard;\\n }\\n}\\n\";\n/* babel-plugin-inline-import '../shaders/terrain/terrain_rgb_vert.glsl' */\nconst Raster_terrainVert = \"layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;\\nlayout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_Uv;\\n\\nlayout(std140) uniform commonUniforms {\\n vec4 u_unpack;\\n vec2 u_domain;\\n float u_opacity;\\n float u_noDataValue;\\n float u_clampLow;\\n float u_clampHigh;\\n};\\nout vec2 v_texCoord;\\n#pragma include \\\"projection\\\"\\n\\nvoid main() {\\n v_texCoord = a_Uv;\\n vec4 project_pos = project_position(vec4(a_Position, 1.0));\\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy, 0.0, 1.0));\\n}\\n\";\nexport default class RasterTerrainRGB extends BaseModel {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"texture\", void 0);\n }\n get attributeLocation() {\n return Object.assign(super.attributeLocation, {\n MAX: super.attributeLocation.MAX,\n UV: 9\n });\n }\n getCommonUniformsInfo() {\n const {\n opacity,\n clampLow = true,\n clampHigh = true,\n noDataValue = -9999999,\n domain,\n rampColors,\n colorTexture,\n rScaler = 6553.6,\n gScaler = 25.6,\n bScaler = 0.1,\n offset = 10000\n } = this.layer.getLayerConfig();\n const newdomain = domain || getDefaultDomain(rampColors);\n let texture = colorTexture;\n if (!colorTexture) {\n texture = this.layer.textureService.getColorTexture(rampColors, newdomain);\n } else {\n this.layer.textureService.setColorTexture(colorTexture, rampColors, newdomain);\n }\n const commonOptions = {\n u_unpack: [rScaler, gScaler, bScaler, offset],\n u_domain: newdomain,\n u_opacity: opacity || 1,\n u_noDataValue: noDataValue,\n u_clampLow: clampLow,\n u_clampHigh: typeof clampHigh !== 'undefined' ? clampHigh : clampLow,\n u_texture: this.texture,\n u_colorTexture: texture\n };\n this.textures = [this.texture, texture];\n const commonBufferInfo = this.getUniformsBufferInfo(commonOptions);\n return commonBufferInfo;\n }\n initModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.initUniformsBuffer();\n const source = _this.layer.getSource();\n const {\n createTexture2D\n } = _this.rendererService;\n const imageData = yield source.data.images;\n _this.texture = createTexture2D({\n data: imageData[0],\n width: imageData[0].width,\n height: imageData[0].height,\n min: gl.LINEAR,\n mag: gl.LINEAR\n });\n const model = yield _this.layer.buildLayerModel({\n moduleName: 'RasterTileDataImage',\n vertexShader: Raster_terrainVert,\n fragmentShader: Raster_terrainFrag,\n defines: _this.getDefines(),\n triangulation: RasterImageTriangulation,\n primitive: gl.TRIANGLES,\n depth: {\n enable: false\n }\n });\n return [model];\n })();\n }\n clearModels() {\n var _this$texture;\n (_this$texture = this.texture) === null || _this$texture === void 0 || _this$texture.destroy();\n }\n buildModels() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n return _this2.initModels();\n })();\n }\n registerBuiltinAttributes() {\n // 注册 Position 属性 64 位地位部分,经纬度数据开启双精度,避免大于 22 层级以上出现数据偏移\n this.registerPosition64LowAttribute();\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n shaderLocation: this.attributeLocation.UV,\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT\n },\n size: 2,\n update: (feature, featureIdx, vertex) => {\n return [vertex[3], vertex[4]];\n }\n }\n });\n }\n}","import RasterModel from \"./raster\";\nimport RasterRgbModel from \"./rasterRgb\";\nimport RasterTerrainRGB from \"./rasterTerrainRgb\";\nconst RasterModels = {\n raster: RasterModel,\n rasterRgb: RasterRgbModel,\n raster3d: RasterModel,\n rasterTerrainRgb: RasterTerrainRGB\n};\nexport default RasterModels;","import _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport BaseLayer from \"../core/BaseLayer\";\nimport { rampColor2legend } from \"../utils/rampcolor_legend\";\nimport RasterModels from \"./models/index\";\nexport default class RasterLayer extends BaseLayer {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"type\", 'RasterLayer');\n }\n buildModels() {\n var _this = this;\n return _asyncToGenerator(function* () {\n const modelType = _this.getModelType();\n _this.layerModel = new RasterModels[modelType](_this);\n yield _this.initLayerModels();\n })();\n }\n getDefaultConfig() {\n const type = this.getModelType();\n const defaultConfig = {\n raster: {},\n rasterRgb: {},\n raster3d: {},\n rasterTerrainRgb: {}\n };\n return defaultConfig[type];\n }\n getModelType() {\n // 根据 source 的类型判断 model type\n const parserType = this.layerSource.getParserType();\n switch (parserType) {\n case 'raster':\n case 'ndi':\n return 'raster';\n case 'rasterRgb':\n return 'rasterRgb';\n case 'rgb':\n return 'rasterRgb';\n case 'image':\n return 'rasterTerrainRgb';\n default:\n return 'raster';\n }\n }\n getLegend(name) {\n if (name !== 'color') return {\n type: undefined,\n field: undefined,\n items: []\n };\n const rampColors = this.getLayerConfig().rampColors;\n return rampColor2legend(rampColors, name);\n }\n}","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","import { isNull, isUndefined } from '@antv/util';\nexport function isValid(x) {\n return !isUndefined(x) && !isNull(x) && !Number.isNaN(x);\n}\n//# sourceMappingURL=is-valid.js.map","/**\n * 判断值是否为 null\n * @return 是否为 null\n */\nexport default function isNull(value) {\n return value === null;\n}\n//# sourceMappingURL=is-null.js.map","export let ShapeType3D = /*#__PURE__*/function (ShapeType3D) {\n ShapeType3D[\"CYLINDER\"] = \"cylinder\";\n ShapeType3D[\"SQUARECOLUMN\"] = \"squareColumn\";\n ShapeType3D[\"TRIANGLECOLUMN\"] = \"triangleColumn\";\n ShapeType3D[\"HEXAGONCOLUMN\"] = \"hexagonColumn\";\n ShapeType3D[\"PENTAGONCOLUMN\"] = \"pentagonColumn\";\n return ShapeType3D;\n}({});\nexport let ShapeType2D = /*#__PURE__*/function (ShapeType2D) {\n ShapeType2D[\"CIRCLE\"] = \"circle\";\n ShapeType2D[\"SQUARE\"] = \"square\";\n ShapeType2D[\"TRIANGLE\"] = \"triangle\";\n ShapeType2D[\"HEXAGON\"] = \"hexagon\";\n ShapeType2D[\"PENTAGON\"] = \"pentagon\";\n return ShapeType2D;\n}({});\n\n/**\n * 生成规则多边形顶点个数\n * @param pointCount 顶点个数 3 => 三角形\n * @param start 顶点起始角度 调整图形的方向\n */\nexport function polygonPath(pointCount, start = 0) {\n const step = Math.PI * 2 / pointCount;\n const line = [];\n for (let i = 0; i < pointCount; i++) {\n line.push(step * i + start * Math.PI / 12);\n }\n const path = line.map(t => {\n const x = Math.sin(t + Math.PI / 4);\n const y = Math.cos(t + Math.PI / 4);\n return [x, y, 0];\n });\n // path.push(path[0]);\n return path;\n}\nexport function circle() {\n return polygonPath(30);\n}\nexport function square() {\n return polygonPath(4);\n}\nexport function triangle() {\n return polygonPath(3);\n}\nexport function hexagon() {\n return polygonPath(6, 1);\n}\nexport function pentagon() {\n return polygonPath(5);\n}\nexport const geometryShape = {\n [ShapeType2D.CIRCLE]: circle,\n [ShapeType2D.HEXAGON]: hexagon,\n [ShapeType2D.TRIANGLE]: triangle,\n [ShapeType2D.SQUARE]: square,\n [ShapeType2D.PENTAGON]: pentagon,\n [ShapeType3D.CYLINDER]: circle,\n [ShapeType3D.HEXAGONCOLUMN]: hexagon,\n [ShapeType3D.TRIANGLECOLUMN]: triangle,\n [ShapeType3D.SQUARECOLUMN]: square,\n [ShapeType3D.PENTAGONCOLUMN]: pentagon\n};","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","export let PassType = /*#__PURE__*/function (PassType) {\n PassType[\"Normal\"] = \"normal\";\n PassType[\"PostProcessing\"] = \"post-processing\";\n return PassType;\n}({});\n\n/**\n * Pass 分两类:\n * 1. 渲染相关 eg. ClearPass、RenderPass、PickingPass、ShadowPass\n * 2. PostProcessing eg. CopyPass、BlurPass\n * 另外考虑到 Pass 之间严格的执行顺序,render 方法必须是异步的\n */\n\n/**\n * PostProcessing,自动切换 renderTarget\n * 例如最后一个 PostProcessingPass 自动切换 renderTarget 为屏幕\n */","// src/math.ts\nfunction isNumber(n) {\n return typeof n === \"number\";\n}\nfunction fp64LowPart(x) {\n return x - Math.fround(x);\n}\nexport {\n fp64LowPart,\n isNumber\n};\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","/*!\n * @antv/g-lite\n * @description A core module for rendering engine implements DOM API.\n * @version 2.2.19\n * @date 5/9/2025, 8:18:56 AM\n * @author AntVis\n * @docs https://g.antv.antgroup.com/\n */\nimport _objectSpread from '@babel/runtime/helpers/objectSpread2';\nimport _classCallCheck from '@babel/runtime/helpers/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/createClass';\nimport _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';\nimport _callSuper from '@babel/runtime/helpers/callSuper';\nimport _inherits from '@babel/runtime/helpers/inherits';\nimport _slicedToArray from '@babel/runtime/helpers/slicedToArray';\nimport EventEmitter from 'eventemitter3';\nimport { vec3, vec4, mat4, mat3, quat as quat$1, vec2 } from 'gl-matrix';\nimport '@babel/runtime/helpers/readOnlyError';\nimport { isNumber, distanceSquareRoot, isString, isNil, clamp, getTotalLength, min, max, isNumberEqual, mod, normalizePath, path2Curve, equalizeSegments, getDrawDirection, reverseCurve, clonePath, getRotatedCurve, isUndefined, isArray, isBoolean, isFunction, isObject, getPointAtLength } from '@antv/util';\nimport _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport _superPropGet from '@babel/runtime/helpers/superPropGet';\nimport { polylineLength, arcBox, cubicBox, quadBox, linePointAt, lineLength } from '@antv/g-math';\nimport _regeneratorRuntime from '@babel/runtime/helpers/regeneratorRuntime';\nimport _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';\nimport _createForOfIteratorHelper from '@babel/runtime/helpers/createForOfIteratorHelper';\nimport _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nvar rbush = {exports: {}};\n\n(function (module, exports) {\n(function (global, factory) {\nmodule.exports = factory() ;\n}(commonjsGlobal, function () {\nfunction quickselect(arr, k, left, right, compare) {\n quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);\n}\n\nfunction quickselectStep(arr, k, left, right, compare) {\n\n while (right > left) {\n if (right - left > 600) {\n var n = right - left + 1;\n var m = k - left + 1;\n var z = Math.log(n);\n var s = 0.5 * Math.exp(2 * z / 3);\n var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselectStep(arr, k, newLeft, newRight, compare);\n }\n\n var t = arr[k];\n var i = left;\n var j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) { swap(arr, left, right); }\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) { i++; }\n while (compare(arr[j], t) > 0) { j--; }\n }\n\n if (compare(arr[left], t) === 0) { swap(arr, left, j); }\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) { left = j + 1; }\n if (k <= j) { right = j - 1; }\n }\n}\n\nfunction swap(arr, i, j) {\n var tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nvar RBush = function RBush(maxEntries) {\n if ( maxEntries === void 0 ) maxEntries = 9;\n\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n};\n\nRBush.prototype.all = function all () {\n return this._all(this.data, []);\n};\n\nRBush.prototype.search = function search (bbox) {\n var node = this.data;\n var result = [];\n\n if (!intersects(bbox, node)) { return result; }\n\n var toBBox = this.toBBox;\n var nodesToSearch = [];\n\n while (node) {\n for (var i = 0; i < node.children.length; i++) {\n var child = node.children[i];\n var childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) { result.push(child); }\n else if (contains(bbox, childBBox)) { this._all(child, result); }\n else { nodesToSearch.push(child); }\n }\n }\n node = nodesToSearch.pop();\n }\n\n return result;\n};\n\nRBush.prototype.collides = function collides (bbox) {\n var node = this.data;\n\n if (!intersects(bbox, node)) { return false; }\n\n var nodesToSearch = [];\n while (node) {\n for (var i = 0; i < node.children.length; i++) {\n var child = node.children[i];\n var childBBox = node.leaf ? this.toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf || contains(bbox, childBBox)) { return true; }\n nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return false;\n};\n\nRBush.prototype.load = function load (data) {\n if (!(data && data.length)) { return this; }\n\n if (data.length < this._minEntries) {\n for (var i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n var node = this._build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this._splitRoot(this.data, node);\n\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n var tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this._insert(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n};\n\nRBush.prototype.insert = function insert (item) {\n if (item) { this._insert(item, this.data.height - 1); }\n return this;\n};\n\nRBush.prototype.clear = function clear () {\n this.data = createNode([]);\n return this;\n};\n\nRBush.prototype.remove = function remove (item, equalsFn) {\n if (!item) { return this; }\n\n var node = this.data;\n var bbox = this.toBBox(item);\n var path = [];\n var indexes = [];\n var i, parent, goingUp;\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n var index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this._condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n\n } else { node = null; } // nothing found\n }\n\n return this;\n};\n\nRBush.prototype.toBBox = function toBBox (item) { return item; };\n\nRBush.prototype.compareMinX = function compareMinX (a, b) { return a.minX - b.minX; };\nRBush.prototype.compareMinY = function compareMinY (a, b) { return a.minY - b.minY; };\n\nRBush.prototype.toJSON = function toJSON () { return this.data; };\n\nRBush.prototype.fromJSON = function fromJSON (data) {\n this.data = data;\n return this;\n};\n\nRBush.prototype._all = function _all (node, result) {\n var nodesToSearch = [];\n while (node) {\n if (node.leaf) { result.push.apply(result, node.children); }\n else { nodesToSearch.push.apply(nodesToSearch, node.children); }\n\n node = nodesToSearch.pop();\n }\n return result;\n};\n\nRBush.prototype._build = function _build (items, left, right, height) {\n\n var N = right - left + 1;\n var M = this._maxEntries;\n var node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / Math.pow(M, height - 1));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n var N2 = Math.ceil(N / M);\n var N1 = N2 * Math.ceil(Math.sqrt(M));\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (var i = left; i <= right; i += N1) {\n\n var right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (var j = i; j <= right2; j += N2) {\n\n var right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this._build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n};\n\nRBush.prototype._chooseSubtree = function _chooseSubtree (bbox, node, level, path) {\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) { break; }\n\n var minArea = Infinity;\n var minEnlargement = Infinity;\n var targetNode = (void 0);\n\n for (var i = 0; i < node.children.length; i++) {\n var child = node.children[i];\n var area = bboxArea(child);\n var enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n};\n\nRBush.prototype._insert = function _insert (item, level, isNode) {\n var bbox = isNode ? item : this.toBBox(item);\n var insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n var node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this._split(insertPath, level);\n level--;\n } else { break; }\n }\n\n // adjust bboxes along the insertion path\n this._adjustParentBBoxes(bbox, insertPath, level);\n};\n\n// split overflowed node into two\nRBush.prototype._split = function _split (insertPath, level) {\n var node = insertPath[level];\n var M = node.children.length;\n var m = this._minEntries;\n\n this._chooseSplitAxis(node, m, M);\n\n var splitIndex = this._chooseSplitIndex(node, m, M);\n\n var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) { insertPath[level - 1].children.push(newNode); }\n else { this._splitRoot(node, newNode); }\n};\n\nRBush.prototype._splitRoot = function _splitRoot (node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n};\n\nRBush.prototype._chooseSplitIndex = function _chooseSplitIndex (node, m, M) {\n var index;\n var minOverlap = Infinity;\n var minArea = Infinity;\n\n for (var i = m; i <= M - m; i++) {\n var bbox1 = distBBox(node, 0, i, this.toBBox);\n var bbox2 = distBBox(node, i, M, this.toBBox);\n\n var overlap = intersectionArea(bbox1, bbox2);\n var area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index || M - m;\n};\n\n// sorts node children by the best axis for split\nRBush.prototype._chooseSplitAxis = function _chooseSplitAxis (node, m, M) {\n var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n var compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n var xMargin = this._allDistMargin(node, m, M, compareMinX);\n var yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) { node.children.sort(compareMinX); }\n};\n\n// total margin of all possible split distributions where each node is at least m full\nRBush.prototype._allDistMargin = function _allDistMargin (node, m, M, compare) {\n node.children.sort(compare);\n\n var toBBox = this.toBBox;\n var leftBBox = distBBox(node, 0, m, toBBox);\n var rightBBox = distBBox(node, M - m, M, toBBox);\n var margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n for (var i = m; i < M - m; i++) {\n var child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (var i$1 = M - m - 1; i$1 >= m; i$1--) {\n var child$1 = node.children[i$1];\n extend(rightBBox, node.leaf ? toBBox(child$1) : child$1);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n};\n\nRBush.prototype._adjustParentBBoxes = function _adjustParentBBoxes (bbox, path, level) {\n // adjust bboxes along the given tree path\n for (var i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n};\n\nRBush.prototype._condense = function _condense (path) {\n // go through the path, removing empty nodes and updating bboxes\n for (var i = path.length - 1, siblings = (void 0); i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n\n } else { this.clear(); }\n\n } else { calcBBox(path[i], this.toBBox); }\n }\n};\n\nfunction findItem(item, items, equalsFn) {\n if (!equalsFn) { return items.indexOf(item); }\n\n for (var i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) { return i; }\n }\n return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n if (!destNode) { destNode = createNode(null); }\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (var i = k; i < p; i++) {\n var child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n}\n\nfunction extend(a, b) {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n var minX = Math.max(a.minX, b.minX);\n var minY = Math.max(a.minY, b.minY);\n var maxX = Math.min(a.maxX, b.maxX);\n var maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n return a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n return b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n return {\n children: children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n var stack = [left, right];\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) { continue; }\n\n var mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n}\n\nreturn RBush;\n\n}));\n}(rbush));\n\nvar RBush = rbush.exports;\n\nvar Shape = /*#__PURE__*/function (Shape) {\n Shape[\"GROUP\"] = \"g\";\n Shape[\"FRAGMENT\"] = \"fragment\";\n Shape[\"CIRCLE\"] = \"circle\";\n Shape[\"ELLIPSE\"] = \"ellipse\";\n Shape[\"IMAGE\"] = \"image\";\n Shape[\"RECT\"] = \"rect\";\n Shape[\"LINE\"] = \"line\";\n Shape[\"POLYLINE\"] = \"polyline\";\n Shape[\"POLYGON\"] = \"polygon\";\n Shape[\"TEXT\"] = \"text\";\n Shape[\"PATH\"] = \"path\";\n Shape[\"HTML\"] = \"html\";\n Shape[\"MESH\"] = \"mesh\";\n return Shape;\n}({});\n\n// prettier-ignore\n\n// prettier-ignore\n\n// Cursor style\n// See: https://developer.mozilla.org/en-US/docs/Web/CSS/cursor\n\nvar ClipSpaceNearZ = /*#__PURE__*/function (ClipSpaceNearZ) {\n ClipSpaceNearZ[ClipSpaceNearZ[\"ZERO\"] = 0] = \"ZERO\";\n ClipSpaceNearZ[ClipSpaceNearZ[\"NEGATIVE_ONE\"] = 1] = \"NEGATIVE_ONE\";\n return ClipSpaceNearZ;\n}({});\n\n/**\n * eg. NodeCanvas, OffscreenCanvas, HTMLCanvasElement\n */\n\n/**\n * The format to use when defining custom easing functions\n */\n\n// @see https://github.com/zhanba/pailye/blob/master/packages/flex/src/types.ts\n\nvar AbstractRendererPlugin = /*#__PURE__*/function () {\n function AbstractRendererPlugin() {\n _classCallCheck(this, AbstractRendererPlugin);\n this.plugins = [];\n }\n return _createClass(AbstractRendererPlugin, [{\n key: \"addRenderingPlugin\",\n value: function addRenderingPlugin(plugin) {\n this.plugins.push(plugin);\n this.context.renderingPlugins.push(plugin);\n }\n }, {\n key: \"removeAllRenderingPlugins\",\n value: function removeAllRenderingPlugins() {\n var _this = this;\n this.plugins.forEach(function (plugin) {\n var index = _this.context.renderingPlugins.indexOf(plugin);\n if (index >= 0) {\n _this.context.renderingPlugins.splice(index, 1);\n }\n });\n }\n }]);\n}();\nvar AbstractRenderer = /*#__PURE__*/function () {\n function AbstractRenderer(config) {\n _classCallCheck(this, AbstractRenderer);\n this.clipSpaceNearZ = ClipSpaceNearZ.NEGATIVE_ONE;\n this.plugins = [];\n this.config = _objectSpread({\n /**\n * only dirty object will cause re-render\n */\n enableDirtyCheck: true,\n enableCulling: false,\n /**\n * enable auto rendering by default\n */\n enableAutoRendering: true,\n /**\n * enable dirty rectangle rendering by default\n */\n enableDirtyRectangleRendering: true,\n enableDirtyRectangleRenderingDebug: false,\n enableSizeAttenuation: true,\n enableRenderingOptimization: false\n }, config);\n }\n return _createClass(AbstractRenderer, [{\n key: \"registerPlugin\",\n value: function registerPlugin(plugin) {\n var index = this.plugins.findIndex(function (p) {\n return p === plugin;\n });\n if (index === -1) {\n this.plugins.push(plugin);\n }\n }\n }, {\n key: \"unregisterPlugin\",\n value: function unregisterPlugin(plugin) {\n var index = this.plugins.findIndex(function (p) {\n return p === plugin;\n });\n if (index > -1) {\n this.plugins.splice(index, 1);\n }\n }\n }, {\n key: \"getPlugins\",\n value: function getPlugins() {\n return this.plugins;\n }\n }, {\n key: \"getPlugin\",\n value: function getPlugin(name) {\n return this.plugins.find(function (plugin) {\n return plugin.name === name;\n });\n }\n }, {\n key: \"getConfig\",\n value: function getConfig() {\n return this.config;\n }\n }, {\n key: \"setConfig\",\n value: function setConfig(config) {\n Object.assign(this.config, config);\n }\n }]);\n}();\n\nvar addVec3 = vec3.add,\n copyVec3 = vec3.copy,\n maxVec3 = vec3.max,\n minVec3 = vec3.min,\n scaleVec3 = vec3.scale,\n subVec3 = vec3.sub;\n\n/**\n * Axis-Aligned Bounding Box\n * 为了便于后续 Frustum Culling,通过查找表定义 p-vertex 和 n-vertex\n * @see https://github.com/antvis/GWebGPUEngine/issues/3\n */\nvar AABB = /*#__PURE__*/function () {\n function AABB() {\n _classCallCheck(this, AABB);\n this.center = [0, 0, 0];\n this.halfExtents = [0, 0, 0];\n this.min = [0, 0, 0];\n this.max = [0, 0, 0];\n }\n return _createClass(AABB, [{\n key: \"update\",\n value: function update(center, halfExtents) {\n copyVec3(this.center, center);\n copyVec3(this.halfExtents, halfExtents);\n subVec3(this.min, this.center, this.halfExtents);\n addVec3(this.max, this.center, this.halfExtents);\n }\n }, {\n key: \"setMinMax\",\n value: function setMinMax(min, max) {\n addVec3(this.center, max, min);\n scaleVec3(this.center, this.center, 0.5);\n subVec3(this.halfExtents, max, min);\n scaleVec3(this.halfExtents, this.halfExtents, 0.5);\n copyVec3(this.min, min);\n copyVec3(this.max, max);\n }\n }, {\n key: \"getMin\",\n value: function getMin() {\n return this.min;\n }\n }, {\n key: \"getMax\",\n value: function getMax() {\n return this.max;\n }\n }, {\n key: \"add\",\n value: function add(aabb) {\n if (AABB.isEmpty(aabb)) {\n return;\n }\n if (AABB.isEmpty(this)) {\n this.setMinMax(aabb.getMin(), aabb.getMax());\n return;\n }\n var tc = this.center;\n var tcx = tc[0];\n var tcy = tc[1];\n var tcz = tc[2];\n var th = this.halfExtents;\n var thx = th[0];\n var thy = th[1];\n var thz = th[2];\n var tminx = tcx - thx;\n var tmaxx = tcx + thx;\n var tminy = tcy - thy;\n var tmaxy = tcy + thy;\n var tminz = tcz - thz;\n var tmaxz = tcz + thz;\n var oc = aabb.center;\n var ocx = oc[0];\n var ocy = oc[1];\n var ocz = oc[2];\n var oh = aabb.halfExtents;\n var ohx = oh[0];\n var ohy = oh[1];\n var ohz = oh[2];\n var ominx = ocx - ohx;\n var omaxx = ocx + ohx;\n var ominy = ocy - ohy;\n var omaxy = ocy + ohy;\n var ominz = ocz - ohz;\n var omaxz = ocz + ohz;\n if (ominx < tminx) {\n tminx = ominx;\n }\n if (omaxx > tmaxx) {\n tmaxx = omaxx;\n }\n if (ominy < tminy) {\n tminy = ominy;\n }\n if (omaxy > tmaxy) {\n tmaxy = omaxy;\n }\n if (ominz < tminz) {\n tminz = ominz;\n }\n if (omaxz > tmaxz) {\n tmaxz = omaxz;\n }\n tc[0] = (tminx + tmaxx) * 0.5;\n tc[1] = (tminy + tmaxy) * 0.5;\n tc[2] = (tminz + tmaxz) * 0.5;\n th[0] = (tmaxx - tminx) * 0.5;\n th[1] = (tmaxy - tminy) * 0.5;\n th[2] = (tmaxz - tminz) * 0.5;\n this.min[0] = tminx;\n this.min[1] = tminy;\n this.min[2] = tminz;\n this.max[0] = tmaxx;\n this.max[1] = tmaxy;\n this.max[2] = tmaxz;\n }\n }, {\n key: \"setFromTransformedAABB\",\n value: function setFromTransformedAABB(aabb, m) {\n var bc = this.center;\n var br = this.halfExtents;\n var ac = aabb.center;\n var ar = aabb.halfExtents;\n var mx0 = m[0];\n var mx1 = m[4];\n var mx2 = m[8];\n var my0 = m[1];\n var my1 = m[5];\n var my2 = m[9];\n var mz0 = m[2];\n var mz1 = m[6];\n var mz2 = m[10];\n var mx0a = Math.abs(mx0);\n var mx1a = Math.abs(mx1);\n var mx2a = Math.abs(mx2);\n var my0a = Math.abs(my0);\n var my1a = Math.abs(my1);\n var my2a = Math.abs(my2);\n var mz0a = Math.abs(mz0);\n var mz1a = Math.abs(mz1);\n var mz2a = Math.abs(mz2);\n bc[0] = m[12] + mx0 * ac[0] + mx1 * ac[1] + mx2 * ac[2];\n bc[1] = m[13] + my0 * ac[0] + my1 * ac[1] + my2 * ac[2];\n bc[2] = m[14] + mz0 * ac[0] + mz1 * ac[1] + mz2 * ac[2];\n\n // vec3.set(\n // bc,\n // m[12] + mx0 * ac[0] + mx1 * ac[1] + mx2 * ac[2],\n // m[13] + my0 * ac[0] + my1 * ac[1] + my2 * ac[2],\n // m[14] + mz0 * ac[0] + mz1 * ac[1] + mz2 * ac[2],\n // );\n\n br[0] = mx0a * ar[0] + mx1a * ar[1] + mx2a * ar[2];\n br[1] = my0a * ar[0] + my1a * ar[1] + my2a * ar[2];\n br[2] = mz0a * ar[0] + mz1a * ar[1] + mz2a * ar[2];\n\n // vec3.set(\n // br,\n // mx0a * ar[0] + mx1a * ar[1] + mx2a * ar[2],\n // my0a * ar[0] + my1a * ar[1] + my2a * ar[2],\n // mz0a * ar[0] + mz1a * ar[1] + mz2a * ar[2],\n // );\n\n // this.min = vec3.sub(this.min, bc, br);\n // this.max = vec3.add(this.max, bc, br);\n\n subVec3(this.min, bc, br);\n addVec3(this.max, bc, br);\n }\n }, {\n key: \"intersects\",\n value: function intersects(aabb) {\n var aMax = this.getMax();\n var aMin = this.getMin();\n var bMax = aabb.getMax();\n var bMin = aabb.getMin();\n return aMin[0] <= bMax[0] && aMax[0] >= bMin[0] && aMin[1] <= bMax[1] && aMax[1] >= bMin[1] && aMin[2] <= bMax[2] && aMax[2] >= bMin[2];\n }\n }, {\n key: \"intersection\",\n value: function intersection(aabb) {\n if (!this.intersects(aabb)) {\n return null;\n }\n var intersection = new AABB();\n var min = maxVec3([0, 0, 0], this.getMin(), aabb.getMin());\n var max = minVec3([0, 0, 0], this.getMax(), aabb.getMax());\n intersection.setMinMax(min, max);\n return intersection;\n }\n\n /**\n * get n-vertex\n * @param plane plane of CullingVolume\n */\n }, {\n key: \"getNegativeFarPoint\",\n value: function getNegativeFarPoint(plane) {\n if (plane.pnVertexFlag === 0x111) {\n return copyVec3([0, 0, 0], this.min);\n // return vec3.copy(vec3.create(), this.min);\n }\n if (plane.pnVertexFlag === 0x110) {\n return [this.min[0], this.min[1], this.max[2]];\n // return vec3.fromValues(this.min[0], this.min[1], this.max[2]);\n }\n if (plane.pnVertexFlag === 0x101) {\n return [this.min[0], this.max[1], this.min[2]];\n // return vec3.fromValues(this.min[0], this.max[1], this.min[2]);\n }\n if (plane.pnVertexFlag === 0x100) {\n return [this.min[0], this.max[1], this.max[2]];\n // return vec3.fromValues(this.min[0], this.max[1], this.max[2]);\n }\n if (plane.pnVertexFlag === 0x011) {\n return [this.max[0], this.min[1], this.min[2]];\n // return vec3.fromValues(this.max[0], this.min[1], this.min[2]);\n }\n if (plane.pnVertexFlag === 0x010) {\n return [this.max[0], this.min[1], this.max[2]];\n // return vec3.fromValues(this.max[0], this.min[1], this.max[2]);\n }\n if (plane.pnVertexFlag === 0x001) {\n return [this.max[0], this.max[1], this.min[2]];\n // return vec3.fromValues(this.max[0], this.max[1], this.min[2]);\n }\n return [this.max[0], this.max[1], this.max[2]];\n // return vec3.fromValues(this.max[0], this.max[1], this.max[2]);\n }\n\n /**\n * get p-vertex\n * @param plane plane of CullingVolume\n */\n }, {\n key: \"getPositiveFarPoint\",\n value: function getPositiveFarPoint(plane) {\n if (plane.pnVertexFlag === 0x111) {\n return copyVec3([0, 0, 0], this.max);\n // return vec3.copy(vec3.create(), this.max);\n }\n if (plane.pnVertexFlag === 0x110) {\n return [this.max[0], this.max[1], this.min[2]];\n // return vec3.fromValues(this.max[0], this.max[1], this.min[2]);\n }\n if (plane.pnVertexFlag === 0x101) {\n return [this.max[0], this.min[1], this.max[2]];\n // return vec3.fromValues(this.max[0], this.min[1], this.max[2]);\n }\n if (plane.pnVertexFlag === 0x100) {\n return [this.max[0], this.min[1], this.min[2]];\n // return vec3.fromValues(this.max[0], this.min[1], this.min[2]);\n }\n if (plane.pnVertexFlag === 0x011) {\n return [this.min[0], this.max[1], this.max[2]];\n // return vec3.fromValues(this.min[0], this.max[1], this.max[2]);\n }\n if (plane.pnVertexFlag === 0x010) {\n return [this.min[0], this.max[1], this.min[2]];\n // return vec3.fromValues(this.min[0], this.max[1], this.min[2]);\n }\n if (plane.pnVertexFlag === 0x001) {\n return [this.min[0], this.min[1], this.max[2]];\n // return vec3.fromValues(this.min[0], this.min[1], this.max[2]);\n }\n return [this.min[0], this.min[1], this.min[2]];\n // return vec3.fromValues(this.min[0], this.min[1], this.min[2]);\n }\n }], [{\n key: \"isEmpty\",\n value: function isEmpty(aabb) {\n return !aabb || aabb.halfExtents[0] === 0 && aabb.halfExtents[1] === 0 && aabb.halfExtents[2] === 0;\n }\n }]);\n}();\n\nvar Plane = /*#__PURE__*/function () {\n /**\n * lookup table for p-vertex & n-vertex when doing frustum culling\n */\n\n function Plane(distance, normal) {\n _classCallCheck(this, Plane);\n this.distance = distance || 0;\n this.normal = normal || vec3.fromValues(0, 1, 0);\n this.updatePNVertexFlag();\n }\n return _createClass(Plane, [{\n key: \"updatePNVertexFlag\",\n value: function updatePNVertexFlag() {\n this.pnVertexFlag = (Number(this.normal[0] >= 0) << 8) + (Number(this.normal[1] >= 0) << 4) + Number(this.normal[2] >= 0);\n }\n }, {\n key: \"distanceToPoint\",\n value: function distanceToPoint(point) {\n return vec3.dot(point, this.normal) - this.distance;\n }\n }, {\n key: \"normalize\",\n value: function normalize() {\n var invLen = 1 / vec3.len(this.normal);\n vec3.scale(this.normal, this.normal, invLen);\n this.distance *= invLen;\n }\n }, {\n key: \"intersectsLine\",\n value: function intersectsLine(start, end, point) {\n var d0 = this.distanceToPoint(start);\n var d1 = this.distanceToPoint(end);\n var t = d0 / (d0 - d1);\n var intersects = t >= 0 && t <= 1;\n if (intersects && point) {\n vec3.lerp(point, start, end, t);\n }\n return intersects;\n }\n }]);\n}();\n\nvar Mask = /*#__PURE__*/function (Mask) {\n Mask[Mask[\"OUTSIDE\"] = 4294967295] = \"OUTSIDE\";\n Mask[Mask[\"INSIDE\"] = 0] = \"INSIDE\";\n Mask[Mask[\"INDETERMINATE\"] = 2147483647] = \"INDETERMINATE\";\n return Mask;\n}({});\nvar Frustum = /*#__PURE__*/function () {\n function Frustum(planes) {\n _classCallCheck(this, Frustum);\n this.planes = [];\n if (planes) {\n this.planes = planes;\n } else {\n for (var i = 0; i < 6; i++) {\n this.planes.push(new Plane());\n }\n }\n }\n\n /**\n * extract 6 planes from projectionMatrix\n * @see http://www8.cs.umu.se/kurser/5DV051/HT12/lab/plane_extraction.pdf\n */\n return _createClass(Frustum, [{\n key: \"extractFromVPMatrix\",\n value: function extractFromVPMatrix(projectionMatrix) {\n // @ts-ignore\n var _projectionMatrix = _slicedToArray(projectionMatrix, 16),\n m0 = _projectionMatrix[0],\n m1 = _projectionMatrix[1],\n m2 = _projectionMatrix[2],\n m3 = _projectionMatrix[3],\n m4 = _projectionMatrix[4],\n m5 = _projectionMatrix[5],\n m6 = _projectionMatrix[6],\n m7 = _projectionMatrix[7],\n m8 = _projectionMatrix[8],\n m9 = _projectionMatrix[9],\n m10 = _projectionMatrix[10],\n m11 = _projectionMatrix[11],\n m12 = _projectionMatrix[12],\n m13 = _projectionMatrix[13],\n m14 = _projectionMatrix[14],\n m15 = _projectionMatrix[15];\n\n // right\n vec3.set(this.planes[0].normal, m3 - m0, m7 - m4, m11 - m8);\n this.planes[0].distance = m15 - m12;\n\n // left\n vec3.set(this.planes[1].normal, m3 + m0, m7 + m4, m11 + m8);\n this.planes[1].distance = m15 + m12;\n\n // bottom\n vec3.set(this.planes[2].normal, m3 + m1, m7 + m5, m11 + m9);\n this.planes[2].distance = m15 + m13;\n\n // top\n vec3.set(this.planes[3].normal, m3 - m1, m7 - m5, m11 - m9);\n this.planes[3].distance = m15 - m13;\n\n // far\n vec3.set(this.planes[4].normal, m3 - m2, m7 - m6, m11 - m10);\n this.planes[4].distance = m15 - m14;\n\n // near\n vec3.set(this.planes[5].normal, m3 + m2, m7 + m6, m11 + m10);\n this.planes[5].distance = m15 + m14;\n this.planes.forEach(function (plane) {\n plane.normalize();\n plane.updatePNVertexFlag();\n });\n }\n }]);\n}();\n\nvar Point = /*#__PURE__*/function () {\n function Point() {\n var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n _classCallCheck(this, Point);\n this.x = 0;\n this.y = 0;\n this.x = x;\n this.y = y;\n }\n return _createClass(Point, [{\n key: \"clone\",\n value: function clone() {\n return new Point(this.x, this.y);\n }\n }, {\n key: \"copyFrom\",\n value: function copyFrom(p) {\n this.x = p.x;\n this.y = p.y;\n }\n }]);\n}();\n\nvar Rectangle = /*#__PURE__*/function () {\n function Rectangle(x, y, width, height) {\n _classCallCheck(this, Rectangle);\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.left = x;\n this.right = x + width;\n this.top = y;\n this.bottom = y + height;\n }\n return _createClass(Rectangle, [{\n key: \"toJSON\",\n value: function toJSON() {}\n }], [{\n key: \"fromRect\",\n value:\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMRect/fromRect_static\n */\n function fromRect(rect) {\n return new Rectangle(rect.x, rect.y, rect.width, rect.height);\n }\n\n /**\n * will return a new rect instance\n */\n }, {\n key: \"applyTransform\",\n value: function applyTransform(rect, matrix) {\n var topLeft = vec4.fromValues(rect.x, rect.y, 0, 1);\n var topRight = vec4.fromValues(rect.x + rect.width, rect.y, 0, 1);\n var bottomLeft = vec4.fromValues(rect.x, rect.y + rect.height, 0, 1);\n var bottomRight = vec4.fromValues(rect.x + rect.width, rect.y + rect.height, 0, 1);\n var transformedTopLeft = vec4.create();\n var transformedTopRight = vec4.create();\n var transformedBottomLeft = vec4.create();\n var transformedBottomRight = vec4.create();\n vec4.transformMat4(transformedTopLeft, topLeft, matrix);\n vec4.transformMat4(transformedTopRight, topRight, matrix);\n vec4.transformMat4(transformedBottomLeft, bottomLeft, matrix);\n vec4.transformMat4(transformedBottomRight, bottomRight, matrix);\n var minX = Math.min(transformedTopLeft[0], transformedTopRight[0], transformedBottomLeft[0], transformedBottomRight[0]);\n var minY = Math.min(transformedTopLeft[1], transformedTopRight[1], transformedBottomLeft[1], transformedBottomRight[1]);\n var maxX = Math.max(transformedTopLeft[0], transformedTopRight[0], transformedBottomLeft[0], transformedBottomRight[0]);\n var maxY = Math.max(transformedTopLeft[1], transformedTopRight[1], transformedBottomLeft[1], transformedBottomRight[1]);\n return Rectangle.fromRect({\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n });\n }\n }]);\n}();\n\nvar ERROR_MSG_METHOD_NOT_IMPLEMENTED = 'Method not implemented.';\nvar ERROR_MSG_USE_DOCUMENT_ELEMENT = 'Use document.documentElement instead.';\nvar ERROR_MSG_APPEND_DESTROYED_ELEMENT = 'Cannot append a destroyed element.';\n\nfunction getAngle(angle) {\n if (angle === undefined) {\n return 0;\n }\n if (angle > 360 || angle < -360) {\n return angle % 360;\n }\n return angle;\n}\nvar $vec3$2 = vec3.create();\nfunction createVec3(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var clone = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n if (Array.isArray(x) && x.length === 3) {\n return clone ? vec3.clone(x) : vec3.copy($vec3$2, x);\n }\n if (isNumber(x)) {\n return clone ? vec3.fromValues(x, y, z) : vec3.set($vec3$2, x, y, z);\n }\n return clone ? vec3.fromValues(x[0], x[1] || y, x[2] || z) : vec3.set($vec3$2, x[0], x[1] || y, x[2] || z);\n}\nvar DEG_RAD = Math.PI / 180;\nfunction deg2rad(deg) {\n return deg * DEG_RAD;\n}\nvar RAD_DEG = 180 / Math.PI;\nfunction rad2deg(rad) {\n return rad * RAD_DEG;\n}\nvar GRAD_DEG = 0.9; // 360 / 400;\nfunction grad2deg(grads) {\n grads %= 400;\n if (grads < 0) {\n grads += 400;\n }\n return grads * GRAD_DEG;\n}\nfunction deg2turn(deg) {\n return deg / 360;\n}\nfunction turn2deg(turn) {\n return 360 * turn;\n}\nvar HALF_PI = Math.PI / 2;\nfunction getEulerFromQuat(out, quat) {\n var x = quat[0];\n var y = quat[1];\n var z = quat[2];\n var w = quat[3];\n var x2 = x * x;\n var y2 = y * y;\n var z2 = z * z;\n var w2 = w * w;\n var unit = x2 + y2 + z2 + w2;\n var test = x * w - y * z;\n if (test > 0.499995 * unit) {\n // TODO: Use glmatrix.EPSILON\n // singularity at the north pole\n out[0] = HALF_PI;\n out[1] = 2 * Math.atan2(y, x);\n out[2] = 0;\n } else if (test < -0.499995 * unit) {\n // TODO: Use glmatrix.EPSILON\n // singularity at the south pole\n out[0] = -HALF_PI;\n out[1] = 2 * Math.atan2(y, x);\n out[2] = 0;\n } else {\n out[0] = Math.asin(2 * (x * z - w * y));\n out[1] = Math.atan2(2 * (x * w + y * z), 1 - 2 * (z2 + w2));\n out[2] = Math.atan2(2 * (x * y + z * w), 1 - 2 * (y2 + z2));\n }\n // TODO: Return them as degrees and not as radians\n return out;\n}\nfunction getEulerFromMat4(out, m) {\n var x;\n var z;\n var _mat4$getScaling = mat4.getScaling(vec3.create(), m),\n _mat4$getScaling2 = _slicedToArray(_mat4$getScaling, 3),\n sx = _mat4$getScaling2[0],\n sy = _mat4$getScaling2[1],\n sz = _mat4$getScaling2[2];\n var y = Math.asin(-m[2] / sx);\n if (y < HALF_PI) {\n if (y > -HALF_PI) {\n x = Math.atan2(m[6] / sy, m[10] / sz);\n z = Math.atan2(m[1] / sx, m[0] / sx);\n } else {\n // Not a unique solution\n z = 0;\n x = -Math.atan2(m[4] / sy, m[5] / sy);\n }\n } else {\n // Not a unique solution\n z = 0;\n x = Math.atan2(m[4] / sy, m[5] / sy);\n }\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n\n/**\n * @see https://github.com/toji/gl-matrix/issues/329\n * @see https://doc.babylonjs.com/divingDeeper/mesh/transforms/center_origin/rotation_conventions\n */\nfunction getEuler(out, quat) {\n if (quat.length === 16) {\n return getEulerFromMat4(out, quat);\n }\n return getEulerFromQuat(out, quat);\n}\nfunction fromRotationTranslationScale(rotation, x, y, scaleX, scaleY) {\n var cos = Math.cos(rotation);\n var sin = Math.sin(rotation);\n return mat3.fromValues(scaleX * cos, scaleY * sin, 0, -scaleX * sin, scaleY * cos, 0, x, y, 1);\n}\nfunction makePerspective(out, left, right, top, bottom, near, far) {\n var zero = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false;\n var twoNear = 2 * near;\n var rightMinusLeft = right - left;\n var topMinusBottom = top - bottom;\n var x = twoNear / rightMinusLeft;\n var y = twoNear / topMinusBottom;\n var a = (right + left) / rightMinusLeft;\n var b = (top + bottom) / topMinusBottom;\n var c;\n var d;\n var farMinusNear = far - near;\n var farMulNear = far * near;\n if (zero) {\n c = -far / farMinusNear;\n d = -farMulNear / farMinusNear;\n } else {\n c = -(far + near) / farMinusNear;\n d = -2 * farMulNear / farMinusNear;\n }\n out[0] = x;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = y;\n out[6] = 0;\n out[7] = 0;\n out[8] = a;\n out[9] = b;\n out[10] = c;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = d;\n out[15] = 0;\n return out;\n}\nfunction decompose(mat) {\n var row0x = mat[0];\n var row0y = mat[1];\n var row1x = mat[3];\n var row1y = mat[4];\n // decompose 3x3 matrix\n // @see https://www.w3.org/TR/css-transforms-1/#decomposing-a-2d-matrix\n var scalingX = Math.sqrt(row0x * row0x + row0y * row0y);\n var scalingY = Math.sqrt(row1x * row1x + row1y * row1y);\n\n // If determinant is negative, one axis was flipped.\n var determinant = row0x * row1y - row0y * row1x;\n if (determinant < 0) {\n // Flip axis with minimum unit vector dot product.\n if (row0x < row1y) {\n scalingX = -scalingX;\n } else {\n scalingY = -scalingY;\n }\n }\n\n // Renormalize matrix to remove scale.\n if (scalingX) {\n var invScalingX = 1 / scalingX;\n row0x *= invScalingX;\n row0y *= invScalingX;\n }\n if (scalingY) {\n var invScalingY = 1 / scalingY;\n row1x *= invScalingY;\n row1y *= invScalingY;\n }\n\n // Compute rotation and renormalize matrix.\n var rotation = Math.atan2(row0y, row0x);\n var angle = rad2deg(rotation);\n return [mat[6], mat[7], scalingX, scalingY, angle];\n}\nvar tmp = mat4.create();\nvar perspectiveMatrix = mat4.create();\nvar tmpVec4 = vec4.create();\nvar row = [vec3.create(), vec3.create(), vec3.create()];\nvar pdum3 = vec3.create();\n\n/*\nInput: matrix ; a 4x4 matrix\nOutput: translation ; a 3 component vector\n scale ; a 3 component vector\n skew ; skew factors XY,XZ,YZ represented as a 3 component vector\n perspective ; a 4 component vector\n quaternion ; a 4 component vector\nReturns false if the matrix cannot be decomposed, true if it can\n\n\nReferences:\nhttps://github.com/kamicane/matrix3d/blob/master/lib/Matrix3d.js\nhttps://github.com/ChromiumWebApps/chromium/blob/master/ui/gfx/transform_util.cc\nhttp://www.w3.org/TR/css3-transforms/#decomposing-a-3d-matrix\n*/\nfunction decomposeMat4(matrix, translation, scale, skew, perspective, quaternion) {\n // normalize, if not possible then bail out early\n if (!normalize(tmp, matrix)) return false;\n\n // perspectiveMatrix is used to solve for perspective, but it also provides\n // an easy way to test for singularity of the upper 3x3 component.\n mat4.copy(perspectiveMatrix, tmp);\n perspectiveMatrix[3] = 0;\n perspectiveMatrix[7] = 0;\n perspectiveMatrix[11] = 0;\n perspectiveMatrix[15] = 1;\n\n // If the perspectiveMatrix is not invertible, we are also unable to\n // decompose, so we'll bail early. Constant taken from SkMatrix44::invert.\n if (Math.abs(mat4.determinant(perspectiveMatrix)) < 1e-8) return false;\n var a03 = tmp[3];\n var a13 = tmp[7];\n var a23 = tmp[11];\n var a30 = tmp[12];\n var a31 = tmp[13];\n var a32 = tmp[14];\n var a33 = tmp[15];\n\n // First, isolate perspective.\n if (a03 !== 0 || a13 !== 0 || a23 !== 0) {\n tmpVec4[0] = a03;\n tmpVec4[1] = a13;\n tmpVec4[2] = a23;\n tmpVec4[3] = a33;\n\n // Solve the equation by inverting perspectiveMatrix and multiplying\n // rightHandSide by the inverse.\n // resuing the perspectiveMatrix here since it's no longer needed\n var ret = mat4.invert(perspectiveMatrix, perspectiveMatrix);\n if (!ret) return false;\n mat4.transpose(perspectiveMatrix, perspectiveMatrix);\n\n // multiply by transposed inverse perspective matrix, into perspective vec4\n vec4.transformMat4(perspective, tmpVec4, perspectiveMatrix);\n } else {\n // no perspective\n perspective[0] = perspective[1] = perspective[2] = 0;\n perspective[3] = 1;\n }\n\n // Next take care of translation\n translation[0] = a30;\n translation[1] = a31;\n translation[2] = a32;\n\n // Now get scale and shear. 'row' is a 3 element array of 3 component vectors\n mat3from4(row, tmp);\n\n // Compute X scale factor and normalize first row.\n scale[0] = vec3.length(row[0]);\n vec3.normalize(row[0], row[0]);\n\n // Compute XY shear factor and make 2nd row orthogonal to 1st.\n skew[0] = vec3.dot(row[0], row[1]);\n combine(row[1], row[1], row[0], 1.0, -skew[0]);\n\n // Now, compute Y scale and normalize 2nd row.\n scale[1] = vec3.length(row[1]);\n vec3.normalize(row[1], row[1]);\n skew[0] /= scale[1];\n\n // Compute XZ and YZ shears, orthogonalize 3rd row\n skew[1] = vec3.dot(row[0], row[2]);\n combine(row[2], row[2], row[0], 1.0, -skew[1]);\n skew[2] = vec3.dot(row[1], row[2]);\n combine(row[2], row[2], row[1], 1.0, -skew[2]);\n\n // Next, get Z scale and normalize 3rd row.\n scale[2] = vec3.length(row[2]);\n vec3.normalize(row[2], row[2]);\n skew[1] /= scale[2];\n skew[2] /= scale[2];\n\n // At this point, the matrix (in rows) is orthonormal.\n // Check for a coordinate system flip. If the determinant\n // is -1, then negate the matrix and the scaling factors.\n vec3.cross(pdum3, row[1], row[2]);\n if (vec3.dot(row[0], pdum3) < 0) {\n for (var i = 0; i < 3; i++) {\n scale[i] *= -1;\n row[i][0] *= -1;\n row[i][1] *= -1;\n row[i][2] *= -1;\n }\n }\n\n // Now, get the rotations out\n quaternion[0] = 0.5 * Math.sqrt(Math.max(1 + row[0][0] - row[1][1] - row[2][2], 0));\n quaternion[1] = 0.5 * Math.sqrt(Math.max(1 - row[0][0] + row[1][1] - row[2][2], 0));\n quaternion[2] = 0.5 * Math.sqrt(Math.max(1 - row[0][0] - row[1][1] + row[2][2], 0));\n quaternion[3] = 0.5 * Math.sqrt(Math.max(1 + row[0][0] + row[1][1] + row[2][2], 0));\n if (row[2][1] > row[1][2]) quaternion[0] = -quaternion[0];\n if (row[0][2] > row[2][0]) quaternion[1] = -quaternion[1];\n if (row[1][0] > row[0][1]) quaternion[2] = -quaternion[2];\n return true;\n}\nfunction normalize(out, mat) {\n var m44 = mat[15];\n // Cannot normalize.\n if (m44 === 0) return false;\n var scale = 1 / m44;\n for (var i = 0; i < 16; i++) out[i] = mat[i] * scale;\n return true;\n}\n\n// gets upper-left of a 4x4 matrix into a 3x3 of vectors\nfunction mat3from4(out, mat4x4) {\n out[0][0] = mat4x4[0];\n out[0][1] = mat4x4[1];\n out[0][2] = mat4x4[2];\n out[1][0] = mat4x4[4];\n out[1][1] = mat4x4[5];\n out[1][2] = mat4x4[6];\n out[2][0] = mat4x4[8];\n out[2][1] = mat4x4[9];\n out[2][2] = mat4x4[10];\n}\nfunction combine(out, a, b, scale1, scale2) {\n out[0] = a[0] * scale1 + b[0] * scale2;\n out[1] = a[1] * scale1 + b[1] * scale2;\n out[2] = a[2] * scale1 + b[2] * scale2;\n}\n\n/**\n * Different type of cameras, eg. simple camera used in 2D scene or\n * advanced camera which can do actions & switch between landmarks.\n */\n\nvar CameraType = /*#__PURE__*/function (CameraType) {\n /**\n * Performs all the rotational operations with the focal point instead of the camera position.\n * This type of camera is useful in applications(like CAD) where 3D objects are being designed or explored.\n * Camera cannot orbits over the north & south poles.\n * @see http://voxelent.com/tutorial-cameras/\n *\n * In Three.js it's used in OrbitControls.\n * @see https://threejs.org/docs/#examples/zh/controls/OrbitControls\n */\n CameraType[CameraType[\"ORBITING\"] = 0] = \"ORBITING\";\n /**\n * It's similar to the ORBITING camera, but it allows the camera to orbit over the north or south poles.\n *\n * In Three.js it's used in OrbitControls.\n * @see https://threejs.org/docs/#examples/en/controls/TrackballControls\n */\n CameraType[CameraType[\"EXPLORING\"] = 1] = \"EXPLORING\";\n /**\n * Performs all the rotational operations with the camera position.\n * It's useful in first person shooting games.\n * Camera cannot orbits over the north & south poles.\n *\n * In Three.js it's used in FirstPersonControls.\n * @see https://threejs.org/docs/#examples/en/controls/FirstPersonControls\n */\n CameraType[CameraType[\"TRACKING\"] = 2] = \"TRACKING\";\n return CameraType;\n}({});\n\n/**\n * CameraType must be TRACKING\n */\nvar CameraTrackingMode = /*#__PURE__*/function (CameraTrackingMode) {\n CameraTrackingMode[CameraTrackingMode[\"DEFAULT\"] = 0] = \"DEFAULT\";\n CameraTrackingMode[CameraTrackingMode[\"ROTATIONAL\"] = 1] = \"ROTATIONAL\";\n CameraTrackingMode[CameraTrackingMode[\"TRANSLATIONAL\"] = 2] = \"TRANSLATIONAL\";\n CameraTrackingMode[CameraTrackingMode[\"CINEMATIC\"] = 3] = \"CINEMATIC\";\n return CameraTrackingMode;\n}({});\nvar CameraProjectionMode = /*#__PURE__*/function (CameraProjectionMode) {\n CameraProjectionMode[CameraProjectionMode[\"ORTHOGRAPHIC\"] = 0] = \"ORTHOGRAPHIC\";\n CameraProjectionMode[CameraProjectionMode[\"PERSPECTIVE\"] = 1] = \"PERSPECTIVE\";\n return CameraProjectionMode;\n}({});\nvar CameraEvent = {\n UPDATED: 'updated'\n};\n\nvar MIN_DISTANCE = 0.0002;\n\n/**\n * 参考「WebGL Insights - 23.Designing Cameras for WebGL Applications」,基于 Responsible Camera 思路设计\n * @see https://github.com/d13g0/nucleo.js/blob/master/source/camera/Camera.js\n *\n * 保存相机参数,定义相机动作:\n * 1. dolly 沿 n 轴移动\n * 2. pan 沿 u v 轴移动\n * 3. rotate 以方位角旋转\n * 4. 移动到 Landmark,具有平滑的动画效果,其间禁止其他用户交互\n */\n\nvar Camera = /*#__PURE__*/function () {\n function Camera() {\n _classCallCheck(this, Camera);\n /**\n * Clip space near Z, default to range `[-1, 1]`\n */\n this.clipSpaceNearZ = ClipSpaceNearZ.NEGATIVE_ONE;\n this.eventEmitter = new EventEmitter();\n /**\n * Matrix of camera\n */\n this.matrix = mat4.create();\n /**\n * u axis +X is right\n * @see http://learnwebgl.brown37.net/07_cameras/camera_introduction.html#a-camera-definition\n */\n this.right = vec3.fromValues(1, 0, 0);\n /**\n * v axis +Y is up\n */\n this.up = vec3.fromValues(0, 1, 0);\n /**\n * n axis +Z is inside\n */\n this.forward = vec3.fromValues(0, 0, 1);\n /**\n * Position of camera.\n */\n this.position = vec3.fromValues(0, 0, 1);\n /**\n * Position of focal point.\n */\n this.focalPoint = vec3.fromValues(0, 0, 0);\n /**\n * vector from focalPoint to position\n */\n this.distanceVector = vec3.fromValues(0, 0, -1);\n /**\n * length(focalPoint - position)\n */\n this.distance = 1;\n /**\n * @see https://en.wikipedia.org/wiki/Azimuth\n */\n this.azimuth = 0;\n this.elevation = 0;\n this.roll = 0;\n this.relAzimuth = 0;\n this.relElevation = 0;\n this.relRoll = 0;\n /**\n * 沿 n 轴移动时,保证移动速度从快到慢\n */\n this.dollyingStep = 0;\n this.maxDistance = Infinity;\n this.minDistance = -Infinity;\n /**\n * zoom factor of the camera, default is 1\n * eg. https://threejs.org/docs/#api/en/cameras/OrthographicCamera.zoom\n */\n this.zoom = 1;\n /**\n * invert the horizontal coordinate system HCS\n */\n this.rotateWorld = false;\n /**\n * 投影矩阵参数\n */\n /**\n * field of view [0-360]\n * @see http://en.wikipedia.org/wiki/Angle_of_view\n */\n this.fov = 30;\n this.near = 0.1;\n this.far = 1000;\n this.aspect = 1;\n this.projectionMatrix = mat4.create();\n this.projectionMatrixInverse = mat4.create();\n this.jitteredProjectionMatrix = undefined;\n this.enableUpdate = true;\n // protected following = undefined;\n this.type = CameraType.EXPLORING;\n this.trackingMode = CameraTrackingMode.DEFAULT;\n this.projectionMode = CameraProjectionMode.PERSPECTIVE;\n /**\n * for culling use\n */\n this.frustum = new Frustum();\n /**\n * ortho matrix for Canvas2D & SVG\n */\n this.orthoMatrix = mat4.create();\n }\n return _createClass(Camera, [{\n key: \"isOrtho\",\n value:\n // constructor(type = CameraType.EXPLORING, trackingMode = CameraTrackingMode.DEFAULT) {\n // this.setType(type, trackingMode);\n // }\n\n function isOrtho() {\n return this.projectionMode === CameraProjectionMode.ORTHOGRAPHIC;\n }\n }, {\n key: \"getProjectionMode\",\n value: function getProjectionMode() {\n return this.projectionMode;\n }\n }, {\n key: \"getPerspective\",\n value: function getPerspective() {\n // account for TAA\n return this.jitteredProjectionMatrix || this.projectionMatrix;\n }\n }, {\n key: \"getPerspectiveInverse\",\n value: function getPerspectiveInverse() {\n return this.projectionMatrixInverse;\n }\n }, {\n key: \"getFrustum\",\n value: function getFrustum() {\n return this.frustum;\n }\n }, {\n key: \"getPosition\",\n value: function getPosition() {\n return this.position;\n }\n }, {\n key: \"getFocalPoint\",\n value: function getFocalPoint() {\n return this.focalPoint;\n }\n }, {\n key: \"getDollyingStep\",\n value: function getDollyingStep() {\n return this.dollyingStep;\n }\n }, {\n key: \"getNear\",\n value: function getNear() {\n return this.near;\n }\n }, {\n key: \"getFar\",\n value: function getFar() {\n return this.far;\n }\n }, {\n key: \"getZoom\",\n value: function getZoom() {\n return this.zoom;\n }\n }, {\n key: \"getOrthoMatrix\",\n value: function getOrthoMatrix() {\n return this.orthoMatrix;\n }\n }, {\n key: \"getView\",\n value: function getView() {\n return this.view;\n }\n }, {\n key: \"setEnableUpdate\",\n value: function setEnableUpdate(enabled) {\n this.enableUpdate = enabled;\n }\n }, {\n key: \"setType\",\n value: function setType(type, trackingMode) {\n this.type = type;\n if (this.type === CameraType.EXPLORING) {\n this.setWorldRotation(true);\n } else {\n this.setWorldRotation(false);\n }\n this._getAngles();\n if (this.type === CameraType.TRACKING && trackingMode !== undefined) {\n this.setTrackingMode(trackingMode);\n }\n return this;\n }\n }, {\n key: \"setProjectionMode\",\n value: function setProjectionMode(projectionMode) {\n this.projectionMode = projectionMode;\n return this;\n }\n }, {\n key: \"setTrackingMode\",\n value: function setTrackingMode(trackingMode) {\n if (this.type !== CameraType.TRACKING) {\n throw new Error('Impossible to set a tracking mode if the camera is not of tracking type');\n }\n this.trackingMode = trackingMode;\n return this;\n }\n\n /**\n * If flag is true, it reverses the azimuth and elevation angles.\n * Subsequent calls to rotate, setAzimuth, setElevation,\n * changeAzimuth or changeElevation will cause the inverted effect.\n * setRoll or changeRoll is not affected by this method.\n *\n * This inversion is useful when one wants to simulate that the world\n * is moving, instead of the camera.\n *\n * By default the camera angles are not reversed.\n * @param {Boolean} flag the boolean flag to reverse the angles.\n */\n }, {\n key: \"setWorldRotation\",\n value: function setWorldRotation(flag) {\n this.rotateWorld = flag;\n this._getAngles();\n return this;\n }\n\n /**\n * 计算 MV 矩阵,为相机矩阵的逆矩阵\n */\n }, {\n key: \"getViewTransform\",\n value: function getViewTransform() {\n // mat4.scale(this.matrix, this.matrix, vec3.fromValues(1, -1, 1));\n\n return mat4.invert(mat4.create(), this.matrix);\n }\n }, {\n key: \"getWorldTransform\",\n value: function getWorldTransform() {\n return this.matrix;\n }\n }, {\n key: \"jitterProjectionMatrix\",\n value: function jitterProjectionMatrix(x, y) {\n var translation = mat4.fromTranslation(mat4.create(), [x, y, 0]);\n this.jitteredProjectionMatrix = mat4.multiply(mat4.create(), translation, this.projectionMatrix);\n }\n }, {\n key: \"clearJitterProjectionMatrix\",\n value: function clearJitterProjectionMatrix() {\n this.jitteredProjectionMatrix = undefined;\n }\n\n /**\n * 设置相机矩阵\n */\n }, {\n key: \"setMatrix\",\n value: function setMatrix(matrix) {\n this.matrix = matrix;\n this._update();\n return this;\n }\n\n /**\n * Set projection matrix manually.\n */\n }, {\n key: \"setProjectionMatrix\",\n value: function setProjectionMatrix(matrix) {\n this.projectionMatrix = matrix;\n }\n }, {\n key: \"setFov\",\n value: function setFov(fov) {\n this.setPerspective(this.near, this.far, fov, this.aspect);\n return this;\n }\n }, {\n key: \"setAspect\",\n value: function setAspect(aspect) {\n this.setPerspective(this.near, this.far, this.fov, aspect);\n return this;\n }\n }, {\n key: \"setNear\",\n value: function setNear(near) {\n if (this.projectionMode === CameraProjectionMode.PERSPECTIVE) {\n this.setPerspective(near, this.far, this.fov, this.aspect);\n } else {\n this.setOrthographic(this.left, this.rright, this.top, this.bottom, near, this.far);\n }\n return this;\n }\n }, {\n key: \"setFar\",\n value: function setFar(far) {\n if (this.projectionMode === CameraProjectionMode.PERSPECTIVE) {\n this.setPerspective(this.near, far, this.fov, this.aspect);\n } else {\n this.setOrthographic(this.left, this.rright, this.top, this.bottom, this.near, far);\n }\n return this;\n }\n\n /**\n * Sets an offset in a larger frustum, used in PixelPicking\n */\n }, {\n key: \"setViewOffset\",\n value: function setViewOffset(fullWidth, fullHeight, x, y, width, height) {\n this.aspect = fullWidth / fullHeight;\n if (this.view === undefined) {\n this.view = {\n enabled: true,\n fullWidth: 1,\n fullHeight: 1,\n offsetX: 0,\n offsetY: 0,\n width: 1,\n height: 1\n };\n }\n this.view.enabled = true;\n this.view.fullWidth = fullWidth;\n this.view.fullHeight = fullHeight;\n this.view.offsetX = x;\n this.view.offsetY = y;\n this.view.width = width;\n this.view.height = height;\n if (this.projectionMode === CameraProjectionMode.PERSPECTIVE) {\n this.setPerspective(this.near, this.far, this.fov, this.aspect);\n } else {\n this.setOrthographic(this.left, this.rright, this.top, this.bottom, this.near, this.far);\n }\n return this;\n }\n }, {\n key: \"clearViewOffset\",\n value: function clearViewOffset() {\n if (this.view !== undefined) {\n this.view.enabled = false;\n }\n if (this.projectionMode === CameraProjectionMode.PERSPECTIVE) {\n this.setPerspective(this.near, this.far, this.fov, this.aspect);\n } else {\n this.setOrthographic(this.left, this.rright, this.top, this.bottom, this.near, this.far);\n }\n return this;\n }\n }, {\n key: \"setZoom\",\n value: function setZoom(zoom) {\n this.zoom = zoom;\n if (this.projectionMode === CameraProjectionMode.ORTHOGRAPHIC) {\n this.setOrthographic(this.left, this.rright, this.top, this.bottom, this.near, this.far);\n } else if (this.projectionMode === CameraProjectionMode.PERSPECTIVE) {\n this.setPerspective(this.near, this.far, this.fov, this.aspect);\n }\n return this;\n }\n\n /**\n * Zoom by specified point in viewport coordinates.\n */\n }, {\n key: \"setZoomByViewportPoint\",\n value: function setZoomByViewportPoint(zoom, viewportPoint) {\n var _this$canvas$viewport = this.canvas.viewport2Canvas({\n x: viewportPoint[0],\n y: viewportPoint[1]\n }),\n ox = _this$canvas$viewport.x,\n oy = _this$canvas$viewport.y;\n var roll = this.roll;\n this.rotate(0, 0, -roll);\n this.setPosition(ox, oy);\n this.setFocalPoint(ox, oy);\n this.setZoom(zoom);\n this.rotate(0, 0, roll);\n var _this$canvas$viewport2 = this.canvas.viewport2Canvas({\n x: viewportPoint[0],\n y: viewportPoint[1]\n }),\n cx = _this$canvas$viewport2.x,\n cy = _this$canvas$viewport2.y;\n\n // project to rotated axis\n var dvec = vec3.fromValues(cx - ox, cy - oy, 0);\n var dx = vec3.dot(dvec, this.right) / vec3.length(this.right);\n var dy = vec3.dot(dvec, this.up) / vec3.length(this.up);\n var _this$getPosition = this.getPosition(),\n _this$getPosition2 = _slicedToArray(_this$getPosition, 2),\n px = _this$getPosition2[0],\n py = _this$getPosition2[1];\n var _this$getFocalPoint = this.getFocalPoint(),\n _this$getFocalPoint2 = _slicedToArray(_this$getFocalPoint, 2),\n fx = _this$getFocalPoint2[0],\n fy = _this$getFocalPoint2[1];\n this.setPosition(px - dx, py - dy);\n this.setFocalPoint(fx - dx, fy - dy);\n return this;\n }\n }, {\n key: \"setPerspective\",\n value: function setPerspective(near, far, fov, aspect) {\n var _this$view;\n this.projectionMode = CameraProjectionMode.PERSPECTIVE;\n this.fov = fov;\n this.near = near;\n this.far = far;\n this.aspect = aspect;\n var top = this.near * Math.tan(deg2rad(0.5 * this.fov)) / this.zoom;\n var height = 2 * top;\n var width = this.aspect * height;\n var left = -0.5 * width;\n if ((_this$view = this.view) !== null && _this$view !== void 0 && _this$view.enabled) {\n var fullWidth = this.view.fullWidth;\n var fullHeight = this.view.fullHeight;\n left += this.view.offsetX * width / fullWidth;\n top -= this.view.offsetY * height / fullHeight;\n width *= this.view.width / fullWidth;\n height *= this.view.height / fullHeight;\n }\n makePerspective(this.projectionMatrix, left, left + width, top - height, top, near, this.far, this.clipSpaceNearZ === ClipSpaceNearZ.ZERO);\n mat4.invert(this.projectionMatrixInverse, this.projectionMatrix);\n this.triggerUpdate();\n return this;\n }\n }, {\n key: \"setOrthographic\",\n value: function setOrthographic(l, r, t, b, near, far) {\n var _this$view2;\n this.projectionMode = CameraProjectionMode.ORTHOGRAPHIC;\n this.rright = r;\n this.left = l;\n this.top = t;\n this.bottom = b;\n this.near = near;\n this.far = far;\n var dx = (this.rright - this.left) / (2 * this.zoom);\n var dy = (this.top - this.bottom) / (2 * this.zoom);\n var cx = (this.rright + this.left) / 2;\n var cy = (this.top + this.bottom) / 2;\n var left = cx - dx;\n var right = cx + dx;\n var top = cy + dy;\n var bottom = cy - dy;\n if ((_this$view2 = this.view) !== null && _this$view2 !== void 0 && _this$view2.enabled) {\n var scaleW = (this.rright - this.left) / this.view.fullWidth / this.zoom;\n var scaleH = (this.top - this.bottom) / this.view.fullHeight / this.zoom;\n left += scaleW * this.view.offsetX;\n right = left + scaleW * this.view.width;\n top -= scaleH * this.view.offsetY;\n bottom = top - scaleH * this.view.height;\n }\n if (this.clipSpaceNearZ === ClipSpaceNearZ.NEGATIVE_ONE) {\n // FlipY with switching bottom & top.\n // @see https://stackoverflow.com/a/4886656\n mat4.ortho(this.projectionMatrix, left, right, top, bottom, near, far);\n } else {\n mat4.orthoZO(this.projectionMatrix, left, right, top, bottom, near, far);\n }\n mat4.invert(this.projectionMatrixInverse, this.projectionMatrix);\n this._getOrthoMatrix();\n this.triggerUpdate();\n return this;\n }\n\n /**\n * Move the camera in world coordinates.\n * It will keep looking at the current focal point.\n *\n * support scalars or vectors.\n * @example\n * setPosition(1, 2, 3);\n * setPosition([1, 2, 3]);\n */\n }, {\n key: \"setPosition\",\n value: function setPosition(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.position[1];\n var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.position[2];\n var position = createVec3(x, y, z);\n this._setPosition(position);\n this.setFocalPoint(this.focalPoint);\n this.triggerUpdate();\n return this;\n }\n\n /**\n * Sets the focal point of this camera in world coordinates.\n *\n * support scalars or vectors.\n * @example\n * setFocalPoint(1, 2, 3);\n * setFocalPoint([1, 2, 3]);\n */\n }, {\n key: \"setFocalPoint\",\n value: function setFocalPoint(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.focalPoint[1];\n var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.focalPoint[2];\n var up = vec3.fromValues(0, 1, 0);\n this.focalPoint = createVec3(x, y, z);\n if (this.trackingMode === CameraTrackingMode.CINEMATIC) {\n var d = vec3.subtract(vec3.create(), this.focalPoint, this.position);\n x = d[0];\n y = d[1];\n z = d[2];\n var r = vec3.length(d);\n var el = rad2deg(Math.asin(y / r));\n var az = 90 + rad2deg(Math.atan2(z, x));\n var m = mat4.create();\n mat4.rotateY(m, m, deg2rad(az));\n mat4.rotateX(m, m, deg2rad(el));\n up = vec3.transformMat4(vec3.create(), [0, 1, 0], m);\n }\n mat4.invert(this.matrix, mat4.lookAt(mat4.create(), this.position, this.focalPoint, up));\n this._getAxes();\n this._getDistance();\n this._getAngles();\n this.triggerUpdate();\n return this;\n }\n }, {\n key: \"getDistance\",\n value: function getDistance() {\n return this.distance;\n }\n }, {\n key: \"getDistanceVector\",\n value: function getDistanceVector() {\n return this.distanceVector;\n }\n\n /**\n * Moves the camera towards/from the focal point.\n */\n }, {\n key: \"setDistance\",\n value: function setDistance(d) {\n if (this.distance === d || d < 0) {\n return this;\n }\n this.distance = d;\n if (this.distance < MIN_DISTANCE) {\n this.distance = MIN_DISTANCE;\n }\n this.dollyingStep = this.distance / 100;\n var pos = vec3.create();\n d = this.distance;\n var n = this.forward;\n var f = this.focalPoint;\n pos[0] = d * n[0] + f[0];\n pos[1] = d * n[1] + f[1];\n pos[2] = d * n[2] + f[2];\n this._setPosition(pos);\n this.triggerUpdate();\n return this;\n }\n }, {\n key: \"setMaxDistance\",\n value: function setMaxDistance(d) {\n this.maxDistance = d;\n return this;\n }\n }, {\n key: \"setMinDistance\",\n value: function setMinDistance(d) {\n this.minDistance = d;\n return this;\n }\n\n /**\n * 设置相机方位角,不同相机模式下需要重新计算相机位置或者是视点位置\n * the azimuth in degrees\n */\n }, {\n key: \"setAzimuth\",\n value: function setAzimuth(az) {\n this.azimuth = getAngle(az);\n this.computeMatrix();\n this._getAxes();\n if (this.type === CameraType.ORBITING || this.type === CameraType.EXPLORING) {\n this._getPosition();\n } else if (this.type === CameraType.TRACKING) {\n this._getFocalPoint();\n }\n this.triggerUpdate();\n return this;\n }\n }, {\n key: \"getAzimuth\",\n value: function getAzimuth() {\n return this.azimuth;\n }\n\n /**\n * 设置相机方位角,不同相机模式下需要重新计算相机位置或者是视点位置\n */\n }, {\n key: \"setElevation\",\n value: function setElevation(el) {\n this.elevation = getAngle(el);\n this.computeMatrix();\n this._getAxes();\n if (this.type === CameraType.ORBITING || this.type === CameraType.EXPLORING) {\n this._getPosition();\n } else if (this.type === CameraType.TRACKING) {\n this._getFocalPoint();\n }\n this.triggerUpdate();\n return this;\n }\n }, {\n key: \"getElevation\",\n value: function getElevation() {\n return this.elevation;\n }\n\n /**\n * 设置相机方位角,不同相机模式下需要重新计算相机位置或者是视点位置\n */\n }, {\n key: \"setRoll\",\n value: function setRoll(angle) {\n this.roll = getAngle(angle);\n this.computeMatrix();\n this._getAxes();\n if (this.type === CameraType.ORBITING || this.type === CameraType.EXPLORING) {\n this._getPosition();\n } else if (this.type === CameraType.TRACKING) {\n this._getFocalPoint();\n }\n this.triggerUpdate();\n return this;\n }\n }, {\n key: \"getRoll\",\n value: function getRoll() {\n return this.roll;\n }\n\n /**\n * 根据相机矩阵重新计算各种相机参数\n */\n }, {\n key: \"_update\",\n value: function _update() {\n this._getAxes();\n this._getPosition();\n this._getDistance();\n this._getAngles();\n this._getOrthoMatrix();\n this.triggerUpdate();\n }\n\n /**\n * 计算相机矩阵\n */\n }, {\n key: \"computeMatrix\",\n value: function computeMatrix() {\n // 使用四元数描述 3D 旋转\n // @see https://xiaoiver.github.io/coding/2018/12/28/Camera-%E8%AE%BE%E8%AE%A1-%E4%B8%80.html\n var rotZ = quat$1.setAxisAngle(quat$1.create(), [0, 0, 1], deg2rad(this.roll));\n mat4.identity(this.matrix);\n\n // only consider HCS for EXPLORING and ORBITING cameras\n var rotX = quat$1.setAxisAngle(quat$1.create(), [1, 0, 0], deg2rad((this.rotateWorld && this.type !== CameraType.TRACKING || this.type === CameraType.TRACKING ? 1 : -1) * this.elevation));\n var rotY = quat$1.setAxisAngle(quat$1.create(), [0, 1, 0], deg2rad((this.rotateWorld && this.type !== CameraType.TRACKING || this.type === CameraType.TRACKING ? 1 : -1) * this.azimuth));\n var rotQ = quat$1.multiply(quat$1.create(), rotY, rotX);\n rotQ = quat$1.multiply(quat$1.create(), rotQ, rotZ);\n var rotMatrix = mat4.fromQuat(mat4.create(), rotQ);\n if (this.type === CameraType.ORBITING || this.type === CameraType.EXPLORING) {\n mat4.translate(this.matrix, this.matrix, this.focalPoint);\n mat4.multiply(this.matrix, this.matrix, rotMatrix);\n mat4.translate(this.matrix, this.matrix, [0, 0, this.distance]);\n } else if (this.type === CameraType.TRACKING) {\n mat4.translate(this.matrix, this.matrix, this.position);\n mat4.multiply(this.matrix, this.matrix, rotMatrix);\n }\n }\n\n /**\n * Sets the camera position in the camera matrix\n */\n }, {\n key: \"_setPosition\",\n value: function _setPosition(x, y, z) {\n this.position = createVec3(x, y, z);\n var m = this.matrix;\n m[12] = this.position[0];\n m[13] = this.position[1];\n m[14] = this.position[2];\n m[15] = 1;\n this._getOrthoMatrix();\n }\n\n /**\n * Recalculates axes based on the current matrix\n */\n }, {\n key: \"_getAxes\",\n value: function _getAxes() {\n vec3.copy(this.right, createVec3(vec4.transformMat4(vec4.create(), [1, 0, 0, 0], this.matrix)));\n vec3.copy(this.up, createVec3(vec4.transformMat4(vec4.create(), [0, 1, 0, 0], this.matrix)));\n vec3.copy(this.forward, createVec3(vec4.transformMat4(vec4.create(), [0, 0, 1, 0], this.matrix)));\n vec3.normalize(this.right, this.right);\n vec3.normalize(this.up, this.up);\n vec3.normalize(this.forward, this.forward);\n }\n\n /**\n * Recalculates euler angles based on the current state\n */\n }, {\n key: \"_getAngles\",\n value: function _getAngles() {\n // Recalculates angles\n var x = this.distanceVector[0];\n var y = this.distanceVector[1];\n var z = this.distanceVector[2];\n var r = vec3.length(this.distanceVector);\n\n // FAST FAIL: If there is no distance we cannot compute angles\n if (r === 0) {\n this.elevation = 0;\n this.azimuth = 0;\n return;\n }\n if (this.type === CameraType.TRACKING) {\n this.elevation = rad2deg(Math.asin(y / r));\n this.azimuth = rad2deg(Math.atan2(-x, -z));\n } else if (this.rotateWorld) {\n this.elevation = rad2deg(Math.asin(y / r));\n this.azimuth = rad2deg(Math.atan2(-x, -z));\n } else {\n this.elevation = -rad2deg(Math.asin(y / r));\n this.azimuth = -rad2deg(Math.atan2(-x, -z));\n }\n }\n\n /**\n * 重新计算相机位置,只有 ORBITING 模式相机位置才会发生变化\n */\n }, {\n key: \"_getPosition\",\n value: function _getPosition() {\n vec3.copy(this.position, createVec3(vec4.transformMat4(vec4.create(), [0, 0, 0, 1], this.matrix)));\n\n // 相机位置变化,需要重新计算视距\n this._getDistance();\n }\n\n /**\n * 重新计算视点,只有 TRACKING 模式视点才会发生变化\n */\n }, {\n key: \"_getFocalPoint\",\n value: function _getFocalPoint() {\n vec3.transformMat3(this.distanceVector, [0, 0, -this.distance], mat3.fromMat4(mat3.create(), this.matrix));\n vec3.add(this.focalPoint, this.position, this.distanceVector);\n\n // 视点变化,需要重新计算视距\n this._getDistance();\n }\n\n /**\n * 重新计算视距\n */\n }, {\n key: \"_getDistance\",\n value: function _getDistance() {\n this.distanceVector = vec3.subtract(vec3.create(), this.focalPoint, this.position);\n this.distance = vec3.length(this.distanceVector);\n this.dollyingStep = this.distance / 100;\n }\n }, {\n key: \"_getOrthoMatrix\",\n value: function _getOrthoMatrix() {\n if (this.projectionMode !== CameraProjectionMode.ORTHOGRAPHIC) {\n return;\n }\n var position = this.position;\n var rotZ = quat$1.setAxisAngle(quat$1.create(), [0, 0, 1], -this.roll * Math.PI / 180);\n mat4.fromRotationTranslationScaleOrigin(this.orthoMatrix, rotZ, vec3.fromValues((this.rright - this.left) / 2 - position[0], (this.top - this.bottom) / 2 - position[1], 0), vec3.fromValues(this.zoom, this.zoom, 1), position);\n }\n }, {\n key: \"triggerUpdate\",\n value: function triggerUpdate() {\n if (this.enableUpdate) {\n // update frustum\n var viewMatrix = this.getViewTransform();\n var vpMatrix = mat4.multiply(mat4.create(), this.getPerspective(), viewMatrix);\n this.getFrustum().extractFromVPMatrix(vpMatrix);\n this.eventEmitter.emit(CameraEvent.UPDATED);\n }\n }\n }, {\n key: \"rotate\",\n value: function rotate(azimuth, elevation, roll) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"pan\",\n value: function pan(tx, ty) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"dolly\",\n value: function dolly(value) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"createLandmark\",\n value: function createLandmark(name, params) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"gotoLandmark\",\n value: function gotoLandmark(name, options) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"cancelLandmarkAnimation\",\n value: function cancelLandmarkAnimation() {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }]);\n}();\n\n/**\n * @see https://doc.babylonjs.com/how_to/optimizing_your_scene#changing-mesh-culling-strategy\n */\nvar Strategy = /*#__PURE__*/function (Strategy) {\n Strategy[Strategy[\"Standard\"] = 0] = \"Standard\";\n return Strategy;\n}({});\n\nvar SortReason = /*#__PURE__*/function (SortReason) {\n SortReason[SortReason[\"ADDED\"] = 0] = \"ADDED\";\n SortReason[SortReason[\"REMOVED\"] = 1] = \"REMOVED\";\n SortReason[SortReason[\"Z_INDEX_CHANGED\"] = 2] = \"Z_INDEX_CHANGED\";\n return SortReason;\n}({});\n\nvar EMPTY_PARSED_PATH = {\n absolutePath: [],\n hasArc: false,\n segments: [],\n polygons: [],\n polylines: [],\n curve: null,\n totalLength: 0,\n rect: new Rectangle(0, 0, 0, 0)\n};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Content_type\n */\nvar PropertySyntax = /*#__PURE__*/function (PropertySyntax) {\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Content_type#coordinate\n */\n PropertySyntax[\"COORDINATE\"] = \"\";\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Content_type#color\n */\n PropertySyntax[\"COLOR\"] = \"\";\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Content_type#paint\n */\n PropertySyntax[\"PAINT\"] = \"\";\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Content_type#number\n */\n PropertySyntax[\"NUMBER\"] = \"\";\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/angle\n */\n PropertySyntax[\"ANGLE\"] = \"\";\n /**\n * with range 0..1\n * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Content_type#opacity_value\n */\n PropertySyntax[\"OPACITY_VALUE\"] = \"\";\n /**\n * with range 0..Infinity\n */\n PropertySyntax[\"SHADOW_BLUR\"] = \"\";\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Content_type#length\n */\n PropertySyntax[\"LENGTH\"] = \"\";\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Content_type#percentage\n */\n PropertySyntax[\"PERCENTAGE\"] = \"\";\n PropertySyntax[\"LENGTH_PERCENTAGE\"] = \" | \";\n PropertySyntax[\"LENGTH_PERCENTAGE_12\"] = \"[ | ]{1,2}\";\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/margin#formal_syntax\n */\n PropertySyntax[\"LENGTH_PERCENTAGE_14\"] = \"[ | ]{1,4}\";\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Content_type#list-of-ts\n */\n PropertySyntax[\"LIST_OF_POINTS\"] = \"\";\n PropertySyntax[\"PATH\"] = \"\";\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/filter#formal_syntax\n */\n PropertySyntax[\"FILTER\"] = \"\";\n PropertySyntax[\"Z_INDEX\"] = \"\";\n PropertySyntax[\"OFFSET_DISTANCE\"] = \"\";\n PropertySyntax[\"DEFINED_PATH\"] = \"\";\n PropertySyntax[\"MARKER\"] = \"\";\n PropertySyntax[\"TRANSFORM\"] = \"\";\n PropertySyntax[\"TRANSFORM_ORIGIN\"] = \"\";\n PropertySyntax[\"TEXT\"] = \"\";\n PropertySyntax[\"TEXT_TRANSFORM\"] = \"\";\n return PropertySyntax;\n}({});\n\nfunction define(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nfunction extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n\nfunction Color() {}\n\nvar darker = 0.7;\nvar brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nfunction color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nfunction rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nfunction rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nfunction Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nfunction hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nfunction hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n\nfunction memoize(func, resolver) {\n if (typeof func !== 'function' || resolver != null && typeof resolver !== 'function') {\n throw new TypeError('Expected a function');\n }\n var _memoized = function memoized() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n var key = resolver ? resolver.apply(this, args) : args[0];\n var cache = _memoized.cache;\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n _memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n _memoized.cache = new (memoize.Cache || Map)();\n memoize.cacheList.push(_memoized.cache);\n return _memoized;\n}\nmemoize.Cache = Map;\nmemoize.cacheList = [];\nmemoize.clearCache = function () {\n memoize.cacheList.forEach(function (cache) {\n return cache.clear();\n });\n};\n\n// These units are iterated through, so be careful when adding or changing the\n// order.\nvar UnitType = /*#__PURE__*/function (UnitType) {\n UnitType[UnitType[\"kUnknown\"] = 0] = \"kUnknown\";\n UnitType[UnitType[\"kNumber\"] = 1] = \"kNumber\";\n UnitType[UnitType[\"kPercentage\"] = 2] = \"kPercentage\";\n // Length units\n UnitType[UnitType[\"kEms\"] = 3] = \"kEms\";\n // kExs,\n UnitType[UnitType[\"kPixels\"] = 4] = \"kPixels\";\n // kCentimeters,\n // kMillimeters,\n // kInches,\n // kPoints,\n // kPicas,\n // kQuarterMillimeters,\n // https://drafts.csswg.org/css-values-4/#viewport-relative-lengths\n //\n // See also IsViewportPercentageLength.\n // kViewportWidth,\n // kViewportHeight,\n // kViewportInlineSize,\n // kViewportBlockSize,\n // kViewportMin,\n // kViewportMax,\n // kSmallViewportWidth,\n // kSmallViewportHeight,\n // kSmallViewportInlineSize,\n // kSmallViewportBlockSize,\n // kSmallViewportMin,\n // kSmallViewportMax,\n // kLargeViewportWidth,\n // kLargeViewportHeight,\n // kLargeViewportInlineSize,\n // kLargeViewportBlockSize,\n // kLargeViewportMin,\n // kLargeViewportMax,\n // kDynamicViewportWidth,\n // kDynamicViewportHeight,\n // kDynamicViewportInlineSize,\n // kDynamicViewportBlockSize,\n // kDynamicViewportMin,\n // kDynamicViewportMax,\n // https://drafts.csswg.org/css-contain-3/#container-lengths\n //\n // See also IsContainerPercentageLength.\n // kContainerWidth,\n // kContainerHeight,\n // kContainerInlineSize,\n // kContainerBlockSize,\n // kContainerMin,\n // kContainerMax,\n UnitType[UnitType[\"kRems\"] = 5] = \"kRems\";\n // kChs,\n // kUserUnits, // The SVG term for unitless lengths\n // Angle units\n UnitType[UnitType[\"kDegrees\"] = 6] = \"kDegrees\";\n UnitType[UnitType[\"kRadians\"] = 7] = \"kRadians\";\n UnitType[UnitType[\"kGradians\"] = 8] = \"kGradians\";\n UnitType[UnitType[\"kTurns\"] = 9] = \"kTurns\";\n // Time units\n UnitType[UnitType[\"kMilliseconds\"] = 10] = \"kMilliseconds\";\n UnitType[UnitType[\"kSeconds\"] = 11] = \"kSeconds\";\n // kHertz,\n // kKilohertz,\n // Resolution\n // kDotsPerPixel,\n // kDotsPerInch,\n // kDotsPerCentimeter,\n // Other units\n // kFraction,\n UnitType[UnitType[\"kInteger\"] = 12] = \"kInteger\"; // This value is used to handle quirky margins in reflow roots (body, td,\n // and th) like WinIE. The basic idea is that a stylesheet can use the value\n // __qem (for quirky em) instead of em. When the quirky value is used, if\n // you're in quirks mode, the margin will collapse away inside a table cell.\n // This quirk is specified in the HTML spec but our impl is different.\n // TODO: Remove this. crbug.com/443952\n // kQuirkyEms,\n return UnitType;\n}({});\nvar UnitCategory = /*#__PURE__*/function (UnitCategory) {\n UnitCategory[UnitCategory[\"kUNumber\"] = 0] = \"kUNumber\";\n UnitCategory[UnitCategory[\"kUPercent\"] = 1] = \"kUPercent\";\n UnitCategory[UnitCategory[\"kULength\"] = 2] = \"kULength\";\n UnitCategory[UnitCategory[\"kUAngle\"] = 3] = \"kUAngle\";\n UnitCategory[UnitCategory[\"kUTime\"] = 4] = \"kUTime\";\n // kUFrequency,\n // kUResolution,\n UnitCategory[UnitCategory[\"kUOther\"] = 5] = \"kUOther\";\n return UnitCategory;\n}({});\nvar Nested = /*#__PURE__*/function (Nested) {\n Nested[Nested[\"kYes\"] = 0] = \"kYes\";\n Nested[Nested[\"kNo\"] = 1] = \"kNo\";\n return Nested;\n}({});\nvar ParenLess = /*#__PURE__*/function (ParenLess) {\n ParenLess[ParenLess[\"kYes\"] = 0] = \"kYes\";\n ParenLess[ParenLess[\"kNo\"] = 1] = \"kNo\";\n return ParenLess;\n}({});\n\n// This file specifies the unit strings used in CSSPrimitiveValues.\nvar data = [{\n name: 'em',\n unit_type: UnitType.kEms\n},\n// {\n// name: 'ex',\n// unit_type: UnitType.kExs,\n// },\n{\n name: 'px',\n unit_type: UnitType.kPixels\n},\n// {\n// name: \"cm\",\n// unit_type: UnitType.kCentimeters,\n// },\n// {\n// name: \"mm\",\n// unit_type: UnitType.kMillimeters,\n// },\n// {\n// name: \"q\",\n// unit_type: UnitType.kQuarterMillimeters,\n// },\n// {\n// name: \"in\",\n// unit_type: UnitType.kInches,\n// },\n// {\n// name: \"pt\",\n// unit_type: UnitType.kPoints,\n// },\n// {\n// name: \"pc\",\n// unit_type: UnitType.kPicas,\n// },\n{\n name: 'deg',\n unit_type: UnitType.kDegrees\n}, {\n name: 'rad',\n unit_type: UnitType.kRadians\n}, {\n name: 'grad',\n unit_type: UnitType.kGradians\n}, {\n name: 'ms',\n unit_type: UnitType.kMilliseconds\n}, {\n name: 's',\n unit_type: UnitType.kSeconds\n},\n// {\n// name: \"hz\",\n// unit_type: UnitType.kHertz,\n// },\n// {\n// name: \"khz\",\n// unit_type: UnitType.kKilohertz,\n// },\n// {\n// name: \"dpi\",\n// unit_type: \"kDotsPerInch\",\n// },\n// {\n// name: \"dpcm\",\n// unit_type: \"kDotsPerCentimeter\",\n// },\n// {\n// name: \"dppx\",\n// unit_type: \"kDotsPerPixel\",\n// },\n// {\n// name: \"x\",\n// unit_type: \"kDotsPerPixel\",\n// },\n// {\n// name: \"vw\",\n// unit_type: \"kViewportWidth\",\n// },\n// {\n// name: \"vh\",\n// unit_type: \"kViewportHeight\",\n// },\n// {\n// name: \"vi\",\n// unit_type: \"kViewportInlineSize\",\n// },\n// {\n// name: \"vb\",\n// unit_type: \"kViewportBlockSize\",\n// },\n// {\n// name: \"vmin\",\n// unit_type: UnitType.kViewportMin,\n// },\n// {\n// name: \"vmax\",\n// unit_type: UnitType.kViewportMax,\n// },\n// {\n// name: \"svw\",\n// unit_type: \"kSmallViewportWidth\",\n// },\n// {\n// name: \"svh\",\n// unit_type: \"kSmallViewportHeight\",\n// },\n// {\n// name: \"svi\",\n// unit_type: \"kSmallViewportInlineSize\",\n// },\n// {\n// name: \"svb\",\n// unit_type: \"kSmallViewportBlockSize\",\n// },\n// {\n// name: \"svmin\",\n// unit_type: \"kSmallViewportMin\",\n// },\n// {\n// name: \"svmax\",\n// unit_type: \"kSmallViewportMax\",\n// },\n// {\n// name: \"lvw\",\n// unit_type: \"kLargeViewportWidth\",\n// },\n// {\n// name: \"lvh\",\n// unit_type: \"kLargeViewportHeight\",\n// },\n// {\n// name: \"lvi\",\n// unit_type: \"kLargeViewportInlineSize\",\n// },\n// {\n// name: \"lvb\",\n// unit_type: \"kLargeViewportBlockSize\",\n// },\n// {\n// name: \"lvmin\",\n// unit_type: UnitType.kLargeViewportMin,\n// },\n// {\n// name: \"lvmax\",\n// unit_type: UnitType.kLargeViewportMax,\n// },\n// {\n// name: \"dvw\",\n// unit_type: UnitType.kDynamicViewportWidth,\n// },\n// {\n// name: \"dvh\",\n// unit_type: UnitType.kDynamicViewportHeight,\n// },\n// {\n// name: \"dvi\",\n// unit_type: UnitType.kDynamicViewportInlineSize,\n// },\n// {\n// name: \"dvb\",\n// unit_type: UnitType.kDynamicViewportBlockSize,\n// },\n// {\n// name: \"dvmin\",\n// unit_type: UnitType.kDynamicViewportMin,\n// },\n// {\n// name: \"dvmax\",\n// unit_type: UnitType.kDynamicViewportMax,\n// },\n// {\n// name: \"cqw\",\n// unit_type: UnitType.kContainerWidth,\n// },\n// {\n// name: \"cqh\",\n// unit_type: UnitType.kContainerHeight,\n// },\n// {\n// name: \"cqi\",\n// unit_type: UnitType.kContainerInlineSize,\n// },\n// {\n// name: \"cqb\",\n// unit_type: UnitType.kContainerBlockSize,\n// },\n// {\n// name: \"cqmin\",\n// unit_type: UnitType.kContainerMin,\n// },\n// {\n// name: \"cqmax\",\n// unit_type: UnitType.kContainerMax,\n// },\n{\n name: 'rem',\n unit_type: UnitType.kRems\n},\n// {\n// name: 'fr',\n// unit_type: UnitType.kFraction,\n// },\n{\n name: 'turn',\n unit_type: UnitType.kTurns\n}\n// {\n// name: 'ch',\n// unit_type: UnitType.kChs,\n// },\n// {\n// name: '__qem',\n// unit_type: UnitType.kQuirkyEms,\n// },\n];\nvar CSSStyleValueType = /*#__PURE__*/function (CSSStyleValueType) {\n CSSStyleValueType[CSSStyleValueType[\"kUnknownType\"] = 0] = \"kUnknownType\";\n CSSStyleValueType[CSSStyleValueType[\"kUnparsedType\"] = 1] = \"kUnparsedType\";\n CSSStyleValueType[CSSStyleValueType[\"kKeywordType\"] = 2] = \"kKeywordType\";\n // Start of CSSNumericValue subclasses\n CSSStyleValueType[CSSStyleValueType[\"kUnitType\"] = 3] = \"kUnitType\";\n CSSStyleValueType[CSSStyleValueType[\"kSumType\"] = 4] = \"kSumType\";\n CSSStyleValueType[CSSStyleValueType[\"kProductType\"] = 5] = \"kProductType\";\n CSSStyleValueType[CSSStyleValueType[\"kNegateType\"] = 6] = \"kNegateType\";\n CSSStyleValueType[CSSStyleValueType[\"kInvertType\"] = 7] = \"kInvertType\";\n CSSStyleValueType[CSSStyleValueType[\"kMinType\"] = 8] = \"kMinType\";\n CSSStyleValueType[CSSStyleValueType[\"kMaxType\"] = 9] = \"kMaxType\";\n CSSStyleValueType[CSSStyleValueType[\"kClampType\"] = 10] = \"kClampType\";\n // End of CSSNumericValue subclasses\n CSSStyleValueType[CSSStyleValueType[\"kTransformType\"] = 11] = \"kTransformType\";\n CSSStyleValueType[CSSStyleValueType[\"kPositionType\"] = 12] = \"kPositionType\";\n CSSStyleValueType[CSSStyleValueType[\"kURLImageType\"] = 13] = \"kURLImageType\";\n CSSStyleValueType[CSSStyleValueType[\"kColorType\"] = 14] = \"kColorType\";\n CSSStyleValueType[CSSStyleValueType[\"kUnsupportedColorType\"] = 15] = \"kUnsupportedColorType\";\n return CSSStyleValueType;\n}({});\n\n// function parseCSSStyleValue(propertyName: string, value: string): CSSStyleValue[] {\n// // const propertyId = cssPropertyID(propertyName);\n\n// // if (propertyId === CSSPropertyID.kInvalid) {\n// // return [];\n// // }\n\n// // const customPropertyName = propertyId === CSSPropertyID.kVariable ? propertyName : null;\n// // return fromString(propertyId, customPropertyName, value);\n// return [];\n// }\n\nvar stringToUnitType = function stringToUnitType(name) {\n return data.find(function (item) {\n return item.name === name;\n }).unit_type;\n};\nvar unitFromName = function unitFromName(name) {\n if (!name) {\n return UnitType.kUnknown;\n }\n if (name === 'number') {\n return UnitType.kNumber;\n }\n if (name === 'percent' || name === '%') {\n return UnitType.kPercentage;\n }\n return stringToUnitType(name);\n};\nvar unitTypeToUnitCategory = function unitTypeToUnitCategory(type) {\n switch (type) {\n case UnitType.kNumber:\n case UnitType.kInteger:\n return UnitCategory.kUNumber;\n case UnitType.kPercentage:\n return UnitCategory.kUPercent;\n case UnitType.kPixels:\n // case UnitType.kCentimeters:\n // case UnitType.kMillimeters:\n // case UnitType.kQuarterMillimeters:\n // case UnitType.kInches:\n // case UnitType.kPoints:\n // case UnitType.kPicas:\n // case UnitType.kUserUnits:\n return UnitCategory.kULength;\n case UnitType.kMilliseconds:\n case UnitType.kSeconds:\n return UnitCategory.kUTime;\n case UnitType.kDegrees:\n case UnitType.kRadians:\n case UnitType.kGradians:\n case UnitType.kTurns:\n return UnitCategory.kUAngle;\n // case UnitType.kHertz:\n // case UnitType.kKilohertz:\n // return UnitCategory.kUFrequency;\n // case UnitType.kDotsPerPixel:\n // case UnitType.kDotsPerInch:\n // case UnitType.kDotsPerCentimeter:\n // return UnitCategory.kUResolution;\n default:\n return UnitCategory.kUOther;\n }\n};\nvar canonicalUnitTypeForCategory = function canonicalUnitTypeForCategory(category) {\n // The canonical unit type is chosen according to the way\n // CSSPropertyParser.ValidUnit() chooses the default unit in each category\n // (based on unitflags).\n switch (category) {\n case UnitCategory.kUNumber:\n return UnitType.kNumber;\n case UnitCategory.kULength:\n return UnitType.kPixels;\n case UnitCategory.kUPercent:\n return UnitType.kPercentage;\n // return UnitType.kUnknown; // Cannot convert between numbers and percent.\n case UnitCategory.kUTime:\n return UnitType.kSeconds;\n case UnitCategory.kUAngle:\n return UnitType.kDegrees;\n // case UnitCategory.kUFrequency:\n // return UnitType.kHertz;\n // case UnitCategory.kUResolution:\n // return UnitType.kDotsPerPixel;\n default:\n return UnitType.kUnknown;\n }\n};\n\n/**\n * @see https://chromium.googlesource.com/chromium/src/+/refs/heads/main/third_party/blink/renderer/core/css/css_primitive_value.cc#353\n */\nvar conversionToCanonicalUnitsScaleFactor = function conversionToCanonicalUnitsScaleFactor(unit_type) {\n var factor = 1.0;\n // FIXME: the switch can be replaced by an array of scale factors.\n switch (unit_type) {\n // These are \"canonical\" units in their respective categories.\n case UnitType.kPixels:\n // case UnitType.kUserUnits:\n case UnitType.kDegrees:\n case UnitType.kSeconds:\n // case UnitType.kHertz:\n break;\n case UnitType.kMilliseconds:\n factor = 0.001;\n break;\n // case UnitType.kCentimeters:\n // // factor = kCssPixelsPerCentimeter;\n // break;\n // case UnitType.kDotsPerCentimeter:\n // // factor = 1 / kCssPixelsPerCentimeter;\n // break;\n // case UnitType.kMillimeters:\n // // factor = kCssPixelsPerMillimeter;\n // break;\n // case UnitType.kQuarterMillimeters:\n // // factor = kCssPixelsPerQuarterMillimeter;\n // break;\n // case UnitType.kInches:\n // // factor = kCssPixelsPerInch;\n // break;\n // case UnitType.kDotsPerInch:\n // // factor = 1 / kCssPixelsPerInch;\n // break;\n // case UnitType.kPoints:\n // // factor = kCssPixelsPerPoint;\n // break;\n // case UnitType.kPicas:\n // // factor = kCssPixelsPerPica;\n // break;\n case UnitType.kRadians:\n factor = 180 / Math.PI;\n break;\n case UnitType.kGradians:\n factor = 0.9;\n break;\n case UnitType.kTurns:\n factor = 360;\n break;\n }\n return factor;\n};\nvar unitTypeToString = function unitTypeToString(type) {\n switch (type) {\n case UnitType.kNumber:\n case UnitType.kInteger:\n // case UnitType.kUserUnits:\n return '';\n case UnitType.kPercentage:\n return '%';\n case UnitType.kEms:\n // case UnitType.kQuirkyEms:\n return 'em';\n // case UnitType.kExs:\n // return 'ex';\n case UnitType.kRems:\n return 'rem';\n // case UnitType.kChs:\n // return 'ch';\n case UnitType.kPixels:\n return 'px';\n // case UnitType.kCentimeters:\n // return 'cm';\n // case UnitType.kDotsPerPixel:\n // return 'dppx';\n // case UnitType.kDotsPerInch:\n // return 'dpi';\n // case UnitType.kDotsPerCentimeter:\n // return 'dpcm';\n // case UnitType.kMillimeters:\n // return 'mm';\n // case UnitType.kQuarterMillimeters:\n // return 'q';\n // case UnitType.kInches:\n // return 'in';\n // case UnitType.kPoints:\n // return 'pt';\n // case UnitType.kPicas:\n // return 'pc';\n case UnitType.kDegrees:\n return 'deg';\n case UnitType.kRadians:\n return 'rad';\n case UnitType.kGradians:\n return 'grad';\n case UnitType.kMilliseconds:\n return 'ms';\n case UnitType.kSeconds:\n return 's';\n // case UnitType.kHertz:\n // return 'hz';\n // case UnitType.kKilohertz:\n // return 'khz';\n case UnitType.kTurns:\n return 'turn';\n }\n return '';\n};\n\n/**\n * CSSStyleValue is the base class for all CSS values accessible from Typed OM.\n * Values that are not yet supported as specific types are also returned as base CSSStyleValues.\n *\n * Spec @see https://drafts.css-houdini.org/css-typed-om/#stylevalue-objects\n * Docs @see https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleValue\n */\nvar CSSStyleValue = /*#__PURE__*/function () {\n function CSSStyleValue() {\n _classCallCheck(this, CSSStyleValue);\n }\n return _createClass(CSSStyleValue, [{\n key: \"toString\",\n value:\n // protected abstract toCSSValue(): CSSValue;\n\n function toString() {\n return this.buildCSSText(Nested.kNo, ParenLess.kNo, '');\n }\n }, {\n key: \"isNumericValue\",\n value: function isNumericValue() {\n return this.getType() >= CSSStyleValueType.kUnitType && this.getType() <= CSSStyleValueType.kClampType;\n }\n }], [{\n key: \"isAngle\",\n value:\n // static parse(propertyName: string, value: string): CSSStyleValue {\n // return parseCSSStyleValue(propertyName, value)[0];\n // }\n\n // static parseAll(propertyName: string, value: string): CSSStyleValue[] {\n // return parseCSSStyleValue(propertyName, value);\n // }\n\n function isAngle(unit) {\n return unit === UnitType.kDegrees || unit === UnitType.kRadians || unit === UnitType.kGradians || unit === UnitType.kTurns;\n }\n\n // static isViewportPercentageLength(type: UnitType) {\n // return type >= UnitType.kViewportWidth && type <= UnitType.kDynamicViewportMax;\n // }\n\n // static isContainerPercentageLength(type: UnitType) {\n // return type >= UnitType.kContainerWidth && type <= UnitType.kContainerMax;\n // }\n }, {\n key: \"isLength\",\n value: function isLength(type) {\n // return (type >= UnitType.kEms && type <= UnitType.kUserUnits) || type == UnitType.kQuirkyEms;\n return type >= UnitType.kEms && type < UnitType.kDegrees;\n }\n }, {\n key: \"isRelativeUnit\",\n value: function isRelativeUnit(type) {\n return type === UnitType.kPercentage || type === UnitType.kEms ||\n // type === UnitType.kExs ||\n type === UnitType.kRems\n // type === UnitType.kChs ||\n // this.isViewportPercentageLength(type) ||\n // this.isContainerPercentageLength(type)\n ;\n }\n }, {\n key: \"isTime\",\n value: function isTime(unit) {\n return unit === UnitType.kSeconds || unit === UnitType.kMilliseconds;\n }\n\n // static isFrequency(unit: UnitType) {\n // return unit == UnitType.kHertz || unit == UnitType.kKilohertz;\n // }\n\n // static isResolution(type: UnitType) {\n // return type >= UnitType.kDotsPerPixel && type <= UnitType.kDotsPerCentimeter;\n // }\n\n // static isFlex(unit: UnitType) {\n // return unit === UnitType.kFraction;\n // }\n }]);\n}();\n\n/**\n * @see https://drafts.css-houdini.org/css-typed-om-1/#dom-csscolorvalue-colorspace\n */\n\n/**\n * CSSColorValue is the base class used for the various CSS color interfaces.\n *\n * @see https://drafts.css-houdini.org/css-typed-om-1/#colorvalue-objects\n */\nvar CSSColorValue = /*#__PURE__*/function (_CSSStyleValue) {\n function CSSColorValue(colorSpace) {\n var _this;\n _classCallCheck(this, CSSColorValue);\n _this = _callSuper(this, CSSColorValue);\n _this.colorSpace = colorSpace;\n return _this;\n }\n _inherits(CSSColorValue, _CSSStyleValue);\n return _createClass(CSSColorValue, [{\n key: \"getType\",\n value: function getType() {\n return CSSStyleValueType.kColorType;\n }\n\n /**\n * @see https://drafts.css-houdini.org/css-typed-om-1/#dom-csscolorvalue-to\n */\n }, {\n key: \"to\",\n value: function to(colorSpace) {\n return this;\n }\n }]);\n}(CSSStyleValue);\n\nvar GradientType = /*#__PURE__*/function (GradientType) {\n GradientType[GradientType[\"Constant\"] = 0] = \"Constant\";\n GradientType[GradientType[\"LinearGradient\"] = 1] = \"LinearGradient\";\n GradientType[GradientType[\"RadialGradient\"] = 2] = \"RadialGradient\";\n return GradientType;\n}({});\nvar CSSGradientValue = /*#__PURE__*/function (_CSSStyleValue) {\n function CSSGradientValue(type, value) {\n var _this;\n _classCallCheck(this, CSSGradientValue);\n _this = _callSuper(this, CSSGradientValue);\n _this.type = type;\n _this.value = value;\n return _this;\n }\n _inherits(CSSGradientValue, _CSSStyleValue);\n return _createClass(CSSGradientValue, [{\n key: \"clone\",\n value: function clone() {\n return new CSSGradientValue(this.type, this.value);\n }\n }, {\n key: \"buildCSSText\",\n value: function buildCSSText(n, p, result) {\n return result;\n }\n }, {\n key: \"getType\",\n value: function getType() {\n return CSSStyleValueType.kColorType;\n }\n }]);\n}(CSSStyleValue);\n\n/**\n * CSSKeywordValue represents CSS Values that are specified as keywords\n * eg. 'initial'\n * @see https://developer.mozilla.org/en-US/docs/Web/API/CSSKeywordValue\n * @see https://chromium.googlesource.com/chromium/src/+/refs/heads/main/third_party/blink/renderer/core/css/cssom/css_keyword_value.idl\n */\nvar CSSKeywordValue = /*#__PURE__*/function (_CSSStyleValue) {\n function CSSKeywordValue(value) {\n var _this;\n _classCallCheck(this, CSSKeywordValue);\n _this = _callSuper(this, CSSKeywordValue);\n _this.value = value;\n return _this;\n }\n _inherits(CSSKeywordValue, _CSSStyleValue);\n return _createClass(CSSKeywordValue, [{\n key: \"clone\",\n value: function clone() {\n return new CSSKeywordValue(this.value);\n }\n }, {\n key: \"getType\",\n value: function getType() {\n return CSSStyleValueType.kKeywordType;\n }\n }, {\n key: \"buildCSSText\",\n value: function buildCSSText(n, p, result) {\n return result + this.value;\n }\n }]);\n}(CSSStyleValue);\n\nvar formatInfinityOrNaN = function formatInfinityOrNaN(number) {\n var suffix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var result = '';\n if (!Number.isFinite(number)) {\n if (number > 0) result = 'infinity';else result = '-infinity';\n } else {\n result = 'NaN';\n }\n return result += suffix;\n};\nvar toCanonicalUnit = function toCanonicalUnit(unit) {\n return canonicalUnitTypeForCategory(unitTypeToUnitCategory(unit));\n};\n\n/**\n * CSSNumericValue is the base class for numeric and length typed CSS Values.\n * @see https://drafts.css-houdini.org/css-typed-om/#numeric-objects\n * @see https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericValue\n * @see https://chromium.googlesource.com/chromium/src/+/refs/heads/main/third_party/blink/renderer/core/css/cssom/css_numeric_value.idl\n */\n\n/**\n * Represents numeric values that can be expressed as a single number plus a\n * unit (or a naked number or percentage).\n * @see https://drafts.css-houdini.org/css-typed-om/#cssunitvalue\n */\nvar CSSUnitValue = /*#__PURE__*/function (_CSSStyleValue) {\n function CSSUnitValue(value) {\n var _this;\n var unitOrName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : UnitType.kNumber;\n _classCallCheck(this, CSSUnitValue);\n _this = _callSuper(this, CSSUnitValue);\n var unit;\n if (typeof unitOrName === 'string') {\n unit = unitFromName(unitOrName);\n } else {\n unit = unitOrName;\n }\n _this.unit = unit;\n _this.value = value;\n return _this;\n }\n _inherits(CSSUnitValue, _CSSStyleValue);\n return _createClass(CSSUnitValue, [{\n key: \"clone\",\n value: function clone() {\n return new CSSUnitValue(this.value, this.unit);\n }\n }, {\n key: \"equals\",\n value: function equals(other) {\n var other_unit_value = other;\n return this.value === other_unit_value.value && this.unit === other_unit_value.unit;\n }\n }, {\n key: \"getType\",\n value: function getType() {\n return CSSStyleValueType.kUnitType;\n }\n }, {\n key: \"convertTo\",\n value: function convertTo(target_unit) {\n if (this.unit === target_unit) {\n return new CSSUnitValue(this.value, this.unit);\n }\n\n // Instead of defining the scale factors for every unit to every other unit,\n // we simply convert to the canonical unit and back since we already have\n // the scale factors for canonical units.\n var canonical_unit = toCanonicalUnit(this.unit);\n if (canonical_unit !== toCanonicalUnit(target_unit) || canonical_unit === UnitType.kUnknown) {\n return null;\n }\n var scale_factor = conversionToCanonicalUnitsScaleFactor(this.unit) / conversionToCanonicalUnitsScaleFactor(target_unit);\n return new CSSUnitValue(this.value * scale_factor, target_unit);\n }\n }, {\n key: \"buildCSSText\",\n value: function buildCSSText(n, p, result) {\n var text;\n switch (this.unit) {\n case UnitType.kUnknown:\n // FIXME\n break;\n case UnitType.kInteger:\n text = Number(this.value).toFixed(0);\n break;\n case UnitType.kNumber:\n case UnitType.kPercentage:\n case UnitType.kEms:\n // case UnitType.kQuirkyEms:\n // case UnitType.kExs:\n case UnitType.kRems:\n // case UnitType.kChs:\n case UnitType.kPixels:\n // case UnitType.kCentimeters:\n // case UnitType.kDotsPerPixel:\n // case UnitType.kDotsPerInch:\n // case UnitType.kDotsPerCentimeter:\n // case UnitType.kMillimeters:\n // case UnitType.kQuarterMillimeters:\n // case UnitType.kInches:\n // case UnitType.kPoints:\n // case UnitType.kPicas:\n // case UnitType.kUserUnits:\n case UnitType.kDegrees:\n case UnitType.kRadians:\n case UnitType.kGradians:\n case UnitType.kMilliseconds:\n case UnitType.kSeconds:\n // case UnitType.kHertz:\n // case UnitType.kKilohertz:\n case UnitType.kTurns:\n {\n // case UnitType.kContainerMax: { // case UnitType.kContainerMin: // case UnitType.kContainerBlockSize: // case UnitType.kContainerInlineSize: // case UnitType.kContainerHeight: // case UnitType.kContainerWidth: // case UnitType.kDynamicViewportMax: // case UnitType.kDynamicViewportMin: // case UnitType.kDynamicViewportBlockSize: // case UnitType.kDynamicViewportInlineSize: // case UnitType.kDynamicViewportHeight: // case UnitType.kDynamicViewportWidth: // case UnitType.kLargeViewportMax: // case UnitType.kLargeViewportMin: // case UnitType.kLargeViewportBlockSize: // case UnitType.kLargeViewportInlineSize: // case UnitType.kLargeViewportHeight: // case UnitType.kLargeViewportWidth: // case UnitType.kSmallViewportMax: // case UnitType.kSmallViewportMin: // case UnitType.kSmallViewportBlockSize: // case UnitType.kSmallViewportInlineSize: // case UnitType.kSmallViewportHeight: // case UnitType.kSmallViewportWidth: // case UnitType.kViewportMax: // case UnitType.kViewportMin: // case UnitType.kViewportBlockSize: // case UnitType.kViewportInlineSize: // case UnitType.kViewportHeight: // case UnitType.kViewportWidth: // case UnitType.kFraction:\n var kMinInteger = -999999;\n var kMaxInteger = 999999;\n var value = this.value;\n var unit = unitTypeToString(this.unit);\n if (value < kMinInteger || value > kMaxInteger) {\n var _unit = unitTypeToString(this.unit);\n if (!Number.isFinite(value) || Number.isNaN(value)) {\n text = formatInfinityOrNaN(value, _unit);\n } else {\n text = value + (_unit || '');\n }\n } else {\n text = \"\".concat(value).concat(unit);\n }\n }\n }\n result += text;\n return result;\n }\n }]);\n}(CSSStyleValue);\nvar Opx = new CSSUnitValue(0, 'px');\nnew CSSUnitValue(1, 'px');\nvar Odeg = new CSSUnitValue(0, 'deg');\n\n/**\n * The CSSRGB class represents the CSS rgb()/rgba() functions.\n *\n * @see https://drafts.css-houdini.org/css-typed-om-1/#cssrgb\n */\nvar CSSRGB = /*#__PURE__*/function (_CSSColorValue) {\n function CSSRGB(r, g, b) {\n var _this;\n var alpha = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n var isNone = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n _classCallCheck(this, CSSRGB);\n _this = _callSuper(this, CSSRGB, ['rgb']);\n _this.r = r;\n _this.g = g;\n _this.b = b;\n _this.alpha = alpha;\n _this.isNone = isNone;\n return _this;\n }\n _inherits(CSSRGB, _CSSColorValue);\n return _createClass(CSSRGB, [{\n key: \"clone\",\n value: function clone() {\n return new CSSRGB(this.r, this.g, this.b, this.alpha);\n }\n }, {\n key: \"buildCSSText\",\n value: function buildCSSText(n, p, result) {\n return \"\".concat(result, \"rgba(\").concat(this.r, \",\").concat(this.g, \",\").concat(this.b, \",\").concat(this.alpha, \")\");\n }\n }]);\n}(CSSColorValue);\n\n/**\n * CSSKeywordValue\n */\nvar unsetKeywordValue = new CSSKeywordValue('unset');\nvar initialKeywordValue = new CSSKeywordValue('initial');\nvar inheritKeywordValue = new CSSKeywordValue('inherit');\nvar keywordCache = {\n '': unsetKeywordValue,\n unset: unsetKeywordValue,\n initial: initialKeywordValue,\n inherit: inheritKeywordValue\n};\nvar getOrCreateKeyword = function getOrCreateKeyword(name) {\n if (!keywordCache[name]) {\n keywordCache[name] = new CSSKeywordValue(name);\n }\n return keywordCache[name];\n};\n\n/**\n * CSSColor\n */\nvar noneColor = new CSSRGB(0, 0, 0, 0, true);\nvar transparentColor = new CSSRGB(0, 0, 0, 0);\nvar getOrCreateRGBA = memoize(function (r, g, b, a) {\n return new CSSRGB(r, g, b, a);\n}, function (r, g, b, a) {\n return \"rgba(\".concat(r, \",\").concat(g, \",\").concat(b, \",\").concat(a, \")\");\n});\n\n// export const getOrCreateUnitValue = memoize(\n// (value: number, unitOrName: UnitType | string = UnitType.kNumber) => {\n// return new CSSUnitValue(value, unitOrName);\n// },\n// (value: number, unitOrName: UnitType | string = UnitType.kNumber) => {\n// return `${value}${unitOrName}`;\n// },\n// );\n\nvar getOrCreateUnitValue = function getOrCreateUnitValue(value) {\n var unitOrName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : UnitType.kNumber;\n return new CSSUnitValue(value, unitOrName);\n};\nnew CSSUnitValue(50, '%');\n\n/**\n * borrow from gradient-parser, but we delete some browser compatible prefix such as `-webkit-`\n * @see https://github.com/rafaelcaricio/gradient-parser\n */\n\nfunction colorStopToString(colorStop) {\n var type = colorStop.type,\n value = colorStop.value;\n if (type === 'hex') {\n return \"#\".concat(value);\n }\n if (type === 'literal') {\n return value;\n }\n if (type === 'rgb') {\n return \"rgb(\".concat(value.join(','), \")\");\n }\n return \"rgba(\".concat(value.join(','), \")\");\n}\nvar parseGradient$1 = function () {\n var tokens = {\n linearGradient: /^(linear\\-gradient)/i,\n repeatingLinearGradient: /^(repeating\\-linear\\-gradient)/i,\n radialGradient: /^(radial\\-gradient)/i,\n repeatingRadialGradient: /^(repeating\\-radial\\-gradient)/i,\n /**\n * @see https://projects.verou.me/conic-gradient/\n */\n conicGradient: /^(conic\\-gradient)/i,\n sideOrCorner: /^to (left (top|bottom)|right (top|bottom)|top (left|right)|bottom (left|right)|left|right|top|bottom)/i,\n extentKeywords: /^(closest\\-side|closest\\-corner|farthest\\-side|farthest\\-corner|contain|cover)/,\n positionKeywords: /^(left|center|right|top|bottom)/i,\n pixelValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))px/,\n percentageValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))\\%/,\n emValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))em/,\n angleValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))deg/,\n startCall: /^\\(/,\n endCall: /^\\)/,\n comma: /^,/,\n hexColor: /^\\#([0-9a-fA-F]+)/,\n literalColor: /^([a-zA-Z]+)/,\n rgbColor: /^rgb/i,\n rgbaColor: /^rgba/i,\n number: /^(([0-9]*\\.[0-9]+)|([0-9]+\\.?))/\n };\n var input = '';\n function error(msg) {\n throw new Error(\"\".concat(input, \": \").concat(msg));\n }\n function getAST() {\n var ast = matchListDefinitions();\n if (input.length > 0) {\n error('Invalid input not EOF');\n }\n return ast;\n }\n function matchListDefinitions() {\n return matchListing(matchDefinition);\n }\n function matchDefinition() {\n return matchGradient('linear-gradient', tokens.linearGradient, matchLinearOrientation) || matchGradient('repeating-linear-gradient', tokens.repeatingLinearGradient, matchLinearOrientation) || matchGradient('radial-gradient', tokens.radialGradient, matchListRadialOrientations) || matchGradient('repeating-radial-gradient', tokens.repeatingRadialGradient, matchListRadialOrientations) || matchGradient('conic-gradient', tokens.conicGradient, matchListRadialOrientations);\n }\n function matchGradient(gradientType, pattern, orientationMatcher) {\n return matchCall(pattern, function (captures) {\n var orientation = orientationMatcher();\n if (orientation) {\n if (!scan(tokens.comma)) {\n error('Missing comma before color stops');\n }\n }\n return {\n type: gradientType,\n orientation: orientation,\n colorStops: matchListing(matchColorStop)\n };\n });\n }\n function matchCall(pattern, callback) {\n var captures = scan(pattern);\n if (captures) {\n if (!scan(tokens.startCall)) {\n error('Missing (');\n }\n var result = callback(captures);\n if (!scan(tokens.endCall)) {\n error('Missing )');\n }\n return result;\n }\n }\n function matchLinearOrientation() {\n return matchSideOrCorner() || matchAngle();\n }\n function matchSideOrCorner() {\n return match('directional', tokens.sideOrCorner, 1);\n }\n function matchAngle() {\n return match('angular', tokens.angleValue, 1);\n }\n function matchListRadialOrientations() {\n var radialOrientations;\n var radialOrientation = matchRadialOrientation();\n var lookaheadCache;\n if (radialOrientation) {\n radialOrientations = [];\n radialOrientations.push(radialOrientation);\n lookaheadCache = input;\n if (scan(tokens.comma)) {\n radialOrientation = matchRadialOrientation();\n if (radialOrientation) {\n radialOrientations.push(radialOrientation);\n } else {\n input = lookaheadCache;\n }\n }\n }\n return radialOrientations;\n }\n function matchRadialOrientation() {\n var radialType = matchCircle() || matchEllipse();\n if (radialType) {\n // @ts-ignore\n radialType.at = matchAtPosition();\n } else {\n var extent = matchExtentKeyword();\n if (extent) {\n radialType = extent;\n var positionAt = matchAtPosition();\n if (positionAt) {\n // @ts-ignore\n radialType.at = positionAt;\n }\n } else {\n var defaultPosition = matchPositioning();\n if (defaultPosition) {\n radialType = {\n type: 'default-radial',\n // @ts-ignore\n at: defaultPosition\n };\n }\n }\n }\n return radialType;\n }\n function matchCircle() {\n var circle = match('shape', /^(circle)/i, 0);\n if (circle) {\n // @ts-ignore\n circle.style = matchLength() || matchExtentKeyword();\n }\n return circle;\n }\n function matchEllipse() {\n var ellipse = match('shape', /^(ellipse)/i, 0);\n if (ellipse) {\n // @ts-ignore\n ellipse.style = matchDistance() || matchExtentKeyword();\n }\n return ellipse;\n }\n function matchExtentKeyword() {\n return match('extent-keyword', tokens.extentKeywords, 1);\n }\n function matchAtPosition() {\n if (match('position', /^at/, 0)) {\n var positioning = matchPositioning();\n if (!positioning) {\n error('Missing positioning value');\n }\n return positioning;\n }\n }\n function matchPositioning() {\n var location = matchCoordinates();\n if (location.x || location.y) {\n return {\n type: 'position',\n value: location\n };\n }\n }\n function matchCoordinates() {\n return {\n x: matchDistance(),\n y: matchDistance()\n };\n }\n function matchListing(matcher) {\n var captures = matcher();\n var result = [];\n if (captures) {\n result.push(captures);\n while (scan(tokens.comma)) {\n captures = matcher();\n if (captures) {\n result.push(captures);\n } else {\n error('One extra comma');\n }\n }\n }\n return result;\n }\n function matchColorStop() {\n var color = matchColor();\n if (!color) {\n error('Expected color definition');\n }\n color.length = matchDistance();\n return color;\n }\n function matchColor() {\n return matchHexColor() || matchRGBAColor() || matchRGBColor() || matchLiteralColor();\n }\n function matchLiteralColor() {\n return match('literal', tokens.literalColor, 0);\n }\n function matchHexColor() {\n return match('hex', tokens.hexColor, 1);\n }\n function matchRGBColor() {\n return matchCall(tokens.rgbColor, function () {\n return {\n type: 'rgb',\n value: matchListing(matchNumber)\n };\n });\n }\n function matchRGBAColor() {\n return matchCall(tokens.rgbaColor, function () {\n return {\n type: 'rgba',\n value: matchListing(matchNumber)\n };\n });\n }\n function matchNumber() {\n return scan(tokens.number)[1];\n }\n function matchDistance() {\n return match('%', tokens.percentageValue, 1) || matchPositionKeyword() || matchLength();\n }\n function matchPositionKeyword() {\n return match('position-keyword', tokens.positionKeywords, 1);\n }\n function matchLength() {\n return match('px', tokens.pixelValue, 1) || match('em', tokens.emValue, 1);\n }\n function match(type, pattern, captureIndex) {\n var captures = scan(pattern);\n if (captures) {\n return {\n type: type,\n value: captures[captureIndex]\n };\n }\n }\n function scan(regexp) {\n var blankCaptures = /^[\\n\\r\\t\\s]+/.exec(input);\n if (blankCaptures) {\n consume(blankCaptures[0].length);\n }\n var captures = regexp.exec(input);\n if (captures) {\n consume(captures[0].length);\n }\n return captures;\n }\n function consume(size) {\n input = input.substring(size);\n }\n return function (code) {\n input = code;\n return getAST();\n };\n}();\nfunction computeLinearGradient(min, width, height, angle) {\n var rad = deg2rad(angle.value);\n var rx = 0;\n var ry = 0;\n var rcx = rx + width / 2;\n var rcy = ry + height / 2;\n // get the length of gradient line\n // @see https://observablehq.com/@danburzo/css-gradient-line\n var length = Math.abs(width * Math.cos(rad)) + Math.abs(height * Math.sin(rad));\n var x1 = min[0] + rcx - Math.cos(rad) * length / 2;\n var y1 = min[1] + rcy - Math.sin(rad) * length / 2;\n var x2 = min[0] + rcx + Math.cos(rad) * length / 2;\n var y2 = min[1] + rcy + Math.sin(rad) * length / 2;\n return {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n };\n}\nfunction computeRadialGradient(min, width, height, cx, cy, size) {\n // 'px'\n var x = cx.value;\n var y = cy.value;\n\n // TODO: 'em'\n\n // '%'\n if (cx.unit === UnitType.kPercentage) {\n x = cx.value / 100 * width;\n }\n if (cy.unit === UnitType.kPercentage) {\n y = cy.value / 100 * height;\n }\n\n // default to farthest-side\n var r = Math.max(distanceSquareRoot([0, 0], [x, y]), distanceSquareRoot([0, height], [x, y]), distanceSquareRoot([width, height], [x, y]), distanceSquareRoot([width, 0], [x, y]));\n if (size) {\n if (size instanceof CSSUnitValue) {\n r = size.value;\n } else if (size instanceof CSSKeywordValue) {\n // @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Images/Using_CSS_gradients#example_closest-side_for_circles\n if (size.value === 'closest-side') {\n r = Math.min(x, width - x, y, height - y);\n } else if (size.value === 'farthest-side') {\n r = Math.max(x, width - x, y, height - y);\n } else if (size.value === 'closest-corner') {\n r = Math.min(distanceSquareRoot([0, 0], [x, y]), distanceSquareRoot([0, height], [x, y]), distanceSquareRoot([width, height], [x, y]), distanceSquareRoot([width, 0], [x, y]));\n }\n }\n }\n return {\n x: x + min[0],\n y: y + min[1],\n r: r\n };\n}\n\nvar regexLG = /^l\\s*\\(\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexRG = /^r\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexPR = /^p\\s*\\(\\s*([axyn])\\s*\\)\\s*(.*)/i;\nvar regexColorStop = /[\\d.]+:(#[^\\s]+|[^\\)]+\\))/gi;\nfunction spaceColorStops(colorStops) {\n var _colorStops$length;\n var length = colorStops.length;\n colorStops[length - 1].length = (_colorStops$length = colorStops[length - 1].length) !== null && _colorStops$length !== void 0 ? _colorStops$length : {\n type: '%',\n value: '100'\n };\n if (length > 1) {\n var _colorStops$0$length;\n colorStops[0].length = (_colorStops$0$length = colorStops[0].length) !== null && _colorStops$0$length !== void 0 ? _colorStops$0$length : {\n type: '%',\n value: '0'\n };\n }\n var previousIndex = 0;\n var previousOffset = Number(colorStops[0].length.value);\n for (var i = 1; i < length; i++) {\n var _colorStops$i$length;\n // support '%' & 'px'\n var offset = (_colorStops$i$length = colorStops[i].length) === null || _colorStops$i$length === void 0 ? void 0 : _colorStops$i$length.value;\n if (!isNil(offset) && !isNil(previousOffset)) {\n for (var j = 1; j < i - previousIndex; j++) colorStops[previousIndex + j].length = {\n type: '%',\n value: \"\".concat(previousOffset + (Number(offset) - previousOffset) * j / (i - previousIndex))\n };\n previousIndex = i;\n previousOffset = Number(offset);\n }\n }\n}\n\n// The position of the gradient line's starting point.\n// different from CSS side(to top) @see https://developer.mozilla.org/en-US/docs/Web/CSS/gradient/linear-gradient#values\nvar SideOrCornerToDegMap = {\n left: 270 - 90,\n top: 0 - 90,\n bottom: 180 - 90,\n right: 90 - 90,\n 'left top': 315 - 90,\n 'top left': 315 - 90,\n 'left bottom': 225 - 90,\n 'bottom left': 225 - 90,\n 'right top': 45 - 90,\n 'top right': 45 - 90,\n 'right bottom': 135 - 90,\n 'bottom right': 135 - 90\n};\nvar angleToDeg = memoize(function (orientation) {\n var angle;\n if (orientation.type === 'angular') {\n angle = Number(orientation.value);\n } else {\n angle = SideOrCornerToDegMap[orientation.value] || 0;\n }\n return getOrCreateUnitValue(angle, 'deg');\n});\nvar positonToCSSUnitValue = memoize(function (position) {\n var cx = 50;\n var cy = 50;\n var unitX = '%';\n var unitY = '%';\n if ((position === null || position === void 0 ? void 0 : position.type) === 'position') {\n var _position$value = position.value,\n x = _position$value.x,\n y = _position$value.y;\n if ((x === null || x === void 0 ? void 0 : x.type) === 'position-keyword') {\n if (x.value === 'left') {\n cx = 0;\n } else if (x.value === 'center') {\n cx = 50;\n } else if (x.value === 'right') {\n cx = 100;\n } else if (x.value === 'top') {\n cy = 0;\n } else if (x.value === 'bottom') {\n cy = 100;\n }\n }\n if ((y === null || y === void 0 ? void 0 : y.type) === 'position-keyword') {\n if (y.value === 'left') {\n cx = 0;\n } else if (y.value === 'center') {\n cy = 50;\n } else if (y.value === 'right') {\n cx = 100;\n } else if (y.value === 'top') {\n cy = 0;\n } else if (y.value === 'bottom') {\n cy = 100;\n }\n }\n if ((x === null || x === void 0 ? void 0 : x.type) === 'px' || (x === null || x === void 0 ? void 0 : x.type) === '%' || (x === null || x === void 0 ? void 0 : x.type) === 'em') {\n unitX = x === null || x === void 0 ? void 0 : x.type;\n cx = Number(x.value);\n }\n if ((y === null || y === void 0 ? void 0 : y.type) === 'px' || (y === null || y === void 0 ? void 0 : y.type) === '%' || (y === null || y === void 0 ? void 0 : y.type) === 'em') {\n unitY = y === null || y === void 0 ? void 0 : y.type;\n cy = Number(y.value);\n }\n }\n return {\n cx: getOrCreateUnitValue(cx, unitX),\n cy: getOrCreateUnitValue(cy, unitY)\n };\n});\nvar parseGradient = memoize(function (colorStr) {\n if (colorStr.indexOf('linear') > -1 || colorStr.indexOf('radial') > -1) {\n var ast = parseGradient$1(colorStr);\n return ast.map(function (_ref) {\n var type = _ref.type,\n orientation = _ref.orientation,\n colorStops = _ref.colorStops;\n spaceColorStops(colorStops);\n var steps = colorStops.map(function (colorStop) {\n // TODO: only support % for now, should calc percentage of axis length when using px/em\n return {\n offset: getOrCreateUnitValue(Number(colorStop.length.value), '%'),\n color: colorStopToString(colorStop)\n };\n });\n if (type === 'linear-gradient') {\n return new CSSGradientValue(GradientType.LinearGradient, {\n angle: orientation ? angleToDeg(orientation) : Odeg,\n steps: steps\n });\n }\n if (type === 'radial-gradient') {\n if (!orientation) {\n orientation = [{\n type: 'shape',\n value: 'circle'\n }];\n }\n if (orientation[0].type === 'shape' && orientation[0].value === 'circle') {\n var _positonToCSSUnitValu = positonToCSSUnitValue(orientation[0].at),\n cx = _positonToCSSUnitValu.cx,\n cy = _positonToCSSUnitValu.cy;\n var size;\n if (orientation[0].style) {\n var _orientation$0$style = orientation[0].style,\n _type = _orientation$0$style.type,\n value = _orientation$0$style.value;\n if (_type === 'extent-keyword') {\n size = getOrCreateKeyword(value);\n } else {\n size = getOrCreateUnitValue(value, _type);\n }\n }\n return new CSSGradientValue(GradientType.RadialGradient, {\n cx: cx,\n cy: cy,\n size: size,\n steps: steps\n });\n }\n // TODO: support ellipse shape\n // TODO: repeating-linear-gradient & repeating-radial-gradient\n // } else if (type === 'repeating-linear-gradient') {\n // } else if (type === 'repeating-radial-gradient') {\n }\n return undefined;\n });\n }\n\n // legacy format, should be deprecated later\n var type = colorStr[0];\n if (colorStr[1] === '(' || colorStr[2] === '(') {\n if (type === 'l') {\n var arr = regexLG.exec(colorStr);\n if (arr) {\n var _arr$2$match;\n var steps = ((_arr$2$match = arr[2].match(regexColorStop)) === null || _arr$2$match === void 0 ? void 0 : _arr$2$match.map(function (stop) {\n return stop.split(':');\n })) || [];\n return [new CSSGradientValue(GradientType.LinearGradient, {\n angle: getOrCreateUnitValue(parseFloat(arr[1]), 'deg'),\n steps: steps.map(function (_ref2) {\n var _ref3 = _slicedToArray(_ref2, 2),\n offset = _ref3[0],\n color = _ref3[1];\n return {\n offset: getOrCreateUnitValue(Number(offset) * 100, '%'),\n color: color\n };\n })\n })];\n }\n } else if (type === 'r') {\n var parsedRadialGradient = parseRadialGradient(colorStr);\n if (parsedRadialGradient) {\n if (isString(parsedRadialGradient)) {\n colorStr = parsedRadialGradient;\n } else {\n return [new CSSGradientValue(GradientType.RadialGradient, parsedRadialGradient)];\n }\n }\n } else if (type === 'p') {\n return parsePattern(colorStr);\n }\n }\n});\nfunction parseRadialGradient(gradientStr) {\n var arr = regexRG.exec(gradientStr);\n if (arr) {\n var _arr$4$match;\n var steps = ((_arr$4$match = arr[4].match(regexColorStop)) === null || _arr$4$match === void 0 ? void 0 : _arr$4$match.map(function (stop) {\n return stop.split(':');\n })) || [];\n return {\n cx: getOrCreateUnitValue(50, '%'),\n cy: getOrCreateUnitValue(50, '%'),\n steps: steps.map(function (_ref4) {\n var _ref5 = _slicedToArray(_ref4, 2),\n offset = _ref5[0],\n color = _ref5[1];\n return {\n offset: getOrCreateUnitValue(Number(offset) * 100, '%'),\n color: color\n };\n })\n };\n }\n return null;\n}\nfunction parsePattern(patternStr) {\n var arr = regexPR.exec(patternStr);\n if (arr) {\n var repetition = arr[1];\n var src = arr[2];\n switch (repetition) {\n case 'a':\n repetition = 'repeat';\n break;\n case 'x':\n repetition = 'repeat-x';\n break;\n case 'y':\n repetition = 'repeat-y';\n break;\n case 'n':\n repetition = 'no-repeat';\n break;\n default:\n repetition = 'no-repeat';\n }\n return {\n image: src,\n // @ts-ignore\n repetition: repetition\n };\n }\n return null;\n}\n\n/**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/CanvasRenderingContext2D/createPattern\n */\n\nfunction isCSSGradientValue(object) {\n return !!object.type && !!object.value;\n}\nfunction isPattern(object) {\n return object && !!object.image;\n}\nfunction isCSSRGB(object) {\n return object && !isNil(object.r) && !isNil(object.g) && !isNil(object.b);\n}\n\n/**\n * @see https://github.com/WebKit/WebKit/blob/main/Source/WebCore/css/parser/CSSParser.cpp#L97\n */\nvar parseColor = memoize(function (colorStr) {\n if (isPattern(colorStr)) {\n return _objectSpread({\n repetition: 'repeat'\n }, colorStr);\n }\n if (isNil(colorStr)) {\n colorStr = '';\n }\n if (colorStr === 'transparent') {\n // transparent black\n return transparentColor;\n }\n if (colorStr === 'currentColor') {\n // @see https://github.com/adobe-webplatform/Snap.svg/issues/526\n colorStr = 'black';\n } else if (colorStr === 'none') {\n return noneColor;\n }\n\n // support CSS gradient syntax\n var g = parseGradient(colorStr);\n if (g) {\n return g;\n }\n\n // constants\n var color$1 = color(colorStr);\n var rgba = [0, 0, 0, 0];\n if (color$1 !== null) {\n rgba[0] = color$1.r || 0;\n rgba[1] = color$1.g || 0;\n rgba[2] = color$1.b || 0;\n rgba[3] = color$1.opacity;\n }\n\n // return new CSSRGB(...rgba);\n return getOrCreateRGBA.apply(void 0, rgba);\n});\nfunction mergeColors(left, right) {\n // only support constant value, exclude gradient & pattern\n if (!isCSSRGB(left) || !isCSSRGB(right)) {\n return;\n }\n return [[Number(left.r), Number(left.g), Number(left.b), Number(left.alpha)], [Number(right.r), Number(right.g), Number(right.b), Number(right.alpha)], function (color) {\n var rgba = color.slice();\n if (rgba[3]) {\n for (var i = 0; i < 3; i++) rgba[i] = Math.round(clamp(rgba[i], 0, 255));\n }\n rgba[3] = clamp(rgba[3], 0, 1);\n return \"rgba(\".concat(rgba.join(','), \")\");\n }];\n}\n\nfunction parseDimension(unitRegExp, string) {\n if (isNil(string)) {\n return getOrCreateUnitValue(0, 'px');\n }\n string = \"\".concat(string).trim().toLowerCase();\n if (isFinite(Number(string))) {\n if ('px'.search(unitRegExp) >= 0) {\n return getOrCreateUnitValue(Number(string), 'px');\n }\n if ('deg'.search(unitRegExp) >= 0) {\n return getOrCreateUnitValue(Number(string), 'deg');\n }\n }\n var matchedUnits = [];\n string = string.replace(unitRegExp, function (match) {\n matchedUnits.push(match);\n return \"U\".concat(match);\n });\n var taggedUnitRegExp = \"U(\".concat(unitRegExp.source, \")\");\n return matchedUnits.map(function (unit) {\n return getOrCreateUnitValue(Number(string.replace(new RegExp(\"U\".concat(unit), 'g'), '').replace(new RegExp(taggedUnitRegExp, 'g'), '*0')), unit);\n })[0];\n}\n\n/**\n * \n * @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/length\n * length with only absolute unit, eg. 1px\n */\nvar parseLengthUnmemoize = function parseLengthUnmemoize(css) {\n return parseDimension(new RegExp('px', 'g'), css);\n};\nvar parseLength = memoize(parseLengthUnmemoize);\n\n/**\n * \n * @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/percentage\n */\nvar parserPercentageUnmemoize = function parserPercentageUnmemoize(css) {\n return parseDimension(new RegExp('%', 'g'), css);\n};\nmemoize(parserPercentageUnmemoize);\n\n/**\n * length with absolute or relative unit,\n * eg. 1px, 0.7em, 50%, calc(100% - 200px);\n *\n * @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/length-percentage\n */\nvar parseLengthOrPercentageUnmemoize = function parseLengthOrPercentageUnmemoize(css) {\n if (isNumber(css) || isFinite(Number(css))) {\n // Number(css) is NaN\n return getOrCreateUnitValue(Number(css) || 0, 'px');\n // return Number(css);\n }\n return parseDimension(new RegExp('px|%|em|rem', 'g'), css);\n};\nvar parseLengthOrPercentage = memoize(parseLengthOrPercentageUnmemoize);\nvar parseAngleUnmemoize = function parseAngleUnmemoize(css) {\n return parseDimension(new RegExp('deg|rad|grad|turn', 'g'), css);\n};\nvar parseAngle = memoize(parseAngleUnmemoize);\n\n/**\n * merge CSSUnitValue\n *\n * @example\n * 10px + 20px = 30px\n * 10deg + 10rad\n * 10% + 20% = 30%\n */\nfunction mergeDimensions(left, right, target, nonNegative) {\n var index = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var unit = '';\n var leftValue = left.value || 0;\n var rightValue = right.value || 0;\n var canonicalUnit = toCanonicalUnit(left.unit);\n var leftCanonicalUnitValue = left.convertTo(canonicalUnit);\n var rightCanonicalUnitValue = right.convertTo(canonicalUnit);\n if (leftCanonicalUnitValue && rightCanonicalUnitValue) {\n leftValue = leftCanonicalUnitValue.value;\n rightValue = rightCanonicalUnitValue.value;\n unit = unitTypeToString(left.unit);\n }\n // format '%' to 'px'\n else if (CSSUnitValue.isLength(left.unit) || CSSUnitValue.isLength(right.unit)) {\n leftValue = convertPercentUnit(left, index, target);\n rightValue = convertPercentUnit(right, index, target);\n unit = 'px';\n }\n return [leftValue, rightValue, function (value) {\n if (nonNegative) {\n value = Math.max(value, 0);\n }\n return value + unit;\n }];\n}\nfunction convertAngleUnit(value) {\n var deg = 0;\n if (value.unit === UnitType.kDegrees) {\n deg = value.value;\n } else if (value.unit === UnitType.kRadians) {\n deg = rad2deg(Number(value.value));\n } else if (value.unit === UnitType.kTurns) {\n deg = turn2deg(Number(value.value));\n } else if (value.value) {\n deg = value.value;\n }\n return deg;\n}\nfunction parseDimensionArrayFormat(string, size) {\n var parsed;\n if (Array.isArray(string)) {\n // [1, '2px', 3]\n parsed = string.map(function (segment) {\n return Number(segment);\n });\n } else if (isString(string)) {\n parsed = string.split(' ').map(function (segment) {\n return Number(segment);\n });\n } else if (isNumber(string)) {\n parsed = [string];\n }\n if (size === 2) {\n if (parsed.length === 1) {\n return [parsed[0], parsed[0]];\n }\n return [parsed[0], parsed[1]];\n }\n if (size === 4) {\n if (parsed.length === 1) {\n return [parsed[0], parsed[0], parsed[0], parsed[0]];\n }\n if (parsed.length === 2) {\n return [parsed[0], parsed[1], parsed[0], parsed[1]];\n }\n if (parsed.length === 3) {\n return [parsed[0], parsed[1], parsed[2], parsed[1]];\n }\n return [parsed[0], parsed[1], parsed[2], parsed[3]];\n }\n if (size === 'even' && parsed.length % 2 === 1) {\n return [].concat(_toConsumableArray(parsed), _toConsumableArray(parsed));\n }\n return parsed;\n}\n\n// export function mergeDimensionList(\n// left: CSSUnitValue[],\n// right: CSSUnitValue[],\n// target: IElement | null,\n// ): [number[], number[], (list: number[]) => string] | undefined {\n// if (left.length !== right.length) {\n// return;\n// }\n\n// const unit = left[0].unit;\n\n// return [\n// left.map((l) => l.value),\n// right.map((l) => l.value),\n// (values: number[]) => {\n// return values.map((n) => new CSSUnitValue(n, unit)).join(' ');\n// },\n// ];\n// }\n\nfunction convertPercentUnit(valueWithUnit, vec3Index, target) {\n var useMin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (valueWithUnit.unit === UnitType.kPixels) {\n return Number(valueWithUnit.value);\n }\n if (valueWithUnit.unit === UnitType.kPercentage && target) {\n var bounds = target.nodeName === Shape.GROUP ? target.getLocalBounds() : target.getGeometryBounds();\n return (useMin ? bounds.min[vec3Index] : 0) + valueWithUnit.value / 100 * bounds.halfExtents[vec3Index] * 2;\n }\n return 0;\n}\n\nvar parseParam = function parseParam(css) {\n return parseDimension(/deg|rad|grad|turn|px|%/g, css);\n};\nvar supportedFilters = ['blur', 'brightness', 'drop-shadow', 'contrast', 'grayscale', 'sepia', 'saturate', 'hue-rotate', 'invert'];\nfunction parseFilter() {\n var filterStr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n filterStr = filterStr.toLowerCase().trim();\n if (filterStr === 'none') {\n return [];\n }\n var filterRegExp = /\\s*([\\w-]+)\\(([^)]*)\\)/g;\n var result = [];\n var match;\n var prevLastIndex = 0;\n while (match = filterRegExp.exec(filterStr)) {\n if (match.index !== prevLastIndex) {\n return [];\n }\n prevLastIndex = match.index + match[0].length;\n if (supportedFilters.indexOf(match[1]) > -1) {\n result.push({\n name: match[1],\n params: match[2].split(' ').map(function (p) {\n return parseParam(p) || parseColor(p);\n })\n });\n }\n if (filterRegExp.lastIndex === filterStr.length) {\n return result;\n }\n }\n return [];\n}\n\nfunction numberToString(x) {\n // scale(0.00000001) -> scale(0)\n // return x.toFixed(6).replace(/0+$/, '').replace(/\\.$/, '');\n return x.toString();\n}\n\n/**\n * parse string or number to CSSUnitValue(numeric)\n *\n * eg.\n * * 0 -> CSSUnitValue(0)\n * * '2' -> CSSUnitValue(2)\n */\nvar parseNumberUnmemoize = function parseNumberUnmemoize(string) {\n if (typeof string === 'number') {\n return getOrCreateUnitValue(string);\n }\n if (/^\\s*[-+]?(\\d*\\.)?\\d+\\s*$/.test(string)) {\n return getOrCreateUnitValue(Number(string));\n }\n return getOrCreateUnitValue(0);\n};\nvar parseNumber = memoize(parseNumberUnmemoize);\nmemoize(function (string) {\n if (isString(string)) {\n return string.split(' ').map(parseNumber);\n }\n return string.map(parseNumber);\n});\nfunction mergeNumbers(left, right) {\n return [left, right, numberToString];\n}\nfunction clampedMergeNumbers(min, max) {\n return function (left, right) {\n return [left, right, function (x) {\n return numberToString(clamp(x, min, max));\n }];\n };\n}\nfunction mergeNumberLists(left, right) {\n if (left.length !== right.length) {\n return;\n }\n return [left, right, function (numberList) {\n return numberList;\n }];\n}\n\nfunction getOrCalculatePathTotalLength(path) {\n if (path.parsedStyle.d.totalLength === 0) {\n path.parsedStyle.d.totalLength = getTotalLength(path.parsedStyle.d.absolutePath);\n }\n return path.parsedStyle.d.totalLength;\n}\nfunction getOrCalculatePolylineTotalLength(polyline) {\n if (polyline.parsedStyle.points.totalLength === 0) {\n polyline.parsedStyle.points.totalLength = polylineLength(polyline.parsedStyle.points.points);\n }\n return polyline.parsedStyle.points.totalLength;\n}\nfunction removeRedundantMCommand(path) {\n for (var i = 0; i < path.length; i++) {\n var prevSegment = path[i - 1];\n var segment = path[i];\n var cmd = segment[0];\n if (cmd === 'M') {\n if (prevSegment) {\n var prevCmd = prevSegment[0];\n var srcPoint = [segment[1], segment[2]];\n var destPoint = void 0;\n if (prevCmd === 'L' || prevCmd === 'M') {\n destPoint = [prevSegment[1], prevSegment[2]];\n } else if (prevCmd === 'C' || prevCmd === 'A' || prevCmd === 'Q') {\n destPoint = [prevSegment[prevSegment.length - 2], prevSegment[prevSegment.length - 1]];\n }\n if (destPoint && isSamePoint(srcPoint, destPoint)) {\n path.splice(i, 1);\n i--;\n }\n }\n }\n }\n}\nfunction hasArcOrBezier(path) {\n var hasArc = false;\n var count = path.length;\n for (var i = 0; i < count; i++) {\n var params = path[i];\n var cmd = params[0];\n if (cmd === 'C' || cmd === 'A' || cmd === 'Q') {\n hasArc = true;\n break;\n }\n }\n return hasArc;\n}\nfunction extractPolygons(pathArray) {\n var polygons = [];\n var polylines = [];\n var points = []; // 防止第一个命令不是 'M'\n for (var i = 0; i < pathArray.length; i++) {\n var params = pathArray[i];\n var cmd = params[0];\n if (cmd === 'M') {\n // 遇到 'M' 判定是否是新数组,新数组中没有点\n if (points.length) {\n // 如果存在点,则说明没有遇到 'Z',开始了一个新的多边形\n polylines.push(points);\n points = []; // 创建新的点\n }\n points.push([params[1], params[2]]);\n } else if (cmd === 'Z') {\n if (points.length) {\n // 存在点\n polygons.push(points);\n points = []; // 开始新的点集合\n }\n // 如果不存在点,同时 'Z',则说明是错误,不处理\n } else {\n points.push([params[1], params[2]]);\n }\n }\n // 说明 points 未放入 polygons 或者 polyline\n // 仅当只有一个 M,没有 Z 时会发生这种情况\n if (points.length > 0) {\n polylines.push(points);\n }\n return {\n polygons: polygons,\n polylines: polylines\n };\n}\nfunction isSamePoint(point1, point2) {\n return point1[0] === point2[0] && point1[1] === point2[1];\n}\nfunction getPathBBox(segments, lineWidth) {\n var xArr = [];\n var yArr = [];\n var segmentsWithAngle = [];\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n var currentPoint = segment.currentPoint,\n params = segment.params,\n prePoint = segment.prePoint;\n var box = void 0;\n switch (segment.command) {\n case 'Q':\n box = quadBox(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4]);\n break;\n case 'C':\n box = cubicBox(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4], params[5], params[6]);\n break;\n case 'A':\n var arcParams = segment.arcParams;\n box = arcBox(arcParams.cx, arcParams.cy, arcParams.rx, arcParams.ry, arcParams.xRotation, arcParams.startAngle, arcParams.endAngle);\n break;\n default:\n xArr.push(currentPoint[0]);\n yArr.push(currentPoint[1]);\n break;\n }\n if (box) {\n segment.box = box;\n xArr.push(box.x, box.x + box.width);\n yArr.push(box.y, box.y + box.height);\n }\n if (lineWidth && (segment.command === 'L' || segment.command === 'M') && segment.prePoint && segment.nextPoint) {\n segmentsWithAngle.push(segment);\n }\n }\n // bbox calculation should ignore NaN for path attribute\n // ref: https://github.com/antvis/g/issues/210\n // ref: https://github.com/antvis/G2/issues/3109\n xArr = xArr.filter(function (item) {\n return !Number.isNaN(item) && item !== Infinity && item !== -Infinity;\n });\n yArr = yArr.filter(function (item) {\n return !Number.isNaN(item) && item !== Infinity && item !== -Infinity;\n });\n var minX = min(xArr);\n var minY = min(yArr);\n var maxX = max(xArr);\n var maxY = max(yArr);\n if (segmentsWithAngle.length === 0) {\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n for (var _i = 0; _i < segmentsWithAngle.length; _i++) {\n var _segment = segmentsWithAngle[_i];\n var _currentPoint = _segment.currentPoint;\n var extra = void 0;\n if (_currentPoint[0] === minX) {\n extra = getExtraFromSegmentWithAngle(_segment, lineWidth);\n minX -= extra.xExtra;\n } else if (_currentPoint[0] === maxX) {\n extra = getExtraFromSegmentWithAngle(_segment, lineWidth);\n maxX += extra.xExtra;\n }\n if (_currentPoint[1] === minY) {\n extra = getExtraFromSegmentWithAngle(_segment, lineWidth);\n minY -= extra.yExtra;\n } else if (_currentPoint[1] === maxY) {\n extra = getExtraFromSegmentWithAngle(_segment, lineWidth);\n maxY += extra.yExtra;\n }\n }\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getExtraFromSegmentWithAngle(segment, lineWidth) {\n var prePoint = segment.prePoint,\n currentPoint = segment.currentPoint,\n nextPoint = segment.nextPoint;\n var currentAndPre = Math.pow(currentPoint[0] - prePoint[0], 2) + Math.pow(currentPoint[1] - prePoint[1], 2);\n var currentAndNext = Math.pow(currentPoint[0] - nextPoint[0], 2) + Math.pow(currentPoint[1] - nextPoint[1], 2);\n var preAndNext = Math.pow(prePoint[0] - nextPoint[0], 2) + Math.pow(prePoint[1] - nextPoint[1], 2);\n // 以 currentPoint 为顶点的夹角\n var currentAngle = Math.acos((currentAndPre + currentAndNext - preAndNext) / (2 * Math.sqrt(currentAndPre) * Math.sqrt(currentAndNext)));\n // 夹角为空、 0 或 PI 时,不需要计算夹角处的额外宽度\n // 注意: 由于计算精度问题,夹角为 0 的情况计算出来的角度可能是一个很小的值,还需要判断其与 0 是否近似相等\n if (!currentAngle || Math.sin(currentAngle) === 0 || isNumberEqual(currentAngle, 0)) {\n return {\n xExtra: 0,\n yExtra: 0\n };\n }\n var xAngle = Math.abs(Math.atan2(nextPoint[1] - currentPoint[1], nextPoint[0] - currentPoint[0]));\n var yAngle = Math.abs(Math.atan2(nextPoint[0] - currentPoint[0], nextPoint[1] - currentPoint[1]));\n // 将夹角转为锐角\n xAngle = xAngle > Math.PI / 2 ? Math.PI - xAngle : xAngle;\n yAngle = yAngle > Math.PI / 2 ? Math.PI - yAngle : yAngle;\n // 这里不考虑在水平和垂直方向的投影,直接使用最大差值\n // 由于上层统一加减了二分之一线宽,这里需要进行弥补\n var extra = {\n // 水平方向投影\n xExtra: Math.cos(currentAngle / 2 - xAngle) * (lineWidth / 2 * (1 / Math.sin(currentAngle / 2))) - lineWidth / 2 || 0,\n // 垂直方向投影\n yExtra: Math.cos(yAngle - currentAngle / 2) * (lineWidth / 2 * (1 / Math.sin(currentAngle / 2))) - lineWidth / 2 || 0\n };\n return extra;\n}\n\n// 点对称\nfunction toSymmetry(point, center) {\n return [center[0] + (center[0] - point[0]), center[1] + (center[1] - point[1])];\n}\nvar angleBetween = function angleBetween(v0, v1) {\n var p = v0.x * v1.x + v0.y * v1.y;\n var n = Math.sqrt((Math.pow(v0.x, 2) + Math.pow(v0.y, 2)) * (Math.pow(v1.x, 2) + Math.pow(v1.y, 2)));\n var sign = v0.x * v1.y - v0.y * v1.x < 0 ? -1 : 1;\n var angle = sign * Math.acos(p / n);\n return angle;\n};\n/**\n * @see https://github.com/rveciana/svg-path-properties/blob/b6bd9a322966f6ef7a311872d80c56e3718de861/src/arc.ts#L121\n */\nvar pointOnEllipticalArc = function pointOnEllipticalArc(p0, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, p1, t) {\n // In accordance to: http://www.w3.org/TR/SVG/implnote.html#ArcOutOfRangeParameters\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n xAxisRotation = mod(xAxisRotation, 360);\n var xAxisRotationRadians = deg2rad(xAxisRotation);\n // If the endpoints are identical, then this is equivalent to omitting the elliptical arc segment entirely.\n if (p0.x === p1.x && p0.y === p1.y) {\n return {\n x: p0.x,\n y: p0.y,\n ellipticalArcAngle: 0\n }; // Check if angle is correct\n }\n\n // If rx = 0 or ry = 0 then this arc is treated as a straight line segment joining the endpoints.\n if (rx === 0 || ry === 0) {\n // return this.pointOnLine(p0, p1, t);\n return {\n x: 0,\n y: 0,\n ellipticalArcAngle: 0\n }; // Check if angle is correct\n }\n\n // Following \"Conversion from endpoint to center parameterization\"\n // http://www.w3.org/TR/SVG/implnote.html#ArcConversionEndpointToCenter\n\n // Step #1: Compute transformedPoint\n var dx = (p0.x - p1.x) / 2;\n var dy = (p0.y - p1.y) / 2;\n var transformedPoint = {\n x: Math.cos(xAxisRotationRadians) * dx + Math.sin(xAxisRotationRadians) * dy,\n y: -Math.sin(xAxisRotationRadians) * dx + Math.cos(xAxisRotationRadians) * dy\n };\n // Ensure radii are large enough\n var radiiCheck = Math.pow(transformedPoint.x, 2) / Math.pow(rx, 2) + Math.pow(transformedPoint.y, 2) / Math.pow(ry, 2);\n if (radiiCheck > 1) {\n rx *= Math.sqrt(radiiCheck);\n ry *= Math.sqrt(radiiCheck);\n }\n\n // Step #2: Compute transformedCenter\n var cSquareNumerator = Math.pow(rx, 2) * Math.pow(ry, 2) - Math.pow(rx, 2) * Math.pow(transformedPoint.y, 2) - Math.pow(ry, 2) * Math.pow(transformedPoint.x, 2);\n var cSquareRootDenom = Math.pow(rx, 2) * Math.pow(transformedPoint.y, 2) + Math.pow(ry, 2) * Math.pow(transformedPoint.x, 2);\n var cRadicand = cSquareNumerator / cSquareRootDenom;\n // Make sure this never drops below zero because of precision\n cRadicand = cRadicand < 0 ? 0 : cRadicand;\n var cCoef = (largeArcFlag !== sweepFlag ? 1 : -1) * Math.sqrt(cRadicand);\n var transformedCenter = {\n x: cCoef * (rx * transformedPoint.y / ry),\n y: cCoef * (-(ry * transformedPoint.x) / rx)\n };\n\n // Step #3: Compute center\n var center = {\n x: Math.cos(xAxisRotationRadians) * transformedCenter.x - Math.sin(xAxisRotationRadians) * transformedCenter.y + (p0.x + p1.x) / 2,\n y: Math.sin(xAxisRotationRadians) * transformedCenter.x + Math.cos(xAxisRotationRadians) * transformedCenter.y + (p0.y + p1.y) / 2\n };\n\n // Step #4: Compute start/sweep angles\n // Start angle of the elliptical arc prior to the stretch and rotate operations.\n // Difference between the start and end angles\n var startVector = {\n x: (transformedPoint.x - transformedCenter.x) / rx,\n y: (transformedPoint.y - transformedCenter.y) / ry\n };\n var startAngle = angleBetween({\n x: 1,\n y: 0\n }, startVector);\n var endVector = {\n x: (-transformedPoint.x - transformedCenter.x) / rx,\n y: (-transformedPoint.y - transformedCenter.y) / ry\n };\n var sweepAngle = angleBetween(startVector, endVector);\n if (!sweepFlag && sweepAngle > 0) {\n sweepAngle -= 2 * Math.PI;\n } else if (sweepFlag && sweepAngle < 0) {\n sweepAngle += 2 * Math.PI;\n }\n // We use % instead of `mod(..)` because we want it to be -360deg to 360deg(but actually in radians)\n sweepAngle %= 2 * Math.PI;\n\n // From http://www.w3.org/TR/SVG/implnote.html#ArcParameterizationAlternatives\n var angle = startAngle + sweepAngle * t;\n var ellipseComponentX = rx * Math.cos(angle);\n var ellipseComponentY = ry * Math.sin(angle);\n var point = {\n x: Math.cos(xAxisRotationRadians) * ellipseComponentX - Math.sin(xAxisRotationRadians) * ellipseComponentY + center.x,\n y: Math.sin(xAxisRotationRadians) * ellipseComponentX + Math.cos(xAxisRotationRadians) * ellipseComponentY + center.y,\n ellipticalArcStartAngle: startAngle,\n ellipticalArcEndAngle: startAngle + sweepAngle,\n ellipticalArcAngle: angle,\n ellipticalArcCenter: center,\n resultantRx: rx,\n resultantRy: ry\n };\n return point;\n};\nfunction path2Segments(path) {\n var segments = [];\n var currentPoint = null; // 当前图形\n var nextParams = null; // 下一节点的 path 参数\n var startMovePoint = null; // 开始 M 的点,可能会有多个\n var lastStartMovePointIndex = 0; // 最近一个开始点 M 的索引\n var count = path.length;\n for (var i = 0; i < count; i++) {\n var params = path[i];\n nextParams = path[i + 1];\n var command = params[0];\n // 数学定义上的参数,便于后面的计算\n var segment = {\n command: command,\n prePoint: currentPoint,\n params: params,\n startTangent: null,\n endTangent: null,\n currentPoint: null,\n nextPoint: null,\n arcParams: null,\n box: null,\n cubicParams: null\n };\n switch (command) {\n case 'M':\n startMovePoint = [params[1], params[2]];\n lastStartMovePointIndex = i;\n break;\n case 'A':\n var arcParams = getArcParams(currentPoint, params);\n segment.arcParams = arcParams;\n break;\n }\n if (command === 'Z') {\n // 有了 Z 后,当前节点从开始 M 的点开始\n currentPoint = startMovePoint;\n // 如果当前点的命令为 Z,相当于当前点为最近一个 M 点,则下一个点直接指向最近一个 M 点的下一个点\n nextParams = path[lastStartMovePointIndex + 1];\n } else {\n var len = params.length;\n currentPoint = [params[len - 2], params[len - 1]];\n }\n if (nextParams && nextParams[0] === 'Z') {\n // 如果下一个点的命令为 Z,则下一个点直接指向最近一个 M 点\n nextParams = path[lastStartMovePointIndex];\n if (segments[lastStartMovePointIndex]) {\n // 如果下一个点的命令为 Z,则最近一个 M 点的前一个点为当前点\n segments[lastStartMovePointIndex].prePoint = currentPoint;\n }\n }\n segment.currentPoint = currentPoint;\n // 如果当前点与最近一个 M 点相同,则最近一个 M 点的前一个点为当前点的前一个点\n if (segments[lastStartMovePointIndex] && isSamePoint(currentPoint, segments[lastStartMovePointIndex].currentPoint)) {\n segments[lastStartMovePointIndex].prePoint = segment.prePoint;\n }\n var nextPoint = nextParams ? [nextParams[nextParams.length - 2], nextParams[nextParams.length - 1]] : null;\n segment.nextPoint = nextPoint;\n // Add startTangent and endTangent\n var prePoint = segment.prePoint;\n if (['L', 'H', 'V'].includes(command)) {\n segment.startTangent = [prePoint[0] - currentPoint[0], prePoint[1] - currentPoint[1]];\n segment.endTangent = [currentPoint[0] - prePoint[0], currentPoint[1] - prePoint[1]];\n } else if (command === 'Q') {\n // 二次贝塞尔曲线只有一个控制点\n var cp = [params[1], params[2]];\n // 二次贝塞尔曲线的终点为 currentPoint\n segment.startTangent = [prePoint[0] - cp[0], prePoint[1] - cp[1]];\n segment.endTangent = [currentPoint[0] - cp[0], currentPoint[1] - cp[1]];\n } else if (command === 'T') {\n var preSegment = segments[i - 1];\n var _cp = toSymmetry(preSegment.currentPoint, prePoint);\n if (preSegment.command === 'Q') {\n segment.command = 'Q';\n segment.startTangent = [prePoint[0] - _cp[0], prePoint[1] - _cp[1]];\n segment.endTangent = [currentPoint[0] - _cp[0], currentPoint[1] - _cp[1]];\n } else {\n // @ts-ignore\n segment.command = 'TL';\n segment.startTangent = [prePoint[0] - currentPoint[0], prePoint[1] - currentPoint[1]];\n segment.endTangent = [currentPoint[0] - prePoint[0], currentPoint[1] - prePoint[1]];\n }\n } else if (command === 'C') {\n // 三次贝塞尔曲线有两个控制点\n var cp1 = [params[1], params[2]];\n var cp2 = [params[3], params[4]];\n segment.startTangent = [prePoint[0] - cp1[0], prePoint[1] - cp1[1]];\n segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]];\n\n // horizontal line, eg. ['C', 100, 100, 100, 100, 200, 200]\n if (segment.startTangent[0] === 0 && segment.startTangent[1] === 0) {\n segment.startTangent = [cp1[0] - cp2[0], cp1[1] - cp2[1]];\n }\n if (segment.endTangent[0] === 0 && segment.endTangent[1] === 0) {\n segment.endTangent = [cp2[0] - cp1[0], cp2[1] - cp1[1]];\n }\n } else if (command === 'S') {\n var _preSegment = segments[i - 1];\n var _cp2 = toSymmetry(_preSegment.currentPoint, prePoint);\n var _cp3 = [params[1], params[2]];\n if (_preSegment.command === 'C') {\n segment.command = 'C'; // 将 S 命令变换为 C 命令\n segment.startTangent = [prePoint[0] - _cp2[0], prePoint[1] - _cp2[1]];\n segment.endTangent = [currentPoint[0] - _cp3[0], currentPoint[1] - _cp3[1]];\n } else {\n // @ts-ignore\n segment.command = 'SQ'; // 将 S 命令变换为 SQ 命令\n segment.startTangent = [prePoint[0] - _cp3[0], prePoint[1] - _cp3[1]];\n segment.endTangent = [currentPoint[0] - _cp3[0], currentPoint[1] - _cp3[1]];\n }\n } else if (command === 'A') {\n var _getTangentAtRatio = getTangentAtRatio(segment, 0),\n dx1 = _getTangentAtRatio.x,\n dy1 = _getTangentAtRatio.y;\n var _getTangentAtRatio2 = getTangentAtRatio(segment, 1, false),\n dx2 = _getTangentAtRatio2.x,\n dy2 = _getTangentAtRatio2.y;\n segment.startTangent = [dx1, dy1];\n segment.endTangent = [dx2, dy2];\n }\n segments.push(segment);\n }\n return segments;\n}\n\n/**\n * Use length instead of ratio\n */\nfunction getTangentAtRatio(segment, ratio) {\n var sign = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var _segment$arcParams = segment.arcParams,\n _segment$arcParams$rx = _segment$arcParams.rx,\n rx = _segment$arcParams$rx === void 0 ? 0 : _segment$arcParams$rx,\n _segment$arcParams$ry = _segment$arcParams.ry,\n ry = _segment$arcParams$ry === void 0 ? 0 : _segment$arcParams$ry,\n xRotation = _segment$arcParams.xRotation,\n arcFlag = _segment$arcParams.arcFlag,\n sweepFlag = _segment$arcParams.sweepFlag;\n var p1 = pointOnEllipticalArc({\n x: segment.prePoint[0],\n y: segment.prePoint[1]\n }, rx, ry, xRotation, !!arcFlag, !!sweepFlag, {\n x: segment.currentPoint[0],\n y: segment.currentPoint[1]\n }, ratio);\n var p2 = pointOnEllipticalArc({\n x: segment.prePoint[0],\n y: segment.prePoint[1]\n }, rx, ry, xRotation, !!arcFlag, !!sweepFlag, {\n x: segment.currentPoint[0],\n y: segment.currentPoint[1]\n }, sign ? ratio + 0.005 : ratio - 0.005);\n var xDist = p2.x - p1.x;\n var yDist = p2.y - p1.y;\n var dist = Math.sqrt(xDist * xDist + yDist * yDist);\n return {\n x: -xDist / dist,\n y: -yDist / dist\n };\n}\n\n// 向量长度\nfunction vMag(v) {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n}\n\n// u.v/|u||v|,计算夹角的余弦值\nfunction vRatio(u, v) {\n // 当存在一个向量的长度为 0 时,夹角也为 0,即夹角的余弦值为 1\n return vMag(u) * vMag(v) ? (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v)) : 1;\n}\n\n// 向量角度\nfunction vAngle(u, v) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));\n}\nfunction getArcParams(startPoint, params) {\n var rx = params[1];\n var ry = params[2];\n var xRotation = mod(deg2rad(params[3]), Math.PI * 2);\n var arcFlag = params[4];\n var sweepFlag = params[5];\n // 弧形起点坐标\n var x1 = startPoint[0];\n var y1 = startPoint[1];\n // 弧形终点坐标\n var x2 = params[6];\n var y2 = params[7];\n var xp = Math.cos(xRotation) * (x1 - x2) / 2.0 + Math.sin(xRotation) * (y1 - y2) / 2.0;\n var yp = -1 * Math.sin(xRotation) * (x1 - x2) / 2.0 + Math.cos(xRotation) * (y1 - y2) / 2.0;\n var lambda = xp * xp / (rx * rx) + yp * yp / (ry * ry);\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n var diff = rx * rx * (yp * yp) + ry * ry * (xp * xp);\n var f = diff ? Math.sqrt((rx * rx * (ry * ry) - diff) / diff) : 1;\n if (arcFlag === sweepFlag) {\n f *= -1;\n }\n if (isNaN(f)) {\n f = 0;\n }\n\n // 旋转前的起点坐标,且当长半轴和短半轴的长度为 0 时,坐标按 (0, 0) 处理\n var cxp = ry ? f * rx * yp / ry : 0;\n var cyp = rx ? f * -ry * xp / rx : 0;\n\n // 椭圆圆心坐标\n var cx = (x1 + x2) / 2.0 + Math.cos(xRotation) * cxp - Math.sin(xRotation) * cyp;\n var cy = (y1 + y2) / 2.0 + Math.sin(xRotation) * cxp + Math.cos(xRotation) * cyp;\n\n // 起始点的单位向量\n var u = [(xp - cxp) / rx, (yp - cyp) / ry];\n // 终止点的单位向量\n var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];\n // 计算起始点和圆心的连线,与 x 轴正方向的夹角\n var theta = vAngle([1, 0], u);\n\n // 计算圆弧起始点和终止点与椭圆圆心连线的夹角\n var dTheta = vAngle(u, v);\n if (vRatio(u, v) <= -1) {\n dTheta = Math.PI;\n }\n if (vRatio(u, v) >= 1) {\n dTheta = 0;\n }\n if (sweepFlag === 0 && dTheta > 0) {\n dTheta -= 2 * Math.PI;\n }\n if (sweepFlag === 1 && dTheta < 0) {\n dTheta += 2 * Math.PI;\n }\n return {\n cx: cx,\n cy: cy,\n // 弧形的起点和终点相同时,长轴和短轴的长度按 0 处理\n rx: isSamePoint(startPoint, [x2, y2]) ? 0 : rx,\n ry: isSamePoint(startPoint, [x2, y2]) ? 0 : ry,\n startAngle: theta,\n endAngle: theta + dTheta,\n xRotation: xRotation,\n arcFlag: arcFlag,\n sweepFlag: sweepFlag\n };\n}\nfunction commandsToPathString(commands, object, transform) {\n return commands.reduce(function (prev, cur) {\n var path = '';\n if (cur[0] === 'M' || cur[0] === 'L') {\n var p = vec3.fromValues(cur[1], cur[2], 0);\n if (transform) {\n vec3.transformMat4(p, p, transform);\n }\n path = \"\".concat(cur[0]).concat(p[0], \",\").concat(p[1]);\n } else if (cur[0] === 'Z') {\n path = cur[0];\n } else if (cur[0] === 'C') {\n var p1 = vec3.fromValues(cur[1], cur[2], 0);\n var p2 = vec3.fromValues(cur[3], cur[4], 0);\n var p3 = vec3.fromValues(cur[5], cur[6], 0);\n if (transform) {\n vec3.transformMat4(p1, p1, transform);\n vec3.transformMat4(p2, p2, transform);\n vec3.transformMat4(p3, p3, transform);\n }\n path = \"\".concat(cur[0]).concat(p1[0], \",\").concat(p1[1], \",\").concat(p2[0], \",\").concat(p2[1], \",\").concat(p3[0], \",\").concat(p3[1]);\n } else if (cur[0] === 'A') {\n var c = vec3.fromValues(cur[6], cur[7], 0);\n if (transform) {\n vec3.transformMat4(c, c, transform);\n }\n path = \"\".concat(cur[0]).concat(cur[1], \",\").concat(cur[2], \",\").concat(cur[3], \",\").concat(cur[4], \",\").concat(cur[5], \",\").concat(c[0], \",\").concat(c[1]);\n } else if (cur[0] === 'Q') {\n var _p = vec3.fromValues(cur[1], cur[2], 0);\n var _p2 = vec3.fromValues(cur[3], cur[4], 0);\n if (transform) {\n vec3.transformMat4(_p, _p, transform);\n vec3.transformMat4(_p2, _p2, transform);\n }\n path = \"\".concat(cur[0]).concat(cur[1], \",\").concat(cur[2], \",\").concat(cur[3], \",\").concat(cur[4], \"}\");\n }\n return prev += path;\n }, '');\n}\nfunction lineToCommands(x1, y1, x2, y2) {\n return [['M', x1, y1], ['L', x2, y2]];\n}\nfunction ellipseToCommands(rx, ry, cx, cy) {\n var factor = (-1 + Math.sqrt(2)) / 3 * 4;\n var dx = rx * factor;\n var dy = ry * factor;\n var left = cx - rx;\n var right = cx + rx;\n var top = cy - ry;\n var bottom = cy + ry;\n return [['M', left, cy], ['C', left, cy - dy, cx - dx, top, cx, top], ['C', cx + dx, top, right, cy - dy, right, cy], ['C', right, cy + dy, cx + dx, bottom, cx, bottom], ['C', cx - dx, bottom, left, cy + dy, left, cy], ['Z']];\n}\nfunction polygonToCommands(points, closed) {\n var result = points.map(function (point, i) {\n return [i === 0 ? 'M' : 'L', point[0], point[1]];\n });\n if (closed) {\n result.push(['Z']);\n }\n return result;\n}\nfunction rectToCommands(width, height, x, y, radius) {\n // @see https://gist.github.com/danielpquinn/dd966af424030d47e476\n if (radius) {\n var _radius = _slicedToArray(radius, 4),\n tlr = _radius[0],\n trr = _radius[1],\n brr = _radius[2],\n blr = _radius[3];\n var signX = width > 0 ? 1 : -1;\n var signY = height > 0 ? 1 : -1;\n // sweep-flag @see https://developer.mozilla.org/zh-CN/docs/Web/SVG/Tutorial/Paths#arcs\n var sweepFlag = signX + signY !== 0 ? 1 : 0;\n return [['M', signX * tlr + x, y], ['L', width - signX * trr + x, y], trr ? ['A', trr, trr, 0, 0, sweepFlag, width + x, signY * trr + y] : null, ['L', width + x, height - signY * brr + y], brr ? ['A', brr, brr, 0, 0, sweepFlag, width + x - signX * brr, height + y] : null, ['L', x + signX * blr, height + y], blr ? ['A', blr, blr, 0, 0, sweepFlag, x, height + y - signY * blr] : null, ['L', x, signY * tlr + y], tlr ? ['A', tlr, tlr, 0, 0, sweepFlag, signX * tlr + x, y] : null, ['Z']].filter(function (command) {\n return command;\n });\n }\n return [['M', x, y], ['L', x + width, y], ['L', x + width, y + height], ['L', x, y + height], ['Z']];\n}\n\n/**\n * convert object to path, should account for:\n * * transform & origin\n * * lineWidth\n */\nfunction convertToPath(object) {\n var transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : object.getLocalTransform();\n var commands = [];\n switch (object.nodeName) {\n case Shape.LINE:\n var _parsedStyle = object.parsedStyle,\n _parsedStyle$x = _parsedStyle.x1,\n x1 = _parsedStyle$x === void 0 ? 0 : _parsedStyle$x,\n _parsedStyle$y = _parsedStyle.y1,\n y1 = _parsedStyle$y === void 0 ? 0 : _parsedStyle$y,\n _parsedStyle$x2 = _parsedStyle.x2,\n x2 = _parsedStyle$x2 === void 0 ? 0 : _parsedStyle$x2,\n _parsedStyle$y2 = _parsedStyle.y2,\n y2 = _parsedStyle$y2 === void 0 ? 0 : _parsedStyle$y2;\n commands = lineToCommands(x1, y1, x2, y2);\n break;\n case Shape.CIRCLE:\n {\n var _parsedStyle2 = object.parsedStyle,\n _parsedStyle2$r = _parsedStyle2.r,\n r = _parsedStyle2$r === void 0 ? 0 : _parsedStyle2$r,\n _parsedStyle2$cx = _parsedStyle2.cx,\n cx = _parsedStyle2$cx === void 0 ? 0 : _parsedStyle2$cx,\n _parsedStyle2$cy = _parsedStyle2.cy,\n cy = _parsedStyle2$cy === void 0 ? 0 : _parsedStyle2$cy;\n commands = ellipseToCommands(r, r, cx, cy);\n break;\n }\n case Shape.ELLIPSE:\n {\n var _parsedStyle3 = object.parsedStyle,\n _parsedStyle3$rx = _parsedStyle3.rx,\n rx = _parsedStyle3$rx === void 0 ? 0 : _parsedStyle3$rx,\n _parsedStyle3$ry = _parsedStyle3.ry,\n ry = _parsedStyle3$ry === void 0 ? 0 : _parsedStyle3$ry,\n _parsedStyle3$cx = _parsedStyle3.cx,\n _cx = _parsedStyle3$cx === void 0 ? 0 : _parsedStyle3$cx,\n _parsedStyle3$cy = _parsedStyle3.cy,\n _cy = _parsedStyle3$cy === void 0 ? 0 : _parsedStyle3$cy;\n commands = ellipseToCommands(rx, ry, _cx, _cy);\n break;\n }\n case Shape.POLYLINE:\n case Shape.POLYGON:\n var points = object.parsedStyle.points;\n commands = polygonToCommands(points.points, object.nodeName === Shape.POLYGON);\n break;\n case Shape.RECT:\n var _parsedStyle4 = object.parsedStyle,\n _parsedStyle4$width = _parsedStyle4.width,\n width = _parsedStyle4$width === void 0 ? 0 : _parsedStyle4$width,\n _parsedStyle4$height = _parsedStyle4.height,\n height = _parsedStyle4$height === void 0 ? 0 : _parsedStyle4$height,\n _parsedStyle4$x = _parsedStyle4.x,\n x = _parsedStyle4$x === void 0 ? 0 : _parsedStyle4$x,\n _parsedStyle4$y = _parsedStyle4.y,\n y = _parsedStyle4$y === void 0 ? 0 : _parsedStyle4$y,\n radius = _parsedStyle4.radius;\n var hasRadius = radius && radius.some(function (r) {\n return r !== 0;\n });\n commands = rectToCommands(width, height, x, y, hasRadius && radius.map(function (r) {\n return clamp(r, 0, Math.min(Math.abs(width) / 2, Math.abs(height) / 2));\n }));\n break;\n case Shape.PATH:\n var absolutePath = object.parsedStyle.d.absolutePath;\n commands = _toConsumableArray(absolutePath);\n break;\n }\n if (commands.length) {\n return commandsToPathString(commands, object, transform);\n }\n}\nfunction translatePathToString(absolutePath) {\n var startOffsetX = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var startOffsetY = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var endOffsetX = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var endOffsetY = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var newValue = absolutePath.map(function (params, i) {\n var command = params[0];\n var nextSegment = absolutePath[i + 1];\n var useStartOffset = i === 0 && (startOffsetX !== 0 || startOffsetY !== 0);\n var useEndOffset = (i === absolutePath.length - 1 || nextSegment && (nextSegment[0] === 'M' || nextSegment[0] === 'Z')) && endOffsetX !== 0 && endOffsetY !== 0;\n var _ref = useStartOffset ? [startOffsetX, startOffsetY] : [0, 0],\n _ref2 = _slicedToArray(_ref, 2),\n startOffsetXTemp = _ref2[0],\n startOffsetYTemp = _ref2[1];\n var _ref3 = useEndOffset ? [endOffsetX, endOffsetY] : [0, 0],\n _ref4 = _slicedToArray(_ref3, 2),\n endOffsetXTemp = _ref4[0],\n endOffsetYTemp = _ref4[1];\n switch (command) {\n case 'M':\n return \"M \".concat(params[1] + startOffsetXTemp, \",\").concat(params[2] + startOffsetYTemp);\n case 'L':\n return \"L \".concat(params[1] + endOffsetXTemp, \",\").concat(params[2] + endOffsetYTemp);\n case 'Q':\n return \"Q \".concat(params[1], \" \").concat(params[2], \",\").concat(params[3] + endOffsetXTemp, \" \").concat(params[4] + endOffsetYTemp);\n case 'C':\n return \"C \".concat(params[1], \" \").concat(params[2], \",\").concat(params[3], \" \").concat(params[4], \",\").concat(params[5] + endOffsetXTemp, \" \").concat(params[6] + endOffsetYTemp);\n case 'A':\n return \"A \".concat(params[1], \" \").concat(params[2], \" \").concat(params[3], \" \").concat(params[4], \" \").concat(params[5], \" \").concat(params[6], \" \").concat(params[7]).concat(useEndOffset ? \" L \".concat(params[6] + endOffsetX, \",\").concat(params[7] + endOffsetY) : '');\n case 'Z':\n return 'Z';\n default:\n return null;\n }\n }).filter(function (item) {\n return item !== null;\n }).join(' ');\n if (~newValue.indexOf('NaN')) {\n return '';\n }\n return newValue;\n}\n\nvar internalParsePath = function internalParsePath(path) {\n // empty path\n if (path === '' || Array.isArray(path) && path.length === 0) {\n return {\n absolutePath: [],\n hasArc: false,\n segments: [],\n polygons: [],\n polylines: [],\n curve: null,\n totalLength: 0,\n rect: {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n }\n };\n }\n var absolutePath;\n try {\n absolutePath = normalizePath(path);\n } catch (_unused) {\n absolutePath = normalizePath('');\n console.error(\"[g]: Invalid SVG Path definition: \".concat(path));\n }\n removeRedundantMCommand(absolutePath);\n var hasArc = hasArcOrBezier(absolutePath);\n var _extractPolygons = extractPolygons(absolutePath),\n polygons = _extractPolygons.polygons,\n polylines = _extractPolygons.polylines;\n\n // for later use\n var segments = path2Segments(absolutePath);\n\n // Only calculate bbox here since we don't need length now.\n var _getPathBBox = getPathBBox(segments, 0),\n x = _getPathBBox.x,\n y = _getPathBBox.y,\n width = _getPathBBox.width,\n height = _getPathBBox.height;\n return {\n absolutePath: absolutePath,\n hasArc: hasArc,\n segments: segments,\n polygons: polygons,\n polylines: polylines,\n // curve,\n // Delay the calculation of length.\n totalLength: 0,\n rect: {\n x: Number.isFinite(x) ? x : 0,\n y: Number.isFinite(y) ? y : 0,\n width: Number.isFinite(width) ? width : 0,\n height: Number.isFinite(height) ? height : 0\n }\n };\n};\nvar memoizedParsePath = memoize(internalParsePath);\nfunction parsePath(path) {\n return isString(path) ? memoizedParsePath(path) : internalParsePath(path);\n}\nfunction mergePaths(left, right, object) {\n var curve1 = left.curve;\n var curve2 = right.curve;\n if (!curve1 || curve1.length === 0) {\n // convert to curves to do morphing & picking later\n // @see http://thednp.github.io/kute.js/svgCubicMorph.html\n curve1 = path2Curve(left.absolutePath, false);\n left.curve = curve1;\n }\n if (!curve2 || curve2.length === 0) {\n curve2 = path2Curve(right.absolutePath, false);\n right.curve = curve2;\n }\n var curves = [curve1, curve2];\n if (curve1.length !== curve2.length) {\n curves = equalizeSegments(curve1, curve2);\n }\n var curve0 = getDrawDirection(curves[0]) !== getDrawDirection(curves[1]) ? reverseCurve(curves[0]) : clonePath(curves[0]);\n return [curve0, getRotatedCurve(curves[1], curve0), function (pathArray) {\n // need converting to path string?\n return pathArray;\n }];\n}\n\n/**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/SVG/Attribute/points\n *\n * @example\n * points=\"100,10 250,150 200,110\"\n */\nfunction parsePoints(pointsOrStr, object) {\n var points;\n if (isString(pointsOrStr)) {\n points = pointsOrStr.split(' ').map(function (pointStr) {\n var _pointStr$split = pointStr.split(','),\n _pointStr$split2 = _slicedToArray(_pointStr$split, 2),\n x = _pointStr$split2[0],\n y = _pointStr$split2[1];\n return [Number(x), Number(y)];\n });\n } else {\n points = pointsOrStr;\n }\n return {\n points: points,\n totalLength: 0,\n segments: []\n };\n}\nfunction mergePoints(left, right) {\n return [left.points, right.points, function (points) {\n return points;\n }];\n}\n\n// eg. { t: 'scale', d: [CSSUnitValue(1), CSSUnitValue(2)] }\n\nvar _ = null;\nvar TRANSFORM_REGEXP = /\\s*(\\w+)\\(([^)]*)\\)/g;\nfunction cast(pattern) {\n return function (contents) {\n var i = 0;\n return pattern.map(function (x) {\n return x === _ ? contents[i++] : x;\n });\n };\n}\nfunction id(x) {\n return x;\n}\n\n// type: [argTypes, convertTo3D, convertTo2D]\n// In the argument types string, lowercase characters represent optional arguments\nvar transformFunctions = {\n // @ts-ignore\n matrix: ['NNNNNN', [_, _, 0, 0, _, _, 0, 0, 0, 0, 1, 0, _, _, 0, 1], id],\n matrix3d: ['NNNNNNNNNNNNNNNN', id],\n rotate: ['A'],\n rotateX: ['A'],\n rotateY: ['A'],\n rotateZ: ['A'],\n rotate3d: ['NNNA'],\n perspective: ['L'],\n scale: ['Nn', cast([_, _, new CSSUnitValue(1)]), id],\n scaleX: ['N', cast([_, new CSSUnitValue(1), new CSSUnitValue(1)]), cast([_, new CSSUnitValue(1)])],\n scaleY: ['N', cast([new CSSUnitValue(1), _, new CSSUnitValue(1)]), cast([new CSSUnitValue(1), _])],\n scaleZ: ['N', cast([new CSSUnitValue(1), new CSSUnitValue(1), _])],\n scale3d: ['NNN', id],\n skew: ['Aa', null, id],\n skewX: ['A', null, cast([_, Odeg])],\n skewY: ['A', null, cast([Odeg, _])],\n translate: ['Tt', cast([_, _, Opx]), id],\n translateX: ['T', cast([_, Opx, Opx]), cast([_, Opx])],\n translateY: ['T', cast([Opx, _, Opx]), cast([Opx, _])],\n translateZ: ['L', cast([Opx, Opx, _])],\n translate3d: ['TTL', id]\n};\nfunction parseArrayTransform(transform) {\n var result = [];\n var length = transform.length;\n for (var i = 0; i < length; i++) {\n var item = transform[i];\n var name = item[0];\n var args = item.slice(1);\n // infer default value\n if (name === 'translate' || name === 'skew') {\n if (args.length === 1) args.push(0);\n } else if (name === 'scale') {\n if (args.length === 1) args.push(args[0]);\n }\n var functionData = transformFunctions[name];\n if (!functionData) return [];\n var parsedArgs = args.map(function (value) {\n return getOrCreateUnitValue(value);\n });\n result.push({\n t: name,\n d: parsedArgs\n });\n }\n return result;\n}\n\n/**\n * none\n * scale(1) scale(1, 2)\n * scaleX(1)\n */\nfunction parseTransform(transform) {\n if (Array.isArray(transform)) {\n return parseArrayTransform(transform);\n }\n transform = (transform || 'none').trim();\n if (transform === 'none') {\n return [];\n }\n var result = [];\n var match;\n var prevLastIndex = 0;\n TRANSFORM_REGEXP.lastIndex = 0;\n while (match = TRANSFORM_REGEXP.exec(transform)) {\n if (match.index !== prevLastIndex) {\n return [];\n }\n prevLastIndex = match.index + match[0].length;\n var functionName = match[1]; // scale\n var functionData = transformFunctions[functionName]; // scale(1, 2)\n if (!functionData) {\n // invalid, eg. scale()\n return [];\n }\n var args = match[2].split(','); // 1,2\n var argTypes = functionData[0]; // Nn\n if (argTypes.length < args.length) {\n // scale(N, n)\n return [];\n }\n var parsedArgs = [];\n for (var i = 0; i < argTypes.length; i++) {\n var arg = args[i];\n var type = argTypes[i];\n var parsedArg = void 0;\n if (!arg) {\n // @ts-ignore\n parsedArg = {\n a: Odeg,\n n: parsedArgs[0],\n t: Opx\n }[type];\n } else {\n // @ts-ignore\n parsedArg = {\n A: function A(s) {\n return s.trim() === '0' ? Odeg : parseAngle(s);\n },\n N: parseNumber,\n T: parseLengthOrPercentage,\n L: parseLength\n }[type.toUpperCase()](arg);\n }\n if (parsedArg === undefined) {\n return [];\n }\n parsedArgs.push(parsedArg);\n }\n result.push({\n t: functionName,\n d: parsedArgs\n }); // { t: scale, d: [1, 2] }\n\n if (TRANSFORM_REGEXP.lastIndex === transform.length) {\n return result;\n }\n }\n return [];\n}\nfunction parseTransformUnmemoize(transform) {\n if (Array.isArray(transform)) {\n return parseArrayTransform(transform);\n }\n transform = (transform || 'none').trim();\n if (transform === 'none') {\n return [];\n }\n var result = [];\n var match;\n var prevLastIndex = 0;\n TRANSFORM_REGEXP.lastIndex = 0;\n while (match = TRANSFORM_REGEXP.exec(transform)) {\n if (match.index !== prevLastIndex) {\n return [];\n }\n prevLastIndex = match.index + match[0].length;\n var functionName = match[1]; // scale\n var functionData = transformFunctions[functionName]; // scale(1, 2)\n if (!functionData) {\n // invalid, eg. scale()\n return [];\n }\n var args = match[2].split(','); // 1,2\n var argTypes = functionData[0]; // Nn\n if (argTypes.length < args.length) {\n // scale(N, n)\n return [];\n }\n var parsedArgs = [];\n for (var i = 0; i < argTypes.length; i++) {\n var arg = args[i];\n var type = argTypes[i];\n var parsedArg = void 0;\n if (!arg) {\n // @ts-ignore\n parsedArg = {\n a: Odeg,\n n: parsedArgs[0],\n t: Opx\n }[type];\n } else {\n // @ts-ignore\n parsedArg = {\n A: function A(s) {\n return s.trim() === '0' ? Odeg : parseAngleUnmemoize(s);\n },\n N: parseNumberUnmemoize,\n T: parseLengthOrPercentageUnmemoize,\n L: parseLengthUnmemoize\n }[type.toUpperCase()](arg);\n }\n if (parsedArg === undefined) {\n return [];\n }\n parsedArgs.push(parsedArg);\n }\n result.push({\n t: functionName,\n d: parsedArgs\n }); // { t: scale, d: [1, 2] }\n\n if (TRANSFORM_REGEXP.lastIndex === transform.length) {\n return result;\n }\n }\n return [];\n}\nfunction convertItemToMatrix(item) {\n var x;\n var y;\n var z;\n var angle;\n switch (item.t) {\n case 'rotateX':\n angle = deg2rad(convertAngleUnit(item.d[0]));\n return [1, 0, 0, 0, 0, Math.cos(angle), Math.sin(angle), 0, 0, -Math.sin(angle), Math.cos(angle), 0, 0, 0, 0, 1];\n case 'rotateY':\n angle = deg2rad(convertAngleUnit(item.d[0]));\n return [Math.cos(angle), 0, -Math.sin(angle), 0, 0, 1, 0, 0, Math.sin(angle), 0, Math.cos(angle), 0, 0, 0, 0, 1];\n case 'rotate':\n case 'rotateZ':\n angle = deg2rad(convertAngleUnit(item.d[0]));\n return [Math.cos(angle), Math.sin(angle), 0, 0, -Math.sin(angle), Math.cos(angle), 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n case 'rotate3d':\n x = item.d[0].value;\n y = item.d[1].value;\n z = item.d[2].value;\n angle = deg2rad(convertAngleUnit(item.d[3]));\n var sqrLength = x * x + y * y + z * z;\n if (sqrLength === 0) {\n x = 1;\n y = 0;\n z = 0;\n } else if (sqrLength !== 1) {\n var length = Math.sqrt(sqrLength);\n x /= length;\n y /= length;\n z /= length;\n }\n var s = Math.sin(angle / 2);\n var sc = s * Math.cos(angle / 2);\n var sq = s * s;\n return [1 - 2 * (y * y + z * z) * sq, 2 * (x * y * sq + z * sc), 2 * (x * z * sq - y * sc), 0, 2 * (x * y * sq - z * sc), 1 - 2 * (x * x + z * z) * sq, 2 * (y * z * sq + x * sc), 0, 2 * (x * z * sq + y * sc), 2 * (y * z * sq - x * sc), 1 - 2 * (x * x + y * y) * sq, 0, 0, 0, 0, 1];\n case 'scale':\n return [item.d[0].value, 0, 0, 0, 0, item.d[1].value, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n case 'scaleX':\n return [item.d[0].value, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n case 'scaleY':\n return [1, 0, 0, 0, 0, item.d[0].value, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n case 'scaleZ':\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, item.d[0].value, 0, 0, 0, 0, 1];\n case 'scale3d':\n return [item.d[0].value, 0, 0, 0, 0, item.d[1].value, 0, 0, 0, 0, item.d[2].value, 0, 0, 0, 0, 1];\n case 'skew':\n var xAngle = deg2rad(convertAngleUnit(item.d[0]));\n var yAngle = deg2rad(convertAngleUnit(item.d[1]));\n return [1, Math.tan(yAngle), 0, 0, Math.tan(xAngle), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n case 'skewX':\n angle = deg2rad(convertAngleUnit(item.d[0]));\n return [1, 0, 0, 0, Math.tan(angle), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n case 'skewY':\n angle = deg2rad(convertAngleUnit(item.d[0]));\n return [1, Math.tan(angle), 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n case 'translate':\n // TODO: pass target\n x = convertPercentUnit(item.d[0], 0, null) || 0;\n y = convertPercentUnit(item.d[1], 0, null) || 0;\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, x, y, 0, 1];\n case 'translateX':\n x = convertPercentUnit(item.d[0], 0, null) || 0;\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, x, 0, 0, 1];\n case 'translateY':\n y = convertPercentUnit(item.d[0], 0, null) || 0;\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, y, 0, 1];\n case 'translateZ':\n z = convertPercentUnit(item.d[0], 0, null) || 0;\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, z, 1];\n case 'translate3d':\n x = convertPercentUnit(item.d[0], 0, null) || 0;\n y = convertPercentUnit(item.d[1], 0, null) || 0;\n z = convertPercentUnit(item.d[2], 0, null) || 0;\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, x, y, z, 1];\n case 'perspective':\n var t = convertPercentUnit(item.d[0], 0, null) || 0;\n var p = t ? -1 / t : 0;\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, p, 0, 0, 0, 1];\n case 'matrix':\n return [item.d[0].value, item.d[1].value, 0, 0, item.d[2].value, item.d[3].value, 0, 0, 0, 0, 1, 0, item.d[4].value, item.d[5].value, 0, 1];\n case 'matrix3d':\n return item.d.map(function (d) {\n return d.value;\n });\n }\n}\nfunction multiplyMatrices(a, b) {\n return [a[0] * b[0] + a[4] * b[1] + a[8] * b[2] + a[12] * b[3], a[1] * b[0] + a[5] * b[1] + a[9] * b[2] + a[13] * b[3], a[2] * b[0] + a[6] * b[1] + a[10] * b[2] + a[14] * b[3], a[3] * b[0] + a[7] * b[1] + a[11] * b[2] + a[15] * b[3], a[0] * b[4] + a[4] * b[5] + a[8] * b[6] + a[12] * b[7], a[1] * b[4] + a[5] * b[5] + a[9] * b[6] + a[13] * b[7], a[2] * b[4] + a[6] * b[5] + a[10] * b[6] + a[14] * b[7], a[3] * b[4] + a[7] * b[5] + a[11] * b[6] + a[15] * b[7], a[0] * b[8] + a[4] * b[9] + a[8] * b[10] + a[12] * b[11], a[1] * b[8] + a[5] * b[9] + a[9] * b[10] + a[13] * b[11], a[2] * b[8] + a[6] * b[9] + a[10] * b[10] + a[14] * b[11], a[3] * b[8] + a[7] * b[9] + a[11] * b[10] + a[15] * b[11], a[0] * b[12] + a[4] * b[13] + a[8] * b[14] + a[12] * b[15], a[1] * b[12] + a[5] * b[13] + a[9] * b[14] + a[13] * b[15], a[2] * b[12] + a[6] * b[13] + a[10] * b[14] + a[14] * b[15], a[3] * b[12] + a[7] * b[13] + a[11] * b[14] + a[15] * b[15]];\n}\nfunction convertToMatrix(transformList) {\n if (transformList.length === 0) {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n }\n return transformList.map(convertItemToMatrix).reduce(multiplyMatrices);\n}\nfunction makeMatrixDecomposition(transformList) {\n var translate = [0, 0, 0];\n var scale = [1, 1, 1];\n var skew = [0, 0, 0];\n var perspective = [0, 0, 0, 1];\n var quaternion = [0, 0, 0, 1];\n decomposeMat4(\n // @ts-ignore\n convertToMatrix(transformList), translate, scale, skew, perspective, quaternion);\n return [[translate, scale, skew, quaternion, perspective]];\n}\nvar composeMatrix = function () {\n function multiply(a, b) {\n var result = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];\n for (var i = 0; i < 4; i++) {\n for (var j = 0; j < 4; j++) {\n for (var k = 0; k < 4; k++) {\n result[i][j] += b[i][k] * a[k][j];\n }\n }\n }\n return result;\n }\n function is2D(m) {\n return m[0][2] === 0 && m[0][3] === 0 && m[1][2] === 0 && m[1][3] === 0 && m[2][0] === 0 && m[2][1] === 0 && m[2][2] === 1 && m[2][3] === 0 && m[3][2] === 0 && m[3][3] === 1;\n }\n function composeMatrix(translate, scale, skew, quat, perspective) {\n var matrix = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]];\n for (var i = 0; i < 4; i++) {\n matrix[i][3] = perspective[i];\n }\n for (var _i = 0; _i < 3; _i++) {\n for (var j = 0; j < 3; j++) {\n matrix[3][_i] += translate[j] * matrix[j][_i];\n }\n }\n var x = quat[0];\n var y = quat[1];\n var z = quat[2];\n var w = quat[3];\n var rotMatrix = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]];\n rotMatrix[0][0] = 1 - 2 * (y * y + z * z);\n rotMatrix[0][1] = 2 * (x * y - z * w);\n rotMatrix[0][2] = 2 * (x * z + y * w);\n rotMatrix[1][0] = 2 * (x * y + z * w);\n rotMatrix[1][1] = 1 - 2 * (x * x + z * z);\n rotMatrix[1][2] = 2 * (y * z - x * w);\n rotMatrix[2][0] = 2 * (x * z - y * w);\n rotMatrix[2][1] = 2 * (y * z + x * w);\n rotMatrix[2][2] = 1 - 2 * (x * x + y * y);\n matrix = multiply(matrix, rotMatrix);\n var temp = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]];\n if (skew[2]) {\n temp[2][1] = skew[2];\n matrix = multiply(matrix, temp);\n }\n if (skew[1]) {\n temp[2][1] = 0;\n temp[2][0] = skew[0];\n matrix = multiply(matrix, temp);\n }\n if (skew[0]) {\n temp[2][0] = 0;\n temp[1][0] = skew[0];\n matrix = multiply(matrix, temp);\n }\n for (var _i2 = 0; _i2 < 3; _i2++) {\n for (var _j = 0; _j < 3; _j++) {\n matrix[_i2][_j] *= scale[_i2];\n }\n }\n if (is2D(matrix)) {\n return [matrix[0][0], matrix[0][1], matrix[1][0], matrix[1][1], matrix[3][0], matrix[3][1]];\n }\n return matrix[0].concat(matrix[1], matrix[2], matrix[3]);\n }\n return composeMatrix;\n}();\nfunction numberToLongString(x) {\n return x.toFixed(6).replace('.000000', '');\n}\nfunction mergeMatrices(left, right) {\n var leftArgs;\n var rightArgs;\n // @ts-ignore\n if (left.decompositionPair !== right) {\n // @ts-ignore\n left.decompositionPair = right;\n // @ts-ignore\n leftArgs = makeMatrixDecomposition(left);\n }\n // @ts-ignore\n if (right.decompositionPair !== left) {\n // @ts-ignore\n right.decompositionPair = left;\n // @ts-ignore\n rightArgs = makeMatrixDecomposition(right);\n }\n if (leftArgs[0] === null || rightArgs[0] === null) return [\n // @ts-ignore\n [false],\n // @ts-ignore\n [true],\n // @ts-ignore\n function (x) {\n return x ? right[0].d : left[0].d;\n }];\n leftArgs[0].push(0);\n rightArgs[0].push(1);\n return [leftArgs, rightArgs,\n // @ts-ignore\n function (list) {\n // @ts-ignore\n var q = quat(leftArgs[0][3], rightArgs[0][3], list[5]);\n var mat = composeMatrix(list[0], list[1], list[2], q, list[4]);\n var stringifiedArgs = mat.map(numberToLongString).join(',');\n return stringifiedArgs;\n }];\n}\nfunction dot(v1, v2) {\n var result = 0;\n for (var i = 0; i < v1.length; i++) {\n result += v1[i] * v2[i];\n }\n return result;\n}\nfunction quat(fromQ, toQ, f) {\n var product = dot(fromQ, toQ);\n product = clamp(product, -1.0, 1.0);\n var quat = [];\n if (product === 1.0) {\n quat = fromQ;\n } else {\n var theta = Math.acos(product);\n var w = Math.sin(f * theta) * 1 / Math.sqrt(1 - product * product);\n for (var i = 0; i < 4; i++) {\n quat.push(fromQ[i] * (Math.cos(f * theta) - product * w) + toQ[i] * w);\n }\n }\n return quat;\n}\n\n// scaleX/Y/Z -> scale\nfunction typeTo2D(type) {\n return type.replace(/[XY]/, '');\n}\n\n// scaleX/Y/Z -> scale3d\nfunction typeTo3D(type) {\n return type.replace(/(X|Y|Z|3d)?$/, '3d');\n}\nvar isMatrixOrPerspective = function isMatrixOrPerspective(lt, rt) {\n return lt === 'perspective' && rt === 'perspective' || (lt === 'matrix' || lt === 'matrix3d') && (rt === 'matrix' || rt === 'matrix3d');\n};\nfunction mergeTransforms(left, right, target) {\n var flipResults = false;\n // padding empty transform, eg. merge 'scale(10)' with 'none' -> scale(1)\n if (!left.length || !right.length) {\n if (!left.length) {\n flipResults = true;\n left = right;\n right = [];\n }\n var _loop = function _loop() {\n var _left$i = left[i],\n type = _left$i.t,\n args = _left$i.d;\n // none -> scale(1)/translateX(0)\n var defaultValue = type.substring(0, 5) === 'scale' ? 1 : 0;\n right.push({\n t: type,\n d: args.map(function (arg) {\n if (typeof arg === 'number') {\n return getOrCreateUnitValue(defaultValue);\n }\n return getOrCreateUnitValue(defaultValue, arg.unit);\n // {\n // unit: arg.unit,\n // value: defaultValue,\n // };\n })\n });\n };\n for (var i = 0; i < left.length; i++) {\n _loop();\n }\n }\n var leftResult = [];\n var rightResult = [];\n var types = [];\n\n // merge matrix() with matrix3d()\n if (left.length !== right.length) {\n var merged = mergeMatrices(left, right);\n // @ts-ignore\n leftResult = [merged[0]];\n // @ts-ignore\n rightResult = [merged[1]];\n types = [['matrix', [merged[2]]]];\n } else {\n for (var _i3 = 0; _i3 < left.length; _i3++) {\n var leftType = left[_i3].t;\n var rightType = right[_i3].t;\n var leftArgs = left[_i3].d;\n var rightArgs = right[_i3].d;\n var leftFunctionData = transformFunctions[leftType];\n var rightFunctionData = transformFunctions[rightType];\n var type = void 0;\n if (isMatrixOrPerspective(leftType, rightType)) {\n var _merged = mergeMatrices([left[_i3]], [right[_i3]]);\n // @ts-ignore\n leftResult.push(_merged[0]);\n // @ts-ignore\n rightResult.push(_merged[1]);\n types.push(['matrix', [_merged[2]]]);\n continue;\n } else if (leftType === rightType) {\n type = leftType;\n } else if (leftFunctionData[2] && rightFunctionData[2] && typeTo2D(leftType) === typeTo2D(rightType)) {\n type = typeTo2D(leftType);\n // @ts-ignore\n leftArgs = leftFunctionData[2](leftArgs);\n // @ts-ignore\n rightArgs = rightFunctionData[2](rightArgs);\n } else if (leftFunctionData[1] && rightFunctionData[1] && typeTo3D(leftType) === typeTo3D(rightType)) {\n type = typeTo3D(leftType);\n // @ts-ignore\n leftArgs = leftFunctionData[1](leftArgs);\n // @ts-ignore\n rightArgs = rightFunctionData[1](rightArgs);\n } else {\n var _merged2 = mergeMatrices(left, right);\n // @ts-ignore\n leftResult = [_merged2[0]];\n // @ts-ignore\n rightResult = [_merged2[1]];\n types = [['matrix', [_merged2[2]]]];\n break;\n }\n var leftArgsCopy = [];\n var rightArgsCopy = [];\n var stringConversions = [];\n for (var j = 0; j < leftArgs.length; j++) {\n // const merge = leftArgs[j].unit === UnitType.kNumber ? mergeDimensions : mergeDimensions;\n var _merged3 = mergeDimensions(leftArgs[j], rightArgs[j], target, false, j);\n leftArgsCopy[j] = _merged3[0];\n rightArgsCopy[j] = _merged3[1];\n stringConversions.push(_merged3[2]);\n }\n leftResult.push(leftArgsCopy);\n rightResult.push(rightArgsCopy);\n types.push([type, stringConversions]);\n }\n }\n if (flipResults) {\n var tmp = leftResult;\n leftResult = rightResult;\n rightResult = tmp;\n }\n return [leftResult, rightResult, function (list) {\n return list.map(function (args, i) {\n var stringifiedArgs = args.map(function (arg, j) {\n return types[i][1][j](arg);\n }).join(',');\n if (types[i][0] === 'matrix' && stringifiedArgs.split(',').length === 16) {\n types[i][0] = 'matrix3d';\n }\n if (types[i][0] === 'matrix3d' && stringifiedArgs.split(',').length === 6) {\n types[i][0] = 'matrix';\n }\n return \"\".concat(types[i][0], \"(\").concat(stringifiedArgs, \")\");\n }).join(' ');\n }];\n}\n\n/**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/transform-origin\n * eg. 'center' 'top left' '50px 50px'\n */\nvar parseTransformOrigin = memoize(function (value) {\n if (isString(value)) {\n if (value === 'text-anchor') {\n return [getOrCreateUnitValue(0, 'px'), getOrCreateUnitValue(0, 'px')];\n }\n var values = value.split(' ');\n if (values.length === 1) {\n if (values[0] === 'top' || values[0] === 'bottom') {\n // 'top' -> 'center top'\n values[1] = values[0];\n values[0] = 'center';\n } else {\n // '50px' -> '50px center'\n values[1] = 'center';\n }\n }\n if (values.length !== 2) {\n return null;\n }\n\n // eg. center bottom\n return [parseLengthOrPercentage(convertKeyword2Percent(values[0])), parseLengthOrPercentage(convertKeyword2Percent(values[1]))];\n }\n return [getOrCreateUnitValue(value[0] || 0, 'px'), getOrCreateUnitValue(value[1] || 0, 'px')];\n});\nfunction convertKeyword2Percent(keyword) {\n if (keyword === 'center') {\n return '50%';\n }\n if (keyword === 'left' || keyword === 'top') {\n return '0%';\n }\n if (keyword === 'right' || keyword === 'bottom') {\n return '100%';\n }\n return keyword;\n}\n\n/**\n * Blink used them in code generation(css_properties.json5)\n */\nvar BUILT_IN_PROPERTIES = [{\n /**\n * used in CSS Layout API\n * eg. `display: 'flex'`\n */\n n: 'display',\n k: ['none']\n}, {\n /**\n * range [0.0, 1.0]\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/opacity\n */\n n: 'opacity',\n \"int\": true,\n inh: true,\n d: '1',\n syntax: PropertySyntax.OPACITY_VALUE\n}, {\n /**\n * inheritable, range [0.0, 1.0]\n * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity\n * @see https://svgwg.org/svg2-draft/painting.html#FillOpacity\n */\n n: 'fillOpacity',\n \"int\": true,\n inh: true,\n d: '1',\n syntax: PropertySyntax.OPACITY_VALUE\n}, {\n /**\n * inheritable, range [0.0, 1.0]\n * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity\n * @see https://svgwg.org/svg2-draft/painting.html#StrokeOpacity\n */\n n: 'strokeOpacity',\n \"int\": true,\n inh: true,\n d: '1',\n syntax: PropertySyntax.OPACITY_VALUE\n}, {\n /**\n * background-color is not inheritable\n * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Fills_and_Strokes\n */\n n: 'fill',\n \"int\": true,\n k: ['none'],\n d: 'none',\n syntax: PropertySyntax.PAINT\n}, {\n n: 'fillRule',\n k: ['nonzero', 'evenodd'],\n d: 'nonzero'\n},\n/**\n * default to none\n * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke#usage_notes\n */\n{\n n: 'stroke',\n \"int\": true,\n k: ['none'],\n d: 'none',\n syntax: PropertySyntax.PAINT,\n /**\n * Stroke 'none' won't affect geometry but others will.\n */\n l: true\n}, {\n n: 'shadowType',\n k: ['inner', 'outer', 'both'],\n d: 'outer',\n l: true\n}, {\n n: 'shadowColor',\n \"int\": true,\n syntax: PropertySyntax.COLOR\n}, {\n n: 'shadowOffsetX',\n \"int\": true,\n l: true,\n d: '0',\n syntax: PropertySyntax.LENGTH_PERCENTAGE\n}, {\n n: 'shadowOffsetY',\n \"int\": true,\n l: true,\n d: '0',\n syntax: PropertySyntax.LENGTH_PERCENTAGE\n}, {\n n: 'shadowBlur',\n \"int\": true,\n l: true,\n d: '0',\n syntax: PropertySyntax.SHADOW_BLUR\n}, {\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width\n */\n n: 'lineWidth',\n \"int\": true,\n inh: true,\n d: '1',\n l: true,\n a: ['strokeWidth'],\n syntax: PropertySyntax.LENGTH_PERCENTAGE\n}, {\n n: 'increasedLineWidthForHitTesting',\n inh: true,\n d: '0',\n l: true,\n syntax: PropertySyntax.LENGTH_PERCENTAGE\n}, {\n n: 'lineJoin',\n inh: true,\n l: true,\n a: ['strokeLinejoin'],\n k: ['miter', 'bevel', 'round'],\n d: 'miter'\n}, {\n n: 'lineCap',\n inh: true,\n l: true,\n a: ['strokeLinecap'],\n k: ['butt', 'round', 'square'],\n d: 'butt'\n}, {\n n: 'lineDash',\n \"int\": true,\n inh: true,\n k: ['none'],\n a: ['strokeDasharray'],\n syntax: PropertySyntax.LENGTH_PERCENTAGE_12\n}, {\n n: 'lineDashOffset',\n \"int\": true,\n inh: true,\n d: '0',\n a: ['strokeDashoffset'],\n syntax: PropertySyntax.LENGTH_PERCENTAGE\n}, {\n n: 'offsetPath',\n syntax: PropertySyntax.DEFINED_PATH\n}, {\n n: 'offsetDistance',\n \"int\": true,\n syntax: PropertySyntax.OFFSET_DISTANCE\n}, {\n n: 'dx',\n \"int\": true,\n l: true,\n d: '0',\n syntax: PropertySyntax.LENGTH_PERCENTAGE\n}, {\n n: 'dy',\n \"int\": true,\n l: true,\n d: '0',\n syntax: PropertySyntax.LENGTH_PERCENTAGE\n}, {\n n: 'zIndex',\n ind: true,\n \"int\": true,\n d: '0',\n k: ['auto'],\n syntax: PropertySyntax.Z_INDEX\n}, {\n n: 'visibility',\n k: ['visible', 'hidden'],\n ind: true,\n inh: true,\n /**\n * support interpolation\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/visibility#interpolation\n */\n \"int\": true,\n d: 'visible'\n}, {\n n: 'pointerEvents',\n inh: true,\n k: ['none', 'auto', 'stroke', 'fill', 'painted', 'visible', 'visiblestroke', 'visiblefill', 'visiblepainted',\n // 'bounding-box',\n 'all'],\n d: 'auto'\n}, {\n n: 'filter',\n ind: true,\n l: true,\n k: ['none'],\n d: 'none',\n syntax: PropertySyntax.FILTER\n}, {\n n: 'clipPath',\n syntax: PropertySyntax.DEFINED_PATH\n}, {\n n: 'textPath',\n syntax: PropertySyntax.DEFINED_PATH\n}, {\n n: 'textPathSide',\n k: ['left', 'right'],\n d: 'left'\n}, {\n n: 'textPathStartOffset',\n l: true,\n d: '0',\n syntax: PropertySyntax.LENGTH_PERCENTAGE\n}, {\n n: 'transform',\n p: 100,\n \"int\": true,\n k: ['none'],\n d: 'none',\n syntax: PropertySyntax.TRANSFORM\n}, {\n n: 'transformOrigin',\n p: 100,\n d: '0 0',\n // // int: true,\n // d: (nodeName: string) => {\n // if (nodeName === Shape.CIRCLE || nodeName === Shape.ELLIPSE) {\n // return 'center';\n // }\n // if (nodeName === Shape.TEXT) {\n // return 'text-anchor';\n // }\n // return 'left top';\n // },\n l: true,\n syntax: PropertySyntax.TRANSFORM_ORIGIN\n}, {\n n: 'cx',\n \"int\": true,\n l: true,\n d: '0',\n syntax: PropertySyntax.COORDINATE\n}, {\n n: 'cy',\n \"int\": true,\n l: true,\n d: '0',\n syntax: PropertySyntax.COORDINATE\n}, {\n n: 'cz',\n \"int\": true,\n l: true,\n d: '0',\n syntax: PropertySyntax.COORDINATE\n}, {\n n: 'r',\n \"int\": true,\n l: true,\n d: '0',\n syntax: PropertySyntax.LENGTH_PERCENTAGE\n}, {\n n: 'rx',\n \"int\": true,\n l: true,\n d: '0',\n syntax: PropertySyntax.LENGTH_PERCENTAGE\n}, {\n n: 'ry',\n \"int\": true,\n l: true,\n d: '0',\n syntax: PropertySyntax.LENGTH_PERCENTAGE\n},\n// Rect Image Group\n{\n // x in local space\n n: 'x',\n \"int\": true,\n l: true,\n d: '0',\n syntax: PropertySyntax.COORDINATE\n}, {\n // y in local space\n n: 'y',\n \"int\": true,\n l: true,\n d: '0',\n syntax: PropertySyntax.COORDINATE\n}, {\n // z in local space\n n: 'z',\n \"int\": true,\n l: true,\n d: '0',\n syntax: PropertySyntax.COORDINATE\n}, {\n n: 'width',\n \"int\": true,\n l: true,\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/width\n */\n k: ['auto', 'fit-content', 'min-content', 'max-content'],\n d: '0',\n syntax: PropertySyntax.LENGTH_PERCENTAGE\n}, {\n n: 'height',\n \"int\": true,\n l: true,\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/height\n */\n k: ['auto', 'fit-content', 'min-content', 'max-content'],\n d: '0',\n syntax: PropertySyntax.LENGTH_PERCENTAGE\n}, {\n n: 'radius',\n \"int\": true,\n l: true,\n d: '0',\n syntax: PropertySyntax.LENGTH_PERCENTAGE_14\n},\n// Line\n{\n n: 'x1',\n \"int\": true,\n l: true,\n syntax: PropertySyntax.COORDINATE\n}, {\n n: 'y1',\n \"int\": true,\n l: true,\n syntax: PropertySyntax.COORDINATE\n}, {\n n: 'z1',\n \"int\": true,\n l: true,\n syntax: PropertySyntax.COORDINATE\n}, {\n n: 'x2',\n \"int\": true,\n l: true,\n syntax: PropertySyntax.COORDINATE\n}, {\n n: 'y2',\n \"int\": true,\n l: true,\n syntax: PropertySyntax.COORDINATE\n}, {\n n: 'z2',\n \"int\": true,\n l: true,\n syntax: PropertySyntax.COORDINATE\n},\n// Path\n{\n n: 'd',\n \"int\": true,\n l: true,\n d: '',\n syntax: PropertySyntax.PATH,\n p: 50\n},\n// Polyline & Polygon\n{\n n: 'points',\n /**\n * support interpolation\n */\n \"int\": true,\n l: true,\n syntax: PropertySyntax.LIST_OF_POINTS,\n p: 50\n},\n// Text\n{\n n: 'text',\n l: true,\n d: '',\n syntax: PropertySyntax.TEXT,\n p: 50\n}, {\n n: 'textTransform',\n l: true,\n inh: true,\n k: ['capitalize', 'uppercase', 'lowercase', 'none'],\n d: 'none',\n syntax: PropertySyntax.TEXT_TRANSFORM,\n p: 51 // it must get parsed after text\n}, {\n n: 'font',\n l: true\n}, {\n n: 'fontSize',\n \"int\": true,\n inh: true,\n /**\n * @see https://www.w3schools.com/css/css_font_size.asp\n */\n d: '16px',\n l: true,\n syntax: PropertySyntax.LENGTH_PERCENTAGE\n}, {\n n: 'fontFamily',\n l: true,\n inh: true,\n d: 'sans-serif'\n}, {\n n: 'fontStyle',\n l: true,\n inh: true,\n k: ['normal', 'italic', 'oblique'],\n d: 'normal'\n}, {\n n: 'fontWeight',\n l: true,\n inh: true,\n k: ['normal', 'bold', 'bolder', 'lighter'],\n d: 'normal'\n}, {\n n: 'fontVariant',\n l: true,\n inh: true,\n k: ['normal', 'small-caps'],\n d: 'normal'\n}, {\n n: 'lineHeight',\n l: true,\n syntax: PropertySyntax.LENGTH,\n \"int\": true,\n d: '0'\n}, {\n n: 'letterSpacing',\n l: true,\n syntax: PropertySyntax.LENGTH,\n \"int\": true,\n d: '0'\n}, {\n n: 'miterLimit',\n l: true,\n syntax: PropertySyntax.NUMBER,\n d: function d(nodeName) {\n if (nodeName === Shape.PATH || nodeName === Shape.POLYGON || nodeName === Shape.POLYLINE) {\n return '4';\n }\n return '10';\n }\n}, {\n n: 'wordWrap',\n l: true\n}, {\n n: 'wordWrapWidth',\n l: true\n}, {\n n: 'maxLines',\n l: true\n}, {\n n: 'textOverflow',\n l: true,\n d: 'clip'\n}, {\n n: 'leading',\n l: true\n}, {\n n: 'textBaseline',\n l: true,\n inh: true,\n k: ['top', 'hanging', 'middle', 'alphabetic', 'ideographic', 'bottom'],\n d: 'alphabetic'\n}, {\n n: 'textAlign',\n l: true,\n inh: true,\n k: ['start', 'center', 'middle', 'end', 'left', 'right'],\n d: 'start'\n},\n// {\n// n: 'whiteSpace',\n// l: true,\n// },\n{\n n: 'markerStart',\n syntax: PropertySyntax.MARKER\n}, {\n n: 'markerEnd',\n syntax: PropertySyntax.MARKER\n}, {\n n: 'markerMid',\n syntax: PropertySyntax.MARKER\n}, {\n n: 'markerStartOffset',\n syntax: PropertySyntax.LENGTH,\n l: true,\n \"int\": true,\n d: '0'\n}, {\n n: 'markerEndOffset',\n syntax: PropertySyntax.LENGTH,\n l: true,\n \"int\": true,\n d: '0'\n}];\nvar GEOMETRY_ATTRIBUTE_NAMES = new Set(BUILT_IN_PROPERTIES.filter(function (n) {\n return !!n.l;\n}).map(function (n) {\n return n.n;\n}));\nvar propertyMetadataCache = {};\nvar DefaultStyleValueRegistry = /*#__PURE__*/function () {\n function DefaultStyleValueRegistry(runtime) {\n var _this = this;\n _classCallCheck(this, DefaultStyleValueRegistry);\n this.runtime = runtime;\n BUILT_IN_PROPERTIES.forEach(function (property) {\n _this.registerMetadata(property);\n });\n }\n return _createClass(DefaultStyleValueRegistry, [{\n key: \"registerMetadata\",\n value: function registerMetadata(metadata) {\n [metadata.n].concat(_toConsumableArray(metadata.a || [])).forEach(function (name) {\n propertyMetadataCache[name] = metadata;\n });\n }\n }, {\n key: \"getPropertySyntax\",\n value: function getPropertySyntax(syntax) {\n return this.runtime.CSSPropertySyntaxFactory[syntax];\n }\n\n /**\n * * parse value, eg.\n * fill: 'red' => CSSRGB\n * translateX: '10px' => CSSUnitValue { unit: 'px', value: 10 }\n * fontSize: '2em' => { unit: 'px', value: 32 }\n *\n * * calculate used value\n * * post process\n */\n }, {\n key: \"processProperties\",\n value: function processProperties(object, attributes) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n skipUpdateAttribute: false,\n skipParse: false,\n forceUpdateGeometry: false,\n usedAttributes: [],\n memoize: true\n };\n Object.assign(object.attributes, attributes);\n\n // clipPath\n var oldClipPath = object.parsedStyle.clipPath;\n var oldOffsetPath = object.parsedStyle.offsetPath;\n assignParsedStyle(object, attributes);\n var needUpdateGeometry = !!options.forceUpdateGeometry;\n if (!needUpdateGeometry) {\n for (var i in attributes) {\n if (GEOMETRY_ATTRIBUTE_NAMES.has(i)) {\n needUpdateGeometry = true;\n break;\n }\n }\n }\n var list = getParsedStyleListOf(object);\n if (list.has('fill') && attributes.fill) {\n object.parsedStyle.fill = parseColor(attributes.fill);\n }\n if (list.has('stroke') && attributes.stroke) {\n object.parsedStyle.stroke = parseColor(attributes.stroke);\n }\n if (list.has('shadowColor') && attributes.shadowColor) {\n object.parsedStyle.shadowColor = parseColor(attributes.shadowColor);\n }\n if (list.has('filter') && attributes.filter) {\n object.parsedStyle.filter = parseFilter(attributes.filter);\n }\n // Rect\n // @ts-ignore\n if (list.has('radius') && !isNil(attributes.radius)) {\n // @ts-ignore\n object.parsedStyle.radius = parseDimensionArrayFormat(\n // @ts-ignore\n attributes.radius, 4);\n }\n // Polyline\n if (list.has('lineDash') && !isNil(attributes.lineDash)) {\n // dom标准自动转化奇数长度数组,webgl需要手动处理\n object.parsedStyle.lineDash = parseDimensionArrayFormat(attributes.lineDash, 'even');\n }\n // @ts-ignore\n if (list.has('points') && attributes.points) {\n // @ts-ignore\n object.parsedStyle.points = parsePoints(attributes.points);\n }\n // Path\n // @ts-ignore\n if (list.has('d') && attributes.d === '') {\n object.parsedStyle.d = _objectSpread({}, EMPTY_PARSED_PATH);\n }\n // @ts-ignore\n if (list.has('d') && attributes.d) {\n object.parsedStyle.d = parsePath(\n // @ts-ignore\n attributes.d);\n }\n // Text\n if (list.has('textTransform') && attributes.textTransform) {\n this.runtime.CSSPropertySyntaxFactory[PropertySyntax.TEXT_TRANSFORM].calculator(null, null, {\n value: attributes.textTransform\n }, object, null);\n }\n if (list.has('clipPath') && !isUndefined(attributes.clipPath)) {\n this.runtime.CSSPropertySyntaxFactory[PropertySyntax.DEFINED_PATH].calculator('clipPath', oldClipPath, attributes.clipPath, object, this.runtime);\n }\n if (list.has('offsetPath') && attributes.offsetPath) {\n this.runtime.CSSPropertySyntaxFactory[PropertySyntax.DEFINED_PATH].calculator('offsetPath', oldOffsetPath, attributes.offsetPath, object, this.runtime);\n }\n if (list.has('transform') && attributes.transform) {\n object.parsedStyle.transform = parseTransform(attributes.transform);\n }\n if (list.has('transformOrigin') && attributes.transformOrigin) {\n object.parsedStyle.transformOrigin = parseTransformOrigin(attributes.transformOrigin);\n }\n // Marker\n // @ts-ignore\n if (list.has('markerStart') && attributes.markerStart) {\n object.parsedStyle.markerStart = this.runtime.CSSPropertySyntaxFactory[PropertySyntax.MARKER].calculator(null,\n // @ts-ignore\n attributes.markerStart,\n // @ts-ignore\n attributes.markerStart, null, null);\n }\n // @ts-ignore\n if (list.has('markerEnd') && attributes.markerEnd) {\n object.parsedStyle.markerEnd = this.runtime.CSSPropertySyntaxFactory[PropertySyntax.MARKER].calculator(null,\n // @ts-ignore\n attributes.markerEnd,\n // @ts-ignore\n attributes.markerEnd, null, null);\n }\n // @ts-ignore\n if (list.has('markerMid') && attributes.markerMid) {\n object.parsedStyle.markerMid = this.runtime.CSSPropertySyntaxFactory[PropertySyntax.MARKER].calculator('',\n // @ts-ignore\n attributes.markerMid,\n // @ts-ignore\n attributes.markerMid, null, null);\n }\n if (list.has('zIndex') && !isNil(attributes.zIndex)) {\n this.runtime.CSSPropertySyntaxFactory[PropertySyntax.Z_INDEX].postProcessor(object);\n }\n if (list.has('offsetDistance') && !isNil(attributes.offsetDistance)) {\n this.runtime.CSSPropertySyntaxFactory[PropertySyntax.OFFSET_DISTANCE].postProcessor(object);\n }\n if (list.has('transform') && attributes.transform) {\n this.runtime.CSSPropertySyntaxFactory[PropertySyntax.TRANSFORM].postProcessor(object);\n }\n if (list.has('transformOrigin') && attributes.transformOrigin) {\n this.runtime.CSSPropertySyntaxFactory[PropertySyntax.TRANSFORM_ORIGIN].postProcessor(object);\n }\n if (needUpdateGeometry) {\n object.geometry.dirty = true;\n object.renderable.boundsDirty = true;\n object.renderable.renderBoundsDirty = true;\n if (!options.forceUpdateGeometry) {\n this.runtime.sceneGraphService.dirtifyToRoot(object);\n }\n }\n }\n\n /**\n * update geometry when relative props changed,\n * eg. r of Circle, width/height of Rect\n */\n }, {\n key: \"updateGeometry\",\n value: function updateGeometry(object) {\n var nodeName = object.nodeName;\n var geometryUpdater = this.runtime.geometryUpdaterFactory[nodeName];\n if (geometryUpdater) {\n var geometry = object.geometry;\n if (!geometry.contentBounds) {\n geometry.contentBounds = new AABB();\n }\n if (!geometry.renderBounds) {\n geometry.renderBounds = new AABB();\n }\n var parsedStyle = object.parsedStyle;\n var _geometryUpdater$upda = geometryUpdater.update(parsedStyle, object),\n _geometryUpdater$upda2 = _geometryUpdater$upda.cx,\n cx = _geometryUpdater$upda2 === void 0 ? 0 : _geometryUpdater$upda2,\n _geometryUpdater$upda3 = _geometryUpdater$upda.cy,\n cy = _geometryUpdater$upda3 === void 0 ? 0 : _geometryUpdater$upda3,\n _geometryUpdater$upda4 = _geometryUpdater$upda.cz,\n cz = _geometryUpdater$upda4 === void 0 ? 0 : _geometryUpdater$upda4,\n _geometryUpdater$upda5 = _geometryUpdater$upda.hwidth,\n hwidth = _geometryUpdater$upda5 === void 0 ? 0 : _geometryUpdater$upda5,\n _geometryUpdater$upda6 = _geometryUpdater$upda.hheight,\n hheight = _geometryUpdater$upda6 === void 0 ? 0 : _geometryUpdater$upda6,\n _geometryUpdater$upda7 = _geometryUpdater$upda.hdepth,\n hdepth = _geometryUpdater$upda7 === void 0 ? 0 : _geometryUpdater$upda7;\n // init with content box\n var halfExtents = [Math.abs(hwidth), Math.abs(hheight), hdepth];\n // anchor is center by default, don't account for lineWidth here\n var stroke = parsedStyle.stroke,\n _parsedStyle$lineWidt = parsedStyle.lineWidth,\n lineWidth = _parsedStyle$lineWidt === void 0 ? 1 : _parsedStyle$lineWidt,\n _parsedStyle$increase = parsedStyle.increasedLineWidthForHitTesting,\n increasedLineWidthForHitTesting = _parsedStyle$increase === void 0 ? 0 : _parsedStyle$increase,\n _parsedStyle$shadowTy = parsedStyle.shadowType,\n shadowType = _parsedStyle$shadowTy === void 0 ? 'outer' : _parsedStyle$shadowTy,\n shadowColor = parsedStyle.shadowColor,\n _parsedStyle$filter = parsedStyle.filter,\n filter = _parsedStyle$filter === void 0 ? [] : _parsedStyle$filter,\n transformOrigin = parsedStyle.transformOrigin;\n var center = [cx, cy, cz];\n // update geometry's AABB\n geometry.contentBounds.update(center, halfExtents);\n // @see https://github.molgen.mpg.de/git-mirror/cairo/blob/master/src/cairo-stroke-style.c#L97..L128\n var expansion = nodeName === Shape.POLYLINE || nodeName === Shape.POLYGON || nodeName === Shape.PATH ? Math.SQRT2 : 0.5;\n // append border only if stroke existed\n var hasStroke = stroke && !stroke.isNone;\n if (hasStroke) {\n var halfLineWidth = ((lineWidth || 0) + (increasedLineWidthForHitTesting || 0)) * expansion;\n halfExtents[0] += halfLineWidth;\n halfExtents[1] += halfLineWidth;\n }\n geometry.renderBounds.update(center, halfExtents);\n // account for shadow, only support constant value now\n if (shadowColor && shadowType && shadowType !== 'inner') {\n var _geometry$renderBound = geometry.renderBounds,\n min = _geometry$renderBound.min,\n max = _geometry$renderBound.max;\n var shadowBlur = parsedStyle.shadowBlur,\n shadowOffsetX = parsedStyle.shadowOffsetX,\n shadowOffsetY = parsedStyle.shadowOffsetY;\n var shadowBlurInPixels = shadowBlur || 0;\n var shadowOffsetXInPixels = shadowOffsetX || 0;\n var shadowOffsetYInPixels = shadowOffsetY || 0;\n var shadowLeft = min[0] - shadowBlurInPixels + shadowOffsetXInPixels;\n var shadowRight = max[0] + shadowBlurInPixels + shadowOffsetXInPixels;\n var shadowTop = min[1] - shadowBlurInPixels + shadowOffsetYInPixels;\n var shadowBottom = max[1] + shadowBlurInPixels + shadowOffsetYInPixels;\n min[0] = Math.min(min[0], shadowLeft);\n max[0] = Math.max(max[0], shadowRight);\n min[1] = Math.min(min[1], shadowTop);\n max[1] = Math.max(max[1], shadowBottom);\n geometry.renderBounds.setMinMax(min, max);\n }\n // account for filter, eg. blur(5px), drop-shadow()\n filter.forEach(function (_ref) {\n var name = _ref.name,\n params = _ref.params;\n if (name === 'blur') {\n var blurRadius = params[0].value;\n geometry.renderBounds.update(geometry.renderBounds.center, vec3.add(geometry.renderBounds.halfExtents, geometry.renderBounds.halfExtents, [blurRadius, blurRadius, 0]));\n } else if (name === 'drop-shadow') {\n var _shadowOffsetX = params[0].value;\n var _shadowOffsetY = params[1].value;\n var _shadowBlur = params[2].value;\n var _geometry$renderBound2 = geometry.renderBounds,\n _min = _geometry$renderBound2.min,\n _max = _geometry$renderBound2.max;\n var _shadowLeft = _min[0] - _shadowBlur + _shadowOffsetX;\n var _shadowRight = _max[0] + _shadowBlur + _shadowOffsetX;\n var _shadowTop = _min[1] - _shadowBlur + _shadowOffsetY;\n var _shadowBottom = _max[1] + _shadowBlur + _shadowOffsetY;\n _min[0] = Math.min(_min[0], _shadowLeft);\n _max[0] = Math.max(_max[0], _shadowRight);\n _min[1] = Math.min(_min[1], _shadowTop);\n _max[1] = Math.max(_max[1], _shadowBottom);\n geometry.renderBounds.setMinMax(_min, _max);\n }\n });\n object.geometry.dirty = false;\n\n // @see https://github.com/antvis/g/issues/957\n var flipY = hwidth < 0;\n var flipX = hheight < 0;\n // set transform origin\n var usedOriginXValue = (flipY ? -1 : 1) * (transformOrigin ? convertPercentUnit(transformOrigin[0], 0, object, true) : 0);\n var usedOriginYValue = (flipX ? -1 : 1) * (transformOrigin ? convertPercentUnit(transformOrigin[1], 1, object, true) : 0);\n if (usedOriginXValue || usedOriginYValue) {\n object.setOrigin(usedOriginXValue, usedOriginYValue);\n }\n }\n }\n }, {\n key: \"updateSizeAttenuation\",\n value: function updateSizeAttenuation(node, zoom) {\n if (node.style.isSizeAttenuation) {\n if (!node.style.rawLineWidth) {\n node.style.rawLineWidth = node.style.lineWidth;\n }\n node.style.lineWidth = (node.style.rawLineWidth || 1) / zoom;\n if (node.nodeName === Shape.CIRCLE) {\n if (!node.style.rawR) {\n node.style.rawR = node.style.r;\n }\n node.style.r = (node.style.rawR || 1) / zoom;\n }\n } else {\n if (node.style.rawLineWidth) {\n node.style.lineWidth = node.style.rawLineWidth;\n delete node.style.rawLineWidth;\n }\n if (node.nodeName === Shape.CIRCLE) {\n if (node.style.rawR) {\n node.style.r = node.style.rawR;\n delete node.style.rawR;\n }\n }\n }\n }\n }]);\n}();\nfunction assignParsedStyle(object, attributes) {\n var list = getParsedStyleListOf(object);\n for (var key in attributes) {\n if (list.has(key)) {\n object.parsedStyle[key] = attributes[key];\n }\n }\n}\nfunction getParsedStyleListOf(object) {\n return object.constructor.PARSED_STYLE_LIST;\n}\n\nvar CSSPropertyAngle = /*#__PURE__*/function () {\n function CSSPropertyAngle() {\n _classCallCheck(this, CSSPropertyAngle);\n this.mixer = mergeNumbers;\n }\n return _createClass(CSSPropertyAngle, [{\n key: \"calculator\",\n value: function calculator(name, oldParsed, parsed, object) {\n return convertAngleUnit(parsed);\n }\n }]);\n}();\n\n/**\n * clipPath / textPath / offsetPath\n */\nvar CSSPropertyClipPath = /*#__PURE__*/function () {\n function CSSPropertyClipPath() {\n _classCallCheck(this, CSSPropertyClipPath);\n }\n return _createClass(CSSPropertyClipPath, [{\n key: \"calculator\",\n value: function calculator(name, oldPath, newPath, object, runtime) {\n // unset\n if (newPath instanceof CSSKeywordValue) {\n newPath = null;\n }\n runtime.sceneGraphService.updateDisplayObjectDependency(name, oldPath, newPath, object);\n if (name === 'clipPath') {\n // should affect children\n object.forEach(function (leaf) {\n if (leaf.childNodes.length === 0) {\n runtime.sceneGraphService.dirtifyToRoot(leaf);\n }\n });\n }\n return newPath;\n }\n }]);\n}();\n\nvar CSSPropertyColor = /*#__PURE__*/function () {\n function CSSPropertyColor() {\n _classCallCheck(this, CSSPropertyColor);\n this.parser = parseColor;\n this.mixer = mergeColors;\n }\n return _createClass(CSSPropertyColor, [{\n key: \"calculator\",\n value: function calculator(name, oldParsed, parsed, object) {\n if (parsed instanceof CSSKeywordValue) {\n // 'unset' 'none'\n return parsed.value === 'none' ? noneColor : transparentColor;\n }\n return parsed;\n }\n }]);\n}();\n\nvar CSSPropertyFilter = /*#__PURE__*/function () {\n function CSSPropertyFilter() {\n _classCallCheck(this, CSSPropertyFilter);\n }\n return _createClass(CSSPropertyFilter, [{\n key: \"calculator\",\n value: function calculator(name, oldParsed, parsed) {\n // unset or none\n if (parsed instanceof CSSKeywordValue) {\n return [];\n }\n return parsed;\n }\n }]);\n}();\n\nfunction getFontSize(object) {\n var _ref = object.parsedStyle,\n fontSize = _ref.fontSize;\n return isNil(fontSize) ? null : fontSize;\n}\n\n/**\n * & \n */\nvar CSSPropertyLengthOrPercentage = /*#__PURE__*/function () {\n function CSSPropertyLengthOrPercentage() {\n _classCallCheck(this, CSSPropertyLengthOrPercentage);\n this.mixer = mergeNumbers;\n }\n return _createClass(CSSPropertyLengthOrPercentage, [{\n key: \"calculator\",\n value:\n /**\n * according to parent's bounds\n *\n * @example\n * CSS.percent(50) -> CSS.px(0.5 * parent.width)\n */\n function calculator(name, oldParsed, computed, object, runtime) {\n if (isNumber(computed)) {\n return computed;\n }\n if (CSSUnitValue.isRelativeUnit(computed.unit)) {\n if (computed.unit === UnitType.kPercentage) {\n // TODO: merge dimensions\n return 0;\n }\n if (computed.unit === UnitType.kEms) {\n if (object.parentNode) {\n var fontSize = getFontSize(object.parentNode);\n if (fontSize) {\n fontSize *= computed.value;\n return fontSize;\n }\n }\n return 0;\n }\n if (computed.unit === UnitType.kRems) {\n var _object$ownerDocument;\n if (object !== null && object !== void 0 && (_object$ownerDocument = object.ownerDocument) !== null && _object$ownerDocument !== void 0 && _object$ownerDocument.documentElement) {\n var _fontSize = getFontSize(object.ownerDocument.documentElement);\n if (_fontSize) {\n _fontSize *= computed.value;\n return _fontSize;\n }\n }\n return 0;\n }\n } else {\n // remove listener if exists\n // registry.unregisterParentGeometryBoundsChangedHandler(object, name);\n\n // return absolute value\n return computed.value;\n }\n }\n }]);\n}();\n\n/**\n * format to Tuple2\n *\n * @example\n * rect.style.lineDash = 10;\n * rect.style.lineDash = [10, 10];\n * rect.style.lineDash = '10 10';\n */\nvar CSSPropertyLengthOrPercentage12 = /*#__PURE__*/function () {\n function CSSPropertyLengthOrPercentage12() {\n _classCallCheck(this, CSSPropertyLengthOrPercentage12);\n this.mixer = mergeNumberLists;\n }\n return _createClass(CSSPropertyLengthOrPercentage12, [{\n key: \"calculator\",\n value: function calculator(name, oldParsed, computed) {\n return computed.map(function (c) {\n return c.value;\n });\n }\n }]);\n}();\n\n/**\n * used in rounded rect\n *\n * @example\n * rect.style.radius = 10;\n * rect.style.radius = '10 10';\n * rect.style.radius = '10 10 10 10';\n */\nvar CSSPropertyLengthOrPercentage14 = /*#__PURE__*/function () {\n function CSSPropertyLengthOrPercentage14() {\n _classCallCheck(this, CSSPropertyLengthOrPercentage14);\n this.mixer = mergeNumberLists;\n }\n return _createClass(CSSPropertyLengthOrPercentage14, [{\n key: \"calculator\",\n value: function calculator(name, oldParsed, computed) {\n return computed.map(function (c) {\n return c.value;\n });\n }\n }]);\n}();\n\nvar CSSPropertyMarker = /*#__PURE__*/function () {\n function CSSPropertyMarker() {\n _classCallCheck(this, CSSPropertyMarker);\n }\n return _createClass(CSSPropertyMarker, [{\n key: \"calculator\",\n value: function calculator(name, oldMarker, newMarker, object) {\n var _newMarker;\n // unset\n if (newMarker instanceof CSSKeywordValue) {\n newMarker = null;\n }\n var cloned = (_newMarker = newMarker) === null || _newMarker === void 0 ? void 0 : _newMarker.cloneNode(true);\n if (cloned) {\n // FIXME: SVG should not inherit parent's style, add a flag here\n cloned.style.isMarker = true;\n }\n return cloned;\n }\n }]);\n}();\n\nvar CSSPropertyNumber = /*#__PURE__*/function () {\n function CSSPropertyNumber() {\n _classCallCheck(this, CSSPropertyNumber);\n this.mixer = mergeNumbers;\n }\n return _createClass(CSSPropertyNumber, [{\n key: \"calculator\",\n value: function calculator(name, oldParsed, computed) {\n return computed.value;\n }\n }]);\n}();\n\nvar CSSPropertyOffsetDistance = /*#__PURE__*/function () {\n function CSSPropertyOffsetDistance() {\n _classCallCheck(this, CSSPropertyOffsetDistance);\n this.mixer = clampedMergeNumbers(0, 1);\n }\n return _createClass(CSSPropertyOffsetDistance, [{\n key: \"calculator\",\n value: function calculator(name, oldParsed, computed) {\n return computed.value;\n }\n }, {\n key: \"postProcessor\",\n value: function postProcessor(object) {\n var _object$parsedStyle = object.parsedStyle,\n offsetPath = _object$parsedStyle.offsetPath,\n offsetDistance = _object$parsedStyle.offsetDistance;\n if (!offsetPath) {\n return;\n }\n var nodeName = offsetPath.nodeName;\n if (nodeName === Shape.LINE || nodeName === Shape.PATH || nodeName === Shape.POLYLINE) {\n // set position in world space\n var point = offsetPath.getPoint(offsetDistance);\n if (point) {\n object.setLocalPosition(point.x, point.y);\n }\n }\n }\n }]);\n}();\n\n/**\n * opacity\n */\nvar CSSPropertyOpacity = /*#__PURE__*/function () {\n function CSSPropertyOpacity() {\n _classCallCheck(this, CSSPropertyOpacity);\n this.mixer = clampedMergeNumbers(0, 1);\n }\n return _createClass(CSSPropertyOpacity, [{\n key: \"calculator\",\n value: function calculator(name, oldParsed, computed) {\n return computed.value;\n }\n }]);\n}();\n\nvar CSSPropertyPath = /*#__PURE__*/function () {\n function CSSPropertyPath() {\n _classCallCheck(this, CSSPropertyPath);\n /**\n * path2Curve\n */\n this.parser = parsePath;\n this.mixer = mergePaths;\n }\n return _createClass(CSSPropertyPath, [{\n key: \"calculator\",\n value: function calculator(name, oldParsed, parsed) {\n // unset\n if (parsed instanceof CSSKeywordValue && parsed.value === 'unset') {\n return {\n absolutePath: [],\n hasArc: false,\n segments: [],\n polygons: [],\n polylines: [],\n curve: null,\n totalLength: 0,\n rect: new Rectangle(0, 0, 0, 0)\n };\n }\n return parsed;\n }\n }]);\n}();\n\nvar CSSPropertyPoints = /*#__PURE__*/_createClass(function CSSPropertyPoints() {\n _classCallCheck(this, CSSPropertyPoints);\n this.mixer = mergePoints;\n});\n\nvar CSSPropertyShadowBlur = /*#__PURE__*/function (_CSSPropertyLengthOrP) {\n function CSSPropertyShadowBlur() {\n var _this;\n _classCallCheck(this, CSSPropertyShadowBlur);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _callSuper(this, CSSPropertyShadowBlur, [].concat(args));\n _this.mixer = clampedMergeNumbers(0, Infinity);\n return _this;\n }\n _inherits(CSSPropertyShadowBlur, _CSSPropertyLengthOrP);\n return _createClass(CSSPropertyShadowBlur);\n}(CSSPropertyLengthOrPercentage);\n\nvar CSSPropertyText = /*#__PURE__*/function () {\n function CSSPropertyText() {\n _classCallCheck(this, CSSPropertyText);\n }\n return _createClass(CSSPropertyText, [{\n key: \"calculator\",\n value: function calculator(name, oldParsed, parsed, object) {\n if (parsed instanceof CSSKeywordValue) {\n if (parsed.value === 'unset') {\n return '';\n }\n return parsed.value;\n }\n\n // allow number as valid text content\n return \"\".concat(parsed);\n }\n }, {\n key: \"postProcessor\",\n value: function postProcessor(object) {\n object.nodeValue = \"\".concat(object.parsedStyle.text) || '';\n }\n }]);\n}();\n\n/**\n * it must transform after text get parsed\n * @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/text-transform\n */\nvar CSSPropertyTextTransform = /*#__PURE__*/function () {\n function CSSPropertyTextTransform() {\n _classCallCheck(this, CSSPropertyTextTransform);\n }\n return _createClass(CSSPropertyTextTransform, [{\n key: \"calculator\",\n value: function calculator(name, oldParsed, parsed, object) {\n var rawText = object.getAttribute('text');\n if (rawText) {\n var transformedText = rawText;\n if (parsed.value === 'capitalize') {\n transformedText = rawText.charAt(0).toUpperCase() + rawText.slice(1);\n } else if (parsed.value === 'lowercase') {\n transformedText = rawText.toLowerCase();\n } else if (parsed.value === 'uppercase') {\n transformedText = rawText.toUpperCase();\n }\n object.parsedStyle.text = transformedText;\n }\n return parsed.value;\n }\n }]);\n}();\n\nvar definedProps = function definedProps(obj) {\n return Object.fromEntries(Object.entries(obj).filter(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n v = _ref2[1];\n return v !== undefined;\n }));\n};\n\nvar CANVAS_Map = new WeakMap();\n\n/**\n * destroy existed canvas with the same id\n */\nfunction cleanExistedCanvas(container, canvas, cleanUp) {\n if (container) {\n var $dom = typeof container === 'string' ? document.getElementById(container) : container;\n if (CANVAS_Map.has($dom)) CANVAS_Map.get($dom).destroy(cleanUp);\n CANVAS_Map.set($dom, canvas);\n }\n}\nvar isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\nfunction isElement(target) {\n return !!target.getAttribute;\n}\nfunction sortedIndex(array, value) {\n var low = 0;\n var high = array.length;\n while (low < high) {\n var mid = low + high >>> 1;\n if (sortByZIndex(array[mid], value) < 0) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return low;\n}\nfunction sortByZIndex(o1, o2) {\n var zIndex1 = Number(o1.parsedStyle.zIndex || 0);\n var zIndex2 = Number(o2.parsedStyle.zIndex || 0);\n if (zIndex1 === zIndex2) {\n var parent = o1.parentNode;\n if (parent) {\n var children = parent.childNodes || [];\n return children.indexOf(o1) - children.indexOf(o2);\n }\n }\n return zIndex1 - zIndex2;\n}\nfunction findClosestClipPathTarget(object) {\n var el = object;\n do {\n var _el$parsedStyle;\n var clipPath = (_el$parsedStyle = el.parsedStyle) === null || _el$parsedStyle === void 0 ? void 0 : _el$parsedStyle.clipPath;\n if (clipPath) return el;\n el = el.parentElement;\n } while (el !== null);\n return null;\n}\nvar PX_SUFFIX = 'px';\nfunction setDOMSize($el, width, height) {\n if (isBrowser && $el.style) {\n $el.style.width = width + PX_SUFFIX;\n $el.style.height = height + PX_SUFFIX;\n }\n}\nfunction getStyle($el, property) {\n if (isBrowser) {\n return document.defaultView.getComputedStyle($el, null).getPropertyValue(property);\n }\n}\nfunction getWidth($el) {\n var width = getStyle($el, 'width');\n if (width === 'auto') {\n return $el.offsetWidth;\n }\n return parseFloat(width);\n}\nfunction getHeight($el) {\n var height = getStyle($el, 'height');\n if (height === 'auto') {\n return $el.offsetHeight;\n }\n return parseFloat(height);\n}\n\n// borrow from hammer.js\nvar MOUSE_POINTER_ID = 1;\nvar TOUCH_TO_POINTER = {\n touchstart: 'pointerdown',\n touchend: 'pointerup',\n touchendoutside: 'pointerupoutside',\n touchmove: 'pointermove',\n touchcancel: 'pointercancel'\n};\nvar clock = typeof performance === 'object' && performance.now ? performance : Date;\n\nfunction isInFragment(node) {\n if (node.nodeName === Shape.FRAGMENT) return true;\n return node.getRootNode().nodeName === Shape.FRAGMENT;\n}\n\nfunction isFillOrStrokeAffected() {\n var pointerEvents = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'auto';\n var fill = arguments.length > 1 ? arguments[1] : undefined;\n var stroke = arguments.length > 2 ? arguments[2] : undefined;\n // account for pointerEvents\n // @see https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events\n\n var hasFill = false;\n var hasStroke = false;\n var isFillOtherThanNone = !!fill && !fill.isNone;\n var isStrokeOtherThanNone = !!stroke && !stroke.isNone;\n if (pointerEvents === 'visiblepainted' || pointerEvents === 'painted' || pointerEvents === 'auto') {\n hasFill = isFillOtherThanNone;\n hasStroke = isStrokeOtherThanNone;\n } else if (pointerEvents === 'visiblefill' || pointerEvents === 'fill') {\n hasFill = true;\n } else if (pointerEvents === 'visiblestroke' || pointerEvents === 'stroke') {\n hasStroke = true;\n } else if (pointerEvents === 'visible' || pointerEvents === 'all') {\n // The values of the fill and stroke do not affect event processing.\n hasFill = true;\n hasStroke = true;\n }\n return [hasFill, hasStroke];\n}\n\n/**\n * Thanks for following contributor of codes\n * https://gist.github.com/1866474\n * http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n * http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n * https://github.com/Financial-Times/polyfill-library/blob/master/polyfills/requestAnimationFrame/polyfill.js\n * */\n\nvar uId = 1;\nvar uniqueId = function uniqueId() {\n return uId++;\n};\n\n// We use `self` instead of `window` for `WebWorker` support.\nvar root =\n// eslint-disable-next-line no-nested-ternary\ntypeof self === 'object' && self.self === self ? self :\n// @ts-ignore\ntypeof global === 'object' && global.global === global ?\n// @ts-ignore\nglobal : {};\nvar nowOffset = Date.now();\n\n// use performance api if exist, otherwise use Date.now.\n// Date.now polyfill required.\nvar pnow = function pnow() {\n if (root.performance && typeof root.performance.now === 'function') {\n return root.performance.now();\n }\n\n // fallback\n return Date.now() - nowOffset;\n};\nvar reservedCBs = {};\nvar lastTime = Date.now();\nvar polyfillRaf = function polyfillRaf(callback) {\n if (typeof callback !== 'function') {\n throw new TypeError(\"\".concat(callback, \" is not a function\"));\n }\n var currentTime = Date.now();\n var gap = currentTime - lastTime;\n var delay = gap > 16 ? 0 : 16 - gap;\n var id = uniqueId();\n reservedCBs[id] = callback;\n\n // keys(reservedCBs).length > 1 의미는 이미 setTimeout 이 걸려있는 경우.\n // 함께 callback 이 실행될 수 있게 reservedCBs 에만 추가해주고 return\n if (Object.keys(reservedCBs).length > 1) return id;\n setTimeout(function () {\n lastTime = currentTime;\n var copied = reservedCBs;\n reservedCBs = {};\n Object.keys(copied).forEach(function (key) {\n return copied[key](pnow());\n });\n }, delay);\n return id;\n};\nvar polyfillCaf = function polyfillCaf(id) {\n delete reservedCBs[id];\n};\nvar vendorPrefixes = ['', 'webkit', 'moz', 'ms', 'o'];\nvar getRequestAnimationFrame = function getRequestAnimationFrame(vp) {\n if (typeof vp !== 'string') return polyfillRaf;\n if (vp === '') return root.requestAnimationFrame;\n return root[\"\".concat(vp, \"RequestAnimationFrame\")];\n};\nvar getCancelAnimationFrame = function getCancelAnimationFrame(vp) {\n if (typeof vp !== 'string') return polyfillCaf;\n if (vp === '') return root.cancelAnimationFrame;\n return root[\"\".concat(vp, \"CancelAnimationFrame\")] || root[\"\".concat(vp, \"CancelRequestAnimationFrame\")];\n};\nvar find = function find(arr, predicate) {\n var i = 0;\n while (arr[i] !== undefined) {\n if (predicate(arr[i])) return arr[i];\n i += 1;\n }\n};\nvar vp = find(vendorPrefixes, function (vp) {\n return !!getRequestAnimationFrame(vp);\n});\nvar raf = getRequestAnimationFrame(vp);\nvar caf = getCancelAnimationFrame(vp);\nroot.requestAnimationFrame = raf;\nroot.cancelAnimationFrame = caf;\n\nvar AsyncParallelHook = /*#__PURE__*/function () {\n function AsyncParallelHook() {\n _classCallCheck(this, AsyncParallelHook);\n this.callbacks = [];\n }\n return _createClass(AsyncParallelHook, [{\n key: \"getCallbacksNum\",\n value: function getCallbacksNum() {\n return this.callbacks.length;\n }\n }, {\n key: \"tapPromise\",\n value: function tapPromise(options, fn) {\n this.callbacks.push(fn);\n }\n }, {\n key: \"promise\",\n value: function promise() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return Promise.all(this.callbacks.map(function (callback) {\n return callback.apply(void 0, args);\n }));\n }\n }]);\n}();\n\nvar AsyncSeriesWaterfallHook = /*#__PURE__*/function () {\n function AsyncSeriesWaterfallHook() {\n _classCallCheck(this, AsyncSeriesWaterfallHook);\n this.callbacks = [];\n }\n return _createClass(AsyncSeriesWaterfallHook, [{\n key: \"tapPromise\",\n value: function tapPromise(options, fn) {\n this.callbacks.push(fn);\n }\n }, {\n key: \"promise\",\n value: function () {\n var _promise = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n var _this$callbacks,\n result,\n i,\n callback,\n _args = arguments;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!this.callbacks.length) {\n _context.next = 14;\n break;\n }\n _context.next = 3;\n return (_this$callbacks = this.callbacks)[0].apply(_this$callbacks, _args);\n case 3:\n result = _context.sent;\n i = 0;\n case 5:\n if (!(i < this.callbacks.length - 1)) {\n _context.next = 13;\n break;\n }\n callback = this.callbacks[i]; // @ts-ignore\n // eslint-disable-next-line no-await-in-loop\n _context.next = 9;\n return callback(result);\n case 9:\n result = _context.sent;\n case 10:\n i++;\n _context.next = 5;\n break;\n case 13:\n return _context.abrupt(\"return\", result);\n case 14:\n return _context.abrupt(\"return\", null);\n case 15:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function promise() {\n return _promise.apply(this, arguments);\n }\n return promise;\n }()\n }]);\n}();\n\nvar SyncHook = /*#__PURE__*/function () {\n function SyncHook() {\n _classCallCheck(this, SyncHook);\n this.callbacks = [];\n }\n return _createClass(SyncHook, [{\n key: \"tap\",\n value: function tap(options, fn) {\n this.callbacks.push(fn);\n }\n }, {\n key: \"call\",\n value: function call() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n /* eslint-disable-next-line prefer-rest-params */\n var argsArr = arguments;\n this.callbacks.forEach(function (callback) {\n /* eslint-disable-next-line prefer-spread */\n callback.apply(undefined, argsArr);\n });\n }\n }]);\n}();\n\nvar SyncWaterfallHook = /*#__PURE__*/function () {\n function SyncWaterfallHook() {\n _classCallCheck(this, SyncWaterfallHook);\n this.callbacks = [];\n }\n return _createClass(SyncWaterfallHook, [{\n key: \"tap\",\n value: function tap(options, fn) {\n this.callbacks.push(fn);\n }\n }, {\n key: \"call\",\n value: function call() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (this.callbacks.length) {\n /* eslint-disable-next-line prefer-rest-params */\n var argsArr = arguments;\n /* eslint-disable-next-line prefer-spread */\n var result = this.callbacks[0].apply(undefined, argsArr);\n for (var i = 0; i < this.callbacks.length - 1; i++) {\n var callback = this.callbacks[i];\n // @ts-ignore\n result = callback(result);\n }\n return result;\n }\n return null;\n }\n }]);\n}();\n\nvar genericFontFamilies = ['serif', 'sans-serif', 'monospace', 'cursive', 'fantasy', 'system-ui'];\nvar stringRegExp = /([\\\"\\'])[^\\'\\\"]+\\1/;\nfunction toFontString(attributes) {\n var _attributes$fontSize = attributes.fontSize,\n fontSize = _attributes$fontSize === void 0 ? 16 : _attributes$fontSize,\n _attributes$fontFamil = attributes.fontFamily,\n fontFamily = _attributes$fontFamil === void 0 ? 'sans-serif' : _attributes$fontFamil,\n _attributes$fontStyle = attributes.fontStyle,\n fontStyle = _attributes$fontStyle === void 0 ? 'normal' : _attributes$fontStyle,\n _attributes$fontVaria = attributes.fontVariant,\n fontVariant = _attributes$fontVaria === void 0 ? 'normal' : _attributes$fontVaria,\n _attributes$fontWeigh = attributes.fontWeight,\n fontWeight = _attributes$fontWeigh === void 0 ? 'normal' : _attributes$fontWeigh;\n\n // build canvas api font setting from individual components. Convert a numeric this.fontSize to px\n // const fontSizeString: string = isNumber(fontSize) ? `${fontSize}px` : fontSize.toString();\n var fontSizeString = isNumber(fontSize) && \"\".concat(fontSize, \"px\") || '16px';\n // Clean-up fontFamily property by quoting each font name\n // this will support font names with spaces\n\n var fontFamilies = fontFamily.split(',');\n for (var i = fontFamilies.length - 1; i >= 0; i--) {\n // Trim any extra white-space\n var _fontFamily = fontFamilies[i].trim();\n // Check if font already contains strings\n if (!stringRegExp.test(_fontFamily) && genericFontFamilies.indexOf(_fontFamily) < 0) {\n _fontFamily = \"\\\"\".concat(_fontFamily, \"\\\"\");\n }\n fontFamilies[i] = _fontFamily;\n }\n return \"\".concat(fontStyle, \" \").concat(fontVariant, \" \").concat(fontWeight, \" \").concat(fontSizeString, \" \").concat(fontFamilies.join(','));\n}\n\nfunction createSkewMatrix(skewMatrix, skewX, skewY) {\n // Create an identity matrix\n mat4.identity(skewMatrix);\n // Apply skew to the matrix\n skewMatrix[4] = Math.tan(skewX); // Skew Y axis in X direction\n skewMatrix[1] = Math.tan(skewY); // Skew X axis in Y direction\n\n return skewMatrix;\n}\nvar $mat4_1 = mat4.create();\nvar $mat4_2 = mat4.create();\nvar parser = {\n scale: function scale(d) {\n mat4.fromScaling($mat4_1, [d[0].value, d[1].value, 1]);\n },\n scaleX: function scaleX(d) {\n mat4.fromScaling($mat4_1, [d[0].value, 1, 1]);\n },\n scaleY: function scaleY(d) {\n mat4.fromScaling($mat4_1, [1, d[0].value, 1]);\n },\n scaleZ: function scaleZ(d) {\n mat4.fromScaling($mat4_1, [1, 1, d[0].value]);\n },\n scale3d: function scale3d(d) {\n mat4.fromScaling($mat4_1, [d[0].value, d[1].value, d[2].value]);\n },\n translate: function translate(d) {\n mat4.fromTranslation($mat4_1, [d[0].value, d[1].value, 0]);\n },\n translateX: function translateX(d) {\n mat4.fromTranslation($mat4_1, [d[0].value, 0, 0]);\n },\n translateY: function translateY(d) {\n mat4.fromTranslation($mat4_1, [0, d[0].value, 0]);\n },\n translateZ: function translateZ(d) {\n mat4.fromTranslation($mat4_1, [0, 0, d[0].value]);\n },\n translate3d: function translate3d(d) {\n mat4.fromTranslation($mat4_1, [d[0].value, d[1].value, d[2].value]);\n },\n rotate: function rotate(d) {\n mat4.fromZRotation($mat4_1, deg2rad(convertAngleUnit(d[0])));\n },\n rotateX: function rotateX(d) {\n mat4.fromXRotation($mat4_1, deg2rad(convertAngleUnit(d[0])));\n },\n rotateY: function rotateY(d) {\n mat4.fromYRotation($mat4_1, deg2rad(convertAngleUnit(d[0])));\n },\n rotateZ: function rotateZ(d) {\n mat4.fromZRotation($mat4_1, deg2rad(convertAngleUnit(d[0])));\n },\n rotate3d: function rotate3d(d) {\n mat4.fromRotation($mat4_1, deg2rad(convertAngleUnit(d[3])), [d[0].value, d[1].value, d[2].value]);\n },\n skew: function skew(d) {\n createSkewMatrix($mat4_1, deg2rad(d[0].value), deg2rad(d[1].value));\n },\n skewX: function skewX(d) {\n createSkewMatrix($mat4_1, deg2rad(d[0].value), 0);\n },\n skewY: function skewY(d) {\n createSkewMatrix($mat4_1, 0, deg2rad(d[0].value));\n },\n matrix: function matrix(d) {\n // prettier-ignore\n mat4.set($mat4_1, d[0].value, d[1].value, 0, 0, d[2].value, d[3].value, 0, 0, 0, 0, 1, 0, d[4].value, d[5].value, 0, 1);\n },\n matrix3d: function matrix3d(d) {\n // @ts-ignore\n mat4.set.apply(mat4, [$mat4_1].concat(_toConsumableArray(d.map(function (s) {\n return s.value;\n }))));\n }\n};\nvar $vec3One$1 = vec3.fromValues(1, 1, 1);\nvar $vec3Zero$1 = vec3.create();\nvar optimizer = {\n translate: function translate(object, d) {\n runtime.sceneGraphService.setLocalScale(object, $vec3One$1, false);\n runtime.sceneGraphService.setLocalEulerAngles(object, $vec3Zero$1, undefined, undefined, false);\n runtime.sceneGraphService.setLocalPosition(object, [d[0].value, d[1].value, 0], false);\n runtime.sceneGraphService.dirtifyLocal(object, object.transformable);\n }\n};\nfunction parsedTransformToMat4(transform, object) {\n if (transform.length) {\n if (transform.length === 1 && optimizer[transform[0].t]) {\n optimizer[transform[0].t](object, transform[0].d);\n return;\n }\n var m = mat4.identity($mat4_2);\n for (var i = 0; i < transform.length; i++) {\n var _transform$i = transform[i],\n t = _transform$i.t,\n d = _transform$i.d;\n var p = parser[t];\n if (p) {\n p(d);\n mat4.mul(m, m, $mat4_1);\n }\n }\n object.setLocalTransform(m);\n } else {\n object.resetLocalTransform();\n }\n return object.getLocalTransform();\n}\n\n/**\n * @see /zh/docs/api/animation#支持变换的属性\n *\n * support the following formats like CSS Transform:\n *\n * scale\n * * scale(x, y)\n * * scaleX(x)\n * * scaleY(x)\n * * scaleZ(z)\n * * scale3d(x, y, z)\n *\n * translate (unit: none, px, %(relative to its bounds))\n * * translate(x, y) eg. translate(0, 0) translate(0, 30px) translate(100%, 100%)\n * * translateX(0)\n * * translateY(0)\n * * translateZ(0)\n * * translate3d(0, 0, 0)\n *\n * rotate (unit: deg rad turn)\n * * rotate(0.5turn) rotate(30deg) rotate(1rad)\n *\n * none\n *\n * unsupported for now:\n * * calc() eg. translate(calc(100% + 10px))\n * * matrix/matrix3d()\n * * skew/skewX/skewY\n * * perspective\n */\nvar CSSPropertyTransform = /*#__PURE__*/function () {\n function CSSPropertyTransform() {\n _classCallCheck(this, CSSPropertyTransform);\n this.parser = parseTransformUnmemoize;\n this.mixer = mergeTransforms;\n }\n return _createClass(CSSPropertyTransform, [{\n key: \"calculator\",\n value: function calculator(name, oldParsed, parsed, object) {\n // 'none'\n if (parsed instanceof CSSKeywordValue) {\n return [];\n }\n return parsed;\n }\n }, {\n key: \"postProcessor\",\n value: function postProcessor(object) {\n parsedTransformToMat4(object.parsedStyle.transform, object);\n }\n }]);\n}();\n\n/**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/transform-origin\n * @example\n * [10px, 10px] [10%, 10%]\n */\nvar CSSPropertyTransformOrigin = /*#__PURE__*/function () {\n function CSSPropertyTransformOrigin() {\n _classCallCheck(this, CSSPropertyTransformOrigin);\n }\n return _createClass(CSSPropertyTransformOrigin, [{\n key: \"postProcessor\",\n value: function postProcessor(object) {\n var transformOrigin = object.parsedStyle.transformOrigin;\n if (transformOrigin[0].unit === UnitType.kPixels && transformOrigin[1].unit === UnitType.kPixels) {\n object.setOrigin(transformOrigin[0].value, transformOrigin[1].value);\n } else {\n // Relative to geometry bounds, calculate later.\n object.getGeometryBounds();\n }\n }\n }]);\n}();\n\nvar CSSPropertyZIndex = /*#__PURE__*/function () {\n function CSSPropertyZIndex() {\n _classCallCheck(this, CSSPropertyZIndex);\n }\n return _createClass(CSSPropertyZIndex, [{\n key: \"calculator\",\n value: function calculator(name, oldParsed, computed, object) {\n return computed.value;\n }\n }, {\n key: \"postProcessor\",\n value: function postProcessor(object) {\n if (object.parentNode) {\n var parentEntity = object.parentNode;\n var parentRenderable = parentEntity.renderable;\n var parentSortable = parentEntity.sortable;\n if (parentRenderable) {\n parentRenderable.dirty = true;\n }\n // need re-sort on parent\n if (parentSortable) {\n parentSortable.dirty = true;\n parentSortable.dirtyReason = SortReason.Z_INDEX_CHANGED;\n }\n }\n }\n }]);\n}();\n\nvar CircleUpdater = /*#__PURE__*/function () {\n function CircleUpdater() {\n _classCallCheck(this, CircleUpdater);\n }\n return _createClass(CircleUpdater, [{\n key: \"update\",\n value: function update(parsedStyle, object) {\n var _parsedStyle$cx = parsedStyle.cx,\n cx = _parsedStyle$cx === void 0 ? 0 : _parsedStyle$cx,\n _parsedStyle$cy = parsedStyle.cy,\n cy = _parsedStyle$cy === void 0 ? 0 : _parsedStyle$cy,\n _parsedStyle$r = parsedStyle.r,\n r = _parsedStyle$r === void 0 ? 0 : _parsedStyle$r;\n return {\n cx: cx,\n cy: cy,\n hwidth: r,\n hheight: r\n };\n }\n }]);\n}();\n\nvar EllipseUpdater = /*#__PURE__*/function () {\n function EllipseUpdater() {\n _classCallCheck(this, EllipseUpdater);\n }\n return _createClass(EllipseUpdater, [{\n key: \"update\",\n value: function update(parsedStyle, object) {\n var _parsedStyle$cx = parsedStyle.cx,\n cx = _parsedStyle$cx === void 0 ? 0 : _parsedStyle$cx,\n _parsedStyle$cy = parsedStyle.cy,\n cy = _parsedStyle$cy === void 0 ? 0 : _parsedStyle$cy,\n _parsedStyle$rx = parsedStyle.rx,\n rx = _parsedStyle$rx === void 0 ? 0 : _parsedStyle$rx,\n _parsedStyle$ry = parsedStyle.ry,\n ry = _parsedStyle$ry === void 0 ? 0 : _parsedStyle$ry;\n return {\n cx: cx,\n cy: cy,\n hwidth: rx,\n hheight: ry\n };\n }\n }]);\n}();\n\nvar LineUpdater = /*#__PURE__*/function () {\n function LineUpdater() {\n _classCallCheck(this, LineUpdater);\n }\n return _createClass(LineUpdater, [{\n key: \"update\",\n value: function update(parsedStyle) {\n var x1 = parsedStyle.x1,\n y1 = parsedStyle.y1,\n x2 = parsedStyle.x2,\n y2 = parsedStyle.y2;\n var minX = Math.min(x1, x2);\n var maxX = Math.max(x1, x2);\n var minY = Math.min(y1, y2);\n var maxY = Math.max(y1, y2);\n var width = maxX - minX;\n var height = maxY - minY;\n var hwidth = width / 2;\n var hheight = height / 2;\n return {\n cx: minX + hwidth,\n cy: minY + hheight,\n hwidth: hwidth,\n hheight: hheight\n };\n }\n }]);\n}();\n\nvar PathUpdater = /*#__PURE__*/function () {\n function PathUpdater() {\n _classCallCheck(this, PathUpdater);\n }\n return _createClass(PathUpdater, [{\n key: \"update\",\n value: function update(parsedStyle) {\n var d = parsedStyle.d;\n var _d$rect = d.rect,\n x = _d$rect.x,\n y = _d$rect.y,\n width = _d$rect.width,\n height = _d$rect.height;\n var hwidth = width / 2;\n var hheight = height / 2;\n return {\n cx: x + hwidth,\n cy: y + hheight,\n hwidth: hwidth,\n hheight: hheight\n };\n }\n }]);\n}();\n\nvar PolylineUpdater = /*#__PURE__*/function () {\n function PolylineUpdater() {\n _classCallCheck(this, PolylineUpdater);\n }\n return _createClass(PolylineUpdater, [{\n key: \"update\",\n value: function update(parsedStyle) {\n if (parsedStyle.points && isArray(parsedStyle.points.points)) {\n var points = parsedStyle.points.points;\n\n // FIXME: account for miter lineJoin\n var minX = Math.min.apply(Math, _toConsumableArray(points.map(function (point) {\n return point[0];\n })));\n var maxX = Math.max.apply(Math, _toConsumableArray(points.map(function (point) {\n return point[0];\n })));\n var minY = Math.min.apply(Math, _toConsumableArray(points.map(function (point) {\n return point[1];\n })));\n var maxY = Math.max.apply(Math, _toConsumableArray(points.map(function (point) {\n return point[1];\n })));\n var width = maxX - minX;\n var height = maxY - minY;\n var hwidth = width / 2;\n var hheight = height / 2;\n return {\n cx: minX + hwidth,\n cy: minY + hheight,\n hwidth: hwidth,\n hheight: hheight\n };\n }\n return {\n cx: 0,\n cy: 0,\n hwidth: 0,\n hheight: 0\n };\n }\n }]);\n}();\n\nvar RectUpdater = /*#__PURE__*/function () {\n function RectUpdater() {\n _classCallCheck(this, RectUpdater);\n }\n return _createClass(RectUpdater, [{\n key: \"update\",\n value: function update(parsedStyle, object) {\n var _parsedStyle$x = parsedStyle.x,\n x = _parsedStyle$x === void 0 ? 0 : _parsedStyle$x,\n _parsedStyle$y = parsedStyle.y,\n y = _parsedStyle$y === void 0 ? 0 : _parsedStyle$y,\n src = parsedStyle.src,\n _parsedStyle$width = parsedStyle.width,\n width = _parsedStyle$width === void 0 ? 0 : _parsedStyle$width,\n _parsedStyle$height = parsedStyle.height,\n height = _parsedStyle$height === void 0 ? 0 : _parsedStyle$height;\n var contentWidth = width;\n var contentHeight = height;\n\n // resize with HTMLImageElement's size\n if (src && !isString(src)) {\n if (!contentWidth) {\n contentWidth = src.width;\n parsedStyle.width = contentWidth;\n }\n if (!contentHeight) {\n contentHeight = src.height;\n parsedStyle.height = contentHeight;\n }\n }\n return {\n cx: x + contentWidth / 2,\n cy: y + contentHeight / 2,\n hwidth: contentWidth / 2,\n hheight: contentHeight / 2\n };\n }\n }]);\n}();\n\nvar TextUpdater = /*#__PURE__*/function () {\n function TextUpdater(globalRuntime) {\n _classCallCheck(this, TextUpdater);\n this.globalRuntime = globalRuntime;\n }\n return _createClass(TextUpdater, [{\n key: \"isReadyToMeasure\",\n value: function isReadyToMeasure(parsedStyle, object) {\n var text = parsedStyle.text;\n return text;\n }\n }, {\n key: \"update\",\n value: function update(parsedStyle, object) {\n var _object$ownerDocument;\n var text = parsedStyle.text,\n _parsedStyle$textAlig = parsedStyle.textAlign,\n textAlign = _parsedStyle$textAlig === void 0 ? 'start' : _parsedStyle$textAlig,\n _parsedStyle$lineWidt = parsedStyle.lineWidth,\n lineWidth = _parsedStyle$lineWidt === void 0 ? 1 : _parsedStyle$lineWidt,\n _parsedStyle$textBase = parsedStyle.textBaseline,\n textBaseline = _parsedStyle$textBase === void 0 ? 'alphabetic' : _parsedStyle$textBase,\n _parsedStyle$dx = parsedStyle.dx,\n dx = _parsedStyle$dx === void 0 ? 0 : _parsedStyle$dx,\n _parsedStyle$dy = parsedStyle.dy,\n dy = _parsedStyle$dy === void 0 ? 0 : _parsedStyle$dy,\n _parsedStyle$x = parsedStyle.x,\n x = _parsedStyle$x === void 0 ? 0 : _parsedStyle$x,\n _parsedStyle$y = parsedStyle.y,\n y = _parsedStyle$y === void 0 ? 0 : _parsedStyle$y;\n if (!this.isReadyToMeasure(parsedStyle, object)) {\n parsedStyle.metrics = {\n font: '',\n width: 0,\n height: 0,\n lines: [],\n lineWidths: [],\n lineHeight: 0,\n maxLineWidth: 0,\n fontProperties: {\n ascent: 0,\n descent: 0,\n fontSize: 0\n },\n lineMetrics: []\n };\n return {\n hwidth: 0,\n hheight: 0,\n cx: 0,\n cy: 0\n };\n }\n var _ref = (object === null || object === void 0 || (_object$ownerDocument = object.ownerDocument) === null || _object$ownerDocument === void 0 || (_object$ownerDocument = _object$ownerDocument.defaultView) === null || _object$ownerDocument === void 0 ? void 0 : _object$ownerDocument.getConfig()) || {},\n offscreenCanvas = _ref.offscreenCanvas;\n var metrics = this.globalRuntime.textService.measureText(text, parsedStyle, offscreenCanvas);\n parsedStyle.metrics = metrics;\n var width = metrics.width,\n height = metrics.height;\n var hwidth = width / 2;\n var hheight = height / 2;\n\n // default 'left'\n var lineXOffset = x + hwidth;\n if (textAlign === 'center' || textAlign === 'middle') {\n lineXOffset += lineWidth / 2 - hwidth;\n } else if (textAlign === 'right' || textAlign === 'end') {\n lineXOffset += lineWidth - hwidth * 2;\n }\n var lineYOffset = y - hheight;\n if (textBaseline === 'middle') {\n lineYOffset += hheight;\n } else if (textBaseline === 'top' || textBaseline === 'hanging') {\n lineYOffset += hheight * 2;\n } else if (textBaseline === 'alphabetic') ; else if (textBaseline === 'bottom' || textBaseline === 'ideographic') {\n lineYOffset += 0;\n }\n // TODO: ideographic & bottom\n\n if (dx) {\n lineXOffset += dx;\n }\n if (dy) {\n lineYOffset += dy;\n }\n return {\n cx: lineXOffset,\n cy: lineYOffset,\n hwidth: hwidth,\n hheight: hheight\n };\n }\n }]);\n}();\n\nvar GroupUpdater = /*#__PURE__*/function () {\n function GroupUpdater() {\n _classCallCheck(this, GroupUpdater);\n }\n return _createClass(GroupUpdater, [{\n key: \"update\",\n value: function update(parsedStyle, object) {\n return {\n cx: 0,\n cy: 0,\n hwidth: 0,\n hheight: 0\n };\n }\n }]);\n}();\n\nvar HTMLUpdater = /*#__PURE__*/function () {\n function HTMLUpdater() {\n _classCallCheck(this, HTMLUpdater);\n }\n return _createClass(HTMLUpdater, [{\n key: \"update\",\n value: function update(parsedStyle, object) {\n var _parsedStyle$x = parsedStyle.x,\n x = _parsedStyle$x === void 0 ? 0 : _parsedStyle$x,\n _parsedStyle$y = parsedStyle.y,\n y = _parsedStyle$y === void 0 ? 0 : _parsedStyle$y,\n _parsedStyle$width = parsedStyle.width,\n width = _parsedStyle$width === void 0 ? 0 : _parsedStyle$width,\n _parsedStyle$height = parsedStyle.height,\n height = _parsedStyle$height === void 0 ? 0 : _parsedStyle$height;\n return {\n cx: x + width / 2,\n cy: y + height / 2,\n hwidth: width / 2,\n hheight: height / 2\n };\n }\n }]);\n}();\n\nfunction isFederatedEvent(value) {\n return !!value.type;\n}\n\n/**\n * An DOM-compatible synthetic event implementation that is \"forwarded\" on behalf of an original\n * FederatedEvent or native Event.\n */\nvar FederatedEvent = /*#__PURE__*/function () {\n /**\n * The event boundary which manages this event. Propagation can only occur\n * within the boundary's jurisdiction.\n */\n function FederatedEvent(manager) {\n _classCallCheck(this, FederatedEvent);\n /**\n * The propagation phase.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Event/eventPhase\n */\n this.eventPhase = FederatedEvent.prototype.NONE;\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Event/bubbles\n */\n this.bubbles = true;\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Event/cancelBubble\n */\n this.cancelBubble = true;\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Event/cancelable\n */\n this.cancelable = false;\n /** Flags whether the default response of the user agent was prevent through this event. */\n this.defaultPrevented = false;\n /** Flags whether propagation was stopped. */\n this.propagationStopped = false;\n /** Flags whether propagation was immediately stopped. */\n this.propagationImmediatelyStopped = false;\n /**\n * The coordinates of the evnet relative to the nearest DOM layer.\n * This is a non-standard property.\n */\n this.layer = new Point();\n /**\n * The coordinates of the event relative to the DOM document.\n * This is a non-standard property.\n * relative to the DOM document.\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/MouseEvent/pageX\n */\n this.page = new Point();\n /**\n * relative to Canvas, origin is left-top\n */\n this.canvas = new Point();\n /**\n * relative to Viewport, account for Camera\n */\n this.viewport = new Point();\n this.composed = false;\n this.NONE = 0;\n this.CAPTURING_PHASE = 1;\n this.AT_TARGET = 2;\n this.BUBBLING_PHASE = 3;\n this.manager = manager;\n }\n return _createClass(FederatedEvent, [{\n key: \"name\",\n get:\n /**\n * The type of event, supports the following:\n * * pointerdown\n * * touchstart\n * * mousedown\n * * rightdown\n * * ...\n */\n\n /**\n * @deprecated\n */\n function get() {\n return this.type;\n }\n }, {\n key: \"layerX\",\n get: function get() {\n return this.layer.x;\n }\n }, {\n key: \"layerY\",\n get: function get() {\n return this.layer.y;\n }\n }, {\n key: \"pageX\",\n get: function get() {\n return this.page.x;\n }\n }, {\n key: \"pageY\",\n get: function get() {\n return this.page.y;\n }\n }, {\n key: \"x\",\n get: function get() {\n return this.canvas.x;\n }\n }, {\n key: \"y\",\n get: function get() {\n return this.canvas.y;\n }\n }, {\n key: \"canvasX\",\n get: function get() {\n return this.canvas.x;\n }\n }, {\n key: \"canvasY\",\n get: function get() {\n return this.canvas.y;\n }\n }, {\n key: \"viewportX\",\n get: function get() {\n return this.viewport.x;\n }\n }, {\n key: \"viewportY\",\n get: function get() {\n return this.viewport.y;\n }\n }, {\n key: \"composedPath\",\n value:\n /**\n * The propagation path for this event\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Event/composedPath\n *\n * So composedPath()[0] represents the original target.\n * @see https://polymer-library.polymer-project.org/3.0/docs/devguide/events#retargeting\n */\n function composedPath() {\n if (this.manager && (!this.path || this.path[0] !== this.target)) {\n this.path = this.target ? this.manager.propagationPath(this.target) : [];\n }\n return this.path;\n }\n /**\n * @deprecated\n */\n }, {\n key: \"propagationPath\",\n get: function get() {\n return this.composedPath();\n }\n\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Event/preventDefault\n */\n }, {\n key: \"preventDefault\",\n value: function preventDefault() {\n if (this.nativeEvent instanceof Event && this.nativeEvent.cancelable) {\n this.nativeEvent.preventDefault();\n }\n this.defaultPrevented = true;\n }\n\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Event/stopImmediatePropagation\n */\n }, {\n key: \"stopImmediatePropagation\",\n value: function stopImmediatePropagation() {\n this.propagationImmediatelyStopped = true;\n }\n\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Event/stopPropagation\n */\n }, {\n key: \"stopPropagation\",\n value: function stopPropagation() {\n this.propagationStopped = true;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/view\n */\n }, {\n key: \"initEvent\",\n value:\n /**\n * added for compatibility with DOM Event,\n * deprecated props and methods\n */\n function initEvent() {}\n }, {\n key: \"initUIEvent\",\n value: function initUIEvent() {}\n }, {\n key: \"clone\",\n value: function clone() {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }]);\n}();\n\nvar FederatedMouseEvent = /*#__PURE__*/function (_ref) {\n function FederatedMouseEvent() {\n var _this;\n _classCallCheck(this, FederatedMouseEvent);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _callSuper(this, FederatedMouseEvent, [].concat(args));\n /** Whether the \"alt\" key was pressed when this mouse event occurred. */\n /** The specific button that was pressed in this mouse event. */\n /** The button depressed when this event occurred. */\n /** Whether the \"control\" key was pressed when this mouse event occurred. */\n /** Whether the \"meta\" key was pressed when this mouse event occurred. */\n /** This is currently not implemented in the Federated Events API. */\n // @ts-ignore\n /** Whether the \"shift\" key was pressed when this mouse event occurred. */\n /**\n * The coordinates of the mouse event relative to the canvas.\n */\n _this.client = new Point();\n /**\n * The movement in this pointer relative to the last `mousemove` event.\n */\n _this.movement = new Point();\n /**\n * The offset of the pointer coordinates w.r.t. target DisplayObject in world space. This is\n * not supported at the moment.\n */\n _this.offset = new Point();\n /**\n * The pointer coordinates in world space.\n */\n _this.global = new Point();\n /**\n * The pointer coordinates in sceen space.\n */\n _this.screen = new Point();\n return _this;\n }\n _inherits(FederatedMouseEvent, _ref);\n return _createClass(FederatedMouseEvent, [{\n key: \"clientX\",\n get: function get() {\n return this.client.x;\n }\n }, {\n key: \"clientY\",\n get: function get() {\n return this.client.y;\n }\n }, {\n key: \"movementX\",\n get: function get() {\n return this.movement.x;\n }\n }, {\n key: \"movementY\",\n get: function get() {\n return this.movement.y;\n }\n }, {\n key: \"offsetX\",\n get: function get() {\n return this.offset.x;\n }\n }, {\n key: \"offsetY\",\n get: function get() {\n return this.offset.y;\n }\n }, {\n key: \"globalX\",\n get: function get() {\n return this.global.x;\n }\n }, {\n key: \"globalY\",\n get: function get() {\n return this.global.y;\n }\n }, {\n key: \"screenX\",\n get: function get() {\n return this.screen.x;\n }\n }, {\n key: \"screenY\",\n get: function get() {\n return this.screen.y;\n }\n }, {\n key: \"getModifierState\",\n value: function getModifierState(key) {\n return 'getModifierState' in this.nativeEvent && this.nativeEvent.getModifierState(key);\n }\n }, {\n key: \"initMouseEvent\",\n value: function initMouseEvent() {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }]);\n}(FederatedEvent);\n\n// @ts-ignore\nvar FederatedPointerEvent = /*#__PURE__*/function (_FederatedMouseEvent) {\n function FederatedPointerEvent() {\n var _this;\n _classCallCheck(this, FederatedPointerEvent);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _callSuper(this, FederatedPointerEvent, [].concat(args));\n /**\n * The unique identifier of the pointer.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerId\n */\n /**\n * The width of the pointer's contact along the x-axis, measured in CSS pixels.\n * radiusX of TouchEvents will be represented by this value.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/width\n */\n _this.width = 0;\n /**\n * The height of the pointer's contact along the y-axis, measured in CSS pixels.\n * radiusY of TouchEvents will be represented by this value.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/height\n */\n _this.height = 0;\n /**\n * Indicates whether or not the pointer device that created the event is the primary pointer.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/isPrimary\n */\n _this.isPrimary = false;\n return _this;\n }\n _inherits(FederatedPointerEvent, _FederatedMouseEvent);\n return _createClass(FederatedPointerEvent, [{\n key: \"getCoalescedEvents\",\n value:\n /**\n * The type of pointer that triggered the event.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerType\n */\n\n /**\n * Pressure applied by the pointing device during the event.\n *s\n * A Touch's force property will be represented by this value.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pressure\n */\n\n /**\n * Barrel pressure on a stylus pointer.\n *\n * @see https://w3c.github.io/pointerevents/#pointerevent-interface\n */\n\n /**\n * The angle, in degrees, between the pointer device and the screen.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/tiltX\n */\n\n /**\n * The angle, in degrees, between the pointer device and the screen.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/tiltY\n */\n\n /**\n * Twist of a stylus pointer.\n *\n * @see https://w3c.github.io/pointerevents/#pointerevent-interface\n */\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/getCoalescedEvents\n */\n function getCoalescedEvents() {\n if (this.type === 'pointermove' || this.type === 'mousemove' || this.type === 'touchmove') {\n // @ts-ignore\n return [this];\n }\n return [];\n }\n\n /**\n * @see https://chromestatus.com/feature/5765569655603200\n */\n }, {\n key: \"getPredictedEvents\",\n value: function getPredictedEvents() {\n throw new Error('getPredictedEvents is not supported!');\n }\n\n /**\n * @see https://github.com/antvis/G/issues/1115\n * We currently reuses event objects in the event system,\n * avoiding the creation of a large number of event objects.\n * Reused objects are only used to carry different data,\n * such as coordinate information, native event objects,\n * and therefore the lifecycle is limited to the event handler,\n * which can lead to unintended consequences if an attempt is made to cache the entire event object.\n *\n * Therefore, while keeping the above performance considerations in mind, it is possible to provide a clone method that creates a new object when the user really wants to cache it, e.g.\n */\n }, {\n key: \"clone\",\n value: function clone() {\n return this.manager.clonePointerEvent(this);\n }\n }]);\n}(FederatedMouseEvent);\n\n// @ts-ignore\nvar FederatedWheelEvent = /*#__PURE__*/function (_FederatedMouseEvent) {\n function FederatedWheelEvent() {\n _classCallCheck(this, FederatedWheelEvent);\n return _callSuper(this, FederatedWheelEvent, arguments);\n }\n _inherits(FederatedWheelEvent, _FederatedMouseEvent);\n return _createClass(FederatedWheelEvent, [{\n key: \"clone\",\n value:\n /**\n * The units of `deltaX`, `deltaY`, and `deltaZ`. This is one of `DOM_DELTA_LINE`,\n * `DOM_DELTA_PAGE`, `DOM_DELTA_PIXEL`.\n */\n\n /** Horizontal scroll amount */\n\n /** Vertical scroll amount */\n\n /** z-axis scroll amount. */\n\n function clone() {\n return this.manager.cloneWheelEvent(this);\n }\n }]);\n}(FederatedMouseEvent);\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/Events/Creating_and_triggering_events\n *\n * @example\n const event = new CustomEvent('build', { detail: { prop1: 'xx' } });\n circle.addEventListener('build', (e) => {\n e.target; // circle\n e.detail; // { prop1: 'xx' }\n });\n\n circle.dispatchEvent(event);\n */\nvar CustomEvent = /*#__PURE__*/function (_FederatedEvent) {\n function CustomEvent(eventName, object) {\n var _this;\n _classCallCheck(this, CustomEvent);\n _this = _callSuper(this, CustomEvent, [null]);\n _this.type = eventName;\n _this.detail = object;\n\n // compatible with G 3.0\n Object.assign(_this, object);\n return _this;\n }\n _inherits(CustomEvent, _FederatedEvent);\n return _createClass(CustomEvent);\n}(FederatedEvent);\n\nvar CANVAS_CACHE = new WeakMap();\n\n/**\n * Objects that can receive events and may have listeners for them.\n * eg. Element, Canvas, DisplayObject\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget\n */\nvar EventTarget = /*#__PURE__*/function () {\n function EventTarget() {\n _classCallCheck(this, EventTarget);\n /**\n * event emitter\n */\n this.emitter = new EventEmitter();\n }\n return _createClass(EventTarget, [{\n key: \"on\",\n value:\n /**\n * @deprecated\n * @alias addEventListener\n */\n function on(type, listener, options) {\n this.addEventListener(type, listener, options);\n return this;\n }\n /**\n * support `capture` & `once` in options\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener\n */\n }, {\n key: \"addEventListener\",\n value: function addEventListener(type, listener, options) {\n var capture = false;\n var once = false;\n if (isBoolean(options)) capture = options;else if (options) {\n var _options$capture = options.capture;\n capture = _options$capture === void 0 ? false : _options$capture;\n var _options$once = options.once;\n once = _options$once === void 0 ? false : _options$once;\n }\n if (capture) type += 'capture';\n // eslint-disable-next-line @typescript-eslint/unbound-method\n listener = isFunction(listener) ? listener : listener.handleEvent;\n var context = isFunction(listener) ? undefined : listener;\n if (once) this.emitter.once(type, listener, context);else this.emitter.on(type, listener, context);\n return this;\n }\n /**\n * @deprecated\n * @alias removeEventListener\n */\n }, {\n key: \"off\",\n value: function off(type, listener, options) {\n if (type) {\n this.removeEventListener(type, listener, options);\n } else {\n // remove all listeners\n this.removeAllEventListeners();\n }\n return this;\n }\n }, {\n key: \"removeAllEventListeners\",\n value: function removeAllEventListeners() {\n var _this$emitter;\n (_this$emitter = this.emitter) === null || _this$emitter === void 0 || _this$emitter.removeAllListeners();\n }\n }, {\n key: \"removeEventListener\",\n value: function removeEventListener(type, listener, options) {\n var _listener;\n if (!this.emitter) return this;\n var capture = isBoolean(options) ? options : options === null || options === void 0 ? void 0 : options.capture;\n if (capture) type += 'capture';\n // eslint-disable-next-line @typescript-eslint/unbound-method\n listener = isFunction(listener) ? listener : (_listener = listener) === null || _listener === void 0 ? void 0 : _listener.handleEvent;\n var context = isFunction(listener) ? undefined : listener;\n this.emitter.off(type, listener, context);\n return this;\n }\n /**\n * @deprecated\n * @alias dispatchEvent\n */\n }, {\n key: \"emit\",\n value: function emit(eventName, object) {\n this.dispatchEvent(new CustomEvent(eventName, object));\n }\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent\n */\n }, {\n key: \"dispatchEvent\",\n value: function dispatchEvent(e) {\n var skipPropagate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var canvas = CANVAS_CACHE.get(this);\n if (!canvas) {\n var _ownerDocument;\n // @ts-expect-error document may be defined in inherited class\n if (this.document) canvas = this;\n // @ts-expect-error defaultView may be defined in inherited class\n else if (this.defaultView) canvas = this.defaultView;else canvas = (_ownerDocument = this.ownerDocument) === null || _ownerDocument === void 0 ? void 0 : _ownerDocument.defaultView;\n if (canvas) CANVAS_CACHE.set(this, canvas);\n }\n if (canvas) {\n e.manager = canvas.getEventService();\n if (!e.manager) return false;\n e.defaultPrevented = false;\n if (e.path) e.path.length = 0;\n // @ts-ignore\n else e.page = [];\n if (!skipPropagate) e.target = this;\n e.manager.dispatchEvent(e, e.type, skipPropagate);\n } else {\n // HACK Fixed the issue that after an element leaves the DOM tree, there is no associated canvas,\n // which causes the removed and destroy events to not be triggered\n this.emitter.emit(e.type, e);\n }\n return !e.defaultPrevented;\n }\n }]);\n}();\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Node\n */\nvar Node = /*#__PURE__*/function (_EventTarget) {\n function Node() {\n var _this;\n _classCallCheck(this, Node);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _callSuper(this, Node, [].concat(args));\n _this.shadow = false;\n /**\n * points to canvas.document\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Node/ownerDocument\n */\n _this.ownerDocument = null;\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Node/isConnected\n * @example\n circle.isConnected; // false\n canvas.appendChild(circle);\n circle.isConnected; // true\n */\n _this.isConnected = false;\n /**\n * Returns node's node document's document base URL.\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Node\n */\n _this.baseURI = '';\n /**\n * Returns the children.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Node/childNodes\n */\n _this.childNodes = [];\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Node/nodeType\n */\n _this.nodeType = 0;\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Node/nodeName\n */\n _this.nodeName = '';\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Node/nodeValue\n */\n _this.nodeValue = null;\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/ParentNode\n */\n _this.parentNode = null;\n return _this;\n }\n _inherits(Node, _EventTarget);\n return _createClass(Node, [{\n key: \"textContent\",\n get:\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Node/textContent\n */\n function get() {\n var out = '';\n if (this.nodeName === Shape.TEXT) {\n // @ts-ignore\n out += this.style.text;\n }\n var _iterator = _createForOfIteratorHelper(this.childNodes),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _child = _step.value;\n if (_child.nodeName === Shape.TEXT) {\n out += _child.nodeValue;\n } else {\n out += _child.textContent;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return out;\n },\n set: function set(content) {\n var _this2 = this;\n // remove all children\n this.childNodes.slice().forEach(function (child) {\n _this2.removeChild(child);\n });\n if (this.nodeName === Shape.TEXT) {\n // @ts-ignore\n this.style.text = \"\".concat(content);\n }\n }\n\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Node/getRootNode\n */\n }, {\n key: \"getRootNode\",\n value: function getRootNode() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (this.parentNode) {\n return this.parentNode.getRootNode(opts);\n }\n if (opts.composed && this.host) {\n return this.host.getRootNode(opts);\n }\n return this;\n }\n }, {\n key: \"hasChildNodes\",\n value: function hasChildNodes() {\n return this.childNodes.length > 0;\n }\n }, {\n key: \"isDefaultNamespace\",\n value: function isDefaultNamespace(namespace) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"lookupNamespaceURI\",\n value: function lookupNamespaceURI(prefix) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"lookupPrefix\",\n value: function lookupPrefix(namespace) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"normalize\",\n value: function normalize() {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Node/isEqualNode\n */\n }, {\n key: \"isEqualNode\",\n value: function isEqualNode(otherNode) {\n // TODO: compare 2 nodes, not sameness\n return this === otherNode;\n }\n }, {\n key: \"isSameNode\",\n value: function isSameNode(otherNode) {\n return this.isEqualNode(otherNode);\n }\n }, {\n key: \"parent\",\n get:\n /**\n * @deprecated\n * @alias parentNode\n */\n function get() {\n return this.parentNode;\n }\n }, {\n key: \"parentElement\",\n get: function get() {\n return null;\n }\n }, {\n key: \"nextSibling\",\n get: function get() {\n return null;\n }\n }, {\n key: \"previousSibling\",\n get: function get() {\n return null;\n }\n }, {\n key: \"firstChild\",\n get: function get() {\n return this.childNodes.length > 0 ? this.childNodes[0] : null;\n }\n }, {\n key: \"lastChild\",\n get: function get() {\n return this.childNodes.length > 0 ? this.childNodes[this.childNodes.length - 1] : null;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n * @see https://github.com/b-fuze/deno-dom/blob/master/src/dom/node.ts#L338\n */\n }, {\n key: \"compareDocumentPosition\",\n value: function compareDocumentPosition(other) {\n if (other === this) {\n // same node\n return 0;\n }\n\n // if (!(other instanceof Node)) {\n // throw new TypeError(\n // 'Node.compareDocumentPosition: Argument 1 does not implement interface Node.',\n // );\n // }\n\n var node1Root = other;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var node2Root = this;\n var node1Hierarchy = [node1Root];\n var node2Hierarchy = [node2Root];\n while ((_node1Root$parentNode = node1Root.parentNode) !== null && _node1Root$parentNode !== void 0 ? _node1Root$parentNode : node2Root.parentNode) {\n var _node1Root$parentNode;\n node1Root = node1Root.parentNode ? (node1Hierarchy.push(node1Root.parentNode), node1Root.parentNode) : node1Root;\n node2Root = node2Root.parentNode ? (node2Hierarchy.push(node2Root.parentNode), node2Root.parentNode) : node2Root;\n }\n\n // Check if they don't share the same root node\n if (node1Root !== node2Root) {\n return Node.DOCUMENT_POSITION_DISCONNECTED | Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC | Node.DOCUMENT_POSITION_PRECEDING;\n }\n var longerHierarchy = node1Hierarchy.length > node2Hierarchy.length ? node1Hierarchy : node2Hierarchy;\n var shorterHierarchy = longerHierarchy === node1Hierarchy ? node2Hierarchy : node1Hierarchy;\n\n // Check if either is a container of the other\n if (longerHierarchy[longerHierarchy.length - shorterHierarchy.length] === shorterHierarchy[0]) {\n return longerHierarchy === node1Hierarchy ?\n // other is a child of this\n Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING :\n // this is a child of other\n Node.DOCUMENT_POSITION_CONTAINS | Node.DOCUMENT_POSITION_PRECEDING;\n }\n\n // Find their first common ancestor and see whether they\n // are preceding or following\n var longerStart = longerHierarchy.length - shorterHierarchy.length;\n for (var i = shorterHierarchy.length - 1; i >= 0; i--) {\n var shorterHierarchyNode = shorterHierarchy[i];\n var longerHierarchyNode = longerHierarchy[longerStart + i];\n\n // We found the first common ancestor\n if (longerHierarchyNode !== shorterHierarchyNode) {\n var siblings = shorterHierarchyNode.parentNode.childNodes;\n if (siblings.indexOf(shorterHierarchyNode) < siblings.indexOf(longerHierarchyNode)) {\n // Shorter is before longer\n if (shorterHierarchy === node1Hierarchy) {\n // Other is before this\n return Node.DOCUMENT_POSITION_PRECEDING;\n }\n // This is before other\n return Node.DOCUMENT_POSITION_FOLLOWING;\n }\n // Longer is before shorter\n if (longerHierarchy === node1Hierarchy) {\n // Other is before this\n return Node.DOCUMENT_POSITION_PRECEDING;\n }\n // Other is after this\n return Node.DOCUMENT_POSITION_FOLLOWING;\n }\n }\n return Node.DOCUMENT_POSITION_FOLLOWING;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Node/cloneNode\n */\n }, {\n key: \"contain\",\n value:\n /**\n * @deprecated\n * @alias contains\n */\n function contain(other) {\n return this.contains(other);\n }\n }, {\n key: \"contains\",\n value: function contains(other) {\n // the node itself, one of its direct children\n var tmp = other;\n // @see https://developer.mozilla.org/en-US/docs/Web/API/Node/contains\n while (tmp && this !== tmp) {\n tmp = tmp.parentNode;\n }\n return !!tmp;\n }\n }, {\n key: \"getAncestor\",\n value: function getAncestor(n) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var temp = this;\n while (n > 0 && temp) {\n temp = temp.parentNode;\n n--;\n }\n return temp;\n }\n }, {\n key: \"forEach\",\n value: function forEach(callback) {\n var stack = [this];\n while (stack.length > 0) {\n var node = stack.pop();\n var result = callback(node);\n if (result === false) {\n break;\n }\n for (var i = node.childNodes.length - 1; i >= 0; i--) {\n stack.push(node.childNodes[i]);\n }\n }\n }\n }], [{\n key: \"isNode\",\n value: function isNode(target) {\n return !!target.childNodes;\n }\n }]);\n}(EventTarget);\n/**\n * Both nodes are in different documents or different trees in the same document.\n */\nNode.DOCUMENT_POSITION_DISCONNECTED = 1;\n/**\n * otherNode precedes the node in either a pre-order depth-first traversal\n * of a tree containing both (e.g., as an ancestor or previous sibling or a descendant of a previous sibling or previous sibling of an ancestor) or (if they are disconnected) in an arbitrary but consistent ordering.\n */\nNode.DOCUMENT_POSITION_PRECEDING = 2;\n/**\n * otherNode follows the node in either a pre-order depth-first traversal of a tree containing both (e.g., as a descendant or following sibling or a descendant of a following sibling or following sibling of an ancestor) or (if they are disconnected) in an arbitrary but consistent ordering.\n */\nNode.DOCUMENT_POSITION_FOLLOWING = 4;\n/**\n * otherNode is an ancestor of the node.\n */\nNode.DOCUMENT_POSITION_CONTAINS = 8;\n/**\n * otherNode is a descendant of the node.\n */\nNode.DOCUMENT_POSITION_CONTAINED_BY = 16;\n/**\n * The result relies upon arbitrary and/or implementation-specific behavior and is not guaranteed to be portable.\n */\nNode.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 32;\n\nvar PROPAGATION_LIMIT = 2048;\nvar EventService = /*#__PURE__*/function () {\n function EventService(globalRuntime, context) {\n var _this = this;\n _classCallCheck(this, EventService);\n /**\n * Store HTML elements in current canvas.\n */\n this.nativeHTMLMap = new WeakMap();\n this.cursor = 'default';\n this.mappingTable = {};\n this.mappingState = {\n trackingData: {}\n };\n this.eventPool = new Map();\n this.tmpMatrix = mat4.create();\n this.tmpVec3 = vec3.create();\n this.onPointerDown = function (from) {\n var e = _this.createPointerEvent(from);\n _this.dispatchEvent(e, 'pointerdown');\n if (e.pointerType === 'touch') {\n _this.dispatchEvent(e, 'touchstart');\n } else if (e.pointerType === 'mouse' || e.pointerType === 'pen') {\n var isRightButton = e.button === 2;\n _this.dispatchEvent(e, isRightButton ? 'rightdown' : 'mousedown');\n }\n var trackingData = _this.trackingData(from.pointerId);\n trackingData.pressTargetsByButton[from.button] = e.composedPath();\n _this.freeEvent(e);\n };\n this.onPointerUp = function (from) {\n var now = clock.now();\n var e = _this.createPointerEvent(from, undefined, undefined, _this.context.config.alwaysTriggerPointerEventOnCanvas ? _this.rootTarget : undefined);\n _this.dispatchEvent(e, 'pointerup');\n if (e.pointerType === 'touch') {\n _this.dispatchEvent(e, 'touchend');\n } else if (e.pointerType === 'mouse' || e.pointerType === 'pen') {\n var isRightButton = e.button === 2;\n _this.dispatchEvent(e, isRightButton ? 'rightup' : 'mouseup');\n }\n var trackingData = _this.trackingData(from.pointerId);\n var pressTarget = _this.findMountedTarget(trackingData.pressTargetsByButton[from.button]);\n var clickTarget = pressTarget;\n\n // pointerupoutside only bubbles. It only bubbles upto the parent that doesn't contain\n // the pointerup location.\n if (pressTarget && !e.composedPath().includes(pressTarget)) {\n var currentTarget = pressTarget;\n while (currentTarget && !e.composedPath().includes(currentTarget)) {\n e.currentTarget = currentTarget;\n _this.notifyTarget(e, 'pointerupoutside');\n if (e.pointerType === 'touch') {\n _this.notifyTarget(e, 'touchendoutside');\n } else if (e.pointerType === 'mouse' || e.pointerType === 'pen') {\n var _isRightButton = e.button === 2;\n _this.notifyTarget(e, _isRightButton ? 'rightupoutside' : 'mouseupoutside');\n }\n if (Node.isNode(currentTarget)) {\n currentTarget = currentTarget.parentNode;\n }\n }\n delete trackingData.pressTargetsByButton[from.button];\n\n // currentTarget is the most specific ancestor holding both the pointerdown and pointerup\n // targets. That is - it's our click target!\n clickTarget = currentTarget;\n }\n if (clickTarget) {\n var _e$detail;\n var clickEvent = _this.clonePointerEvent(e, 'click');\n clickEvent.target = clickTarget;\n clickEvent.path = [];\n if (!trackingData.clicksByButton[from.button]) {\n trackingData.clicksByButton[from.button] = {\n clickCount: 0,\n target: clickEvent.target,\n timeStamp: now\n };\n }\n var canvas = _this.context.renderingContext.root.ownerDocument.defaultView;\n var clickHistory = trackingData.clicksByButton[from.button];\n if (clickHistory.target === clickEvent.target && now - clickHistory.timeStamp < canvas.getConfig().dblClickSpeed) {\n ++clickHistory.clickCount;\n } else {\n clickHistory.clickCount = 1;\n }\n clickHistory.target = clickEvent.target;\n clickHistory.timeStamp = now;\n clickEvent.detail = clickHistory.clickCount;\n\n // @see https://github.com/antvis/G/issues/1091\n if (!((_e$detail = e.detail) !== null && _e$detail !== void 0 && _e$detail.preventClick)) {\n if (!_this.context.config.useNativeClickEvent && (clickEvent.pointerType === 'mouse' || clickEvent.pointerType === 'touch')) {\n _this.dispatchEvent(clickEvent, 'click');\n }\n _this.dispatchEvent(clickEvent, 'pointertap');\n }\n _this.freeEvent(clickEvent);\n }\n _this.freeEvent(e);\n };\n this.onPointerMove = function (from) {\n var e = _this.createPointerEvent(from, undefined, undefined, _this.context.config.alwaysTriggerPointerEventOnCanvas ? _this.rootTarget : undefined);\n var isMouse = e.pointerType === 'mouse' || e.pointerType === 'pen';\n var trackingData = _this.trackingData(from.pointerId);\n var outTarget = _this.findMountedTarget(trackingData.overTargets);\n\n // First pointerout/pointerleave\n if (trackingData.overTargets && outTarget !== e.target) {\n // pointerout always occurs on the overTarget when the pointer hovers over another element.\n var outType = from.type === 'mousemove' ? 'mouseout' : 'pointerout';\n var outEvent = _this.createPointerEvent(from, outType, outTarget || undefined);\n _this.dispatchEvent(outEvent, 'pointerout');\n if (isMouse) _this.dispatchEvent(outEvent, 'mouseout');\n\n // If the pointer exits overTarget and its descendants, then a pointerleave event is also fired. This event\n // is dispatched to all ancestors that no longer capture the pointer.\n if (!e.composedPath().includes(outTarget)) {\n var leaveEvent = _this.createPointerEvent(from, 'pointerleave', outTarget || undefined);\n leaveEvent.eventPhase = leaveEvent.AT_TARGET;\n while (leaveEvent.target && !e.composedPath().includes(leaveEvent.target)) {\n leaveEvent.currentTarget = leaveEvent.target;\n _this.notifyTarget(leaveEvent);\n if (isMouse) {\n _this.notifyTarget(leaveEvent, 'mouseleave');\n }\n if (Node.isNode(leaveEvent.target)) {\n leaveEvent.target = leaveEvent.target.parentNode;\n }\n }\n _this.freeEvent(leaveEvent);\n }\n _this.freeEvent(outEvent);\n }\n\n // Then pointerover\n if (outTarget !== e.target) {\n // pointerover always occurs on the new overTarget\n var overType = from.type === 'mousemove' ? 'mouseover' : 'pointerover';\n var overEvent = _this.clonePointerEvent(e, overType); // clone faster\n\n _this.dispatchEvent(overEvent, 'pointerover');\n if (isMouse) _this.dispatchEvent(overEvent, 'mouseover');\n\n // Probe whether the newly hovered Node is an ancestor of the original overTarget.\n var overTargetAncestor = outTarget && Node.isNode(outTarget) && outTarget.parentNode;\n while (overTargetAncestor && overTargetAncestor !== (Node.isNode(_this.rootTarget) && _this.rootTarget.parentNode)) {\n if (overTargetAncestor === e.target) break;\n overTargetAncestor = overTargetAncestor.parentNode;\n }\n\n // The pointer has entered a non-ancestor of the original overTarget. This means we need a pointerentered\n // event.\n var didPointerEnter = !overTargetAncestor || overTargetAncestor === (Node.isNode(_this.rootTarget) && _this.rootTarget.parentNode);\n if (didPointerEnter) {\n var enterEvent = _this.clonePointerEvent(e, 'pointerenter');\n enterEvent.eventPhase = enterEvent.AT_TARGET;\n while (enterEvent.target && enterEvent.target !== outTarget && enterEvent.target !== (Node.isNode(_this.rootTarget) && _this.rootTarget.parentNode)) {\n enterEvent.currentTarget = enterEvent.target;\n _this.notifyTarget(enterEvent);\n if (isMouse) _this.notifyTarget(enterEvent, 'mouseenter');\n if (Node.isNode(enterEvent.target)) {\n enterEvent.target = enterEvent.target.parentNode;\n }\n }\n _this.freeEvent(enterEvent);\n }\n _this.freeEvent(overEvent);\n }\n\n // Then pointermove\n _this.dispatchEvent(e, 'pointermove');\n if (e.pointerType === 'touch') _this.dispatchEvent(e, 'touchmove');\n if (isMouse) {\n _this.dispatchEvent(e, 'mousemove');\n _this.cursor = _this.getCursor(e.target);\n }\n trackingData.overTargets = e.composedPath();\n _this.freeEvent(e);\n };\n this.onPointerOut = function (from) {\n var trackingData = _this.trackingData(from.pointerId);\n if (trackingData.overTargets) {\n var isMouse = from.pointerType === 'mouse' || from.pointerType === 'pen';\n var outTarget = _this.findMountedTarget(trackingData.overTargets);\n\n // pointerout first\n var outEvent = _this.createPointerEvent(from, 'pointerout', outTarget || undefined);\n _this.dispatchEvent(outEvent);\n if (isMouse) _this.dispatchEvent(outEvent, 'mouseout');\n\n // pointerleave(s) are also dispatched b/c the pointer must've left rootTarget and its descendants to\n // get an upstream pointerout event (upstream events do not know rootTarget has descendants).\n var leaveEvent = _this.createPointerEvent(from, 'pointerleave', outTarget || undefined);\n leaveEvent.eventPhase = leaveEvent.AT_TARGET;\n while (leaveEvent.target && leaveEvent.target !== (Node.isNode(_this.rootTarget) && _this.rootTarget.parentNode)) {\n leaveEvent.currentTarget = leaveEvent.target;\n _this.notifyTarget(leaveEvent);\n if (isMouse) {\n _this.notifyTarget(leaveEvent, 'mouseleave');\n }\n if (Node.isNode(leaveEvent.target)) {\n leaveEvent.target = leaveEvent.target.parentNode;\n }\n }\n trackingData.overTargets = null;\n _this.freeEvent(outEvent);\n _this.freeEvent(leaveEvent);\n }\n _this.cursor = null;\n };\n this.onPointerOver = function (from) {\n var trackingData = _this.trackingData(from.pointerId);\n var e = _this.createPointerEvent(from);\n var isMouse = e.pointerType === 'mouse' || e.pointerType === 'pen';\n _this.dispatchEvent(e, 'pointerover');\n if (isMouse) _this.dispatchEvent(e, 'mouseover');\n if (e.pointerType === 'mouse') _this.cursor = _this.getCursor(e.target);\n\n // pointerenter events must be fired since the pointer entered from upstream.\n var enterEvent = _this.clonePointerEvent(e, 'pointerenter');\n enterEvent.eventPhase = enterEvent.AT_TARGET;\n while (enterEvent.target && enterEvent.target !== (Node.isNode(_this.rootTarget) && _this.rootTarget.parentNode)) {\n enterEvent.currentTarget = enterEvent.target;\n _this.notifyTarget(enterEvent);\n if (isMouse) {\n // mouseenter should not bubble\n // @see https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseenter_event#usage_notes\n _this.notifyTarget(enterEvent, 'mouseenter');\n }\n if (Node.isNode(enterEvent.target)) {\n enterEvent.target = enterEvent.target.parentNode;\n }\n }\n trackingData.overTargets = e.composedPath();\n _this.freeEvent(e);\n _this.freeEvent(enterEvent);\n };\n this.onPointerUpOutside = function (from) {\n var trackingData = _this.trackingData(from.pointerId);\n var pressTarget = _this.findMountedTarget(trackingData.pressTargetsByButton[from.button]);\n var e = _this.createPointerEvent(from);\n if (pressTarget) {\n var currentTarget = pressTarget;\n while (currentTarget) {\n e.currentTarget = currentTarget;\n _this.notifyTarget(e, 'pointerupoutside');\n if (e.pointerType === 'touch') ; else if (e.pointerType === 'mouse' || e.pointerType === 'pen') {\n _this.notifyTarget(e, e.button === 2 ? 'rightupoutside' : 'mouseupoutside');\n }\n if (Node.isNode(currentTarget)) {\n currentTarget = currentTarget.parentNode;\n }\n }\n delete trackingData.pressTargetsByButton[from.button];\n }\n _this.freeEvent(e);\n };\n this.onWheel = function (from) {\n var wheelEvent = _this.createWheelEvent(from);\n _this.dispatchEvent(wheelEvent);\n _this.freeEvent(wheelEvent);\n };\n this.onClick = function (from) {\n if (_this.context.config.useNativeClickEvent) {\n var e = _this.createPointerEvent(from);\n _this.dispatchEvent(e);\n _this.freeEvent(e);\n }\n };\n this.onPointerCancel = function (from) {\n var e = _this.createPointerEvent(from, undefined, undefined, _this.context.config.alwaysTriggerPointerEventOnCanvas ? _this.rootTarget : undefined);\n _this.dispatchEvent(e);\n _this.freeEvent(e);\n };\n this.globalRuntime = globalRuntime;\n this.context = context;\n }\n return _createClass(EventService, [{\n key: \"init\",\n value: function init() {\n this.rootTarget = this.context.renderingContext.root.parentNode; // document\n this.addEventMapping('pointerdown', this.onPointerDown);\n this.addEventMapping('pointerup', this.onPointerUp);\n this.addEventMapping('pointermove', this.onPointerMove);\n this.addEventMapping('pointerout', this.onPointerOut);\n this.addEventMapping('pointerleave', this.onPointerOut);\n this.addEventMapping('pointercancel', this.onPointerCancel);\n this.addEventMapping('pointerover', this.onPointerOver);\n this.addEventMapping('pointerupoutside', this.onPointerUpOutside);\n this.addEventMapping('wheel', this.onWheel);\n this.addEventMapping('click', this.onClick);\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.mappingTable = {};\n this.mappingState = {};\n this.eventPool.clear();\n }\n }, {\n key: \"getScale\",\n value: function getScale() {\n var bbox = this.context.contextService.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n var $el = this.context.contextService.getDomElement();\n if ($el && bbox) {\n var offsetWidth = $el.offsetWidth,\n offsetHeight = $el.offsetHeight;\n if (offsetWidth && offsetHeight) {\n scaleX = bbox.width / offsetWidth;\n scaleY = bbox.height / offsetHeight;\n }\n }\n return {\n scaleX: scaleX,\n scaleY: scaleY,\n bbox: bbox\n };\n }\n\n /**\n * Should account for CSS Transform applied on container.\n * @see https://github.com/antvis/G/issues/1161\n * @see https://github.com/antvis/G/issues/1677\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/MouseEvent/offsetX\n */\n }, {\n key: \"client2Viewport\",\n value: function client2Viewport(client) {\n var _this$getScale = this.getScale(),\n scaleX = _this$getScale.scaleX,\n scaleY = _this$getScale.scaleY,\n bbox = _this$getScale.bbox;\n return new Point((client.x - ((bbox === null || bbox === void 0 ? void 0 : bbox.left) || 0)) / scaleX, (client.y - ((bbox === null || bbox === void 0 ? void 0 : bbox.top) || 0)) / scaleY);\n }\n }, {\n key: \"viewport2Client\",\n value: function viewport2Client(canvas) {\n var _this$getScale2 = this.getScale(),\n scaleX = _this$getScale2.scaleX,\n scaleY = _this$getScale2.scaleY,\n bbox = _this$getScale2.bbox;\n return new Point((canvas.x + ((bbox === null || bbox === void 0 ? void 0 : bbox.left) || 0)) * scaleX, (canvas.y + ((bbox === null || bbox === void 0 ? void 0 : bbox.top) || 0)) * scaleY);\n }\n }, {\n key: \"viewport2Canvas\",\n value: function viewport2Canvas(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var canvas = this.rootTarget.defaultView;\n var camera = canvas.getCamera();\n var _this$context$config = this.context.config,\n width = _this$context$config.width,\n height = _this$context$config.height;\n var projectionMatrixInverse = camera.getPerspectiveInverse();\n var worldMatrix = camera.getWorldTransform();\n var vpMatrix = mat4.multiply(this.tmpMatrix, worldMatrix, projectionMatrixInverse);\n var viewport = vec3.set(this.tmpVec3, x / width * 2 - 1, (1 - y / height) * 2 - 1, 0);\n vec3.transformMat4(viewport, viewport, vpMatrix);\n return new Point(viewport[0], viewport[1]);\n }\n }, {\n key: \"canvas2Viewport\",\n value: function canvas2Viewport(canvasP) {\n var canvas = this.rootTarget.defaultView;\n var camera = canvas.getCamera();\n\n // World -> Clip\n var projectionMatrix = camera.getPerspective();\n var viewMatrix = camera.getViewTransform();\n var vpMatrix = mat4.multiply(this.tmpMatrix, projectionMatrix, viewMatrix);\n var clip = vec3.set(this.tmpVec3, canvasP.x, canvasP.y, 0);\n vec3.transformMat4(this.tmpVec3, this.tmpVec3, vpMatrix);\n\n // Clip -> NDC -> Viewport, flip Y\n var _this$context$config2 = this.context.config,\n width = _this$context$config2.width,\n height = _this$context$config2.height;\n return new Point((clip[0] + 1) / 2 * width, (1 - (clip[1] + 1) / 2) * height);\n }\n }, {\n key: \"setPickHandler\",\n value: function setPickHandler(pickHandler) {\n this.pickHandler = pickHandler;\n }\n }, {\n key: \"addEventMapping\",\n value: function addEventMapping(type, fn) {\n if (!this.mappingTable[type]) {\n this.mappingTable[type] = [];\n }\n this.mappingTable[type].push({\n fn: fn,\n priority: 0\n });\n this.mappingTable[type].sort(function (a, b) {\n return a.priority - b.priority;\n });\n }\n }, {\n key: \"mapEvent\",\n value: function mapEvent(e) {\n if (!this.rootTarget) {\n return;\n }\n var mappers = this.mappingTable[e.type];\n if (mappers) {\n for (var i = 0, j = mappers.length; i < j; i++) {\n mappers[i].fn(e);\n }\n } else {\n console.warn(\"[EventService]: Event mapping not defined for \".concat(e.type));\n }\n }\n }, {\n key: \"dispatchEvent\",\n value: function dispatchEvent(e, type, skipPropagate) {\n // Canvas should skip\n if (!skipPropagate) {\n e.propagationStopped = false;\n e.propagationImmediatelyStopped = false;\n this.propagate(e, type);\n } else {\n // target phase\n e.eventPhase = e.AT_TARGET;\n var canvas = this.rootTarget.defaultView || null;\n e.currentTarget = canvas;\n this.notifyListeners(e, type);\n }\n }\n }, {\n key: \"propagate\",\n value: function propagate(e, type) {\n if (!e.target) {\n return;\n }\n\n // [target, parent, root, Canvas]\n var composedPath = e.composedPath();\n\n // event flow: capture -> target -> bubbling\n\n // capture phase\n e.eventPhase = e.CAPTURING_PHASE;\n for (var i = composedPath.length - 1; i >= 1; i--) {\n e.currentTarget = composedPath[i];\n this.notifyTarget(e, type);\n if (e.propagationStopped || e.propagationImmediatelyStopped) return;\n }\n\n // target phase\n e.eventPhase = e.AT_TARGET;\n e.currentTarget = e.target;\n this.notifyTarget(e, type);\n if (e.propagationStopped || e.propagationImmediatelyStopped) return;\n\n // find current target in composed path\n var index = composedPath.indexOf(e.currentTarget);\n\n // bubbling phase\n e.eventPhase = e.BUBBLING_PHASE;\n for (var _i = index + 1; _i < composedPath.length; _i++) {\n e.currentTarget = composedPath[_i];\n this.notifyTarget(e, type);\n if (e.propagationStopped || e.propagationImmediatelyStopped) return;\n }\n }\n }, {\n key: \"propagationPath\",\n value: function propagationPath(target) {\n var propagationPath = [target];\n var canvas = this.rootTarget.defaultView || null;\n if (canvas && canvas === target) {\n propagationPath.unshift(canvas.document);\n return propagationPath;\n }\n for (var i = 0; i < PROPAGATION_LIMIT && target !== this.rootTarget; i++) {\n // if (Node.isNode(target) && !target.parentNode) {\n // throw new Error('Cannot find propagation path to disconnected target');\n // }\n\n if (Node.isNode(target) && target.parentNode) {\n // [target, parent, parent, root]\n propagationPath.push(target.parentNode);\n target = target.parentNode;\n }\n }\n if (canvas) {\n // @ts-ignore\n propagationPath.push(canvas);\n }\n return propagationPath;\n }\n }, {\n key: \"hitTest\",\n value: function hitTest(position) {\n var viewportX = position.viewportX,\n viewportY = position.viewportY;\n var _this$context$config3 = this.context.config,\n width = _this$context$config3.width,\n height = _this$context$config3.height,\n disableHitTesting = _this$context$config3.disableHitTesting;\n // outside canvas\n if (viewportX < 0 || viewportY < 0 || viewportX > width || viewportY > height) {\n return null;\n }\n return !disableHitTesting && this.pickHandler(position) || this.rootTarget ||\n // return Document\n null;\n }\n\n /**\n * whether the native event trigger came from Canvas,\n * should account for HTML shape\n */\n }, {\n key: \"isNativeEventFromCanvas\",\n value: function isNativeEventFromCanvas($el, nativeEvent) {\n var _target;\n var target = nativeEvent === null || nativeEvent === void 0 ? void 0 : nativeEvent.target;\n // Get event target inside a web component.\n // @see https://stackoverflow.com/questions/57963312/get-event-target-inside-a-web-component\n if ((_target = target) !== null && _target !== void 0 && _target.shadowRoot) {\n target = nativeEvent.composedPath()[0];\n }\n if (target) {\n // from \n if (target === $el) {\n return true;\n }\n\n // from \n if ($el && $el.contains) {\n return $el.contains(target);\n }\n }\n if (nativeEvent !== null && nativeEvent !== void 0 && nativeEvent.composedPath) {\n return nativeEvent.composedPath().indexOf($el) > -1;\n }\n\n // account for Touch\n return false;\n }\n\n /**\n * Find HTML from composed path in native UI event.\n */\n }, {\n key: \"getExistedHTML\",\n value: function getExistedHTML(event) {\n if (event.nativeEvent.composedPath) {\n for (var _i2 = 0, _arr = event.nativeEvent.composedPath(); _i2 < _arr.length; _i2++) {\n var eventTarget = _arr[_i2];\n var existed = this.nativeHTMLMap.get(eventTarget);\n if (existed) {\n return existed;\n }\n }\n }\n return null;\n }\n }, {\n key: \"pickTarget\",\n value: function pickTarget(event) {\n return this.hitTest({\n clientX: event.clientX,\n clientY: event.clientY,\n viewportX: event.viewportX,\n viewportY: event.viewportY,\n x: event.canvasX,\n y: event.canvasY\n });\n }\n }, {\n key: \"createPointerEvent\",\n value: function createPointerEvent(from, type, target, fallbackTarget) {\n var event = this.allocateEvent(FederatedPointerEvent);\n this.copyPointerData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from;\n var existedHTML = this.getExistedHTML(event);\n var $el = this.context.contextService.getDomElement();\n event.target = target !== null && target !== void 0 ? target : existedHTML || this.isNativeEventFromCanvas($el, event.nativeEvent) && this.pickTarget(event) || fallbackTarget;\n if (typeof type === 'string') {\n event.type = type;\n }\n return event;\n }\n }, {\n key: \"createWheelEvent\",\n value: function createWheelEvent(from) {\n var event = this.allocateEvent(FederatedWheelEvent);\n this.copyWheelData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from;\n var existedHTML = this.getExistedHTML(event);\n var $el = this.context.contextService.getDomElement();\n event.target = existedHTML || this.isNativeEventFromCanvas($el, event.nativeEvent) && this.pickTarget(event);\n return event;\n }\n }, {\n key: \"trackingData\",\n value: function trackingData(id) {\n if (!this.mappingState.trackingData[id]) {\n this.mappingState.trackingData[id] = {\n pressTargetsByButton: {},\n clicksByButton: {},\n overTarget: null\n };\n }\n return this.mappingState.trackingData[id];\n }\n }, {\n key: \"cloneWheelEvent\",\n value: function cloneWheelEvent(from) {\n var event = this.allocateEvent(FederatedWheelEvent);\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from.originalEvent;\n this.copyWheelData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n event.target = from.target;\n event.path = from.composedPath().slice();\n event.type = from.type;\n return event;\n }\n }, {\n key: \"clonePointerEvent\",\n value: function clonePointerEvent(from, type) {\n var event = this.allocateEvent(FederatedPointerEvent);\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from.originalEvent;\n this.copyPointerData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n event.target = from.target;\n event.path = from.composedPath().slice();\n event.type = type !== null && type !== void 0 ? type : event.type;\n return event;\n }\n }, {\n key: \"copyPointerData\",\n value: function copyPointerData(from, to) {\n // if (\n // !(\n // from instanceof FederatedPointerEvent &&\n // to instanceof FederatedPointerEvent\n // )\n // )\n // return;\n\n to.pointerId = from.pointerId;\n to.width = from.width;\n to.height = from.height;\n to.isPrimary = from.isPrimary;\n to.pointerType = from.pointerType;\n to.pressure = from.pressure;\n to.tangentialPressure = from.tangentialPressure;\n to.tiltX = from.tiltX;\n to.tiltY = from.tiltY;\n to.twist = from.twist;\n }\n }, {\n key: \"copyMouseData\",\n value: function copyMouseData(from, to) {\n // if (\n // !(\n // from instanceof FederatedMouseEvent && to instanceof FederatedMouseEvent\n // )\n // )\n // return;\n\n to.altKey = from.altKey;\n to.button = from.button;\n to.buttons = from.buttons;\n to.ctrlKey = from.ctrlKey;\n to.metaKey = from.metaKey;\n to.shiftKey = from.shiftKey;\n to.client.copyFrom(from.client);\n to.movement.copyFrom(from.movement);\n to.canvas.copyFrom(from.canvas);\n to.screen.copyFrom(from.screen);\n to.global.copyFrom(from.global);\n to.offset.copyFrom(from.offset);\n }\n }, {\n key: \"copyWheelData\",\n value: function copyWheelData(from, to) {\n to.deltaMode = from.deltaMode;\n to.deltaX = from.deltaX;\n to.deltaY = from.deltaY;\n to.deltaZ = from.deltaZ;\n }\n }, {\n key: \"copyData\",\n value: function copyData(from, to) {\n to.isTrusted = from.isTrusted;\n to.timeStamp = clock.now();\n to.type = from.type;\n to.detail = from.detail;\n to.view = from.view;\n to.page.copyFrom(from.page);\n to.viewport.copyFrom(from.viewport);\n }\n }, {\n key: \"allocateEvent\",\n value: function allocateEvent(constructor) {\n if (!this.eventPool.has(constructor)) {\n this.eventPool.set(constructor, []);\n }\n\n // @ts-ignore\n var event = this.eventPool.get(constructor).pop() || new constructor(this);\n event.eventPhase = event.NONE;\n event.currentTarget = null;\n event.path = [];\n event.target = null;\n return event;\n }\n }, {\n key: \"freeEvent\",\n value: function freeEvent(event) {\n if (event.manager !== this) throw new Error('It is illegal to free an event not managed by this EventBoundary!');\n var constructor = event.constructor;\n if (!this.eventPool.has(constructor)) {\n this.eventPool.set(constructor, []);\n }\n\n // @ts-ignore\n this.eventPool.get(constructor).push(event);\n }\n }, {\n key: \"notifyTarget\",\n value: function notifyTarget(e, type) {\n type = type !== null && type !== void 0 ? type : e.type;\n var key = e.eventPhase === e.CAPTURING_PHASE || e.eventPhase === e.AT_TARGET ? \"\".concat(type, \"capture\") : type;\n this.notifyListeners(e, key);\n if (e.eventPhase === e.AT_TARGET) {\n this.notifyListeners(e, type);\n }\n }\n }, {\n key: \"notifyListeners\",\n value: function notifyListeners(e, type) {\n // hack EventEmitter, stops if the `propagationImmediatelyStopped` flag is set\n var emitter = e.currentTarget.emitter;\n // @ts-ignore\n var listeners = emitter._events[type];\n if (!listeners) return;\n if ('fn' in listeners) {\n if (listeners.once) {\n emitter.removeListener(type, listeners.fn, undefined, true);\n }\n listeners.fn.call(e.currentTarget || listeners.context, e);\n // listeners.fn.call(listeners.context, e);\n } else {\n for (var i = 0; i < listeners.length && !e.propagationImmediatelyStopped; i++) {\n if (listeners[i].once) {\n emitter.removeListener(type, listeners[i].fn, undefined, true);\n }\n listeners[i].fn.call(e.currentTarget || listeners[i].context, e);\n // listeners[i].fn.call(listeners[i].context, e);\n }\n }\n }\n\n /**\n * some detached nodes may exist in propagation path, need to skip them\n */\n }, {\n key: \"findMountedTarget\",\n value: function findMountedTarget(propagationPath) {\n if (!propagationPath) {\n return null;\n }\n var currentTarget = propagationPath[propagationPath.length - 1];\n for (var i = propagationPath.length - 2; i >= 0; i--) {\n var target = propagationPath[i];\n if (target === this.rootTarget || Node.isNode(target) && target.parentNode === currentTarget) {\n currentTarget = propagationPath[i];\n } else {\n break;\n }\n }\n return currentTarget;\n }\n }, {\n key: \"getCursor\",\n value: function getCursor(target) {\n var tmp = target;\n while (tmp) {\n var cursor = isElement(tmp) && tmp.getAttribute('cursor');\n if (cursor) {\n return cursor;\n }\n tmp = Node.isNode(tmp) && tmp.parentNode;\n }\n }\n }]);\n}();\n\n/**\n * used in following scenes:\n * - g `ctx.measureText`\n * - g-plugin-canvas-picker `ctx.isPointInPath`\n * - g-plugin-device-renderer `ctx.createLinearGradient` and generate texture\n *\n * @see https://blog.scottlogic.com/2020/03/19/offscreen-canvas.html\n */\nvar OffscreenCanvasCreator = /*#__PURE__*/function () {\n function OffscreenCanvasCreator() {\n _classCallCheck(this, OffscreenCanvasCreator);\n }\n return _createClass(OffscreenCanvasCreator, [{\n key: \"getOrCreateCanvas\",\n value: function getOrCreateCanvas(offscreenCanvas, contextAttributes) {\n if (this.canvas) {\n return this.canvas;\n }\n\n // user-defined offscreen canvas\n if (offscreenCanvas || runtime.offscreenCanvas) {\n this.canvas = offscreenCanvas || runtime.offscreenCanvas;\n this.context = this.canvas.getContext('2d', _objectSpread({\n willReadFrequently: true\n }, contextAttributes));\n } else {\n try {\n // OffscreenCanvas2D measureText can be up to 40% faster.\n this.canvas = new window.OffscreenCanvas(0, 0);\n this.context = this.canvas.getContext('2d', _objectSpread({\n willReadFrequently: true\n }, contextAttributes));\n if (!this.context || !this.context.measureText) {\n this.canvas = document.createElement('canvas');\n this.context = this.canvas.getContext('2d');\n }\n } catch (_unused) {\n this.canvas = document.createElement('canvas');\n this.context = this.canvas.getContext('2d', _objectSpread({\n willReadFrequently: true\n }, contextAttributes));\n }\n }\n this.canvas.width = 10;\n this.canvas.height = 10;\n return this.canvas;\n }\n }, {\n key: \"getOrCreateContext\",\n value: function getOrCreateContext(offscreenCanvas, contextAttributes) {\n if (this.context) {\n return this.context;\n }\n this.getOrCreateCanvas(offscreenCanvas, contextAttributes);\n return this.context;\n }\n }], [{\n key: \"createCanvas\",\n value:\n /**\n * @returns new canvas instance\n */\n function createCanvas() {\n try {\n return new window.OffscreenCanvas(0, 0);\n } catch (_unused2) {\n //\n }\n try {\n return document.createElement('canvas');\n } catch (_unused3) {\n //\n }\n return null;\n }\n }]);\n}();\n\n/**\n * why we need re-render\n */\nvar RenderReason = /*#__PURE__*/function (RenderReason) {\n RenderReason[RenderReason[\"CAMERA_CHANGED\"] = 0] = \"CAMERA_CHANGED\";\n RenderReason[RenderReason[\"DISPLAY_OBJECT_CHANGED\"] = 1] = \"DISPLAY_OBJECT_CHANGED\";\n RenderReason[RenderReason[\"NONE\"] = 2] = \"NONE\";\n return RenderReason;\n}({});\n\n/**\n * Use frame renderer implemented by `g-canvas/svg/webgl`, in every frame we do followings:\n * * update & merge dirty rectangles\n * * begin frame\n * * filter by visible\n * * sort by z-index in scene graph\n * * culling with strategies registered in `g-canvas/webgl`\n * * end frame\n */\nvar RenderingService = /*#__PURE__*/function () {\n function RenderingService(globalRuntime, context) {\n _classCallCheck(this, RenderingService);\n this.inited = false;\n this.stats = {\n /**\n * total display objects in scenegraph\n */\n total: 0,\n /**\n * number of display objects need to render in current frame\n */\n rendered: 0\n };\n this.zIndexCounter = 0;\n this.hooks = {\n /**\n * called before any frame rendered\n */\n init: new SyncHook(),\n initAsync: new AsyncParallelHook(),\n /**\n * only dirty object which has sth changed will be rendered\n */\n dirtycheck: new SyncWaterfallHook(),\n /**\n * do culling\n */\n cull: new SyncWaterfallHook(),\n /**\n * called at beginning of each frame, won't get called if nothing to re-render\n */\n beginFrame: new SyncHook(),\n /**\n * called before every dirty object get rendered\n */\n beforeRender: new SyncHook(),\n /**\n * called when every dirty object rendering even it's culled\n */\n render: new SyncHook(),\n /**\n * called after every dirty object get rendered\n */\n afterRender: new SyncHook(),\n endFrame: new SyncHook(),\n destroy: new SyncHook(),\n /**\n * use async but faster method such as GPU-based picking in `g-plugin-device-renderer`\n */\n pick: new AsyncSeriesWaterfallHook(),\n /**\n * Unsafe but sync version of pick.\n */\n pickSync: new SyncWaterfallHook(),\n /**\n * used in event system\n */\n pointerDown: new SyncHook(),\n pointerUp: new SyncHook(),\n pointerMove: new SyncHook(),\n pointerOut: new SyncHook(),\n pointerOver: new SyncHook(),\n pointerWheel: new SyncHook(),\n pointerCancel: new SyncHook(),\n click: new SyncHook()\n };\n this.globalRuntime = globalRuntime;\n this.context = context;\n }\n return _createClass(RenderingService, [{\n key: \"init\",\n value: function init(callback) {\n var _this = this;\n var context = _objectSpread(_objectSpread({}, this.globalRuntime), this.context);\n\n // register rendering plugins\n this.context.renderingPlugins.forEach(function (plugin) {\n plugin.apply(context, _this.globalRuntime);\n });\n this.hooks.init.call();\n if (this.hooks.initAsync.getCallbacksNum() === 0) {\n this.inited = true;\n callback();\n } else {\n this.hooks.initAsync.promise().then(function () {\n _this.inited = true;\n callback();\n })[\"catch\"](function (err) {});\n }\n }\n }, {\n key: \"getStats\",\n value: function getStats() {\n return this.stats;\n }\n\n /**\n * Meet the following conditions:\n * * disable DirtyRectangleRendering\n * * camera changed\n */\n }, {\n key: \"disableDirtyRectangleRendering\",\n value: function disableDirtyRectangleRendering() {\n var renderer = this.context.config.renderer;\n var _renderer$getConfig = renderer.getConfig(),\n enableDirtyRectangleRendering = _renderer$getConfig.enableDirtyRectangleRendering;\n return !enableDirtyRectangleRendering || this.context.renderingContext.renderReasons.has(RenderReason.CAMERA_CHANGED);\n }\n }, {\n key: \"render\",\n value: function render(canvasConfig, frame, rerenderCallback) {\n var _this2 = this;\n this.stats.total = 0;\n this.stats.rendered = 0;\n this.zIndexCounter = 0;\n var renderingContext = this.context.renderingContext;\n this.globalRuntime.sceneGraphService.syncHierarchy(renderingContext.root);\n this.globalRuntime.sceneGraphService.triggerPendingEvents();\n if (renderingContext.renderReasons.size && this.inited) {\n // @ts-ignore\n renderingContext.dirtyRectangleRenderingDisabled = this.disableDirtyRectangleRendering();\n var onlyCameraChanged = renderingContext.renderReasons.size === 1 && renderingContext.renderReasons.has(RenderReason.CAMERA_CHANGED);\n var shouldTriggerRenderHooks = !canvasConfig.disableRenderHooks || !(canvasConfig.disableRenderHooks && onlyCameraChanged);\n if (shouldTriggerRenderHooks) {\n this.renderDisplayObject(renderingContext.root, canvasConfig, renderingContext);\n }\n this.hooks.beginFrame.call(frame);\n if (shouldTriggerRenderHooks) {\n renderingContext.renderListCurrentFrame.forEach(function (object) {\n _this2.hooks.beforeRender.call(object);\n _this2.hooks.render.call(object);\n _this2.hooks.afterRender.call(object);\n });\n }\n this.hooks.endFrame.call(frame);\n renderingContext.renderListCurrentFrame = [];\n renderingContext.renderReasons.clear();\n rerenderCallback();\n }\n\n // console.log('stats', this.stats);\n }\n }, {\n key: \"renderDisplayObject\",\n value: function renderDisplayObject(displayObject, canvasConfig, renderingContext) {\n var self = this;\n var _canvasConfig$rendere = canvasConfig.renderer.getConfig(),\n enableDirtyCheck = _canvasConfig$rendere.enableDirtyCheck,\n enableCulling = _canvasConfig$rendere.enableCulling;\n function internalRenderSingleDisplayObject(object) {\n // TODO: relayout\n\n // dirtycheck first\n var renderable = object.renderable,\n sortable = object.sortable;\n // eslint-disable-next-line no-nested-ternary\n var objectChanged = enableDirtyCheck ?\n // @ts-ignore\n renderable.dirty || renderingContext.dirtyRectangleRenderingDisabled ? object : null : object;\n if (objectChanged) {\n var objectToRender = enableCulling ? self.hooks.cull.call(objectChanged, self.context.camera) : objectChanged;\n if (objectToRender) {\n self.stats.rendered += 1;\n renderingContext.renderListCurrentFrame.push(objectToRender);\n }\n }\n renderable.dirty = false;\n sortable.renderOrder = self.zIndexCounter;\n self.zIndexCounter += 1;\n self.stats.total += 1;\n\n // sort is very expensive, use cached result if possible\n if (sortable.dirty) {\n self.sort(object, sortable);\n sortable.dirty = false;\n sortable.dirtyChildren = [];\n sortable.dirtyReason = undefined;\n }\n }\n var stack = [displayObject];\n while (stack.length > 0) {\n var _currentObject$sortab;\n var currentObject = stack.pop();\n internalRenderSingleDisplayObject(currentObject);\n\n // recursive rendering its children\n var objects = ((_currentObject$sortab = currentObject.sortable) === null || _currentObject$sortab === void 0 || (_currentObject$sortab = _currentObject$sortab.sorted) === null || _currentObject$sortab === void 0 ? void 0 : _currentObject$sortab.length) > 0 ? currentObject.sortable.sorted : currentObject.childNodes;\n for (var i = objects.length - 1; i >= 0; i--) {\n stack.push(objects[i]);\n }\n }\n }\n }, {\n key: \"sort\",\n value: function sort(displayObject, sortable) {\n var _sortable$sorted, _sortable$sorted2;\n if ((sortable === null || sortable === void 0 || (_sortable$sorted = sortable.sorted) === null || _sortable$sorted === void 0 ? void 0 : _sortable$sorted.length) > 0 && sortable.dirtyReason !== SortReason.Z_INDEX_CHANGED) {\n // avoid re-sorting the whole children list\n sortable.dirtyChildren.forEach(function (child) {\n // remove from sorted list\n var sortIndex = sortable.sorted.indexOf(child);\n if (sortIndex > -1) {\n sortable.sorted.splice(sortIndex, 1);\n }\n var index = displayObject.childNodes.indexOf(child);\n if (index > -1) {\n if (sortable.sorted.length === 0) {\n sortable.sorted.push(child);\n } else {\n var _index = sortedIndex(sortable.sorted, child);\n sortable.sorted.splice(_index, 0, child);\n }\n }\n });\n } else {\n sortable.sorted = displayObject.childNodes.slice().sort(sortByZIndex);\n }\n\n // When the child elements are changed and sorted, if there are no more stacked elements in the child elements (i.e. zIndex != 0), clear the sort list\n if (((_sortable$sorted2 = sortable.sorted) === null || _sortable$sorted2 === void 0 ? void 0 : _sortable$sorted2.length) > 0 && displayObject.childNodes.filter(function (child) {\n return child.parsedStyle.zIndex;\n }).length === 0) {\n sortable.sorted = [];\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.inited = false;\n this.hooks.destroy.call();\n this.globalRuntime.sceneGraphService.clearPendingEvents();\n }\n }, {\n key: \"dirtify\",\n value: function dirtify() {\n // need re-render\n this.context.renderingContext.renderReasons.add(RenderReason.DISPLAY_OBJECT_CHANGED);\n }\n }]);\n}();\n\nvar ATTRIBUTE_REGEXP = /\\[\\s*(.*)=(.*)\\s*\\]/;\n\n/**\n * support the following DOM API:\n * * getElementById\n * * getElementsByClassName\n * * getElementsByName\n * * getElementsByTag\n * * querySelector\n * * querySelectorAll\n */\nvar DefaultSceneGraphSelector = /*#__PURE__*/function () {\n function DefaultSceneGraphSelector() {\n _classCallCheck(this, DefaultSceneGraphSelector);\n }\n return _createClass(DefaultSceneGraphSelector, [{\n key: \"selectOne\",\n value: function selectOne(query, root) {\n var _this = this;\n if (query.startsWith('.')) {\n return root.find(function (node) {\n // return !node.shadow && node.id === query.substring(1);\n return ((node === null || node === void 0 ? void 0 : node.classList) || []).indexOf(_this.getIdOrClassname(query)) > -1;\n });\n }\n if (query.startsWith('#')) {\n // getElementById('id')\n return root.find(function (node) {\n // return !node.shadow && node.id === query.substring(1);\n return node.id === _this.getIdOrClassname(query);\n });\n }\n if (query.startsWith('[')) {\n var _this$getAttribute = this.getAttribute(query),\n name = _this$getAttribute.name,\n value = _this$getAttribute.value;\n if (name) {\n // getElementByName();\n return root.find(function (node) {\n return root !== node && (name === 'name' ? node.name === value : _this.attributeToString(node, name) === value);\n });\n }\n return null;\n }\n // getElementsByTag('circle');\n return root.find(function (node) {\n return root !== node && node.nodeName === query;\n });\n }\n }, {\n key: \"selectAll\",\n value: function selectAll(query, root) {\n var _this2 = this;\n // only support `[name=\"${name}\"]` `.className` `#id`\n if (query.startsWith('.')) {\n // getElementsByClassName('className');\n // should not include itself\n return root.findAll(function (node) {\n return root !== node && ((node === null || node === void 0 ? void 0 : node.classList) || []).indexOf(_this2.getIdOrClassname(query)) > -1;\n });\n }\n if (query.startsWith('#')) {\n return root.findAll(function (node) {\n return root !== node && node.id === _this2.getIdOrClassname(query);\n });\n }\n if (query.startsWith('[')) {\n var _this$getAttribute2 = this.getAttribute(query),\n name = _this$getAttribute2.name,\n value = _this$getAttribute2.value;\n if (name) {\n // getElementsByName();\n return root.findAll(function (node) {\n return root !== node && (name === 'name' ? node.name === value : _this2.attributeToString(node, name) === value);\n });\n }\n return [];\n }\n // getElementsByTag('circle');\n return root.findAll(function (node) {\n return root !== node && node.nodeName === query;\n });\n }\n }, {\n key: \"is\",\n value: function is(query, node) {\n // a simple `matches` implementation\n if (query.startsWith('.')) {\n return node.className === this.getIdOrClassname(query);\n }\n if (query.startsWith('#')) {\n return node.id === this.getIdOrClassname(query);\n }\n if (query.startsWith('[')) {\n var _this$getAttribute3 = this.getAttribute(query),\n name = _this$getAttribute3.name,\n value = _this$getAttribute3.value;\n return name === 'name' ? node.name === value : this.attributeToString(node, name) === value;\n }\n return node.nodeName === query;\n }\n }, {\n key: \"getIdOrClassname\",\n value: function getIdOrClassname(query) {\n return query.substring(1);\n }\n }, {\n key: \"getAttribute\",\n value: function getAttribute(query) {\n var matches = query.match(ATTRIBUTE_REGEXP);\n var name = '';\n var value = '';\n if (matches && matches.length > 2) {\n name = matches[1].replace(/\"/g, '');\n value = matches[2].replace(/\"/g, '');\n }\n return {\n name: name,\n value: value\n };\n }\n }, {\n key: \"attributeToString\",\n value: function attributeToString(node, name) {\n if (!node.getAttribute) {\n return '';\n }\n var value = node.getAttribute(name);\n if (isNil(value)) {\n return '';\n }\n if (value.toString) {\n return value.toString();\n }\n return '';\n }\n }]);\n}();\n\n/**\n * built-in events for element\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MutationEvent\n *\n * TODO: use MutationObserver instead\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver\n */\nvar ElementEvent = /*#__PURE__*/function (ElementEvent) {\n // --- @see https://developer.mozilla.org/en-US/docs/Web/API/MutationEvent\n /**\n * @see https://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMAttrModified\n */\n ElementEvent[\"ATTR_MODIFIED\"] = \"DOMAttrModified\";\n /**\n * it has been inserted\n * @see https://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMNodeInserted\n */\n ElementEvent[\"INSERTED\"] = \"DOMNodeInserted\";\n /**\n * @see https://www.w3.org/TR/DOM-Level-3-Events/#domnodeinsertedintodocument\n */\n ElementEvent[\"MOUNTED\"] = \"DOMNodeInsertedIntoDocument\";\n /**\n * it is being removed\n * @see https://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMNodeRemoved\n */\n ElementEvent[\"REMOVED\"] = \"removed\";\n /**\n * @see https://www.w3.org/TR/DOM-Level-3-Events/#domnoderemovedfromdocument\n */\n ElementEvent[\"UNMOUNTED\"] = \"DOMNodeRemovedFromDocument\";\n // ---\n ElementEvent[\"REPARENT\"] = \"reparent\";\n ElementEvent[\"DESTROY\"] = \"destroy\";\n ElementEvent[\"BOUNDS_CHANGED\"] = \"bounds-changed\";\n ElementEvent[\"CULLED\"] = \"culled\";\n return ElementEvent;\n}({});\n\n// #region EventTarget\n\n// #region Node\n\n// #region Element\n\n// #region AnimationTimeline\n\n// #region Document\n\n// #region CSSStyleDeclaration\n/**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/CSSStyleDeclaration\n */\n\n// #region Canvas\n\nvar MutationEvent = /*#__PURE__*/function (_FederatedEvent) {\n function MutationEvent(typeArg, relatedNode, prevValue, newValue, attrName, attrChange, prevParsedValue, newParsedValue) {\n var _this;\n _classCallCheck(this, MutationEvent);\n _this = _callSuper(this, MutationEvent, [null]);\n _this.relatedNode = relatedNode;\n _this.prevValue = prevValue;\n _this.newValue = newValue;\n _this.attrName = attrName;\n _this.attrChange = attrChange;\n _this.prevParsedValue = prevParsedValue;\n _this.newParsedValue = newParsedValue;\n _this.type = typeArg;\n return _this;\n }\n _inherits(MutationEvent, _FederatedEvent);\n return _createClass(MutationEvent);\n}(FederatedEvent);\nMutationEvent.ADDITION = 2;\nMutationEvent.MODIFICATION = 1;\nMutationEvent.REMOVAL = 3;\n\nfunction markRenderableDirty(e) {\n var renderable = e.renderable;\n if (renderable) {\n renderable.renderBoundsDirty = true;\n renderable.boundsDirty = true;\n }\n}\nvar reparentEvent = new MutationEvent(ElementEvent.REPARENT, null, '', '', '', 0, '', '');\n\n// Object pooling\n/** do not modify this objects */\nvar $vec2Zero = vec2.create();\n/** do not modify this objects */\nvar $vec3Zero = vec3.create();\n/** do not modify this objects */\nvar $vec3One = vec3.fromValues(1, 1, 1);\n/** do not modify this objects */\nvar $mat4Identity = mat4.create();\n\n/** shared objects */\nvar $vec2 = vec2.create();\n/** shared objects */\nvar $vec3$1 = vec3.create();\n/** shared objects */\nvar $mat4 = mat4.create();\n/** shared objects */\nvar $quat$1 = quat$1.create();\nvar $setLocalTransform_1 = vec3.create();\nvar $setLocalTransform_2 = quat$1.create();\nvar $setLocalTransform_3 = vec3.create();\nvar $setLocalPosition = vec3.create();\nvar $setPosition_1 = vec3.create();\nvar $setPosition_ParentInvertMatrix = mat4.create();\nvar $setEulerAngles_InvParentRot = quat$1.create();\nvar $rotateLocal = quat$1.create();\nvar $rotate_ParentInvertRotation = quat$1.create();\nvar $triggerPendingEvents_detail = {\n affectChildren: true\n};\n\n/**\n * update transform in scene graph\n *\n * @see https://community.khronos.org/t/scene-graphs/50542/7\n */\nvar DefaultSceneGraphService = /*#__PURE__*/function () {\n function DefaultSceneGraphService(runtime) {\n _classCallCheck(this, DefaultSceneGraphService);\n // target -> affectChildren\n this.pendingEvents = new Map();\n this.boundsChangedEvent = new CustomEvent(ElementEvent.BOUNDS_CHANGED);\n this.displayObjectDependencyMap = new WeakMap();\n this.runtime = runtime;\n }\n return _createClass(DefaultSceneGraphService, [{\n key: \"matches\",\n value: function matches(query, root) {\n return this.runtime.sceneGraphSelector.is(query, root);\n }\n }, {\n key: \"querySelector\",\n value: function querySelector(query, root) {\n return this.runtime.sceneGraphSelector.selectOne(query, root);\n }\n }, {\n key: \"querySelectorAll\",\n value: function querySelectorAll(query, root) {\n return this.runtime.sceneGraphSelector.selectAll(query, root);\n // .filter((node) => !node.shadow);\n }\n }, {\n key: \"attach\",\n value: function attach(child, parent, index) {\n var _sortable$sorted;\n var detached = false;\n if (child.parentNode) {\n detached = child.parentNode !== parent;\n this.detach(child);\n }\n var isChildFragment = child.nodeName === Shape.FRAGMENT;\n var isAttachToFragment = isInFragment(parent);\n child.parentNode = parent;\n var nodes = isChildFragment ? child.childNodes : [child];\n if (isNumber(index)) {\n nodes.forEach(function (node) {\n parent.childNodes.splice(index, 0, node);\n node.parentNode = parent;\n });\n } else {\n nodes.forEach(function (node) {\n parent.childNodes.push(node);\n node.parentNode = parent;\n });\n }\n\n // parent needs re-sort\n var _ref = parent,\n sortable = _ref.sortable;\n if (sortable !== null && sortable !== void 0 && (_sortable$sorted = sortable.sorted) !== null && _sortable$sorted !== void 0 && _sortable$sorted.length || sortable.dirty || child.parsedStyle.zIndex) {\n if (sortable.dirtyChildren.indexOf(child) === -1) {\n sortable.dirtyChildren.push(child);\n }\n // if (sortable) {\n // only child has z-Index\n sortable.dirty = true;\n sortable.dirtyReason = SortReason.ADDED;\n }\n if (isAttachToFragment) return;\n if (isChildFragment) this.dirtifyFragment(child);else {\n var transform = child.transformable;\n if (transform) {\n this.dirtifyWorld(child, transform);\n }\n }\n if (detached) {\n child.dispatchEvent(reparentEvent);\n }\n }\n }, {\n key: \"detach\",\n value: function detach(child) {\n var _sortable$sorted2, _style;\n if (!child.parentNode) {\n return;\n }\n var transform = child.transformable;\n // if (transform) {\n // const worldTransform = this.getWorldTransform(child, transform);\n // mat4.getScaling(transform.localScale, worldTransform);\n // mat4.getTranslation(transform.localPosition, worldTransform);\n // mat4.getRotation(transform.localRotation, worldTransform);\n // transform.localDirtyFlag = true;\n // }\n\n // parent needs re-sort\n var _ref2 = child.parentNode,\n sortable = _ref2.sortable;\n // if (sortable) {\n if (sortable !== null && sortable !== void 0 && (_sortable$sorted2 = sortable.sorted) !== null && _sortable$sorted2 !== void 0 && _sortable$sorted2.length || (_style = child.style) !== null && _style !== void 0 && _style.zIndex) {\n if (sortable.dirtyChildren.indexOf(child) === -1) {\n sortable.dirtyChildren.push(child);\n }\n sortable.dirty = true;\n sortable.dirtyReason = SortReason.REMOVED;\n }\n var index = child.parentNode.childNodes.indexOf(child);\n if (index > -1) {\n child.parentNode.childNodes.splice(index, 1);\n }\n if (transform) {\n this.dirtifyWorld(child, transform);\n }\n child.parentNode = null;\n }\n }, {\n key: \"getOrigin\",\n value: function getOrigin(element) {\n element.getGeometryBounds();\n return element.transformable.origin;\n }\n\n /**\n * same as pivot in Pixi.js\n *\n * @see https://stackoverflow.com/questions/40748452/how-to-change-css-transform-origin-but-preserve-transformation\n */\n }, {\n key: \"setOrigin\",\n value: function setOrigin(element, origin) {\n var y = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var z = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n if (typeof origin === 'number') {\n origin = [origin, y, z];\n }\n var transform = element.transformable;\n if (origin[0] === transform.origin[0] && origin[1] === transform.origin[1] && origin[2] === transform.origin[2]) {\n return;\n }\n var originVec = transform.origin;\n\n // const delta = vec3.subtract(vec3.create(), origin, originVec);\n // vec3.add(transform.localPosition, transform.localPosition, delta);\n\n // update origin\n originVec[0] = origin[0];\n originVec[1] = origin[1];\n originVec[2] = origin[2] || 0;\n this.dirtifyLocal(element, transform);\n }\n\n /**\n * rotate in world space\n */\n }, {\n key: \"rotate\",\n value: function rotate(element, degrees) {\n var y = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var z = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n if (typeof degrees === 'number') {\n degrees = vec3.fromValues(degrees, y, z);\n }\n var transform = element.transformable;\n if (element.parentNode === null || !element.parentNode.transformable) {\n this.rotateLocal(element, degrees);\n } else {\n var rotation = $quat$1;\n quat$1.fromEuler(rotation, degrees[0], degrees[1], degrees[2]);\n var rot = this.getRotation(element);\n var parentRot = this.getRotation(element.parentNode);\n quat$1.copy($rotate_ParentInvertRotation, parentRot);\n quat$1.invert($rotate_ParentInvertRotation, $rotate_ParentInvertRotation);\n quat$1.multiply(rotation, $rotate_ParentInvertRotation, rotation);\n quat$1.multiply(transform.localRotation, rotation, rot);\n quat$1.normalize(transform.localRotation, transform.localRotation);\n this.dirtifyLocal(element, transform);\n }\n }\n\n /**\n * rotate in local space\n * @see @see https://docs.microsoft.com/en-us/windows/win32/api/directxmath/nf-directxmath-xmquaternionrotationrollpitchyaw\n */\n }, {\n key: \"rotateLocal\",\n value: function rotateLocal(element, degrees) {\n var y = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var z = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n if (typeof degrees === 'number') {\n degrees = vec3.fromValues(degrees, y, z);\n }\n var transform = element.transformable;\n quat$1.fromEuler($rotateLocal, degrees[0], degrees[1], degrees[2]);\n quat$1.mul(transform.localRotation, transform.localRotation, $rotateLocal);\n this.dirtifyLocal(element, transform);\n }\n\n /**\n * set euler angles(degrees) in world space\n */\n }, {\n key: \"setEulerAngles\",\n value: function setEulerAngles(element, degrees) {\n var y = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var z = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n if (typeof degrees === 'number') {\n degrees = vec3.fromValues(degrees, y, z);\n }\n var transform = element.transformable;\n if (element.parentNode === null || !element.parentNode.transformable) {\n this.setLocalEulerAngles(element, degrees);\n } else {\n quat$1.fromEuler(transform.localRotation, degrees[0], degrees[1], degrees[2]);\n var parentRotation = this.getRotation(element.parentNode);\n quat$1.copy($setEulerAngles_InvParentRot, quat$1.invert($quat$1, parentRotation));\n quat$1.mul(transform.localRotation, transform.localRotation, $setEulerAngles_InvParentRot);\n this.dirtifyLocal(element, transform);\n }\n }\n\n /**\n * set euler angles(degrees) in local space\n */\n }, {\n key: \"setLocalEulerAngles\",\n value: function setLocalEulerAngles(element, degrees) {\n var y = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var z = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var dirtify = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n if (typeof degrees === 'number') {\n degrees = vec3.fromValues(degrees, y, z);\n }\n var transform = element.transformable;\n quat$1.fromEuler(transform.localRotation, degrees[0], degrees[1], degrees[2]);\n if (dirtify) {\n this.dirtifyLocal(element, transform);\n }\n }\n\n /**\n * translate in local space\n *\n * @example\n * ```\n * translateLocal(x, y, z)\n * translateLocal(vec3(x, y, z))\n * ```\n */\n }, {\n key: \"translateLocal\",\n value: function translateLocal(element, translation) {\n var y = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var z = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n if (typeof translation === 'number') {\n translation = vec3.fromValues(translation, y, z);\n }\n var transform = element.transformable;\n if (vec3.equals(translation, $vec3Zero)) return;\n vec3.transformQuat(translation, translation, transform.localRotation);\n vec3.add(transform.localPosition, transform.localPosition, translation);\n this.dirtifyLocal(element, transform);\n }\n\n /**\n * move to position in world space\n *\n * 对应 g 原版的 move/moveTo\n * @see https://github.com/antvis/g/blob/master/packages/g-base/src/abstract/element.ts#L684-L689\n */\n }, {\n key: \"setPosition\",\n value: function setPosition(element, position) {\n var _position$;\n var transform = element.transformable;\n $setPosition_1[0] = position[0];\n $setPosition_1[1] = position[1];\n $setPosition_1[2] = (_position$ = position[2]) !== null && _position$ !== void 0 ? _position$ : 0;\n if (vec3.equals(this.getPosition(element), $setPosition_1)) {\n return;\n }\n vec3.copy(transform.position, $setPosition_1);\n if (element.parentNode === null || !element.parentNode.transformable) {\n vec3.copy(transform.localPosition, $setPosition_1);\n } else {\n var parentTransform = element.parentNode.transformable;\n mat4.copy($setPosition_ParentInvertMatrix, parentTransform.worldTransform);\n mat4.invert($setPosition_ParentInvertMatrix, $setPosition_ParentInvertMatrix);\n vec3.transformMat4(transform.localPosition, $setPosition_1, $setPosition_ParentInvertMatrix);\n }\n this.dirtifyLocal(element, transform);\n }\n\n /**\n * move to position in local space\n */\n }, {\n key: \"setLocalPosition\",\n value: function setLocalPosition(element, position) {\n var _position$2;\n var dirtify = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var transform = element.transformable;\n $setLocalPosition[0] = position[0];\n $setLocalPosition[1] = position[1];\n $setLocalPosition[2] = (_position$2 = position[2]) !== null && _position$2 !== void 0 ? _position$2 : 0;\n if (vec3.equals(transform.localPosition, $setLocalPosition)) {\n return;\n }\n vec3.copy(transform.localPosition, $setLocalPosition);\n if (dirtify) {\n this.dirtifyLocal(element, transform);\n }\n }\n\n /**\n * scale in local space\n */\n }, {\n key: \"scaleLocal\",\n value: function scaleLocal(element, scaling) {\n var _scaling$;\n var transform = element.transformable;\n vec3.multiply(transform.localScale, transform.localScale, vec3.set($vec3$1, scaling[0], scaling[1], (_scaling$ = scaling[2]) !== null && _scaling$ !== void 0 ? _scaling$ : 1));\n this.dirtifyLocal(element, transform);\n }\n }, {\n key: \"setLocalScale\",\n value: function setLocalScale(element, scaling) {\n var _scaling$2;\n var dirtify = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var transform = element.transformable;\n vec3.set($vec3$1, scaling[0], scaling[1], (_scaling$2 = scaling[2]) !== null && _scaling$2 !== void 0 ? _scaling$2 : transform.localScale[2]);\n if (vec3.equals($vec3$1, transform.localScale)) {\n return;\n }\n vec3.copy(transform.localScale, $vec3$1);\n if (dirtify) {\n this.dirtifyLocal(element, transform);\n }\n }\n\n /**\n * translate in world space\n *\n * @example\n * ```\n * translate(x, y, z)\n * translate(vec3(x, y, z))\n * ```\n *\n * 对应 g 原版的 translate 2D\n * @see https://github.com/antvis/g/blob/master/packages/g-base/src/abstract/element.ts#L665-L676\n */\n }, {\n key: \"translate\",\n value: function translate(element, translation) {\n var y = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var z = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n if (typeof translation === 'number') {\n translation = vec3.set($vec3$1, translation, y, z);\n }\n if (vec3.equals(translation, $vec3Zero)) return;\n vec3.add($vec3$1, this.getPosition(element), translation);\n this.setPosition(element, $vec3$1);\n }\n }, {\n key: \"setRotation\",\n value: function setRotation(element, rotation, y, z, w) {\n var transform = element.transformable;\n if (typeof rotation === 'number') {\n rotation = quat$1.fromValues(rotation, y, z, w);\n }\n if (element.parentNode === null || !element.parentNode.transformable) {\n this.setLocalRotation(element, rotation);\n } else {\n var parentRot = this.getRotation(element.parentNode);\n quat$1.copy($quat$1, parentRot);\n quat$1.invert($quat$1, $quat$1);\n quat$1.multiply(transform.localRotation, $quat$1, rotation);\n quat$1.normalize(transform.localRotation, transform.localRotation);\n this.dirtifyLocal(element, transform);\n }\n }\n }, {\n key: \"setLocalRotation\",\n value: function setLocalRotation(element, rotation, y, z, w) {\n var dirtify = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n if (typeof rotation === 'number') {\n rotation = quat$1.set($quat$1, rotation, y, z, w);\n }\n var transform = element.transformable;\n quat$1.copy(transform.localRotation, rotation);\n if (dirtify) {\n this.dirtifyLocal(element, transform);\n }\n }\n }, {\n key: \"setLocalSkew\",\n value: function setLocalSkew(element, skew, y) {\n var dirtify = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n if (typeof skew === 'number') {\n skew = vec2.set($vec2, skew, y);\n }\n var transform = element.transformable;\n vec2.copy(transform.localSkew, skew);\n if (dirtify) {\n this.dirtifyLocal(element, transform);\n }\n }\n }, {\n key: \"dirtifyLocal\",\n value: function dirtifyLocal(element, transform) {\n if (isInFragment(element)) return;\n if (!transform.localDirtyFlag) {\n transform.localDirtyFlag = true;\n if (!transform.dirtyFlag) {\n this.dirtifyWorld(element, transform);\n }\n }\n }\n }, {\n key: \"dirtifyWorld\",\n value: function dirtifyWorld(element, transform) {\n if (!transform.dirtyFlag) {\n this.unfreezeParentToRoot(element);\n }\n this.dirtifyWorldInternal(element, transform);\n this.dirtifyToRoot(element, true);\n }\n }, {\n key: \"dirtifyFragment\",\n value: function dirtifyFragment(element) {\n var transform = element.transformable;\n if (transform) {\n transform.frozen = false;\n transform.dirtyFlag = true;\n transform.localDirtyFlag = true;\n }\n var renderable = element.renderable;\n if (renderable) {\n renderable.renderBoundsDirty = true;\n renderable.boundsDirty = true;\n renderable.dirty = true;\n }\n var length = element.childNodes.length;\n for (var i = 0; i < length; i++) {\n this.dirtifyFragment(element.childNodes[i]);\n }\n if (element.nodeName === Shape.FRAGMENT) {\n this.pendingEvents.set(element, false);\n }\n }\n }, {\n key: \"triggerPendingEvents\",\n value: function triggerPendingEvents() {\n var _this = this;\n var triggered = new Set();\n var trigger = function trigger(element, detail) {\n if (!element.isConnected || triggered.has(element) || element.nodeName === Shape.FRAGMENT) {\n return;\n }\n _this.boundsChangedEvent.detail = detail;\n _this.boundsChangedEvent.target = element;\n if (element.isMutationObserved) {\n element.dispatchEvent(_this.boundsChangedEvent);\n } else {\n element.ownerDocument.defaultView.dispatchEvent(_this.boundsChangedEvent, true);\n }\n triggered.add(element);\n };\n this.pendingEvents.forEach(function (affectChildren, element) {\n if (element.nodeName === Shape.FRAGMENT) {\n return;\n }\n $triggerPendingEvents_detail.affectChildren = affectChildren;\n if (affectChildren) {\n element.forEach(function (e) {\n trigger(e, $triggerPendingEvents_detail);\n });\n } else trigger(element, $triggerPendingEvents_detail);\n });\n triggered.clear();\n this.clearPendingEvents();\n }\n }, {\n key: \"clearPendingEvents\",\n value: function clearPendingEvents() {\n this.pendingEvents.clear();\n }\n }, {\n key: \"dirtifyToRoot\",\n value: function dirtifyToRoot(element) {\n var affectChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var p = element;\n\n // only need to re-render itself\n if (p.renderable) {\n p.renderable.dirty = true;\n }\n while (p) {\n markRenderableDirty(p);\n p = p.parentNode;\n }\n if (affectChildren) {\n element.forEach(function (e) {\n markRenderableDirty(e);\n });\n }\n this.informDependentDisplayObjects(element);\n this.pendingEvents.set(element, affectChildren);\n }\n }, {\n key: \"updateDisplayObjectDependency\",\n value: function updateDisplayObjectDependency(name, oldPath, newPath, object) {\n // clear ref to old clip path\n if (oldPath && oldPath !== newPath) {\n var oldDependencyMap = this.displayObjectDependencyMap.get(oldPath);\n if (oldDependencyMap && oldDependencyMap[name]) {\n var index = oldDependencyMap[name].indexOf(object);\n oldDependencyMap[name].splice(index, 1);\n }\n }\n if (newPath) {\n var newDependencyMap = this.displayObjectDependencyMap.get(newPath);\n if (!newDependencyMap) {\n this.displayObjectDependencyMap.set(newPath, {});\n newDependencyMap = this.displayObjectDependencyMap.get(newPath);\n }\n if (!newDependencyMap[name]) {\n newDependencyMap[name] = [];\n }\n newDependencyMap[name].push(object);\n }\n }\n }, {\n key: \"informDependentDisplayObjects\",\n value: function informDependentDisplayObjects(object) {\n var _this2 = this;\n var dependencyMap = this.displayObjectDependencyMap.get(object);\n if (!dependencyMap) {\n return;\n }\n Object.keys(dependencyMap).forEach(function (name) {\n dependencyMap[name].forEach(function (target) {\n _this2.dirtifyToRoot(target, true);\n target.dispatchEvent(new MutationEvent(ElementEvent.ATTR_MODIFIED, target, _this2, _this2, name, MutationEvent.MODIFICATION, _this2, _this2));\n if (target.isCustomElement && target.isConnected) {\n if (target.attributeChangedCallback) {\n target.attributeChangedCallback(name, _this2, _this2);\n }\n }\n });\n });\n }\n }, {\n key: \"getPosition\",\n value: function getPosition(element) {\n var transform = element.transformable;\n return mat4.getTranslation(transform.position, this.getWorldTransform(element, transform));\n }\n }, {\n key: \"getRotation\",\n value: function getRotation(element) {\n var transform = element.transformable;\n return mat4.getRotation(transform.rotation, this.getWorldTransform(element, transform));\n }\n }, {\n key: \"getScale\",\n value: function getScale(element) {\n var transform = element.transformable;\n return mat4.getScaling(transform.scaling, this.getWorldTransform(element, transform));\n }\n }, {\n key: \"getWorldTransform\",\n value: function getWorldTransform(element) {\n var transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : element.transformable;\n if (!transform.localDirtyFlag && !transform.dirtyFlag) {\n return transform.worldTransform;\n }\n if (element.parentNode && element.parentNode.transformable) {\n this.getWorldTransform(element.parentNode);\n }\n this.sync(element, transform);\n return transform.worldTransform;\n }\n }, {\n key: \"getLocalPosition\",\n value: function getLocalPosition(element) {\n return element.transformable.localPosition;\n }\n }, {\n key: \"getLocalRotation\",\n value: function getLocalRotation(element) {\n return element.transformable.localRotation;\n }\n }, {\n key: \"getLocalScale\",\n value: function getLocalScale(element) {\n return element.transformable.localScale;\n }\n }, {\n key: \"getLocalSkew\",\n value: function getLocalSkew(element) {\n return element.transformable.localSkew;\n }\n }, {\n key: \"calcLocalTransform\",\n value: function calcLocalTransform(transform) {\n var hasSkew = transform.localSkew[0] !== 0 || transform.localSkew[1] !== 0;\n if (hasSkew) {\n mat4.fromRotationTranslationScaleOrigin(transform.localTransform, transform.localRotation, transform.localPosition, vec3.fromValues(1, 1, 1), transform.origin);\n\n // apply skew2D\n if (transform.localSkew[0] !== 0 || transform.localSkew[1] !== 0) {\n mat4.identity($mat4);\n $mat4[4] = Math.tan(transform.localSkew[0]);\n $mat4[1] = Math.tan(transform.localSkew[1]);\n mat4.multiply(transform.localTransform, transform.localTransform, $mat4);\n }\n var scaling = mat4.fromRotationTranslationScaleOrigin($mat4, quat$1.set($quat$1, 0, 0, 0, 1), vec3.set($vec3$1, 1, 1, 1), transform.localScale, transform.origin);\n mat4.multiply(transform.localTransform, transform.localTransform, scaling);\n } else {\n var localTransform = transform.localTransform,\n localPosition = transform.localPosition,\n localRotation = transform.localRotation,\n localScale = transform.localScale,\n origin = transform.origin;\n var hasPosition = localPosition[0] !== 0 || localPosition[1] !== 0 || localPosition[2] !== 0;\n var hasRotation = localRotation[3] !== 1 || localRotation[0] !== 0 || localRotation[1] !== 0 || localRotation[2] !== 0;\n var hasScale = localScale[0] !== 1 || localScale[1] !== 1 || localScale[2] !== 1;\n var hasOrigin = origin[0] !== 0 || origin[1] !== 0 || origin[2] !== 0;\n if (!hasRotation && !hasScale && !hasOrigin) {\n if (hasPosition) {\n mat4.fromTranslation(localTransform, localPosition);\n } else {\n mat4.identity(localTransform);\n }\n } else {\n // @see https://github.com/mattdesl/css-mat4/blob/master/index.js\n mat4.fromRotationTranslationScaleOrigin(localTransform, localRotation, localPosition, localScale, origin);\n }\n }\n }\n }, {\n key: \"getLocalTransform\",\n value: function getLocalTransform(element) {\n var transform = element.transformable;\n if (transform.localDirtyFlag) {\n this.calcLocalTransform(transform);\n transform.localDirtyFlag = false;\n }\n return transform.localTransform;\n }\n }, {\n key: \"setLocalTransform\",\n value: function setLocalTransform(element, transform) {\n var t = mat4.getTranslation($setLocalTransform_1, transform);\n var r = mat4.getRotation($setLocalTransform_2, transform);\n var s = mat4.getScaling($setLocalTransform_3, transform);\n this.setLocalScale(element, s, false);\n this.setLocalPosition(element, t, false);\n this.setLocalRotation(element, r, undefined, undefined, undefined, false);\n this.dirtifyLocal(element, element.transformable);\n }\n }, {\n key: \"resetLocalTransform\",\n value: function resetLocalTransform(element) {\n this.setLocalScale(element, $vec3One, false);\n this.setLocalPosition(element, $vec3Zero, false);\n this.setLocalEulerAngles(element, $vec3Zero, undefined, undefined, false);\n this.setLocalSkew(element, $vec2Zero, undefined, false);\n this.dirtifyLocal(element, element.transformable);\n }\n }, {\n key: \"getTransformedGeometryBounds\",\n value: function getTransformedGeometryBounds(element) {\n var render = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var existedAABB = arguments.length > 2 ? arguments[2] : undefined;\n var bounds = this.getGeometryBounds(element, render);\n if (!AABB.isEmpty(bounds)) {\n var aabb = existedAABB || new AABB();\n aabb.setFromTransformedAABB(bounds, this.getWorldTransform(element));\n return aabb;\n }\n return null;\n }\n\n /**\n * won't account for children\n */\n }, {\n key: \"getGeometryBounds\",\n value: function getGeometryBounds(element) {\n var render = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var _ref3 = element,\n geometry = _ref3.geometry;\n if (geometry.dirty) {\n runtime.styleValueRegistry.updateGeometry(element);\n }\n var bounds = render ? geometry.renderBounds : geometry.contentBounds || null;\n // return (bounds && new AABB(bounds.center, bounds.halfExtents)) || new AABB();\n return bounds || new AABB();\n }\n\n /**\n * account for children in world space\n */\n }, {\n key: \"getBounds\",\n value: function getBounds(element) {\n var _this3 = this;\n var render = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var _ref4 = element,\n renderable = _ref4.renderable;\n if (!renderable.boundsDirty && !render && renderable.bounds) {\n return renderable.bounds;\n }\n if (!renderable.renderBoundsDirty && render && renderable.renderBounds) {\n return renderable.renderBounds;\n }\n\n // reuse existed if possible\n var existedAABB = render ? renderable.renderBounds : renderable.bounds;\n\n // reset with geometry's aabb\n var aabb = this.getTransformedGeometryBounds(element, render, existedAABB);\n\n // merge children's aabbs\n var children = element.childNodes;\n children.forEach(function (child) {\n var childBounds = _this3.getBounds(child, render);\n if (childBounds) {\n if (!aabb) {\n aabb = existedAABB || new AABB();\n aabb.update(childBounds.center, childBounds.halfExtents);\n } else {\n aabb.add(childBounds);\n }\n }\n });\n if (!aabb) {\n aabb = new AABB();\n }\n if (render) {\n // FIXME: account for clip path\n var clipped = findClosestClipPathTarget(element);\n if (clipped) {\n // use bounds under world space\n var clipPathBounds = clipped.parsedStyle.clipPath.getBounds(render);\n if (!aabb) {\n aabb.update(clipPathBounds.center, clipPathBounds.halfExtents);\n } else if (clipPathBounds) {\n aabb = clipPathBounds.intersection(aabb);\n }\n }\n }\n if (render) {\n renderable.renderBounds = aabb;\n renderable.renderBoundsDirty = false;\n } else {\n renderable.bounds = aabb;\n renderable.boundsDirty = false;\n }\n return aabb;\n }\n\n /**\n * account for children in local space\n */\n }, {\n key: \"getLocalBounds\",\n value: function getLocalBounds(element) {\n if (element.parentNode) {\n var parentInvert = $mat4Identity;\n if (element.parentNode.transformable) {\n parentInvert = mat4.invert($mat4, this.getWorldTransform(element.parentNode));\n }\n var bounds = this.getBounds(element);\n if (!AABB.isEmpty(bounds)) {\n var localBounds = new AABB();\n localBounds.setFromTransformedAABB(bounds, parentInvert);\n return localBounds;\n }\n }\n return this.getBounds(element);\n }\n }, {\n key: \"getBoundingClientRect\",\n value: function getBoundingClientRect(element) {\n var _element$ownerDocumen;\n var aabb;\n var bounds = this.getGeometryBounds(element);\n if (!AABB.isEmpty(bounds)) {\n aabb = new AABB();\n // apply transformation to aabb\n aabb.setFromTransformedAABB(bounds, this.getWorldTransform(element));\n }\n\n // calc context's offset\n var bbox = (_element$ownerDocumen = element.ownerDocument) === null || _element$ownerDocumen === void 0 || (_element$ownerDocumen = _element$ownerDocumen.defaultView) === null || _element$ownerDocumen === void 0 ? void 0 : _element$ownerDocumen.getContextService().getBoundingClientRect();\n if (aabb) {\n var _aabb$getMin = aabb.getMin(),\n _aabb$getMin2 = _slicedToArray(_aabb$getMin, 2),\n left = _aabb$getMin2[0],\n top = _aabb$getMin2[1];\n var _aabb$getMax = aabb.getMax(),\n _aabb$getMax2 = _slicedToArray(_aabb$getMax, 2),\n right = _aabb$getMax2[0],\n bottom = _aabb$getMax2[1];\n return new Rectangle(left + ((bbox === null || bbox === void 0 ? void 0 : bbox.left) || 0), top + ((bbox === null || bbox === void 0 ? void 0 : bbox.top) || 0), right - left, bottom - top);\n }\n return new Rectangle((bbox === null || bbox === void 0 ? void 0 : bbox.left) || 0, (bbox === null || bbox === void 0 ? void 0 : bbox.top) || 0, 0, 0);\n }\n }, {\n key: \"dirtifyWorldInternal\",\n value: function dirtifyWorldInternal(element, transform) {\n var _this4 = this;\n if (!transform.dirtyFlag) {\n transform.dirtyFlag = true;\n transform.frozen = false;\n element.childNodes.forEach(function (child) {\n var childTransform = child.transformable;\n if (!childTransform.dirtyFlag) {\n _this4.dirtifyWorldInternal(child, childTransform);\n }\n });\n var _ref5 = element,\n renderable = _ref5.renderable;\n if (renderable) {\n renderable.renderBoundsDirty = true;\n renderable.boundsDirty = true;\n renderable.dirty = true;\n }\n }\n }\n }, {\n key: \"syncHierarchy\",\n value: function syncHierarchy(element) {\n var transform = element.transformable;\n if (transform.frozen) {\n return;\n }\n transform.frozen = true;\n if (transform.localDirtyFlag || transform.dirtyFlag) {\n this.sync(element, transform);\n }\n var children = element.childNodes;\n for (var i = 0; i < children.length; i++) {\n this.syncHierarchy(children[i]);\n }\n }\n }, {\n key: \"sync\",\n value: function sync(element, transform) {\n if (transform.localDirtyFlag) {\n this.calcLocalTransform(transform);\n transform.localDirtyFlag = false;\n }\n if (transform.dirtyFlag) {\n var parent = element.parentNode;\n var parentTransform = parent && parent.transformable;\n if (parent === null || !parentTransform) {\n mat4.copy(transform.worldTransform, transform.localTransform);\n } else {\n // TODO: should we support scale compensation?\n // @see https://github.com/playcanvas/engine/issues/1077#issuecomment-359765557\n mat4.multiply(transform.worldTransform, parentTransform.worldTransform, transform.localTransform);\n }\n transform.dirtyFlag = false;\n }\n }\n }, {\n key: \"unfreezeParentToRoot\",\n value: function unfreezeParentToRoot(child) {\n var p = child.parentNode;\n while (p) {\n var transform = p.transformable;\n if (transform) {\n transform.frozen = false;\n }\n p = p.parentNode;\n }\n }\n }]);\n}();\n\nvar TEXT_METRICS = {\n MetricsString: '|ÉqÅ',\n BaselineSymbol: 'M',\n BaselineMultiplier: 1.4,\n HeightMultiplier: 2,\n Newlines: [0x000a,\n // line feed\n 0x000d // carriage return\n ],\n BreakingSpaces: [0x0009,\n // character tabulation\n 0x0020,\n // space\n 0x2000,\n // en quad\n 0x2001,\n // em quad\n 0x2002,\n // en space\n 0x2003,\n // em space\n 0x2004,\n // three-per-em space\n 0x2005,\n // four-per-em space\n 0x2006,\n // six-per-em space\n 0x2008,\n // punctuation space\n 0x2009,\n // thin space\n 0x200a,\n // hair space\n 0x205f,\n // medium mathematical space\n 0x3000 // ideographic space\n ]\n};\nvar LATIN_REGEX = /[a-zA-Z0-9\\u00C0-\\u00D6\\u00D8-\\u00f6\\u00f8-\\u00ff!\"#$%&'()*+,-./:;]/;\n\n// Line breaking rules in CJK (Kinsoku Shori)\n// Refer from https://en.wikipedia.org/wiki/Line_breaking_rules_in_East_Asian_languages\nvar regexCannotStartZhCn = /[!%),.:;?\\]}¢°·'\"\"†‡›℃∶、。〃〆〕〗〞﹚﹜!"%'),.:;?!]}~]/;\nvar regexCannotEndZhCn = /[$(£¥·'\"〈《「『【〔〖〝﹙﹛$(.[{£¥]/;\nvar regexCannotStartZhTw = /[!),.:;?\\]}¢·–—'\"•\"、。〆〞〕〉》」︰︱︲︳﹐﹑﹒﹓﹔﹕﹖﹘﹚﹜!),.:;?︶︸︺︼︾﹀﹂﹗]|}、]/;\nvar regexCannotEndZhTw = /[([{£¥'\"‵〈《「『〔〝︴﹙﹛({︵︷︹︻︽︿﹁﹃﹏]/;\nvar regexCannotStartJaJp = /[)\\]}〕〉》」』】〙〗〟'\"⦆»ヽヾーァィゥェォッャュョヮヵヶぁぃぅぇぉっゃゅょゎゕゖㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ々〻‐゠–〜?!‼⁇⁈⁉・、:;,。.]/;\nvar regexCannotEndJaJp = /[([{〔〈《「『【〘〖〝'\"⦅«—...‥〳〴〵]/;\nvar regexCannotStartKoKr = /[!%),.:;?\\]}¢°'\"†‡℃〆〈《「『〕!%),.:;?]}]/;\nvar regexCannotEndKoKr = /[$([{£¥'\"々〇〉》」〔$([{⦆¥₩#]/;\nvar regexCannotStart = new RegExp(\"\".concat(regexCannotStartZhCn.source, \"|\").concat(regexCannotStartZhTw.source, \"|\").concat(regexCannotStartJaJp.source, \"|\").concat(regexCannotStartKoKr.source));\nvar regexCannotEnd = new RegExp(\"\".concat(regexCannotEndZhCn.source, \"|\").concat(regexCannotEndZhTw.source, \"|\").concat(regexCannotEndJaJp.source, \"|\").concat(regexCannotEndKoKr.source));\n\n/**\n * Borrow from pixi/packages/text/src/TextMetrics.ts\n */\nvar TextService = /*#__PURE__*/function () {\n function TextService(runtime) {\n var _this = this;\n _classCallCheck(this, TextService);\n /**\n * font metrics cache\n */\n this.fontMetricsCache = {};\n this.shouldBreakByKinsokuShorui = function (_char, nextChar) {\n if (_this.isBreakingSpace(nextChar)) return false;\n if (_char) {\n // Line breaking rules in CJK (Kinsoku Shori)\n if (regexCannotEnd.exec(nextChar) || regexCannotStart.exec(_char)) {\n return true;\n }\n }\n return false;\n };\n this.trimByKinsokuShorui = function (prev) {\n var next = _toConsumableArray(prev);\n var prevLine = next[next.length - 2];\n if (!prevLine) {\n return prev;\n }\n var lastChar = prevLine[prevLine.length - 1];\n next[next.length - 2] = prevLine.slice(0, -1);\n next[next.length - 1] = lastChar + next[next.length - 1];\n return next;\n };\n this.runtime = runtime;\n }\n return _createClass(TextService, [{\n key: \"measureFont\",\n value:\n /**\n * Calculates the ascent, descent and fontSize of a given font-style.\n */\n function measureFont(font, offscreenCanvas) {\n // as this method is used for preparing assets, don't recalculate things if we don't need to\n if (this.fontMetricsCache[font]) {\n return this.fontMetricsCache[font];\n }\n var properties = {\n ascent: 0,\n descent: 0,\n fontSize: 0\n };\n var canvas = this.runtime.offscreenCanvasCreator.getOrCreateCanvas(offscreenCanvas);\n var context = this.runtime.offscreenCanvasCreator.getOrCreateContext(offscreenCanvas, {\n willReadFrequently: true\n });\n context.font = font;\n var metricsString = TEXT_METRICS.MetricsString + TEXT_METRICS.BaselineSymbol;\n var width = Math.ceil(context.measureText(metricsString).width);\n var baseline = Math.ceil(context.measureText(TEXT_METRICS.BaselineSymbol).width);\n var height = TEXT_METRICS.HeightMultiplier * baseline;\n baseline = baseline * TEXT_METRICS.BaselineMultiplier | 0;\n // @ts-ignore\n canvas.width = width;\n // @ts-ignore\n canvas.height = height;\n context.fillStyle = '#f00';\n context.fillRect(0, 0, width, height);\n context.font = font;\n context.textBaseline = 'alphabetic';\n context.fillStyle = '#000';\n context.fillText(metricsString, 0, baseline);\n var imagedata = context.getImageData(0, 0, width || 1, height || 1).data;\n var pixels = imagedata.length;\n var line = width * 4;\n var i = 0;\n var idx = 0;\n var stop = false;\n // ascent. scan from top to bottom until we find a non red pixel\n for (i = 0; i < baseline; ++i) {\n for (var j = 0; j < line; j += 4) {\n if (imagedata[idx + j] !== 255) {\n stop = true;\n break;\n }\n }\n if (!stop) {\n idx += line;\n } else {\n break;\n }\n }\n properties.ascent = baseline - i;\n idx = pixels - line;\n stop = false;\n // descent. scan from bottom to top until we find a non red pixel\n for (i = height; i > baseline; --i) {\n for (var _j = 0; _j < line; _j += 4) {\n if (imagedata[idx + _j] !== 255) {\n stop = true;\n break;\n }\n }\n if (!stop) {\n idx -= line;\n } else {\n break;\n }\n }\n properties.descent = i - baseline;\n properties.fontSize = properties.ascent + properties.descent;\n this.fontMetricsCache[font] = properties;\n return properties;\n }\n }, {\n key: \"measureText\",\n value: function measureText(text, parsedStyle, offscreenCanvas) {\n var _parsedStyle$fontSize = parsedStyle.fontSize,\n fontSize = _parsedStyle$fontSize === void 0 ? 16 : _parsedStyle$fontSize,\n _parsedStyle$wordWrap = parsedStyle.wordWrap,\n wordWrap = _parsedStyle$wordWrap === void 0 ? false : _parsedStyle$wordWrap,\n strokeHeight = parsedStyle.lineHeight,\n _parsedStyle$lineWidt = parsedStyle.lineWidth,\n lineWidth = _parsedStyle$lineWidt === void 0 ? 1 : _parsedStyle$lineWidt,\n _parsedStyle$textBase = parsedStyle.textBaseline,\n textBaseline = _parsedStyle$textBase === void 0 ? 'alphabetic' : _parsedStyle$textBase,\n _parsedStyle$textAlig = parsedStyle.textAlign,\n textAlign = _parsedStyle$textAlig === void 0 ? 'start' : _parsedStyle$textAlig,\n _parsedStyle$letterSp = parsedStyle.letterSpacing,\n letterSpacing = _parsedStyle$letterSp === void 0 ? 0 : _parsedStyle$letterSp,\n textPath = parsedStyle.textPath;\n parsedStyle.textPathSide;\n parsedStyle.textPathStartOffset;\n var _parsedStyle$leading = parsedStyle.leading,\n leading = _parsedStyle$leading === void 0 ? 0 : _parsedStyle$leading;\n var font = toFontString(parsedStyle);\n var fontProperties = this.measureFont(font, offscreenCanvas);\n // fallback in case UA disallow canvas data extraction\n if (fontProperties.fontSize === 0) {\n fontProperties.fontSize = fontSize;\n fontProperties.ascent = fontSize;\n }\n var context = this.runtime.offscreenCanvasCreator.getOrCreateContext(offscreenCanvas);\n context.font = font;\n\n // no overflowing by default\n parsedStyle.isOverflowing = false;\n var outputText = wordWrap ? this.wordWrap(text, parsedStyle, offscreenCanvas) : text;\n var lines = outputText.split(/(?:\\r\\n|\\r|\\n)/);\n var lineWidths = new Array(lines.length);\n var maxLineWidth = 0;\n\n // account for textPath\n if (textPath) {\n textPath.getTotalLength();\n\n // const startingPoint = textPath.getPoint(0);\n\n for (var i = 0; i < lines.length; i++) {\n context.measureText(lines[i]).width + (lines[i].length - 1) * letterSpacing;\n // for (\n // let i = reverse ? lines[0].length - 1 : 0;\n // reverse ? i >= 0 : i < lines[0].length;\n // reverse ? i-- : i++\n // ) {\n // graphemeInfo = lineBounds[i];\n // if (positionInPath > totalPathLength) {\n // positionInPath %= totalPathLength;\n // } else if (positionInPath < 0) {\n // positionInPath += totalPathLength;\n // }\n // // it would probably much faster to send all the grapheme position for a line\n // // and calculate path position/angle at once.\n // this.setGraphemeOnPath(\n // positionInPath,\n // graphemeInfo,\n // startingPoint\n // );\n // positionInPath += graphemeInfo.kernedWidth;\n // }\n }\n } else {\n for (var _i = 0; _i < lines.length; _i++) {\n // char width + letterSpacing\n var _lineWidth = context.measureText(lines[_i]).width + (lines[_i].length - 1) * letterSpacing;\n lineWidths[_i] = _lineWidth;\n maxLineWidth = Math.max(maxLineWidth, _lineWidth);\n }\n var _width = maxLineWidth + lineWidth;\n\n // if (dropShadow) {\n // width += dropShadowDistance;\n // }\n var lineHeight = strokeHeight || fontProperties.fontSize + lineWidth;\n var height = Math.max(lineHeight, fontProperties.fontSize + lineWidth) + (lines.length - 1) * (lineHeight + leading);\n // if (dropShadow) {\n // height += dropShadowDistance;\n // }\n lineHeight += leading;\n\n // handle vertical text baseline\n var offsetY = 0;\n if (textBaseline === 'middle') {\n offsetY = -height / 2;\n } else if (textBaseline === 'bottom' || textBaseline === 'alphabetic' || textBaseline === 'ideographic') {\n offsetY = -height;\n } else if (textBaseline === 'top' || textBaseline === 'hanging') {\n offsetY = 0;\n }\n return {\n font: font,\n width: _width,\n height: height,\n lines: lines,\n lineWidths: lineWidths,\n lineHeight: lineHeight,\n maxLineWidth: maxLineWidth,\n fontProperties: fontProperties,\n lineMetrics: lineWidths.map(function (width, i) {\n var offsetX = 0;\n // handle horizontal text align\n if (textAlign === 'center' || textAlign === 'middle') {\n offsetX -= width / 2;\n } else if (textAlign === 'right' || textAlign === 'end') {\n offsetX -= width;\n }\n return new Rectangle(offsetX - lineWidth / 2, offsetY + i * lineHeight, width + lineWidth, lineHeight);\n })\n };\n }\n }\n }, {\n key: \"wordWrap\",\n value: function wordWrap(text, parsedStyle, offscreenCanvas) {\n var _this2 = this;\n var self = this;\n var _parsedStyle$wordWrap2 = parsedStyle.wordWrapWidth,\n wordWrapWidth = _parsedStyle$wordWrap2 === void 0 ? 0 : _parsedStyle$wordWrap2,\n _parsedStyle$letterSp2 = parsedStyle.letterSpacing,\n letterSpacing = _parsedStyle$letterSp2 === void 0 ? 0 : _parsedStyle$letterSp2,\n _parsedStyle$maxLines = parsedStyle.maxLines,\n maxLines = _parsedStyle$maxLines === void 0 ? Infinity : _parsedStyle$maxLines,\n textOverflow = parsedStyle.textOverflow;\n var context = this.runtime.offscreenCanvasCreator.getOrCreateContext(offscreenCanvas);\n var maxWidth = wordWrapWidth + letterSpacing;\n var ellipsis = '';\n if (textOverflow === 'ellipsis') {\n ellipsis = '...';\n } else if (textOverflow && textOverflow !== 'clip') {\n ellipsis = textOverflow;\n }\n var chars = Array.from(text);\n var lines = [];\n var currentLineIndex = 0;\n var currentLineWidth = 0;\n // @see https://github.com/antvis/G/issues/1932\n var prevLineLastCharIndex = -1;\n var cache = {};\n var calcWidth = function calcWidth(txt) {\n return _this2.getFromCache(txt, letterSpacing, cache, context);\n };\n var ellipsisWidth = calcWidth(ellipsis);\n\n /**\n * Find text fragments that will take up as much of the given line width as possible when rendered.\n *\n * @see https://github.com/antvis/G/issues/1833\n *\n * @param lineTxt - Current line of text\n * @param txtLastCharIndex - The index of the last character of the current line in the entire text\n * @param txtStartCharIndex - The index of the start character of the current line in the entire text\n */\n function findCharIndexClosestWidthThreshold(lineTxt, txtLastCharIndex, txtStartCharIndex, widthThreshold) {\n while (calcWidth(lineTxt) < widthThreshold && txtLastCharIndex < chars.length - 1) {\n if (self.isNewline(chars[txtLastCharIndex + 1])) {\n break;\n }\n txtLastCharIndex += 1;\n lineTxt += chars[txtLastCharIndex];\n }\n while (calcWidth(lineTxt) > widthThreshold &&\n // @see https://github.com/antvis/G/issues/1932\n txtLastCharIndex >= txtStartCharIndex) {\n txtLastCharIndex -= 1;\n lineTxt = lineTxt.slice(0, -1);\n }\n return {\n lineTxt: lineTxt,\n txtLastCharIndex: txtLastCharIndex\n };\n }\n function appendEllipsis(lineIndex, textCharIndex) {\n // If there is not enough space to display the string itself, it is clipped.\n // @see https://developer.mozilla.org/en-US/docs/Web/CSS/text-overflow#values\n if (ellipsisWidth <= 0 || ellipsisWidth > maxWidth) {\n return;\n }\n if (!lines[lineIndex]) {\n lines[lineIndex] = ellipsis;\n return;\n }\n var result = findCharIndexClosestWidthThreshold(lines[lineIndex], textCharIndex, prevLineLastCharIndex + 1, maxWidth - ellipsisWidth);\n lines[lineIndex] = result.lineTxt + ellipsis;\n }\n for (var i = 0; i < chars.length; i++) {\n var _char2 = chars[i];\n var prevChar = chars[i - 1];\n var nextChar = chars[i + 1];\n var charWidth = calcWidth(_char2);\n if (this.isNewline(_char2)) {\n // exceed maxLines, break immediately\n if (currentLineIndex + 1 >= maxLines) {\n parsedStyle.isOverflowing = true;\n if (i < chars.length - 1) {\n appendEllipsis(currentLineIndex, i - 1);\n }\n break;\n }\n prevLineLastCharIndex = i - 1;\n currentLineIndex += 1;\n currentLineWidth = 0;\n lines[currentLineIndex] = '';\n continue;\n }\n if (currentLineWidth > 0 && currentLineWidth + charWidth > maxWidth) {\n var result = findCharIndexClosestWidthThreshold(lines[currentLineIndex], i - 1, prevLineLastCharIndex + 1, maxWidth);\n if (result.txtLastCharIndex !== i - 1) {\n lines[currentLineIndex] = result.lineTxt;\n if (result.txtLastCharIndex === chars.length - 1) {\n break;\n }\n i = result.txtLastCharIndex + 1;\n _char2 = chars[i];\n prevChar = chars[i - 1];\n nextChar = chars[i + 1];\n charWidth = calcWidth(_char2);\n }\n if (currentLineIndex + 1 >= maxLines) {\n parsedStyle.isOverflowing = true;\n appendEllipsis(currentLineIndex, i - 1);\n break;\n }\n prevLineLastCharIndex = i - 1;\n currentLineIndex += 1;\n currentLineWidth = 0;\n lines[currentLineIndex] = '';\n if (this.isBreakingSpace(_char2)) {\n continue;\n }\n if (!this.canBreakInLastChar(_char2)) {\n lines = this.trimToBreakable(lines);\n currentLineWidth = this.sumTextWidthByCache(lines[currentLineIndex] || '', calcWidth);\n }\n if (this.shouldBreakByKinsokuShorui(_char2, nextChar)) {\n lines = this.trimByKinsokuShorui(lines);\n currentLineWidth += calcWidth(prevChar || '');\n }\n }\n currentLineWidth += charWidth;\n lines[currentLineIndex] = (lines[currentLineIndex] || '') + _char2;\n }\n return lines.join('\\n');\n }\n }, {\n key: \"isBreakingSpace\",\n value: function isBreakingSpace(_char3) {\n if (typeof _char3 !== 'string') {\n return false;\n }\n return TEXT_METRICS.BreakingSpaces.indexOf(_char3.charCodeAt(0)) >= 0;\n }\n }, {\n key: \"isNewline\",\n value: function isNewline(_char4) {\n if (typeof _char4 !== 'string') {\n return false;\n }\n return TEXT_METRICS.Newlines.indexOf(_char4.charCodeAt(0)) >= 0;\n }\n }, {\n key: \"trimToBreakable\",\n value: function trimToBreakable(prev) {\n var next = _toConsumableArray(prev);\n var prevLine = next[next.length - 2];\n var index = this.findBreakableIndex(prevLine);\n if (index === -1 || !prevLine) return next;\n var trimmedChar = prevLine.slice(index, index + 1);\n var isTrimmedWithSpace = this.isBreakingSpace(trimmedChar);\n var trimFrom = index + 1;\n var trimTo = index + (isTrimmedWithSpace ? 0 : 1);\n next[next.length - 1] += prevLine.slice(trimFrom, prevLine.length);\n next[next.length - 2] = prevLine.slice(0, trimTo);\n return next;\n }\n }, {\n key: \"canBreakInLastChar\",\n value: function canBreakInLastChar(_char5) {\n if (_char5 && LATIN_REGEX.test(_char5)) return false;\n return true;\n }\n }, {\n key: \"sumTextWidthByCache\",\n value: function sumTextWidthByCache(text, calcWidthWithCache) {\n return text.split('').reduce(function (sum, c) {\n return sum + calcWidthWithCache(c);\n }, 0);\n }\n }, {\n key: \"findBreakableIndex\",\n value: function findBreakableIndex(line) {\n for (var i = line.length - 1; i >= 0; i--) {\n if (!LATIN_REGEX.test(line[i])) return i;\n }\n return -1;\n }\n }, {\n key: \"getFromCache\",\n value: function getFromCache(key, letterSpacing, cache, context) {\n var width = cache[key];\n if (typeof width !== 'number') {\n var spacing = key.length * letterSpacing;\n var metrics = context.measureText(key);\n width = metrics.width + spacing;\n cache[key] = width;\n }\n return width;\n }\n }]);\n}();\n\nvar runtime = {};\n/**\n * Replace with IoC container\n */\nvar geometryUpdaterFactory = function (_ref) {\n var rectUpdater = new RectUpdater();\n var polylineUpdater = new PolylineUpdater();\n return _ref = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_ref, Shape.FRAGMENT, null), Shape.CIRCLE, new CircleUpdater()), Shape.ELLIPSE, new EllipseUpdater()), Shape.RECT, rectUpdater), Shape.IMAGE, rectUpdater), Shape.GROUP, new GroupUpdater()), Shape.LINE, new LineUpdater()), Shape.TEXT, new TextUpdater(runtime)), Shape.POLYLINE, polylineUpdater), Shape.POLYGON, polylineUpdater), _defineProperty(_defineProperty(_defineProperty(_ref, Shape.PATH, new PathUpdater()), Shape.HTML, new HTMLUpdater()), Shape.MESH, null);\n}();\nvar CSSPropertySyntaxFactory = function (_ref2) {\n var color = new CSSPropertyColor();\n var length = new CSSPropertyLengthOrPercentage();\n return _ref2 = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_ref2, PropertySyntax.PERCENTAGE, null), PropertySyntax.NUMBER, new CSSPropertyNumber()), PropertySyntax.ANGLE, new CSSPropertyAngle()), PropertySyntax.DEFINED_PATH, new CSSPropertyClipPath()), PropertySyntax.PAINT, color), PropertySyntax.COLOR, color), PropertySyntax.FILTER, new CSSPropertyFilter()), PropertySyntax.LENGTH, length), PropertySyntax.LENGTH_PERCENTAGE, length), PropertySyntax.LENGTH_PERCENTAGE_12, new CSSPropertyLengthOrPercentage12()), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_ref2, PropertySyntax.LENGTH_PERCENTAGE_14, new CSSPropertyLengthOrPercentage14()), PropertySyntax.COORDINATE, new CSSPropertyLengthOrPercentage()), PropertySyntax.OFFSET_DISTANCE, new CSSPropertyOffsetDistance()), PropertySyntax.OPACITY_VALUE, new CSSPropertyOpacity()), PropertySyntax.PATH, new CSSPropertyPath()), PropertySyntax.LIST_OF_POINTS, new CSSPropertyPoints()), PropertySyntax.SHADOW_BLUR, new CSSPropertyShadowBlur()), PropertySyntax.TEXT, new CSSPropertyText()), PropertySyntax.TEXT_TRANSFORM, new CSSPropertyTextTransform()), PropertySyntax.TRANSFORM, new CSSPropertyTransform()), _defineProperty(_defineProperty(_defineProperty(_ref2, PropertySyntax.TRANSFORM_ORIGIN, new CSSPropertyTransformOrigin()), PropertySyntax.Z_INDEX, new CSSPropertyZIndex()), PropertySyntax.MARKER, new CSSPropertyMarker());\n}();\nvar getGlobalThis = function getGlobalThis() {\n if (typeof globalThis !== 'undefined') return globalThis;\n if (typeof self !== 'undefined') return self;\n if (typeof window !== 'undefined') return window;\n // @ts-ignore\n if (typeof global !== 'undefined') return global;\n return {};\n // [!] Error: The 'this' keyword is equivalent to 'undefined' at the top level of an ES module, and has been rewritten\n // @see https://rollupjs.org/troubleshooting/#error-this-is-undefined\n // if (typeof this !== 'undefined') return this;\n};\n\n/**\n * Camera\n * `g-camera-api` will provide an advanced implementation\n */\nruntime.CameraContribution = Camera;\n\n/**\n * `g-web-animations-api` will provide an AnimationTimeline\n */\nruntime.AnimationTimeline = null;\nruntime.EasingFunction = null;\nruntime.offscreenCanvasCreator = new OffscreenCanvasCreator();\nruntime.sceneGraphSelector = new DefaultSceneGraphSelector();\nruntime.sceneGraphService = new DefaultSceneGraphService(runtime);\nruntime.textService = new TextService(runtime);\nruntime.geometryUpdaterFactory = geometryUpdaterFactory;\nruntime.CSSPropertySyntaxFactory = CSSPropertySyntaxFactory;\nruntime.styleValueRegistry = new DefaultStyleValueRegistry(runtime);\nruntime.layoutRegistry = null;\nruntime.globalThis = getGlobalThis();\nruntime.enableStyleSyntax = true;\nruntime.enableSizeAttenuation = false;\n\nvar entityCounter = 0;\nfunction resetEntityCounter() {\n entityCounter = 0;\n}\nvar insertedEvent = new MutationEvent(ElementEvent.INSERTED, null, '', '', '', 0, '', '');\nvar removedEvent = new MutationEvent(ElementEvent.REMOVED, null, '', '', '', 0, '', '');\nvar destroyEvent = new CustomEvent(ElementEvent.DESTROY);\n\n/**\n * Has following capabilities:\n * * Node insert/remove, eg. appendChild, removeChild, remove...\n * * Query eg. querySelector getElementById...\n * * Animation\n */\nvar Element = /*#__PURE__*/function (_Node) {\n function Element() {\n var _this;\n _classCallCheck(this, Element);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _callSuper(this, Element, [].concat(args));\n /**\n * Unique id.\n */\n _this.entity = entityCounter++;\n _this.renderable = {\n bounds: undefined,\n boundsDirty: true,\n renderBounds: undefined,\n renderBoundsDirty: true,\n dirtyRenderBounds: undefined,\n dirty: false\n };\n _this.cullable = {\n strategy: Strategy.Standard,\n visibilityPlaneMask: -1,\n visible: true,\n enable: true\n };\n _this.transformable = {\n dirtyFlag: false,\n localDirtyFlag: false,\n frozen: false,\n localPosition: [0, 0, 0],\n localRotation: [0, 0, 0, 1],\n localScale: [1, 1, 1],\n localTransform: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\n localSkew: [0, 0],\n position: [0, 0, 0],\n rotation: [0, 0, 0, 1],\n scaling: [1, 1, 1],\n worldTransform: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\n origin: [0, 0, 0]\n };\n _this.sortable = {\n dirty: false,\n sorted: undefined,\n renderOrder: 0,\n dirtyChildren: [],\n dirtyReason: undefined\n };\n _this.geometry = {\n contentBounds: undefined,\n renderBounds: undefined,\n dirty: true\n };\n _this.rBushNode = {\n aabb: undefined\n };\n /**\n * https://developer.mozilla.org/zh-CN/docs/Web/API/Element/namespaceURI\n */\n _this.namespaceURI = 'g';\n _this.scrollLeft = 0;\n _this.scrollTop = 0;\n /**\n * We don't support border now\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/clientTop\n */\n _this.clientTop = 0;\n _this.clientLeft = 0;\n /**\n * is destroyed or not\n */\n _this.destroyed = false;\n /**\n * compatible with `style`\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style\n */\n _this.style = {};\n _this.computedStyle = {};\n /**\n * Renderers will use these used values.\n */\n _this.parsedStyle = {\n // opacity: '',\n // fillOpacity: '',\n // strokeOpacity: '',\n // transformOrigin: '',\n // visibility: '',\n // pointerEvents: '',\n // lineWidth: '',\n // lineCap: '',\n // lineJoin: '',\n // increasedLineWidthForHitTesting: '',\n // fontSize: '',\n // fontFamily: '',\n // fontStyle: '',\n // fontWeight: '',\n // fontVariant: '',\n // textAlign: '',\n // textBaseline: '',\n // textTransform: '',\n };\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/attributes\n */\n _this.attributes = {};\n return _this;\n }\n _inherits(Element, _Node);\n return _createClass(Element, [{\n key: \"className\",\n get:\n /**\n * used with `getElementById()`\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/id\n */\n\n /**\n * used in `getElementsByClassName`\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n */\n function get() {\n // @ts-ignore\n return this.getAttribute('class') || '';\n },\n set: function set(className) {\n this.setAttribute('class', className);\n }\n\n /**\n * used in `getElementsByName`\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByName\n */\n }, {\n key: \"classList\",\n get:\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/classList\n */\n function get() {\n return this.className.split(' ').filter(function (c) {\n return c !== '';\n });\n }\n }, {\n key: \"tagName\",\n get: function get() {\n return this.nodeName;\n }\n }, {\n key: \"children\",\n get: function get() {\n return this.childNodes;\n }\n }, {\n key: \"childElementCount\",\n get: function get() {\n return this.childNodes.length;\n }\n }, {\n key: \"firstElementChild\",\n get: function get() {\n return this.firstChild;\n }\n }, {\n key: \"lastElementChild\",\n get: function get() {\n return this.lastChild;\n }\n }, {\n key: \"parentElement\",\n get: function get() {\n return this.parentNode;\n }\n }, {\n key: \"nextSibling\",\n get: function get() {\n if (this.parentNode) {\n var index = this.parentNode.childNodes.indexOf(this);\n return this.parentNode.childNodes[index + 1] || null;\n }\n return null;\n }\n }, {\n key: \"previousSibling\",\n get: function get() {\n if (this.parentNode) {\n var index = this.parentNode.childNodes.indexOf(this);\n return this.parentNode.childNodes[index - 1] || null;\n }\n return null;\n }\n }, {\n key: \"cloneNode\",\n value: function cloneNode(deep) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"appendChild\",\n value: function appendChild(child, index) {\n var _this$ownerDocument;\n if (child.destroyed) {\n throw new Error(ERROR_MSG_APPEND_DESTROYED_ELEMENT);\n }\n runtime.sceneGraphService.attach(child, this, index);\n if ((_this$ownerDocument = this.ownerDocument) !== null && _this$ownerDocument !== void 0 && _this$ownerDocument.defaultView) {\n if (!isInFragment(this) && child.nodeName === Shape.FRAGMENT) {\n this.ownerDocument.defaultView.mountFragment(child);\n } else {\n this.ownerDocument.defaultView.mountChildren(child);\n }\n }\n\n // @ts-ignore\n if (this.isMutationObserved) {\n insertedEvent.relatedNode = this;\n child.dispatchEvent(insertedEvent);\n }\n return child;\n }\n }, {\n key: \"insertBefore\",\n value: function insertBefore(newChild, refChild) {\n if (!refChild) {\n this.appendChild(newChild);\n } else {\n if (newChild.parentElement) {\n newChild.parentElement.removeChild(newChild);\n }\n var index = this.childNodes.indexOf(refChild);\n if (index === -1) {\n this.appendChild(newChild);\n } else {\n this.appendChild(newChild, index);\n }\n }\n return newChild;\n }\n }, {\n key: \"replaceChild\",\n value: function replaceChild(newChild, oldChild) {\n var index = this.childNodes.indexOf(oldChild);\n this.removeChild(oldChild);\n this.appendChild(newChild, index);\n return oldChild;\n }\n }, {\n key: \"removeChild\",\n value: function removeChild(child) {\n var _child$ownerDocument;\n // should emit on itself before detach\n removedEvent.relatedNode = this;\n child.dispatchEvent(removedEvent);\n if ((_child$ownerDocument = child.ownerDocument) !== null && _child$ownerDocument !== void 0 && _child$ownerDocument.defaultView) {\n child.ownerDocument.defaultView.unmountChildren(child);\n }\n\n // remove from scene graph\n runtime.sceneGraphService.detach(child);\n return child;\n }\n\n /**\n * Remove all children which can be appended to its original parent later again.\n */\n }, {\n key: \"removeChildren\",\n value: function removeChildren() {\n for (var i = this.childNodes.length - 1; i >= 0; i--) {\n var child = this.childNodes[i];\n this.removeChild(child);\n }\n }\n\n /**\n * Recursively destroy all children which can not be appended to its original parent later again.\n */\n }, {\n key: \"destroyChildren\",\n value: function destroyChildren() {\n for (var i = this.childNodes.length - 1; i >= 0; i--) {\n var child = this.childNodes[i];\n if (child.childNodes.length > 0) {\n child.destroyChildren();\n }\n child.destroy();\n }\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/matches\n */\n }, {\n key: \"matches\",\n value: function matches(selector) {\n return runtime.sceneGraphService.matches(selector, this);\n }\n }, {\n key: \"getElementById\",\n value: function getElementById(id) {\n return runtime.sceneGraphService.querySelector(\"#\".concat(id), this);\n }\n }, {\n key: \"getElementsByName\",\n value: function getElementsByName(name) {\n return runtime.sceneGraphService.querySelectorAll(\"[name=\\\"\".concat(name, \"\\\"]\"), this);\n }\n }, {\n key: \"getElementsByClassName\",\n value: function getElementsByClassName(className) {\n return runtime.sceneGraphService.querySelectorAll(\".\".concat(className), this);\n }\n }, {\n key: \"getElementsByTagName\",\n value: function getElementsByTagName(tagName) {\n return runtime.sceneGraphService.querySelectorAll(tagName, this);\n }\n }, {\n key: \"querySelector\",\n value: function querySelector(selectors) {\n return runtime.sceneGraphService.querySelector(selectors, this);\n }\n }, {\n key: \"querySelectorAll\",\n value: function querySelectorAll(selectors) {\n return runtime.sceneGraphService.querySelectorAll(selectors, this);\n }\n\n /**\n * should traverses the element and its parents (heading toward the document root)\n * until it finds a node that matches the specified CSS selector.\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/closest\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#polyfill\n */\n }, {\n key: \"closest\",\n value: function closest(selectors) {\n var el = this;\n do {\n if (runtime.sceneGraphService.matches(selectors, el)) return el;\n el = el.parentElement;\n } while (el !== null);\n return null;\n }\n\n /**\n * search in scene group, but should not include itself\n */\n }, {\n key: \"find\",\n value: function find(filter) {\n var _this2 = this;\n var target = null;\n this.forEach(function (object) {\n if (object !== _this2 && filter(object)) {\n target = object;\n return false;\n }\n return true;\n });\n return target;\n }\n }, {\n key: \"findAll\",\n value: function findAll(filter) {\n var _this3 = this;\n var objects = [];\n this.forEach(function (object) {\n if (object !== _this3 && filter(object)) {\n objects.push(object);\n }\n });\n return objects;\n }\n\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/after\n */\n }, {\n key: \"after\",\n value: function after() {\n var _this4 = this;\n if (this.parentNode) {\n var index = this.parentNode.childNodes.indexOf(this);\n for (var _len2 = arguments.length, nodes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n nodes[_key2] = arguments[_key2];\n }\n nodes.forEach(function (node, i) {\n var _this4$parentNode;\n return (_this4$parentNode = _this4.parentNode) === null || _this4$parentNode === void 0 ? void 0 : _this4$parentNode.appendChild(node, index + i + 1);\n });\n }\n }\n\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/before\n */\n }, {\n key: \"before\",\n value: function before() {\n if (this.parentNode) {\n var _ref;\n var index = this.parentNode.childNodes.indexOf(this);\n for (var _len3 = arguments.length, nodes = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n nodes[_key3] = arguments[_key3];\n }\n var first = nodes[0],\n rest = nodes.slice(1);\n this.parentNode.appendChild(first, index);\n (_ref = first).after.apply(_ref, _toConsumableArray(rest));\n }\n }\n\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/replaceWith\n */\n }, {\n key: \"replaceWith\",\n value: function replaceWith() {\n this.after.apply(this, arguments);\n this.remove();\n }\n\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/append\n */\n }, {\n key: \"append\",\n value: function append() {\n var _this5 = this;\n for (var _len4 = arguments.length, nodes = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n nodes[_key4] = arguments[_key4];\n }\n nodes.forEach(function (node) {\n return _this5.appendChild(node);\n });\n }\n\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/prepend\n */\n }, {\n key: \"prepend\",\n value: function prepend() {\n var _this6 = this;\n for (var _len5 = arguments.length, nodes = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n nodes[_key5] = arguments[_key5];\n }\n nodes.forEach(function (node, i) {\n return _this6.appendChild(node, i);\n });\n }\n\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/replaceChildren\n */\n }, {\n key: \"replaceChildren\",\n value: function replaceChildren() {\n while (this.childNodes.length && this.firstChild) {\n this.removeChild(this.firstChild);\n }\n this.append.apply(this, arguments);\n }\n\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/remove\n */\n }, {\n key: \"remove\",\n value: function remove() {\n if (this.parentNode) {\n return this.parentNode.removeChild(this);\n }\n return this;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n // fix https://github.com/antvis/G/issues/1813\n this.destroyChildren();\n\n // destroy itself before remove\n this.dispatchEvent(destroyEvent);\n\n // remove from scenegraph first\n this.remove();\n\n // remove event listeners\n this.emitter.removeAllListeners();\n this.destroyed = true;\n }\n }, {\n key: \"getGeometryBounds\",\n value: function getGeometryBounds() {\n return runtime.sceneGraphService.getGeometryBounds(this);\n }\n }, {\n key: \"getRenderBounds\",\n value: function getRenderBounds() {\n return runtime.sceneGraphService.getBounds(this, true);\n }\n\n /**\n * get bounds in world space, account for children\n */\n }, {\n key: \"getBounds\",\n value: function getBounds() {\n return runtime.sceneGraphService.getBounds(this);\n }\n\n /**\n * get bounds in local space, account for children\n */\n }, {\n key: \"getLocalBounds\",\n value: function getLocalBounds() {\n return runtime.sceneGraphService.getLocalBounds(this);\n }\n\n /**\n * account for context's bounds in client space,\n * but not accounting for children\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect\n */\n }, {\n key: \"getBoundingClientRect\",\n value: function getBoundingClientRect() {\n return runtime.sceneGraphService.getBoundingClientRect(this);\n }\n\n /**\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/getClientRects\n */\n }, {\n key: \"getClientRects\",\n value: function getClientRects() {\n return [this.getBoundingClientRect()];\n }\n }, {\n key: \"computedStyleMap\",\n value:\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/computedStyleMap\n * eg. circle.computedStyleMap().get('fill');\n */\n function computedStyleMap() {\n return new Map(Object.entries(this.computedStyle));\n }\n }, {\n key: \"getAttributeNames\",\n value:\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttributeNames\n */\n function getAttributeNames() {\n return Object.keys(this.attributes);\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttribute\n */\n }, {\n key: \"getAttribute\",\n value: function getAttribute(name) {\n // @see https://github.com/antvis/G/issues/1267\n if (typeof name === 'symbol') {\n return undefined;\n }\n var value = this.attributes[name];\n if (value === undefined) {\n // if the given attribute does not exist, the value returned will either be null or \"\"\n return value;\n }\n return value;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/hasAttribute\n */\n }, {\n key: \"hasAttribute\",\n value: function hasAttribute(qualifiedName) {\n return this.getAttributeNames().includes(qualifiedName);\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/hasAttributes\n */\n }, {\n key: \"hasAttributes\",\n value: function hasAttributes() {\n return !!this.getAttributeNames().length;\n }\n\n /**\n * should use removeAttribute() instead of setting the attribute value to null either directly or using setAttribute(). Many attributes will not behave as expected if you set them to null.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/removeAttribute\n */\n }, {\n key: \"removeAttribute\",\n value: function removeAttribute(attributeName) {\n this.setAttribute(attributeName, null);\n delete this.attributes[attributeName];\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttribute\n */\n }, {\n key: \"setAttribute\",\n value: function setAttribute(attributeName, value, force, memoize) {\n this.attributes[attributeName] = value;\n }\n }, {\n key: \"getAttributeNS\",\n value: function getAttributeNS(namespace, localName) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"getAttributeNode\",\n value: function getAttributeNode(qualifiedName) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"getAttributeNodeNS\",\n value: function getAttributeNodeNS(namespace, localName) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"hasAttributeNS\",\n value: function hasAttributeNS(namespace, localName) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"removeAttributeNS\",\n value: function removeAttributeNS(namespace, localName) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"removeAttributeNode\",\n value: function removeAttributeNode(attr) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"setAttributeNS\",\n value: function setAttributeNS(namespace, qualifiedName, value) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"setAttributeNode\",\n value: function setAttributeNode(attr) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"setAttributeNodeNS\",\n value: function setAttributeNodeNS(attr) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }, {\n key: \"toggleAttribute\",\n value: function toggleAttribute(qualifiedName, force) {\n throw new Error(ERROR_MSG_METHOD_NOT_IMPLEMENTED);\n }\n }]);\n}(Node);\n\nfunction isDisplayObject(value) {\n return !!(value !== null && value !== void 0 && value.nodeName);\n}\nvar Proxy = runtime.globalThis.Proxy ? runtime.globalThis.Proxy : function () {};\nvar attrModifiedEvent = new MutationEvent(ElementEvent.ATTR_MODIFIED, null, null, null, null, MutationEvent.MODIFICATION, null, null);\nvar $vec3 = vec3.create();\nvar $quat = quat$1.create();\n\n/**\n * prototype chains: DisplayObject -> Element -> Node -> EventTarget\n *\n * mixins: Animatable, Transformable, Visible\n * @see https://github.com/tannerntannern/ts-mixer/blob/master/README.md#mixing-generic-classes\n *\n * Provide abilities in scene graph, such as:\n * * transform `translate/rotate/scale`\n * * add/remove child\n * * visibility and z-index\n *\n * Those abilities are implemented with those components: `Transform/Sortable/Visible`.\n *\n * Emit following events:\n * * init\n * * destroy\n * * attributeChanged\n */\nvar DisplayObject = /*#__PURE__*/function (_Element) {\n function DisplayObject(config) {\n var _this;\n _classCallCheck(this, DisplayObject);\n _this = _callSuper(this, DisplayObject);\n\n // assign name, id to config\n // eg. group.get('name')\n _this.isCustomElement = false;\n _this.isMutationObserved = false;\n /**\n * push to active animations after calling `animate()`\n */\n _this.activeAnimations = [];\n _this.config = config;\n\n // init scene graph node\n _this.id = config.id || '';\n _this.name = config.name || '';\n if (config.className || config[\"class\"]) {\n _this.className = config.className || config[\"class\"];\n }\n _this.nodeName = config.type || Shape.GROUP;\n if (config.initialParsedStyle) {\n Object.assign(_this.parsedStyle, config.initialParsedStyle);\n }\n\n // start to process attributes\n _this.initAttributes(config.style);\n if (runtime.enableStyleSyntax) {\n _this.style = new Proxy(\n // @ts-ignore\n {\n // ...this.attributes,\n setProperty: function setProperty(propertyName, value\n // priority?: string,\n ) {\n _this.setAttribute(propertyName, value);\n },\n getPropertyValue: function getPropertyValue(propertyName) {\n return _this.getAttribute(propertyName);\n },\n removeProperty: function removeProperty(propertyName) {\n _this.removeAttribute(propertyName);\n },\n item: function item() {\n return '';\n }\n }, {\n get: function get(target, name) {\n if (target[name] !== undefined) {\n // if (name in target) {\n return target[name];\n }\n return _this.getAttribute(name);\n },\n set: function set(_, prop, value) {\n _this.setAttribute(prop, value);\n return true;\n }\n });\n }\n return _this;\n }\n _inherits(DisplayObject, _Element);\n return _createClass(DisplayObject, [{\n key: \"destroy\",\n value: function destroy() {\n _superPropGet(DisplayObject, \"destroy\", this, 3)([]);\n\n // stop all active animations\n this.getAnimations().forEach(function (animation) {\n animation.cancel();\n });\n }\n }, {\n key: \"cloneNode\",\n value: function cloneNode(deep, customCloneFunc) {\n var clonedStyle = _objectSpread({}, this.attributes);\n for (var attributeName in clonedStyle) {\n var attribute = clonedStyle[attributeName];\n\n // @see https://github.com/antvis/G/issues/1095\n if (isDisplayObject(attribute) &&\n // share the same clipPath if possible\n attributeName !== 'clipPath' && attributeName !== 'offsetPath' && attributeName !== 'textPath') {\n clonedStyle[attributeName] = attribute.cloneNode(deep);\n }\n // TODO: clone other type\n if (customCloneFunc) {\n clonedStyle[attributeName] = customCloneFunc(attributeName, attribute);\n }\n }\n var cloned = new this.constructor(_objectSpread(_objectSpread({}, this.config), {}, {\n style: clonedStyle\n }));\n\n // apply transform\n cloned.setLocalTransform(this.getLocalTransform());\n if (deep) {\n this.children.forEach(function (child) {\n // skip marker\n if (!child.style.isMarker) {\n var clonedChild = child.cloneNode(deep);\n cloned.appendChild(clonedChild);\n }\n });\n }\n return cloned;\n }\n }, {\n key: \"initAttributes\",\n value: function initAttributes() {\n var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var options = {\n forceUpdateGeometry: true\n };\n runtime.styleValueRegistry.processProperties(this, attributes, options);\n\n // redraw at next frame\n this.renderable.dirty = true;\n }\n }, {\n key: \"setAttribute\",\n value: function setAttribute(name, value) {\n var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var memoize = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n // ignore undefined value\n if (isUndefined(value)) {\n return;\n }\n if (force || value !== this.attributes[name]) {\n this.internalSetAttribute(name, value, {\n memoize: memoize\n });\n _superPropGet(DisplayObject, \"setAttribute\", this, 3)([name, value]);\n }\n }\n\n /**\n * called when attributes get changed or initialized\n */\n }, {\n key: \"internalSetAttribute\",\n value: function internalSetAttribute(name, value) {\n var parseOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var renderable = this.renderable;\n var oldValue = this.attributes[name];\n var oldParsedValue = this.parsedStyle[name];\n runtime.styleValueRegistry.processProperties(this, _defineProperty({}, name, value), parseOptions);\n\n // redraw at next frame\n renderable.dirty = true;\n var newParsedValue = this.parsedStyle[name];\n if (this.isConnected) {\n attrModifiedEvent.relatedNode = this;\n attrModifiedEvent.prevValue = oldValue;\n attrModifiedEvent.newValue = value;\n attrModifiedEvent.attrName = name;\n attrModifiedEvent.prevParsedValue = oldParsedValue;\n attrModifiedEvent.newParsedValue = newParsedValue;\n if (this.isMutationObserved) {\n this.dispatchEvent(attrModifiedEvent);\n } else {\n attrModifiedEvent.target = this;\n this.ownerDocument.defaultView.dispatchEvent(attrModifiedEvent, true);\n }\n }\n if (this.isCustomElement && this.isConnected || !this.isCustomElement) {\n var _attributeChangedCall, _ref;\n (_attributeChangedCall = (_ref = this).attributeChangedCallback) === null || _attributeChangedCall === void 0 || _attributeChangedCall.call(_ref, name, oldValue, value, oldParsedValue, newParsedValue);\n }\n }\n\n // #region transformable\n /**\n * returns different values than getBoundingClientRect(), as the latter returns value relative to the viewport\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SVGGraphicsElement/getBBox\n *\n * FIXME: It is worth noting that getBBox responds to original untransformed values of a drawn object.\n * @see https://www.w3.org/Graphics/SVG/IG/resources/svgprimer.html#getBBox\n */\n }, {\n key: \"getBBox\",\n value: function getBBox() {\n var aabb = this.getBounds();\n var _aabb$getMin = aabb.getMin(),\n _aabb$getMin2 = _slicedToArray(_aabb$getMin, 2),\n left = _aabb$getMin2[0],\n top = _aabb$getMin2[1];\n var _aabb$getMax = aabb.getMax(),\n _aabb$getMax2 = _slicedToArray(_aabb$getMax, 2),\n right = _aabb$getMax2[0],\n bottom = _aabb$getMax2[1];\n return new Rectangle(left, top, right - left, bottom - top);\n }\n }, {\n key: \"setOrigin\",\n value: function setOrigin(position) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n runtime.sceneGraphService.setOrigin(this, createVec3(position, y, z, false));\n return this;\n }\n }, {\n key: \"getOrigin\",\n value: function getOrigin() {\n return runtime.sceneGraphService.getOrigin(this);\n }\n\n /**\n * set position in world space\n */\n }, {\n key: \"setPosition\",\n value: function setPosition(position) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n runtime.sceneGraphService.setPosition(this, createVec3(position, y, z, false));\n return this;\n }\n\n /**\n * set position in local space\n */\n }, {\n key: \"setLocalPosition\",\n value: function setLocalPosition(position) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n runtime.sceneGraphService.setLocalPosition(this, createVec3(position, y, z, false));\n return this;\n }\n\n /**\n * translate in world space\n */\n }, {\n key: \"translate\",\n value: function translate(position) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n runtime.sceneGraphService.translate(this, createVec3(position, y, z, false));\n return this;\n }\n\n /**\n * translate in local space\n */\n }, {\n key: \"translateLocal\",\n value: function translateLocal(position) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n runtime.sceneGraphService.translateLocal(this, createVec3(position, y, z, false));\n return this;\n }\n }, {\n key: \"getPosition\",\n value: function getPosition() {\n return runtime.sceneGraphService.getPosition(this);\n }\n }, {\n key: \"getLocalPosition\",\n value: function getLocalPosition() {\n return runtime.sceneGraphService.getLocalPosition(this);\n }\n\n /**\n * compatible with G 3.0\n *\n * scaling in local space\n * scale(10) = scale(10, 10, 10)\n *\n * we can't set scale in world space\n */\n }, {\n key: \"scale\",\n value: function scale(scaling, y, z) {\n return this.scaleLocal(scaling, y, z);\n }\n }, {\n key: \"scaleLocal\",\n value: function scaleLocal(scaling, y, z) {\n if (typeof scaling === 'number') {\n y = y || scaling;\n z = z || scaling;\n scaling = createVec3(scaling, y, z, false);\n }\n runtime.sceneGraphService.scaleLocal(this, scaling);\n return this;\n }\n\n /**\n * set scaling in local space\n */\n }, {\n key: \"setLocalScale\",\n value: function setLocalScale(scaling, y, z) {\n if (typeof scaling === 'number') {\n y = y || scaling;\n z = z || scaling;\n scaling = createVec3(scaling, y, z, false);\n }\n runtime.sceneGraphService.setLocalScale(this, scaling);\n return this;\n }\n\n /**\n * get scaling in local space\n */\n }, {\n key: \"getLocalScale\",\n value: function getLocalScale() {\n return runtime.sceneGraphService.getLocalScale(this);\n }\n\n /**\n * get scaling in world space\n */\n }, {\n key: \"getScale\",\n value: function getScale() {\n return runtime.sceneGraphService.getScale(this);\n }\n\n /**\n * only return degrees of Z axis in world space\n */\n }, {\n key: \"getEulerAngles\",\n value: function getEulerAngles() {\n var _getEuler = getEuler($vec3, runtime.sceneGraphService.getWorldTransform(this)),\n _getEuler2 = _slicedToArray(_getEuler, 3),\n ez = _getEuler2[2];\n return rad2deg(ez);\n }\n\n /**\n * only return degrees of Z axis in local space\n */\n }, {\n key: \"getLocalEulerAngles\",\n value: function getLocalEulerAngles() {\n var _getEuler3 = getEuler($vec3, runtime.sceneGraphService.getLocalRotation(this)),\n _getEuler4 = _slicedToArray(_getEuler3, 3),\n ez = _getEuler4[2];\n return rad2deg(ez);\n }\n\n /**\n * set euler angles(degrees) in world space\n */\n }, {\n key: \"setEulerAngles\",\n value: function setEulerAngles(z) {\n runtime.sceneGraphService.setEulerAngles(this, 0, 0, z);\n return this;\n }\n\n /**\n * set euler angles(degrees) in local space\n */\n }, {\n key: \"setLocalEulerAngles\",\n value: function setLocalEulerAngles(z) {\n runtime.sceneGraphService.setLocalEulerAngles(this, 0, 0, z);\n return this;\n }\n }, {\n key: \"rotateLocal\",\n value: function rotateLocal(x, y, z) {\n if (isNil(y) && isNil(z)) {\n runtime.sceneGraphService.rotateLocal(this, 0, 0, x);\n } else {\n runtime.sceneGraphService.rotateLocal(this, x, y, z);\n }\n return this;\n }\n }, {\n key: \"rotate\",\n value: function rotate(x, y, z) {\n if (isNil(y) && isNil(z)) {\n runtime.sceneGraphService.rotate(this, 0, 0, x);\n } else {\n runtime.sceneGraphService.rotate(this, x, y, z);\n }\n return this;\n }\n }, {\n key: \"setRotation\",\n value: function setRotation(rotation, y, z, w) {\n runtime.sceneGraphService.setRotation(this, rotation, y, z, w);\n return this;\n }\n }, {\n key: \"setLocalRotation\",\n value: function setLocalRotation(rotation, y, z, w) {\n runtime.sceneGraphService.setLocalRotation(this, rotation, y, z, w);\n return this;\n }\n }, {\n key: \"setLocalSkew\",\n value: function setLocalSkew(skew, y) {\n runtime.sceneGraphService.setLocalSkew(this, skew, y);\n return this;\n }\n }, {\n key: \"getRotation\",\n value: function getRotation() {\n return runtime.sceneGraphService.getRotation(this);\n }\n }, {\n key: \"getLocalRotation\",\n value: function getLocalRotation() {\n return runtime.sceneGraphService.getLocalRotation(this);\n }\n }, {\n key: \"getLocalSkew\",\n value: function getLocalSkew() {\n return runtime.sceneGraphService.getLocalSkew(this);\n }\n }, {\n key: \"getLocalTransform\",\n value: function getLocalTransform() {\n return runtime.sceneGraphService.getLocalTransform(this);\n }\n }, {\n key: \"getWorldTransform\",\n value: function getWorldTransform() {\n return runtime.sceneGraphService.getWorldTransform(this);\n }\n }, {\n key: \"setLocalTransform\",\n value: function setLocalTransform(transform) {\n runtime.sceneGraphService.setLocalTransform(this, transform);\n return this;\n }\n }, {\n key: \"resetLocalTransform\",\n value: function resetLocalTransform() {\n runtime.sceneGraphService.resetLocalTransform(this);\n }\n // #endregion transformable\n\n // #region animatable\n /**\n * returns an array of all Animation objects affecting this element\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/getAnimations\n */\n }, {\n key: \"getAnimations\",\n value: function getAnimations() {\n return this.activeAnimations;\n }\n /**\n * create an animation with WAAPI\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/animate\n */\n }, {\n key: \"animate\",\n value: function animate(keyframes, options) {\n var _this$ownerDocument;\n var timeline = (_this$ownerDocument = this.ownerDocument) === null || _this$ownerDocument === void 0 ? void 0 : _this$ownerDocument.timeline;\n if (timeline) {\n return timeline.play(this, keyframes, options);\n }\n return null;\n }\n // #endregion animatable\n\n // #region visible\n /**\n * shortcut for Used value of `visibility`\n */\n }, {\n key: \"isVisible\",\n value: function isVisible() {\n var _this$parsedStyle;\n return ((_this$parsedStyle = this.parsedStyle) === null || _this$parsedStyle === void 0 ? void 0 : _this$parsedStyle.visibility) !== 'hidden';\n }\n }, {\n key: \"interactive\",\n get: function get() {\n return this.isInteractive();\n },\n set: function set(b) {\n this.style.pointerEvents = b ? 'auto' : 'none';\n }\n }, {\n key: \"isInteractive\",\n value: function isInteractive() {\n var _this$parsedStyle2;\n return ((_this$parsedStyle2 = this.parsedStyle) === null || _this$parsedStyle2 === void 0 ? void 0 : _this$parsedStyle2.pointerEvents) !== 'none';\n }\n }, {\n key: \"isCulled\",\n value: function isCulled() {\n return !!(this.cullable && this.cullable.enable && !this.cullable.visible);\n }\n\n /**\n * bring to front in current group\n */\n }, {\n key: \"toFront\",\n value: function toFront() {\n if (this.parentNode) {\n this.style.zIndex = Math.max.apply(Math, _toConsumableArray(this.parentNode.children.map(function (child) {\n return Number(child.style.zIndex);\n }))) + 1;\n }\n return this;\n }\n\n /**\n * send to back in current group\n */\n }, {\n key: \"toBack\",\n value: function toBack() {\n if (this.parentNode) {\n this.style.zIndex = Math.min.apply(Math, _toConsumableArray(this.parentNode.children.map(function (child) {\n return Number(child.style.zIndex);\n }))) - 1;\n }\n return this;\n }\n // #endregion visible\n\n // #region deprecated\n\n /**\n * compatible with G 3.0\n * @alias object.config\n * @deprecated\n */\n }, {\n key: \"getConfig\",\n value: function getConfig() {\n return this.config;\n }\n\n /**\n * @alias style\n * @example\n * circle.style.r = 10;\n * const r = circle.style;\n * @deprecated\n */\n }, {\n key: \"attr\",\n value: function attr() {\n var _this2 = this;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n var name = args[0],\n value = args[1];\n if (!name) {\n return this.attributes;\n }\n if (isObject(name)) {\n Object.keys(name).forEach(function (key) {\n _this2.setAttribute(key, name[key]);\n });\n return this;\n }\n if (args.length === 2) {\n this.setAttribute(name, value);\n return this;\n }\n return this.attributes[name];\n }\n\n /**\n * return 3x3 matrix in world space\n * @deprecated\n */\n }, {\n key: \"getMatrix\",\n value: function getMatrix(transformMat4) {\n var transform = transformMat4 || this.getWorldTransform();\n var _mat4$getTranslation = mat4.getTranslation($vec3, transform),\n _mat4$getTranslation2 = _slicedToArray(_mat4$getTranslation, 2),\n tx = _mat4$getTranslation2[0],\n ty = _mat4$getTranslation2[1];\n var _mat4$getScaling = mat4.getScaling($vec3, transform),\n _mat4$getScaling2 = _slicedToArray(_mat4$getScaling, 2),\n sx = _mat4$getScaling2[0],\n sy = _mat4$getScaling2[1];\n var rotation = mat4.getRotation($quat, transform);\n var _getEuler5 = getEuler($vec3, rotation),\n _getEuler6 = _slicedToArray(_getEuler5, 3),\n eux = _getEuler6[0],\n euz = _getEuler6[2];\n // gimbal lock at 90 degrees\n return fromRotationTranslationScale(eux || euz, tx, ty, sx, sy);\n }\n\n /**\n * return 3x3 matrix in local space\n * @deprecated\n */\n }, {\n key: \"getLocalMatrix\",\n value: function getLocalMatrix() {\n return this.getMatrix(this.getLocalTransform());\n }\n\n /**\n * set 3x3 matrix in world space\n * @deprecated\n */\n }, {\n key: \"setMatrix\",\n value: function setMatrix(mat) {\n var _decompose = decompose(mat),\n _decompose2 = _slicedToArray(_decompose, 5),\n tx = _decompose2[0],\n ty = _decompose2[1],\n scalingX = _decompose2[2],\n scalingY = _decompose2[3],\n angle = _decompose2[4];\n this.setEulerAngles(angle).setPosition(tx, ty).setLocalScale(scalingX, scalingY);\n }\n\n /**\n * set 3x3 matrix in local space\n * @deprecated\n */\n }, {\n key: \"setLocalMatrix\",\n value: function setLocalMatrix(mat) {\n var _decompose3 = decompose(mat),\n _decompose4 = _slicedToArray(_decompose3, 5),\n tx = _decompose4[0],\n ty = _decompose4[1],\n scalingX = _decompose4[2],\n scalingY = _decompose4[3],\n angle = _decompose4[4];\n this.setLocalEulerAngles(angle).setLocalPosition(tx, ty).setLocalScale(scalingX, scalingY);\n }\n\n /**\n * Use `visibility: visible` instead.\n * @deprecated\n */\n }, {\n key: \"show\",\n value: function show() {\n this.forEach(function (object) {\n object.style.visibility = 'visible';\n });\n }\n\n /**\n * Use `visibility: hidden` instead.\n * @deprecated\n */\n }, {\n key: \"hide\",\n value: function hide() {\n this.forEach(function (object) {\n object.style.visibility = 'hidden';\n });\n }\n\n /**\n * Use `childElementCount` instead.\n * @deprecated\n */\n }, {\n key: \"getCount\",\n value: function getCount() {\n return this.childElementCount;\n }\n\n /**\n * Use `parentElement` instead.\n * @deprecated\n */\n }, {\n key: \"getParent\",\n value: function getParent() {\n return this.parentElement;\n }\n\n /**\n * Use `children` instead.\n * @deprecated\n */\n }, {\n key: \"getChildren\",\n value: function getChildren() {\n return this.children;\n }\n\n /**\n * Use `firstElementChild` instead.\n * @deprecated\n */\n }, {\n key: \"getFirst\",\n value: function getFirst() {\n return this.firstElementChild;\n }\n\n /**\n * Use `lastElementChild` instead.\n * @deprecated\n */\n }, {\n key: \"getLast\",\n value: function getLast() {\n return this.lastElementChild;\n }\n\n /**\n * Use `this.children[index]` instead.\n * @deprecated\n */\n }, {\n key: \"getChildByIndex\",\n value: function getChildByIndex(index) {\n return this.children[index] || null;\n }\n\n /**\n * Use `appendChild` instead.\n * @deprecated\n */\n }, {\n key: \"add\",\n value: function add(child, index) {\n return this.appendChild(child, index);\n }\n\n /**\n * @deprecated\n */\n }, {\n key: \"set\",\n value: function set(name, value) {\n // @ts-ignore\n this.config[name] = value;\n }\n\n /**\n * @deprecated\n */\n }, {\n key: \"get\",\n value: function get(name) {\n return this.config[name];\n }\n\n /**\n * Use `setPosition` instead.\n * @deprecated\n */\n }, {\n key: \"moveTo\",\n value: function moveTo(position) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n this.setPosition(position, y, z);\n return this;\n }\n\n /**\n * Use `setPosition` instead.\n * @deprecated\n */\n }, {\n key: \"move\",\n value: function move(position) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n this.setPosition(position, y, z);\n return this;\n }\n\n /**\n * Use `this.style.zIndex` instead.\n * @deprecated\n */\n }, {\n key: \"setZIndex\",\n value: function setZIndex(zIndex) {\n this.style.zIndex = zIndex;\n return this;\n }\n\n // #endregion deprecated\n }]);\n}(Element);\nDisplayObject.PARSED_STYLE_LIST = new Set(['class', 'className', 'clipPath', 'cursor', 'display', 'draggable', 'droppable', 'fill', 'fillOpacity', 'fillRule', 'filter', 'increasedLineWidthForHitTesting', 'lineCap', 'lineDash', 'lineDashOffset', 'lineJoin', 'lineWidth', 'miterLimit', 'hitArea', 'offsetDistance', 'offsetPath', 'offsetX', 'offsetY', 'opacity', 'pointerEvents', 'shadowColor', 'shadowType', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY', 'stroke', 'strokeOpacity', 'strokeWidth', 'strokeLinecap', 'strokeLineJoin', 'strokeDasharray', 'strokeDashoffset', 'transform', 'transformOrigin', 'textTransform', 'visibility', 'zIndex']);\n\nvar Circle = /*#__PURE__*/function (_DisplayObject) {\n function Circle() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _classCallCheck(this, Circle);\n return _callSuper(this, Circle, [_objectSpread({\n type: Shape.CIRCLE\n }, options)]);\n }\n _inherits(Circle, _DisplayObject);\n return _createClass(Circle);\n}(DisplayObject);\nCircle.PARSED_STYLE_LIST = new Set([].concat(_toConsumableArray(DisplayObject.PARSED_STYLE_LIST), ['cx', 'cy', 'cz', 'r', 'isBillboard', 'isSizeAttenuation']));\n\nvar _excluded$6 = [\"style\"];\n/**\n * shadow root\n * @see https://yuque.antfin-inc.com/antv/czqvg5/pgqipg\n */\nvar CustomElement = /*#__PURE__*/function (_DisplayObject) {\n // private shadowNodes: DisplayObject[] = [];\n\n function CustomElement() {\n var _this;\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n style = _ref.style,\n rest = _objectWithoutProperties(_ref, _excluded$6);\n _classCallCheck(this, CustomElement);\n _this = _callSuper(this, CustomElement, [_objectSpread({\n style: style\n }, rest)]);\n _this.isCustomElement = true;\n return _this;\n }\n\n /**\n * fired after element insert into DOM tree\n */\n _inherits(CustomElement, _DisplayObject);\n return _createClass(CustomElement);\n}(DisplayObject);\nCustomElement.PARSED_STYLE_LIST = new Set(['class', 'className', 'clipPath', 'cursor', 'draggable', 'droppable', 'opacity', 'pointerEvents', 'transform', 'transformOrigin', 'zIndex', 'visibility']);\n\nvar Ellipse = /*#__PURE__*/function (_DisplayObject) {\n function Ellipse() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _classCallCheck(this, Ellipse);\n return _callSuper(this, Ellipse, [_objectSpread({\n type: Shape.ELLIPSE\n }, options)]);\n }\n _inherits(Ellipse, _DisplayObject);\n return _createClass(Ellipse);\n}(DisplayObject);\nEllipse.PARSED_STYLE_LIST = new Set([].concat(_toConsumableArray(DisplayObject.PARSED_STYLE_LIST), ['cx', 'cy', 'cz', 'rx', 'ry', 'isBillboard', 'isSizeAttenuation']));\n\n/**\n * 节点片段,用于包裹多个节点并批量操作\n *\n * 向 Fragment 或者根节点为 Fragment 的节点添加子节点时,不会触发渲染和事件。\n *\n * 当 Fragment 被挂载到 Canvas 中的节点时,其子节点会一次性被渲染,并触发合并事件。\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment\n */\nvar Fragment = /*#__PURE__*/function (_DisplayObject) {\n function Fragment() {\n _classCallCheck(this, Fragment);\n return _callSuper(this, Fragment, [{\n type: Shape.FRAGMENT\n }]);\n }\n _inherits(Fragment, _DisplayObject);\n return _createClass(Fragment);\n}(DisplayObject);\nFragment.PARSED_STYLE_LIST = new Set(['class', 'className']);\n\n/**\n * its attributes are inherited by its children.\n * @see https://developer.mozilla.org/zh-CN/docs/Web/SVG/Element/g\n * \n * @example\n * \n \n \n \n */\nvar Group = /*#__PURE__*/function (_DisplayObject) {\n function Group() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _classCallCheck(this, Group);\n return _callSuper(this, Group, [_objectSpread({\n type: Shape.GROUP\n }, options)]);\n }\n _inherits(Group, _DisplayObject);\n return _createClass(Group);\n}(DisplayObject);\nGroup.PARSED_STYLE_LIST = new Set(['class', 'className', 'clipPath', 'cursor', 'draggable', 'droppable', 'opacity', 'pointerEvents', 'transform', 'transformOrigin', 'zIndex', 'visibility']);\n\nvar _excluded$5 = [\"style\"];\n/**\n * HTML container\n * @see https://github.com/pmndrs/drei#html\n */\nvar HTML = /*#__PURE__*/function (_DisplayObject) {\n function HTML() {\n var _this;\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n style = _ref.style,\n rest = _objectWithoutProperties(_ref, _excluded$5);\n _classCallCheck(this, HTML);\n _this = _callSuper(this, HTML, [_objectSpread({\n type: Shape.HTML,\n style: style\n }, rest)]);\n _this.cullable.enable = false;\n return _this;\n }\n\n /**\n * return wrapper HTMLElement\n * *
    in g-webgl/canvas\n * * in g-svg\n */\n _inherits(HTML, _DisplayObject);\n return _createClass(HTML, [{\n key: \"getDomElement\",\n value: function getDomElement() {\n return this.parsedStyle.$el;\n }\n\n /**\n * override with $el.getBoundingClientRect\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/getBoundingClientRect\n *\n * ! The calculation logic of the html element should be consistent with that of the canvas element\n */\n // getBoundingClientRect(): Rectangle {\n // if (this.parsedStyle.$el) {\n // return this.parsedStyle.$el.getBoundingClientRect();\n // } else {\n // const { x, y, width, height } = this.parsedStyle;\n // return new Rectangle(x, y, width, height);\n // }\n // }\n }, {\n key: \"getClientRects\",\n value: function getClientRects() {\n return [this.getBoundingClientRect()];\n }\n\n // getBounds() {\n // const clientRect = this.getBoundingClientRect();\n // // calc context's offset\n // // @ts-ignore\n // const canvasRect = this.ownerDocument?.defaultView\n // ?.getContextService()\n // .getBoundingClientRect();\n\n // const aabb = new AABB();\n // const minX = clientRect.left - (canvasRect?.left || 0);\n // const minY = clientRect.top - (canvasRect?.top || 0);\n // aabb.setMinMax(\n // [minX, minY, 0],\n // [minX + clientRect.width, minY + clientRect.height, 0],\n // );\n // return aabb;\n // }\n }, {\n key: \"getLocalBounds\",\n value: function getLocalBounds() {\n if (this.parentNode) {\n var parentInvert = mat4.invert(mat4.create(), this.parentNode.getWorldTransform());\n var bounds = this.getBounds();\n if (!AABB.isEmpty(bounds)) {\n var localBounds = new AABB();\n localBounds.setFromTransformedAABB(bounds, parentInvert);\n return localBounds;\n }\n }\n return this.getBounds();\n }\n }]);\n}(DisplayObject);\nHTML.PARSED_STYLE_LIST = new Set([].concat(_toConsumableArray(DisplayObject.PARSED_STYLE_LIST), ['x', 'y', '$el', 'innerHTML', 'width', 'height']));\n\nvar Image = /*#__PURE__*/function (_DisplayObject) {\n function Image() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _classCallCheck(this, Image);\n return _callSuper(this, Image, [_objectSpread({\n type: Shape.IMAGE\n }, options)]);\n }\n _inherits(Image, _DisplayObject);\n return _createClass(Image);\n}(DisplayObject);\nImage.PARSED_STYLE_LIST = new Set([].concat(_toConsumableArray(DisplayObject.PARSED_STYLE_LIST), ['x', 'y', 'z', 'src', 'width', 'height', 'isBillboard', 'billboardRotation', 'isSizeAttenuation', 'keepAspectRatio']));\n\nvar _excluded$4 = [\"style\"];\n/**\n * Create a line connecting two points.\n * @see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/line\n *\n * Also support for using marker.\n */\nvar Line = /*#__PURE__*/function (_DisplayObject) {\n function Line() {\n var _this;\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n style = _ref.style,\n rest = _objectWithoutProperties(_ref, _excluded$4);\n _classCallCheck(this, Line);\n _this = _callSuper(this, Line, [_objectSpread({\n type: Shape.LINE,\n style: _objectSpread({\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n z1: 0,\n z2: 0\n }, style)\n }, rest)]);\n _this.markerStartAngle = 0;\n _this.markerEndAngle = 0;\n var _this$parsedStyle = _this.parsedStyle,\n markerStart = _this$parsedStyle.markerStart,\n markerEnd = _this$parsedStyle.markerEnd;\n if (markerStart && isDisplayObject(markerStart)) {\n _this.markerStartAngle = markerStart.getLocalEulerAngles();\n _this.appendChild(markerStart);\n }\n if (markerEnd && isDisplayObject(markerEnd)) {\n _this.markerEndAngle = markerEnd.getLocalEulerAngles();\n _this.appendChild(markerEnd);\n }\n _this.transformMarker(true);\n _this.transformMarker(false);\n return _this;\n }\n _inherits(Line, _DisplayObject);\n return _createClass(Line, [{\n key: \"attributeChangedCallback\",\n value: function attributeChangedCallback(attrName, oldValue, newValue, prevParsedValue, newParsedValue) {\n if (attrName === 'x1' || attrName === 'y1' || attrName === 'x2' || attrName === 'y2' || attrName === 'markerStartOffset' || attrName === 'markerEndOffset') {\n this.transformMarker(true);\n this.transformMarker(false);\n } else if (attrName === 'markerStart') {\n if (prevParsedValue && isDisplayObject(prevParsedValue)) {\n this.markerStartAngle = 0;\n prevParsedValue.remove();\n }\n\n // CSSKeyword 'unset'\n if (newParsedValue && isDisplayObject(newParsedValue)) {\n this.markerStartAngle = newParsedValue.getLocalEulerAngles();\n this.appendChild(newParsedValue);\n this.transformMarker(true);\n }\n } else if (attrName === 'markerEnd') {\n if (prevParsedValue && isDisplayObject(prevParsedValue)) {\n this.markerEndAngle = 0;\n prevParsedValue.remove();\n }\n if (newParsedValue && isDisplayObject(newParsedValue)) {\n this.markerEndAngle = newParsedValue.getLocalEulerAngles();\n this.appendChild(newParsedValue);\n this.transformMarker(false);\n }\n }\n }\n }, {\n key: \"transformMarker\",\n value: function transformMarker(isStart) {\n var _this$parsedStyle2 = this.parsedStyle,\n markerStart = _this$parsedStyle2.markerStart,\n markerEnd = _this$parsedStyle2.markerEnd,\n markerStartOffset = _this$parsedStyle2.markerStartOffset,\n markerEndOffset = _this$parsedStyle2.markerEndOffset,\n x1 = _this$parsedStyle2.x1,\n x2 = _this$parsedStyle2.x2,\n y1 = _this$parsedStyle2.y1,\n y2 = _this$parsedStyle2.y2;\n var marker = isStart ? markerStart : markerEnd;\n if (!marker || !isDisplayObject(marker)) {\n return;\n }\n var rad = 0;\n var x;\n var y;\n var ox;\n var oy;\n var offset;\n var originalAngle;\n if (isStart) {\n ox = x1;\n oy = y1;\n x = x2 - x1;\n y = y2 - y1;\n offset = markerStartOffset || 0;\n originalAngle = this.markerStartAngle;\n } else {\n ox = x2;\n oy = y2;\n x = x1 - x2;\n y = y1 - y2;\n offset = markerEndOffset || 0;\n originalAngle = this.markerEndAngle;\n }\n rad = Math.atan2(y, x);\n\n // account for markerOffset\n marker.setLocalEulerAngles(rad * 180 / Math.PI + originalAngle);\n marker.setLocalPosition(ox + Math.cos(rad) * offset, oy + Math.sin(rad) * offset);\n }\n }, {\n key: \"getPoint\",\n value: function getPoint(ratio) {\n var inWorldSpace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n // TODO: account for z1/z2 in 3D line\n var _this$parsedStyle3 = this.parsedStyle,\n x1 = _this$parsedStyle3.x1,\n y1 = _this$parsedStyle3.y1,\n x2 = _this$parsedStyle3.x2,\n y2 = _this$parsedStyle3.y2;\n var _linePointAt = linePointAt(x1, y1, x2, y2, ratio),\n x = _linePointAt.x,\n y = _linePointAt.y;\n var transformed = vec3.transformMat4(vec3.create(), vec3.fromValues(x, y, 0), inWorldSpace ? this.getWorldTransform() : this.getLocalTransform());\n\n // apply local transformation\n return new Point(transformed[0], transformed[1]);\n }\n }, {\n key: \"getPointAtLength\",\n value: function getPointAtLength(distance) {\n var inWorldSpace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n return this.getPoint(distance / this.getTotalLength(), inWorldSpace);\n }\n }, {\n key: \"getTotalLength\",\n value: function getTotalLength() {\n // TODO: account for z1/z2 in 3D line\n var _this$parsedStyle4 = this.parsedStyle,\n x1 = _this$parsedStyle4.x1,\n y1 = _this$parsedStyle4.y1,\n x2 = _this$parsedStyle4.x2,\n y2 = _this$parsedStyle4.y2;\n return lineLength(x1, y1, x2, y2);\n }\n }]);\n}(DisplayObject);\nLine.PARSED_STYLE_LIST = new Set([].concat(_toConsumableArray(DisplayObject.PARSED_STYLE_LIST), ['x1', 'y1', 'x2', 'y2', 'z1', 'z2', 'isBillboard', 'isSizeAttenuation', 'markerStart', 'markerEnd', 'markerStartOffset', 'markerEndOffset']));\n\nvar _excluded$3 = [\"style\"];\nvar Path = /*#__PURE__*/function (_DisplayObject) {\n function Path() {\n var _this;\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n style = _ref.style,\n rest = _objectWithoutProperties(_ref, _excluded$3);\n _classCallCheck(this, Path);\n _this = _callSuper(this, Path, [_objectSpread({\n type: Shape.PATH,\n style: style,\n initialParsedStyle: {\n miterLimit: 4,\n d: _objectSpread({}, EMPTY_PARSED_PATH)\n }\n }, rest)]);\n _this.markerStartAngle = 0;\n _this.markerEndAngle = 0;\n /**\n * markers placed at the mid\n */\n _this.markerMidList = [];\n var _this$parsedStyle = _this.parsedStyle,\n markerStart = _this$parsedStyle.markerStart,\n markerEnd = _this$parsedStyle.markerEnd,\n markerMid = _this$parsedStyle.markerMid;\n if (markerStart && isDisplayObject(markerStart)) {\n _this.markerStartAngle = markerStart.getLocalEulerAngles();\n _this.appendChild(markerStart);\n }\n if (markerMid && isDisplayObject(markerMid)) {\n _this.placeMarkerMid(markerMid);\n }\n if (markerEnd && isDisplayObject(markerEnd)) {\n _this.markerEndAngle = markerEnd.getLocalEulerAngles();\n _this.appendChild(markerEnd);\n }\n _this.transformMarker(true);\n _this.transformMarker(false);\n return _this;\n }\n _inherits(Path, _DisplayObject);\n return _createClass(Path, [{\n key: \"attributeChangedCallback\",\n value: function attributeChangedCallback(attrName, oldValue, newValue, prevParsedValue, newParsedValue) {\n if (attrName === 'd') {\n // recalc markers\n this.transformMarker(true);\n this.transformMarker(false);\n this.placeMarkerMid(this.parsedStyle.markerMid);\n } else if (attrName === 'markerStartOffset' || attrName === 'markerEndOffset') {\n this.transformMarker(true);\n this.transformMarker(false);\n } else if (attrName === 'markerStart') {\n if (prevParsedValue && isDisplayObject(prevParsedValue)) {\n this.markerStartAngle = 0;\n prevParsedValue.remove();\n }\n\n // CSSKeyword 'unset'\n if (newParsedValue && isDisplayObject(newParsedValue)) {\n this.markerStartAngle = newParsedValue.getLocalEulerAngles();\n this.appendChild(newParsedValue);\n this.transformMarker(true);\n }\n } else if (attrName === 'markerEnd') {\n if (prevParsedValue && isDisplayObject(prevParsedValue)) {\n this.markerEndAngle = 0;\n prevParsedValue.remove();\n }\n if (newParsedValue && isDisplayObject(newParsedValue)) {\n this.markerEndAngle = newParsedValue.getLocalEulerAngles();\n this.appendChild(newParsedValue);\n this.transformMarker(false);\n }\n } else if (attrName === 'markerMid') {\n this.placeMarkerMid(newParsedValue);\n }\n }\n }, {\n key: \"transformMarker\",\n value: function transformMarker(isStart) {\n var _this$parsedStyle2 = this.parsedStyle,\n markerStart = _this$parsedStyle2.markerStart,\n markerEnd = _this$parsedStyle2.markerEnd,\n markerStartOffset = _this$parsedStyle2.markerStartOffset,\n markerEndOffset = _this$parsedStyle2.markerEndOffset;\n var marker = isStart ? markerStart : markerEnd;\n if (!marker || !isDisplayObject(marker)) {\n return;\n }\n var rad = 0;\n var x;\n var y;\n var ox;\n var oy;\n var offset;\n var originalAngle;\n if (isStart) {\n var _this$getStartTangent = this.getStartTangent(),\n _this$getStartTangent2 = _slicedToArray(_this$getStartTangent, 2),\n p1 = _this$getStartTangent2[0],\n p2 = _this$getStartTangent2[1];\n ox = p2[0];\n oy = p2[1];\n x = p1[0] - p2[0];\n y = p1[1] - p2[1];\n offset = markerStartOffset || 0;\n originalAngle = this.markerStartAngle;\n } else {\n var _this$getEndTangent = this.getEndTangent(),\n _this$getEndTangent2 = _slicedToArray(_this$getEndTangent, 2),\n _p = _this$getEndTangent2[0],\n _p2 = _this$getEndTangent2[1];\n ox = _p2[0];\n oy = _p2[1];\n x = _p[0] - _p2[0];\n y = _p[1] - _p2[1];\n offset = markerEndOffset || 0;\n originalAngle = this.markerEndAngle;\n }\n rad = Math.atan2(y, x);\n\n // account for markerOffset\n marker.setLocalEulerAngles(rad * 180 / Math.PI + originalAngle);\n marker.setLocalPosition(ox + Math.cos(rad) * offset, oy + Math.sin(rad) * offset);\n }\n }, {\n key: \"placeMarkerMid\",\n value: function placeMarkerMid(marker) {\n var segments = this.parsedStyle.d.segments;\n // clear all existed markers\n this.markerMidList.forEach(function (marker) {\n marker.remove();\n });\n if (marker && isDisplayObject(marker)) {\n for (var i = 1; i < segments.length - 1; i++) {\n var _segments$i$currentPo = _slicedToArray(segments[i].currentPoint, 2),\n ox = _segments$i$currentPo[0],\n oy = _segments$i$currentPo[1];\n var cloned = i === 1 ? marker : marker.cloneNode(true);\n this.markerMidList.push(cloned);\n this.appendChild(cloned);\n cloned.setLocalPosition(ox, oy);\n // TODO: orient of marker\n }\n }\n }\n\n /**\n * Returns the total length of the path.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SVGGeometryElement/getTotalLength\n */\n }, {\n key: \"getTotalLength\",\n value: function getTotalLength() {\n return getOrCalculatePathTotalLength(this);\n }\n\n /**\n * Returns the point at a given distance along the path.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SVGGeometryElement/getPointAtLength\n */\n }, {\n key: \"getPointAtLength\",\n value: function getPointAtLength$1(distance) {\n var inWorldSpace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var absolutePath = this.parsedStyle.d.absolutePath;\n var _getPointAtLength2 = getPointAtLength(absolutePath, distance),\n x = _getPointAtLength2.x,\n y = _getPointAtLength2.y;\n var transformed = vec3.transformMat4(vec3.create(), vec3.fromValues(x, y, 0), inWorldSpace ? this.getWorldTransform() : this.getLocalTransform());\n\n // apply local transformation\n return new Point(transformed[0], transformed[1]);\n }\n\n /**\n * Returns the point at a given ratio of the total length in path.\n */\n }, {\n key: \"getPoint\",\n value: function getPoint(ratio) {\n var inWorldSpace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n return this.getPointAtLength(ratio * getOrCalculatePathTotalLength(this), inWorldSpace);\n }\n\n /**\n * Get start tangent vector\n */\n }, {\n key: \"getStartTangent\",\n value: function getStartTangent() {\n var segments = this.parsedStyle.d.segments;\n var result = [];\n if (segments.length > 1) {\n var startPoint = segments[0].currentPoint;\n var endPoint = segments[1].currentPoint;\n var tangent = segments[1].startTangent;\n result = [];\n if (tangent) {\n result.push([startPoint[0] - tangent[0], startPoint[1] - tangent[1]]);\n result.push([startPoint[0], startPoint[1]]);\n } else {\n result.push([endPoint[0], endPoint[1]]);\n result.push([startPoint[0], startPoint[1]]);\n }\n }\n return result;\n }\n\n /**\n * Get end tangent vector\n */\n }, {\n key: \"getEndTangent\",\n value: function getEndTangent() {\n var segments = this.parsedStyle.d.segments;\n var length = segments.length;\n var result = [];\n if (length > 1) {\n var startPoint = segments[length - 2].currentPoint;\n var endPoint = segments[length - 1].currentPoint;\n var tangent = segments[length - 1].endTangent;\n result = [];\n if (tangent) {\n result.push([endPoint[0] - tangent[0], endPoint[1] - tangent[1]]);\n result.push([endPoint[0], endPoint[1]]);\n } else {\n result.push([startPoint[0], startPoint[1]]);\n result.push([endPoint[0], endPoint[1]]);\n }\n }\n return result;\n }\n }]);\n}(DisplayObject);\nPath.PARSED_STYLE_LIST = new Set([].concat(_toConsumableArray(DisplayObject.PARSED_STYLE_LIST), ['d', 'markerStart', 'markerMid', 'markerEnd', 'markerStartOffset', 'markerEndOffset', 'isBillboard', 'isSizeAttenuation']));\n\nvar _excluded$2 = [\"style\"];\nvar Polygon = /*#__PURE__*/function (_DisplayObject) {\n function Polygon() {\n var _this;\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n style = _ref.style,\n rest = _objectWithoutProperties(_ref, _excluded$2);\n _classCallCheck(this, Polygon);\n _this = _callSuper(this, Polygon, [_objectSpread({\n type: Shape.POLYGON,\n style: style,\n initialParsedStyle: {\n points: {\n points: [],\n totalLength: 0,\n segments: []\n },\n miterLimit: 4,\n isClosed: true\n }\n }, rest)]);\n _this.markerStartAngle = 0;\n _this.markerEndAngle = 0;\n /**\n * markers placed at the mid\n */\n _this.markerMidList = [];\n var _this$parsedStyle = _this.parsedStyle,\n markerStart = _this$parsedStyle.markerStart,\n markerEnd = _this$parsedStyle.markerEnd,\n markerMid = _this$parsedStyle.markerMid;\n if (markerStart && isDisplayObject(markerStart)) {\n _this.markerStartAngle = markerStart.getLocalEulerAngles();\n _this.appendChild(markerStart);\n }\n if (markerMid && isDisplayObject(markerMid)) {\n _this.placeMarkerMid(markerMid);\n }\n if (markerEnd && isDisplayObject(markerEnd)) {\n _this.markerEndAngle = markerEnd.getLocalEulerAngles();\n _this.appendChild(markerEnd);\n }\n _this.transformMarker(true);\n _this.transformMarker(false);\n return _this;\n }\n _inherits(Polygon, _DisplayObject);\n return _createClass(Polygon, [{\n key: \"attributeChangedCallback\",\n value: function attributeChangedCallback(attrName, oldValue, newValue, prevParsedValue, newParsedValue) {\n if (attrName === 'points') {\n // recalc markers\n this.transformMarker(true);\n this.transformMarker(false);\n this.placeMarkerMid(this.parsedStyle.markerMid);\n } else if (attrName === 'markerStartOffset' || attrName === 'markerEndOffset') {\n this.transformMarker(true);\n this.transformMarker(false);\n } else if (attrName === 'markerStart') {\n if (prevParsedValue && isDisplayObject(prevParsedValue)) {\n this.markerStartAngle = 0;\n prevParsedValue.remove();\n }\n\n // CSSKeyword 'unset'\n if (newParsedValue && isDisplayObject(newParsedValue)) {\n this.markerStartAngle = newParsedValue.getLocalEulerAngles();\n this.appendChild(newParsedValue);\n this.transformMarker(true);\n }\n } else if (attrName === 'markerEnd') {\n if (prevParsedValue && isDisplayObject(prevParsedValue)) {\n this.markerEndAngle = 0;\n prevParsedValue.remove();\n }\n if (newParsedValue && isDisplayObject(newParsedValue)) {\n this.markerEndAngle = newParsedValue.getLocalEulerAngles();\n this.appendChild(newParsedValue);\n this.transformMarker(false);\n }\n } else if (attrName === 'markerMid') {\n this.placeMarkerMid(newParsedValue);\n }\n }\n }, {\n key: \"transformMarker\",\n value: function transformMarker(isStart) {\n var _this$parsedStyle2 = this.parsedStyle,\n markerStart = _this$parsedStyle2.markerStart,\n markerEnd = _this$parsedStyle2.markerEnd,\n markerStartOffset = _this$parsedStyle2.markerStartOffset,\n markerEndOffset = _this$parsedStyle2.markerEndOffset,\n P = _this$parsedStyle2.points;\n var _ref2 = P || {},\n points = _ref2.points;\n var marker = isStart ? markerStart : markerEnd;\n if (!marker || !isDisplayObject(marker) || !points) {\n return;\n }\n var rad = 0;\n var x;\n var y;\n var ox;\n var oy;\n var offset;\n var originalAngle;\n ox = points[0][0];\n oy = points[0][1];\n if (isStart) {\n x = points[1][0] - points[0][0];\n y = points[1][1] - points[0][1];\n offset = markerStartOffset || 0;\n originalAngle = this.markerStartAngle;\n } else {\n var length = points.length;\n if (!this.parsedStyle.isClosed) {\n ox = points[length - 1][0];\n oy = points[length - 1][1];\n x = points[length - 2][0] - points[length - 1][0];\n y = points[length - 2][1] - points[length - 1][1];\n } else {\n x = points[length - 1][0] - points[0][0];\n y = points[length - 1][1] - points[0][1];\n }\n offset = markerEndOffset || 0;\n originalAngle = this.markerEndAngle;\n }\n rad = Math.atan2(y, x);\n\n // account for markerOffset\n marker.setLocalEulerAngles(rad * 180 / Math.PI + originalAngle);\n marker.setLocalPosition(ox + Math.cos(rad) * offset, oy + Math.sin(rad) * offset);\n }\n }, {\n key: \"placeMarkerMid\",\n value: function placeMarkerMid(marker) {\n var P = this.parsedStyle.points;\n var _ref3 = P || {},\n points = _ref3.points;\n\n // clear all existed markers\n this.markerMidList.forEach(function (marker) {\n marker.remove();\n });\n this.markerMidList = [];\n if (marker && isDisplayObject(marker) && points) {\n for (var i = 1; i < (this.parsedStyle.isClosed ? points.length : points.length - 1); i++) {\n var ox = points[i][0];\n var oy = points[i][1];\n var cloned = i === 1 ? marker : marker.cloneNode(true);\n this.markerMidList.push(cloned);\n this.appendChild(cloned);\n cloned.setLocalPosition(ox, oy);\n\n // TODO: orient of marker\n }\n }\n }\n }]);\n}(DisplayObject);\nPolygon.PARSED_STYLE_LIST = new Set([].concat(_toConsumableArray(DisplayObject.PARSED_STYLE_LIST), ['points', 'markerStart', 'markerMid', 'markerEnd', 'markerStartOffset', 'markerEndOffset', 'isClosed', 'isBillboard', 'isSizeAttenuation']));\n\nvar _excluded$1 = [\"style\"];\n/**\n * Polyline inherits the marker-related capabilities of Polygon.\n */\nvar Polyline = /*#__PURE__*/function (_Polygon) {\n function Polyline() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n style = _ref.style,\n rest = _objectWithoutProperties(_ref, _excluded$1);\n _classCallCheck(this, Polyline);\n return _callSuper(this, Polyline, [_objectSpread({\n type: Shape.POLYLINE,\n style: style,\n initialParsedStyle: {\n points: {\n points: [],\n totalLength: 0,\n segments: []\n },\n miterLimit: 4,\n isClosed: false\n }\n }, rest)]);\n }\n _inherits(Polyline, _Polygon);\n return _createClass(Polyline, [{\n key: \"getTotalLength\",\n value: function getTotalLength() {\n return getOrCalculatePolylineTotalLength(this);\n }\n }, {\n key: \"getPointAtLength\",\n value: function getPointAtLength(distance) {\n var inWorldSpace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n return this.getPoint(distance / this.getTotalLength(), inWorldSpace);\n }\n }, {\n key: \"getPoint\",\n value: function getPoint(ratio) {\n var inWorldSpace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var points = this.parsedStyle.points.points;\n if (this.parsedStyle.points.segments.length === 0) {\n var segments = [];\n var tempLength = 0;\n var segmentT;\n var segmentL;\n var totalLength = this.getTotalLength();\n points.forEach(function (p, i) {\n if (points[i + 1]) {\n segmentT = [0, 0];\n segmentT[0] = tempLength / totalLength;\n segmentL = lineLength(p[0], p[1], points[i + 1][0], points[i + 1][1]);\n tempLength += segmentL;\n segmentT[1] = tempLength / totalLength;\n segments.push(segmentT);\n }\n });\n this.parsedStyle.points.segments = segments;\n }\n var subt = 0;\n var index = 0;\n this.parsedStyle.points.segments.forEach(function (v, i) {\n if (ratio >= v[0] && ratio <= v[1]) {\n subt = (ratio - v[0]) / (v[1] - v[0]);\n index = i;\n }\n });\n var _linePointAt = linePointAt(points[index][0], points[index][1], points[index + 1][0], points[index + 1][1], subt),\n x = _linePointAt.x,\n y = _linePointAt.y;\n var transformed = vec3.transformMat4(vec3.create(), vec3.fromValues(x, y, 0), inWorldSpace ? this.getWorldTransform() : this.getLocalTransform());\n\n // apply local transformation\n return new Point(transformed[0], transformed[1]);\n }\n }, {\n key: \"getStartTangent\",\n value: function getStartTangent() {\n var points = this.parsedStyle.points.points;\n var result = [];\n result.push([points[1][0], points[1][1]]);\n result.push([points[0][0], points[0][1]]);\n return result;\n }\n }, {\n key: \"getEndTangent\",\n value: function getEndTangent() {\n var points = this.parsedStyle.points.points;\n var l = points.length - 1;\n var result = [];\n result.push([points[l - 1][0], points[l - 1][1]]);\n result.push([points[l][0], points[l][1]]);\n return result;\n }\n }]);\n}(Polygon);\nPolyline.PARSED_STYLE_LIST = new Set([].concat(_toConsumableArray(Polygon.PARSED_STYLE_LIST), ['points', 'markerStart', 'markerMid', 'markerEnd', 'markerStartOffset', 'markerEndOffset', 'isBillboard']));\n\nvar Rect = /*#__PURE__*/function (_DisplayObject) {\n function Rect() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _classCallCheck(this, Rect);\n return _callSuper(this, Rect, [_objectSpread({\n type: Shape.RECT\n }, options)]);\n }\n _inherits(Rect, _DisplayObject);\n return _createClass(Rect);\n}(DisplayObject);\nRect.PARSED_STYLE_LIST = new Set([].concat(_toConsumableArray(DisplayObject.PARSED_STYLE_LIST), ['x', 'y', 'z', 'width', 'height', 'isBillboard', 'isSizeAttenuation', 'radius']));\n\nvar _excluded = [\"style\"];\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SVGTextElement\n */\nvar Text = /*#__PURE__*/function (_DisplayObject) {\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SVGTextContentElement#constants\n */\n // LENGTHADJUST_SPACING: number = 1;\n // LENGTHADJUST_SPACINGANDGLYPHS: number = 2;\n // LENGTHADJUST_UNKNOWN: number = 0;\n\n function Text() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n style = _ref.style,\n rest = _objectWithoutProperties(_ref, _excluded);\n _classCallCheck(this, Text);\n return _callSuper(this, Text, [_objectSpread({\n type: Shape.TEXT,\n style: _objectSpread({\n fill: 'black'\n }, style)\n }, rest)]);\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SVGTextContentElement\n */\n _inherits(Text, _DisplayObject);\n return _createClass(Text, [{\n key: \"getComputedTextLength\",\n value: function getComputedTextLength() {\n var _this$parsedStyle$met;\n this.getGeometryBounds();\n return ((_this$parsedStyle$met = this.parsedStyle.metrics) === null || _this$parsedStyle$met === void 0 ? void 0 : _this$parsedStyle$met.maxLineWidth) || 0;\n }\n }, {\n key: \"getLineBoundingRects\",\n value: function getLineBoundingRects() {\n var _this$parsedStyle$met2;\n this.getGeometryBounds();\n return ((_this$parsedStyle$met2 = this.parsedStyle.metrics) === null || _this$parsedStyle$met2 === void 0 ? void 0 : _this$parsedStyle$met2.lineMetrics) || [];\n }\n }, {\n key: \"isOverflowing\",\n value: function isOverflowing() {\n this.getGeometryBounds();\n return !!this.parsedStyle.isOverflowing;\n }\n }]);\n}(DisplayObject);\nText.PARSED_STYLE_LIST = new Set([].concat(_toConsumableArray(DisplayObject.PARSED_STYLE_LIST), ['x', 'y', 'z', 'isBillboard', 'billboardRotation', 'isSizeAttenuation', 'text', 'textAlign', 'textBaseline', 'fontStyle', 'fontSize', 'fontFamily', 'fontWeight', 'fontVariant', 'lineHeight', 'letterSpacing', 'leading', 'wordWrap', 'wordWrapWidth', 'maxLines', 'textOverflow', 'isOverflowing', 'textPath', 'textDecorationLine', 'textDecorationColor', 'textDecorationStyle', 'textPathSide', 'textPathStartOffset', 'metrics', 'dx', 'dy']));\n\n/**\n * canvas.customElements\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry\n */\nvar CustomElementRegistry = /*#__PURE__*/function () {\n function CustomElementRegistry() {\n _classCallCheck(this, CustomElementRegistry);\n this.registry = {};\n this.define(Shape.CIRCLE, Circle);\n this.define(Shape.ELLIPSE, Ellipse);\n this.define(Shape.RECT, Rect);\n this.define(Shape.IMAGE, Image);\n this.define(Shape.LINE, Line);\n this.define(Shape.GROUP, Group);\n this.define(Shape.PATH, Path);\n this.define(Shape.POLYGON, Polygon);\n this.define(Shape.POLYLINE, Polyline);\n this.define(Shape.TEXT, Text);\n this.define(Shape.HTML, HTML);\n }\n return _createClass(CustomElementRegistry, [{\n key: \"define\",\n value: function define(name, constructor) {\n this.registry[name] = constructor;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry/get\n */\n }, {\n key: \"get\",\n value: function get(name) {\n return this.registry[name];\n }\n }]);\n}();\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/CSS/RegisterProperty#parameters\n */\n\n/**\n * holds useful CSS-related methods.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/CSS\n *\n * * CSS Typed OM @see https://developer.mozilla.org/en-US/docs/Web/API/CSS/factory_functions\n * * register property @see https://developer.mozilla.org/en-US/docs/Web/API/CSS/RegisterProperty\n * * CSS Layout API\n */\nvar CSS = {\n /**\n * \n * @see https://drafts.csswg.org/css-values-4/#number-value\n */\n number: function number(n) {\n return new CSSUnitValue(n);\n },\n /**\n * \n * @see https://drafts.csswg.org/css-values-4/#percentage-value\n */\n percent: function percent(n) {\n return new CSSUnitValue(n, '%');\n },\n /**\n * \n */\n px: function px(n) {\n return new CSSUnitValue(n, 'px');\n },\n /**\n * \n */\n em: function em(n) {\n return new CSSUnitValue(n, 'em');\n },\n rem: function rem(n) {\n return new CSSUnitValue(n, 'rem');\n },\n /**\n * \n */\n deg: function deg(n) {\n return new CSSUnitValue(n, 'deg');\n },\n /**\n * \n */\n grad: function grad(n) {\n return new CSSUnitValue(n, 'grad');\n },\n /**\n * \n */\n rad: function rad(n) {\n return new CSSUnitValue(n, 'rad');\n },\n /**\n * \n */\n turn: function turn(n) {\n return new CSSUnitValue(n, 'turn');\n },\n /**\n *